NavigateNode

導入

v1.5

詳細

ナビゲーション フィルタやディレクションが与えられている指定のオブジェクト/コンポーネントの中をナビゲートします。 対応するオブジェクトまたはコンポーネントを戻します。

注: エレメントを選択する場合は、このコマンドではなく SelectNeighborObj を使用します。

スクリプト構文

oReturn = NavigateNode( [Source], [NavDirection], [NavLoop], [NavFilter], [NavSubFilter], [OutputObj] );

戻り値

要求された位置に存在するノード。または、ノードが存在しない場合は InputObj。

注: 条件に合致した最初のノードのみが戻されます。

パラメータ

パラメータ タイプ 詳細
Source 選択リスト ナビゲーションの開始ポイント

デフォルト値: 現在選択されている値

NavDirection Integer ナビゲート方法を指定します( 親や子の階層、シブリング階層などに移動します)。

デフォルト値: siParentNode

指定可能な値:

説明:

siParentNode 親を取得
siChildNode 子を取得
siNextNode 次のシブリングを取得
siPreviousNode 前のシブリングを取得
siFirstNode 最初のシブリングを取得
siLastNode 最後のシブリングを取得
NavLoop ブール 終了位置に到達したときや最後まで検索し終わったときに、階層の開始位置に戻るか、検索を継続するかを指定します。

デフォルト値: False

指定可能な値:

説明:

False 階層全体をループしません。
True 階層全体をループします。
NavFilter Integer 戻したいオブジェクトの種類。 NavDirection が siParentNode または siChildNode である場合は、この値とは無関係に必ずデフォルトのフィルタリングが使用されます。

デフォルト値:11:入力と同じタイプ

指定可能な値:

説明:

1 Scene
2 3D オブジェクト
3 オペレータ
4 Primitive
5 コンテナまたは属性
6 Cluster
7 サブコンポーネント
8 Group
9 任意の COM オブジェクト
10 任意の型
11 入力と同じタイプ
NavSubFilter Integer 目的のオブジェクトの SubType。 NavFilter 引数と併用します。

デフォルト値: 1: 入力と同じタイプ

指定可能な値:

説明:

0 任意の型
1 入力と同じタイプ
OutputObj SIObject (たとえば、ParameterProperty、または X3DObject)から導かれたオブジェクト 要求された位置に存在するノード。 ノードが存在しない場合は、InputObj パラメータにより指定されているノードが戻されます。

注: 条件に合致した最初のノードのみが戻されます。

1. VBScript の例

' Returns the children of the current selection in a collection
' Ouput: XSICollection  | Children of the selected object
Function GetChildren()
        Set childColl = CreateObject( "XSI.Collection" )
        If Selection.Count <> 1 Then
                MsgBox "You must select an object in order to get its children.", vbExclamation, "GetChildren"
        Else
                Set oSelected = Selection(0)
                SetUserPref "SCR_CMDLOG_ENABLED", False
                ' get the first child
                Set oChild = NavigateNode( oSelected, siChildNode )
                Set oCurrent = oChild
                ' if there is at least one child
                If      StrComp( oSelected, oChild ) <> 0 Then
                        ' Add the child and its siblings to the collection
                        Do 
                                childColl.Add oCurrent
                                set oCurrent = NavigateNode( oCurrent, siNextNode, True, 10 )
                        Loop Until StrComp( oCurrent, oChild ) = 0
                End If
                SetUserPref "SCR_CMDLOG_ENABLED", True
        End If
        Set GetChildren = childColl
End Function
' Displays the content of a collection in the scripting
' log
' Input: oColl  | Collection to display
Sub DisplayCollectionContent( ByRef oColl )
        Dim message
        message = "The collection contains the following elements:" & vbLF & vbLF
        For Each element In oColl
                message = message & element & vbLf
        Next
        LogMessage message
End Sub
' Create a new scene with a null then display its children
NewScene ,False
GetPrim "Null", "MyNull"
DisplayCollectionContent( GetChildren() )
'Output of the above script:
'INFO : "The collection contains the following elements:
' 
' MyNull.Name
' MyNull.null
' MyNull.AmbientLighting
' MyNull.Scene_Material
' MyNull.geomapprox
' MyNull.display
' MyNull.kine
' MyNull.visibility
' MyNull.kine
' MyNull.display
' MyNull.visibility
' MyNull.Children
'"

2. VBScript の例

' Create a sphere and a cone :
oSphere = CreatePrim( "Sphere", "MeshSurface" )
oCone = CreatePrim( "Cone", "MeshSurface" )
ParentObj oSphere, oCone 
'
' Navigate in the 3D object hierarchy.
'
LogMessage " --- Object Navigation ---"
' First, from the sphere, navigate "up" to get the scene root:
rtn = NavigateNode( oSphere, 1, , , 0 )
LogMessage "From " & oSphere & ", we obtained " & rtn 
' Now navigate "down" from the sphere:
rtn = NavigateNode( oSphere, 2, , 11, 0 )
LogMessage "From " & oSphere & ", we obtained " & rtn 
'
' Now, navigate amongst newly created clusters.
'
LogMessage "--- Cluster Navigation ---"
oCls1 = CreateCluster( oSphere & ".pnt[25-27,31-34,38-41]" )
oCls2 = CreateCluster( oSphere & ".pnt[3-6,11-13,52-55]" )
' From the first cluster, get the second one:
rtn = NavigateNode( oCls1, 3, True )
LogMessage "From " & oCls1 & ", we obtained " & rtn 
' From the previously obtained cluster, return the next one.
' If the next one doesn't exist, make sure we loop.
LogMessage "We have now reached the end of the cluster list."
newrtn = NavigateNode( rtn, 3, True, 6, 1 )
LogMessage "From " & rtn & ", we loop and we obtained " & newrtn 
' Same as above but this time, we will not "loop".
newrtn = NavigateNode( rtn, 3, False, 6, 1 )
LogMessage "From " & rtn & ", we DON'T loop and we obtained " & newrtn 
' Running this script should log the following:
' ---------------------------------------------
'INFO : " --- Object Navigation ---"
'INFO : "From sphere, we obtained Scene_Root"
'INFO : "From sphere, we obtained sphere.Name"
'INFO : "--- Cluster Navigation ---"
'INFO : "From sphere.polymsh.cls.Point, we obtained sphere.polymsh.cls.Point1"
'INFO : "We have now reached the end of the cluster list."
'INFO : "From sphere.polymsh.cls.Point1, we loop and we obtained sphere.polymsh.cls.Point"
'INFO : "From sphere.polymsh.cls.Point1, we DON'T loop and we obtained sphere.polymsh.cls.Point1"

関連項目

SelectNeighborObj