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()
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)
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")