H3DAPI と Python

「H3DAPI と Python」の編集履歴(バックアップ)一覧はこちら

H3DAPI と Python」(2010/11/16 (火) 18:43:11) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#contents() *&bold(){シーングラフにPythonスクリプトを追加する} Pythonスクリプトは、PythonScriptノードを使用して、シーングラフに追加することができます。 &bold(){例:} <Scene> <PythonScript url="script1.py" /> <PythonScript url="script2.py" </Scene> 上記のコードは、2つのPythonスクリプト「script2.py」と「script1.py」をシーングラフへ追加します。スクリプトは、シーングラフ初期化時に少なくとも一度は実行されます。 参照するフィールドの値としてノードを指定することによって、ノードの参照がPythonスクリプトに渡される事もあります。 &bold(){例:} <Scene> <Shape DEF="S"> <Appearance> <Material DEF="M" /> </Appearance> <Sphere radius="0.1" /> </Shape> <PythonScript url="script.py"> <Shape USE="S" containerField="references" /> <Material USE="M" containerField="references" /> </PythonScript> </Scene> Shapeノードへの参照は、上記のPythonScriptの参照フィールドに値として指定することによって、スクリプトに渡されます。 ここで「containerField="references"」が行われていることに注目して下さい。「containerField」は、現在のノードに対応する親ノードのフィールドを定義します。 「references」の値は、スクリプト内でGetValueメソッドを呼び出すことによって取得することができます。 # script.py shape, mat = references.getValue() 変数のshapeやmatは、ShapeとMaterialへの参照が含まれています。 *&bold(){フィールドの値を入手、変更} フィールド参照によって、フィールドの値を変更するGetValueメソッドとSetValueフィールドメソッドを使用することができます。 先ほどの例では、すでにスクリプトでreferencesを取得するためにgetValueメソッドを使用しています。 &bold(){例:} mat.diffuseColor.setValue( RGB(1, 0, 0) ) 前の例で説明したように、matを使用しsetValueメソッドを呼びだすことで、MaterialノードのdiffuseColorにアクセスし、値を赤に変えます。 *&bold(){シーングラフへのノードの追加、作成} Pythonに次の関数を利用することで、X3Dのノードを作成することができます。 -createX3DFromURL( url ) -createX3DFromString( string ) -createX3DNodeFromURL( url ) -createX3DNodeFromString( string ) 各関数は1番目の要素にノードの参照を、2番目の要素にurlもしくはstringのハッシュを含む、長さ2の配列です。 &bold(){例:} s, d = createX3DNodeFromString(" \ <Shape> \ <Appearance> \ <Material /> \ <SmoothSurface DEF=\"SURFACE\" /> \ </Appearance> \ <Box DEF=\"BOX\" size=\"0.1 0.2 0.1\" /> \ </Shape>") sはShapeへの参照が含まれており、dは["SURFACE"]と["BOX"]というDEFの値を持ったハッシュである。 シーン内の既存のノードの値としてそれらを設定することにより、シーングラフにノードを追加することができます。 また、既にスクリプトからの参照があるシーン内のGroupノードを持っているならば、そのGroupノードの子として、新しく作成されたShapeノードを追加することができます。 &bold(){例:} g_node.addChildren.setValue( s ) 上記のコードは、g_nodeのaddChildrenフィールドからsetValueメソッドを呼び出すことによって、g_nodeにShapeノードを新しい子ノードsとして設定します。 *&bold(){ルーティング・アンルーティング} Pythonスクリプトでフィールド参照を使用している場合、ルーティングと同様のrootメソッドを使用して、Pythonでアンルーティングを行います。 field_1.route( field_2 ) field_1.unroute( field_2 )
#contents() *&bold(){シーングラフにPythonスクリプトを追加する} Pythonスクリプトは、PythonScriptノードを使用して、シーングラフに追加することができます。 &bold(){例:} <Scene> <PythonScript url="script1.py" /> <PythonScript url="script2.py" </Scene> 上記のコードは、2つのPythonスクリプト「script2.py」と「script1.py」をシーングラフへ追加します。スクリプトは、シーングラフ初期化時に少なくとも一度は実行されます。 参照するフィールドの値としてノードを指定することによって、ノードの参照がPythonスクリプトに渡される事もあります。 &bold(){例:} <Scene> <Shape DEF="S"> <Appearance> <Material DEF="M" /> </Appearance> <Sphere radius="0.1" /> </Shape> <PythonScript url="script.py"> <Shape USE="S" containerField="references" /> <Material USE="M" containerField="references" /> </PythonScript> </Scene> Shapeノードへの参照は、上記のPythonScriptの参照フィールドに値として指定することによって、スクリプトに渡されます。 ここで「containerField="references"」が行われていることに注目して下さい。「containerField」は、現在のノードに対応する親ノードのフィールドを定義します。 「references」の値は、スクリプト内でGetValueメソッドを呼び出すことによって取得することができます。 # script.py shape, mat = references.getValue() 変数のshapeやmatは、ShapeとMaterialへの参照が含まれています。 *&bold(){フィールドの値を入手、変更} フィールド参照によって、フィールドの値を変更するGetValueメソッドとSetValueフィールドメソッドを使用することができます。 先ほどの例では、すでにスクリプトでreferencesを取得するためにgetValueメソッドを使用しています。 &bold(){例:} mat.diffuseColor.setValue( RGB(1, 0, 0) ) 前の例で説明したように、matを使用しsetValueメソッドを呼びだすことで、MaterialノードのdiffuseColorにアクセスし、値を赤に変えます。 *&bold(){シーングラフへのノードの追加、作成} Pythonに次の関数を利用することで、X3Dのノードを作成することができます。 -createX3DFromURL( url ) -createX3DFromString( string ) -createX3DNodeFromURL( url ) -createX3DNodeFromString( string ) 各関数は1番目の要素にノードの参照を、2番目の要素にurlもしくはstringのハッシュを含む、長さ2の配列です。 &bold(){例:} s, d = createX3DNodeFromString(" \ <Shape> \ <Appearance> \ <Material /> \ <SmoothSurface DEF=\"SURFACE\" /> \ </Appearance> \ <Box DEF=\"BOX\" size=\"0.1 0.2 0.1\" /> \ </Shape>") sはShapeへの参照が含まれており、dは["SURFACE"]と["BOX"]というDEFの値を持ったハッシュである。 シーン内の既存のノードの値としてそれらを設定することにより、シーングラフにノードを追加することができます。 また、既にスクリプトからの参照があるシーン内のGroupノードを持っているならば、そのGroupノードの子として、新しく作成されたShapeノードを追加することができます。 &bold(){例:} g_node.addChildren.setValue( s ) 上記のコードは、g_nodeのaddChildrenフィールドからsetValueメソッドを呼び出すことによって、g_nodeにShapeノードを新しい子ノードsとして設定します。 *&bold(){ルーティング・アンルーティング} Pythonスクリプトでフィールド参照を使用している場合、ルーティングと同様のrootメソッドを使用して、Pythonでアンルーティングを行います。 field_1.route( field_2 ) field_1.unroute( field_2 ) *&bold(){参考} [[H3DAPI Python FAQ >http://www.h3dapi.org/modules/mediawiki/index.php/H3DAPI_FAQ#Python]]

表示オプション

横に並べて表示:
変化行の前後のみ表示: