AutoCADのAddinをC#で書いてみるー②

こんにちは、AMDlabの森山です。最近は寒くなってきましたね。事務所によってはキーボードをたたく手が少し辛い時期です。

少し前回の投稿から日が開いてしまいました。前回の続きからやっていきましょう。

今日の目標

今回は前回つくったHelloWorldコマンドにアイコンを追加して、アイコンをクリックしたらそのコマンドが起動するようにしてみましょう。
今回紹介する方法はAutoCADに限らず、アドイン制作するうえではよく使うテクニックです。

アイコンの作成

では、さっそくやっていきましょう。今回はAMDlabのアイコンを使用しようと思います。

まずは前回のようにdllファイルの参照を増やします。AdWindowsにパスを通しておきましょう。
ソリューションエクスプローラーから使用するアイコン画像を追加し、埋め込みリソースに変更しておきます。
少しだけAutoCADの用語を整理しておきます。AutoCADでのリボンとは下の画像を指します。

AutoCADの上の部分ですね。ここから入れ子状に名前が変わっていきます。
ホーム、挿入、注釈などが書いてある部分はタブ
作成、修正、注釈と書いてある部分をパネル
線分、文字、寸法記入などが書いてある部分をボタン
と定義しています。
そして、タブを扱うクラスはRibbonTabクラス、パネルを扱うクラスはRibbonPanel、ボタンを扱うクラスはRibbonButtonクラスとなります

では、コードを書いていきましょう。

デバッグしてみましょう。このようにアイコンが作成できましたか?以前実装したComannd.csでクラスを使用することを忘れないようにしてください。

ボタンができたら少しうれしいですね。たくさんクリックしてしまいます。
しかしこの状態ではボタンがあるだけで、押しても何も起きません。次はCommandHandlerを作ってみましょう。

コマンドハンドラーの作成

さて、AutoCADにはjavascriptのようなクリックイベントというものはありません。
そこで、アイコンがクリックされたらHelloWorldがコマンドラインに打ち込まれるように作成します。
ちなみにAutoCADはよくみると他のデフォルトアイコンもそのように作られています。

では、コードを書いていきます。

これは割とテンプレ文なように感じます。

アイコンを押したら機能するようにする

さて、ここまで来たら後一息です。先ほどのIconclassをこのようにしましょう。

実は先ほどのままではHelloWorldを打つたびにリボン、タブ、パネル、ボタンが増殖することにお気づきでしょうか?
そこでif文を追加して、リボン内に同じ名前がないかどうかを検索して、もしなければ作る、というようにしています。

では、デバッグしていきましょう。

動きましたか?
このようにするとアイコンをクリックして動くようになります。
次回はCSVファイルを使用して簡単な図面を描けるようなプログラムにしてみましょう。

補足

button.CommandParameter = “._HelloWorld “;部分の最初の._と最後の半角スペースを忘れないようにしてください。AutoCADの作法のようなものです…(2019/12/1追記)

ARTICLES