Esempio n. 1
0
    def __init__(self, parent=get_maya_window()):
        """
        Initialize the class and connect all the functions to the ui.

        :param parent: object to parent the window to
        :type parent: Qt object
        """
        super(MLAModifyMesh, self).__init__(parent)

        self.setupUi(self)
        self.setObjectName('mlModifyMesh_UI')

        # Attributes
        self.base_table = {
            'obj_path': om2.MDagPath(),
            'points_pos': om2.MPointArray()
        }
        self.target_table = {
            'obj_path': om2.MDagPath(),
            'points_pos': om2.MPointArray()
        }
        self.current_table = {
            'obj_path': om2.MDagPath(),
            'points_pos': om2.MPointArray()
        }
        self.sel_vtces_idcs = {
            'obj_path': om2.MDagPath(),
            'indices': om2.MIntArray()
        }
        self.vtcs_selection = {
            'obj_path': om2.MDagPath(),
            'indices': om2.MIntArray()
        }
        self.revert_value = 100
        self.space = om2.MSpace.kObject
        # UNDO LIST
        self.undo = list()

        # Connections to ui
        # Get data functions

        # Meshes
        self.get_base_pB.clicked.connect(self.get_base)
        self.get_target_pB.clicked.connect(self.get_target)
        # Vtces indices
        self.get_selected_vtcs_pB.clicked.connect(self.store_vtcs_selection)
        self.reset_selected_vtcs_pB.clicked.connect(self.reset_vtcs_selection)
        # Revert value
        self.revert_to_base_slider.valueChanged.connect(self.get_revert_value)
        self.revert_to_base_sB.valueChanged.connect(self.get_revert_value)

        # Move vertices functions
        self.bake_diff_pB.clicked.connect(self.bake_difference_on_selected)
        self.revert_to_base_pB.clicked.connect(self.revert_selected_to_base)
        self.revert_to_base_live_pB.clicked.connect(
            self.revert_selected_to_base_live)
        self.undo_pB.clicked.connect(self.undo_last_action)
Esempio n. 2
0
 def __init__(self):
     om.MPxCommand.__init__(self)
     self.mesh_name=''
     self.mesh_dagPath = om.MDagPath()
     self.joint_name=''  
     self.nextJoint_name=''
     self.Joint_dagPath = om.MDagPath()  
     self.nextJoint_dagPath = om.MDagPath() 
     self.u_parameter=0.0    #default value
     self.division=20
Esempio n. 3
0
    def __init__(self):
        ompy.MUserData.__init__(self, False)
        self.setDeleteAfterUse(False)  # don;t delete after draw
        self.shapes = []  #vector<int>
        self.coords = ompy.MFloatVectorArray()  #MFloatVectorArray
        self.screenSpaceOffsets = ompy.MFloatVectorArray()  #MFloatVectorArray
        self.sizes = []  #vector<float>
        self.thicknesses = []  #vector<float>
        self.colors = ompy.MFloatPointArray()  #MFloatPointArray
        self.pColors = []  #vector<MFloatPointArray>
        self.names = []  #vector<MString>
        self.fills = []  #vector<bool>
        self.spaces = []  #vector<int>
        self.maxMemorys = []  #vector<int>
        self.projPlanes = []  #vector<int>
        self.drawPlaneMode = 0  #int
        self.cameraPath = ompy.MDagPath()  #MDagPath

        self.attrMatrix = ompy.MFloatMatrix()  #MFloatMatrix
        self.attrNames = []  #vector<MString>
        self.attrValueType = []  #vector<MString>
        self.attrValueInt = []  #vector<int>
        self.attrValueFloat = []  #vector<float>
        self.attrValueDouble = []  #vector<double>
        self.attrValueEnum = []  #vector<MString>
Esempio n. 4
0
def createLocator(name, selType, mDagMod):
    """
    create a locator with vertexID in the name
    :param componentID: str/int
    :param selType: str
    :param mDagMod: MDagModifier
    :return: MObjectHandle
    """
    locLocalScale = 0.2
    mDagPath = om2.MDagPath()
    loc = mDagMod.createNode("locator")
    newName = "LOC_{}_{}".format(selType, name)
    mDagMod.renameNode(loc, newName)

    locMObjHandle = om2.MObjectHandle(loc)
    mDagMod.doIt()

    dagPath = mDagPath.getAPathTo(loc)
    shapeDagPath = dagPath.extendToShape()
    shapeMObj = shapeDagPath.node()
    shapeMFn = om2.MFnDependencyNode(shapeMObj)

    shapeLocalScaleX = shapeMFn.findPlug("localScaleX", False)
    shapeLocalScaleY = shapeMFn.findPlug("localScaleY", False)
    shapeLocalScaleZ = shapeMFn.findPlug("localScaleZ", False)
    shapeLocalScaleX.setFloat(locLocalScale)
    shapeLocalScaleY.setFloat(locLocalScale)
    shapeLocalScaleZ.setFloat(locLocalScale)

    return locMObjHandle
