예제 #1
0
    def testCleanExistingLayers(self):
        exampleData = """<?xml version="1.0" encoding="UTF-8"?>
                            <ngstLayerData version="1.0">
                                <layer enabled="yes" mask="" name="imported layer 1" opacity="1">
                                    <influence index="0" name="joint1" weights="1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0"/>
                                </layer>
                            </ngstLayerData>
                        """
        self.writeFile(self.exportName, exampleData)

        openMayaFile('normalization.ma')
        cmds.select('testMesh')
        self.mll.setCurrentMesh('testMesh')
        self.mll.initLayers()
        self.mll.createLayer("one")
        self.mll.createLayer("two")
        
        self.assertEquals(len(list(self.mll.listLayers())),2)
        
        options = ImportOptions()
        options.keepExistingLayers = False
        
        a = ImportAction(ownerUI=None, ioFormat=Formats.getXmlFormat())
        a.selectFile = lambda *args,**kwargs: self.exportName
        a.getImportOptions = lambda: options

        a.execute()
        
        newLayers = list(self.mll.listLayers())
        
        self.assertEquals(len(newLayers),1)
        layerId = newLayers[0][0]
        influences = list(self.mll.listLayerInfluences(layerId))
        
        self.assertEqual(len(influences), 1)
예제 #2
0
 def testAddManualInfluence(self):
     openMayaFile('simplemirror.ma')
     cmds.select("testMeshY")
     mll = MllInterface()
     mll.initLayers()
     mll.setCurrentLayer(mll.createLayer("test layer"))
     
     
     window = MainWindow.open()
     mirrorTab = window.findTab(TabMirror)
     
     initWindow = mirrorTab.execInitMirror()
     
     def selectPairAndClickOk(dialog):
         log.info("running inside modal dialog "+str(dialog))
         dialog.sourceDropdown.setValue(2)
         dialog.destinationDropdown.setValue(3)
         dialog.chkSelfReference.setValue(False)
         #dialog.closeDialogWithResult(BaseDialog.BUTTON_OK)
         closeNextDialogWithResult(BaseDialog.BUTTON_OK)
         
     log.info("modal dialog setup")
     runInNextModalDialog(selectPairAndClickOk)
     log.info("modal dialog setup ended")
         
     initWindow.content.addPairAction.execute()
     
     self.assertEquals(str(initWindow.content.items[0]),"[M] L_joint2 <-> L_joint3", "manual pair addition failed")
    def testAccess(self):
        # test the same for specified mesh, or None for current selection
        for mesh in ('testMesh', None):
            testUtils.openMayaFile("normalization.ma")
            self.mll.setCurrentMesh(mesh)
            if mesh is None:
                cmds.select('testMesh')

            self.mll.initLayers()
            layerId = self.mll.createLayer("initial weights")
            self.assertNotEqual(None, layerId)

            self.assertEqual("initial weights", self.mll.getLayerName(layerId))

            self.assertEqual(16, self.mll.getVertCount(),
                             "Invalid vertex count detected")

            self.assertEqual(1, self.mll.getLayerOpacity(layerId))
            self.assertEqual(True, self.mll.isLayerEnabled(layerId))
            self.assertEqual([], self.mll.getLayerMask(layerId))
            self.assertFloatArraysEqual(
                self.mll.getInfluenceWeights(layerId, 1), [
                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0,
                    1.0, 1.0, 1.0, 1.0
                ])
예제 #4
0
    def setUp(self):
        self.targetMesh = 'testMesh'
        self.numVerts = 169  # number of verts in our mesh
        self.mll = MllInterface()

        unittest.TestCase.setUp(self)
        openMayaFile('simplemirror.ma')
        cmds.hide("|y_axis")
        cmds.showHidden("|x_axis")

        self.mll.setCurrentMesh(self.targetMesh)
        self.mll.initLayers()
        self.mll.createLayer("original weights")

        self.model = ie.LayerData()
        self.layer = ie.Layer()
        self.layer.opacity = 1.0
        self.layer.enabled = True
        self.layer.mask = [0.0] * self.numVerts
        self.layer.mask[1] = 0.9
        self.layer.mask[5] = 0.5566
        self.layer.name = "imported layer"
        self.model.addLayer(self.layer)

        self.infl = ie.Influence()
        self.layer.addInfluence(self.infl)
        self.infl.influenceName = "x_axis|root|R_joint1"
        self.infl.logicalIndex = 666  # use nonsense value
        self.infl.weights = [0.1] * self.numVerts
        self.infl.weights[3] = 0.688
        self.infl.weights[4] = 0.345
