パス (GDI+)
パスは、直線、四角形、およびシンプルな曲線を組み合わせることによって形成されます。 ベクター グラフィックスの概要から、次の基本的な構成要素が図の描画に最も役立つことが証明されていることを思い出してください。
- 路線
- 四角形
- 楕円
- 円弧
- 多角形
- カーディナル スプライン
- ベジエ スプライン
Windows GDI+では、GraphicsPath オブジェクトを使用すると、これらの構成要素のシーケンスを 1 つのユニットに収集できます。 その後、線、四角形、多角形、曲線のシーケンス全体を、Graphics クラスの Graphics::D rawPath メソッドを 1 回呼び出して描画できます。 次の図に、直線、円弧、ベジエ スプライン、およびカーディナル スプラインを組み合わせて作成したパスを示します。
GraphicsPath クラスには、描画する項目のシーケンスを作成するための次のメソッドが用意されています:AddLine、AddRectangle、AddEllipse、AddArc、AddPolygon、AddCurve (カーディナル スプラインの場合)、AddBezier。 これらの各メソッドはオーバーロードされています。つまり、各メソッドには、パラメーター リストが異なる複数のバリエーションがあります。 たとえば、AddLine メソッドのバリエーションの 1 つは 4 つの整数を受け取り、もう 1 つのバリエーションの AddLine メソッドは 2 つの Point オブジェクトを受け取ります。
線、四角形、およびベジエ スプラインをパスに追加するメソッドには、複数の項目を 1 回の呼び出しでパスに追加する複数のコンパニオン メソッドがあります。 AddLines、 AddRectangles、 AddBeziers です。 また、 AddCurve メソッドには、パスに閉じた曲線を追加するコンパニオン メソッド AddClosedCurve があります。
パスを描画するには、 Graphics オブジェクト、 Pen オブジェクト、 GraphicsPath オブジェクトが必要です。 Graphics オブジェクトは Graphics::D rawPath メソッドを提供し、Pen オブジェクトはパスの属性 (線の幅や色など) を格納します。 GraphicsPath オブジェクトには、パスを構成する一連の線、四角形、および曲線が格納されます。 Pen オブジェクトと GraphicsPath オブジェクトのアドレスは、Graphics::D rawPath メソッドに引数として渡されます。 次の例では、線、楕円、およびベジエ スプラインで構成されるパスを描画します。
myGraphicsPath.AddLine(0, 0, 30, 20);
myGraphicsPath.AddEllipse(20, 20, 20, 40);
myGraphicsPath.AddBezier(30, 60, 70, 60, 50, 30, 100, 10);
myGraphics.DrawPath(&myPen, &myGraphicsPath);
次の図に、そのパスを示します。
直線、四角形、および曲線をパスに追加することに加えて、パスにパスを追加することもできます。 これにより、既存のパスを組み合わせて、大規模で複雑なパスを形成することができます。 次のコードは 、graphicsPath1 と graphicsPath2 を myGraphicsPath に追加します。 GraphicsPath::AddPath メソッドの 2 番目のパラメーターは、追加されたパスが既存のパスに接続されているかどうかを指定します。
myGraphicsPath.AddPath(&graphicsPath1, FALSE);
myGraphicsPath.AddPath(&graphicsPath2, TRUE);
他にもパスに追加できる項目が 2 つあります。文字列とパイです。 パイは楕円の内部の一部です。 次の例では、円弧、カーディナル スプライン、文字列、円グラフからパスを作成します。
myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180);
myGraphicsPath.AddCurve(myPointArray, 3);
myGraphicsPath.AddString(L"a string in a path", 18, &myFontFamily,
0, 24, myPointF, &myStringFormat);
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);
myGraphics.DrawPath(&myPen, &myGraphicsPath);
次の図に、そのパスを示します。 パスをつなげる必要がないことに注意してください。円弧、カーディナル スプライン、文字列、およびパイは分離されています。