예제 #1
0
	def _createHeader( self, columnLayout, **kw ) :

		IECoreMaya.CompoundParameterUI._createHeader( self, columnLayout, **kw )

		maya.cmds.rowLayout( numberOfColumns = 2, parent = columnLayout )

		collapsable = True
		with IECore.IgnoredExceptions( KeyError ) :
			collapsable = self.parameter.userData()["UI"]["collapsable"].value

		lable = "Class" if collapsable else self.label()
		font = "smallPlainLabelFont" if collapsable else "tinyBoldLabelFont"

		maya.cmds.text(
			label = lable,
			font = font,
			align = "right",
			annotation = self.description()
		)

		self.__menuParent = maya.cmds.iconTextStaticLabel(
			image = "arrowDown.xpm",
			font = "smallBoldLabelFont",
			label = self.__menuParentLabel(),
			style = "iconAndTextHorizontal",
			height = 23,
		)

		# popup menu can be activated with either right or left buttons
		IECoreMaya.createMenu( self.__menuDefinition, self.__menuParent )
		IECoreMaya.createMenu( self.__menuDefinition, self.__menuParent, button = 1 )
	def __init__( self, layoutName, classNameOrParameterised, classVersion=None, envVarName=None ) :
		""" Creates a temporary TransientParameterisedHolderNode in order to present the UI for the specified
		    parameterised object in the given layout. The node is automatically deleted when the holding
		    layout is destroyed """

		nodeName = maya.cmds.createNode( "ieTransientParameterisedHolderNode", skipSelect = True )

		# Script jobs aren't available from maya.cmds. Maya Python bindings generate swig warnings
		# such as "swig/python detected a memory leak of type 'MCallbackId *', no destructor found"
		IECoreMaya.mel( 'scriptJob -uiDeleted "%s" "delete %s" -protected' % ( layoutName, nodeName ) )

		object = StringUtil.dependencyNodeFromString( nodeName )

		maya.OpenMaya.MFnDependencyNode.__init__( self, object )

		if isinstance( classNameOrParameterised, str ) :
			res = _IECoreMaya._parameterisedHolderSetParameterised( self, classNameOrParameterised, classVersion, envVarName )
		else :
			assert( not classVersion )
			assert( not envVarName )

			res = _IECoreMaya._parameterisedHolderSetParameterised( self, classNameOrParameterised )

		parameterised = self.getParameterised()[0]

		if parameterised:
			maya.cmds.setParent( layoutName )
			IECoreMaya.ParameterUI.create( object, parameterised.parameters() )
			maya.cmds.setParent( layoutName )

		return res
예제 #3
0
	def testResultAttrSaveLoadMeshConnections( self ) :
		
		box = maya.cmds.listRelatives( maya.cmds.polyCube(), shapes=True )[0]
		torus = maya.cmds.listRelatives( maya.cmds.polyTorus(), shapes=True )[0]
		node = maya.cmds.createNode( "ieOpHolderNode" )
		fnPH = IECoreMaya.FnOpHolder( node )
		fnPH.setOp( "meshMerge" )
		
		maya.cmds.connectAttr( box + ".outMesh", node + ".parm_input" )
		maya.cmds.connectAttr( torus + ".outMesh", node + ".parm_mesh" )
		mesh = maya.cmds.createNode( "mesh" )
		maya.cmds.connectAttr( node + ".result", mesh + ".inMesh" )
		quads = maya.cmds.polyQuad( mesh )[0]
		joint = maya.cmds.createNode( "joint" )
		cluster = maya.cmds.skinCluster( mesh, joint )
		
		fnMesh = maya.OpenMaya.MFnMesh( IECoreMaya.dependencyNodeFromString( mesh ) )
		self.assertEqual( fnMesh.numVertices(), 408 )
		self.assertEqual( fnMesh.numPolygons(), 406 )
		
		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "resultAttrLoadTest.ma" ) )
		testScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )
		maya.cmds.file( testScene, f = True, o  = True )
		
		fnMesh = maya.OpenMaya.MFnMesh( IECoreMaya.dependencyNodeFromString( mesh ) )
		self.assertEqual( fnMesh.numVertices(), 408 )
		self.assertEqual( fnMesh.numPolygons(), 406 )
		
		self.assertEqual( maya.cmds.getAttr( quads + ".nodeState" ), 0 )
	def create( layoutName, classNameOrParameterised, classVersion=None, envVarName=None ) :

		with IECoreMaya.UndoDisabled() :

			nodeName = maya.cmds.createNode( "ieTransientParameterisedHolderNode", skipSelect = True )

			# Script jobs aren't available from maya.cmds. Maya Python bindings generate swig warnings
			# such as "swig/python detected a memory leak of type 'MCallbackId *', no destructor found"
			IECoreMaya.mel( 'scriptJob -uiDeleted "%s" "python( \\\"import IECoreMaya; IECoreMaya.FnTransientParameterisedHolderNode._deleteNode( \'%s\' )\\\" )" -protected' % ( layoutName, nodeName ) )

			fnTPH = FnTransientParameterisedHolderNode( nodeName )

			if isinstance( classNameOrParameterised, str ) :
				fnTPH.setParameterised( classNameOrParameterised, classVersion, envVarName )
			else :
				assert( not classVersion )
				assert( not envVarName )

				fnTPH.setParameterised( classNameOrParameterised )

			parameterised = fnTPH.getParameterised()[0]

			if parameterised :
				maya.cmds.setParent( layoutName )
				IECoreMaya.ParameterUI.create( fnTPH.fullPathName(), parameterised.parameters() )
				maya.cmds.setParent( layoutName )

		return fnTPH
예제 #5
0
	def __showEditor( self, attributeName ) :

		split = attributeName.split('.', 1 )
		node = split[0]

		melCmd = 'showEditor "' + node + '"'

		IECoreMaya.mel( melCmd.encode('ascii') )
예제 #6
0
	def __expressionEditor( self, attributeName = None ) :

		split = attributeName.split('.', 1 )
		node = split[0]
		attr = split[1]

		melCmd = 'expressionEditor EE "' + node + '" "' + attr + '"'

		IECoreMaya.mel( melCmd.encode('ascii') )
예제 #7
0
	def _addPopupMenu( self, parentUI, **kw ) :

		existingMenus = maya.cmds.control( parentUI, query=True, popupMenuArray=True )
		if existingMenus :
			for m in existingMenus :
				maya.cmds.deleteUI( m, menu=True )

		IECoreMaya.createMenu( definition = IECore.curry( self.__popupMenuDefinition, **kw ), parent = parentUI, useInterToUI=False )
		
		if "button1" in kw and kw["button1"] :
			IECoreMaya.createMenu( definition = IECore.curry( self.__popupMenuDefinition, **kw ), parent = parentUI, button = 1, useInterToUI=False )
예제 #8
0
	def label( self ):

		if self.__labelWithNodeName :

			n = self.nodeName() + "." + self.__longParameterName
			if not self.__longParameterName :
				# Top-level parameter comes through into here without a name
				n = self.nodeName() + ".parameters"

			return IECoreMaya.mel( "interToUI(\"" + n + "\")" ).value

		else :

			return IECoreMaya.mel( "interToUI(\"" + self.parameter.name + "\")" ).value
예제 #9
0
def create(meshDagPath, className, classVersion, **kw):

    if type(meshDagPath) is str:
        sel = OpenMaya.MSelectionList()
        sel.add(meshDagPath)
        meshDagPath = OpenMaya.MDagPath()
        sel.getDagPath(0, meshDagPath)
        meshDagPath.extendToShape()

    constructionHistoryEnabled = IECoreMaya.mel("constructionHistory -q -tgl").value

    if not __hasHistory(meshDagPath) and constructionHistoryEnabled == 0:

        # \todo we can't actually do this right now because we're unable to convert the resultant MeshPrimitive
        # back into the original meshNode MObject given to us
        raise RuntimeError("Currently unable to apply MeshOp in-place ")

        meshNode = meshDagPath.node()

        __applyMeshOp(meshNode, className, classVersion, **kw)

        return None
    else:
        modifierNode = __createMeshOpNode(className, classVersion, **kw)

        __connectNodes(modifierNode, meshDagPath)

        fnDN = OpenMaya.MFnDependencyNode(modifierNode)

        return str(fnDN.name())
예제 #10
0
	def __init__( self, node, parameter, **kw ) :
		
		IECoreMaya.ParameterUI.__init__(
			
			self,
			node,
			parameter,
			maya.cmds.frameLayout(
				labelVisible = False,
				collapsable = False,
			),
			**kw
			
		)
		
		# passing borderVisible=False to the constructor does bugger all so we do it here instead.
		maya.cmds.frameLayout( self._topLevelUI(), edit=True, borderVisible=False )
				
		collapsible = self.__parameterIsCollapsible()
		
		self.__kw = kw.copy()
		if collapsible :
			self.__kw["hierarchyDepth"] = self.__kw.get( "hierarchyDepth", -1 ) + 1
		
		collapsed = self._retrieveCollapsedState( collapsible )
		
		self.__collapsible = IECoreMaya.Collapsible(
		
			annotation = self.description(),
			label = self.label(),
			labelFont = IECoreMaya.CompoundParameterUI._labelFont( self.__kw["hierarchyDepth"] ),
			labelIndent = IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"] ),
			labelVisible = collapsible,
			collapsed = collapsed,
			expandCommand = self.__expand,
			collapseCommand = self.__collapse,
			
		)
					
		self.__formLayout = maya.cmds.formLayout( parent=self.__collapsible.frameLayout() )
	
		self.__buttonRow = maya.cmds.rowLayout( nc=3, adj=3, cw3=( 25, 25, 40 ), parent=self.__formLayout )
	
		self.__addButton = maya.cmds.picture( image="ie_addIcon_grey.xpm", parent=self.__buttonRow, width=21 )
		IECoreMaya.createMenu( IECore.curry( self.__classMenuDefinition, None ), self.__addButton, useInterToUI=False )
		IECoreMaya.createMenu( IECore.curry( self.__classMenuDefinition, None ), self.__addButton, useInterToUI=False, button=1 )
		
		self.__toolsButton = maya.cmds.picture( image="ie_actionIcon_grey.xpm", parent=self.__buttonRow, width=21 )
		IECoreMaya.createMenu( IECore.curry( self.__toolsMenuDefinition, None ), self.__toolsButton, useInterToUI=False )
		IECoreMaya.createMenu( IECore.curry( self.__toolsMenuDefinition, None ), self.__toolsButton, useInterToUI=False, button=1 )

		self.__classInfo = []
		self.__childUIs = {} # mapping from parameter name to ui name
		
		self.replace( node, parameter )
예제 #11
0
	def testManyUVConversionsFromPlug( self ) :
		
		coreMesh = IECore.Reader.create( "test/IECore/data/cobFiles/pSphereShape1.cob" ).read()
		
		self.assertTrue( "s" in coreMesh )
		self.assertTrue( "t" in coreMesh )
		
		for i in range( 0, 7 ) :
			coreMesh[ "testUVSet%d_s" % i ] = IECore.PrimitiveVariable( coreMesh["s"].interpolation, coreMesh["s"].data.copy() )
			coreMesh[ "testUVSet%d_t" % i ] = IECore.PrimitiveVariable( coreMesh["t"].interpolation, coreMesh["t"].data.copy() )
		
		fn = IECoreMaya.FnOpHolder.create( "test", "meshMerge" )
		
		mayaMesh = maya.cmds.ls( maya.cmds.polyPlane(), dag=True, type="mesh" )[0]
		maya.cmds.connectAttr( fn.name()+".result", mayaMesh+".inMesh", force=True )
		
		op = fn.getOp()
		with fn.parameterModificationContext() :
			op["input"].setValue( coreMesh )
		
		maya.cmds.file( rename="/tmp/test.ma" )
		maya.cmds.file( save=True )
		maya.cmds.file( new=True, f=True )
		maya.cmds.file( "/tmp/test.ma", open=True )
		
		fnMesh = OpenMaya.MFnMesh( IECoreMaya.dagPathFromString( mayaMesh ) )
		self.assertEqual( fnMesh.numPolygons(), 760 )
		# When calling fnMesh.numFaceVertices() (and other MFnMesh API calls), given a mesh with 6
		# or more UV sets, which has never been evaluated before, the first call throws kFailure.
		# From within the ToMayaMeshConverter itself, the output plug appears fine, and the API calls
		# evaluate as expected. Despite this, the resulting mesh cannot be evaluated on the first try.
		# Making the mesh visible, or making any attempt to evaluate it, will trigger some unknown
		# internal updating, and subsequent attempts to evaluate it will succeed. Meshes with 5 or less
		# UV sets do not suffer from this problem. Leaving this test failing in case it is fixed in a
		# future Maya, and to mark the issue so users of ToMayaMeshConverter have breadcrumbs to follow.
		self.assertEqual( fnMesh.numFaceVertices(), 2280 ) # Known failure. See note above for an explanation.
		self.assertEqual( maya.cmds.polyEvaluate( mayaMesh, vertex=True ), 382 )
		self.assertEqual( maya.cmds.polyEvaluate( mayaMesh, face=True ), 760 )
		
		u = OpenMaya.MFloatArray()
		v = OpenMaya.MFloatArray()
		
		fnMesh.getUVs( u, v )
		self.assertEqual( u.length(), 2280 )
		self.assertEqual( v.length(), 2280 )
		self.assertEqual( u[0], coreMesh[ "s" ].data[0] )
		self.assertEqual( v[0], 1.0 - coreMesh[ "t" ].data[0] )
		
		for i in range( 0, 7 ) :
			
			fnMesh.getUVs( u, v, "testUVSet%d" % i )
			self.assertEqual( u.length(), 2280 )
			self.assertEqual( v.length(), 2280 )
			self.assertEqual( u[12], coreMesh[ "testUVSet%d_s" % i ].data[12] )
			self.assertEqual( v[12], 1.0 - coreMesh[ "testUVSet%d_t" % i ].data[12] )
	def testSingleNumericPlugs(self):

		locator = maya.cmds.spaceLocator()[0]

		attr = ("tBool", IECore.BoolData, True)
		maya.cmds.addAttr(ln=attr[0], at="bool")
		maya.cmds.setAttr(locator + '.' + attr[0], attr[2])
		converter = IECoreMaya.FromMayaPlugConverter.create( IECoreMaya.plugFromString(locator + '.' + attr[0]) )
		self.assert_(converter)
		cValue = converter.convert()
		self.assert_(isinstance(cValue, attr[1]))
		self.assertAlmostEqual(cValue.value, attr[2])

		attr = ("tFloat", IECore.FloatData, 0.123456)
		maya.cmds.addAttr(ln=attr[0], at="float")
		maya.cmds.setAttr(locator + '.' + attr[0], attr[2])
		converter = IECoreMaya.FromMayaPlugConverter.create( IECoreMaya.plugFromString(locator + '.' + attr[0]) )
		self.assert_(converter)
		cValue = converter.convert()
		self.assert_(isinstance(cValue, attr[1]))
		self.assertAlmostEqual(cValue.value, attr[2])

		attr = ("tDouble", IECore.DoubleData, 0.123456)
		maya.cmds.addAttr(ln=attr[0], at="double")
		maya.cmds.setAttr(locator + '.' + attr[0], attr[2])
		converter = IECoreMaya.FromMayaPlugConverter.create( IECoreMaya.plugFromString(locator + '.' + attr[0]) )
		self.assert_(converter)
		cValue = converter.convert()
		self.assert_(isinstance(cValue, attr[1]))
		self.assertAlmostEqual(cValue.value, attr[2])

		attr = ("tShort", IECore.ShortData, 1)
		maya.cmds.addAttr(ln=attr[0], at="enum", en="A:B:C")
		maya.cmds.setAttr(locator + '.' + attr[0], attr[2])
		converter = IECoreMaya.FromMayaPlugConverter.create( IECoreMaya.plugFromString(locator + '.' + attr[0]) )
		self.assert_(converter)
		cValue = converter.convert()
		self.assert_(isinstance(cValue, attr[1]))
		self.assertAlmostEqual(cValue.value, attr[2])
