From: Timothy S. <pe...@us...> - 2004-08-09 13:16:58
|
Update of /cvsroot/pyode/pyode/xode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30068/xode Modified Files: geom.py parser.py Log Message: Fixed the XODE parser to work with the new Space classes and added a mechanism to allow the default Space class to be chosen. Index: geom.py =================================================================== RCS file: /cvsroot/pyode/pyode/xode/geom.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** geom.py 1 Aug 2004 16:47:36 -0000 1.3 --- geom.py 9 Aug 2004 13:16:48 -0000 1.4 *************** *** 18,22 **** node.TreeNode.__init__(self, name, parent) ! self._space = self.getFirstAncestor(ode.Space).getODEObject() self._transformed = False --- 18,22 ---- node.TreeNode.__init__(self, name, parent) ! self._space = self.getFirstAncestor(ode.SpaceBase).getODEObject() self._transformed = False Index: parser.py =================================================================== RCS file: /cvsroot/pyode/pyode/xode/parser.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** parser.py 1 Aug 2004 16:47:36 -0000 1.3 --- parser.py 9 Aug 2004 13:16:48 -0000 1.4 *************** *** 30,33 **** --- 30,34 ---- | from xode import parser + | import ode | | f = file('xode-document.xml') *************** *** 57,62 **** --- 58,105 ---- """ An XODE parser. + + Parameters + ========== + + Certain aspects of the parsing can be controlled by setting parameters with + L{setParams()}. + + C{spaceFactory} + --------------- + + C{spaceFactory} can be set to a callable object that creates instances + which inherit from L{ode.SpaceBase}. This factory will be used by the + parser to create Space objects for <space> tags unless the class is + overridden in the XODE file. The default behavior is to use the + L{ode.SimpleSpace} class. + + Example using L{ode.HashSpace}:: + + | from xode import parser + | import ode + | + | p = parser.Parser() + | p.setParams(spaceFactory=ode.HashSpace) + + Example using L{ode.QuadTreeSpace}:: + + | from xode import parser + | import ode + | + | def makeSpace(): + | return ode.QuadTreeSpace((0, 0, 0), (2, 2, 2), 3) + | + | p = parser.Parser() + | p.setParams(spaceFactory=makeSpace) """ + def __init__(self): + """ + Initialise the parser. + """ + + self._params = {} + self.setParams(spaceFactory=ode.SimpleSpace) + def _nullHandler(self, *args, **kwargs): return *************** *** 148,151 **** --- 191,213 ---- return self._root + def setParams(self, **params): + """ + Sets some parse parameters. + """ + + self._params.update(params) + + def getParam(self, name): + """ + @param name: The parameter name. + @type name: str + + @return: The value of the given parameter. + + @raise KeyError: If the parameter is not defined. + """ + + return self._params[name] + class Root(node.TreeNode): """ *************** *** 228,232 **** def __init__(self, name, parent): node.TreeNode.__init__(self, name, parent) - self.setODEObject(ode.Space()) def takeParser(self, parser): --- 290,293 ---- *************** *** 238,241 **** --- 299,304 ---- @type parser: instance of L{Parser} """ + + self.setODEObject(parser.getParam('spaceFactory')()) self._parser = parser |