Esempio n. 5
0
    def reset_vtcs_selection(self):
        self.vtcs_selection = {
            'obj_path': om2.MDagPath(),
            'indices': om2.MIntArray()
        }

        self.get_selected_vtcs_pB.setStyleSheet('background-color: dark gray')
Esempio n. 6
0
def get_softselection():
    """ Get a list of all paths to transforms affected by current soft selection, """
    
    items = list()
    
    # Get the active 'rich selecttion' ie soft select
    softSelection = om.MGlobal.getRichSelection()
    sel = softSelection.getSelection()
    
    # Create and iterator and run through the selection list,
    iter = om.MItSelectionList(sel)
    while not iter.isDone():
        
        # Get dag path for current item and it's lowest transform,
        dagPath = iter.getDagPath()        
        transform = dagPath.transform()
        
        # append the minimum unique string representation for the path to transform
        # to result list,
        items.append(
            om.MDagPath().getAPathTo(transform).partialPathName()
        )
        
        iter.next()
        
    # Return all items which were affected by soft select.
    return items
 def warpPickControlPoints(self, *args):
     selectionList = om.MGlobal.getActiveSelectionList()
     iterator = om.MItSelectionList(selectionList, om.MFn.kDagNode)
     # Check if nothing is selected
     if iterator.isDone():
         print "Error. Nothing selected."
         self.warpControlPoints = []
     else:
         # Create a set of items so duplicates are not added
         selectedItems = set()
         dagPath = om.MDagPath()
         dagFn = om.MFnDagNode()
         # Loop through the selection
         while not iterator.isDone():
             dagPath = iterator.getDagPath()
             node = dagPath.node()
             dagFn.setObject(node)
             # 110 is a transform node. This checks if the node type is not a transform node
             if dagPath.apiType() != 110:
                 # Get the parent node, which should be a transform node
                 parentObj = dagFn.parent(0)
                 dagFn.setObject(parentObj)
             selectedItems.add(dagFn.name())
             iterator.next()
         # Convert the set to a list as it is easier to use
         self.warpControlPoints = list(selectedItems)
     # Update the UI with the number of selected control points
     mc.intFieldGrp(self.m_warpNumControlPoints,
                    edit=True,
                    value1=len(self.warpControlPoints))
 def findFromSelection(self, selectionList):
     iterator = om.MItSelectionList(selectionList, om.MFn.kDagNode)
     # Check if nothing is selected
     if iterator.isDone():
         print "Error nothing selected"
         # Return failure as nothing was selected
         return False
     else:
         dagPath = om.MDagPath()
         dagFn = om.MFnDagNode()
         curveName = None
         meshName = None
         # Loop through the iterator
         while (not iterator.isDone()):
             dagPath = iterator.getDagPath()
             # Try to get the shape node, not the transform node
             try:
                 dagPath.extendToShape()
             except:
                 pass
             node = dagPath.node()
             dagFn.setObject(node)
             # Check the type of node
             if (dagFn.typeName == "nurbsCurve"):
                 self.curve = dagFn.name()
             elif (dagFn.typeName == "mesh"):
                 self.mesh = dagFn.name()
             else:
                 print "Invalid selection, ignoring"
             iterator.next()
         # If the loop was successful, return True (i.e. success)
         return True
    def getSkinInfluences(self, scList):
        """

        :param scList:
        :return:
        """
        if scList:
            outputDict = dict()

            for sc in scList:
                mFnSkin = om2anim.MFnSkinCluster(sc)
                infObj = mFnSkin.influenceObjects()
                scName = mFnSkin.name()
                scNameNoNS = scName.split(':')[-1]
                jntList = list()

                for jnt in infObj:
                    jntName = om2.MDagPath(jnt).fullPathName().split(':')[-1]
                    if not jntName in jntList:
                        jntList.append(jntName)
                    else:
                        continue
                outputDict.update({scNameNoNS: jntList})

            return outputDict
Esempio n. 10
0
def toMDagPath(nodeName):
    """ Get an API MDagPAth to the node, given the name of an existing dag node """
    obj = toMObject(nodeName)
    if obj:
        dagFn = om.MFnDagNode(obj)
        dagPath = om.MDagPath()
        dagFn.getPath(dagPath)
        return dagPath
