カスタム オペレータの場合、このコールバックはオペレータのインスタンスがインスタンス化されるときに発生します。 Define とは異なり、Init は新しく作成されたオペレータについても、ファイルからロードされたオペレータについても呼び出されます。
ユーザデータをInitコールバックのオペレータコンテキストに保存して、後から Update コールバックおよび Term コールバックで取得できます。 データは、単純な数値または文字列としても、COM オブジェクトまたは C++ オブジェクトとしても保存できます。
| 注 | Update が初めて呼び出されたときにキャッシュされたオペレータ データを初期化することもできますが、データの初期化は Init で実行することを強くお勧めします。 |
public class <operator_name>
{
public bool Init( Context in_context )
{
...
}
}
|
CStatus <operator_name>_Init( CRef& in_context )
{
...
}
|
function <operator_name>_Init( in_context )
{
...
}
|
def <operator_name>_Init( in_context ):
...
|
Function <filter_name>_Init( in_context )
...
End Function
|
sub <operator_name>_Init
{
my $in_context = shift;
}
|
<operator_name>は、PluginRegistrar.RegisterOperator の呼び出しで指定されている名前です。この名前に含まれるスペースはアンダースコアに置き換えられます。
| パラメータ | Language | タイプ | 詳細 |
|---|---|---|---|
| in_context | スクリプティングおよび C# | コンテキスト | Context.Source は CustomOperator を返します。 |
| C++ | CRef& | Context オブジェクトへのリファレンス。 Context::GetSource は CustomOperator を返します。 |
// Basic example
SICALLBACK CppOp_Init( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
CustomOperator op( ctxt.GetSource() );
CString strOpNameAsUserData = op.GetUniqueName();
ctxt.PutUserData( strOpNameAsUserData ) ;
return CStatus::OK ;
}
|
// Object Data
class CData
{
LONG data;
};
SICALLBACK CppOp_Init( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
CData* p = new CData;
p->data = 123;
CValue val = (CValue::siPtrType) p;
ctxt.PutUserData( val ) ;
return CStatus::OK ;
}
// Time to release memory
SICALLBACK CppOp_Term( CRef& in_ctxt )
{
Context ctxt( in_ctxt );
CValue val = in_ctxt.GetUserData();
CData* p = (CData*)(CValue::siPtrType)val;
delete p;
return CStatus::OK ;
}
|