Object Hierarchy | Related C++ Class: CustomOperator
CustomOperator
v4.0
The CustomOperator object represents a custom operator defined
by the user. This operator may have been created in any of the
following ways:
- in the Scripted Operator Editor
- as a Self-Installed Custom Operator
- on the fly by running a script (a "runtime" custom
operator)
Self-Installed Custom Operators are defined within a Plugin and are the recommended way to create
Custom Operators. Runtime operators are still supported but they
have a different callback convention and embed the entire
implementation of the operator into the scene file. See AddScriptedOp and XSIFactory.CreateScriptedOp
for more details about runtime operators.
Prior to v5.1, Custom Operators were often created based on a
Preset and SPDL file. This technique is still supported as a legacy
feature but Self-Installed Custom Operators are now the recommended
alternative.
The easiest way to build a Self-Installed Custom Operator from
scripting is by using the AddCustomOp command, (or similar
Parameter.AddCustomOp and
ProjectItem.AddCustomOp
methods).
It is also possible to build a custom operator using the methods of
this object. For most operators there is only a single output
object, (represented by a single OutputPort) and there may be inputs
(represented by InputPorts). If the
operator is a deform-style operator it must have both an output and
an input to the same object. The output ports should be added
before the input ports (or by using CustomOperator.AddIOPort). Most
operators only need a single PortGroup, which is created automatically. A
typical operator can be defined entirely with these methods:
- XSIFactory.CreateObject
- CustomOperator.AddInputPort
- CustomOperator.AddOutputPort
- XSIFactory.CreateParamDef
- CustomOperator.AddParameter
- Operator.Connect
More advanced operators, in particular ones that dynamically
connect to objects after the operator has been created, also use
the concept of PortGroup to organize
the ports into groups as they are defined. These operators rely on
CustomOperator.AddPortGroup,
Operator.ConnectToGroup,
and CustomOperator.AddInputPortByClassID.
Certain objects are explicitly blocked from being connected to
custom operators, these include: X3DObject and Kinematics. Instead of connecting to these
objects the operator should connect to the specific data underneath
those objects, for example a Primitive, Property or KinematicState.
The actual algorithm of a Self-Installed Custom Operator is
implemented in the Update callback. Unlike
runtime operators it takes a single argument which is an OperatorContext object. Other callbacks
include the Define, DefineLayout,
Init, Term and the PPG Logic
callbacks (PPGEvent for C# and
OnClicked,
OnInit, and
OnTab).
For more information, see the Custom
Operators topic.