예제 #13
0
	def testCreases( self ):

		cube = maya.cmds.polyCube()[0]
		fnMesh = OpenMaya.MFnMesh( IECoreMaya.dagPathFromString(cube) )

		cornerIds = OpenMaya.MUintArray()
		cornerIds.append( 5 )

		cornerSharpnesses = OpenMaya.MDoubleArray()
		cornerSharpnesses.append( 10 )

		fnMesh.setCreaseVertices( cornerIds, cornerSharpnesses )

		edgeIds = OpenMaya.MUintArray()
		edgeIds.append( 0 )
		edgeIds.append( 1 )

		edgeSharpnesses = OpenMaya.MDoubleArray()
		edgeSharpnesses.append( 1 )
		edgeSharpnesses.append( 5 )

		fnMesh.setCreaseEdges( edgeIds, edgeSharpnesses )

		# store which vertices belong to the affected edges

		util = OpenMaya.MScriptUtil()

		vertices = []
		for edgeId in edgeIds :

			edgeVertices = util.asInt2Ptr()
			fnMesh.getEdgeVertices( edgeId, edgeVertices )

			vertices.append( util.getInt2ArrayItem( edgeVertices, 0, 0 ) )
			vertices.append( util.getInt2ArrayItem( edgeVertices, 0, 1 ) )

		# convert and test

		cube = maya.cmds.listRelatives( cube, shapes=True )[0]

		converter = IECoreMaya.FromMayaMeshConverter.create( cube, IECoreScene.MeshPrimitive.staticTypeId() )
		cortexCube = converter.convert()

		self.assertEqual( cortexCube.cornerIds(), IECore.IntVectorData( [ 5 ] ) )
		self.assertEqual( cortexCube.cornerSharpnesses(), IECore.FloatVectorData( [ 10.0 ] ) )

		self.assertEqual( cortexCube.creaseLengths(), IECore.IntVectorData( [ 2, 2 ] ) )
		self.assertEqual( cortexCube.creaseIds(), IECore.IntVectorData( vertices ) )
		self.assertEqual( cortexCube.creaseSharpnesses(), IECore.FloatVectorData( [ 1, 5 ] ) )
	def testFactory( self ) :

		locator = maya.cmds.spaceLocator( position=( 1, 2, 3 ) )[0]

		converter = IECoreMaya.FromMayaPlugConverter.create( locator + ".translateX" )
		self.assert_( converter )
		self.assert_( converter.isInstanceOf( IECoreMaya.FromMayaPlugConverter.staticTypeId() ) )

		converter = IECoreMaya.FromMayaPlugConverter.create( locator + ".scaleX" )
		self.assert_( converter )
		self.assert_( converter.isInstanceOf( IECoreMaya.FromMayaPlugConverter.staticTypeId() ) )

		converter = IECoreMaya.FromMayaPlugConverter.create( locator + ".scale" )
		self.assert_( converter )
		self.assert_( converter.isInstanceOf( IECoreMaya.FromMayaPlugConverter.staticTypeId() ) )

		converter = IECoreMaya.FromMayaPlugConverter.create( IECoreMaya.plugFromString( locator + ".translateX" ) )
		self.assert_( converter )
		self.assert_( converter.isInstanceOf( IECoreMaya.FromMayaPlugConverter.staticTypeId() ) )
예제 #15
0
def createCortexMenu() :

	if os.environ.get( "IECOREMAYA_DISABLE_MENU", "0" ) == "1" :
		return
		
	m = IECore.MenuDefinition()
	m.append(
		"/Create Procedural",
		{
			"subMenu" : proceduralCreationMenuDefinition,
		}
	)
	
	m.append(
		"/Create Op",
		{
			"subMenu" : opCreationMenuDefinition,
		}
	)
	
	global __cortexMenu
	__cortexMenu = IECoreMaya.createMenu( m, "MayaWindow", "Cortex" )
예제 #16
0
    def testExcessReferenceEdits(self):

        IECoreMaya.FnOpHolder.create("testOp", "maths/multiply", 2)

        # Save the scene out so we can reference it
        maya.cmds.file(rename=os.path.join(os.getcwd(), "test", "IECoreMaya",
                                           "referenceEditCounts.ma"))
        referenceScene = maya.cmds.file(force=True,
                                        type="mayaAscii",
                                        save=True)

        # New scene, and read it in.
        maya.cmds.file(new=True, force=True)
        maya.cmds.file(referenceScene, reference=True, namespace="ns1")

        # Check there are no reference edits

        fnOH = IECoreMaya.FnOpHolder('ns1:testOp')
        op = fnOH.getOp()

        aPath = fnOH.parameterPlugPath(op["a"])
        bPath = fnOH.parameterPlugPath(op["b"])
        self.assertEqual(maya.cmds.getAttr(aPath), 1)
        self.assertEqual(maya.cmds.getAttr(bPath), 2)

        self.assertEqual(
            len(maya.cmds.referenceQuery(referenceScene, editStrings=True)), 0)

        # set values, but with no changes

        with fnOH.parameterModificationContext():
            op["a"].setNumericValue(1)
            op["b"].setNumericValue(2)

        # Check the values are the same, and there are still no reference edits

        self.assertEqual(maya.cmds.getAttr(aPath), 1)
        self.assertEqual(maya.cmds.getAttr(bPath), 2)

        self.assertEqual(
            len(maya.cmds.referenceQuery(referenceScene, editStrings=True)), 0)

        # change a value to a genuinely new value
        with fnOH.parameterModificationContext():
            op["a"].setNumericValue(100)

        # Check the maya value is updated and there is 1 reference edit

        self.assertEqual(maya.cmds.getAttr(aPath), 100)
        self.assertEqual(maya.cmds.getAttr(bPath), 2)

        self.assertEqual(
            len(maya.cmds.referenceQuery(referenceScene, editStrings=True)), 1)

        # Undo and check there is still 1 reference edit. Ideally there would be none but
        # maya isn't that clever.

        maya.cmds.undo()

        self.assertEqual(maya.cmds.getAttr(aPath), 1)
        self.assertEqual(maya.cmds.getAttr(bPath), 2)

        self.assertEqual(
            len(maya.cmds.referenceQuery(referenceScene, editStrings=True)), 1)
예제 #17
0
	def __drawHeaderParameterControl( self, parameter, fnPH ) :
		
		## \todo This would be so much easier if we could just use ParameterUI
		# instances for each of the controls. We can't because they all do their
		# own labelling and are layed out for an attribute editor. if we do the
		# todo in ParameterUI to remove the labels and stuff then we can do the
		# todo here.
		
		control = None 
		
		parameterPlugPath = fnPH.parameterPlugPath( parameter )
		annotation = IECore.StringUtil.wrap( "%s\n\n%s" % ( parameterPlugPath.split( "." )[1], parameter.description ), 48 )
		if parameter.presetsOnly :

			control = maya.cmds.iconTextStaticLabel(
				image = "arrowDown.xpm",
				font = "smallBoldLabelFont",
				style = "iconAndTextHorizontal",
				height = 23,
				width = 80,
				annotation = annotation,
			)
			IECoreMaya.createMenu( IECore.curry( self.__presetsMenu, parameter ), control )
			IECoreMaya.createMenu( IECore.curry( self.__presetsMenu, parameter ), control, button=1 )
			self.__presetParameters.append( parameter )
			self.__presetUIs.append( control )
			if self.__attributeChangedCallbackId is None :
				self.__attributeChangedCallbackId = IECoreMaya.CallbackId(
					maya.OpenMaya.MNodeMessage.addAttributeChangedCallback( self.__vectorParent().node(), self.__attributeChanged )
				)

			self.__updatePresetLabel( len( self.__presetUIs ) - 1 )

		elif isinstance( parameter, IECore.BoolParameter ) :

			control = maya.cmds.checkBox( label="", annotation=annotation )
			maya.cmds.connectControl( control, parameterPlugPath )

		elif isinstance( parameter, IECore.FloatParameter ) :

			control = maya.cmds.floatField(
				annotation = annotation,
				minValue = parameter.minValue,
				maxValue = parameter.maxValue,
				width = 45,
				pre = 4
			)
			maya.cmds.connectControl( control, parameterPlugPath )
			
		elif isinstance( parameter, IECore.IntParameter ) :

			kw = {}
			if parameter.hasMinValue() :
				kw["minValue"] = parameter.minValue
			if parameter.hasMaxValue() :
				kw["maxValue"] = parameter.maxValue

			control = maya.cmds.intField(
				annotation = annotation,
				width = 45,
				**kw
			)
			maya.cmds.connectControl( control, parameterPlugPath )	

		elif isinstance( parameter, IECore.Color3fParameter ) :

			control = maya.cmds.attrColorSliderGrp(
				label = "",
				columnWidth = ( ( 1, 1 ), ( 2, 30 ), ( 3, 1 ) ),
				columnAttach = ( ( 1, "both", 0 ), ( 2, "both", 0  ), ( 3, "left", 0 ) ),
				attribute = parameterPlugPath,
				annotation = annotation,
				showButton = False
			)
			
		elif isinstance( parameter, IECore.StringParameter ) :
		
			control = maya.cmds.textField( annotation = annotation, width = 150 )
			maya.cmds.connectControl( control, parameterPlugPath )

		elif isinstance( parameter, IECore.V2fParameter ) :
			
			control = maya.cmds.rowLayout( nc=2, cw2=( 45, 45 ) )
			
			column1 = maya.cmds.floatField(
				annotation = annotation,
				width = 45,
				pre = 4,
				parent = control
			)
			
			maya.cmds.connectControl( column1, parameterPlugPath + "X" )
			column2 = maya.cmds.floatField(
				annotation = annotation,
				width = 45,
				pre = 4,
				parent = control
			)
			
			maya.cmds.connectControl( column2, parameterPlugPath + "Y" )
			
		else :

			IECore.msg( IECore.Msg.Level.Warning, "ClassVectorParameterUI", "Parameter \"%s\" has unsupported type for inclusion in header ( %s )." % ( parameter.name, parameter.typeName() ) )
		
		return control
예제 #18
0
    def test(self):

        s = maya.cmds.spaceLocator()[0]

        maya.cmds.addAttr(s,
                          at="enum",
                          sn="enumTest",
                          enumName="A:B:C",
                          defaultValue=1)
        self.assertEqual(maya.cmds.getAttr(s + ".enumTest"), 1)

        maya.cmds.addAttr(s, at="bool", sn="boolTest", defaultValue=1)
        self.assertEqual(maya.cmds.getAttr(s + ".boolTest"), 1)

        maya.cmds.addAttr(s, at="float", sn="floatTest")
        self.assertEqual(maya.cmds.getAttr(s + ".floatTest"), 0)

        maya.cmds.addAttr(s, at="long", sn="intTest")
        self.assertEqual(maya.cmds.getAttr(s + ".intTest"), 0)

        maya.cmds.addAttr(s, at="float2", sn="float2Test")
        maya.cmds.addAttr(s, at="float", sn="float2TestX", parent="float2Test")
        maya.cmds.addAttr(s, at="float", sn="float2TestY", parent="float2Test")
        self.assertEqual(maya.cmds.getAttr(s + ".float2TestX"), 0)
        self.assertEqual(maya.cmds.getAttr(s + ".float2TestY"), 0)

        maya.cmds.addAttr(s, at="long2", sn="int2Test")
        maya.cmds.addAttr(s,
                          at="long",
                          sn="int2TestX",
                          parent="int2Test",
                          defaultValue=1)
        maya.cmds.addAttr(s,
                          at="long",
                          sn="int2TestY",
                          parent="int2Test",
                          defaultValue=2)
        self.assertEqual(maya.cmds.getAttr(s + ".int2TestX"), 1)
        self.assertEqual(maya.cmds.getAttr(s + ".int2TestY"), 2)

        maya.cmds.addAttr(s, at="float3", sn="float3Test")
        maya.cmds.addAttr(s,
                          at="float",
                          sn="float3TestX",
                          parent="float3Test",
                          defaultValue=10)
        maya.cmds.addAttr(s,
                          at="float",
                          sn="float3TestY",
                          parent="float3Test",
                          defaultValue=20)
        maya.cmds.addAttr(s,
                          at="float",
                          sn="float3TestZ",
                          parent="float3Test",
                          defaultValue=30)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestX"), 10)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestY"), 20)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestZ"), 30)

        maya.cmds.addAttr(s, at="short3", sn="short3Test")
        maya.cmds.addAttr(s,
                          at="short",
                          sn="short3TestX",
                          parent="short3Test",
                          defaultValue=101)
        maya.cmds.addAttr(s,
                          at="short",
                          sn="short3TestY",
                          parent="short3Test",
                          defaultValue=201)
        maya.cmds.addAttr(s,
                          at="short",
                          sn="short3TestZ",
                          parent="short3Test",
                          defaultValue=301)
        self.assertEqual(maya.cmds.getAttr(s + ".short3TestX"), 101)
        self.assertEqual(maya.cmds.getAttr(s + ".short3TestY"), 201)
        self.assertEqual(maya.cmds.getAttr(s + ".short3TestZ"), 301)

        maya.cmds.addAttr(s, dt="string", sn="stringTest")
        maya.cmds.setAttr(s + ".stringTest", "hi", type="string")
        self.assertEqual(maya.cmds.getAttr(s + ".stringTest"), "hi")

        context = IECoreMaya.TemporaryAttributeValues({
            s + ".enumTest":
            2,
            s + ".boolTest":
            False,
            s + ".floatTest":
            10,
            s + ".intTest":
            20,
            s + ".float2Test": (1, 2),
            s + ".int2Test":
            IECore.V2i(3, 4),
            s + ".float3Test": (9, 6, 1),
            s + ".short3Test": (500, 2, -1),
            s + ".stringTest":
            "bye",
        })

        with context:

            self.assertEqual(maya.cmds.getAttr(s + ".enumTest"), 2)
            self.assertEqual(maya.cmds.getAttr(s + ".boolTest"), 0)
            self.assertEqual(maya.cmds.getAttr(s + ".floatTest"), 10)
            self.assertEqual(maya.cmds.getAttr(s + ".intTest"), 20)
            self.assertEqual(maya.cmds.getAttr(s + ".float2TestX"), 1)
            self.assertEqual(maya.cmds.getAttr(s + ".float2TestY"), 2)
            self.assertEqual(maya.cmds.getAttr(s + ".int2TestX"), 3)
            self.assertEqual(maya.cmds.getAttr(s + ".int2TestY"), 4)
            self.assertEqual(maya.cmds.getAttr(s + ".float3TestX"), 9)
            self.assertEqual(maya.cmds.getAttr(s + ".float3TestY"), 6)
            self.assertEqual(maya.cmds.getAttr(s + ".float3TestZ"), 1)
            self.assertEqual(maya.cmds.getAttr(s + ".short3TestX"), 500)
            self.assertEqual(maya.cmds.getAttr(s + ".short3TestY"), 2)
            self.assertEqual(maya.cmds.getAttr(s + ".short3TestZ"), -1)
            self.assertEqual(maya.cmds.getAttr(s + ".stringTest"), "bye")

        self.assertEqual(maya.cmds.getAttr(s + ".enumTest"), 1)
        self.assertEqual(maya.cmds.getAttr(s + ".boolTest"), 1)
        self.assertEqual(maya.cmds.getAttr(s + ".floatTest"), 0)
        self.assertEqual(maya.cmds.getAttr(s + ".intTest"), 0)
        self.assertEqual(maya.cmds.getAttr(s + ".float2TestX"), 0)
        self.assertEqual(maya.cmds.getAttr(s + ".float2TestY"), 0)
        self.assertEqual(maya.cmds.getAttr(s + ".int2TestX"), 1)
        self.assertEqual(maya.cmds.getAttr(s + ".int2TestY"), 2)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestX"), 10)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestY"), 20)
        self.assertEqual(maya.cmds.getAttr(s + ".float3TestZ"), 30)
        self.assertEqual(maya.cmds.getAttr(s + ".stringTest"), "hi")