예제 #5
0
    def setUp(self):
        self.targetMesh = 'testMesh' 
        self.numVerts = 169 # number of verts in our mesh
        self.mll = MllInterface()
        
        unittest.TestCase.setUp(self)
        openMayaFile('simplemirror.ma')
        cmds.hide("|y_axis")
        cmds.showHidden("|x_axis")
    
        self.mll.setCurrentMesh(self.targetMesh)
        self.mll.initLayers()
        self.mll.createLayer("original weights")
        
        self.model = ie.LayerData()
        self.layer = ie.Layer()
        self.layer.opacity = 1.0
        self.layer.enabled = True
        self.layer.mask = [0.0]*self.numVerts
        self.layer.mask[1] = 0.9 
        self.layer.mask[5] = 0.5566 
        self.layer.name = "imported layer"
        self.model.addLayer(self.layer)

        self.infl = ie.Influence()
        self.layer.addInfluence(self.infl)
        self.infl.influenceName = "x_axis|root|R_joint1"
        self.infl.logicalIndex = 666 # use nonsense value
        self.infl.weights = [0.1]*self.numVerts
        self.infl.weights[3] = 0.688
        self.infl.weights[4] = 0.345
예제 #6
0
    def testCleanExistingLayers(self):
        exampleData = """<?xml version="1.0" encoding="UTF-8"?>
                            <ngstLayerData version="1.0">
                                <layer enabled="yes" mask="" name="imported layer 1" opacity="1">
                                    <influence index="0" name="joint1" weights="1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0"/>
                                </layer>
                            </ngstLayerData>
                        """
        self.writeFile(self.exportName, exampleData)

        openMayaFile('normalization.ma')
        cmds.select('testMesh')
        self.mll.setCurrentMesh('testMesh')
        self.mll.initLayers()
        self.mll.createLayer("one")
        self.mll.createLayer("two")

        self.assertEquals(len(list(self.mll.listLayers())), 2)

        options = ImportOptions()
        options.keepExistingLayers = False

        a = ImportAction(ownerUI=None, ioFormat=Formats.getXmlFormat())
        a.selectFile = lambda *args, **kwargs: self.exportName
        a.getImportOptions = lambda: options

        a.execute()

        newLayers = list(self.mll.listLayers())

        self.assertEquals(len(newLayers), 1)
        layerId = newLayers[0][0]
        influences = list(self.mll.listLayerInfluences(layerId))

        self.assertEqual(len(influences), 1)
예제 #7
0
    def testImportAvailableWithNoLayers(self):
        exampleData = """<?xml version="1.0" encoding="UTF-8"?>
                            <ngstLayerData version="1.0">
                                <layer enabled="yes" mask="" name="imported layer 1" opacity="1">
                                    <influence index="0" name="joint1" weights="1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0"/>
                                </layer>
                            </ngstLayerData>
                        """
        self.writeFile(self.exportName, exampleData)

        openMayaFile('normalization.ma')

        a = ImportAction(ownerUI=None, ioFormat=Formats.getXmlFormat())
        a.selectFile = lambda *args, **kwargs: self.exportName
        a.getImportOptions = lambda: ImportOptions()

        cmds.select('persp')
        self.assertFalse(
            a.isEnabled(),
            "import action should be disabled if target mesh is not suitable for skinning"
        )

        cmds.select('testMesh')
        self.assertTrue(
            a.isEnabled(),
            "import action should be available if suitable mesh is selected")

        # should allow execution here
        a.execute()
