ジオメトリ ノードを検索する

シーングラフ内で vrdGeometryNode ノードを検索します。シェルのジオメトリでトラバースが停止し、シェル コンポーネントに移動しなくなります。

ここでは、vrdGeometryNode 型のノードのみを明示的に収集します。もちろん、同様のトラバース方法を作成して、別のタイプのノードまたは異なる基準に基づくノードを収集することができます。

findGeosRecursive in lineGeometry-texCoords.py

def findGeosRecursive(node, geos, predicate):
    """ ノードから開始してシーングラフを再帰的にトラバース、
        述語を使用してフィルタできるジオメトリ ノードを
       収集します。
       Args:
            node (vrdNode): 現在トラバースされているノード
            geos (vrdGeometryNode のリスト): 収集されたジオメトリ ノードのリスト
            predicate (function): None または predicate(vrdGeometryNode)->bool
    """
    geo = vrdGeometryNode(node)
    if geo.isValid():
        if predicate is None or predicate(geo):
            geos.append(geo)
        # ツリーのトラバースを停止する
    else:
        # traverse the children
        for child in node.getChildren():
            findGeosRecursive(child, geos, predicate)

findGeos in lineGeometry-texCoords.py

def findGeos(root, predicate=None):
    """ findGeosRecursive をラップして、ジオメトリ ノードのリストを返します。
    """
    geos = []
    findGeosRecursive(vrdNode(root), geos, predicate)
    return geos

述語関数を持つ findGeos を使用して線分ジオメトリをフィルタする

findLineGeos in lineGeometry-texCoords.py

def findLineGeos(root):
    predicate = lambda geo : GeometryAccess.isLineType(geo.getPrimitiveType())
    lines = findGeos(root, predicate)
    return lines

findGeos を使用して B 側ジオメトリを検索する:

bSideGeos = findGeos(root, lambda geo : geo.isBSide())