def testPlugParameterWithNonUniqueNames( self ) : node = maya.cmds.createNode( "ieProceduralHolder" ) node2 = maya.cmds.createNode( "ieProceduralHolder" ) node = maya.cmds.ls( maya.cmds.rename( node, "iAmNotUnique" ), long=True )[0] node2 = maya.cmds.ls( maya.cmds.rename( node2, "iAmNotUnique" ), long=True )[0] fnPH = IECoreMaya.FnProceduralHolder( node ) proc = IECore.ReadProcedural() fnPH.setParameterised( proc ) self.assert_( fnPH.getParameterised()[0].isSame( proc ) ) fnPH2 = IECoreMaya.FnProceduralHolder( node2 ) proc2 = IECore.ReadProcedural() fnPH2.setParameterised( proc2 ) self.assert_( fnPH2.getParameterised()[0].isSame( proc2 ) ) # check that each function set references a different node. self.assert_( fnPH.object()!=fnPH2.object() ) self.assert_( fnPH.fullPathName()!=fnPH2.fullPathName() ) plug = fnPH.parameterPlug( proc["motion"]["blur"] ) plug2 = fnPH2.parameterPlug( proc2["motion"]["blur"] ) self.assertEqual( plug.node(), fnPH.object() ) self.assertEqual( plug2.node(), fnPH2.object() ) self.assertEqual( fnPH.parameterPlugPath( proc["motion"]["blur"] ), "|transform1|iAmNotUnique.parm_motion_blur" ) self.assertEqual( fnPH2.parameterPlugPath( proc2["motion"]["blur"] ), "|transform2|iAmNotUnique.parm_motion_blur" ) self.assert_( maya.cmds.isConnected( "time1.outTime", fnPH.parameterPlugPath( proc["files"]["frame"] ), iuc=True ) ) self.assert_( maya.cmds.isConnected( "time1.outTime", fnPH2.parameterPlugPath( proc2["files"]["frame"] ), iuc=True ) )
def __printSelectedComponents(proceduralHolder, *unused): fnP = IECoreMaya.FnProceduralHolder(proceduralHolder) selectedNames = fnP.selectedComponentNames() selectedNames = list(selectedNames) selectedNames.sort() print " ".join(selectedNames),
def testMoreComplicatedComponentTransforms(self): node = maya.cmds.createNode("ieProceduralHolder") fnPH = IECoreMaya.FnProceduralHolder(node) fnPH.setParameterised(self.SphereProcedural()) transformPlug = fnPH.componentTransformPlugPath("mySphere") self.failUnless(maya.cmds.objExists(transformPlug)) boundPlug = fnPH.componentBoundPlugPath("mySphere") self.failUnless(maya.cmds.objExists(boundPlug)) procedural = fnPH.getProcedural() procedural["translate"].setValue(IECore.V3f(2, 0, 0)) procedural["radius"].setNumericValue(2) procedural["extraTranslate"].setValue(IECore.V3f(0, 2, 0)) fnPH.setNodeValues() self.assertEqual( maya.cmds.getAttr(transformPlug + ".componentTranslate"), [(2, 0, 0)]) self.assertEqual(maya.cmds.getAttr(transformPlug + ".componentRotate"), [(0, 0, 0)]) self.assertEqual(maya.cmds.getAttr(transformPlug + ".componentScale"), [(1, 1, 1)]) self.assertEqual(maya.cmds.getAttr(boundPlug + ".componentBoundMin"), [(0, 0, -2)]) self.assertEqual(maya.cmds.getAttr(boundPlug + ".componentBoundMax"), [(4, 4, 2)]) self.assertEqual( maya.cmds.getAttr(boundPlug + ".componentBoundCenter"), [(2, 2, 0)])
def __printComponents(proceduralHolder, *unused): fnP = IECoreMaya.FnProceduralHolder(proceduralHolder) names = fnP.componentNames() names = list(names) names.sort() print " ".join(names),
def testLsMethods(self): # create a couple of holders: opHolderNode = maya.cmds.createNode("ieOpHolderNode") fnOH = IECoreMaya.FnOpHolder(opHolderNode) fnOH.setOp("floatParameter") converterHolderNode = maya.cmds.createNode("ieConverterHolder") fnCH = IECoreMaya.FnConverterHolder(converterHolderNode) #fnCH.setOp( "floatParameter" ) node = maya.cmds.createNode("ieProceduralHolder") node2 = maya.cmds.createNode("ieProceduralHolder") fnPH = IECoreMaya.FnProceduralHolder(node) proc = IECore.ReadProcedural() fnPH.setParameterised(proc) fnPH2 = IECoreMaya.FnProceduralHolder(node2) # do an ls on the op holders: should only be one opHolders = IECoreMaya.FnOpHolder.ls() self.assertEqual(len(opHolders), 1) self.failUnless(isinstance(opHolders[0], IECoreMaya.FnOpHolder)) self.assertEqual(opHolders[0].fullPathName(), opHolderNode) # do an ls on the procedural holders: should be two self.assertEqual(len(IECoreMaya.FnProceduralHolder.ls()), 2) # do an ls on the procedural holders containing IECore.ReadProcedurals: should be one self.assertEqual( len( IECoreMaya.FnProceduralHolder.ls( classType=IECore.ReadProcedural)), 1) # find full path name of node holding ReadProcedural, and check it's the same as the one returned by ls: node = maya.cmds.ls(node, l=True)[0] self.assertEqual( IECoreMaya.FnProceduralHolder.ls( classType=IECore.ReadProcedural)[0].fullPathName(), node) # do an ls on the converter holders, this time just returning node names: converterHolders = IECoreMaya.FnConverterHolder.ls(fnSets=False) self.assertEqual(len(converterHolders), 1) self.assertEqual(converterHolders[0], converterHolderNode)
def testConversion(self): procHolderShape = maya.cmds.createNode("ieProceduralHolder") IECoreMaya.FnProceduralHolder(procHolderShape).setProcedural( dummyProcedural()) converter = IECoreMaya.FromMayaProceduralHolderConverter( str(procHolderShape)) self.failUnless(isinstance(converter.convert(), dummyProcedural))
def __removeSelectedComponents(self): fnPH = IECoreMaya.FnProceduralHolder(self.node()) components = set(maya.cmds.getAttr(self.plugName()).split()) components -= fnPH.selectedComponentNames() components = list(components) components.sort() maya.cmds.setAttr(self.plugName(), " ".join(components), type="string")
def __createLocatorAtPoints(proceduralHolder, childPlugSuffixes, *unused): fnPH = IECoreMaya.FnProceduralHolder(proceduralHolder) selectedNames = fnPH.selectedComponentNames() locators = [] for name in selectedNames: locators.extend(fnPH.createLocatorAtPoints(name, childPlugSuffixes)) maya.cmds.select(locators, replace=True)
def __createLocatorWithTransform(proceduralHolder, *unused): fnPH = IECoreMaya.FnProceduralHolder(proceduralHolder) selectedNames = fnPH.selectedComponentNames() locators = [] for name in selectedNames: locators.append(fnPH.createLocatorAtTransform(name)) maya.cmds.select(locators, replace=True)
def __setToSelectedComponents( self, oneOnly ) : fnPH = IECoreMaya.FnProceduralHolder( self.node() ) components = fnPH.selectedComponentNames() components = list( components ) components.sort() if oneOnly : maya.cmds.setAttr( self.plugName(), components[0] if components else "", type="string" ) else : maya.cmds.setAttr( self.plugName(), " ".join( components ), type="string" )
def __setToSelectedCoordinateSystem( self ) : fnPH = IECoreMaya.FnProceduralHolder( self.node() ) components = fnPH.selectedComponentNames() components = list( components ) components = [ c for c in components if c.startswith( "coordinateSystem:" ) ] coordSys = "" if components : components.sort() coordSys = components[0][len( "coordinateSystem:" ):] maya.cmds.setAttr( self.plugName(), coordSys, type="string" )
def testComponentBoundMinMax(self): node = maya.cmds.createNode("ieProceduralHolder") fnPH = IECoreMaya.FnProceduralHolder(node) fnPH.setParameterised(self.SphereProcedural()) boundPlug = fnPH.componentBoundPlugPath("mySphere") self.failUnless(maya.cmds.objExists(boundPlug)) self.assertEqual(maya.cmds.getAttr(boundPlug + ".componentBoundMin"), [(-1, -1, -1)]) self.assertEqual(maya.cmds.getAttr(boundPlug + ".componentBoundMax"), [(1, 1, 1)])
def __selectComponents( self ) : fnPH = IECoreMaya.FnProceduralHolder( self.node() ) regexes = [ re.compile( fnmatch.translate( x ) ) for x in maya.cmds.getAttr( self.plugName() ).split() ] toSelect = set() for name in fnPH.componentNames() : for r in regexes : if r.match( name ) is not None : toSelect.add( name ) break fnPH.selectComponentNames( toSelect )
def testScene(self): node = maya.cmds.createNode("ieProceduralHolder") fnPH = IECoreMaya.FnProceduralHolder(node) fnPH.setParameterised(self.SphereProcedural()) radiusAttr = fnPH.parameterPlugPath(fnPH.getProcedural()["radius"]) prevScene = None for i in range(0, 10000): maya.cmds.setAttr(radiusAttr, i + 1) scene = fnPH.scene() self.failUnless(isinstance(scene, IECoreGL.Scene)) self.failIf(prevScene is not None and scene.isSame(prevScene)) prevScene = scene
def _convertToGeometry(proceduralHolder, *unused): fnP = IECoreMaya.FnProceduralHolder(proceduralHolder) proceduralParent = maya.cmds.listRelatives(fnP.fullPathName(), parent=True, fullPath=True)[0] geometryParent = maya.cmds.createNode("transform", name="convertedProcedural", skipSelect=True) proceduralTransform = maya.cmds.xform(proceduralParent, query=True, worldSpace=True, matrix=True) maya.cmds.xform(geometryParent, worldSpace=True, matrix=proceduralTransform) fnP.convertToGeometry(parent=geometryParent) maya.cmds.select(geometryParent, replace=True)
def __createLocatorAtPoints(proceduralHolder, childPlugSuffixes, *unused): fnPH = IECoreMaya.FnProceduralHolder(proceduralHolder) selectedNames = fnPH.selectedComponentNames() proceduralParent = maya.cmds.listRelatives(fnPH.fullPathName(), parent=True, fullPath=True)[0] locators = [] for name in selectedNames: for childPlugSuffix in childPlugSuffixes: outputPlug = fnPH.componentBoundPlugPath(name) locator = "|" + maya.cmds.spaceLocator( name=name.replace("/", "_") + childPlugSuffix)[0] maya.cmds.connectAttr( outputPlug + ".componentBound" + childPlugSuffix, locator + ".translate") locators.extend( maya.cmds.parent(locator, proceduralParent, relative=True)) maya.cmds.select(locators, replace=True)
def __createLocatorWithTransform(proceduralHolder, *unused): fnPH = IECoreMaya.FnProceduralHolder(proceduralHolder) selectedNames = fnPH.selectedComponentNames() proceduralParent = maya.cmds.listRelatives(fnPH.fullPathName(), parent=True, fullPath=True)[0] locators = [] for name in selectedNames: outputPlug = fnPH.componentTransformPlugPath(name) locator = "|" + maya.cmds.spaceLocator(name=name.replace("/", "_") + "Transform")[0] maya.cmds.connectAttr(outputPlug + ".componentTranslate", locator + ".translate") maya.cmds.connectAttr(outputPlug + ".componentRotate", locator + ".rotate") maya.cmds.connectAttr(outputPlug + ".componentScale", locator + ".scale") locators.extend( maya.cmds.parent(locator, proceduralParent, relative=True)) maya.cmds.select(locators, replace=True)
def __selectCoordinateSystem(self): fnPH = IECoreMaya.FnProceduralHolder(self.node()) fnPH.selectComponentNames( set(["coordinateSystem:" + maya.cmds.getAttr(self.plugName())]))
def _dagMenu(menu, proceduralHolder): if maya.cmds.nodeType(proceduralHolder) != "ieProceduralHolder": children = maya.cmds.listRelatives(proceduralHolder, children=True, type="ieProceduralHolder", fullPath=True) if not children: return else: proceduralHolder = children[0] maya.cmds.setParent(menu, menu=True) maya.cmds.menuItem(label="Component", radialPosition="N", command=IECore.curry(__componentCallback, proceduralHolder)) maya.cmds.menuItem( label="Object", radialPosition="W", command=IECore.curry(__objectCallback, proceduralHolder), ) maya.cmds.menuItem(label="Print Component Names", radialPosition="NE", command=IECore.curry(__printComponents, proceduralHolder)) fnPH = IECoreMaya.FnProceduralHolder(proceduralHolder) if fnPH.selectedComponentNames(): maya.cmds.menuItem(label="Print Selected Component Names", radialPosition="E", command=IECore.curry(__printSelectedComponents, proceduralHolder)) if fnPH.selectedComponentNames(): maya.cmds.menuItem( label="Create Locator", radialPosition="SE", subMenu=True, ) maya.cmds.menuItem( label="At Bound Min", radialPosition="N", command=IECore.curry(__createLocatorAtPoints, proceduralHolder, ["Min"]), ) maya.cmds.menuItem( label="At Bound Max", radialPosition="NE", command=IECore.curry(__createLocatorAtPoints, proceduralHolder, ["Max"]), ) maya.cmds.menuItem( label="At Bound Min And Max", radialPosition="E", command=IECore.curry(__createLocatorAtPoints, proceduralHolder, ["Min", "Max"]), ) maya.cmds.menuItem( label="At Bound Centre", radialPosition="SE", command=IECore.curry(__createLocatorAtPoints, proceduralHolder, ["Center"]), ) maya.cmds.menuItem( label="At Transform Origin", radialPosition="S", command=IECore.curry(__createLocatorWithTransform, proceduralHolder), ) maya.cmds.setParent(menu, menu=True) maya.cmds.menuItem( label="Convert To Geometry", radialPosition="S", command= "import IECoreMaya; IECoreMaya.ProceduralHolderUI._convertToGeometry( \"" + proceduralHolder + "\" )", ) for c in __dagMenuCallbacks: c(menu, proceduralHolder)