「JavaFXの座標系と座標変換」の版間の差分

提供: tknotebook
移動: 案内検索
(JavaFXの座標系)
(ローカル座標)
28行: 28行:
 
==ローカル座標==
 
==ローカル座標==
  
Scene のルートコンテナに登録された個々のノード(コントロールやコンテナや図形)は、
+
Scene に登録された個々のノード(コントロールやコンテナや図形)は、
 
自身のローカル座標を持ちます。
 
自身のローカル座標を持ちます。
  
39行: 39行:
 
{{fig|[[ファイル:JavaFX座標系の階層構造.png]]|図2 JavaFX の座標系の階層構造}}
 
{{fig|[[ファイル:JavaFX座標系の階層構造.png]]|図2 JavaFX の座標系の階層構造}}
  
ローカル座標は親ノードのローカル座標の中に置かれます。初期状態では親ノードのローカル座標と
+
ローカル座標は親ノードのローカル座標の中に置かれます。もし、ノードにTransform(変換)が無く、
ノードのローカル座標は一致しています。つまり、ノードにTransform(変換)が無く、
+
'''layoutX, layoutYプロパティもゼロのまま'''ならば、ノードと親ノードのローカル座標系は一致します。
'''layoutX, layoutYプロパティもゼロのまま'''ならば、子ノードと親ノードのローカル座標系は一致します。
+
  
 
もし、ノード自身、およびSceneに至るまでの全ての直系の親ノードに Transform(変換)が無く、
 
もし、ノード自身、およびSceneに至るまでの全ての直系の親ノードに Transform(変換)が無く、
47行: 46行:
  
 
JavaFxでは'''ローカル座標系は図形に固定された座標系'''ととらえ、
 
JavaFxでは'''ローカル座標系は図形に固定された座標系'''ととらえ、
ワールド座標系での図形の位置は、'''ワールド座標に対するローカル座標を変更する'''
+
上位ノードに対する図形の位置は、'''ローカル座標を変更する'''ことで行います。
ことで行います。
+
図形ではなくローカル座標を変更するという考え方に注意してください。
  
つまり '''JavaFX のノード Transform(変換)+layoutX+LayoutY はノードの親のローカル座標に対する
+
JavaFX のノードの Transform(変換)やlayoutX/LayoutY プロパティはノードの親のローカル座標に対する
自身のローカル座標を決定するためのもの'''なのです。別の言い方をすれば、親のローカル座標に対する
+
自身のローカル座標を決定するためのものなのです。
自身のローカル座標を定義するためのものなのです。
+
 
 +
別の言い方をすれば、親のローカル座標に対する自身のローカル座標を定義するためのものなのです。
  
  

2016年3月26日 (土) 03:27時点における版

メインページ>コンピュータの部屋#JavaFX>JavaFX Tips


JavaFXに関してたくさんの解説がネットや書籍に載っていますが、意外なことに JavaFXの座標系に関する解説が少ないようです。

この記事では JavaFx の座標系と、座標変換に関して解説します。

JavaFXの座標系

まず、JavaFxで使用されているワールド座標を示します。 ワールド座標とは、JavaFXのコントロールや図形が置かれる 座標空間です。

JavaFX ワールド座標.png
図1 JavaFXのワールド座標

図は、3Dカメラを用いない場合の Scene で使われるワールド座標系です。 z軸も書いてあるのは、2Dグラフィックスでも画面の深さ方向の座標(Z軸)が使われることがあるからです。

Scene(ウィンドウ) の左上が座標系の原点で、そこから右方向にX軸が、下方向にY軸が伸びます。 画面に潜る方向がZ軸の正方向になります。 軸目盛の単位はピクセルです。

3Dカメラを用いない Scene では、Scene とワールド座標の関係は固定されています。 3Dカメラに関しては「変換」の説明が終わってから説明します。

ローカル座標

Scene に登録された個々のノード(コントロールやコンテナや図形)は、 自身のローカル座標を持ちます。

例えば、2次元図形の Rectangle は矩形の左上の座標をプロパティ x, y に保持しますが これはローカル座標です。

3次元図形の Box(箱型) や Sphere(球) はその中心が常に座標 (0, 0) になりますが、 (0、0) はローカル座標です。つまり3次元図形は自身のローカル座標の中を動くことができません。

JavaFX座標系の階層構造.png
図2 JavaFX の座標系の階層構造

ローカル座標は親ノードのローカル座標の中に置かれます。もし、ノードにTransform(変換)が無く、 layoutX, layoutYプロパティもゼロのままならば、ノードと親ノードのローカル座標系は一致します。

もし、ノード自身、およびSceneに至るまでの全ての直系の親ノードに Transform(変換)が無く、 layoutX, layoutYプロパティもゼロのままならば、ローカル座標はグローバル座標と一致します。

JavaFxではローカル座標系は図形に固定された座標系ととらえ、 上位ノードに対する図形の位置は、ローカル座標を変更することで行います。 図形ではなくローカル座標を変更するという考え方に注意してください。

JavaFX のノードの Transform(変換)やlayoutX/LayoutY プロパティはノードの親のローカル座標に対する 自身のローカル座標を決定するためのものなのです。

別の言い方をすれば、親のローカル座標に対する自身のローカル座標を定義するためのものなのです。



鋭意作成中