Beispiel #1
0
	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 ) )
Beispiel #2
0
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)])
Beispiel #4
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)
Beispiel #6
0
    def testConversion(self):

        procHolderShape = maya.cmds.createNode("ieProceduralHolder")
        IECoreMaya.FnProceduralHolder(procHolderShape).setProcedural(
            dummyProcedural())

        converter = IECoreMaya.FromMayaProceduralHolderConverter(
            str(procHolderShape))
        self.failUnless(isinstance(converter.convert(), dummyProcedural))
Beispiel #7
0
    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")
Beispiel #8
0
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)
Beispiel #9
0
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)
Beispiel #10
0
	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" )
Beispiel #11
0
	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)])
Beispiel #13
0
	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
Beispiel #15
0
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)
Beispiel #18
0
    def __selectCoordinateSystem(self):

        fnPH = IECoreMaya.FnProceduralHolder(self.node())
        fnPH.selectComponentNames(
            set(["coordinateSystem:" + maya.cmds.getAttr(self.plugName())]))
Beispiel #19
0
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)