From: Timothy S. <pe...@us...> - 2004-08-01 16:47:45
|
Update of /cvsroot/pyode/pyode/xode In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23500/xode Modified Files: geom.py parser.py Log Message: - Added support for TriMesh to the XODE parser. - Changed TriMeshData.build to use dGeomTriMeshDataBuildSimple instead of dGeomTriMeshBuildSingle1. Index: geom.py =================================================================== RCS file: /cvsroot/pyode/pyode/xode/geom.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** geom.py 28 Jul 2004 18:38:10 -0000 1.2 --- geom.py 1 Aug 2004 16:47:36 -0000 1.3 *************** *** 58,62 **** self._parseGeomSphere(attrs) elif (name == 'trimesh'): ! raise NotImplementedError() elif (name == 'geom'): g = Geom(nodeName, self) --- 58,62 ---- self._parseGeomSphere(attrs) elif (name == 'trimesh'): ! self._parseTriMesh(attrs) elif (name == 'geom'): g = Geom(nodeName, self) *************** *** 84,88 **** self._parser.pop() ! def _setObject(self, kclass, *args): """ Create the Geom object and apply transforms. Only call for placeable --- 84,88 ---- self._parser.pop() ! def _setObject(self, kclass, **kwargs): """ Create the Geom object and apply transforms. Only call for placeable *************** *** 93,97 **** # The Geom is independant so it can have its own transform ! obj = kclass(*((self._space,) + args)) t = self.getTransform() --- 93,98 ---- # The Geom is independant so it can have its own transform ! kwargs['space'] = self._space ! obj = kclass(**kwargs) t = self.getTransform() *************** *** 106,110 **** # to the body. ! obj = kclass(*((None,) + args)) t = self.getTransform(self._body) --- 107,112 ---- # to the body. ! kwargs['space'] = None ! obj = kclass(**kwargs) t = self.getTransform(self._body) *************** *** 118,122 **** self.setODEObject(trans) else: ! obj = kclass(*((self._space,) + args)) obj.setBody(self._body.getODEObject()) self.setODEObject(obj) --- 120,125 ---- self.setODEObject(trans) else: ! kwargs['space'] = self._space ! obj = kclass(**kwargs) obj.setBody(self._body.getODEObject()) self.setODEObject(obj) *************** *** 137,141 **** lz = float(attrs['sizez']) ! self._setObject(ode.GeomBox, (lx, ly, lz)) self._parser.push(startElement=start, endElement=end) --- 140,144 ---- lz = float(attrs['sizez']) ! self._setObject(ode.GeomBox, lengths=(lx, ly, lz)) 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) --- 157,161 ---- length = float(attrs['length']) ! self._setObject(ode.GeomCCylinder, radius=radius, length=length) 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) --- 173,177 ---- radius = float(attrs['radius']) ! self._setObject(ode.GeomSphere, radius=radius) self._parser.push(startElement=start, endElement=end) *************** *** 207,208 **** --- 210,237 ---- self.setODEObject(ode.GeomRay(self._space, length)) self._parser.push(startElement=start, endElement=end) + + def _parseTriMesh(self, attrs): + vertices = [] + triangles = [] + + def start(name, attrs): + if (name == 'vertices'): + pass + elif (name == 'triangles'): + pass + elif (name == 'v'): + vertices.append(self._parser.parseVector(attrs)) + elif (name == 't'): + tri = int(attrs['ia'])-1, int(attrs['ib'])-1, int(attrs['ic'])-1 + triangles.append(tri) + else: + raise errors.ChildError('trimesh', name) + + def end(name): + if (name == 'trimesh'): + data = ode.TriMeshData() + data.build(vertices, triangles) + self._setObject(ode.GeomTriMesh, data=data) + self._parser.pop() + + self._parser.push(startElement=start, endElement=end) Index: parser.py =================================================================== RCS file: /cvsroot/pyode/pyode/xode/parser.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** parser.py 16 Jul 2004 11:45:17 -0000 1.2 --- parser.py 1 Aug 2004 16:47:36 -0000 1.3 *************** *** 18,26 **** Currently, the following features of XODE are not supported: ! - Geoms ! - Quaternion and axis-angle rotation modes. - Groups ! - Joints other than BallJoint. ! - Extension support. Usage --- 18,25 ---- Currently, the following features of XODE are not supported: ! - Quaternion and axis-angle rotation modes - Groups ! - Joints other than BallJoint ! - Extension support Usage |