[cgkit-commits] cgkit2/cgkit maimport.py,1.11,1.12
Brought to you by:
mbaas
From: Matthias B. <mb...@us...> - 2005-06-15 19:20:40
|
Update of /cvsroot/cgkit/cgkit2/cgkit In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2404 Modified Files: maimport.py Log Message: Import rigid body attributes / remove 'axis' code that transforms the polys. This doesn't work when the node has children. Index: maimport.py =================================================================== RCS file: /cvsroot/cgkit/cgkit2/cgkit/maimport.py,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** maimport.py 14 Jun 2005 18:32:06 -0000 1.11 --- maimport.py 15 Jun 2005 19:20:29 -0000 1.12 *************** *** 22,29 **** import sys ! import mayaascii import pluginmanager import freecamera ! import quadrics, box, plane, polyhedron, joint import glpointlight, glfreespotlight, glfreedistantlight from geomobject import * --- 22,29 ---- import sys ! import mayaascii, cmds import pluginmanager import freecamera ! import quadrics, box, plane, polyhedron, joint, trimesh, trimeshgeom import glpointlight, glfreespotlight, glfreedistantlight from geomobject import * *************** *** 346,351 **** edges = node.getAttrValue("edge", "ed", "long3", None, []) faces = node.getAttrValue("face", "fc", "polyFaces", None, []) ! poly = polyhedron.Polyhedron(verts=verts, **args) ! geom = poly.geom # Initialize the polygons... geom.setNumPolys(len(faces)) --- 346,351 ---- edges = node.getAttrValue("edge", "ed", "long3", None, []) faces = node.getAttrValue("face", "fc", "polyFaces", None, []) ! polyobj = polyhedron.Polyhedron(verts=verts, **args) ! geom = polyobj.geom # Initialize the polygons... geom.setNumPolys(len(faces)) *************** *** 415,419 **** v += vec3(p) geom.verts[i] = v ! else: creator = self.nodes.get(n) --- 415,429 ---- v += vec3(p) geom.verts[i] = v ! ! # Convert the poly to a trimesh if it's a rigid body ! self.getRigidBodyArgs(parentnode, args) ! if args["dynamics"]: ! tm = trimeshgeom.TriMeshGeom() ! polyobj.geom.convert(tm) ! cmds.delete(polyobj) ! polyobj = trimesh.TriMesh(**args) ! polyobj.geom = tm ! ! self.newWorldObject(polyobj, node.getParentName()) else: creator = self.nodes.get(n) *************** *** 421,470 **** # Sphere? if meshtype=="polySphere": ! nod,attr = parentnode.getOutAttr("worldMatrix", "wm", "rigidBody") ! dynamics = (nod!=None) ! r = creator.getAttrValue("radius", "r", "float", 1, 1.0) ! segsu = creator.getAttrValue("subdivisionAxis", "sa", "int", 1, 20) ! segsv = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 20) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! args["transform"] *= self.axisToTransform(ax) ! if ax==vec3(1,0,0): ! args["transform"] *= mat4(1).rotation(pi/4, vec3(0,0,1)) ! self.getRigidBodyArgs(parentnode, args) ! s = quadrics.Sphere(radius=r, ! segmentsu=segsu, segmentsv=segsv, ! **args) ! self.newWorldObject(s, node.getParentName()) # Cube? elif meshtype=="polyCube": ! w = creator.getAttrValue("width", "w", "float", 1, 1.0) ! h = creator.getAttrValue("height", "h", "float", 1, 1.0) ! d = creator.getAttrValue("depth", "d", "float", 1, 1.0) ! sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1) ! sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1) ! sd = creator.getAttrValue("subdivisionDepth", "sd", "int", 1, 1) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! args["transform"] *= self.axisToTransform(ax) ! if ax==vec3(1,0,0): ! args["transform"] *= mat4(1).rotation(pi/2, vec3(0,0,1)) ! self.getRigidBodyArgs(parentnode, args) ! b = box.Box(lx=w, ly=d, lz=h, ! segmentsx=sw, segmentsy=sd, segmentsz=sh, ! **args) ! self.newWorldObject(b, node.getParentName()) # Plane? elif meshtype=="polyPlane": ! w = creator.getAttrValue("width", "w", "float", 1, 1.0) ! h = creator.getAttrValue("height", "h", "float", 1, 1.0) ! sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1) ! sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! args["transform"] *= self.axisToTransform(ax) ! self.getRigidBodyArgs(parentnode, args) ! if "static" in args: ! del args["static"] ! p = plane.Plane(lx=w, ly=h, ! segmentsx=sw, segmentsy=sh, ! **args) ! self.newWorldObject(p, node.getParentName()) def getRigidBodyArgs(self, transform, res): --- 431,535 ---- # Sphere? if meshtype=="polySphere": ! self.createSphere(creator, parentnode, node, args) # Cube? elif meshtype=="polyCube": ! self.createBox(creator, parentnode, node, args) # Plane? elif meshtype=="polyPlane": ! self.createPlane(creator, parentnode, node, args) ! ! def createSphere(self, creator, parentnode, node, args): ! """Creates a true sphere from a polySphere node. ! ! creator is an import Node which must be of type polySphere. ! parentnode is an import Node of type transform. It's the parent of ! node which is the actual mesh node. ! args is a dictionary that already contains the basic WorldObject ! arguments that can be passed to the constructor. ! """ ! nod,attr = parentnode.getOutAttr("worldMatrix", "wm", "rigidBody") ! dynamics = (nod!=None) ! r = creator.getAttrValue("radius", "r", "float", 1, 1.0) ! segsu = creator.getAttrValue("subdivisionAxis", "sa", "int", 1, 20) ! segsv = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 20) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! # args["transform"] *= self.axisToTransform(ax) ! # if ax==vec3(1,0,0): ! # args["transform"] *= mat4(1).rotation(pi/4, vec3(0,0,1)) ! self.getRigidBodyArgs(parentnode, args) ! s = quadrics.Sphere(radius=r, ! segmentsu=segsu, segmentsv=segsv, ! **args) ! self.newWorldObject(s, node.getParentName()) ! ! def createBox(self, creator, parentnode, node, args): ! """Creates a true box from a polyCube node. ! ! creator is an import Node which must be of type polyCube. ! parentnode is an import Node of type transform. It's the parent of ! node which is the actual mesh node. ! args is a dictionary that already contains the basic WorldObject ! arguments that can be passed to the constructor. ! """ ! w = creator.getAttrValue("width", "w", "float", 1, 1.0) ! h = creator.getAttrValue("height", "h", "float", 1, 1.0) ! d = creator.getAttrValue("depth", "d", "float", 1, 1.0) ! sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1) ! sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1) ! sd = creator.getAttrValue("subdivisionDepth", "sd", "int", 1, 1) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! ! # "Rename" width/height/depth to match the axis setting... ! if ax==vec3(1,0,0): ! tmp = d ! d = w ! w = h ! h = tmp ! tmp = sd ! sd = sw ! sw = sh ! sh = tmp ! elif ax==vec3(0,1,0): ! tmp = d ! d = h ! h = tmp ! tmp = sd ! sd = sh ! sh = tmp ! ! self.getRigidBodyArgs(parentnode, args) ! b = box.Box(lx=w, ly=d, lz=h, ! segmentsx=sw, segmentsy=sd, segmentsz=sh, ! **args) ! self.newWorldObject(b, node.getParentName()) ! ! def createPlane(self, creator, parentnode, node, args): ! """Creates a true plane from a polyPlane node. ! ! creator is an import Node which must be of type polyPlane. ! parentnode is an import Node of type transform. It's the parent of ! node which is the actual mesh node. ! args is a dictionary that already contains the basic WorldObject ! arguments that can be passed to the constructor. ! """ ! w = creator.getAttrValue("width", "w", "float", 1, 1.0) ! h = creator.getAttrValue("height", "h", "float", 1, 1.0) ! sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1) ! sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1) ! ax = vec3(creator.getAttrValue("axis", "ax", "double3", 1, vec3(0,1,0))) ! ! if ax!=vec3(0,0,1): ! print "WARNING: Plane %s ignored because axis!=z"%node.getName() ! return ! ! # args["transform"] *= self.axisToTransform(ax) ! self.getRigidBodyArgs(parentnode, args) ! if "static" in args: ! del args["static"] ! p = plane.Plane(lx=w, ly=h, ! segmentsx=sw, segmentsy=sh, ! **args) ! self.newWorldObject(p, node.getParentName()) ! def getRigidBodyArgs(self, transform, res): *************** *** 485,495 **** ! def axisToTransform(self, axis): ! if axis==vec3(1,0,0): ! return mat4(1).rotation(pi/2, vec3(0,1,0)) ! elif axis==vec3(0,1,0): ! return mat4(1).rotation(pi/2, vec3(1,0,0)) ! else: ! return mat4(1) ### Helpers: --- 550,560 ---- ! # def axisToTransform(self, axis): ! # if axis==vec3(1,0,0): ! # return mat4(1).rotation(pi/2, vec3(0,1,0)) ! # elif axis==vec3(0,1,0): ! # return mat4(1).rotation(pi/2, vec3(1,0,0)) ! # else: ! # return mat4(1) ### Helpers: *************** *** 546,552 **** res["parent"] = parent # Compute transform ! t = vec3(node.getAttrValue("translate", "t", "double3", 1, vec3(0))) ! r = vec3(node.getAttrValue("rotate", "r", "double3", 1, vec3(0))) s = vec3(node.getAttrValue("scale", "s", "double3", 1, vec3(1))) sp = vec3(node.getAttrValue("scalePivot", "sp", "double3", 1, vec3(0))) --- 611,626 ---- res["parent"] = parent + # Check if the world matrix is connected to a rigid body. + # In this case, the rigid body stores the initial position and + # orientation + rbnode,attr = node.getOutAttr("worldMatrix", "wm", "rigidBody") + # Compute transform ! if rbnode==None: ! t = vec3(node.getAttrValue("translate", "t", "double3", 1, vec3(0))) ! r = vec3(node.getAttrValue("rotate", "r", "double3", 1, vec3(0))) ! else: ! t = vec3(rbnode.getAttrValue("initialPosition", "ip", "double3", 1, vec3(0))) ! r = vec3(rbnode.getAttrValue("initialOrientation", "ior", "double3", 1, vec3(0))) s = vec3(node.getAttrValue("scale", "s", "double3", 1, vec3(1))) sp = vec3(node.getAttrValue("scalePivot", "sp", "double3", 1, vec3(0))) |