def J_createDynJointChain():
    sel = cmds.ls(sl=True, type='joint')
    if len(sel) < 3:
        return
    path = om.MDagPath()
    mesh = om.MFnMesh()

    J_dynJointChainAddPolyFace(sel, mesh)
Esempio n. 12
0
def mdagpath_from_name(name):
    if not pm.objExists(name):
        raise MayaNodeError, name
    slist = OpenMaya.MSelectionList()
    slist.add(name)
    dagpath = OpenMaya.MDagPath()
    dagpath = slist.getDagPath(0)
    return dagpath
Esempio n. 13
0
    def createCTLgroupsList(self, pSelectionListIterator, ctlIdString):
        ''' Create a List of CTL group classes '''
        # Create an MDagPath object which will be populated on each iteration.

        if pSelectionListIterator.isDone():
            sys.stderr.write(
                "ERROR: No CTL groups selected. Select in Outliner View\n")

        CTL_GROUP_OPTIONS = [
            'eye', 'brow', 'mouth', 'lower', 'upper', 'nose', 'ear', 'neck',
            'chin', 'lip'
        ]

        dagPath = om.MDagPath()
        CTL_TREE = {}
        while (not pSelectionListIterator.isDone()):
            # Populate our MDagPath object. This will likely provide
            # us with a Transform node.
            dagPath = pSelectionListIterator.getDagPath()
            print dagPath
            dagPathStr = str(dagPath)
            print dagPathStr
            # self.printDagNodeInfo(dagPath)

            # Change Group name to a shorter name
            for cName in CTL_GROUP_OPTIONS:
                if cName in dagPathStr:
                    selectedGroupShort = cName
                else:
                    selectedGroupShort = dagPathStr[dagPathStr.rfind('|') + 1:]

            print "New group name:%s" % selectedGroupShort

            # Get all Controllers
            leafTransformsLong = cmds.ls(dagPathStr,
                                         long=True,
                                         dag=True,
                                         allPaths=True,
                                         leaf=True)

            CTLgroup = {}
            for leaf in leafTransformsLong:
                longName = leaf[:leaf.rfind('|')]
                shortName = leaf[leaf.rfind('|') + 1:leaf.find('Shape')]

                if ctlIdString in shortName:
                    tempNode = CTLnode.createCTLNodePerTranslate(
                        longName, selectedGroupShort)
                    for node in tempNode:
                        print node
                        keyName = node.translateName
                        CTLgroup[keyName] = node

            # Add to Tree and advance to the next item
            CTL_TREE[selectedGroupShort] = CTLgroup
            pSelectionListIterator.next()

        return CTL_TREE
Esempio n. 14
0
def API_getMDagPath(obj):

    selection = ompy.MSelectionList()
    selection.add(obj)

    dagPath = ompy.MDagPath()
    dagPath = selection.getDagPath(0)

    return dagPath
Esempio n. 15
0
def getDagPathForNode(nodeName):
    sel = om.MSelectionList()
    sel.add(nodeName)
    result = om.MDagPath()
    result = sel.getDagPath(0)

    if not result.isValid():
        raise MessageException("node %s does not exist" % nodeName)
    return result
Esempio n. 16
0
def createMesh(pointArray=((0, 0, -2.5), (5, 0, -2.5), (8, 0, 0), (5, 0, 2.5),
                           (0, 0, 2.5)),
               polygons=(4, 3),
               polyConects=(4, 3, 1, 0, 3, 2, 1)):
    """
    TODO: Return transform
    Create a mesh with initialShadingGroup conected
    Args:
        pointArray: Vertex positions by index
        polygons: Number of vertex per face index
        polyConects: Index vertices that define a polygon

    Returns:
        MObject with the mesh
        MDagPAth transform
    """
    # get initial shading group
    mselectionList = OpenMaya.MSelectionList()
    mselectionList.add('initialShadingGroup')

    shadingGrp_MObj = mselectionList.getDependNode(0)
    shadingGrp_MFn = OpenMaya.MFnDependencyNode(shadingGrp_MObj)
    shGrpPlug = shadingGrp_MFn.findPlug('dagSetMembers', True)
    shGrpPlugNumElements = shGrpPlug.evaluateNumElements()
    logger.debug('createMesh: %s num elements: %s' %
                 (shGrpPlug.name(), shGrpPlugNumElements))
    # documentation: get the free element of the attr array

    existingIndices = set(shGrpPlug.getExistingArrayAttributeIndices())
    rangeExistingIndices = set(range(len(existingIndices) + 1))
    rangeExistingIndices.difference_update(existingIndices)
    shGrpPlugElement = shGrpPlug.elementByLogicalIndex(
        rangeExistingIndices.pop())
    logger.debug('createMesh: %s is element: %s' %
                 (shGrpPlugElement.name(), shGrpPlugElement.isElement))

    # create Mesh function to operate with polygonal meshes
    mFnMesh = OpenMaya.MFnMesh()

    # vertices
    mPointArray = OpenMaya.MPointArray(pointArray)

    # polyConnects. is important the order for the face normal, antihorario
    # create mesh
    mesh_Object = mFnMesh.create(mPointArray, polygons, polyConects)
    transform_Obj = OpenMaya.MDagPath().getAPathTo(mesh_Object)

    meshPlug = mFnMesh.findPlug('instObjGroups', False)
    meshPlugElement = meshPlug.elementByLogicalIndex(meshPlug.numElements())

    # connect attribute
    mdgModifier = OpenMaya.MDGModifier()
    mdgModifier.connect(meshPlugElement, shGrpPlugElement)
    mdgModifier.doIt()

    return mesh_Object, transform_Obj
