let me run this by you and see if this is my problem. Getting the index of a joint in a skincluster
joint = "joint1" jointDag = openMaya.MDagPath() jointName = openMaya.MSelectionList() jointName.add(joint) jointName.getDagPath(0, jointDag) jointIndex = (skinCluster.indexForInfluenceObject(jointDag)) If I'm not mistaken, this should give me the index value for the joint that I can then pipe into the setWeights() like so weight=.45 skinCluster.setWeights(objectPath, compItr.currentItem(), jointIndex, weight, True, throwAwayWeights) It seems that the index gets mixed up somehow because sometimes I get a value of 6 when there's only 2 or 3 joints in the scene, or as I'm setting values, it will apply a value that I specified for joint1 onto joint2 or joint3. Also, when I add a joint to the skinCluster, it gives it a higher index than the number of joints in the scene. Any help would be awesome! Brandon L. Harris On Dec 16, 5:13 pm, <[email protected]> wrote: > Floating point representations are inherently imprecise for many numbers. > Which caused you values to go beyond 1.0 or set below 1.0. The way I > approached it was to get the sum of the weights for the given component and > used it to normalize the weights. > > > > finalVertWeight = vertWeight / totalWeightForThatVertOfAllJoints > > > > > > Dividing the weights by the totalWeights will normalize the weights to 1.0 > rathen then something like 1.000006 or 0.999995..its more like > 1.0000000000000000477 now. Normalization should fix that > > > > > > -brian > > www.meljunky.com > > > > > > > > > > -------- Original Message -------- > Subject: [Maya-Python] Re: Adding Influence Object > From: Brandon Harris <[email protected]> > Date: Wed, December 16, 2009 5:56 pm > To: python_inside_maya <[email protected]> > MelJunky, Was hoping that you would respond. > Are you normalizing your weights when using the setWeight()? When I > turn Normalization to False it works fine, but then my weights aren't > normalized and I don't want weights over a value of 1. > Brandon L. Harris > On Dec 16, 3:27 pm, <[email protected]> wrote: > > I used MFnSkinCluster not that long ago and I retrieved the fullPathName of > > two different skinClusters and stored them in a list. > > > > > > > > Then, I had to compare the list to see if I need to add any influence > > objects: > > > > list( set( first.influenceObjectsStr ).difference( > > second.influenceObjectsStr) ) > > > > > > > > If, the results wasn't None then I executed the MEL command to add them as > > an influence using "OpenMaya.MDGModifier()", with the two methods > > commandToExecute and doIt. > > > > > > > > So, I recommend to go with your first instinct and use MEL. Don't remember > > where but someone mentioned that MEL is easier to add influences then > > trying to use the API. > > > > > > > > > > > > As for the setWeights() issue...I had no problem changing the weight from > > zero. Are you using the dataBlock for help setting the weights by chance to > > retrieve values for setting the final weights? > > > > > > > > Try printing out the values from the OpenMaya.MDoubleArray() that you are > > using to set the values are correct. Could also double check arguments for > > the setWeights is correct... I had a problem before with setWeights and I > > tracked it down to a previous issue. > > > > > > > > -brian > > > >www.meljunky.com > > > > > > > > > > > > > > > > > > > > -------- Original Message -------- > > Subject: [Maya-Python] Re: Adding Influence Object > > From: Brandon Harris <[email protected]> > > Date: Wed, December 16, 2009 4:00 pm > > To: python_inside_maya <[email protected]> > > And this has actually raised another issue. If a joints influence is > > entirely at 0 on a skinCluster and I use the setWeights() it won't set > > the weights. It just leaves the joint influence at 0. This a known > > issue? > > On Dec 16, 10:34 am, Brandon Harris <[email protected]> wrote: > > > Alright, so I have a system where you can grab components on multiple > > > meshes and apply weights to specified joints. Everything works fine > > > unless you run into a joint that doesn't effect one of the meshes. The > > > easiest way to do this would be just to check if the object influences > > > the skin cluster and if it doesn't add it. This would be simple with > > > Mel, but is there a way to accomplish this with API? In MFnSkinCluster > > > there isn't a method for this and I haven't been able to locate one. > > > There's got to be something there for it though. > > --http://groups.google.com/group/python_inside_maya > --http://groups.google.com/group/python_inside_maya -- http://groups.google.com/group/python_inside_maya