예제 #19
0
def _dagMenu( menu, sceneShape ) :

	sceneShapes = __selectedSceneShapes()
	if not sceneShapes:
		return

	fnScS = []
	for target in sceneShapes:
		fnScS.append( IECoreMaya.FnSceneShape( target ) )

	maya.cmds.setParent( menu, menu=True )

	invalidSceneShapes = __invalidSceneShapes( sceneShapes )

	if invalidSceneShapes:
		maya.cmds.menuItem(
		label = "Invalid Inputs for selected SceneShapes!",
		radialPosition = "N",
		)

	# Component mode
	elif fnScS[0].selectedComponentNames():

			maya.cmds.menuItem(
			label = "Object",
			radialPosition = "N",
			command = IECore.curry( __objectCallback, sceneShapes[0] ),
			)

			maya.cmds.menuItem(
				label = "Print Component Names",
				radialPosition = "NW",
				command = IECore.curry( __printComponents, sceneShapes[0] )
			)

			maya.cmds.menuItem(
				label = "Print Selected Component Names",
				radialPosition = "NE",
				command = IECore.curry( __printSelectedComponents, sceneShapes[0] )
			)

			maya.cmds.menuItem(
				label = "Expand...",
				radialPosition = "SE",
				subMenu = True
			)

			maya.cmds.menuItem(
				label = "Expand to Selected Components",
				radialPosition = "S",
				command = IECore.curry( __expandToSelected, sceneShapes[0] )
			)
			maya.cmds.setParent( "..", menu=True )

			maya.cmds.menuItem(
				label = "Create Locator",
				radialPosition = "SW",
				subMenu = True,
			)

			maya.cmds.menuItem(
				label = "At Bound Min",
				radialPosition = "N",
				command = IECore.curry( __createLocatorAtPoints, sceneShapes[0], [ "Min" ] ),
			)

			maya.cmds.menuItem(
				label = "At Bound Max",
				radialPosition = "NE",
				command = IECore.curry( __createLocatorAtPoints, sceneShapes[0], [ "Max" ] ),
			)

			maya.cmds.menuItem(
				label = "At Bound Min And Max",
				radialPosition = "E",
				command = IECore.curry( __createLocatorAtPoints, sceneShapes[0], [ "Min", "Max" ] ),
			)

			maya.cmds.menuItem(
				label = "At Bound Centre",
				radialPosition = "SE",
				command = IECore.curry( __createLocatorAtPoints, sceneShapes[0], [ "Center" ] ),
			)

			maya.cmds.menuItem(
				label = "At Transform Origin",
				radialPosition = "S",
				command = IECore.curry( __createLocatorWithTransform, sceneShapes[0] ),
			)
			maya.cmds.setParent( "..", menu=True )

	# Object mode
	else:

		if len( sceneShapes ) == 1:
			if maya.cmds.getAttr( sceneShapes[0]+".drawGeometry" ) or maya.cmds.getAttr( sceneShapes[0]+".drawChildBounds" ):
				maya.cmds.menuItem(
					label = "Component",
					radialPosition = "N",
					command = IECore.curry( __componentCallback, sceneShapes[0] )
					)

		maya.cmds.menuItem(
			label = "Preview...",
			radialPosition = "NW",
			subMenu = True
		)

		maya.cmds.menuItem(
				label = "All Geometry On",
				radialPosition = "E",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawGeometry", True )
			)

		maya.cmds.menuItem(
				label = "All Child Bounds On",
				radialPosition = "SE",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawChildBounds", True )
			)

		maya.cmds.menuItem(
				label = "All Root Bound On",
				radialPosition = "NE",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawRootBound", True )
			)

		maya.cmds.menuItem(
				label = "All Geometry Off",
				radialPosition = "W",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawGeometry", False )
			)

		maya.cmds.menuItem(
				label = "All Child Bounds Off",
				radialPosition = "SW",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawChildBounds", False )
			)

		maya.cmds.menuItem(
				label = "All Root Bound Off",
				radialPosition = "NW",
				command = IECore.curry( __setChildrenPreviewAttributes, sceneShapes, "drawRootBound", False )
			)

		maya.cmds.setParent( "..", menu=True )


		commonTags = None
		for fn in fnScS:
			scene = fn.sceneInterface()
			tmpTags = scene.readTags(IECore.SceneInterface.EveryTag)
			if commonTags is None:
				commonTags = set( tmpTags )
			else:
				commonTags.intersection_update( set(tmpTags) )

		tagTree = dict()
		if not commonTags is None:
			tags = list(commonTags)
			for tag in tags :
				tag = str(tag)
				parts = tag.split(":")
				leftOverTag = tag[len(parts[0])+1:]
				if not parts[0] in tagTree :
					tagTree[parts[0]] = [ leftOverTag ]
				else :
					tagTree[parts[0]].append( leftOverTag )
		if tagTree :

			tags = tagTree.keys()
			tags.sort()

			def addTagSubMenuItems( command ):

				import copy
				copiedTagTree = copy.deepcopy( tagTree )

				for tag in tags :

					subtags = copiedTagTree[tag]
					subtags.sort()

					if "" in subtags:
						maya.cmds.menuItem(
							label = tag,
							command = IECore.curry( command, sceneShapes, tag )
						)
						subtags.remove("")

					if subtags:
						maya.cmds.menuItem(
							label = tag,
							subMenu = True
						)

						for tagSuffix in subtags :
							maya.cmds.menuItem(
								label = tagSuffix,
								command = IECore.curry( command, sceneShapes, tag + ":" + tagSuffix )
							)
						maya.cmds.setParent( "..", menu=True )

			maya.cmds.menuItem(
				label = "Tags filter...",
				radialPosition = "S",
				subMenu = True
			)

			maya.cmds.menuItem(
				label = "Display All",
				command = IECore.curry( __setTagsFilterPreviewAttributes, sceneShapes, "" )
			)

			addTagSubMenuItems( __setTagsFilterPreviewAttributes )

			maya.cmds.setParent( "..", menu=True )

		maya.cmds.menuItem(
			label = "Expand...",
			radialPosition = "SE",
			subMenu = True
		)

		maya.cmds.menuItem(
				label = "Recursive Expand As Geometry",
				radialPosition = "W",
				command = IECore.curry( __expandAsGeometry, sceneShapes )
			)

		if any( map(lambda x: x.canBeExpanded(), fnScS) ):

			maya.cmds.menuItem(
				label = "Expand One Level",
				radialPosition = "E",
				command = IECore.curry( __expandOnce, sceneShapes )
			)

			maya.cmds.menuItem(
				label = "Recursive Expand",
				radialPosition = "N",
				command = IECore.curry( __expandAll, sceneShapes )
			)

			if len( sceneShapes ) == 1:
				if fnScS[0].selectedComponentNames() :
					maya.cmds.menuItem(
						label = "Expand to Selected Components",
						radialPosition = "S",
						command = IECore.curry( __expandToSelected, sceneShapes[0] )
					)

		if tagTree :
			maya.cmds.menuItem(
				label = "Expand by Tag...",
				radialPosition = "S",
				subMenu = True
			)

			addTagSubMenuItems( __expandAll )

			maya.cmds.setParent( "..", menu=True )

		maya.cmds.setParent( "..", menu=True )

		parentSceneShape = __parentSceneShape( sceneShapes )

		if any( map(lambda x: x.canBeCollapsed(), fnScS) ) or ( parentSceneShape and IECoreMaya.FnSceneShape( parentSceneShape ).canBeCollapsed() ):

			maya.cmds.menuItem(
					label = "Collapse...",
					radialPosition = "SW",
					subMenu = True
				)

			if parentSceneShape and IECoreMaya.FnSceneShape( parentSceneShape ).canBeCollapsed():

				parentName = maya.cmds.listRelatives( parentSceneShape, p=True )[0]
				maya.cmds.menuItem(
						label = "Collapse to Parent: "+parentName,
						radialPosition = "N",
						command = IECore.curry( __collapseChildren, [parentSceneShape] )
					)

			if any( map(lambda x: x.canBeCollapsed(), fnScS) ):
				maya.cmds.menuItem(
						label = "Collapse Children",
						radialPosition = "W",
						command = IECore.curry( __collapseChildren, sceneShapes )
					)

			maya.cmds.setParent( "..", menu=True )

	for c in __dagMenuCallbacks :

		c( menu, sceneShape )
예제 #20
0
	def __buildOptionalHeaderUI( self, formLayout, attachForm, attachControl, lastControl ) :
		
		defaultLabel = ""
		try :
			parentUIUserData = self.__vectorParent().parameter.userData()["UI"]
			defaultLabelStyle = parentUIUserData["defaultChildLabel"].value
			
			if 'classname' in defaultLabelStyle.lower() :
				defaultLabel = self.__class()[2]
			
			if defaultLabelStyle.startswith( 'abbreviated' ) :
				if "classNameFilter" in parentUIUserData :
					classNameFilter = parentUIUserData["classNameFilter"].value
					defaultLabel = defaultLabel.replace( classNameFilter.strip( '*' ), '' )
			
			if defaultLabelStyle.endswith( 'ToUI' ) :
				defaultLabel = maya.mel.eval( 'interToUI( "%s" )' % defaultLabel )
			
			defaultDescription = self.__class()[0].description
		except :
			defaultLabel = ""
			defaultDescription = ""
		
		labelPlugPath = self.__labelPlugPath()
		if labelPlugPath or defaultLabel :
			
			label = maya.cmds.getAttr( labelPlugPath ) if labelPlugPath else defaultLabel
			description = self.__parameter["label"].description if labelPlugPath else defaultDescription
			
			self.__label = maya.cmds.text(
				parent = formLayout,
				align = "left",
				label = label,
				font = IECoreMaya.CompoundParameterUI._labelFont( self.__kw["hierarchyDepth"] ),
				annotation = IECore.StringUtil.wrap( description, 48 ),
				width = 190 - IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"] ),
				recomputeSize = False,
			)
			
			if labelPlugPath :
				
				lockedLabel = False
				with IECore.IgnoredExceptions( KeyError ) :
					lockedLabel = self.__parameter["label"].userData()["UI"]["locked"]
				
				if not lockedLabel :
					
					renameMenu = IECore.MenuDefinition(
						[
							( "Change label...", { "command" : self.__changeLabel } ),
						]
					)
					IECoreMaya.createMenu( renameMenu, self.__label )
					IECoreMaya.createMenu( renameMenu, self.__label, button = 1 )
			
			attachForm += [
				( self.__label, "top", 0 ),
				( self.__label, "bottom", 0 ),
			]
			attachControl += [
				( self.__label, "left", 4, lastControl ),
			]
			
			lastControl = self.__label
			
		return self.__drawHeaderParameterControls( formLayout, attachForm, attachControl, lastControl, "classVectorParameterHeader" )
예제 #21
0
from GeometryCombinerTest import GeometryCombinerTest
from FromMayaSkinClusterConverterTest import *
from ToMayaSkinClusterConverterTest import *
from ToMayaGroupConverterTest import ToMayaGroupConverterTest
from RunTimeTypedTest import RunTimeTypedTest
from ToMayaParticleConverterTest import ToMayaParticleConverterTest
from ImageConverterTest import ImageConverterTest
from ObjectDataTest import ObjectDataTest
from ToMayaCameraConverterTest import ToMayaCameraConverterTest
from MayaSceneTest import *
from SceneShapeTest import SceneShapeTest
from FnSceneShapeTest import FnSceneShapeTest
from FromMayaLocatorConverterTest import FromMayaLocatorConverterTest
from ToMayaLocatorConverterTest import ToMayaLocatorConverterTest

IECoreMaya.TestProgram(

	testRunner = unittest.TextTestRunner(
		stream = IECore.CompoundStream(
			[
				sys.stderr,
				open( "test/IECoreMaya/resultsPython.txt", "w" )
			]
		),
		verbosity = 2
	),

	plugins = [ "ieCore" ],

)
예제 #22
0
def __expandAsGeometry( sceneShapes, *unused ) :

	for sceneShape in sceneShapes:
		fnS = IECoreMaya.FnSceneShape( sceneShape )
		fnS.convertAllToGeometry( True )
예제 #23
0
    def testQuery(self):

        maya.cmds.file(new=True, f=True)

        def createSceneFile():
            scene = IECoreScene.SceneCache(FnSceneShapeTest.__testFile,
                                           IECore.IndexedIO.OpenMode.Write)
            sc = scene.createChild(str(1))
            curves = IECoreScene.CurvesPrimitive.createBox(
                imath.Box3f(imath.V3f(0), imath.V3f(1)))  # 6 curves.
            sc.writeObject(curves, 0.0)
            matrix = imath.M44d().translate(imath.V3d(0, 0, 0))
            sc.writeTransform(IECore.M44dData(matrix), 0.0)

        createSceneFile()

        node = maya.cmds.createNode("ieSceneShape")
        maya.cmds.setAttr(node + '.file',
                          FnSceneShapeTest.__testFile,
                          type='string')
        maya.cmds.setAttr(node + '.root', '/', type='string')
        fn = IECoreMaya.FnSceneShape(node)

        self.assertEqual(
            maya.cmds.getAttr(fn.fullPathName() + ".outObjects[0]", type=True),
            None)
        self.assertEqual(
            maya.cmds.getAttr(fn.fullPathName() + ".outObjects[1]", type=True),
            None)

        maya.cmds.setAttr(fn.fullPathName() + ".queryPaths[0]",
                          "/1",
                          type="string")
        maya.cmds.setAttr(fn.fullPathName() + ".queryPaths[1]",
                          "/1",
                          type="string")

        maya.cmds.setAttr(fn.fullPathName() + ".queryConvertParameters[0]",
                          "-index 0",
                          type="string")  # Set it to output 0 th box curve.
        maya.cmds.setAttr(fn.fullPathName() + ".queryConvertParameters[1]",
                          "-index 1",
                          type="string")  # Set it to output 1 th box curve.

        self.assertEqual(
            maya.cmds.getAttr(fn.fullPathName() + ".outObjects[0]", type=True),
            "nurbsCurve")
        self.assertEqual(
            maya.cmds.getAttr(fn.fullPathName() + ".outObjects[1]", type=True),
            "nurbsCurve")

        curveShape0 = maya.cmds.createNode("nurbsCurve")
        curveShape1 = maya.cmds.createNode("nurbsCurve")
        maya.cmds.connectAttr(fn.fullPathName() + ".outObjects[0]",
                              curveShape0 + '.create')
        maya.cmds.connectAttr(fn.fullPathName() + ".outObjects[1]",
                              curveShape1 + '.create')

        self.assertNotEqual(maya.cmds.pointPosition(curveShape0 + '.cv[0]'),
                            maya.cmds.pointPosition(curveShape1 + '.cv[0]'))

        maya.cmds.setAttr(fn.fullPathName() + ".queryConvertParameters[1]",
                          "-index 0",
                          type="string")

        self.assertEqual(maya.cmds.pointPosition(curveShape0 + '.cv[0]'),
                         maya.cmds.pointPosition(curveShape1 + '.cv[0]'))
