示例#1
0
def arnoldAboutDialog():
    arnoldAboutText = u"Arnold for Maya\n\n"
    arnoldAboutText += "MtoA " + cmds.pluginInfo(
        'mtoa', query=True, version=True)
    arnoldMercurialID = cmds.arnoldPlugins(getMercurialID=True)
    if not '(Master)' in arnoldMercurialID:
        arnoldAboutText += " - " + arnoldMercurialID
    arnoldAboutText += "\nArnold Core " + ".".join(ai.AiGetVersion()) + "\n\n"
    arnoldAboutText += u"(c) 2001-2009 Marcos Fajardo and (c) 2009-2015\nSolid Angle SL\n\n"
    arnoldAboutText += u"Developed by: Ángel Jimenez, Olivier Renouard,\nYannick Puech, Borja Morales, Nicolas Dumay,\nPedro Fernando Gomez, Pál Mezei\n\n"
    arnoldAboutText += u"Acknowledgements: Javier González, Miguel González, \nLee Griggs, Chad Dombrova, Gaetan Guidet, \nGaël Honorez, Diego Garcés, Kevin Tureski, \nFrédéric Servant"

    if (cmds.window("AboutArnold", ex=True)):
        cmds.deleteUI("AboutArnold")
    w = cmds.window("AboutArnold", title="About")
    cmds.window("AboutArnold", edit=True, width=402, height=280)
    cmds.rowColumnLayout(numberOfColumns=4,
                         columnWidth=[(1, 20), (2, 52), (3, 50), (4, 280)])

    cmds.text(label="")
    cmds.text(label="")
    cmds.text(label="")
    cmds.text(label="")

    cmds.text(label="")
    cmds.image(image="MtoA_Logo.png")
    cmds.text(label="")
    cmds.text(align="left", label=arnoldAboutText)

    cmds.text(label="")
    cmds.text(label="\n")
    cmds.text(label="")
    cmds.text(label="")

    cmds.text(label="")
    cmds.text(label="")
    cmds.button(width=150,
                label='OK',
                command=('import maya.cmds as cmds;cmds.deleteUI(\"' + w +
                         '\", window=True)'))
    cmds.setParent('..')

    cmds.showWindow(w)
    def setup(self):
        self.addSwatch()
        self.beginScrollLayout()

        self.addCustom('message', 'AEshaderTypeNew', 'AEshaderTypeReplace')

        self.beginLayout('Utility Attributes', collapse=False)
        self.addControl('shade_mode',
                        changeCommand=self.checkShadeMode,
                        label='Shade Mode')
        self.addCustom('color_mode', aiUtilityCreateColorMode,
                       aiUtilitySetColorMode)
        if int(ai.AiGetVersion()[2]) > 2:
            self.addControl('overlay_mode', label='Overlay Mode')
        self.addControl('color', label='Color')
        self.addControl('opacity', label='Opacity')
        self.addControl('ao_distance', label='AO Distance')
        self.endLayout()

        # include/call base class/node attributes
        pm.mel.AEdependNodeTemplate(self.nodeName)
        self.addExtraControls()

        self.endScrollLayout()