예제 #8
0
 def testInvalidInfluenceIndex(self):
     testUtils.openMayaFile("normalization.ma")
     self.mll.setCurrentMesh('testMesh')
     self.mll.initLayers()
     layerId = self.mll.createLayer("initial weights")
     
     weights = [0.0]*self.mll.getVertCount()
     
     with self.assertRaises(errorMessage="skin cluster does not have logical influence 666"):
         self.mll.setInfluenceWeights(layerId, 666, weights)
    def testInvalidInfluenceIndex(self):
        testUtils.openMayaFile("normalization.ma")
        self.mll.setCurrentMesh('testMesh')
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights")

        weights = [0.0] * self.mll.getVertCount()

        with self.assertRaises(
                errorMessage="skin cluster does not have logical influence 666"
        ):
            self.mll.setInfluenceWeights(layerId, 666, weights)
예제 #10
0
 def testLoad2(self):
     openMayaFile('simplemirror.ma')
     mll = MllInterface()
     mll.setCurrentMesh('testMesh')
     mll.initLayers()
     mll.createLayer("Initial Weights")
     
     model = LayerData()
     model.loadFrom('testMesh')
     
     self.assertEqual(model.layers[0].name, "Initial Weights")
     self.assertEquals(model.layers[0].influences[0].influenceName, "|x_axis|root")
예제 #11
0
 def testLoad2(self):
     openMayaFile('simplemirror.ma')
     mll = MllInterface()
     mll.setCurrentMesh('testMesh')
     mll.initLayers()
     mll.createLayer("Initial Weights")
     
     model = LayerData()
     model.loadFrom('testMesh')
     
     self.assertEqual(model.layers[0].name, "Initial Weights")
     self.assertEquals(model.layers[0].influences[0].influenceName, "|x_axis|root")
    def setUp(self):
        unittest.TestCase.setUp(self)

        self.mll = MllInterface()

        self.setup = DuplicateLayers()
        self.setup.setMllInterface(self.mll)

        testUtils.openMayaFile("influence transfer.mb")

        self.mll.setCurrentMesh('sourceMesh')

        self.mll.initLayers()
예제 #13
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     
     self.mll = MllInterface()
     
     self.setup = DuplicateLayers()
     self.setup.setMllInterface(self.mll)
     
     testUtils.openMayaFile("influence transfer.mb")
     
     self.mll.setCurrentMesh('sourceMesh')
     
     self.mll.initLayers()
 def setUp(self):
     testUtils.openMayaFile("normalization.ma")
     
     self.mll = MllInterface()
     cmds.select("testMesh")
     self.mll.initLayers()
     self.mll.createLayer("initial weights")
     self.layer = self.mll.createLayer("second layer")
     self.mll.setCurrentLayer(self.layer)
     
     self.clipboard = WeightsClipboard(self.mll)
     
     self.newWeights = [0.5]*self.mll.getVertCount()
예제 #15
0
    def setUp(self):
        unittest.TestCase.setUp(self)
        testUtils.openMayaFile("normalization.ma")
        self.mll = mll = MllInterface()
        mll.setCurrentMesh("testMesh")
        mll.initLayers()
        mll.createLayer("initial weights")
        mll.createLayer("second layer")
        
        HeadlessDataHost.HANDLE.addReference(self)

                
        self.exportName = os.path.join(tempfile.gettempdir(), 'layersTestData_%d.xml' %random.randint(0,1024*1024))
        self.assertTrue(not os.path.exists(self.exportName), 'target file already exists')
예제 #16
0
 def testAddManualMirrorInfluences(self):
     testUtils.openMayaFile("genericSkinnedMesh.mb")
     self.mll.setCurrentMesh("mesh|pPlane1")
     self.mll.initLayers()
     layerId = self.mll.createLayer("initial weights")
     
     result = self.mll.listManualMirrorInfluenceAssociations()
     self.assertArraysEqual(result, [])
     
     self.mll.addManualMirrorInfluenceAssociation("L_joint1", "R_joint1")
     self.mll.addManualMirrorInfluenceAssociation("R_joint1", "L_joint1")
     
     result = self.mll.listManualMirrorInfluenceAssociations()
     self.assertDictionariesEqual(result, {"L_joint1":"R_joint1","R_joint1":"L_joint1"})
