組み込みの Softimage オペレータのオペレータ接続に関する全般的な情報については、「コネクション セットについて」を参照してください。
各オペレータは、少なくとも 1 つの出力ポートを持ちますが、入力ポートはゼロの場合もあります。 各ポートには方向があるため、特定のオブジェクトに対して読み書きを実行する場合は、2 つのポート(入力および出力)が必要です。 デフォーマは、既存のジオメトリを読み込み、入力ポートと出力ポートを介してそのジオメトリを変形させるオペレータの例です。
ポート接続は、読み書きを実行する必要のある特別なデータに対して行われます。 接続先の有効なオブジェクトには、任意の Property または Property、ClusterProperty または ClusterProperty、KinematicState または KinematicState、Primitive または Primitive または Parameter または Parameter などがあります。接続では、X3DObject 自体ではなく、X3DObject または X3DObject 内の特定のデータにアクセスする必要があります。このルールを維持するために、オブジェクト モデルまたは C++ API は、X3DObject または X3DObject のネスト データを検索するように設計されている一部のメソッドやプロパティへのアクセスを回避します。たとえば、Geometry.Clusters または Geometry::GetClusters は、オペレータがアクセスを求める各クラスタに接続すると予測されるため、カスタム オペレータ内ではブロックされます。
カスタム オペレータの作成時の主な作業の 1 つとして、ポートの定義があります。ポートを定義することによって、必要な入力データすべてが読み込まれ、計算の結果が出力オブジェクトを更新するために使用されるようになります。
Update 関数内のポートにアクセスするには、名前またはインデックスでポートを指定できる OperatorContext.GetInputValue または OperatorContext::GetInputValue を使用します。名前よりもインデックスでポートにアクセスする方が迅速です。インデックスは、ポートが追加された順序でわかります。
オペレータが AddCustomOp コマンドまたは Parameter.AddCustomOp または Parameter::AddCustomOp メソッドによって作成された場合、インデックスは、入力または入力引数の順序に基づいて簡単に特定できます。
オペレータが手動で作成されている場合、インデックスは CustomOperator.AddInputPort または CustomOperator::AddInputPort または CustomOperator.AddIOPort または CustomOperator::AddIOPort への呼び出しの順番に基づいて特定できます。
Update 関数以外でポートにアクセスするには、Operator.InputPorts または Operator::GetInputPorts および Operator.OutputPorts または Operator::GetOutputPorts を使用できます。
ポートをインデックスで取得できるメソッドは他にもあります(Operator.PortAt または Operator::GetPortAt)。ただし、このメソッドがインデックスをどのように読み込むかを理解することが重要です。実装される順序に関わらず、すべての入力ポートが出力ポートに優先します。
代わりに、OperatorContext.GetInputValue または OperatorContext::GetInputValue(または Operator.GetInputValue または Operator::GetInputValue)および Operator.InputPorts または Operator::GetInputPorts または Operator.OutputPorts または Operator::GetOutputPorts を使用することをお勧めします(はるかに安全です)。
ポート グループは、オペレータのポートを構成するための優れたツールです。 各ポートは単一のグループに属す必要があり、オペレータは複数のグループを定義できます。
ダイナミック オペレータや、不定数の入力から読み込みを行う複雑なオペレータなど、高度なオペレータを作成しているのでない限り、ポート グループに関しては特別な注意は必要ありません。詳細については、「スタティック オペレータとダイナミック オペレータ」を参照してください。
ターゲットは、ポート経由でオペレータに接続されているオブジェクト(Primitive または Primitive、KinematicState または KinematicState、Property または Property、Parameter または Parameter など)です。 パラメータに接続する場合は、パラメータの現在の値(倍精度数値など)を取得します。それ以外の場合、接続されたオブジェクト(Primitive または Primitive オブジェクトなど)を取得します。
使用するメンバ |
パラメータ コネクション |
非パラメータ コネクション |
---|---|---|
OperatorContext.GetInputValue または OperatorContext::GetInputValue |
パラメータの値を返します。 |
オブジェクトを返します。 |
OperatorContext.OutputTarget または OperatorContext::GetOutputTarget |
出力ポートに接続されたオブジェクトを戻します。 |
|
OperatorContext.OutputPort または OperatorContext::GetOutputPort |
ポートオブジェクト自体を戻します。続けて、OutputPort.Value または OutputPort::PutValue を使用して、ポートに接続するパラメータに新しい値を書き込むことができます。 |