示例#3
0
class UniverseBlockTest(unittest.TestCase):

    __usingMultipleUniverses = [int(v) for v in arnold.AiGetVersion()[:3]
                                ] >= [7, 0, 0]

    def test(self):

        if not self.__usingMultipleUniverses:
            self.assertFalse(arnold.AiUniverseIsActive())

        with IECoreArnold.UniverseBlock(writable=False):

            self.assertTrue(arnold.AiUniverseIsActive())

            with IECoreArnold.UniverseBlock(writable=False):

                self.assertTrue(arnold.AiUniverseIsActive())

            self.assertTrue(arnold.AiUniverseIsActive())

    def testWritable(self):
        def createBlock(writable):

            with IECoreArnold.UniverseBlock(writable):

                self.assertTrue(arnold.AiUniverseIsActive())

        with IECoreArnold.UniverseBlock(writable=True):

            self.assertTrue(arnold.AiUniverseIsActive())

            createBlock(False)
            if not self.__usingMultipleUniverses:
                self.assertRaisesRegexp(RuntimeError,
                                        "Arnold is already in use",
                                        createBlock, True)

        with IECoreArnold.UniverseBlock(writable=False):

            self.assertTrue(arnold.AiUniverseIsActive())

            createBlock(True)
            createBlock(False)

    def testMetadataLoading(self):

        with IECoreArnold.UniverseBlock(writable=False):

            e = arnold.AiNodeEntryLookUp("options")

            s = arnold.AtStringReturn()
            i = ctypes.c_int()

            arnold.AiMetaDataGetStr(e, "", "cortex.testString", s)
            self.assertEqual(arnold.AtStringToStr(s), "test")

            arnold.AiMetaDataGetInt(e, "", "cortex.testInt", i)
            self.assertEqual(i.value, 25)

            arnold.AiMetaDataGetStr(e, "AA_samples", "cortex.testString", s)
            self.assertEqual(arnold.AtStringToStr(s), "test2")

            arnold.AiMetaDataGetInt(e, "AA_samples", "cortex.testInt", i)
            self.assertEqual(i.value, 12)

    @unittest.skipIf(__usingMultipleUniverses, "Not relevant")
    def testReadOnlyUniverseDoesntPreventWritableUniverseCleanup(self):

        with IECoreArnold.UniverseBlock(writable=False):

            with IECoreArnold.UniverseBlock(writable=True):

                node = arnold.AiNode("polymesh")
                arnold.AiNodeSetStr(node, "name", "test")

            self.assertEqual(arnold.AiNodeLookUpByName("test"), None)
class UniverseBlockTest(unittest.TestCase):

    __usingMultipleUniverses = [int(v) for v in arnold.AiGetVersion()[:3]
                                ] >= [7, 0, 0]

    def test(self):

        if not self.__usingMultipleUniverses:
            self.assertFalse(arnold.AiUniverseIsActive())

        with IECoreArnold.UniverseBlock(writable=False):

            if not self.__usingMultipleUniverses:
                self.assertTrue(arnold.AiUniverseIsActive())

            with IECoreArnold.UniverseBlock(writable=False):

                if not self.__usingMultipleUniverses:
                    self.assertTrue(arnold.AiUniverseIsActive())

            if not self.__usingMultipleUniverses:
                self.assertTrue(arnold.AiUniverseIsActive())

    def testWritable(self):
        def createBlock(writable, expectedUniverse=None):

            with IECoreArnold.UniverseBlock(writable) as universe:

                if not self.__usingMultipleUniverses:
                    self.assertTrue(arnold.AiUniverseIsActive())
                else:
                    self.assertIsNotNone(universe)

                if expectedUniverse is not None:
                    self.assertEqual(
                        ctypes.addressof(universe.contents),
                        ctypes.addressof(expectedUniverse.contents))

        with IECoreArnold.UniverseBlock(writable=True) as universe:

            if not self.__usingMultipleUniverses:
                self.assertTrue(arnold.AiUniverseIsActive())
            else:
                self.assertIsNotNone(universe)

            createBlock(False)
            if not self.__usingMultipleUniverses:
                six.assertRaisesRegex(self, RuntimeError,
                                      "Arnold is already in use", createBlock,
                                      True)

        with IECoreArnold.UniverseBlock(writable=False) as universe:

            if not self.__usingMultipleUniverses:
                self.assertTrue(arnold.AiUniverseIsActive())
            else:
                self.assertIsNotNone(universe)

            createBlock(True)
            createBlock(False, expectedUniverse=universe)

    def testMetadataLoading(self):

        metadataPath = os.path.join(os.path.dirname(__file__), "metadata")
        if metadataPath not in os.environ["ARNOLD_PLUGIN_PATH"].split(":"):

            # Relaunch test in subprocess with our metadata on the plugin path.

            env = os.environ.copy()
            env["ARNOLD_PLUGIN_PATH"] = env[
                "ARNOLD_PLUGIN_PATH"] + ":" + metadataPath

            try:
                subprocess.check_output([
                    "gaffer", "test",
                    "IECoreArnoldTest.UniverseBlockTest.testMetadataLoading"
                ],
                                        env=env,
                                        stderr=subprocess.STDOUT)
            except subprocess.CalledProcessError as e:
                self.fail(e.output)

        else:

            # Our metadata is on the plugin path. Check that it has been loaded.

            with IECoreArnold.UniverseBlock(writable=False):

                e = arnold.AiNodeEntryLookUp("options")

                s = arnold.AtStringReturn()
                i = ctypes.c_int()

                arnold.AiMetaDataGetStr(e, "", "cortex.testString", s)
                self.assertEqual(arnold.AtStringToStr(s), "test")

                arnold.AiMetaDataGetInt(e, "", "cortex.testInt", i)
                self.assertEqual(i.value, 25)

                arnold.AiMetaDataGetStr(e, "AA_samples", "cortex.testString",
                                        s)
                self.assertEqual(arnold.AtStringToStr(s), "test2")

                arnold.AiMetaDataGetInt(e, "AA_samples", "cortex.testInt", i)
                self.assertEqual(i.value, 12)

    @unittest.skipIf(__usingMultipleUniverses, "Not relevant")
    def testReadOnlyUniverseDoesntPreventWritableUniverseCleanup(self):

        with IECoreArnold.UniverseBlock(writable=False):

            with IECoreArnold.UniverseBlock(writable=True):

                node = arnold.AiNode("polymesh")
                arnold.AiNodeSetStr(node, "name", "test")

            self.assertEqual(arnold.AiNodeLookUpByName("test"), None)

    def testKickNodes(self):

        # Running `kick -nodes` will load any plugins that might link to
        # `libIECoreArnold`. If UniverseBlock tries to reinitialise Arnold
        # in this situation, very bad things occur, so we must avoid it.

        output = subprocess.check_output(["kick", "-nodes"],
                                         universal_newlines=True)
        self.assertNotIn("AiBegin", output)
        self.assertNotIn("AiEnd", output)
        self.assertNotIn("is already installed", output)
        self.assertNotIn("Node entry does not exist", output)
        self.assertIn("ieDisplay", output)
