- コントロールには、背景、グリッド、基準軸、基準原点が存在し、それぞれに色や大きさを設定することができる。
- 描画中のデータはファイルへの保存/読み込みが可能。ファイルはJSONフォーマットを用いる。
- マウスを用いて、描画内容のズーム/パンを行うことが可能。
- 描画内容は、画像ファイルへの保存やクリップボードへのコピーが可能。
- コントロール座標系とキャンバス座標系の相互変換が可能。マウスカーソル位置から座標値を算出する際などに利用できる。
- 内部では『コントロール(1)-(N)レイヤー(1)-(n)形状』の関係でデータが管理される。
- 形状を登録するためのレイヤーの追加/削除が可能。
- レイヤーは 0 から始まる番号で管理され、描画は昇順に行われる。(番号が大きいレイヤーが上に重なって描画される)
- レイヤーは描画可否の設定が可能。
- レイヤーは最低でも1枚存在する。
- 形状の描画にはペンとブラシが用いられる。
- ペンは輪郭線を描画する際に用いられる。色、太さ、スタイルの情報が存在する。
- ブラシは塗りつぶしを描画する際に用いられる。色の情報が存在する。
- レイヤーに形状を登録する際に設定されているペンとブラシが、その形状の描画に使用される。
- 以下の形状を登録可能。
- 点
- 直線
- 無限直線
- 円弧
- 円(塗りつぶし可)
- 多角形(塗りつぶし可)
- 扇形(塗りつぶし可)
- 追加軸
- 追加原点
| 用語 | 説明 |
|---|---|
| コントロール座標系 | ウィンドウ(フォーム)のDrawShapeコントロール上の座標系のこと。単位はPixel。座標の+方向はXが右、Yが下。 |
| キャンバス座標系 | DrawShpae内部のコンテンツの座標系のこと。実数値。座標の+方向はXが右、Yが上。 |
キャンバスの背景色(RGB)を取得/設定する。
- C++
COLORREF GetBackColor();
void SetBackColor(COLORREF propVal);- C#
public Color CtlBackColor { get; set; }グリッドの背景色(RGB)を取得/設定する。
- C++
COLORREF GetGridColor();
void SetGridColor(COLORREF propVal);- C#
public Color GridColor { get; set; }グリッドのサイズ(キャンバス座標系)を取得/設定する。
- C++
double GetGridSize();
void SetGridSize(double propVal);- C#
public double GridSize { get; set; }基準原点の背景色(RGB)を取得/設定する。
- C++
COLORREF GetOriginColor();
void SetOriginColor(COLORREF propVal);- C#
public Color OriginColor { get; set; }基準原点のサイズ(コントロール座標系)を取得/設定する。
- C++
double GetOriginSize();
void SetOriginSize(double propVal);- C#
public double OriginSize { get; set; }基準軸の背景色(RGB)を取得/設定する。
- C++
COLORREF GetAxisColor();
void SetAxisColor(COLORREF propVal);- C#
public Color AxisColor { get; set; }基準軸のスケール(キャンバス座標系)を取得/設定する。
- C++
double GetAxisScale();
void SetAxisScale(double propVal);- C#
public double AxisScale { get; set; }グリッドの描画可否を取得/設定する。
- C++
BOOL GetIsDrawGrid();
void SetIsDrawGrid(BOOL propVal);- C#
public bool IsDrawGrid { get; set; }原点の描画可否を取得/設定する。
- C++
BOOL GetIsDrawOrigin();
void SetIsDrawOrigin(BOOL propVal);- C#
public bool IsDrawOrigin { get; set; }基準原点と追加原点の両方に適用される。
軸の描画可否を取得/設定する。
- C++
BOOL GetIsDrawAxis();
void SetIsDrawAxis(BOOL propVal);- C#
public bool IsDrawAxis { get; set; }基準軸と追加軸の両方に適用される。
形状への矢印の描画可否を取得/設定する。
- C++
BOOL GetIsDrawArrow();
void SetIsDrawArrow(BOOL propVal);- C#
public bool IsDrawArrow { get; set; }矢印の描画は以下の形状にのみ適用される。
- 直線
- 円弧
- 多角形
円の中心点の描画可否を取得/設定する。
- C++
BOOL GetIsDrawCenter();
void SetIsDrawCenter(BOOL propVal);- C#
public bool IsDrawCenter { get; set; }中心点の描画は以下の形状にのみ適用される。
- 円弧
- 円
- 扇形 中心点は三角点で描画する。
カレントレイヤーの番号を取得/設定する。
- C++
long GetCurrentLayerNo();
void SetCurrentLayerNo(long propVal);- C#
public long CurrentLayerNo { get; set; }レイヤー番号の有効範囲は、0 ~ (レイヤー枚数 - 1)。
現在のレイヤー枚数を取得する。
- C++
long GetLayerCount();- C#
public long LayerCount { get; private set; }カレントのペンの色(RGB)を取得/設定する。
- C++
COLORREF GetCurrentPenColor();
void SetCurrentPenColor(COLORREF propVal);- C#
public Color CurrentPenColor { get; set; }Win32PIの LOGPEN 構造体の仕様に従う。
デフォルトは白色。
カレントのペンの太さを取得/設定する。
- C++
long GetCurrentPenWidth();
void SetCurrentPenWidth(long propVal);- C#
public long CurrentPenWidth { get; set; }Win32PIの LOGPEN 構造体の仕様に従う。
デフォルトは 1px。
太さを 2px 以上に設定できるのは、ペンのスタイルが PS_SOLID PS_INSIDERFRAME のいずれかの場合のみである。
カレントのペンのスタイルを取得/設定する。
- C++
long GetCurrentPenStyle();
void SetCurrentPenStyle(long propVal);- C#
public long CurrentPenStyle { get; set; }Win32APIの LOGPEN 構造体の仕様に従う。
以下のいずれかの値を設定可能。
| 定数 | 値 | 説明 |
|---|---|---|
PS_SOLID |
0 | 実線 |
PS_DASH |
1 | 破線 |
PS_DOT |
2 | 点線 |
PS_DASHDOT |
3 | 一点鎖線 |
PS_DASHDOTDOT |
4 | 二点鎖線 |
PS_NULL |
5 | 描画しない |
PS_INSIDEFRAME |
6 | 実線 |
デフォルトは PS_SOLID 。
カレントのブラシの色(RGB)を取得/設定する。
- C++
COLORREF GetCurrentBrushColor();
void SetCurrentBrushColor(COLORREF propVal);- C#
public Color CurrentBrushColor { get; set; }Win32APIの LOGBRUSH 構造体の仕様に従う。
デフォルトは白色。
マウスドラッグによるパン(描画内容の上下左右移動)の実行可否を取得/設定する。
- C++
BOOL GetCanMouseDragPan();
void SetCanMouseDragPan(BOOL propVal);- C#
public bool CanMouseDragPan { get; set; }マウスホイールによるズーム(描画内容の拡大縮小)の実行可否を取得/設定する。
- C++
BOOL GetCanMouseWheelZoom();
void SetCanMouseWheelZoom(BOOL propVal);- C#
public bool CanMouseWheelZoom { get; set; }全レイヤーの全形状を再描画する。
- C++
void Redraw();- C#
public void Redraw();DrawShapeコントロールでは、プロパティやメソッドにより内部状態の変更しても自動的に再描画が行われない。これは、複数の形状を一度に登録する場合に毎回再描画されてしまうと非効率となるためである。そのような場合は、最後に本メソッドを一度だけ呼び出す必要がある。
DrawShapeコントロールを初期状態に戻す。
- C++
void Clear();- C#
public void Clear();以下を実行する。
- 全レイヤーを削除する。
- カレントのペンとブラシをデフォルト状態に戻す。
現在の描画内容を画像ファイルに保存する。
- C++
BOOL SaveImage(const char* filePath);- C#
public bool SaveImage(string filePath);- filePath
- ファイルパス。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
画像サイズはDrawShapeコントロールの現在のサイズとなる。
ファイルパスに指定した拡張子によって画像フォーマットが自動的に判断される。指定可能な拡張子は BMP/PNG/JPEG/GIF のいずれか。
既に同名のファイルが存在した場合は上書きする。
現在の描画内容をクリップボードにコピーする。
- C++
BOOL CopyImage();- C#
public bool CopyImage();成功した場合は 1 または true 。失敗した場合は 0 または false 。
画像サイズはDrawShapeコントロールの現在のサイズとなる。
登録されているレイヤーおよび形状をファイルに保存する。
- C++
BOOL SaveContents(const char* filePath);- C#
public bool SaveContents(string filePath);- filePath
- ファイルパス。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
JSONフォーマットを使用する。
ファイルからレイヤーおよび形状を読み込んで登録する。
- C++
BOOL LoadContents(const char* filePath);- C#
public bool LoadContents(string filePath);- filePath
- ファイルパス。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
JSONフォーマットを使用する。
読み込み前に登録されていたレイヤーおよび形状は全て削除される。
座標値をキャンバス座標系からコントロール座標系へ変換する。
- C++
void CanvasToControl(double canvasX, double canvasY, long* pCtrlX, long* pCtrlY);- C#
public void CanvasToControl(double canvasX, double canvasY, ref long pCtrlX, ref long pCtrlY);- canvasX
- X座標(キャンバス座標系)。
- canvasY
- Y座標(キャンバス座標系)。
- pCtrlX(出力)
- X座標(コントロール座標系)。
- pCtrlY(出力)
- Y座標(コントロール座標系)。
現在のパン/ズーム状態に応じた変換が行われる。
座標値をコントロール座標系からキャンバス座標系へ変換する。
- C++
void ControlToCanvas(long ctrlX, long ctrlY, double* pCanvasX, double* pCanvasY);- C#
public void ControlToCanvas(long ctrlX, long ctrlY, ref double pCanvasX, ref double pCanvasY);- ctrlX
- X座標(コントロール座標系)。
- ctrlY
- Y座標(コントロール座標系)。
- pCanvasX(出力)
- X座標(キャンバス座標系)。
- pCanvasY(出力)
- Y座標(キャンバス座標系)。
現在のパン/ズーム状態に応じた変換が行われる。
例として、現在のカーソル位置(コントロール座標系)をキャンバス座標系に変換するといった用途に利用可能。
新しいレイヤーを挿入する。
- C++
BOOL InsertLayer(long insertNo);- C#
public bool InsertLayer(long insertNo);- insertNo
- 挿入位置。0 ~ 挿入前のレイヤー枚数、または -1 を指定可能。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
挿入位置の番号に新しいレイヤーを挿入する。その位置以降にレイヤーが存在していた場合、それらの番号は 1 加算される。
挿入位置に -1 を指定した場合は、末尾への挿入となる。(挿入前のレイヤー枚数を指定した場合と同様)
挿入に成功した場合、挿入したレイヤーがカレントレイヤーとなる。
カレントレイヤーに登録されている全形状を削除する。
- C++
void ClearCurrentLayer();- C#
public void ClearCurrentLayer();カレントレイヤーを削除する。
- C++
long DeleteCurrentLayer();- C#
public long DeleteCurrentLayer();削除後のレイヤー枚数。
末尾のレイヤーを削除した場合、1つ前のレイヤーがカレントレイヤーとなる。
末尾以外のレイヤーを削除した場合、レイヤー番号は前詰めされ、1つ次のレイヤーが新たなカレントレイヤーとなる。
削除前にレイヤーが1枚しか存在しなかった場合は、削除後に自動的に新しいレイヤーが1枚挿入され、それがカレントレイヤーとなる。
カレントレイヤーの描画可否を設定する。
- C++
void SetEnableCurrentLayer(BOOL enable);- C#
public void SetEnableCurrentLayer(bool enable);- enable
- カレントレイヤーの描画可否。描画を許可する場合は true 、描画を禁止する場合は false 。
カレントレイヤーの描画可否を取得する。
- C++
BOOL GetEnableCurrentLayer();- C#
public bool GetEnableCurrentLayer();カレントレイヤーの描画可否。描画が許可されている場合は true 、描画が禁止されている場合は false 。
描画内容をズーム(拡大縮小)する。
- C++
BOOL Zoom(double coef, long ctrlBaseX, long ctrlBaseY);- C#
public bool Zoom(double coef, long ctrlBaseX, long ctrlBaseY);- coef
- 拡大縮小の倍率。1.0 より大きい値で拡大、 1.0 より小さい値で縮小となる。
- ctrlBaseX
- 拡大縮小を行う基準とするX座標(コントロール座標系)。
- ctrlBaseY
- 拡大縮小を行う基準とするY座標(コントロール座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
描画内容をパン(上下左右移動)する。
- C++
BOOL Pan(long ctrlMoveX, long ctrlMoveY);- C#
public bool Pan(long ctrlMoveX, long ctrlMoveY);- ctrlMoveX
- X方向の移動量(コントロール座標系)。
- ctrlMoveY
- Y方向の移動量(コントロール座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
描画対象の形状全てが描画領域に収まるように自動的にズーム・パンを行う。
- C++
void Fit(double shapeOccupancy);- C#
public void Fit(double shapeOccupancy);- shapeOccupancy
- フィットしたときに形状が描画領域全体を占める割合。
shapeOccupancy で指定する割合は、上下方向と左右方向のうちフィットしたときに余白がより小さくなる方に適用される。
もう一方の方向については、形状が描画領域を占める割合がより小さくなる可能性がある。
カレントレイヤーに直線を追加する。
- C++
BOOL AddLine(double sx, double sy, double ex, double ey);- C#
public bool AddLine(double sx, double sy, double ex, double ey);- sx
- 始点X(キャンバス座標系)。
- sy
- 始点Y(キャンバス座標系)。
- ex
- 終点X(キャンバス座標系)。
- ey
- 終点Y(キャンバス座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
任意の2点を指定する方法で、カレントレイヤーに無限直線を追加する。
- C++
BOOL AddInfiniteLine2Point(double sx, double sy, double ex, double ey);- C#
public bool AddInfiniteLine2Point(double sx, double sy, double ex, double ey);- sx
- 始点X(キャンバス座標系)。
- sy
- 始点Y(キャンバス座標系)。
- ex
- 終点X(キャンバス座標系)。
- ey
- 終点Y(キャンバス座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
任意の1点と角度を指定する方法で、カレントレイヤーに無限直線を追加する。
- C++
BOOL AddInfiniteLine1PointAngle(double x, double y, double angle);- C#
public bool AddInfiniteLine1PointAngle(double x, double y, double angle);- x
- 点X(キャンバス座標系)。
- y
- 点Y(キャンバス座標系)。
- angle
- 角度(ラジアン)
成功した場合は 1 または true 。失敗した場合は 0 または false 。
カレントレイヤーに点を追加する。
- C++
BOOL AddPoint(double x, double y, long type);- C#
public bool AddPoint(double x, double y, long type);- x
- 点X(キャンバス座標系)。
- y
- 点Y(キャンバス座標系)。
- type
- 点種。以下のいずれかの整数値とする。範囲外の値が与えられた場合であっても失敗しないが動作は未定義となる。
値 点種 0 通常の点(・) 1 大きい点(●) 2 三角点(△)
- 点種。以下のいずれかの整数値とする。範囲外の値が与えられた場合であっても失敗しないが動作は未定義となる。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
カレントレイヤーに円弧を追加する。
- C++
BOOL AddArc(double sx, double sy, double ex, double ey, double cx, double cy, BOOL left);- C#
public bool AddArc(double sx, double sy, double ex, double ey, double cx, double cy, bool left);- sx
- 始点X(キャンバス座標系)。
- sy
- 始点Y(キャンバス座標系)。
- ex
- 終点X(キャンバス座標系)。
- ey
- 終点Y(キャンバス座標系)。
- cx
- 中心点X(キャンバス座標系)。
- cy
- 中心点Y(キャンバス座標系)。
- left
- 円弧方向。 true の場合は左方向(反時計回り)、 false の場合は右方向(時計回り)の円弧となる。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
指定した座標が円弧の構成点として幾何学的に矛盾する場合は失敗する。
カレントレイヤーに円を追加する。
- C++
BOOL AddCircle(double cx, double cy, double radius, BOOL fill);- C#
public bool AddCircle(double cx, double cy, double radius, bool fill);- cx
- 中心点X(キャンバス座標系)。
- cy
- 中心点Y(キャンバス座標系)。
- radius
- 半径(キャンバス座標系)。
- fill
- 塗りつぶし有無。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
カレントレイヤーに円を追加する。
- C++
BOOL AddPolygon(SAFEARRAY* pointCoords, long pointsCount, BOOL fill);- C#
public bool AddPolygon(Array pointCoords, long pointsCount, bool fill);- pointCoords
- 点群配列(キャンバス座標系)。点1-X→点1-Y→点2-X→・・・→点n-Y の順にdouble型の値を格納する。
- pointsCount
- pointCoords で入力する点の数。XY座標のペアで1つと数えることに注意。
- fill
- 塗りつぶし有無。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
pointCoords にdouble型以外の値を格納した場合は失敗する。
pointsCount に0以下の値を渡した場合は失敗する。
カレントレイヤーに扇形を追加する。
- C++
BOOL AddSector(double sx, double sy, double ex, double ey, double cx, double cy, double innerRadius, BOOL left, BOOL fill);- C#
public bool AddSector(double sx, double sy, double ex, double ey, double cx, double cy, double innerRadius, bool left, bool fill);- sx
- 扇形の外側円弧の始点X(キャンバス座標系)。
- sy
- 扇形の外側円弧の始点Y(キャンバス座標系)。
- ex
- 扇形の外側円弧の終点X(キャンバス座標系)。
- ey
- 扇形の外側円弧の終点Y(キャンバス座標系)。
- cx
- 扇形の中心点X(キャンバス座標系)。
- cy
- 扇形の中心点Y(キャンバス座標系)。
- innerRadius
- 扇形の内側円弧の半径(キャンバス座標系)。
- left
- 円弧方向。 true の場合は左方向(反時計回り)、 false の場合は右方向(時計回り)の円弧となる。
- fill
- 塗りつぶし有無。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
指定した座標が扇形の構成点として幾何学的に矛盾する場合は失敗する。
innnerRadius に 0 を渡した場合は、内側が埋められた扇形となる。0未満の値の場合は失敗する。
カレントレイヤーに原点を追加する。
- C++
BOOL AddOrigin(double ox, double oy);- C#
public bool AddOrigin(double ox, double oy);- ox
- 原点を追加する座標X(キャンバス座標系)。
- oy
- 原点を追加する座標Y(キャンバス座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
基準原点とは別に原点を追加したい場合に使用する。
本メソッドで追加した原点についても、 IsDrawOrigin プロパティによって描画可否が制御される。
描画にはペンのみが使用され、ブラシは使用されない。
カレントレイヤーに軸を追加する。
- C++
BOOL AddAxis(double ox, double oy);- C#
public bool AddAxis(double ox, double oy);- ox
- 軸を追加する座標X(キャンバス座標系)。
- oy
- 軸を追加する座標Y(キャンバス座標系)。
成功した場合は 1 または true 。失敗した場合は 0 または false 。
基準軸とは別に軸を追加したい場合に使用する。
本メソッドで追加した軸についても、 IsDrawAxis プロパティによって描画可否が制御される。
描画にはペンのみが使用され、ブラシは使用されない。
DrawShapeコントロール上でのマウスカーソル移動イベント。
- C++
void OnCursorMove(long ctrlX, long ctrlY, double canvasX, double canvasY);- C#
public class _DDrawShapeEvents_CursorMoveEvent
{
public int ctrlX;
public int ctrlY;
public double canvasX;
public double canvasY;
public _DDrawShapeEvents_CursorMoveEvent(int ctrlX, int ctrlY, double canvasX, double canvasY);
}
public delegate void _DDrawShapeEvents_CursorMoveEventHandler(object sender, _DDrawShapeEvents_CursorMoveEvent e);
public event _DDrawShapeEvents_CursorMoveEventHandler CursorMove;- ctrlX
- マウスカーソル位置X(コントロール座標系)。
- ctrlY
- マウスカーソル位置Y(コントロール座標系)。
- canvasX
- マウスカーソル位置X(キャンバス座標系)。
- canvasY
- マウスカーソル位置Y(キャンバス座標系)。
(ctrlX, ctrlY) は、Win32APIでマウスカーソル位置を取得してDrawShapeコントロールのクライアント座標系に変換した値と一致する。
(canvasX, canvasY) は、 (ctrlX, ctrlY) を ControlToCanvas メソッドで変換した値と一致する。
DrawShapeコントロール上でのマウス左クリックイベント。
- C++
void OnLeftClick(long ctrlX, long ctrlY, double canvasX, double canvasY);- C#
public class _DDrawShapeEvents_LeftClickEvent
{
public int ctrlX;
public int ctrlY;
public double canvasX;
public double canvasY;
public _DDrawShapeEvents_LeftClickEvent(int ctrlX, int ctrlY, double canvasX, double canvasY);
}
public delegate void _DDrawShapeEvents_LeftClickEventHandler(object sender, _DDrawShapeEvents_LeftClickEvent e);
public event _DDrawShapeEvents_LeftClickEventHandler LeftClick;- ctrlX
- マウスカーソル位置X(コントロール座標系)。
- ctrlY
- マウスカーソル位置Y(コントロール座標系)。
- canvasX
- マウスカーソル位置X(キャンバス座標系)。
- canvasY
- マウスカーソル位置Y(キャンバス座標系)。
本イベントは、マウス左クリックのDown→Upが行われた際に発行する。ドラッグを行った場合でもイベント発行することに注意。
(ctrlX, ctrlY) は、Win32APIでマウスカーソル位置を取得してDrawShapeコントロールのクライアント座標系に変換した値と一致する。
(canvasX, canvasY) は、 (ctrlX, ctrlY) を ControlToCanvas メソッドで変換した値と一致する。