cAlgo API リファレンス

Line, PolyLine, Polygon【cAlgoAPI】

2021年3月13日

線と多角形

線や多角形を描くことができます。うまく使えば簡単なアイコンなどはプログラム内で作成できてしまいます。

 

Lineクラス

1本の線です。

public class Line : Shape

 

プロパティ
(double) X1 {get; set;}

始点のX座標を取得、設定します。

(double) X2 {get; set;}

終点のX座標を取得、設定します。

(double) Y1 {get; set;}

始点のY座標を取得、設定します。

(double) Y2 {get; set;}

終点のY座標を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineCap参照。

 

 

Polylineクラス

複数のつながった線です。

public class Polyine : Shape

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineJoin参照

 

 

Polygonクラス

多角形です。Polylineの始点と終点をつなげただけのものです。

public class Polygon : Shape

プロパティもPolylineと全く同じです。

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記FillRule参照。

 

 

Pointクラス

PolylineとPolygonの座標を表すためのオブジェクトです。

public class Point : Object

 

コンストラクタ
Point(double x, double y)

x座標とy座標を指定してオブジェクトを作れます。

 

プロパティ
(double) X {get; set;}

x座標を取得、設定します。

(double) Y {get; set;}

y座標を取得、設定します。

 

 

関連する列挙型

PenLineCap列挙型

線や点線の終端形を表します。線の端にキャップをかぶせるイメージです。ぶっとい線じゃないと違いがわかりません

Flat 終端なし。デフォルト。
Square 四角
Round
Triangle 三角

 

サンプルコード

Func<PenLineCap, Line> line = cap => 
    new Line {
        StrokeColor = Color.White,
        StrokeThickness = 30,
        X1 = 20,
        Y1 = 10,
        X2 = 80,
        Y2 = 10,
        StrokeStartLineCap = cap,
        StrokeEndLineCap = cap,
        Margin = 10,
    };
var flat = line(PenLineCap.Flat);
var square = line(PenLineCap.Square);
var round = line(PenLineCap.Round);
var triangle = line(PenLineCap.Triangle);

var panel = new StackPanel();
panel.AddChild(flat);
panel.AddChild(square);
panel.AddChild(round);
panel.AddChild(triangle);
Chart.AddControl(panel);

上から順にFlat,Square,Round,Triangleです。

FlatとSquareは見た目の形は同じですが、Squareは四角いキャップをかぶせてるので線が少し長く表示されます。

 

 

PenLineJoin列挙型

2本の線の接合部分の形を表します。これもぶっとい線じゃないと違いがわかりません

Miter 普通。デフォルト。
Bevel 斜め切り落とし。
Round 丸。

 

サンプルコード

Func<PenLineJoin, Polyline> line = join =>
    new Polyline {
        StrokeColor = Color.White,
        Points = new Point[] {new Point(50, 10), new Point(10, 10), new Point(10,50)},
        StrokeThickness = 30,
        StrokeLineJoin = join,
        Margin = 10,
    };
var miter = line(PenLineJoin.Miter);
var bevel = line(PenLineJoin.Bevel);
var round = line(PenLineJoin.Round);
var panel = new WrapPanel();
panel.AddChild(miter);
panel.AddChild(bevel);
panel.AddChild(round);
Chart.AddControl(panel);

左からMiter,Bevel,Roundです。

 

 

FillRule列挙型

polylineやpolygonの塗りつぶし方式を表します。polylineも閉じた線とみなして判定します。

EvenOdd 領域内の任意の点から無限に伸びた光線を跨いだ線の数を数え、それが奇数であれば内側とみなし塗りつぶします。偶数であれば塗りつぶしません。
Nonzero 領域内の任意の点から無限に伸びた光線を左から右に跨いだ線の数と右から左に跨いだ線の数が異なる場合、内側とみなしぬりつぶします。

説明は私のざっくりとした意訳です。わかりにくくて申し訳ないですが、丁寧に訳してもたぶん同じくらいわかりにくいです。

cAlgo特有のものではないのでちゃんと知りたい場合はMSDNのFillRuleの説明探した方が早いかもしれません。

 

サンプルコード

Func<FillRule, Polygon> polygon = rule => 
    new Polygon {
    Points = new Point[] { new Point(0, 20), new Point(40, 20), new Point(10, 50), new Point(20, 0), new Point(30, 50) },
    StrokeColor = Color.Red,
    FillColor = Color.Yellow,
    FillRule = rule,
    Margin = 10,
    };

var evenodd = polygon(FillRule.EvenOdd);
var nonzero = polygon(FillRule.Nonzero);
var panel = new WrapPanel();
panel.AddChild(evenodd);
panel.AddChild(nonzero);
Chart.AddControl(panel);

 

左がEvenOdd、右がNonzeroです。

よくわからなければ中身全部塗りつぶしたければNonzeroと思ってもらえれば(cAlgoでは)だいたい大丈夫です。

 
 
 
 

-cAlgo API リファレンス

© 2024 cTrader's Life Powered by AFFINGER5