hi ynedlin ,

you can use a couple of API_commands , to get to the skinweights ( 
should be "much faster" - i made myself a simlpe skinCLuster 
import-export plugin that way , and compared to "mel-commands" or 
"python.cmds" it is really fast ( approx. 40times faster than mel ) , 
but about 2 or 3 times slower than in C++ )

so i post you the "way" i used python to "get the information" from the 
maya_API .

then ... while looping through the vertecies , you can find out , if a 
joint has a skinweight above a certain value , and then , write the 
vertex-number into an array .


// ----------------- start

import maya.OpenMaya as om
import maya.OpenMayaAnim as omAnim

# this will give you the skinweights for "skinCluster1"

skin = 'skinCluster1'

selectionList = om.MSelectionList()
selectionList.add( skin )
node = om.MObject()
selectionList.getDependNode( 0, node )
skinClusterNode = omAnim.MFnSkinCluster(node)

# get the number of influences that affect the skinCluster

infs = om.MDagPathArray()
numInfs = skinClusterNode.influenceObjects(infs)

# get dagPath for the skinCluster at index 0

skinPath = om.MDagPath()

index = 0
skinClusterNode.indexForOutputConnection(index)
skinClusterNode.getPathAtIndex(index,skinPath)

# iterate through all vertecies
geom = om.MItGeometry(skinPath)

vertecies = geom.count()

# here is a list , of all the joint-names and influence objects , inside 
the skinCluster

jointNames = []

for counter in range(0,numInfs,1):
 infName = infs[counter].partialPathName()
 jointNames.append(infName)

print (jointNames)

# here come the weights ( you need to define a maya_API_DoubleArray
wts = om.MDoubleArray()

# now you need to create a MScriptUtil

infCount = om.MScriptUtil()
ccc = infCount.asUintPtr()
# so ccc is the kind of "Unsigned integer" , that i need later for the 
skinCluster.getWeights()
# this might be a bit weird to understand , and i dont really understand 
it by myself , but it works
# ccc will be the "influenceCount" - that the .getWeight returns

# ok , lets go on

component = om.MObject()

# next is a LOOP ( all vertecies )

# e.g. for getting the pointPosition in worldspace
# not needed , just an example

while ( not geom.isDone()):
 point = om.MPoint()
 point = geom.position(om.MSpace.kWorld)
 
 # for each vertex , get its component-information
 
 component = geom.component()
 # get skinWeights
 # needed is the skinCluster_path , output will be an array of weights ( 
wgts ) for the given "component"

 skinClusterNode.getWeights(skinPath,component,wts,ccc)
 
 # print the WTS ( round them , and if they are Zero write '0' instead 
of '0.000'
 for i in range(0,len(wts),1):
  print (wts[i])
 
 geom.next()


// ----------------- end

hope this helps you a bit ...

maybe , these lines of python can be shortened and maybe some lines of 
code , can be left out ( i am not a very good programmer )  - but it was 
working well for my purpose

have a nice day
sim.On

ynedelin schrieb:
> So the way I have been doing it is using skinPercent command. Going
> thought every point and checking if it has weight for my joint. Some
> what.
>
> Well, it's slow.
>
> Is there a faster way to list all points skinned to a joint above
> certain weight?
>
> Yury
>
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---

Reply via email to