예제 #24
0
    def expandOnce(self):

        node = self.fullPathName()
        transform = maya.cmds.listRelatives(node, parent=True, f=True)[0]
        scene = self.sceneInterface()
        if not scene:
            return []

        sceneChildren = scene.childNames()

        if sceneChildren == []:
            # No children to expand to
            return []

        sceneFile = maya.cmds.getAttr(node + ".file")
        sceneRoot = maya.cmds.getAttr(node + ".root")

        maya.cmds.setAttr(node + ".querySpace", 1)
        maya.cmds.setAttr(node + ".objectOnly", l=False)
        maya.cmds.setAttr(node + ".objectOnly", 1)
        maya.cmds.setAttr(node + ".objectOnly", l=True)

        drawGeo = maya.cmds.getAttr(node + ".drawGeometry")
        drawChildBounds = maya.cmds.getAttr(node + ".drawChildBounds")
        drawRootBound = maya.cmds.getAttr(node + ".drawRootBound")
        drawTagsFilter = maya.cmds.getAttr(node + ".drawTagsFilter")

        timeConnection = maya.cmds.listConnections(node + ".time",
                                                   source=True,
                                                   destination=False,
                                                   plugs=True)

        newSceneShapeFns = []

        for i, child in enumerate(sceneChildren):

            if maya.cmds.objExists(transform + "|" + child):
                shape = maya.cmds.listRelatives(transform + "|" + child,
                                                f=True,
                                                type="ieSceneShape")
                if shape:
                    fnChild = IECoreMaya.FnSceneShape(shape[0])
                else:
                    fnChild = IECoreMaya.FnSceneShape.createShape(transform +
                                                                  "|" + child)
            else:
                fnChild = IECoreMaya.FnSceneShape.create(
                    child, transformParent=transform)

            childNode = fnChild.fullPathName()
            childTransform = maya.cmds.listRelatives(childNode,
                                                     parent=True,
                                                     f=True)[0]
            maya.cmds.setAttr(childNode + ".file", sceneFile, type="string")
            sceneRootName = "/" + child if sceneRoot == "/" else sceneRoot + "/" + child
            maya.cmds.setAttr(childNode + ".root",
                              sceneRootName,
                              type="string")

            index = self.__queryIndexForPath("/" + child)
            outTransform = node + ".outTransform[" + str(index) + "]"
            if not maya.cmds.isConnected(outTransform + ".outTranslate",
                                         childTransform + ".translate"):
                maya.cmds.connectAttr(outTransform + ".outTranslate",
                                      childTransform + ".translate",
                                      f=True)
            if not maya.cmds.isConnected(outTransform + ".outRotate",
                                         childTransform + ".rotate"):
                maya.cmds.connectAttr(outTransform + ".outRotate",
                                      childTransform + ".rotate",
                                      f=True)
            if not maya.cmds.isConnected(outTransform + ".outScale",
                                         childTransform + ".scale"):
                maya.cmds.connectAttr(outTransform + ".outScale",
                                      childTransform + ".scale",
                                      f=True)

            maya.cmds.setAttr(childNode + ".drawGeometry", drawGeo)
            maya.cmds.setAttr(childNode + ".drawChildBounds", drawChildBounds)
            maya.cmds.setAttr(childNode + ".drawRootBound", drawRootBound)

            if drawTagsFilter:
                parentTags = drawTagsFilter.split()
                childTags = fnChild.sceneInterface().readTags()
                commonTags = filter(lambda x: str(x) in childTags, parentTags)
                if not commonTags:
                    # Hide that child since it doesn't match any filter
                    maya.cmds.setAttr(childTransform + ".visibility", 0)
                else:
                    maya.cmds.setAttr(childNode + ".drawTagsFilter",
                                      " ".join(commonTags),
                                      type="string")

            # Connect child time to its parent so they're in sync
            if not maya.cmds.isConnected(node + ".outTime",
                                         childNode + ".time"):
                maya.cmds.connectAttr(node + ".outTime",
                                      childNode + ".time",
                                      f=True)

            newSceneShapeFns.append(fnChild)

        return newSceneShapeFns
예제 #25
0
    def testCustomTags(self):

        t = maya.cmds.createNode("transform")
        maya.cmds.select(clear=True)
        sphere = maya.cmds.polySphere(name="pSphere")

        doTest = True

        def hasMyTags(node, tag, tagFilter):
            #'archivable' should be on all transforms and 'renderable' only at shape transforms.

            if not doTest:
                return False

            if tag not in ("renderable", "archivable"):
                return False

            if tag == "archivable":
                return True

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return False

            if not (tagFilter & IECore.SceneInterface.TagFilter.LocalTag):
                return False

            if dagPath.apiType() != maya.OpenMaya.MFn.kMesh:
                return False

            return dagPath.fullPathName().endswith("Shape")

        def readMyTags(node, tagFilter):
            #'archivable' should be on all transforms and 'renderable' only at shape transforms.

            if not doTest:
                return []

            result = ["archivable"]

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return result

            if tagFilter & IECore.SceneInterface.TagFilter.LocalTag and dagPath.apiType(
            ) == maya.OpenMaya.MFn.kMesh:
                result.append("renderable")

            return result

        IECoreMaya.LiveScene.registerCustomTags(hasMyTags, readMyTags)

        scene = IECoreMaya.LiveScene()
        transformScene = scene.child(str(t))
        sphereScene = scene.child('pSphere')
        self.assertFalse(scene.hasTag('renderable'))
        self.assertFalse(scene.hasTag('archivable'))
        self.assertEqual(scene.readTags(), [])
        self.assertFalse(transformScene.hasTag('renderable'))
        self.assertTrue(transformScene.hasTag('archivable'))
        self.assertEqual(transformScene.readTags(),
                         [IECore.InternedString('archivable')])
        self.assertEqual(
            set(sphereScene.readTags()),
            set([
                IECore.InternedString('renderable'),
                IECore.InternedString('archivable')
            ]))
        self.assertEqual(
            set(sphereScene.readTags(
                IECore.SceneInterface.TagFilter.EveryTag)),
            set([
                IECore.InternedString('renderable'),
                IECore.InternedString('archivable')
            ]))
        self.assertEqual(
            sphereScene.readTags(IECore.SceneInterface.TagFilter.AncestorTag),
            [IECore.InternedString('archivable')])
        self.assertTrue(sphereScene.hasTag('renderable'))
        self.assertTrue(sphereScene.hasTag('archivable'))

        # Disable custom tag functions so they don't mess with other tests
        doTest = False
예제 #26
0
    def testCustomAttributes(self):

        t = maya.cmds.createNode("transform")
        maya.cmds.select(clear=True)
        sphere = maya.cmds.polySphere(name="pSphere")
        maya.cmds.currentTime("0sec")

        doTest = True

        def myAttributeNames(node):

            if not doTest:
                return []
            if not node:
                return ["root"]

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return ["transformAttribute"]

            if dagPath.apiType() != maya.OpenMaya.MFn.kMesh:
                return []

            return ["shapeAttribute"]

        def readMyAttribute(node, attr):

            if not doTest:
                return None

            if not node:
                if attr == "root":
                    return IECore.BoolData(True)
                return None

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                if attr == "shapeAttribute":
                    return None
                return IECore.FloatData(5)

            if attr == "transformAttribute":
                return None

            if dagPath.apiType() != maya.OpenMaya.MFn.kMesh:
                return None

            return IECore.StringData("mesh")

        try:
            IECoreMaya.LiveScene.registerCustomAttributes(
                myAttributeNames, readMyAttribute)

            scene = IECoreMaya.LiveScene()
            transformScene = scene.child(str(t))
            sphereScene = scene.child('pSphere')
            self.assertEqual(set(scene.attributeNames()),
                             set(["scene:visible", "root"]))
            self.assertEqual(scene.readAttribute("anyAttr", 0.0),
                             IECore.NullObject.defaultNullObject())
            self.assertEqual(scene.readAttribute("scene:visible", 0.0),
                             IECore.BoolData(True))
            self.assertEqual(scene.readAttribute("root", 0.0),
                             IECore.BoolData(True))

            self.assertEqual(transformScene.attributeNames(), [
                IECore.InternedString("scene:visible"),
                IECore.InternedString("transformAttribute")
            ])
            self.assertEqual(transformScene.hasAttribute("shapeAttribute"),
                             False)
            self.assertEqual(
                transformScene.readAttribute("shapeAttribute", 0.0),
                IECore.NullObject.defaultNullObject())
            self.assertEqual(
                transformScene.readAttribute("transformAttribute", 0.0),
                IECore.FloatData(5))
            self.assertEqual(sphereScene.attributeNames(), [
                IECore.InternedString("scene:visible"),
                IECore.InternedString('shapeAttribute')
            ])
            self.assertEqual(sphereScene.readAttribute("shapeAttribute", 0.0),
                             IECore.StringData("mesh"))

        finally:
            # Disable custom attribute functions so they don't mess with other tests
            doTest = False
예제 #27
0
    def testSceneShapeCustomReaders(self):

        # make sure we are at time 0
        maya.cmds.currentTime("0sec")
        scene = IECoreMaya.LiveScene()

        envShape = str(
            IECoreMaya.FnSceneShape.create("ieScene1").fullPathName())
        envNode = 'ieScene1'

        envScene = scene.child(envNode)
        self.assertFalse(
            envScene.hasAttribute(IECore.LinkedScene.linkAttribute))

        maya.cmds.setAttr(envShape + '.file',
                          'test/IECore/data/sccFiles/environment.lscc',
                          type='string')

        self.assertTrue(envScene.hasAttribute(
            IECore.LinkedScene.linkAttribute))

        spheresShape = str(
            IECoreMaya.FnSceneShape.create("ieScene2").fullPathName())
        spheresNode = 'ieScene2'
        maya.cmds.setAttr(spheresShape + '.file',
                          'test/IECore/data/sccFiles/animatedSpheres.scc',
                          type='string')

        self.assertEqual(
            set(scene.childNames()).intersection([envNode, spheresNode]),
            set([envNode, spheresNode]))
        self.assertTrue(
            IECore.LinkedScene.linkAttribute in envScene.attributeNames())
        self.assertEqual(
            envScene.readAttribute(IECore.LinkedScene.linkAttribute, 0),
            IECore.CompoundData({
                "fileName":
                IECore.StringData(
                    'test/IECore/data/sccFiles/environment.lscc'),
                "root":
                IECore.InternedStringVectorData()
            }))
        self.assertFalse(envScene.hasObject())

        spheresScene = scene.child(spheresNode)
        self.assertTrue(
            spheresScene.hasAttribute(IECore.LinkedScene.linkAttribute))
        self.assertEqual(
            spheresScene.readAttribute(IECore.LinkedScene.linkAttribute, 0),
            IECore.CompoundData({
                "fileName":
                IECore.StringData(
                    'test/IECore/data/sccFiles/animatedSpheres.scc'),
                "root":
                IECore.InternedStringVectorData()
            }))
        self.assertFalse(spheresScene.hasObject())

        # expand the scene
        fnSpheres = IECoreMaya.FnSceneShape(spheresShape)
        fnSpheres.expandAll()

        self.assertFalse(
            spheresScene.hasAttribute(IECore.LinkedScene.linkAttribute))
        leafScene = spheresScene.child("A").child("a")
        self.assertTrue(
            leafScene.hasAttribute(IECore.LinkedScene.linkAttribute))
        # When expanding, we connect the child time attributes to their scene shape parent time attribute to propagate time remapping. When checking for time remapping, the scene shape
        # currently only checks the direct connection, so we have here time in the link attributes. Will have to look out for performance issues.
        self.assertEqual(
            leafScene.readAttribute(IECore.LinkedScene.linkAttribute, 0),
            IECore.CompoundData({
                "fileName":
                IECore.StringData(
                    'test/IECore/data/sccFiles/animatedSpheres.scc'),
                "root":
                IECore.InternedStringVectorData(['A', 'a']),
                'time':
                IECore.DoubleData(0)
            }))
        self.assertFalse(leafScene.hasObject())

        # expand scene to meshes
        fnSpheres.convertAllToGeometry()
        self.assertFalse(
            leafScene.hasAttribute(IECore.LinkedScene.linkAttribute))
        self.assertTrue(leafScene.hasObject())
        self.assertTrue(
            isinstance(leafScene.readObject(0), IECore.MeshPrimitive))

        # test time remapped scene readers...
        spheresShape = str(maya.cmds.createNode('ieSceneShape'))
        maya.cmds.setAttr(spheresShape + '.file',
                          'test/IECore/data/sccFiles/animatedSpheres.scc',
                          type='string')
        maya.cmds.setAttr(spheresShape + '.time', 24.0 * 10)

        spheresScene = scene.child('ieScene3')

        self.assertTrue(
            spheresScene.hasAttribute(IECore.LinkedScene.linkAttribute))
        self.assertEqual(
            spheresScene.readAttribute(IECore.LinkedScene.linkAttribute, 0),
            IECore.CompoundData({
                "fileName":
                IECore.StringData(
                    'test/IECore/data/sccFiles/animatedSpheres.scc'),
                "root":
                IECore.InternedStringVectorData(),
                "time":
                IECore.DoubleData(10.0)
            }))
예제 #28
0
    def testFileName(self):

        scene = IECoreMaya.LiveScene()
        self.assertRaises(RuntimeError, scene.fileName)
