If i use Plugin's UserData i have a problem with releaseing memory.
struct myStruct{
XSI::CLongArray polyData;
XSI::CValueArray edgeSegmentsArray;
}
SICALLBACK XSILoadPlugin( PluginRegistrar& in_reg ){
PlugData * pDataPtr = new PlugData ;
CValue ptrValue = (CValue::siPtrType) pDataPtr;
in_reg.PutUserData(ptrValue);
}
SICALLBACK myOperator_Update( CRef& in_ctxt ){
OperatorContext ctxt( in_ctxt );
CValue userData(ctxt.GetUserData());
update_func(ctxt);
return CStatus::OK;
}
2015-12-10 20:47 GMT+03:00 Steven Caron <[email protected]>:
> Could you use the Plugin's UserData to pass the struct between plugin
> types? I never heard of using the context from one plugin type being used
> in another plugin type.
>
> http://bit.ly/1NILLt7
>
> On Thu, Dec 10, 2015 at 9:01 AM, Andruha Prostrelov <[email protected]>
> wrote:
>
>> I am looking for the way to pass a "struct" from Tool Class to the
>> CustomOperator_Update() callback.
>> I saw two approaches to this in SDK. First one should work via UserData
>> attached to ctxt. You store in this
>> data C++ pointer to allocated memory with your struct. Second one is to
>> create Property and store this pointer in
>> property. I prefer do not create additional Property, so i tried to add
>> UserData to ctxt.
>> But i don't quite sure that i make it right.
>> I tried this piece of code ...
>>
>> struct myStruct{
>> XSI::CLongArray polyData;
>> XSI::CValueArray edgeSegmentsArray;
>> }
>> SICALLBACK myCmd_Execute( CRef& in_ctxt ){
>> PlugData pData;
>> PlugData * pDataPtr;
>> pDataPtr = &pData;
>> ctxt.PutUserData(XSI::CValue(pDataPtr));
>> }
>> SICALLBACK myOperator_Update( CRef& in_ctxt ){
>> OperatorContext ctxt( in_ctxt );
>> CValue userData(ctxt.GetUserData());
>> update_func(ctxt);
>> return CStatus::OK;
>> }
>>
>> ... but in Update callback i didn't get pointer back.
>>
>> If someone has already faced a similar problem maybe you can share some
>> advices.
>> Or maybe there is a way to pass struct without UserData or Custom
>> Property.
>>
>
>