Think I discovered a problem.

If I explicitly create all data as local variables within the custom operator's 
_Update() callback, it works as expected, but runs slow.

When I use the custom operator's UserData to store and retrieve data between 
calls to _Update(), inputs connected to a geometry primitive evaluate with a 
one cycle lag.  As in, user moves some points but the output object doesn't 
update until the user performs a 2nd operation on the geometry. Basically, 
geometry updates are one step behind everything else.   All other 
inputs/outputs update as expected.

If a subcomponent on the geometry is transformed, then followed with a call to 
Undo(), Softimage stops incrementing the ID returned by 
ProjectItem::GetEvaluationID().  All other inputs (kinematics, clusters, 
clusterproperties, ...) continue to work as expected.

Is this a known bug?

Using Softimage 2013 SP1 (32-bit)


Matt



-----Original Message-----
From: softimage-boun...@listproc.autodesk.com 
[mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Matt Lind
Sent: Wednesday, April 16, 2014 7:41 PM
To: softimage@listproc.autodesk.com
Subject: RE: SDK: detecting changes in Custom Operator (C++)

Thanks, Luc-Eric.  That does help a bit.  

Unfortunately for this particular operator I need more granular information to 
have significant impact.  What I'm discovering is any changes to the input 
polygon mesh triggers a cascade of updates on the output clone (duh) which 
negate checking for evaluation of updates on the weightmaps for the clone.  Eg; 
translating a vertex on the input mesh triggers weightmap data getting pushed 
onto the clone and dirtying the operator inputs connected to the clone's 
weightmaps.

One problem I've been experiencing is update lags with the plugin userdata 
context.  Some inputs are evaluated every time, but others seem to skip 
updates.  For example, transforming the input polygon mesh or either of the 2 
NURBS surfaces updates correctly every time.  But if I translate a vertex on 
the input mesh, that only gets pushed to the clone every other update of the 
operator.  Not sure what I have to kick to get that to be more consistent.  I 
tried force the operator to 'always evaluate', but that didn't make any 
difference.


Thanks,

Matt





-----Original Message-----
From: softimage-boun...@listproc.autodesk.com 
[mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Luc-Eric Rousseau
Sent: Wednesday, April 16, 2014 12:41 PM
To: softimage@listproc.autodesk.com
Subject: Re: SDK: detecting changes in Custom Operator (C++)

I've never written an SDK operator in XSI, but I think I know the answer to 
this one..
Get the input object, and call ProjectItem::GetEvaluationID() on it

this is a LONG value that changes every time an object is evaluated.
If the value hasn't changed since last time, then that input did not change.


Reply via email to