예제 #29
0
    def testReadBound(self):

        # create some cubes:
        maya.cmds.polyCube(name="pCube1")
        maya.cmds.polyCube(name="pCube2")
        maya.cmds.polyCube(name="pCube3")
        maya.cmds.polyCube(name="pCube4")

        maya.cmds.parent("pCube2", "pCube1")
        maya.cmds.parent("pCube3", "pCube1")

        maya.cmds.setAttr("pCube4.tx", 3)
        maya.cmds.setAttr("pCube4.ty", 3)
        maya.cmds.setAttr("pCube4.tz", 3)

        maya.cmds.setAttr("pCube2.tx", 1)
        maya.cmds.setAttr("pCube2.ty", 1)
        maya.cmds.setAttr("pCube2.tz", 1)

        maya.cmds.setAttr("pCube3.tx", -1)
        maya.cmds.setAttr("pCube3.ty", -1)
        maya.cmds.setAttr("pCube3.tz", -1)

        scene = IECoreMaya.LiveScene()
        cube4Transform = scene.child("pCube4")
        cube1Transform = scene.child("pCube1")

        maya.cmds.currentTime("0.0sec")
        self.assertEqual(
            scene.readBound(0.0),
            IECore.Box3d(IECore.V3d(-1.5, -1.5, -1.5),
                         IECore.V3d(3.5, 3.5, 3.5)))

        self.assertEqual(
            cube4Transform.readBound(0.0),
            IECore.Box3d(IECore.V3d(-0.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))

        # check it's including its children:
        self.assertEqual(
            cube1Transform.readBound(0.0),
            IECore.Box3d(IECore.V3d(-1.5, -1.5, -1.5),
                         IECore.V3d(1.5, 1.5, 1.5)))

        maya.cmds.setAttr("pCube1.tx", 1)
        maya.cmds.setAttr("pCube1.ty", 1)
        maya.cmds.setAttr("pCube1.tz", 1)

        # should be in object space!!!
        self.assertEqual(
            cube1Transform.readBound(0.0),
            IECore.Box3d(IECore.V3d(-1.5, -1.5, -1.5),
                         IECore.V3d(1.5, 1.5, 1.5)))

        cube2Transform = cube1Transform.child("pCube2")
        self.assertEqual(
            cube2Transform.readBound(0.0),
            IECore.Box3d(IECore.V3d(-0.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))

        cube3Transform = cube1Transform.child("pCube3")
        self.assertEqual(
            cube3Transform.readBound(0.0),
            IECore.Box3d(IECore.V3d(-0.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))
예제 #30
0
    def testArrayPlugCreation(self):

        op = IECore.Op('test op', IECore.IntParameter('result', '', 0))
        op.parameters().addParameters([
            IECore.V3fVectorParameter('v3fVector', '', IECore.V3fVectorData()),
            IECore.V3dVectorParameter('v3dVector', '', IECore.V3dVectorData()),
            IECore.StringVectorParameter('stringVector', '',
                                         IECore.StringVectorData()),
            IECore.DoubleVectorParameter('doubleVector', '',
                                         IECore.DoubleVectorData()),
            IECore.FloatVectorParameter('floatVector', '',
                                        IECore.FloatVectorData()),
            IECore.IntVectorParameter('intVector', '', IECore.IntVectorData()),
            IECore.BoolVectorParameter('boolVector', '',
                                       IECore.BoolVectorData()),
            IECore.M44fVectorParameter('m44fVector', '',
                                       IECore.M44fVectorData()),
            IECore.M44dVectorParameter('m44dVector', '',
                                       IECore.M44dVectorData()),
        ])

        node = maya.cmds.createNode('ieOpHolderNode')
        fnPH = IECoreMaya.FnParameterisedHolder(node)

        self.assert_(not maya.cmds.objExists(node + '.parm_v3fVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_v3dVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_stringVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_doubleVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_floatVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_intVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_boolVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_m44fVector'))
        self.assert_(not maya.cmds.objExists(node + '.parm_m44dVector'))

        fnPH.setParameterised(op)

        self.assert_(maya.cmds.objExists(node + '.parm_v3fVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_v3dVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_stringVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_doubleVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_floatVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_intVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_boolVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_m44fVector'))
        self.assert_(maya.cmds.objExists(node + '.parm_m44dVector'))

        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_v3fVector', type=True),
            'vectorArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_v3dVector', type=True),
            'vectorArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_stringVector', type=True),
            'stringArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_doubleVector', type=True),
            'doubleArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_floatVector', type=True),
            'doubleArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_intVector', type=True),
            'Int32Array')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_boolVector', type=True),
            'Int32Array')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_m44fVector', type=True),
            'doubleArray')
        self.assertEqual(
            maya.cmds.getAttr(node + '.parm_m44dVector', type=True),
            'doubleArray')
예제 #31
0
def loadAssetManager():
    import IECore, IECoreMaya
            
    def __publishRender() :
        import maya.cmds as m
        #m.file()
        
        import IECore
        import Gaffer
        import GafferUI
        import os, pipe
        os.environ['PIPE_PUBLISH_FILTER'] = 'render/maya'
        appLoader = IECore.ClassLoader.defaultLoader( "GAFFER_APP_PATHS" )
        appLoader.classNames() 
        app=appLoader.load( 'opa' )()
        app.parameters()['arguments'] = IECore.StringVectorData(['-Asset.type','render/maya','1','IECORE_ASSET_OP_PATHS'])
        app.parameters()['op'] = 'publish'
        app.parameters()['gui'] = 1
        app.run()


    def __publish(f='particle', t='nParticles') :
        import maya.cmds as m
        import IECore
        import Gaffer
        import PySide
        import os, pipe
        os.environ['PIPE_PUBLISH_FILTER'] = f
        appLoader = IECore.ClassLoader.defaultLoader( "GAFFER_APP_PATHS" )
        appLoader.classNames() 
        app=appLoader.load( 'opa' )()
        app.parameters()['arguments'] = IECore.StringVectorData(['-Asset.type','%s/%s' % (f,t),'1','IECORE_ASSET_OP_PATHS'])
        app.parameters()['op'] = 'publish'
        app.parameters()['gui'] = 1
        app.run()


        
    def __gather() :
        global sam_window 
        import IECore
        import Gaffer
        import GafferUI
        import assetBrowser
        import os, pipe
        scriptNode = Gaffer.ScriptNode()
        with GafferUI.Window( "Gaffer Browser" ) as sam_window  :
                browser = GafferUI.BrowserEditor( scriptNode )   
        browser.pathChooser().getPath().setFromString( '/' )                
        sam_window.setVisible( True )
        GafferUI.EventLoop.mainEventLoop().start()



    menu = IECore.MenuDefinition()
    menu.append("/Publish/Render",               {"command" : __publishRender,"active" : True})
    menu.append("/Publish/Particle/nParticle",   {"command" : lambda: __publish('particle', 'nParticles'), "active" : True})
    menu.append("/Publish/Model",                {"command" : lambda: __publish('model', 'cortex'), "active" : True})
    menu.append("/Publish/Rig/skeleton",         {"command" : __gather, "active" : False})
    menu.append("/Publish/Rig/light",            {"command" : __gather, "active" : False})
    menu.append("/Publish/Animation/camera",     {"command" : __gather, "active" : False})
    menu.append("/Publish/Animation/vertex",     {"command" : __gather, "active" : False})
    menu.append("/Publish/Animation/skeleton",   {"command" : __gather, "active" : False})
    menu.append("/Publish/Animation/particles",  {"command" : __gather, "active" : False})
    menu.append("/Publish/Texture",              {"command" : __gather, "active" : False})
    
    menu.append("/Gather",                {"command" : __gather, "active" : True})
    
    
    #create our custom one!
    global __cortexMenu
    __cortexMenu = IECoreMaya.createMenu( menu, "MayaWindow", "SAM" )
예제 #32
0
    def testMatrixVectorPlugs(self):

        m44fVector = IECore.M44fVectorData(
            [IECore.M44f(1), IECore.M44f(2),
             IECore.M44f(3)])
        m44dVector = IECore.M44dVectorData(
            [IECore.M44d(1), IECore.M44d(2),
             IECore.M44d(3)])
        reverseM44fVector = IECore.M44fVectorData(
            [IECore.M44f(3), IECore.M44f(2),
             IECore.M44f(1)])
        reverseM44dVector = IECore.M44dVectorData(
            [IECore.M44d(3), IECore.M44d(2),
             IECore.M44d(1)])

        mayaArray = []
        for i in range(0, 3):
            for j in range(0, 16):
                mayaArray.append(i + 1)

        reverseMayaArray = list(mayaArray)
        reverseMayaArray.reverse()

        op = IECore.Op('test op', IECore.IntParameter('result', '', 0))
        op.parameters().addParameters([
            IECore.M44fVectorParameter('m44fVector', '',
                                       IECore.M44fVectorData()),
            IECore.M44dVectorParameter('m44dVector', '',
                                       IECore.M44dVectorData()),
        ])

        node = maya.cmds.createNode('ieOpHolderNode')
        fnPH = IECoreMaya.FnParameterisedHolder(node)
        fnPH.setParameterised(op)

        # set from cortex to maya
        self.assertNotEqual(mayaArray,
                            maya.cmds.getAttr(node + '.parm_m44fVector'))
        self.assertNotEqual(mayaArray,
                            maya.cmds.getAttr(node + '.parm_m44dVector'))
        fnPH.getParameterised()[0].parameters()['m44fVector'].setValue(
            m44fVector)
        fnPH.getParameterised()[0].parameters()['m44dVector'].setValue(
            m44dVector)
        fnPH.setNodeValues()
        self.assertEqual(mayaArray,
                         maya.cmds.getAttr(node + '.parm_m44fVector'))
        self.assertEqual(mayaArray,
                         maya.cmds.getAttr(node + '.parm_m44dVector'))

        # set from maya to cortex
        self.assertNotEqual(
            reverseM44fVector,
            fnPH.getParameterised()[0].parameters()['m44fVector'].getValue())
        self.assertNotEqual(
            reverseM44dVector,
            fnPH.getParameterised()[0].parameters()['m44dVector'].getValue())
        maya.cmds.setAttr(node + '.parm_m44fVector',
                          reverseMayaArray,
                          type="doubleArray")
        maya.cmds.setAttr(node + '.parm_m44dVector',
                          reverseMayaArray,
                          type="doubleArray")
        fnPH.setParameterisedValues()
        self.assertEqual(
            reverseM44fVector,
            fnPH.getParameterised()[0].parameters()['m44fVector'].getValue())
        self.assertEqual(
            reverseM44dVector,
            fnPH.getParameterised()[0].parameters()['m44dVector'].getValue())

        # set to incorrect length from maya
        maya.cmds.setAttr(node + '.parm_m44fVector', [0, 1, 2],
                          type="doubleArray")
        maya.cmds.setAttr(node + '.parm_m44dVector', [0, 1, 2],
                          type="doubleArray")
        fnPH.setParameterisedValues()
        self.assertEqual(
            None,
            fnPH.getParameterised()[0].parameters()['m44fVector'].getValue())
        self.assertEqual(
            None,
            fnPH.getParameterised()[0].parameters()['m44dVector'].getValue())
예제 #33
0
    def testFullPathName(self):

        node = maya.cmds.createNode("ieOpHolderNode")
        fnPH = IECoreMaya.FnParameterisedHolder(node)
        self.assertEqual(node, fnPH.fullPathName())
예제 #34
0
        locator = maya.cmds.spaceLocator()[0]
        maya.cmds.addAttr(locator, ln="myVectors", dt="vectorArray")
        maya.cmds.setAttr(locator + "." + "myVectors",
                          2,
                          *data,
                          type="vectorArray")

        sl = om.MSelectionList()
        sl.add(locator)
        o = om.MObject()
        sl.getDependNode(0, o)
        fn = om.MFnDependencyNode(o)
        plug = fn.findPlug("myVectors")

        converter = IECoreMaya.FromMayaPlugConverter.create(plug)
        self.assert_(converter)

        converted = converter.convert()
        self.assert_(
            converted.isInstanceOf(IECore.V3dVectorData.staticTypeId()))

        for point, index in itertools.product(xrange(2), xrange(3)):
            self.assertAlmostEqual(converted[point][index], data[point][index])

        self.assertEqual(converted.getInterpretation(),
                         IECore.GeometricData.Interpretation.Vector)


if __name__ == "__main__":
    IECoreMaya.TestProgram()
