C#による「自由曲線」サンプル
マウスの移動軌跡を基にして、自由曲線を作図するカスタマイズサンプルをご紹介します。ここではツールバーおよびイベントマネージャを利用して機能を実現しています。
※以下のサンプルソースは、MicroGDS V10用となります。MicroGDS V11で使用する場合は、イベントマネージャの変数にセットする値を以下に置き換えてください。
「true」→「-1」
「false」→「0」
例)
変更前 axCadEvMgr601.Initialize = true;
変更後 axCadEvMgr601.Initialize = -1;
用途
ツールバー上で線種および色を選択して自由曲線を作図します。また文字種および色を選択して入力したテキストを作図します。
ツール作成の流れ

1. 開発用プロジェクトを作成する
開発用プロジェクトの作成
MicroGDSの.NETライブラリの追加
MicroGDSイベントマネージャの追加
2. ツールを作成する
ソースコードの貼り付け
「Form1.cs」に2つのイベントを設定
プロジェクトをビルドして実行ファイル(.exe)を作成
3. 実行の仕方
4. ソース解説
5. サンプルソース
1. 開発用プロジェクトを作成する
Microsoft Visual Studio 2005を利用して、開発用プロジェクトの作成手順、MicroGDSの.NETライブラリ(MGDSNet)の追加方法、MicroGDSイベントマネージャの追加方法の流れを説明します。
- 開発用プロジェクトの作成
- スタートメニューから「Microsoft Visual Studio 2005」を実行します。
- Microsoft Visual Studioのツールメニューから「ファイル/新規作成/プロジェクト」を実行します。
※ツールメニューに「ファイル/新規作成/プロジェクト」が無く、「ファイル/新しいプロジェクト」が存在する場合は、Microsoft Visual Studioの開発設定が「Visual Basic 開発設定」または「Web 開発設定」になっている可能性が考えられます。 その場合はメニュー項目の名称が異なる場合がありますので、随時名称を読み替えて手順を進めてください。 このページ内の開発設定と同じにする場合は、「ツール/設定のインポートとエクスポート」を実行し、ウィザードから「すべての設定をリセット」を選んで「次へ」をクリックします。 次の「現在の設定の保存」ダイアログで「はい、現在の設定を保存します」を選んで「次へ」をクリックします。 そして「設定の既定のコレクションの選択」ダイアログで「全般的な開発設定」を選んで「完了」をクリックします。 最後に「リセットの完了」ダイアログで「閉じる」をクリックすると、開発設定を変更することができます。
- 「プロジェクトの種類」より「Visual C#」を選択し、「テンプレート」から「Windows アプリケーション」を選択します。また「プロジェクト名」欄に作成するアプリケーションの名前「DrawFreeLine」を入力します。

- 「OK」ボタンをクリックするとプロジェクトが作成されます。

- MicroGDSの.NETライブラリの追加
- Microsoft Visual Studioのツールメニューから「プロジェクト/参照の追加」を実行します。
- 「.NET」タブよりコンポーネント名「MicroGDS API」を選択します。

- 「OK」ボタンをクリックするとソリューションエクスプローラの参照設定に「MGDSNet」が追加され、MicroGDSのカスタマイズに必要な.NETライブラリが使用できるようになります。

- MicroGDSイベントマネージャの追加
- Microsoft Visual Studioのツールメニューから「ツール/ツールボックス アイテムの選択」を実行します。
- 「COMコンポーネント」タブより名前「MicroGDS Event Manager」をチェックします。

- 「OK」ボタンをクリックし、「Form1.cs [デザイン]」タブ内のフォーム上をクリックして、ドラッグ中のアイコンを配置します。
※アイコンがドラッグされない場合は、Microsoft Visual Studioのツールメニューから「表示/ツールボックス」を実行し、ツールボックス内から「MicroGDS Event Manager」を選択してフォーム上に配置します。
- アイコンを配置することでソリューションエクスプローラの参照設定に「AxCadevmgrLib60」と「CadevmgrLib60」とが追加され、MicroGDSイベントマネージャが使用できるようになります。

2. ツールを作成する
- ソースコードの貼り付け
- Microsoft Visual Studioの「Form1.cs [デザイン]」タブをクリックします。
- ツールメニューから「表示/コード」を実行します。

- ツールメニューから「編集/すべて選択」を実行し、現状のソースコードをすべて選択します。
- ツールメニューから「編集/削除」を実行し、現状のソースコードをすべて削除します。
- このページ内のサンプルソースをWebブラウザ上でコピーして、Microsoft Visual Studioのツールメニューから「編集/貼り付け」を実行し、ソースコードを貼り付けます。

- 「Form1.cs」に2つのイベントを設定
- Microsoft Visual Studioの「Form1.cs [デザイン]」タブをクリックします。
- ツールメニューから「表示/プロパティ ウィンドウ」を実行します。
- プロパティウィンドウ上側のコントロール選択コンボボックスから「Form1」を選択します。

