FrontPage  ページ一覧  検索  更新履歴  RSS  ログイン

Group

概要

 複数の図形をまとめて一つの図形のように扱いたい場合に、これをグループ化して取り扱うためのクラスです(Adobe IllustratorやMicrosoft PowerPointにも同様の機能があります)。付随的機能として、平行移動、回転、拡大縮小ができるようになります。ただし、Imageを登録する場合にはcache(quicken)しておく必要があります。

基本的な使い方

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)で、表示上大きさは変化しません。

関数

Group& append(Figure &fig)
Group& append(Figure *fig)
このGroupFigureを追加します。ポインタで保持するため、Groupより寿命の短いFigure変数を指定するとハングアップする可能性があります。
virtual Group& draw(Drawable &drawable = *Drawable::prime)
Figureを順次描画します。

扱いが変更になるかもしれない機能

std::vector<Figure *> contents
Figureのポインタを保持する動的配列です。アクセス方法はSTLのstd::vectorの使い方を参照してください。将来的に直接アクセスできなくなる可能性があります。
virtual Group& clip(const Rectangle &rect)
このGroupを表示する際に、rectで指定された範囲に収まる部分だけ描画し、その外側を無視するよう指定します(クリッピング)。将来的に、Groupを継承した子クラスに機能が移される可能性があります。
virtual Group& clip(bool sw)
引数にfalseを指定するとクリッピングが解除されます。
更新日時:2010/06/09 19:26:53
キーワード:[Class] [Figure]
参照:[リファレンスマニュアル]