예제 #17
0
    def testSetMaxInfluencePerVertex(self):
        testUtils.openMayaFile("genericSkinnedMesh.mb")
        self.mll.setCurrentMesh("mesh|pPlane1")
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights")
        
        self.assertEqual(self.mll.getInfluenceLimitPerVertex(),0,"initial limit per vertex should be zero")

        self.mll.setInfluenceLimitPerVertex(10)
        self.assertEqual(self.mll.getInfluenceLimitPerVertex(),10,"was not able to set limit to the desired value")

        self.mll.setInfluenceLimitPerVertex(2)
        self.assertEqual(self.mll.getInfluenceLimitPerVertex(),2,"was not able to set limit to the desired value")
        
        
예제 #18
0
    def setUp(self):
        unittest.TestCase.setUp(self)
        testUtils.openMayaFile("normalization.ma")
        self.mll = mll = MllInterface()
        mll.setCurrentMesh("testMesh")
        mll.initLayers()
        mll.createLayer("initial weights")
        mll.createLayer("second layer")

        HeadlessDataHost.HANDLE.addReference(self)

        self.exportName = os.path.join(
            tempfile.gettempdir(),
            'layersTestData_%d.xml' % random.randint(0, 1024 * 1024))
        self.assertTrue(not os.path.exists(self.exportName),
                        'target file already exists')
    def testSetMaxInfluencePerVertex(self):
        testUtils.openMayaFile("genericSkinnedMesh.mb")
        self.mll.setCurrentMesh("mesh|pPlane1")
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights")

        self.assertEqual(self.mll.getInfluenceLimitPerVertex(), 0,
                         "initial limit per vertex should be zero")

        self.mll.setInfluenceLimitPerVertex(10)
        self.assertEqual(self.mll.getInfluenceLimitPerVertex(), 10,
                         "was not able to set limit to the desired value")

        self.mll.setInfluenceLimitPerVertex(2)
        self.assertEqual(self.mll.getInfluenceLimitPerVertex(), 2,
                         "was not able to set limit to the desired value")
    def testAddManualMirrorInfluences(self):
        testUtils.openMayaFile("genericSkinnedMesh.mb")
        self.mll.setCurrentMesh("mesh|pPlane1")
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights")

        result = self.mll.listManualMirrorInfluenceAssociations()
        self.assertArraysEqual(result, [])

        self.mll.addManualMirrorInfluenceAssociation("L_joint1", "R_joint1")
        self.mll.addManualMirrorInfluenceAssociation("R_joint1", "L_joint1")

        result = self.mll.listManualMirrorInfluenceAssociations()
        self.assertDictionariesEqual(result, {
            "L_joint1": "R_joint1",
            "R_joint1": "L_joint1"
        })
예제 #21
0
    def testDefectXmlImportIssue(self):
        openMayaFile("defect-xml-import-fails/mirror_association_issues.ma")

        importer = XmlImporter()
        data = importer.process(getTestFileContents("defect-xml-import-fails/mirror_weighting_manual_layers.xml"))
        
        
        mll = MllInterface()
        mll.setCurrentMesh("pSphere1")
        
        
        overrides = mll.listManualMirrorInfluenceAssociations()
        self.assertEqual(len(overrides), 0)
        
        data.saveTo("pSphere1")
        
        overrides = mll.listManualMirrorInfluenceAssociations()
        self.assertEqual(len(overrides), 1)
예제 #22
0
    def testOverwriteWeightsCrashesMaya(self):
        testUtils.openMayaFile("genericSkinnedMesh.mb")
        self.mll.setCurrentMesh("mesh|pPlane1")
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights",forceEmpty=True)
        weights = [1.0]*self.mll.getVertCount()
        weights[0] = 0.7
        weights[1] = 0.5
        weights[2] = 0.3
        
        self.mll.setInfluenceWeights(layerId, 0, weights)
        self.assertFloatArraysEqual(self.mll.getInfluenceWeights(layerId, 0)[0:3], [0.7,0.5,0.3])

        self.mll.setInfluenceWeights(layerId, 1, weights)
        self.assertFloatArraysEqual(weights,self.mll.getInfluenceWeights(layerId, 1))
        
        # previous influence should have some of it's value substracted
        self.assertFloatArraysEqual(self.mll.getInfluenceWeights(layerId, 0)[0:3], [0.3,0.5,0.3])
