Group
基本的な使い方
Psychlops::Rectangle rect(100,100); rect.fill = Color::red; Psychlops::Ellipse ellipse(100,100); ellipse.fill = Color::white; Group g; rect.join(g).centering(0,0).shift(-100,100); ellipse.join(g).centering(0,0).shift(100,100); g.centering(); g.draw();
回転や拡大縮小などアフィン変換に使う場合
Groupに回転や拡大縮小についてのに登録されている
回転の場合
Groupにrotation値を指定した状態でGroupをdrawすると、Groupに登録されているFigureオブジェクト全てがGroupの基準座標(Groupの内部的には(0, 0)、Groupの外部的にはGroupのdatum)を中心に回転します。
#include <psychlops.h> using namespace Psychlops; void psychlops_main() { Canvas d(Canvas::window); Group gr; Image img("sample.png"); // Imageを読み込む img.cache(); // VRAMにキャッシュ(quicken)する img.join(gr).centering(gr); // ImageをGroupに登録し、相対座標を合わせておく(画像の中心を回転datumにする) gr.centering(); // Group全体を画面に対しセンタリングする double phase = 0.0; while(!Keyboard::esc.pushed()) { d.clear(); gr.rotation += 1.0; gr.draw(); d.flip(); if(AppState::shouldBeClose) break; } }
変数
- Point datum
- Groupの基準座標を示します。Group内のすべてのFigureはこの座標分ずらされて描画されます。また、回転の原点座標ともなります。この変数に対する操作はGroup全体の平行移動に相当します。
- double rotation
- 回転角度を指定します。後述のaxisを指定しなければ画面平面上での回転となります。この回転は、標準ではGroup全体を一枚のレイヤとしてまわすものにまります(図)。回転した際のレンダリング精度の劣化は考慮しませんので、ピクセル単位で完全に制御が必要な刺激には使わないでください。また、あとでAngle型に変わる可能性があります。
- Point axis
- 回転軸のベクトル方向を指定します。デフォルトは(0, 0, 1)で画面平面の法線です。
- Point scaling
- 拡大縮小をx,y,z軸方向について指定します。デフォルトは(1,1,1)で、表示上大きさは変化しません。
扱いが変更になるかもしれない機能
- std::vector<Figure *> contents
- Figureのポインタを保持する動的配列です。アクセス方法はSTLのstd::vectorの使い方を参照してください。将来的に直接アクセスできなくなる可能性があります。
- virtual Group& clip(const Rectangle &rect)
- このGroupを表示する際に、rectで指定された範囲に収まる部分だけ描画し、その外側を無視するよう指定します(クリッピング)。将来的に、Groupを継承した子クラスに機能が移される可能性があります。
- virtual Group& clip(bool sw)
- 引数にfalseを指定するとクリッピングが解除されます。
キーワード:[Class] [Figure]
参照:[リファレンスマニュアル]