前のページ次のページ上に戻るホーム SophiaFramework 2.2

9.1. シェイプの使い方

9.1.1. シェイプとは?

SophiaFramework では図形の演算のためにシェイプ クラス群が用意されています。 シェイプ クラス群は BREW が用意している図形構造体をクラス化して、オブジェクト指向の メリットが生かせるように様々な操作メソッドを追加したものです。

たとえば、AEERect 構造体を使用すると、四角形の移動や縮小などの演算はプログラマが直接 行わなくてはなりません。一方シェイプ クラス群の SFURect クラスを使用すると、 AEERect と互換性を保ちつつ、オブジェクト指向のプログラミングができます。

9.1.2. シェイプ一覧

SophiaFramework では以下の種類のシェイプを使用できます。

シェイプ クラス BREW の構造体 説明
SFUArc AEEArc 円弧を表します
SFUCircle AEECircle 円を表します
SFUClip AEEClip クリッピング領域を表します
SFUEllipse AEEEllipse 楕円を表します
SFULine AEELine 線を表します
SFUMargin --- マージンを表します
SFUPie AEEPie 扇型を表します
SFUPoint AEEPoint 座標を表します
SFUPolygon AEEPolygon 閉じた多角形を表します
SFUPolyline AEEPolyline 開いた多角形を表します
SFURect AEERect 四角形を表します
SFUSize --- サイズを表します
SFUTriangle AEETriangle 三角形を表します

9.1.3. シェイプの使用例

SophiaFramework を使用した図形の演算の例を示します。 たとえば、四角形の移動は以下のように記述できます。

SFURect r(0,0,10,10);

r += SFUPoint(10,10);
// もしくは
r.Offset(10,10);

また、四角形の縮小や比較はそれぞれ以下のように記述できます。

SFURect r(0,0,10,10);

r.Inset(1,1);
SFURect r1(0,0,10,10);
SFURect r2(10,10,10,10);

if (r1 != r2) {
  // もし r1 が r2 と等しいなら...
}
// もしくは
if (r1.Equal(r2)) {
  // もし r1 が r2 と等しいなら...
}

四角形の AND と OR は以下のように記述します。

SFURect r1(10,10,40,40);
SFURect r2(30,30,50,50);

// AND
r1 &= r2;
// もしくは
r1.Sect(r2);

// OR
r1 |= r2;
// もしくは
r1.Union(r2);

四角形が四角形の中に包含されるかや、座標が四角形の中に包含されるかなども 簡単に判定することができます。

SFURect  r1(10,10,40,40);
SFURect  r2(20,20,20,20);
SFUPoint p1(30,30);

// 四角形と四角形
if (r2.Inside(r1)) {
  // もし r2 が r1 に含まれていたら...
}

// 座標と四角形
if (p1.Inside(r2)) {
  // もし p1 が r2 に含まれていたら...
}

四角形の上辺や下辺などを簡単に取得することも出来ます。

SFURect r(10,20,50,40);
SFULine l;

// 四角形の上辺を取得します
l = r.LineT();

// 四角形の下辺を取得します
l = r.LineB();

SFUPoligon や SFUPolyline を使用すると、座標要素の管理を これらのクラスに任せることが出来ます。

SFUPolygon p;

// 座標要素の追加
p.Append(SFUPoint(0,0));
p.Append(SFUPoint(50,60));
p.Append(SFUPoint(30,20));

// 座標要素の挿入
p.Insert(1,SFUPoint(80,80));

// 移動
p.Offset(SFUPoint(100,100));

// 座標要素の破棄
p.Remove(2);