예제 #23
0
 def testAccess(self):
     # test the same for specified mesh, or None for current selection
     for mesh in ('testMesh',None):
         testUtils.openMayaFile("normalization.ma")
         self.mll.setCurrentMesh(mesh)
         if mesh is None:
             cmds.select('testMesh')
                         
         self.mll.initLayers()
         layerId = self.mll.createLayer("initial weights")
         self.assertNotEqual(None, layerId)
         
         self.assertEqual("initial weights",self.mll.getLayerName(layerId))
         
         self.assertEqual(16, self.mll.getVertCount(), "Invalid vertex count detected")
         
         self.assertEqual(1, self.mll.getLayerOpacity(layerId))
         self.assertEqual(True, self.mll.isLayerEnabled(layerId))
         self.assertEqual([], self.mll.getLayerMask(layerId))
         self.assertFloatArraysEqual(self.mll.getInfluenceWeights(layerId,1),[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
    def testOverwriteWeightsCrashesMaya(self):
        testUtils.openMayaFile("genericSkinnedMesh.mb")
        self.mll.setCurrentMesh("mesh|pPlane1")
        self.mll.initLayers()
        layerId = self.mll.createLayer("initial weights", forceEmpty=True)
        weights = [1.0] * self.mll.getVertCount()
        weights[0] = 0.7
        weights[1] = 0.5
        weights[2] = 0.3

        self.mll.setInfluenceWeights(layerId, 0, weights)
        self.assertFloatArraysEqual(
            self.mll.getInfluenceWeights(layerId, 0)[0:3], [0.7, 0.5, 0.3])

        self.mll.setInfluenceWeights(layerId, 1, weights)
        self.assertFloatArraysEqual(weights,
                                    self.mll.getInfluenceWeights(layerId, 1))

        # previous influence should have some of it's value substracted
        self.assertFloatArraysEqual(
            self.mll.getInfluenceWeights(layerId, 0)[0:3], [0.3, 0.5, 0.3])
예제 #25
0
    def testImportAvailableWithNoLayers(self):
        exampleData = """<?xml version="1.0" encoding="UTF-8"?>
                            <ngstLayerData version="1.0">
                                <layer enabled="yes" mask="" name="imported layer 1" opacity="1">
                                    <influence index="0" name="joint1" weights="1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0"/>
                                </layer>
                            </ngstLayerData>
                        """
        self.writeFile(self.exportName, exampleData)

        openMayaFile('normalization.ma')

        a = ImportAction(ownerUI=None, ioFormat=Formats.getXmlFormat())
        a.selectFile = lambda *args,**kwargs: self.exportName
        a.getImportOptions = lambda : ImportOptions()

        cmds.select('persp')
        self.assertFalse(a.isEnabled(), "import action should be disabled if target mesh is not suitable for skinning")

        cmds.select('testMesh')
        self.assertTrue(a.isEnabled(), "import action should be available if suitable mesh is selected")

        # should allow execution here
        a.execute()
예제 #26
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     
     self.importer = ImportInfluences()
     
     testUtils.openMayaFile("influence transfer.mb")
    def testAccessForNoSelection(self):
        testUtils.openMayaFile("normalization.ma")
        cmds.select(cl=True)
        self.mll.setCurrentMesh(None)

        self.assertEquals(None, self.mll.getTargetInfo())
예제 #28
0
 def testAccessForNoSelection(self):
     testUtils.openMayaFile("normalization.ma")
     cmds.select(cl=True)
     self.mll.setCurrentMesh(None)
     
     self.assertEquals(None,self.mll.getTargetInfo())