def testConversion(self): g = IECore.Group() g.setTransform( IECore.MatrixTransform(IECore.M44f.createScaled(IECore.V3f(2)))) c1 = IECore.Group() c1.addChild( IECore.MeshPrimitive.createBox( IECore.Box3f(IECore.V3f(-1), IECore.V3f(1)))) c1.setTransform( IECore.MatrixTransform( IECore.M44f.createTranslated(IECore.V3f(2, 0, 0)))) g.addChild(c1) c2 = IECore.Group() c2.addChild( IECore.MeshPrimitive.createBox( IECore.Box3f(IECore.V3f(-1), IECore.V3f(1)))) c2.setTransform( IECore.MatrixTransform( IECore.M44f.createTranslated(IECore.V3f(-2, 0, 0)))) g.addChild(c2) p = maya.cmds.createNode("transform") IECoreMaya.ToMayaGroupConverter(g).convert(p) mg = maya.cmds.listRelatives(p, fullPath=True) self.assertEqual(len(mg), 1) self.assertEqual(maya.cmds.nodeType(mg[0]), "transform") self.assertEqual(maya.cmds.getAttr(mg[0] + ".translate"), [(0, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mg[0] + ".rotate"), [(0, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mg[0] + ".scale"), [(2, 2, 2)]) mgg = maya.cmds.listRelatives(mg[0], fullPath=True) self.assertEqual(len(mgg), 2) self.assertEqual(maya.cmds.nodeType(mgg[0]), "transform") self.assertEqual(maya.cmds.getAttr(mgg[0] + ".translate"), [(2, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mgg[0] + ".rotate"), [(0, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mgg[0] + ".scale"), [(1, 1, 1)]) self.assertEqual(maya.cmds.nodeType(mgg[1]), "transform") self.assertEqual(maya.cmds.getAttr(mgg[1] + ".translate"), [(-2, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mgg[1] + ".rotate"), [(0, 0, 0)]) self.assertEqual(maya.cmds.getAttr(mgg[1] + ".scale"), [(1, 1, 1)]) m1 = maya.cmds.listRelatives(mgg[0], fullPath=True) self.assertEqual(len(m1), 1) self.assertEqual(maya.cmds.nodeType(m1[0]), "mesh") self.assertEqual(maya.cmds.polyEvaluate(m1[0], face=True), 6) m2 = maya.cmds.listRelatives(mgg[1], fullPath=True) self.assertEqual(len(m2), 1) self.assertEqual(maya.cmds.nodeType(m2[0]), "mesh") self.assertEqual(maya.cmds.polyEvaluate(m2[0], face=True), 6)
def testNamedConversion(self): g = IECoreScene.Group() g.addState( IECoreScene.AttributeState({"name": IECore.StringData("topLevel")})) c1 = IECoreScene.Group() c1.addState( IECoreScene.AttributeState( {"name": IECore.StringData("topLevel/child1")})) g.addChild(c1) c2 = IECoreScene.Group() c2.addState( IECoreScene.AttributeState({"name": IECore.StringData("child2")})) g.addChild(c2) c3 = IECoreScene.Group() c3.addState( IECoreScene.AttributeState( {"name": IECore.StringData("topLevel/child1/child3")})) c1.addChild(c3) # nameless group g.addChild(IECoreScene.Group()) p = maya.cmds.createNode("transform") IECoreMaya.ToMayaGroupConverter(g).convert(p) mg = maya.cmds.listRelatives(p, fullPath=True, ad=True) expectedNames = set([ "|transform1|topLevel|child1|child3", "|transform1|topLevel|child1", "|transform1|topLevel|child2", "|transform1|topLevel|transform2", "|transform1|topLevel" ]) actualNames = set() for name in mg: actualNames.add(str(name)) self.assertEqual(expectedNames, actualNames)
def convertToGeometry(self, parent=None): procedural = self.getProcedural() if not procedural: return None renderer = IECore.CapturingRenderer() selected = self.selectedComponentNames() objectFilter = set() for sel in selected: # we want to output the selected components, and all of their children: objectFilter.add(sel) objectFilter.add(sel + "/*") if len(objectFilter): renderer.setOption("cp:objectFilter", IECore.StringVectorData(list(objectFilter))) with IECore.WorldBlock(renderer): procedural.render(renderer) world = renderer.world() # These things have a tendency to generate big, useless stacks of groups. # Only the tree structure is actually useful to us, so lets remove these if possible: self.__collapseGroups(world) self.__removeChildlessGroups(world) if parent is None: parent = maya.cmds.listRelatives(self.fullPathName(), fullPath=True, parent=True) if parent is not None: parent = parent[0] IECoreMaya.ToMayaGroupConverter(world).convert(parent) return maya.cmds.listRelatives(parent, fullPath=True)[-1]