Beispiel #1
0
    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]