Esempio n. 17
0
def isPathSelected(objPath):
    sel = om.MGlobal.getActiveSelectionList()
    if sel.hasItem(objPath):
        return True

    objPath = om.MDagPath(objPath)
    objPath.pop()
    if sel.hasItem(objPath):
        return True
    return False
Esempio n. 18
0
def get_dag_node(xform):
    selectionList = OpenMaya.MSelectionList()
    try:
        selectionList.add(xform)
    except:
        return None
    dagPath = OpenMaya.MDagPath()
    dagPath = selectionList.getDagPath(0)

    return dagPath
Esempio n. 19
0
    def shape(self):
        # type: () -> Shape
        mdagpath = _om2.MDagPath(self.mdagpath)
        try:
            mdagpath.extendToShape()
        except RuntimeError:
            return None

        return _graphs.to_node_instance(
            _om2.MFnDependencyNode(mdagpath.node()), mdagpath)
Esempio n. 20
0
    def __init__(self, node):
        """
        """
        self.m_obj = OM.MObject()
        self.dag_path = OM.MDagPath()

        selection_list = OM.MSelectionList()
        selection_list.add(node)

        self.m_obj = selection_list.getDependNode(0)
        self.dag_path = selection_list.getDagPath(0)
Esempio n. 21
0
def shapeAtIndex(path, index):
    """Finds and returns the shape DagPath under the specified path for the index

    :param path: the MDagPath to the parent node that you wish to search under
    :type path: om2.MDagPath
    :param index: the shape index
    :type index: int
    :rtype: om2.MDagPath or None
    """
    if index in range(path.numberOfShapesDirectlyBelow()):
        return om2.MDagPath(path).extendToShape(index)
Esempio n. 22
0
def parentPath(path):
    """Returns the parent nodes MDagPath
    :param path: child DagPath
    :type path: MDagpath
    :return: MDagPath, parent of path or None if path is in the scene root.
    """
    parent = om2.MDagPath(path)
    parent.pop(1)
    if parent.length() == 0:  # ignore world !
        return
    return parent
Esempio n. 23
0
 def _getShapePath(self):
     '''
     Returns:
     - A MDagPath copy of self.dagPath if self.dagPath is already a path to a shape node.
     - A MDagPath to the only shape parented directly beneath self.dagPath if self.dagPath is a path to a transform node.
     - None otherwise.
     '''
     dagPath = OpenMaya.MDagPath(self.dagPath)
     try: dagPath.extendToShape()
     except RuntimeError: return None
     return dagPath
Esempio n. 24
0
 def _insert(self, node):
     if node.path.length() == 0:
         raise RuntimeError('should not include world')
     try: parent, status = self._insert2(Node(OpenMaya.MDagPath(node.path).pop()), node.status)
     except AlreadyHasStatus: return
     parent.add(node)
     if status == node.status:
         # remove meaningless tail of neutral elements (they implicitly have the same status as their parent)
         node.status = NEUTRAL
         while parent and node.status == NEUTRAL:
             parent.remove(node)
             parent, node = parent.parent, parent
Esempio n. 25
0
def API_getMDagPath(obj):
    '''
    convert maya name into dagPath , very use to manipulate obj in API  
    '''

    selection = ompy.MSelectionList()
    selection.add(obj)

    dagPath = ompy.MDagPath()
    dagPath = selection.getDagPath(0)

    return dagPath