예제 #35
0
	def __init__( self, parameter, **kw ) :
		
		IECoreMaya.UIElement.__init__( self, maya.cmds.columnLayout() )
		
		if not isinstance( self.__vectorParent(), ClassVectorParameterUI ) :
			raise RuntimeError( "Parent must be a ClassVectorParameterUI" )
		
		self.__kw = kw.copy()
		self.__kw["hierarchyDepth"] = self.__kw.get( "hierarchyDepth", -1 ) + 1
			
		self.__parameter = parameter
		
		headerFormLayout = maya.cmds.formLayout()
		attachForm = []
		attachControl = []
				
		# triangle for expanding to view all parameters
		
		self.__parameterVisibilityIcon = maya.cmds.iconTextButton(
			style="iconOnly",
			height = 20,
			width = 20,
			image="arrowRight.xpm",
			command = self._createCallback( self.__toggleParameterVisibility ),
			annotation = "Show parameters",
			visible = self.__parameterIsCollapsible(),
		)
		
		attachForm += [
			( self.__parameterVisibilityIcon, "left",  IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"] ) ),
			( self.__parameterVisibilityIcon, "top", 0 ),
			( self.__parameterVisibilityIcon, "bottom", 0 ),
		]
		
		lastControl = self.__buildOptionalPreHeaderUI( headerFormLayout, attachForm, attachControl, self.__parameterVisibilityIcon )

		# layer icon

		layerIcon = maya.cmds.picture(
			width = 20,
			image = "%s.xpm" % self.__classIconName(),
			annotation = IECore.StringUtil.wrap(
				self.__class()[0].description + "\n\n" + "Click to reorder or remove.",
				48,
			)
		)
		IECoreMaya.createMenu( self.__layerMenu, layerIcon, useInterToUI=False )
		IECoreMaya.createMenu( self.__layerMenu, layerIcon, useInterToUI=False, button=1 )
		
		attachControl += [
			( layerIcon, "left", 0, lastControl ),
		]
		
		attachForm += [
			( layerIcon, "top", 0 ),
			( layerIcon, "bottom", 0 ),
		]
				
		# class specific fields
		
		self.__attributeChangedCallbackId = None
		self.__presetParameters = []
		self.__presetUIs = []

		self.__buildOptionalHeaderUI( headerFormLayout, attachForm, attachControl, layerIcon )
		
		maya.cmds.formLayout( 
			headerFormLayout,
			edit = True,
			attachForm = attachForm,
			attachControl = attachControl,
		)
		
		# CompoundParameterUI to hold child parameters
		
		maya.cmds.setParent( self._topLevelUI() )
				
		self.__compoundParameterUI = IECoreMaya.CompoundParameterUI( self.__vectorParent().node(), parameter, labelVisible = False, **kw )
		
		self.setCollapsed( self.getCollapsed(), False )
예제 #36
0
def __collapseChildren( sceneShapes, *unused ) :

	for sceneShape in sceneShapes:
		fnS = IECoreMaya.FnSceneShape( sceneShape )
		fnS.collapse()
예제 #37
0
    def test(self):

        p1 = IECoreMaya.DAGPathVectorParameter("n", "d")
        p2 = IECoreMaya.DAGPathParameter("n", "d")
예제 #38
0
            for j in range(0, len(origNormal)):
                self.assertAlmostEqual(origNormal[j], normal3f[j], 6)
                self.assertAlmostEqual(origNormal[j], normal3d[j], 6)

    def testSetMeshInterpolation(self):

        sphere = maya.cmds.polySphere(subdivisionsX=10,
                                      subdivisionsY=5,
                                      constructionHistory=False)
        sphere = maya.cmds.listRelatives(sphere, shapes=True)[0]

        self.assertRaises(ValueError, maya.cmds.getAttr,
                          sphere + ".ieMeshInterpolation")

        IECoreMaya.ToMayaMeshConverter.setMeshInterpolationAttribute(sphere)
        self.assertEqual(maya.cmds.getAttr(sphere + ".ieMeshInterpolation"), 0)

        coreMesh = IECore.MeshPrimitive.createBox(
            IECore.Box3f(IECore.V3f(-10), IECore.V3f(10)))
        coreMesh.interpolation = "catmullClark"
        converter = IECoreMaya.ToMayaObjectConverter.create(coreMesh)
        transform = maya.cmds.createNode("transform")
        self.assert_(converter.convert(transform))
        mayaMesh = maya.cmds.listRelatives(transform, shapes=True)[0]
        self.assertEqual(maya.cmds.getAttr(mayaMesh + ".ieMeshInterpolation"),
                         1)


if __name__ == "__main__":
    IECoreMaya.TestProgram(plugins=["ieCore"])
예제 #39
0
	def __selectCoordinateSystem( self ) :
	
		fnPH = IECoreMaya.FnProceduralHolder( self.node() )
		fnPH.selectComponentNames( set( [ "coordinateSystem:" + maya.cmds.getAttr( self.plugName() ) ] ) )
예제 #40
0
	def __createChild( self, childName, sceneFile, sceneRoot, drawGeo = False, drawChildBounds = False, drawRootBound = True, drawTagsFilter = "", namespace = "" ) :

		if namespace:
			namespace += ":"

		dag = maya.OpenMaya.MDagPath()
		self.getPath( dag )
		dag.pop()
		parentPath = dag.fullPathName()
		childPath = parentPath+"|"+namespace+childName
		try :
			childDag = IECoreMaya.dagPathFromString( childPath )
			childExists = True
		except RuntimeError :
			childExists = False
		
		if childExists :
			shape = maya.cmds.listRelatives( childPath, f=True, type="ieSceneShape" )
			if shape:
				fnChild = IECoreMaya.FnSceneShape( shape[0] )
			else:
				fnChild = IECoreMaya.FnSceneShape.createShape( childPath )
		else:
			fnChild = IECoreMaya.FnSceneShape.create( childName, transformParent = parentPath )

		fnChild.findPlug( "file" ).setString( sceneFile )
		sceneRootName = "/"+childName if sceneRoot == "/" else sceneRoot+"/"+childName
		fnChild.findPlug( "root" ).setString( sceneRootName )
		fnChildTransform = maya.OpenMaya.MFnDagNode( fnChild.parent( 0 ) )
		
		index = self.__queryIndexForPath( "/"+childName )
		outTransform = self.findPlug( "outTransform" ).elementByLogicalIndex( index )
		
		dgMod = maya.OpenMaya.MDGModifier()
		
		childTranslate = fnChildTransform.findPlug( "translate" )
		if childTranslate.isConnected() :
			connections = maya.OpenMaya.MPlugArray()
			childTranslate.connectedTo( connections, True, False )
			dgMod.disconnect( connections[0], childTranslate )
		dgMod.connect( outTransform.child( self.attribute( "outTranslate" ) ), childTranslate )
		
		childRotate = fnChildTransform.findPlug( "rotate" )
		if childRotate.isConnected() :
			connections = maya.OpenMaya.MPlugArray()
			childRotate.connectedTo( connections, True, False )
			dgMod.disconnect( connections[0], childRotate )
		dgMod.connect( outTransform.child( self.attribute( "outRotate" ) ), childRotate )
		
		childScale = fnChildTransform.findPlug( "scale" )
		if childScale.isConnected() :
			connections = maya.OpenMaya.MPlugArray()
			childScale.connectedTo( connections, True, False )
			dgMod.disconnect( connections[0], childScale )
		dgMod.connect( outTransform.child( self.attribute( "outScale" ) ), childScale )
		
		childTime = fnChild.findPlug( "time" )
		if childTime.isConnected() :
			connections = maya.OpenMaya.MPlugArray()
			childTime.connectedTo( connections, True, False )
			dgMod.disconnect( connections[0], childTime )
		dgMod.connect( self.findPlug( "outTime" ), childTime )
		
		dgMod.doIt()

		fnChild.findPlug( "drawGeometry" ).setBool( drawGeo )
		fnChild.findPlug( "drawChildBounds" ).setBool( drawChildBounds )
		fnChild.findPlug( "drawRootBound" ).setBool( drawRootBound )

		if drawTagsFilter:
			parentTags = drawTagsFilter.split()
			childTags = fnChild.sceneInterface().readTags(IECore.SceneInterface.EveryTag)
			commonTags = filter( lambda x: str(x) in childTags, parentTags )
			if not commonTags:
				# Hide that child since it doesn't match any filter
				fnChildTransform.findPlug( "visibility" ).setBool( False )
			else:
				fnChild.findPlug( "drawTagsFilter" ).setString( " ".join( commonTags ) )
		
		return fnChild
예제 #41
0
    def testSetNodeValueUndo(self):

        p = IECore.Parameterised("")
        p.parameters().addParameters([
            IECore.IntParameter("i", "", 1),
            IECore.FloatParameter("f", "", 2)
        ])

        node = maya.cmds.createNode("ieParameterisedHolderLocator")
        fnOH = IECoreMaya.FnParameterisedHolder(node)
        fnOH.setParameterised(p)

        # check the start values are as expected

        self.assertEqual(p["i"].getNumericValue(), 1)
        self.assertEqual(p["f"].getNumericValue(), 2)

        self.assertEqual(fnOH.parameterPlug(p["i"]).asInt(), 1)
        self.assertEqual(fnOH.parameterPlug(p["f"]).asInt(), 2)

        # change both parameters

        self.assert_(maya.cmds.undoInfo(query=True, state=True))

        p["i"].setNumericValue(10)
        p["f"].setNumericValue(11)

        self.assertEqual(p["i"].getNumericValue(), 10)
        self.assertEqual(p["f"].getNumericValue(), 11)

        self.assertEqual(fnOH.parameterPlug(p["i"]).asInt(), 1)
        self.assertEqual(fnOH.parameterPlug(p["f"]).asInt(), 2)

        # but push only one into maya

        fnOH.setNodeValue(p["i"])

        # and check we see what we expect

        self.assertEqual(p["i"].getNumericValue(), 10)
        self.assertEqual(p["f"].getNumericValue(), 11)

        self.assertEqual(fnOH.parameterPlug(p["i"]).asInt(), 10)
        self.assertEqual(fnOH.parameterPlug(p["f"]).asInt(), 2)

        # undo and check

        maya.cmds.undo()

        self.assertEqual(p["i"].getNumericValue(), 10)
        self.assertEqual(p["f"].getNumericValue(), 11)

        self.assertEqual(fnOH.parameterPlug(p["i"]).asInt(), 1)
        self.assertEqual(fnOH.parameterPlug(p["f"]).asInt(), 2)

        # redo and check

        maya.cmds.redo()

        self.assertEqual(p["i"].getNumericValue(), 10)
        self.assertEqual(p["f"].getNumericValue(), 11)

        self.assertEqual(fnOH.parameterPlug(p["i"]).asInt(), 10)
        self.assertEqual(fnOH.parameterPlug(p["f"]).asInt(), 2)
예제 #42
0
	def __drawHeaderParameterControl( self, parameter, fnPH ) :
		
		## \todo This would be so much easier if we could just use ParameterUI
		# instances for each of the controls. We can't because they all do their
		# own labelling and are layed out for an attribute editor. if we do the
		# todo in ParameterUI to remove the labels and stuff then we can do the
		# todo here.
		
		control = None 
		
		parameterPlugPath = fnPH.parameterPlugPath( parameter )
		annotation = IECore.StringUtil.wrap( "%s\n\n%s" % ( parameterPlugPath.split( "." )[1], parameter.description ), 48 )
		if parameter.presetsOnly :

			control = maya.cmds.iconTextStaticLabel(
				image = "arrowDown.xpm",
				font = "smallBoldLabelFont",
				style = "iconAndTextHorizontal",
				height = 23,
				width = 80,
				annotation = annotation,
			)
			IECoreMaya.Menu( IECore.curry( self.__presetsMenu, parameter ), control )
			IECoreMaya.Menu( IECore.curry( self.__presetsMenu, parameter ), control, button=1 )
			self.__presetParameters.append( parameter )
			self.__presetUIs.append( control )
			if self.__attributeChangedCallbackId is None :
				self.__attributeChangedCallbackId = IECoreMaya.CallbackId(
					maya.OpenMaya.MNodeMessage.addAttributeChangedCallback( self.__vectorParent().node(), self.__attributeChanged )
				)

			self.__updatePresetLabel( len( self.__presetUIs ) - 1 )

		elif isinstance( parameter, IECore.BoolParameter ) :

			control = maya.cmds.checkBox( label="", annotation=annotation )
			maya.cmds.connectControl( control, parameterPlugPath )

		elif isinstance( parameter, IECore.FloatParameter ) :

			control = maya.cmds.floatField(
				annotation = annotation,
				minValue = parameter.minValue,
				maxValue = parameter.maxValue,
				width = 45,
				pre = 4
			)
			maya.cmds.connectControl( control, parameterPlugPath )
			
		elif isinstance( parameter, IECore.IntParameter ) :

			kw = {}
			if parameter.hasMinValue() :
				kw["minValue"] = parameter.minValue
			if parameter.hasMaxValue() :
				kw["maxValue"] = parameter.maxValue

			control = maya.cmds.intField(
				annotation = annotation,
				width = 45,
				**kw
			)
			maya.cmds.connectControl( control, parameterPlugPath )	

		elif isinstance( parameter, IECore.Color3fParameter ) :

			control = maya.cmds.attrColorSliderGrp(
				label = "",
				columnWidth = ( ( 1, 1 ), ( 2, 30 ), ( 3, 1 ) ),
				columnAttach = ( ( 1, "both", 0 ), ( 2, "both", 0  ), ( 3, "left", 0 ) ),
				attribute = parameterPlugPath,
				annotation = annotation,
				showButton = False
			)
			
		elif isinstance( parameter, IECore.StringParameter ) :
		
			control = maya.cmds.textField( annotation = annotation, width = 150 )
			maya.cmds.connectControl( control, parameterPlugPath )

		elif isinstance( parameter, IECore.V2fParameter ) :
			
			control = maya.cmds.rowLayout( nc=2, cw2=( 45, 45 ) )
			
			column1 = maya.cmds.floatField(
				annotation = annotation,
				width = 45,
				pre = 4,
				parent = control
			)
			
			maya.cmds.connectControl( column1, parameterPlugPath + "X" )
			column2 = maya.cmds.floatField(
				annotation = annotation,
				width = 45,
				pre = 4,
				parent = control
			)
			
			maya.cmds.connectControl( column2, parameterPlugPath + "Y" )
			
		else :

			IECore.msg( IECore.Msg.Level.Warning, "ClassVectorParameterUI", "Parameter \"%s\" has unsupported type for inclusion in header ( %s )." % ( parameter.name, parameter.typeName() ) )
		
		return control
예제 #43
0
    def testTags(self):

        self.writeTagSCC(file=SceneShapeTest.__testFile)

        maya.cmds.file(new=True, f=True)
        node = maya.cmds.createNode('ieSceneShape')
        fn = IECoreMaya.FnSceneShape(node)
        transform = str(maya.cmds.listRelatives(node, parent=True)[0])
        maya.cmds.setAttr(node + '.file',
                          SceneShapeTest.__testFile,
                          type='string')

        scene = IECoreMaya.LiveScene().child(transform)
        self.assertEqual(
            sorted([
                str(x) for x in scene.readTags(
                    IECoreScene.SceneInterface.TagFilter.EveryTag)
            ]), ["ObjectType:MeshPrimitive", "a", "b", "c", "top"])
        self.assertEqual(sorted([str(x) for x in scene.readTags()]), ["top"])
        for tag in scene.readTags(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.SceneInterface.TagFilter.EveryTag))

        # double expanding because the first level has all the same tags
        childFn = fn.expandOnce()[0].expandOnce()[0]
        scene = childFn.sceneInterface()
        self.assertEqual(
            set([
                str(x) for x in scene.readTags(
                    IECoreScene.SceneInterface.TagFilter.DescendantTag
                    | IECoreScene.SceneInterface.TagFilter.LocalTag)
            ]), set(["ObjectType:MeshPrimitive", "b", "c"]))
        self.assertEqual(sorted([str(x) for x in scene.readTags()]),
                         ["ObjectType:MeshPrimitive", "b"])
        for tag in scene.readTags(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.SceneInterface.TagFilter.EveryTag))

        childFn = childFn.expandOnce()[0]
        scene = childFn.sceneInterface()
        self.assertEqual(
            sorted([
                str(x) for x in scene.readTags(
                    IECoreScene.SceneInterface.TagFilter.DescendantTag
                    | IECoreScene.SceneInterface.TagFilter.LocalTag)
            ]), ["ObjectType:MeshPrimitive", "c"])
        self.assertEqual(sorted([str(x) for x in scene.readTags()]),
                         ["ObjectType:MeshPrimitive", "c"])
        for tag in scene.readTags(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.SceneInterface.TagFilter.EveryTag))
