シミュレート ICE ツリーのコンポーネントのアクセス

 
 
 

ノードは、一度に 1 レベルの ICE ツリーでアクセスできます。ノードにサブノードが含まれる場合は、そのノードはノード コンテナとして認識されます。 これは、ネスト化されたすべてのサブノードを取得するには、何らかの反復を実行する必要があることを意味します。

ポートには複数のインスタンスが含まれるので、ポートグループ インデックスとポート インデックスだけではなく、ポートが属するポートグループ インスタンスも指定する必要があります。

JScript の例: —スクリプトを解してシミュレート ICE ツリーのコンポーネントにアクセスする

この例では、シーン グラフから ICE ツリーに移動し、ICE ツリー グラフを調べて各ノードおよび各ポートを順番にアクセスする方法を示します。

NewScene(null, false);
var obj = CreatePrim("Cylinder", "MeshSurface");
var emitter = EmitPointsFromObject(obj);

// Find ICE tree (operator)
var ICEop = emitter.ActivePrimitive.ICETrees(0);

// From the ICE tree you get the list of nodes one level at a time
RecursivelyLogNodeInfo(ICEop, "- ");


// Recursive function for traversing a node graph
function RecursivelyLogNodeInfo( node, indent )
{
	Application.LogMessage( indent + "Node: " + node.FullName + " is a " + node.Type );
	
	// Now log the node's ports with their portgroups
	if ( node.Type != "ICETree" ) {
		for ( var i=0; i<node.PortGroupCount; i++ ) {
			Application.LogMessage( indent + " - PortGroup["+i+"]" );
			for ( var j=0; j<node.GetGroupInstanceCount(i); j++ ) {
				Application.LogMessage( indent + " - - PortGroupInstance["+j+"]" );
				for ( var k=0; k<node.GetPortCount(i); k++ ) {
					var port = node.GetPortFromIndex(k, i, j);
					var direction = ( port.IsOutput ) ? "output" : "input";
					Application.LogMessage( indent + " - - - Port " + port.FullName + " is an " + direction );
				}
			}
		}
	}

	// Recursion: if node contains other nodes, log them as well
	if ( node.IsClassOf(siICENodeContainerID) ) {
		for ( var h=0; h<node.Nodes.Count; h++ ) {
			RecursivelyLogNodeInfo(node.Nodes(h), indent+"- ");
		}
	}
}


// Expected results:
// INFO : - Node: PointCloud.pointcloud.ICETree is a ICETree
// INFO : - - Node: PointCloud.pointcloud.ICETree.SceneReferenceNode is a SceneReferenceNode
// INFO : - -  - PortGroup[0]
// INFO : - -  - - PortGroupInstance[0]
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.SceneReferenceNode.value is an output
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.SceneReferenceNode.outname is an output
// INFO : - -  - PortGroup[1]
// INFO : - -  - - PortGroupInstance[0]
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.SceneReferenceNode.source is an input
// INFO : - -  - PortGroup[2]
// INFO : - -  - - PortGroupInstance[0]
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.SceneReferenceNode.inname is an input
// INFO : - - Node: PointCloud.pointcloud.ICETree.Emit_from_Surface is a Emit_from_Surface
// INFO : - -  - PortGroup[0]
// INFO : - -  - - PortGroupInstance[0]
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.Emit_from_Surface.Seed is an input
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.Emit_from_Surface.Emitter1 is an input
// INFO : - -  - - - Port PointCloud.pointcloud.ICETree.Emit_from_Surface.Select_Rate_Type is an input
// etc.