Esempio n. 26
0
    def __init__(self):
        super(AverageVertexWeightsCommand, self).__init__()

        self._index_arg = ''
        self._weight_arg = None
        self._skin_cluster_arg = ''

        self._skin_fn = None
        self._components = None
        self._influence_indices = None
        self._dag_path = OpenMaya.MDagPath()
        self._old_weights = OpenMaya.MDoubleArray()
Esempio n. 27
0
def shapes(path):
    """Returns all the shape dagpaths directly below this dagpath

    :param path: The MDagPath to search
    :return: list(MDagPath)
    """
    paths = []
    for i in xrange(path.numberOfShapesDirectlyBelow()):
        dagPath = om2.MDagPath(path)
        dagPath.extendToShape(i)
        paths.append(dagPath)
    return paths
Esempio n. 28
0
    def compute(self, plug, data):
        assert (isinstance(data.context(), om.MDGContext))
        assert (data.setContext(data.context()) == data)

        # DO THE COMPUTE ONLY FOR THE *OUTPUT* PLUGS THAT ARE DIRTIED:
        if plug == pointOnMeshInfoNode.aPosition or plug == pointOnMeshInfoNode.aPositionX or plug == pointOnMeshInfoNode.aPositionY or plug == pointOnMeshInfoNode.aPositionZ or plug == pointOnMeshInfoNode.aNormal or plug == pointOnMeshInfoNode.aNormalX or plug == pointOnMeshInfoNode.aNormalY or plug == pointOnMeshInfoNode.aNormalZ:
            # READ IN ".inMesh" DATA:
            inMeshDataHandle = data.inputValue(pointOnMeshInfoNode.aInMesh)
            inMesh = inMeshDataHandle.asMesh()

            # READ IN ".faceIndex" DATA:
            faceIndexDataHandle = data.inputValue(
                pointOnMeshInfoNode.aFaceIndex)
            faceIndex = faceIndexDataHandle.asInt()

            # READ IN ".relative" DATA:
            relativeDataHandle = data.inputValue(pointOnMeshInfoNode.aRelative)
            relative = relativeDataHandle.asBool()

            # READ IN ".parameterU" DATA:
            parameterUDataHandle = data.inputValue(
                pointOnMeshInfoNode.aParameterU)
            parameterU = parameterUDataHandle.asDouble()

            # READ IN ".parameterV" DATA:
            parameterVDataHandle = data.inputValue(
                pointOnMeshInfoNode.aParameterV)
            parameterV = parameterVDataHandle.asDouble()

            # GET THE POINT AND NORMAL:
            point = om.MPoint()
            normal = om.MVector()
            dummyDagPath = om.MDagPath()
            getPointAndNormal(dummyDagPath, faceIndex, relative, parameterU,
                              parameterV, point, normal, inMesh)

            # WRITE OUT ".position" DATA:
            pointDataHandle = data.outputValue(pointOnMeshInfoNode.aPosition)
            pointDataHandle.set3Double(point.x, point.y, point.z)
            data.setClean(plug)

            # WRITE OUT ".normal" DATA:
            normalDataHandle = data.outputValue(pointOnMeshInfoNode.aNormal)
            normalDataHandle.set3Double(normal.x, normal.y, normal.z)
            data.setClean(plug)

            # The plug was successfully computed
            return self

        # Let the Maya parent class compute the plug
        return None
Esempio n. 29
0
def childPathAtIndex(path, index):
    """From the given MDagPath return a new MDagPath for the child node at the given index.

    :param path: MDagPath
    :type index: int
    :return: MDagPath, this path's child at the given index"""
    existingChildCount = path.childCount()
    if existingChildCount < 1:
        return None
    if index < 0:
        index = path.childCount() - abs(index)
    copy = om2.MDagPath(path)
    copy.push(path.child(index))
    return copy
Esempio n. 30
0
    def btnA_click(self):
        print('btnA_click')
        #cmds.mCmd1()
        sel = OpenMaya.MSelectionList()
        # OpenMaya.MGlobal.getSelectionListByName('persp', sel) # API 1.0
        sel = OpenMaya.MGlobal.getSelectionListByName('persp')
        dagPath = OpenMaya.MDagPath()
        # sel.getDagPath(0, dagPath)
        dagPath = sel.getDagPath(0)  # API 2.0
        print(dagPath.fullPathName())

        myStrings = []
        # sel.getSelectionStrings(myStrings)
        myStrings = sel.getSelectionStrings()
        print(myStrings)