예제 #44
0
    def testSetNodeValuesUndo(self):

        # make an opholder
        ##########################################################################

        node = maya.cmds.createNode("ieOpHolderNode")
        fnPH = IECoreMaya.FnParameterisedHolder(node)

        op = IECore.ClassLoader.defaultOpLoader().load("parameterTypes", 1)()
        op.parameters().removeParameter("m")  # no color4f support in maya

        fnPH.setParameterised(op)

        # check we have the starting values we expect
        ###########################################################################

        self.assertEqual(op["a"].getNumericValue(), 1)
        aPlug = fnPH.parameterPlug(op["a"])
        self.assertEqual(aPlug.asInt(), 1)

        self.assertEqual(op["b"].getNumericValue(), 2)
        bPlug = fnPH.parameterPlug(op["b"])
        self.assertEqual(bPlug.asFloat(), 2)

        self.assertEqual(op["c"].getNumericValue(), 3)
        cPlug = fnPH.parameterPlug(op["c"])
        self.assertEqual(cPlug.asDouble(), 3)

        self.assertEqual(op["d"].getTypedValue(), "ssss")
        dPlug = fnPH.parameterPlug(op["d"])
        self.assertEqual(dPlug.asString(), "ssss")

        self.assertEqual(op["e"].getValue(), IECore.IntVectorData([4, -1, 2]))
        ePlug = fnPH.parameterPlug(op["e"])
        fnE = maya.OpenMaya.MFnIntArrayData(ePlug.asMObject())
        self.assertEqual(fnE[0], 4)
        self.assertEqual(fnE[1], -1)
        self.assertEqual(fnE[2], 2)
        self.assertEqual(fnE.length(), 3)

        self.assertEqual(op["f"].getValue(),
                         IECore.StringVectorData(["one", "two", "three"]))
        fPlug = fnPH.parameterPlug(op["f"])
        fnF = maya.OpenMaya.MFnStringArrayData(fPlug.asMObject())
        fList = []
        fnF.copyTo(fList)
        self.assertEqual(fList, ["one", "two", "three"])

        self.assertEqual(op["g"].getTypedValue(), IECore.V2f(1, 2))
        gPlug = fnPH.parameterPlug(op["g"])
        self.assertEqual(gPlug.child(0).asFloat(), 1)
        self.assertEqual(gPlug.child(1).asFloat(), 2)

        self.assertEqual(op["h"].getTypedValue(), IECore.V3f(1, 1, 1))
        hPlug = fnPH.parameterPlug(op["h"])
        self.assertEqual(hPlug.child(0).asFloat(), 1)
        self.assertEqual(hPlug.child(1).asFloat(), 1)
        self.assertEqual(hPlug.child(2).asFloat(), 1)

        self.assertEqual(op["q"].getTypedValue(), False)
        qPlug = fnPH.parameterPlug(op["q"])
        self.assertEqual(qPlug.asBool(), False)

        self.assertEqual(op["t"].getTypedValue(),
                         IECore.Box3f(IECore.V3f(-1), IECore.V3f(1)))
        tPlug = fnPH.parameterPlug(op["t"])
        self.assertEqual(tPlug.child(0).child(0).asFloat(), -1)
        self.assertEqual(tPlug.child(0).child(1).asFloat(), -1)
        self.assertEqual(tPlug.child(0).child(2).asFloat(), -1)
        self.assertEqual(tPlug.child(1).child(0).asFloat(), 1)
        self.assertEqual(tPlug.child(1).child(1).asFloat(), 1)
        self.assertEqual(tPlug.child(1).child(2).asFloat(), 1)

        # change all the node values, making sure undo is enabled
        #############################################################################

        self.assert_(maya.cmds.undoInfo(query=True, state=True))

        # change the parameters
        op["a"].setNumericValue(10)
        op["b"].setNumericValue(100)
        op["c"].setNumericValue(12)
        op["d"].setTypedValue("a")
        op["e"].setValue(IECore.IntVectorData([1, 2, 3, 4]))
        op["f"].setValue(IECore.StringVectorData(["hi"]))
        op["g"].setTypedValue(IECore.V2f(10, 100))
        op["h"].setTypedValue(IECore.V3f(-1, -2, -3))
        op["q"].setTypedValue(True)
        op["t"].setTypedValue(IECore.Box3f(IECore.V3f(-10), IECore.V3f(0)))

        # check they are changed
        self.assertEqual(op["a"].getNumericValue(), 10)
        self.assertEqual(op["b"].getNumericValue(), 100)
        self.assertEqual(op["c"].getNumericValue(), 12)
        self.assertEqual(op["d"].getTypedValue(), "a")
        self.assertEqual(op["e"].getValue(), IECore.IntVectorData([1, 2, 3,
                                                                   4]))
        self.assertEqual(op["f"].getValue(), IECore.StringVectorData(["hi"]))
        self.assertEqual(op["g"].getTypedValue(), IECore.V2f(10, 100))
        self.assertEqual(op["h"].getTypedValue(), IECore.V3f(-1, -2, -3))
        self.assertEqual(op["q"].getTypedValue(), True)
        self.assertEqual(op["t"].getTypedValue(),
                         IECore.Box3f(IECore.V3f(-10), IECore.V3f(0)))

        # push the changes onto the node
        fnPH.setNodeValues()

        # check the node values are changed
        #############################################################################

        self.assertEqual(aPlug.asInt(), 10)
        self.assertEqual(bPlug.asFloat(), 100)
        self.assertEqual(cPlug.asDouble(), 12)
        self.assertEqual(dPlug.asString(), "a")

        fnE = maya.OpenMaya.MFnIntArrayData(ePlug.asMObject())
        self.assertEqual(fnE[0], 1)
        self.assertEqual(fnE[1], 2)
        self.assertEqual(fnE[2], 3)
        self.assertEqual(fnE[3], 4)
        self.assertEqual(fnE.length(), 4)

        fnF = maya.OpenMaya.MFnStringArrayData(fPlug.asMObject())
        fList = []
        fnF.copyTo(fList)
        self.assertEqual(fList, ["hi"])

        self.assertEqual(gPlug.child(0).asFloat(), 10)
        self.assertEqual(gPlug.child(1).asFloat(), 100)

        self.assertEqual(hPlug.child(0).asFloat(), -1)
        self.assertEqual(hPlug.child(1).asFloat(), -2)
        self.assertEqual(hPlug.child(2).asFloat(), -3)

        self.assertEqual(qPlug.asBool(), True)

        self.assertEqual(tPlug.child(0).child(0).asFloat(), -10)
        self.assertEqual(tPlug.child(0).child(1).asFloat(), -10)
        self.assertEqual(tPlug.child(0).child(2).asFloat(), -10)
        self.assertEqual(tPlug.child(1).child(0).asFloat(), 0)
        self.assertEqual(tPlug.child(1).child(1).asFloat(), 0)
        self.assertEqual(tPlug.child(1).child(2).asFloat(), 0)

        # check that the parameter values are unchanged in the process of
        # pushing them to maya
        #############################################################################

        self.assertEqual(op["a"].getNumericValue(), 10)
        self.assertEqual(op["b"].getNumericValue(), 100)
        self.assertEqual(op["c"].getNumericValue(), 12)
        self.assertEqual(op["d"].getTypedValue(), "a")
        self.assertEqual(op["e"].getValue(), IECore.IntVectorData([1, 2, 3,
                                                                   4]))
        self.assertEqual(op["f"].getValue(), IECore.StringVectorData(["hi"]))
        self.assertEqual(op["g"].getTypedValue(), IECore.V2f(10, 100))
        self.assertEqual(op["h"].getTypedValue(), IECore.V3f(-1, -2, -3))
        self.assertEqual(op["q"].getTypedValue(), True)
        self.assertEqual(op["t"].getTypedValue(),
                         IECore.Box3f(IECore.V3f(-10), IECore.V3f(0)))

        # undo, and check the node values are back to before
        #############################################################################

        maya.cmds.undo()

        self.assertEqual(aPlug.asInt(), 1)
        self.assertEqual(bPlug.asFloat(), 2)
        self.assertEqual(cPlug.asDouble(), 3)
        self.assertEqual(dPlug.asString(), "ssss")

        fnE = maya.OpenMaya.MFnIntArrayData(ePlug.asMObject())
        self.assertEqual(fnE[0], 4)
        self.assertEqual(fnE[1], -1)
        self.assertEqual(fnE[2], 2)
        self.assertEqual(fnE.length(), 3)

        fnF = maya.OpenMaya.MFnStringArrayData(fPlug.asMObject())
        fList = []
        fnF.copyTo(fList)
        self.assertEqual(fList, ["one", "two", "three"])

        self.assertEqual(gPlug.child(0).asFloat(), 1)
        self.assertEqual(gPlug.child(1).asFloat(), 2)

        self.assertEqual(hPlug.child(0).asFloat(), 1)
        self.assertEqual(hPlug.child(1).asFloat(), 1)
        self.assertEqual(hPlug.child(2).asFloat(), 1)

        self.assertEqual(qPlug.asBool(), False)

        self.assertEqual(tPlug.child(0).child(0).asFloat(), -1)
        self.assertEqual(tPlug.child(0).child(1).asFloat(), -1)
        self.assertEqual(tPlug.child(0).child(2).asFloat(), -1)
        self.assertEqual(tPlug.child(1).child(0).asFloat(), 1)
        self.assertEqual(tPlug.child(1).child(1).asFloat(), 1)
        self.assertEqual(tPlug.child(1).child(2).asFloat(), 1)

        # check that the parameter values are unchanged in the undo process
        #############################################################################

        self.assertEqual(op["a"].getNumericValue(), 10)
        self.assertEqual(op["b"].getNumericValue(), 100)
        self.assertEqual(op["c"].getNumericValue(), 12)
        self.assertEqual(op["d"].getTypedValue(), "a")
        self.assertEqual(op["e"].getValue(), IECore.IntVectorData([1, 2, 3,
                                                                   4]))
        self.assertEqual(op["f"].getValue(), IECore.StringVectorData(["hi"]))
        self.assertEqual(op["g"].getTypedValue(), IECore.V2f(10, 100))
        self.assertEqual(op["h"].getTypedValue(), IECore.V3f(-1, -2, -3))
        self.assertEqual(op["q"].getTypedValue(), True)
        self.assertEqual(op["t"].getTypedValue(),
                         IECore.Box3f(IECore.V3f(-10), IECore.V3f(0)))

        # redo, and check they are changed again
        #############################################################################

        maya.cmds.redo()

        self.assertEqual(aPlug.asInt(), 10)
        self.assertEqual(bPlug.asFloat(), 100)
        self.assertEqual(cPlug.asDouble(), 12)
        self.assertEqual(dPlug.asString(), "a")

        fnE = maya.OpenMaya.MFnIntArrayData(ePlug.asMObject())
        self.assertEqual(fnE[0], 1)
        self.assertEqual(fnE[1], 2)
        self.assertEqual(fnE[2], 3)
        self.assertEqual(fnE[3], 4)
        self.assertEqual(fnE.length(), 4)

        fnF = maya.OpenMaya.MFnStringArrayData(fPlug.asMObject())
        fList = []
        fnF.copyTo(fList)
        self.assertEqual(fList, ["hi"])

        self.assertEqual(gPlug.child(0).asFloat(), 10)
        self.assertEqual(gPlug.child(1).asFloat(), 100)

        self.assertEqual(hPlug.child(0).asFloat(), -1)
        self.assertEqual(hPlug.child(1).asFloat(), -2)
        self.assertEqual(hPlug.child(2).asFloat(), -3)

        self.assertEqual(qPlug.asBool(), True)

        self.assertEqual(tPlug.child(0).child(0).asFloat(), -10)
        self.assertEqual(tPlug.child(0).child(1).asFloat(), -10)
        self.assertEqual(tPlug.child(0).child(2).asFloat(), -10)
        self.assertEqual(tPlug.child(1).child(0).asFloat(), 0)
        self.assertEqual(tPlug.child(1).child(1).asFloat(), 0)
        self.assertEqual(tPlug.child(1).child(2).asFloat(), 0)

        # check that the parameter values are unchanged in the redo process
        #############################################################################

        self.assertEqual(op["a"].getNumericValue(), 10)
        self.assertEqual(op["b"].getNumericValue(), 100)
        self.assertEqual(op["c"].getNumericValue(), 12)
        self.assertEqual(op["d"].getTypedValue(), "a")
        self.assertEqual(op["e"].getValue(), IECore.IntVectorData([1, 2, 3,
                                                                   4]))
        self.assertEqual(op["f"].getValue(), IECore.StringVectorData(["hi"]))
        self.assertEqual(op["g"].getTypedValue(), IECore.V2f(10, 100))
        self.assertEqual(op["h"].getTypedValue(), IECore.V3f(-1, -2, -3))
        self.assertEqual(op["q"].getTypedValue(), True)
        self.assertEqual(op["t"].getTypedValue(),
                         IECore.Box3f(IECore.V3f(-10), IECore.V3f(0)))
