just tested your scenario... got the same result here :D
Actually your code is faster than mine


On 30 May 2013 13:21, Eric Thivierge <ethivie...@hybride.com> wrote:

>  Thanks Jeremie,
>
> I was referencing your code when I ran into the slowness to see if we are
> doing anything different and we aren't really.
>
> As a test I'm grabbing the XSI Man Armored and selecting the body mesh and
> doing a local subdiv refinement with a setting of 2 then freezing modeling.
> Then running the following code with the body mesh selected:
>
> # Python
> # =============================================
> from platform import system as OStype
> from time import clock
>
> xsi = Application
> log = xsi.LogMessage
> sel = xsi.Selection
>
> start_time = clock()
>
> weights = [list(x) for x in sel(0).Envelopes(0).Weights.Array]
>
> timeTaken = clock() - start_time
>
> units = ["seconds" if OStype() is "Windows" else "milliseconds"][0]
> msg = "It took "+str(timeTaken)+" "+units+" to process your code."
>
> log(msg)
> # =============================================
>
> It's taking around 6 seconds for me.
>
>
>
> Eric Thivierge
> ===============
> Character TD / RnD
> Hybride Technologies
>
>
> On 30/05/2013 4:05 PM, Jeremie Passerin wrote:
>
> Writting to the envelope array is usually pretty fast for me... what's
> taking time (in my case) is doing all the normalization of values...
>
> This is how I read my weights :
>
> def getWeights(envelopeOp):
>   weightsTuple = envelopeOp.Weights.Array
>  return [weightsTuple[j][i] for i in range(len(weightsTuple[0])) for j in
> range(len(weightsTuple))]
>
>  This is an example of how I set the weights (average weights) :
>
> def averageWeights(envelopeOp, points=None):
>  '''
>  \remarks set the weights of given points to the average weights of given
> points
>  \param envelopeOp Envelope Operator - the envelope operator.
>  \param points List of Integer - Index of vertices to average.
>  '''
>
>  deformerCount = envelopeOp.Deformers.Count
>  weightsTuple = envelopeOp.Weights.Array
>  weights = getWeights(envelopeOp)
>   if points is None:
>  points = range(mesh.ActivePrimitive.Geometry.Points.Count)
>   a = [0] * deformerCount
>  for pointIndex in points:
>  for def_index in range(deformerCount):
>  a[def_index] +=  weightsTuple[def_index][pointIndex]
>
>  for pointIndex in points:
>  for def_index in range(deformerCount):
>  weights[pointIndex*deformerCount + def_index] = a[def_index]/len(points)
>   envelopeOp.Weights.Array = weights
>
>
> On 30 May 2013 12:58, Eric Thivierge <ethivie...@hybride.com> wrote:
>
>> Anyone know if there is a way to speed up reading and writing speeds to
>> the Weights Array for envelopes? It's extremely slow on high point count /
>> high deformer count meshes.
>>
>> I'm using Python but I'm not sure if that is the reason for the slowness.
>> Anyone else already do some testing or have any findings that may help?
>>
>> I'm writing some common tools that many have already done such as
>> normalizing weights, pruning, symmetrizing, etc.
>>
>> Any experiences confirming this slowness or experiences where it is
>> exponentially faster in other languages are welcome too.
>>
>> Thanks,
>>
>> --
>>  Eric Thivierge
>> ===============
>> Character TD / RnD
>> Hybride Technologies
>>
>>
>>
>
>

Reply via email to