- コンボボックス下のツールバーより、「イベント」ボタンをクリックします。

- プロパティグリッド内の「Load」をクリックし、右側のコンボボックスから「Form1_Load」を選択して、フォーム読込時のイベントを関連付けます。

- 同様に「FormClosed」をクリックし、右側のコンボボックスから「Form1_FormClosed」を選択して、フォームを閉じた時のイベントを関連付けます。

- プロジェクトをビルドして実行ファイル(.exe)を作成
- Microsoft Visual Studioのツールメニューから「ビルド/ソリューションのビルド」を実行します。
※ソースコードがビルドされた際にエラーが表示された場合は、これまでの手順のいずれかで作業が誤っていることが考えられますので、作業の流れを再度確認してください。
- Microsoft Visual Studioのツールメニューから「表示/出力」を実行します。

- ビルドが正常に終了し、出力ウィンドウ内に「ビルド: 1 正常終了または最新の状態、0 失敗、0 スキップ」と表示されていることを確認します。
- 出力ウィンドウ内の「DrawFreeLine ->」の行に、実行ファイル(.exe)が作成されたフォルダのパスが確認できます。この実行ファイル(.exe)と同じフォルダ内に以下のツールバー用ビットマップファイル(計6ファイル)をダウンロードします。
※WebブラウザがMicrosoft Internet Explorerの場合は、上記表内のファイル名または画像を右クリックして「対象をファイルに保存」を実行し、「ビットマップ イメージ」形式で実行ファイル(.exe)と同じフォルダ内に保存してください。customize_sample03_draw.bmp 
customize_sample03_text.bmp 
customize_sample03_red.bmp 
customize_sample03_blue.bmp 
customize_sample03_green.bmp 
customize_sample03_exit.bmp 
※デフォルトのパスは「マイ ドキュメント」フォルダ内の「\Visual Studio 2005\Projects\DrawFreeLine\DrawFreeLine\bin\Debug」ですが、開発環境によって異なる場合があります。
3. 実行の仕方
- MicroGDS 10.0を起動し、新規作成で「新規シングルユーザーファイル」を作成します。
- MicroGDSの「ミニウィンドウエディタ」より、レイヤ(通常はdefault)をカレントに設定します。
- Microsoft Visual Studioのツールメニューから「デバッグ/デバッグ開始」を実行します。
- MicroGDSの下側に「FreeLine」ツールバーが作成されます。
※各ボタンの機能はステータスバーおよびツールバー上に表示される説明(ツールチップ)を参考にしてください。
- ツールバーの「ツールの終了」をクリックするとツールバーが削除され、Microsoft Visual Studioのデバッグ状態が終了し、プログラムが終了します。
4. ソース解説
-
MicroGDSの.NETライブラリ(MGDSNet)のネームスペース(namespace)を宣言し、このファイル内でMicroGDSの.NETライブラリを使用する際に「Informatix.MGDS.Cad.〜」を省略して「Cad.〜」として使えるようにします。
using Informatix.MGDS;
-
MicroGDSイベントマネージャを利用するためにはフォームが必要です。ただしユーザインターフェースはMicroGDSのツールバーを介して行なうので、フォーム自体は非表示にしています。
起動中のMicroGDSを識別するセッションIDを取得し、それをMicroGDSイベントマネージャにセットしています。これにより、MicroGDSで発生したイベントがプログラム側に伝達されるようになります。
イベントの定義はソースコードの「イベントの設定」部分で行なっています。MicroGDS上のツールバーのいずれかのボタンが押された時には「CustomCommand」イベントが通知されます。
このイベントが発生した際に、プログラム内でどの機能を実行するかを分岐して判断させます。このサンプルでは「+= delegate();」という形でC#の匿名メソッドの記述を利用して定義し、ソースコードの視認性を高めています。
カレントのドキュメントが変更された時には「CurDocChange」イベントが通知され、この場合はツールバー上のスタイルの定義を更新します。
プログラムが終了する前にMicroGDSが終了された場合は「MgdsClose」イベントが通知され、(MicroGDSとは独立した)このプログラムを終了するための処理が実行されます。
MicroGDS上でマウスを動かすと「DynamicPos」イベントが通知されますが、自由曲線の指示の際にのみ利用するので、ここではイベントの設定だけを行なっています。
最終的なイベントの開始は「axCadEvMgr601.EV_〜」と「axCadEvMgr601.Initialize」とに「true」を入れることで開始されます。
/// /// フォーム読込時のイベント /// private void Form1_Load(object sender, EventArgs e) { (省略) } -
このツールはフォーム型のアプリケーションなので、フォームが閉じられるメソッド「this.Close()」が実行されることで、プログラムが終了します。
プログラムの終了時にこのイベントが発生するので、MicroGDSイベントマネージャからのイベント通知を停止します。
/// /// フォームを閉じた時のイベント /// private void Form1_FormClosed(object sender, FormClosedEventArgs e) { (省略) } -
MicroGDSとの通信を開始し、ツールバーを作成します。どのボタンが押されたかを判断するためには1〜999までのイベントIDを設定し、「CustomCommand」イベントに設定した処理内で判定します。
ここでは「Cad.GetFreeToolbarEvent」を使うことで、MicroGDSから未使用のイベントのIDを取得して、ツールバーの各ボタンに割り当てています。
ツールバーを作成したら、MicroGDSとの通信を切断します。
/// /// ツールバーの作成 /// private bool prepareToolBarButtons() { (省略) } -
カレントのドキュメントに定義されている線種および文字種を取得して、ツールバー内のコンボボックスに設定します。
このメソッドは2箇所(ツールバーの作成時およびカレントのドキュメントが切り替わった時)から呼ばれるため、独立したメソッドにしています。
また線種および文字種の取得には共通部分が多いので、処理を共有してソースコードを減らしています。
/// /// スタイルリストのコンボボックスの内容を設定 /// private void setupStyleCombo() { (省略) } /// /// コンボボックスの内容を設定 /// private void setupComboText(string listName, string curStyle, Style styleType) { (省略) } -
ツールバー上に自由曲線およびテキスト図形の色を選択するボタンを追加します。
ここではボタンを押す度に、押されたボタンを削除し、次の色のボタンを追加しています。
追加する際には終了ボタンの手前になるように、終了ボタンの位置を動的に取得しています。
/// /// 色変更ボタンの作成 /// private void setColourButton(int eventNo) { (省略) } -
自由曲線の作図を行なうメソッドです。この機能が実行中には他の機能が動作しないように「CustomCommand」イベントを停止しています。
開始位置がスナップされて終了位置がスナップされるまでの間は「DynamicPos」イベントの通知がされるように「axCadEvMgr601.EV_DynamicPos」の値を変更します。
これにより「Cad.GetArg」で問い合わせ中にも、MicroGDS上でマウスが動く度にイベントが発生し、「Form1_Load」メソッド内で設定した「DynamicPos」イベント処理での「Cad.LineTo」が実行され、マウスの軌跡に線分を描き続けていきます。
またUndoマーカのモードを明示的に設定することで、BackSpaceでキャンセルする動作をUndoの処理で実現しています。
/// /// 自由曲線の作図 /// private void EvMgr_Draw() { (省略) } -
テキストの作図を行なうメソッドです。この機能が実行中には他の機能が動作しないように「CustomCommand」イベントを停止しています。
図形をドラッグするためには、一度図面上に作図する必要があり、このメソッドでは図面の表示領域を取得して、表示領域外へ一時的に作図してドラッグに利用しています。
また通常テキストのドラッグ中はテキストの領域がボックス表示されるだけで内容が分りません。ここでは「Cad.LinesFromCurText」にてテキストを図形化(線プリミティブ化)することで、ドラッグ中でもテキストの内容が確認できるようになります。
配置する位置がスナップされた後は、一時的に作図したオブジェクトのフック点を移動してから、図形化した線プリミティブを削除し、正しいテキストプリミティブを作図することで、プリミティブタイプの置き換えを実現しています。
/// /// テキストの作図 /// private void EvMgr_Text() { (省略) } -
終了の処理を行なうメソッドです。ここではツールバーを削除し、「this.Close()」メソッドを実行してプログラムを終了させます。
/// /// 終了の処理 /// private void EvMgr_Exit() { (省略) } -
自由曲線およびテキスト図形を作図する際に、ツールバーで設定した色を、MicroGDSの実際の色として設定しています。
/// /// 色の設定 /// private void setColour(int ColNo) { (省略) } -
自由曲線を作図している最中で、マウスの移動距離が少ない場合、線分を作図しないように判定するメソッドです。
これを行なうことで、長さの短い線分(short vector)が作られることを防止します。
/// /// 距離の判定 /// private bool isSamePos(double x1, double y1, double x2, double y2) { (省略) } -
自由曲線およびテキスト図形の作図前後でMicroGDSのパラメータが変化しないように、各種パラメータを保存、そして元に戻すメソッドをまとめたクラスです。
/// /// パラメータ保存用のクラス /// private class cSaveParams { (省略) } -
MicroGDSのアプリケーションウィンドウ上にメッセージボックスを出すクラスです。このツールとMicroGDSとは独立したプロセスで動作するプログラムです。
このため単にツールからメッセージボックスを表示すると、タイミングによってはMicroGDSのアプリケーションウィンドウの下側に埋まってしまい、
メッセージボックスが出ているにも関わらず、そのメッセージに気が付かないことで、一見MicroGDSがフリーズしたように感じます。
.NETのIWin32Windowインターフェースを利用して、このクラスにMicroGDSのウィンドウハンドルを設定し、メッセージボックスの引数に渡すことで、
MicroGDSのアプリケーションウィンドウ上にメッセージボックスが表示され、確実にメッセージを伝えることができるようになります。
/// /// IWin32Windowを実装するクラス /// private class WinHandle : IWin32Window { (省略) }
5.サンプルソース
|
