LumaPictures / pymel

Python in Maya Done Right
Other
490 stars 131 forks source link

Investigate why some Mesh functions not currently wrapped #428

Open pmolodo opened 4 years ago

pmolodo commented 4 years ago

There are a number of api functions which are currently disabled, but there doesn't seem to be a clear reason why. A large number of them are on Mesh.

Investigate whether more of these functions could / should be enabled.

I got a list by running this code:

import pymel.core as pm
import maya.cmds as cmds
import pymel.internal.factories as fac
import pymel.internal.factories as factories

fac.loadCmdCache()

couldBeEnabled = {}

numMethods = 0
for mayaType, parents, _ in factories.nodeHierarchy:
    pyNodeTypeName = factories.getPymelTypeName(mayaType)
    existingCls = getattr(pm.nt, pyNodeTypeName)
    apicls = factories.toApiFunctionSet(mayaType)
    if not apicls:
        continue
    apiClsName = apicls.__name__
    classInfo = fac.apiClassInfo[apiClsName]

    methInfo = classInfo['methods']
    for methodName, overloads in methInfo.items():
        basePymelName = classInfo.get('pymelMethods', {}).get(methodName, methodName)
        pymelName, overrideData, renamed = factories._getApiOverrideNameAndData(
                            pyNodeTypeName, basePymelName)
        if overrideData.get('enabled', True):
            continue
        if hasattr(existingCls, pymelName):
            continue
        validOverloads = []
        for i, overload in enumerate(overloads):
            argHelper = fac.ApiArgUtil(apiClsName, methodName, i)
            if argHelper.canBeWrapped() and not overload.get('deprecated'):
                validOverloads.append(i)
        if validOverloads:
            data = {'overloads': validOverloads}
            if pymelName != methodName:
                data['pymelName'] = pymelName
            numMethods += 1
            couldBeEnabled.setdefault(pyNodeTypeName, {})[methodName] = data

from pprint import pprint
pprint(couldBeEnabled)
print(numMethods)

...which output this:

{'AnimClip': {'getTrack': {'overloads': [0]}, 'setTrack': {'overloads': [0]}},
 'AnimCurve': {'addKey': {'overloads': [0, 1, 2, 3]},
               'evaluate': {'overloads': [0, 1, 2, 3, 4]},
               'findClosest': {'overloads': [0, 1]}},
 'DagNode': {'dagPath': {'overloads': [0]},
             'getPath': {'overloads': [0]},
             'removeChild': {'overloads': [0]},
             'removeChildAt': {'overloads': [0]},
             'setObject': {'overloads': [0, 1]}},
 'DependNode': {'findAlias': {'overloads': [0]},
                'findPlug': {'overloads': [0, 1]},
                'getAffectedAttributes': {'overloads': [0]},
                'getAffectedByAttributes': {'overloads': [0]},
                'getAliasList': {'overloads': [0]},
                'getConnections': {'overloads': [0]},
                'plugsAlias': {'overloads': [0]},
                'reorderedAttribute': {'overloads': [0]},
                'setAlias': {'overloads': [0]}},
 'Mesh': {'addPolygon': {'overloads': [0, 1, 2]},
          'binaryBlindDataComponentId': {'overloads': [0]},
          'cachedIntersectionAcceleratorInfo': {'overloads': [0]},
          'clearBlindData': {'overloads': [0, 1, 2, 3, 4]},
          'clearGlobalIntersectionAcceleratorInfo': {'overloads': [0]},
          'collapseEdges': {'overloads': [0]},
          'collapseFaces': {'overloads': [0]},
          'copy': {'overloads': [0]},
          'copyInPlace': {'overloads': [0]},
          'copyUVSetWithName': {'overloads': [0]},
          'createBlindDataType': {'overloads': [0]},
          'createInPlace': {'overloads': [0]},
          'deleteEdge': {'overloads': [0]},
          'deleteFace': {'overloads': [0]},
          'deleteVertex': {'overloads': [0]},
          'duplicateFaces': {'overloads': [0]},
          'extractFaces': {'overloads': [0]},
          'extrudeEdges': {'overloads': [0]},
          'extrudeFaces': {'overloads': [0]},
          'freeCachedIntersectionAccelerator': {'overloads': [0]},
          'generateSmoothMesh': {'overloads': [0]},
          'getBinaryBlindData': {'overloads': [0]},
          'getBlindDataAttrNames': {'overloads': [0, 1]},
          'getBlindDataFaceVertexIndices': {'overloads': [0]},
          'getBlindDataTypes': {'overloads': [0]},
          'getBoolBlindData': {'overloads': [0, 1]},
          'getColorIndex': {'overloads': [0]},
          'getConnectedShaders': {'overloads': [0]},
          'getDoubleBlindData': {'overloads': [0, 1]},
          'getFaceVertexBlindDataIndex': {'overloads': [0]},
          'getFloatBlindData': {'overloads': [0, 1]},
          'getIntBlindData': {'overloads': [0, 1]},
          'getRawDoublePoints': {'overloads': [0]},
          'getRawNormals': {'overloads': [0]},
          'getRawPoints': {'overloads': [0]},
          'getStringBlindData': {'overloads': [0]},
          'globalIntersectionAcceleratorsInfo': {'overloads': [0]},
          'hasBlindData': {'overloads': [0, 1]},
          'hasBlindDataComponentId': {'overloads': [0, 1]},
          'isBlindDataTypeUsed': {'overloads': [0]},
          'setBinaryBlindData': {'overloads': [0, 1, 2, 3]},
          'setBoolBlindData': {'overloads': [0, 1, 2]},
          'setDoubleBlindData': {'overloads': [0, 1, 2]},
          'setFaceVertexColors': {'overloads': [0]},
          'setFaceVertexNormals': {'overloads': [0]},
          'setFloatBlindData': {'overloads': [0, 1, 2]},
          'setIntBlindData': {'overloads': [0, 1, 2]},
          'setStringBlindData': {'overloads': [0, 1, 2]},
          'setVertexColors': {'overloads': [0]},
          'setVertexNormals': {'overloads': [0]},
          'sortIntersectionFaceTriIds': {'overloads': [0]},
          'stringBlindDataComponentId': {'overloads': [0]},
          'subdivideEdges': {'overloads': [0]},
          'subdivideFaces': {'overloads': [0]}},
 'NurbsCurve': {'cv': {'overloads': [0]}},
 'NurbsSurface': {'cv': {'overloads': [0]},
                  'getUV': {'overloads': [0]},
                  'getUVs': {'overloads': [0]},
                  'setUV': {'overloads': [0]},
                  'setUVs': {'overloads': [0]}},
 'RadialField': {'type': {'overloads': [0], 'pymelName': 'getType'}},
 'Transform': {'getRotationQuaternion': {'overloads': [0]},
               'setRotationQuaternion': {'overloads': [0]}},
 'Wire': {'getDropoffLocator': {'overloads': [0]},
          'setDropoffLocator': {'overloads': [0]}}}
84