From: Timothy S. <pe...@us...> - 2004-07-28 18:38:19
|
Update of /cvsroot/pyode/pyode/xode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1457/xode Modified Files: geom.py Log Message: Fixed bug where Geoms were already inserted into a space before encapsulating in a GeomTransform. Index: geom.py =================================================================== RCS file: /cvsroot/pyode/pyode/xode/geom.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** geom.py 16 Jul 2004 11:45:17 -0000 1.1 --- geom.py 28 Jul 2004 18:38:10 -0000 1.2 *************** *** 81,115 **** if (obj is None): raise errors.InvalidError('No geom type element found.') ! if (not obj.placeable()): ! # Non-placeable geoms cannot be attached to bodies or be ! # transformed ! self._parser.pop() ! return ! if (self._body is None): ! # The Geom is independant so it can have its own transform ! ! t = self.getTransform() ! obj.setPosition(t.getPosition()) ! obj.setRotation(t.getRotation()) ! elif (self._transformed): ! # The Geom is attached to a body so to transform it, it must ! # by placed in a GeomTransform and its transform is relative ! # to the body. ! t = self.getTransform(self._body) ! obj.setPosition(t.getPosition()) ! obj.setRotation(t.getRotation()) ! ! trans = ode.GeomTransform(self._space) ! trans.setGeom(obj) ! trans.setBody(self._body.getODEObject()) ! ! self.setODEObject(trans) ! else: ! obj.setBody(self._body.getODEObject()) ! self._parser.pop() def _parseGeomBox(self, attrs): --- 81,124 ---- if (obj is None): raise errors.InvalidError('No geom type element found.') + + self._parser.pop() ! def _setObject(self, kclass, *args): ! """ ! Create the Geom object and apply transforms. Only call for placeable ! Geoms. ! """ ! ! if (self._body is None): ! # The Geom is independant so it can have its own transform ! obj = kclass(*((self._space,) + args)) ! t = self.getTransform() ! obj.setPosition(t.getPosition()) ! obj.setRotation(t.getRotation()) ! self.setODEObject(obj) ! ! elif (self._transformed): ! # The Geom is attached to a body so to transform it, it must ! # by placed in a GeomTransform and its transform is relative ! # to the body. ! ! obj = kclass(*((None,) + args)) ! ! t = self.getTransform(self._body) ! obj.setPosition(t.getPosition()) ! obj.setRotation(t.getRotation()) ! ! trans = ode.GeomTransform(self._space) ! trans.setGeom(obj) ! trans.setBody(self._body.getODEObject()) ! ! self.setODEObject(trans) ! else: ! obj = kclass(*((self._space,) + args)) ! obj.setBody(self._body.getODEObject()) ! self.setODEObject(obj) def _parseGeomBox(self, attrs): *************** *** 128,132 **** lz = float(attrs['sizez']) ! self.setODEObject(ode.GeomBox(self._space, (lx, ly, lz))) self._parser.push(startElement=start, endElement=end) --- 137,141 ---- lz = float(attrs['sizez']) ! self._setObject(ode.GeomBox, (lx, ly, lz)) self._parser.push(startElement=start, endElement=end) *************** *** 145,149 **** length = float(attrs['length']) ! self.setODEObject(ode.GeomCCylinder(self._space, radius, length)) self._parser.push(startElement=start, endElement=end) --- 154,158 ---- length = float(attrs['length']) ! self._setObject(ode.GeomCCylinder, radius, length) self._parser.push(startElement=start, endElement=end) *************** *** 161,165 **** radius = float(attrs['radius']) ! self.setODEObject(ode.GeomSphere(self._space, radius)) self._parser.push(startElement=start, endElement=end) --- 170,174 ---- radius = float(attrs['radius']) ! self._setObject(ode.GeomSphere, radius) self._parser.push(startElement=start, endElement=end) |