|
DelphiXE3 [FMX] 楕円弧描画 2014/05/21 |
楕円弧描画(DrawArc)は、キャンバス(Canvas)に 円弧・楕円弧を描画する機能です。
以下、ヘルプより
TCanvas.
DrawArc |
procedure DrawArc(const Center, Radius: TPointF;
StartAngle, SweepAngle: Single;
const AOpacity: Single);
procedure DrawArc(const Center, Radius: TPointF;
StartAngle, SweepAngle: Single;
const AOpacity: Single; const ABrush: TStrokeBrush); |
TCanvas 上の楕円形の曲線の一部として、弧を描画します。
弧は パス として作成され、楕円形の曲線の一部を保持します。 DrawArc は、このパスを現在の TCanvas 上に、現在の Stroke パラメータで描画します。
Center パラメータは、楕円の中心を示します。
Radius パラメータの座標は、親の楕円の半短径を示します。
・Radius.x は、x 軸の半短径を定義します。
・Radius.y は、y 軸の半短径を定義します。
StartAngle は、X 軸の直線から、楕円の中心点(Center)を通り、孤の開始点で楕円と交差する直線まで、時計回りに計測した角度を(度数で)示します。
SweepAngle は、StartAngle パラメータから、楕円の中心点(Center)を通り、孤の終了点で楕円と交差する直線まで、時計回りに計測した角度を(度数で)示します。
AOpacity パラメータは、Stroke 色の透明度を示します。
描画ペンをカスタマイズするには、Stroke、StrokeThickness、StrokeCap、StrokeDash、 および StrokeJoin の各プロパティを使用します。 |
[Shapes]内のペイントボックス(PaintBox)を配置し、ClipChildernプロパティを True にしておきます。uses節に「UIConsts」を追記します。
OnPaintイベントハンドラを下記のようにしてみます。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawArc(PointF(70,70),PointF(60,50),30,210,1.0);
end;
end; |
保存・ビルド(コンパイル)・実行をすると下図のようになります。
中心点(70,70)、X軸半径=60、Y軸半径=50、開始角度=30°、中心角度(円弧角度)=210°、透過率 1.0 (完全不透明状態)で、青色の楕円弧を描画します。
角度は、楕円の場合、楕円を正規化して円にした場合での角度です。つまり、数学的な式では、
楕円上点X=中心X+X軸半径×Cos(角度)
楕円上点Y=中心Y+Y軸半径×Sin(角度)
で利用する際の角度です。
キャンバス上での描画の場合は、Y軸プラス方向は下側、角度は時計回りになりますので、描画の際の式は
楕円上点X=中心X+X軸半径×Cos(−角度)
楕円上点Y=中心Y−Y軸半径×Sin(−角度)
となります。
(※式での角度値は、°ではなく、ラジアン[rad] になります)
楕円弧は、直前までに指定した Strokeブラシの状態で描画します。
Stroke.Kind でブラシの種類(色、ビットマップ、グラデーション)、
Stroke.Thickness で線幅、
Stroke.Dash で線種、
Stroke.Cap で線端状態、
を指定します。
例えば下記のようにすると、
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkGradient ;
Stroke.Gradient.Color := claRed ;
Stroke.Gradient.Color1 := claYellow ;
Stroke.Thickness := 10 ;
Stroke.Dash := TStrokeDash.sdDash ;
Stroke.Cap := TStrokeCap.scRound ;
DrawArc(PointF(75,75),PointF(70,40),30,250,1.0);
end;
end; |
下図のように描画されます。
第1引数 Center は、中心点座標を指定します。座標はマイナス値でも構いません。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawArc(PointF(75,75),PointF(70,40),30,250,1.0);
Stroke.Color := claRed ;
DrawArc(PointF(-10,-10),PointF(70,40),30,250,1.0);
end;
end; |
とすると下記のようになります。
見える部分だけが描画されます
第2引数 Radius で楕円弧の半径を指定します。
Radius.X で X軸半径の指定、
Radius.Y で Y軸半径の指定、
となります。
マイナス値を指定するとどうなるかを確認してみると、反転してしまうようです。ややこしいので、必ずプラス値で指定、と決めておいた方がいいと思われます。
Radius=PointF(60,50) |
Radius=PointF(-60,50) |
Radius=PointF(60,-50) |
Radius=PointF(-60,-50) |
第5引数 AOpacity 、透過率を指定する事が出来ます。
0.0(完全透明)〜1.0(完全不透明)の範囲内で指定します。
with Canvas do begin
Clear(claWhite);
Stroke.Thickness := 20 ;
Stroke.Kind := TBrushKind.bkSolid ;
Stroke.Color := claBlue ;
DrawArc(PointF(75,75),PointF(60,40),30,210,0.5);
Stroke.Color := claRed ;
DrawArc(PointF(75,75),PointF(40,60),30,210,0.5);
end; |
とした場合は、下図のようになります。
第6引数 ABrush でブラシを指定する記述方法もあります。
この場合は、直前で指定した Canvas の Strokeプロパティ内容ではなく、この引数の内容で楕円弧描画が行われます。
例えば、下記のように記述すると
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
var
br : TStrokeBrush ;
begin
br := TStrokeBrush.Create(TBrushKind.bkSolid,claBlue) ;
br.Thickness := 10 ;
with Canvas do begin
Clear(claWhite);
Stroke.Kind := TBrushKind.bkGradient ;
Stroke.Gradient.Color := claRed ;
Stroke.Gradient.Color1 := claYellow ;
Stroke.Thickness := 20 ;
Stroke.Dash := TStrokeDash.sdDash ;
Stroke.Cap := TStrokeCap.scRound ;
DrawArc(PointF(75,75),PointF(40,60),30,210,1.0,br);
DrawArc(PointF(75,75),PointF(60,40),30,210,0.5);
end;
br.Free ;
end; |
下図のように描画されます。
なお、キャンバス Canvas の Fill プロパティを指定しても、塗り潰しは行われません。塗り潰しを行いたい場合は、塗り潰しの部分を別途、DrawArc メソッドを実行する直前に FillArc メソッドを利用して描画させて下さい。弓形部分の描画が行われます。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/05/20
2014/05/21
▼2014/05/22
シェアウェア
Script!World
データベース
|