フレームは座標変換を定義すると同時に他の描画アイテムのコンテナとしての役割を持ちます. フレームのクラスはGRFrameです. 次のコードは,フレームを作成してワールドフレームの子として登録します.
GRFrameDesc desc; GRFrameIf* frame = grScene->CreateVisual(desc, grScene->GetWorldFrame())->Cast();
CreateVisual関数は指定されたディスクリプタに対応する描画アイテムを作成し, 指定された親フレームの子として登録します.親フレームを省くとデフォルトでワールドフレームに登録されます. したがって上のコード はCreateVisual(desc)としてもかまいません.
GRFrameのRender関数は,子描画アイテムのRenderを順次呼び出します.
フレーム間の親子関係を管理する関数には次のものがあります.
GRFrameIf | ||
GRFrameIf* |
GetParent() |
|
void |
SetParent(GRFrameIf*) |
|
int |
NChildren() |
|
GRVisualIf** |
GetChildren() |
|
GetParentは親フレームを取得します. SetParentはそのフレームの親フレームを変更するために使います. NChildrenはそのフレームの子である描画アイテムの数を返します. これらにはフレーム以外の描画アイテムも含まれる ことに注意してください. GetChildrenは子描画アイテムの配列を取得します.
フレームの座標変換を操作する関数は以下の通りです.
GRFrameIf | ||
Affinef |
GetTransform() |
|
Affinef |
GetWorldTransform() |
|
void |
SetTransform(const Affinef&) |
|
GetTransform,SetTransformはそれぞれフレームとその親フレームとの間の相対的な座標変換を取得/設定します. 例えば
frame->SetTransform(Affinef::Trn(1.0, 0.0, 0.0));
とすると親フレームに対して相対的にx方向に移動します.