Issue
I have a function that applies random colors to each set of elements defined by a percentage. In this case I have a list of 154 elements to start with, but somehow in the end I get only 152 processed elements. Not sure why, because I am giving it 100% in total when I call the function at the end.
import maya.cmds as cmds
import random
def selector(percents):
RandomSelection = []
mySel = cmds.ls(sl=1) # a list of elements with a total of 154
random.shuffle(mySel)
start = 0
for cur in percents:
end = start + cur * len(mySel) // 100
RandomSelection.append(mySel[start:end])
start = end
print(len(mySel)) # 154
print ( sum( [ len(listElem) for listElem in RandomSelection]) ) # 152 # why not 154?
for mesh in RandomSelection:
r = [random.random() for i in range(3)]
cmds.polyColorPerVertex(mesh,rgb=(r[0], r[1], r[2]), cdo=1 )
selector([70, 10, 15, 5])
#154
#152
Thank you.
Solution
end = start + cur * len(mySel) // 100
can drop up to 1 element at each iteration due to flooring.
Try this instead :
start = 0
cumul = 0
for cur in percents:
cumul += cur
end = cumul * len(mySel) // 100
RandomSelection.append(mySel[start:end])
start = end
This will still drop up to 1 at every iteration due to florring, but these drops won't accumulate (since you recompute your end
from fresh), and at the end you are guaranteed to have an exact division, and so use up all elements.
Answered By - Julien
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.