マウスセンサ

「マウスセンサ」の編集履歴(バックアップ)一覧はこちら

マウスセンサ」(2010/11/18 (木) 22:50:10) の最新版変更点

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

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

我々は、ChangeTransフィールドとしてctを定義している我々のルートにscrollUpとscrollDownています。 H3Dではマウス機能を備えたMouseSensorノードとインターフェースが提供されています。ここの例では、その内の4つのフィールドについて理解が必要です。 -マウス左ボタンがクリックされればTrue、そうでなければFalseを返す  &italic(){&bold(){leftButton}} -マウス左ボタンがクリックされればTrue、そうでなければFalseを返す  &italic(){&bold(){rightButton}} -上向きにホイールが動作すればイベントを送信  &italic(){&bold(){scrollUp}} -下向きにホイールが動作すればイベントを送信  &italic(){&bold(){scrollDown}} なお全てのフィールドについては&u(){[[H3D::MouseSensor class reference page>http://www.h3dapi.org/uploads/api/H3DAPI_20/docs/H3DAPI/html/classH3D_1_1MouseSensor.html]]}を参照してください &bold(){学習目的} -MouseSensorノードの利用 *&bold(){シーングラフ} 赤い球形を表示し、クリックで色の変更、ホイールの動作で透明度の変更を行う例を作成します。   <!!-- the X3D file --> <Group> <Group DEF="G" /> <PythonScript url="mouse.py"> <Group USE="G" containerField="references" /> </PythonScript> </Group> この例ではPythonを使ってシーンオブジェクトを描画するため、最小限のコードで書かれています。 <Group>に含まれるのは、Groupノードと、参照を行うPytonScriptです。後に、このスクリプトを利用して、全てのノードに参照を行います。 # mouse.py from H3DInterface import * root, d = createX3DNodeFromString("\ <Group> \ <NavigationInfo type=\"NONE\" /> \ <Shape> \ <Appearance> \ <Material DEF=\"M\" diffuseColor=\"1 0 0\"/> \ </Appearance> \ <Sphere radius=\"0.1\"/> \ </Shape> \ <MouseSensor DEF=\"S\" /> \ </Group>"); references.getValue()[0].addChildren.setValue( [root] ) trans = d['M'].transparency color = d['M'].diffuseColor mouse = d['S'] mouse.pyではcreateX3DNodeFromString関数を利用しており、まずNavigationinfoノードのタイプ(MouseSensorとShapeが含まれる)を無効にします。 createX3DNodeFromString関数では、変数rootに最上位グループのノードを、変数dには文字列内のすべての定義済みノードのハッシュへの参照を格納する。 ハッシュにはキーとしてDEFの値を使用します。 したがってd['M']とd['S']には、それぞれMaterialノードとMouseSensorノードが返ってきます。 そして、私たちが「reference」としてスクリプトに渡したGroupノードにそれを追加することによって、シーングラフにノードを追加します。 また、透明度とdiffuseColorフィールドを取得、「trans」「color」でそれらを格納し、MouseSensorを照会して「mouse」を定義します。 *&bold(){相互作用} # mouse.py class ChangeTrans( AutoUpdate( TypedField(SFBool, (SFBool, SFBool)) ) ): def update( self, event ): up, down = self.getRoutesIn() t = trans.getValue() if event == up and t < 1: trans.setValue( t+0.03 ) if event == down and t > 0: trans.setValue( t-0.03 ) return True class ChangeColor( TypedField(SFColor, (SFBool, SFBool)) ): def update( self, event ): ri = self.getRoutesIn() if ri[0].getValue(): return RGB(0, 0.8, 0.1) if ri[1].getValue(): return RGB(0, 0.5, 0.8) return RGB(1, 0, 0) このスクリプトでは二つのクラスを定義しています。 ChangeTransで定義されたクラスは、球の透明度を調整します。SFBoolの2つの入力フィールドは、後でscrollUpとscrollDownにルーティングされます。 それらを「up」「down」という名で参照し、getRoutesInメソッドを使用して、入力ルートを取得します。tは球の透明度を保存します。 マウスのスクロールされた場合、イベントが送信され「up」イベントを受信したとき、透明度をsetValueメソッドを使用して、1未満増加させます。 同様に「down」イベントを受信すると、透明度をゼロ以上小さくします。 ChangeColorフィールドのクラスは、マウスのクリックイベントによって球の色を変更します。これはleftButtonとrightButtonによってルーティングされます。 updateメソッドは、色をそれぞれのイベントの値に対応させて返します。 # mouse.py ct = ChangeTrans() mouse.scrollUp.routeNoEvent( ct ) mouse.scrollDown.route( ct ) cc = ChangeColor() mouse.leftButton.route( cc ) mouse.rightButton.route( cc ) cc.route( color ) ここでは適切なルートを設定する相互作用を作成します。 まずChangeTransフィールドとして定義しているctに、scrollUpとscrollDownをルーティングしています。 次に、leftButtonとrightButtonのccフィールドをルーティングすることで、マウスのクリックで色が変化するようになります。 ccフィールドはcolorにルーティングされています。
H3Dではマウス機能を備えたMouseSensorノードとインターフェースが提供されています。ここの例では、その内の4つのフィールドについて理解が必要です。 -マウス左ボタンがクリックされればTrue、そうでなければFalseを返す  &italic(){&bold(){leftButton}} -マウス左ボタンがクリックされればTrue、そうでなければFalseを返す  &italic(){&bold(){rightButton}} -上向きにホイールが動作すればイベントを送信  &italic(){&bold(){scrollUp}} -下向きにホイールが動作すればイベントを送信  &italic(){&bold(){scrollDown}} なお全てのフィールドについては&u(){[[H3D::MouseSensor class reference page>http://www.h3dapi.org/uploads/api/H3DAPI_20/docs/H3DAPI/html/classH3D_1_1MouseSensor.html]]}を参照してください &bold(){学習目的} -MouseSensorノードの利用 *&bold(){シーングラフ} 赤い球形を表示し、クリックで色の変更、ホイールの動作で透明度の変更を行う例を作成します。   <!!-- the X3D file --> <Group> <Group DEF="G" /> <PythonScript url="mouse.py"> <Group USE="G" containerField="references" /> </PythonScript> </Group> この例ではPythonを使ってシーンオブジェクトを描画するため、最小限のコードで書かれています。 <Group>に含まれるのは、Groupノードと、参照を行うPytonScriptです。後に、このスクリプトを利用して、全てのノードに参照を行います。 # mouse.py from H3DInterface import * root, d = createX3DNodeFromString("\ <Group> \ <NavigationInfo type=\"NONE\" /> \ <Shape> \ <Appearance> \ <Material DEF=\"M\" diffuseColor=\"1 0 0\"/> \ </Appearance> \ <Sphere radius=\"0.1\"/> \ </Shape> \ <MouseSensor DEF=\"S\" /> \ </Group>"); references.getValue()[0].addChildren.setValue( [root] ) trans = d['M'].transparency color = d['M'].diffuseColor mouse = d['S'] mouse.pyではcreateX3DNodeFromString関数を利用しており、まずNavigationinfoノードのタイプ(MouseSensorとShapeが含まれる)を無効にします。 createX3DNodeFromString関数では、変数rootに最上位グループのノードを、変数dには文字列内のすべての定義済みノードのハッシュへの参照を格納する。 ハッシュにはキーとしてDEFの値を使用します。 したがってd['M']とd['S']には、それぞれMaterialノードとMouseSensorノードが返ってきます。 そして、私たちが「reference」としてスクリプトに渡したGroupノードにそれを追加することによって、シーングラフにノードを追加します。 また、透明度とdiffuseColorフィールドを取得、「trans」「color」でそれらを格納し、MouseSensorを照会して「mouse」を定義します。 *&bold(){相互作用} # mouse.py class ChangeTrans( AutoUpdate( TypedField(SFBool, (SFBool, SFBool)) ) ): def update( self, event ): up, down = self.getRoutesIn() t = trans.getValue() if event == up and t < 1: trans.setValue( t+0.03 ) if event == down and t > 0: trans.setValue( t-0.03 ) return True class ChangeColor( TypedField(SFColor, (SFBool, SFBool)) ): def update( self, event ): ri = self.getRoutesIn() if ri[0].getValue(): return RGB(0, 0.8, 0.1) if ri[1].getValue(): return RGB(0, 0.5, 0.8) return RGB(1, 0, 0) このスクリプトでは二つのクラスを定義しています。 ChangeTransで定義されたクラスは、球の透明度を調整します。SFBoolの2つの入力フィールドは、後でscrollUpとscrollDownにルーティングされます。 それらを「up」「down」という名で参照し、getRoutesInメソッドを使用して、入力ルートを取得します。tは球の透明度を保存します。 マウスのスクロールされた場合、イベントが送信され「up」イベントを受信したとき、透明度をsetValueメソッドを使用して、1未満増加させます。 同様に「down」イベントを受信すると、透明度をゼロ以上小さくします。 ChangeColorフィールドのクラスは、マウスのクリックイベントによって球の色を変更します。これはleftButtonとrightButtonによってルーティングされます。 updateメソッドは、色をそれぞれのイベントの値に対応させて返します。 # mouse.py ct = ChangeTrans() mouse.scrollUp.routeNoEvent( ct ) mouse.scrollDown.route( ct ) cc = ChangeColor() mouse.leftButton.route( cc ) mouse.rightButton.route( cc ) cc.route( color ) ここでは適切なルートを設定する相互作用を作成します。 まずChangeTransフィールドとして定義しているctに、scrollUpとscrollDownをルーティングしています。 次に、leftButtonとrightButtonのccフィールドをルーティングすることで、マウスのクリックで色が変化するようになります。 ccフィールドはcolorにルーティングされています。

表示オプション

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