예제 #45
0
def _menuDefinition( callbackShape ) :
	sceneShapes = __selectedSceneShapes()
	if not sceneShapes :
		return

	mainDef = IECore.MenuDefinition()

	fnShapes = [ IECoreMaya.FnSceneShape( shape ) for shape in sceneShapes ]

	# INVALID SHAPES
	invalidSceneShapes = __invalidSceneShapes( sceneShapes )
	if invalidSceneShapes :
		mainDef.append( "/Invalid Inputs for selected SceneShapes!", { "blindData" : { "maya" : { "radialPosition" : "N" } } } )
		return mainDef

	# COMPONENT MODE
	if fnShapes[ 0 ].selectedComponentNames() :
		mainDef.append( "/Object", { "blindData" : { "maya" : { "radialPosition" : "N" } }, "command" : functools.partial( __objectCallback, sceneShapes[ 0 ] ) } )
		mainDef.append( "/Print Component Names", { "blindData" : { "maya" : { "radialPosition" : "NW" } }, "command" : functools.partial( __printComponents, sceneShapes[ 0 ] ) } )
		mainDef.append( "/Print Selected Component Names", { "blindData" : { "maya" : { "radialPosition" : "NE" } }, "command" : functools.partial( __printSelectedComponents, sceneShapes[ 0 ] ) } )

		# EXPAND
		expandDef = IECore.MenuDefinition( [
			("/Expand to Selected Components", { "blindData" : { "maya" : { "radialPosition" : "S" } }, "command" : functools.partial( __expandToSelected, sceneShapes[ 0 ] ) }),
		] )
		mainDef.append( "/Expand...", { "blindData" : { "maya" : { "radialPosition" : "SE" } }, "subMenu" : expandDef } )

		locatorDef = IECore.MenuDefinition( [
			("/At Bound Min", { "blindData" : { "maya" : { "radialPosition" : "N" } }, "command" : functools.partial( __createLocatorAtPoints, sceneShapes[ 0 ], [ "Min" ] ) }),
			("/At Bound Max", { "blindData" : { "maya" : { "radialPosition" : "NE" } }, "command" : functools.partial( __createLocatorAtPoints, sceneShapes[ 0 ], [ "Max" ] ) }),
			("/At Bound Min And Max", { "blindData" : { "maya" : { "radialPosition" : "E" } }, "command" : functools.partial( __createLocatorAtPoints, sceneShapes[ 0 ], [ "Min", "Max" ] ) }),
			("/At Bound Centre", { "blindData" : { "maya" : { "radialPosition" : "SE" } }, "command" : functools.partial( __createLocatorAtPoints, sceneShapes[ 0 ], [ "Center" ] ) }),
			("/At Transform Origin", { "blindData" : { "maya" : { "radialPosition" : "S" } }, "command" : functools.partial( __createLocatorWithTransform, sceneShapes[ 0 ] ) }),
		] )
		mainDef.append( "/Create Locator", { "blindData" : { "maya" : { "radialPosition" : "SW" } }, "subMenu" : locatorDef } )

	# OBJECT MODE
	else :
		# PREVIEW
		if len( sceneShapes ) == 1 and (maya.cmds.getAttr( sceneShapes[ 0 ] + ".drawGeometry" ) or maya.cmds.getAttr( sceneShapes[ 0 ] + ".drawChildBounds" )) :
			mainDef.append( "/Component", { "blindData" : { "maya" : { "radialPosition" : "N" } }, "command" : functools.partial( __componentCallback, sceneShapes[ 0 ] ) } )

		previewDef = IECore.MenuDefinition( [
			("/All Geometry On", { "blindData" : { "maya" : { "radialPosition" : "E" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawGeometry", True ) }),
			("/All Child Bounds On", { "blindData" : { "maya" : { "radialPosition" : "SE" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawChildBounds", True ) }),
			("/All Root Bound On", { "blindData" : { "maya" : { "radialPosition" : "NE" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawRootBound", True ) }),
			("/All Geometry Off", { "blindData" : { "maya" : { "radialPosition" : "W" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawGeometry", False ) }),
			("/All Child Bounds Off", { "blindData" : { "maya" : { "radialPosition" : "SW" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawChildBounds", False ) }),
			("/All Root Bound Off", { "blindData" : { "maya" : { "radialPosition" : "NE" } }, "command" : functools.partial( __setChildrenPreviewAttributes, sceneShapes, "drawRootBound", False ) })
		] )

		mainDef.append( "/Preview...", { "blindData" : { "maya" : { "radialPosition" : "NW" } }, "subMenu" : previewDef } )

		# get all tags that are shared between all shapes
		commonTags = None
		for fn in fnShapes :
			scene = fn.sceneInterface()
			tmpTags = scene.readTags( IECoreScene.SceneInterface.EveryTag )
			if commonTags is None :
				commonTags = set( tmpTags )
			else :
				commonTags.intersection_update( set( tmpTags ) )

		tagTree = dict()
		if commonTags :
			for tag in commonTags :
				tag = str( tag )
				namespace, _, subTagsString = tag.partition( ':' )
				subTags = set( subTagsString.split( ':' ) )
				if not namespace in tagTree :
					tagTree[ namespace ] = subTags
				else :
					tagTree[ namespace ].update( subTags )

		# EXPAND
		expandDef = IECore.MenuDefinition(
			[ ("/Recursive Expand As Geometry", { "blindData" : { "maya" : { "radialPosition" : "W" } }, "command" : functools.partial( _expandAsGeometry, sceneShapes)})] )
		mainDef.append( "/Expand...", { "blindData" : { "maya" : { "radialPosition" : "SE" } }, "subMenu" : expandDef } )

		if any( map( lambda x : x.canBeExpanded(), fnShapes ) ) :

			expandDef.append( "/Expand One Level", { "blindData" : { "maya" : { "radialPosition" : "E" } }, "command" : functools.partial( __expandOnce, sceneShapes ) } )
			expandDef.append( "/Recursive Expand", { "blindData" : { "maya" : { "radialPosition" : "N" } }, "command" : functools.partial( _expandAll, sceneShapes)})

			if len( sceneShapes ) == 1 and fnShapes[ 0 ].selectedComponentNames() :
				expandDef.append( "/Expand to Selected Components", { "blindData" : { "maya" : { "radialPosition" : "S" } }, "command" : functools.partial( __expandToSelected, sceneShapes[ 0 ] ) } )

		if tagTree :
			tags = tagTree.keys()
			tags.sort()

			def addTagSubMenuItems( menuDef, command ) :
				import copy
				copiedTagTree = copy.deepcopy( tagTree )
				for tag in tags :
					subtags = list( copiedTagTree[ tag ] )
					subtags.sort()

					for subtag in subtags :
						if subtag == '' :
							label = "/{}".format( tag )
							expandTag = tag
						else :
							label = "/{}/{}".format( tag, subtag )
							expandTag = "{}:{}".format( tag, subtag )
						menuDef.append( label, { "command" : functools.partial( command, sceneShapes, expandTag ) } )

			filterDef = IECore.MenuDefinition( [
				("/Display All", { "command" : functools.partial( _setTagsFilterPreviewAttributes, sceneShapes, "")})
			] )
			expandTagDef = IECore.MenuDefinition()
			expandTagGeoDef = IECore.MenuDefinition()
			mainDef.append( "/Tags filter...", { "blindData" : { "maya" : { "radialPosition" : "S" } }, "subMenu" : filterDef } )

			addTagSubMenuItems( filterDef, _setTagsFilterPreviewAttributes)
			addTagSubMenuItems( expandTagDef, _expandAll)
			addTagSubMenuItems( expandTagGeoDef, _expandAsGeometry)

			expandDef.append( "/Expand by Tag...", { "blindData" : { "maya" : { "radialPosition" : "SW" } }, "subMenu" : expandTagDef } )
			expandDef.append( "/Expand by Tag as Geo...", { "blindData" : { "maya" : { "radialPosition" : "SE" } }, "subMenu" : expandTagGeoDef } )

		parentSceneShape = __parentSceneShape( sceneShapes )

		# COLLAPSE
		if any( map( lambda x : x.canBeCollapsed(), fnShapes ) ) or (parentSceneShape and IECoreMaya.FnSceneShape( parentSceneShape ).canBeCollapsed()) :

			collapseDef = IECore.MenuDefinition()

			if parentSceneShape and IECoreMaya.FnSceneShape( parentSceneShape ).canBeCollapsed() :
				parentName = maya.cmds.listRelatives( parentSceneShape, p = True )[ 0 ]
				collapseDef.append( "/Collapse to Parent: {}".format( parentName ),
					{ "blindData" : { "maya" : { "radialPosition" : "N" } }, "command" : functools.partial( __collapseChildren, [ parentSceneShape ] ) } )

			if any( map( lambda x : x.canBeCollapsed(), fnShapes ) ) :
				collapseDef.append( "/Collapse Children", { "blindData" : { "maya" : { "radialPosition" : "W" } }, "command" : functools.partial( __collapseChildren, sceneShapes ) } )

			mainDef.append( "/Collapse...", { "blindData" : { "maya" : { "radialPosition" : "SW" } }, "subMenu" : collapseDef } )

	return mainDef
    def testAddFloatSplineToReferencedNode(self):

        # make a scene with an empty op holder
        ######################################

        maya.cmds.createNode("ieOpHolderNode")

        maya.cmds.file(rename=os.path.join(os.getcwd(), "test", "IECoreMaya",
                                           "opHolderReference.ma"))
        referenceScene = maya.cmds.file(force=True,
                                        type="mayaAscii",
                                        save=True)

        # reference it in and add an op with a color spline
        ###################################################

        maya.cmds.file(new=True, force=True)
        maya.cmds.file(referenceScene, reference=True, namespace="ns1")

        fnOH = IECoreMaya.FnOpHolder("ns1:ieOpHolderNode1")
        fnOH.setOp("splineInput", 1)

        fnOH.setParameterisedValues()

        self.assertEqual(
            fnOH.getOp()["spline"].getValue().value,
            IECore.Splineff(
                IECore.CubicBasisf.catmullRom(),
                (
                    (0, 1),
                    (0, 1),
                    (1, 0),
                    (1, 0),
                ),
            ))

        # save the scene, and reload it. check that we've worked
        # around another wonderful maya referencing bug
        ########################################################

        maya.cmds.file(rename=os.path.join(os.getcwd(), "test", "IECoreMaya",
                                           "opHolderReferencer.ma"))
        referencerScene = maya.cmds.file(force=True,
                                         type="mayaAscii",
                                         save=True)

        maya.cmds.file(new=True, force=True)
        maya.cmds.file(referencerScene, force=True, open=True)

        fnOH = IECoreMaya.FnOpHolder("ns1:ieOpHolderNode1")

        fnOH.setParameterisedValues()

        self.assertEqual(
            fnOH.getOp()["spline"].getValue().value,
            IECore.Splineff(
                IECore.CubicBasisf.catmullRom(),
                (
                    (0, 1),
                    (0, 1),
                    (1, 0),
                    (1, 0),
                ),
            ))
예제 #47
0
    def __createChild(self,
                      childName,
                      sceneFile,
                      sceneRoot,
                      drawGeo=False,
                      drawChildBounds=False,
                      drawRootBound=True,
                      drawTagsFilter="",
                      namespace=""):
        if namespace:
            namespace += ":"

        if not sceneRoot.endswith('/'):
            sceneRoot += '/'

        # Construct the child sceneShapes's path
        dag = maya.OpenMaya.MDagPath()
        self.getPath(dag)
        dag.pop()
        parentPath = dag.fullPathName()
        childPath = parentPath + "|" + namespace + childName

        # Create (or retrieve) the child sceneShape
        if maya.cmds.objExists(childPath):
            shape = maya.cmds.listRelatives(childPath,
                                            fullPath=True,
                                            type="ieSceneShape")
            if shape:
                fnChild = IECoreMaya.FnSceneShape(shape[0])
            else:
                fnChild = IECoreMaya.FnSceneShape.createShape(childPath)
        else:
            fnChild = IECoreMaya.FnSceneShape.create(
                childName, transformParent=parentPath)

        fnChildTransform = maya.OpenMaya.MFnDagNode(fnChild.parent(0))

        # Set the child's sceneShapes plugs
        dgMod = maya.OpenMaya.MDGModifier()
        dgMod.newPlugValueString(fnChild.findPlug("file"), sceneFile)
        dgMod.newPlugValueString(fnChild.findPlug("root"),
                                 sceneRoot + childName)
        dgMod.newPlugValueBool(fnChild.findPlug("drawGeometry"), drawGeo)
        dgMod.newPlugValueBool(fnChild.findPlug("drawChildBounds"),
                               drawChildBounds)
        dgMod.newPlugValueBool(fnChild.findPlug("drawRootBound"),
                               drawRootBound)
        dgMod.doIt()

        # Set visible if I have any of the draw flags in my hierarchy, otherwise set hidden
        if drawTagsFilter:
            childTags = fnChild.sceneInterface().readTags(
                IECoreScene.SceneInterface.EveryTag)
            commonTags = filter(lambda x: str(x) in childTags,
                                drawTagsFilter.split())
            if not commonTags:
                dgMod.newPlugValueBool(fnChildTransform.findPlug("visibility"),
                                       False)
            else:
                dgMod.newPlugValueString(fnChild.findPlug("drawTagsFilter"),
                                         " ".join(commonTags))
                dgMod.newPlugValueBool(fnChildTransform.findPlug("visibility"),
                                       True)

        # Drive the child's transforms through the parent sceneShapes plugs
        index = self.__queryIndexForPath("/" + childName)
        outTransform = self.findPlug("outTransform").elementByLogicalIndex(
            index)

        childTranslate = fnChildTransform.findPlug("translate")
        FnSceneShape.__disconnectPlug(dgMod, childTranslate)
        dgMod.connect(outTransform.child(self.attribute("outTranslate")),
                      childTranslate)

        childRotate = fnChildTransform.findPlug("rotate")
        FnSceneShape.__disconnectPlug(dgMod, childRotate)
        dgMod.connect(outTransform.child(self.attribute("outRotate")),
                      childRotate)

        childScale = fnChildTransform.findPlug("scale")
        FnSceneShape.__disconnectPlug(dgMod, childScale)
        dgMod.connect(outTransform.child(self.attribute("outScale")),
                      childScale)

        childTime = fnChild.findPlug("time")
        FnSceneShape.__disconnectPlug(dgMod, childTime)
        dgMod.connect(self.findPlug("outTime"), childTime)

        dgMod.doIt()

        return fnChild
예제 #48
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)
예제 #49
0
	def __buildOptionalHeaderUI( self, formLayout, attachForm, attachControl, lastControl ) :
		
		defaultLabel = ""
		try :
			parentUIUserData = self.__vectorParent().parameter.userData()["UI"]
			defaultLabelStyle = parentUIUserData["defaultChildLabel"].value
			
			if 'classname' in defaultLabelStyle.lower() :
				defaultLabel = self.__class()[2]
			
			if defaultLabelStyle.startswith( 'abbreviated' ) :
				if "classNameFilter" in parentUIUserData :
					classNameFilter = parentUIUserData["classNameFilter"].value
					defaultLabel = defaultLabel.replace( classNameFilter.strip( '*' ), '' )
			
			if defaultLabelStyle.endswith( 'ToUI' ) :
				defaultLabel = maya.mel.eval( 'interToUI( "%s" )' % defaultLabel )
			
			defaultDescription = self.__class()[0].description
		except :
			defaultLabel = ""
			defaultDescription = ""
		
		labelPlugPath = self.__labelPlugPath()
		if labelPlugPath or defaultLabel :
			
			label = maya.cmds.getAttr( labelPlugPath ) if labelPlugPath else defaultLabel
			description = self.__parameter["label"].description if labelPlugPath else defaultDescription
			
			self.__label = maya.cmds.text(
				parent = formLayout,
				align = "left",
				label = label,
				font = IECoreMaya.CompoundParameterUI._labelFont( self.__kw["hierarchyDepth"] ),
				annotation = IECore.StringUtil.wrap( description, 48 ),
				width = 190 - IECoreMaya.CompoundParameterUI._labelIndent( self.__kw["hierarchyDepth"] ),
				recomputeSize = False,
			)
			
			if labelPlugPath :
				
				lockedLabel = False
				with IECore.IgnoredExceptions( KeyError ) :
					lockedLabel = self.__parameter["label"].userData()["UI"]["locked"]
				
				if not lockedLabel :
					
					renameMenu = IECore.MenuDefinition(
						[
							( "Change label...", { "command" : self.__changeLabel } ),
						]
					)
					IECoreMaya.Menu( renameMenu, self.__label )
					IECoreMaya.Menu( renameMenu, self.__label, button = 1 )
			
			attachForm += [
				( self.__label, "top", 0 ),
				( self.__label, "bottom", 0 ),
			]
			attachControl += [
				( self.__label, "left", 4, lastControl ),
			]
			
			lastControl = self.__label
			
		return self.__drawHeaderParameterControls( formLayout, attachForm, attachControl, lastControl, "classVectorParameterHeader" )
예제 #50
0
def pipeIdleStartup():
    # force auto-load of these plugins at startup!
    plugs=[
        'slumMayaPlugin.py', 
        'ieCore.so', 
        '3delight_for_maya%s' % os.environ['MAYA_VERSION_MAJOR'],
    ]
    if plugs:
        for each in plugs:
            print '='*80
            print 'PIPE: auto-loading %s plugin...\n' % each
            try:
                m.loadPlugin( each )
            except:
                pass
        print '='*80
    
    
    # re-initialize cortex menu to filter out admin ops!
    try:
        import IECore, IECoreMaya
    except: 
        IECore=None
        IECoreMaya=None
    
    if IECore:
        def __createOp( className ) :
            fnOH = IECoreMaya.FnOpHolder.create( os.path.basename( className ), className )
            maya.cmds.select( fnOH.fullPathName() )
                
        def filteredOpCreationMenuDefinition() :
            menu = IECore.MenuDefinition()
            loader = IECore.ClassLoader.defaultOpLoader()
            for className in loader.classNames() :
                if not filter( lambda x: x in className, ['admin/'] ):
                    menu.append(
                        "/" + className,	
                        {
                            "command" : IECore.curry( __createOp, className ),
                        }
                    )
            return menu

        menu = IECore.MenuDefinition()
        menu.append(
            "/Create Procedural",
            {
                "subMenu" : IECoreMaya.Menus.proceduralCreationMenuDefinition,
            }
        )
        
        menu.append(
            "/Create Op",
            {
                "subMenu" : filteredOpCreationMenuDefinition,
            }
        )
        
        #delete default cortex menu!
        for each in filter( lambda x: m.menu( x, q=1, l=1)=='Cortex', m.window( "MayaWindow", query=True, menuArray=True ) ):
            m.deleteUI( each, menu=True )
            
        #create our custom one!
        global __cortexMenu
        __cortexMenu = IECoreMaya.createMenu( menu, "MayaWindow", "Cortex" )
    
    
    # force unload of Alembic plugins!!
    m.unloadPlugin('AbcExport')
    m.unloadPlugin('AbcImport')
	def testConstructor( self ) :
	
		converter = IECoreMaya.FromMayaLocatorConverter( "myLocator" )
		camera = converter.convert()
		self.assert_( camera.isInstanceOf( IECore.CoordinateSystem.staticTypeId() ) )