示例#5
0
    def testTwoRenders(self):

        s = Gaffer.ScriptNode()
        s["s"] = GafferScene.Sphere()

        s["o"] = GafferScene.Outputs()
        s["o"].addOutput(
            "beauty",
            IECoreScene.Output("test", "ieDisplay", "rgba", {
                "driverType": "ImageDisplayDriver",
                "handle": "myLovelySphere",
            }))
        s["o"]["in"].setInput(s["s"]["out"])

        s["r"] = self._createInteractiveRender()
        s["r"]["in"].setInput(s["o"]["out"])

        s["r"]["state"].setValue(s["r"].State.Running)

        time.sleep(0.5)

        image = IECoreImage.ImageDisplayDriver.storedImage("myLovelySphere")
        self.assertTrue(isinstance(image, IECoreImage.ImagePrimitive))

        # Try to start a second render while the first is running.

        s["o2"] = GafferScene.Outputs()
        s["o2"].addOutput(
            "beauty",
            IECoreScene.Output("test", "ieDisplay", "rgba", {
                "driverType": "ImageDisplayDriver",
                "handle": "myLovelySphere2",
            }))
        s["o2"]["in"].setInput(s["s"]["out"])

        s["r2"] = self._createInteractiveRender(failOnError=False)
        s["r2"]["in"].setInput(s["o2"]["out"])

        if [int(v) for v in arnold.AiGetVersion()[:3]] >= [7, 0, 0]:

            s["r2"]["state"].setValue(s["r"].State.Running)
            time.sleep(0.5)

            image = IECoreImage.ImageDisplayDriver.storedImage(
                "myLovelySphere2")
            self.assertTrue(isinstance(image, IECoreImage.ImagePrimitive))

        else:

            # Only one universe available, so second render will fail.

            try:
                defaultHandler = IECore.MessageHandler.getDefaultHandler()
                messageHandler = IECore.CapturingMessageHandler()
                IECore.MessageHandler.setDefaultHandler(messageHandler)
                s["r2"]["state"].setValue(s["r"].State.Running)
            finally:
                IECore.MessageHandler.setDefaultHandler(defaultHandler)

            messages = s["r2"]["messages"].getValue().value
            self.assertEqual(len(messages), 1)
            self.assertEqual(messages[0].message, "Arnold is already in use")

            self.assertEqual(len(messageHandler.messages), 1)
            self.assertEqual(messageHandler.messages[0].message,
                             "Arnold is already in use")