autocad 2010 機能ガイド...

56
1 AutoCAD 2010 機能ガイド カスタマイズ

Upload: trinhphuc

Post on 16-Jul-2018

254 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

1

AutoCAD 2010 機能ガイド

カスタマイズ

Page 2: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

2

はじめに

発売以来、AutoCAD は非常に豊富で高度な機能を持つ CAD アプリケーションに進化してきました。同時

に、より使いやすく業務に適した CAD を作り上げられるよう ”オープン アーキテクチャ” の思想に基づい

て、柔軟なカスタマイズ機能を提供し続けています。

AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

ズ、定義ファイルによるカスタマイズ、の要素に分けることができます。ここでいうプロセスとは、設計業

務のなかの一連の作業、または、処理を指します。また、この 3 大要素を更に詳しく相関的に示した図も

記載します。円の外側にあるのが、AutoCAD を使う設計者が最終的に目にすることになる要素です。

AutoCAD のカスタマイズを考えるとき、何をどのようにカスタマイズすればいいか、次のようにカスタマ

イズ要素を絞り込むことができます。

AutoCAD のユーザ インタフェースを使いやすいように変更したい カスタマイズ指示用のダイアログ ボックスを使って、プルダウン メニューやツールバー、ツールパレットを

自由にカスタマイズできます。ユーザ毎にユーザ インタフェースを使いやすいように変えることができ

るので、パーソナライズ と呼ばれています。キーボード割り付けのカスタマイズもパーソナライズの 1 つにあげられています。

Page 3: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

3

自動的な連続処理で反復操作を減らしたい よく使うコマンド操作や、いままで複数のコマンド操作でおこなっていた反復作業を 1 つにまとめるこ

とができます。この場合、新しく登場した アクション レコーダ で一連の操作を記録・再生したり、API を使ったプログラムを実行したりして、反復操作の内容を決定します。プログラムでは、標準コマンドを

羅列するだけの簡単なものから、API 関数を複雑に使うものまで様々な手法を用いることができます。

新しいコマンドを作りたい 標準コマンド以外の コマンド を自由に作って、いままでなかった機能を AutoCAD に追加することがで

きます。新しいコマンドがどのような動きをするかは、AutoCAD API で提供されている機能を組み合わ

せたプログラムで決まります。つまり、プログラムによるカスタマイズです。

新しく作るコマンドを使うと、独自のダイアログ ボックスを作成して表示したり、作図や印刷を実行し

たりできます。また、カスタム オブジェクトと呼ばれる独自の図形を定義したり、他のアプリケーショ

ンとの連動を始めるきっかけを作ったりすることができます。コマンドは、AutoCAD への働きかける 1 つの単位として考えることができます。

システム連携をおこないたい AutoCAD API を使うと Excel や Word といった Office 製品や、SQL Server や Oracle といったデー

タベース製品と AutoCAD を連動させることができます。システム連携は、1 つのコンピュータの中だ

けで完結することもできますが、インターネットに接続された他のコンピュータに接続して、データ交換

するようなことも可能です。

積算や見積もり作成に応用したい 図面に含まれる情報を図形だけではありません。AutoCAD API を使えば、目に見えるグラフィカル オブジェクトだけでなく、目に見えない非グラフィカル オブジェクトに独自の文字情報を付加したり、付

加された情報を取得したりすることができます。この機能を利用すれば、特定領域への部材割り付けの際

に、部材となる図形に部材番号や単価、重量、など、さまざまな情報を与えることで、積算や見積もり作

成につなげていくことができます。

描画エンジンとして利用したい AutoCAD は、高度に最適化された独自の描画メカニズムを採用しています。CAD として対話的に製図

する目的で利用するだけではなく、サーバー上のデータベースに格納されている文字情報をもとに、図形

情報を高速に表示するようなシステム端末として利用することもできます。

線種やハッチング パターン、シェイプを増やしたい AutoCAD と一緒にインストールされる 定義ファイル に新しい情報を追加したり、決められた手順で定義

ファイルを作成したりして、線種やハッチング パターン、シェイプをカスタマイズすることができます。

Page 4: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

4

予備知識

AutoCAD のカスタマイズを始める前に、事前に知っておきたい知識があります。これらは、正しい運用を

行なうために重要です。

サポート検索パス

AutoCAD のカスタマイズといっても、定義ファイルの変更や API によるカスタマイズなど、様々な手法が

あります。1 つ言えることは、カスタマイズして作成したファイルは、どこかのフォルダにまとめて管理す

る必要がある点です。もちろん、これには理由があります。

たとえば、AutoCAD のユーザ インタフェースをカスタマイズして、ツールバーにボタンに独自のボタンを

定義する、と考えてみてください。AutoCAD は、MENU[メニュー設定] コマンドでメニューを切り換える

ときに、ツールボタンに表示するためのビットマップ ファイル(拡張子 .bmp) を自動的に見つけようとし

ます。もし、この検索に失敗して、指定されたビットマップ ファイルを見つけられないと、ツールバーは

次のような状態で表示されます。

この状態は、AutoCAD のサポート検索パスに、ビットマップ ファイルが配置されているフォルダを設定し

ていなかったことが原因です。このような現象は、HATCH[ハッチング] コマンドが、ハッチング パターン

定義ファイル(拡張子 .pat) を見つけられない、など現象にもあてはまります。

つまり、AutoCAD は実行されようとする機能が必要とするファイルを、常に探しながらコマンドを処理し

ているということになります。

カスタマイズしたファイル(定義ファイルや API でのプログラム ファイル) は、どこか判別し易いフォルダ

に配置して、OPTIONS[オプション] コマンドで表示されるダイアログ ボックスの “サポート検索パス” に、そのフォルダを追加しておくことが重要です。この設定によって、AutoCAD がカスタマイズされたフ

ァイルを見つけだすことができるようになります。

カスタマイズしたファイルが保存

されているフォルダ例

Page 5: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

5

ローミング フォルダ

ユーザ インタフェース カスタマイズ ファイル acad.cui、線種定義ファイル acad.lin と acadiso.lin、ハ

ッチング パターン ファイル acad.pat と acadiso.pat など、AutoCAD でカスタマイズ可能なファイルは、

ローミング フォルダ と呼ばれるフォルダに配置されています。

AutoCAD が持つ既存の定義ファイルを修正しようとする場合は、このローミング フォルダの位置に注意し

てください。これらは Windows の ログイン ユーザ毎に異なるフォルダに配置 されることになります。

Windows XP の場合 C:¥Documents and Settings¥<ログインユーザ名>¥Application Data¥Autodesk¥AutoCAD 2010¥R18.0¥jpn¥Support

Windows Vista の場合 C:¥Users¥<ログインユーザ名>¥AppData¥Roaming¥Autodesk¥AutoCAD 2010¥R18.0¥jpn¥Support

ローミング フォルダの場所は、システム変数 ROAMABLEROOTPREFIX に格納されています。また、

OPTIONS[オプション] コマンドで設定可能な “サポート検索パス” には、自動的にログイン ユーザのロ

ーミング フォルダが設定されているはずです。

カスタマイズ用に新しく定義ファイルを作成する場合には、必ずしもローミング フォルダにファイルを配

置する必要がない点に注意してください。ローミング フォルダの利用が適しているのは、AutoCAD がイン

ストールされているコンピュータを、異なる Windows ログイン名でログインする複数の設計者で AutoCAD を共有している場合です。

たとえば、A ユーザ と B ユーザ がそれぞれカスタマイズしたメニューは、保存されるローミング フォル

ダが異なるため、Windows のログインで自動的に切り替わることになります。このような利用方法が必要

なければ、特にローミング フォルダを意識する必要はありません。

AutoCAD がインストールした後に Windows ユーザがログインして始めて AutoCAD を起動す

ると、カスタマイズ可能なファイルがキャッシュ フォルダからローミング フォルダにコピーさ

れます。この動作をセカンダリ インストールと呼んでいます。この処理は自動的におこなわれる

ため、ユーザは何も認識する必要はありません。

Page 6: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

6

システム変数

システム変数は、AutoCAD が持つ様々なコマンドが内部的に使用する値です。システム変数を知ることで、

AutoCAD のをどこまで設計者の望むものにできるのか、その目安を把握できます。システム変数には、読

み取り専用のものもありますが、多くは SETVAR[変数設定] コマンドを使って値を上書き設定することが

できます。また、API からもシステム変数の値を設定したり取得したりする機能を提供しています。これに

よって、コマンドを使ってシステム変数の値を変更する代わりに、暗黙のうちにプログラムから値を変更し

てしまうことできます。

たとえば、UNITS[単位管理]コマンドで設定する内容は、システム変数 LUNITS、LUPREC、AUNITS、AUPREC、ANGDIR、INSUNITS、LIGHTINGUNITS の各値に反映されます。

また、コマンド操作では直接用意されていない機能も、システム変数を設定することで実現できる場合があ

ります。たとえば、” 2D ワイヤフレーム” 表示スタイルの状態でシステム変数 DISPSILH と ISOLINES の値を変更すると、同じ視点でも、3D ソリッドの球を外形線だけを表示させることができるようになります。

そのほか、システム変数 SDI を 1 に設定すると、AutoCAD R14 までの AutoCAD と同じように、1 つの

図面しか開けないような環境(シングル ドキュメント インタフェース:SDI) に変更することもできます。

この機能は、API を利用したプログラム資産の動作互換のためのものですが、複数の図面を開くことができ

なくなるので、現在の AutoCAD ユーザには好まれません。

このように、システム変数の変更で、AutoCAD の振る舞いをコントロールすることができるようになりま

す。 特に、API によるカスタマイズを考えられているユーザは、一度、どのようなシステム変数があるか チェックすることをお勧めします。

システム変数 AUNITS

システム変数 AUPREC

システム変数 ANGDIR

システム変数 LUNITS

システム変数 LUPREC

システム変数 INSUNITS

DISPSILH = 0 ISOLINES = 4

DISPSILH = 1 ISOLINES = 0

システム変数 LIGHTINGUNITS

Page 7: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

7

アクション レコーダ によるプロセスのカスタマイズ

AutoCAD 2009 から、待望の アクション レコーダ の機能が搭載されています。アクション レコーダは、

一般的なソフトウェアでは マクロ レコーダ などの名称で呼ばれることもある機能で、設計者が AutoCAD を使って頻繁におこなう反復作業を記録、再生して、一連の操作を自動化することができます。

いままで一連の作業を自動化するためには、作業内容がどんなに簡単なものであっても、AutoCAD API を使ってプログラムを記述する必要がありました。アクション レコーダは、プログラムの知識がない設計者

のためのプロセス カスタマイズ ツールです。

アクションの記録と再生はいたって簡単です。AutoCAD 2010 では、[2D 製図と注釈] ワークスペース、[3D モデリング] ワークスペースともに、[管理] リボン タブに [アクション レコーダ] リボン パネルが用意さ

れています。これを使って記録と再生を実行することができます。それでは、簡単な操作の記録と再生を、

順を追ってみていきます。

アクションの記録

ここでは、PLINE[ポリライン] コマンドを使って、ボルト側面を表現するような簡単な形状の作図を記録し

ていきます。

1. アクションの記録を開始します。[アクション レコー

ダ] リボン パネルにある [記録] ボタンをクリックし

てください。

2. アクションの記録が開始されると、[記録] ボタンの

表示が [停止] ボタンに変わります。同時、記録し

たコマンド操作を順に表示する “アクション ツリ

ー” パネルが展開表示されます。 アクションの記録中には、マウス カーソルの右上

に赤い円 が表示されます。

Page 8: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

8

3. 直行モードを有効にするために、キーボードから ORTHOMODE と入力して 1 の値を設定しま

す。ステータスバー上のボタンは記録されません。

4. PLINE [ポリライン] コマンドを使って、右図のよう

な順番で頂点を指定していきます。 ここでは、特に寸法にはこだわらずに、左右対象

な形状になるようにしておきます。 最後は、直接座標を指定するのではなく、”C” コマンド オプションを使って、ポリラインを閉じた状

態にしてコマンドを終了します。 ここでは、すべて固定座標が記録されていることに

注意してください。

5. [アクション レコーダ] リボン パネルの [停止] ボタンをクリックして、アクションの記録を終了します。

6. 記録したアクションに名前を付けて保存します。こ

こでは、アクション名に “ボルト作図” と指定して [OK] ボタンをクリックします。 アクション ファイルは、拡張子 .actm で、ローミン

グ フォルダ下の Actions フォルダに保存されま

す。 なお、この保存先フォルダは、OPTIONS[オプショ

ン] コマンドで表示される [オプション] ダイアログ

ボックスの [ファイル] タブ下で設定を変更すること

ができます。 保存先のパスは、システム変数 ACTRECPATH と ACTPATH に格納されています。

アクションの記録は、画層や寸法スタイルの作

成や編集、システム変数の変更や 3D モデリン

グにも適用できます。ただし、3D モデリング

中のアクションの記録時には、ダイナミック入

力を利用することはできません。ダイナミック

入力が有効な状態で 3D モデリングをおこな

おうとすると、警告ダイアログが表示されます。

記録されません

Page 9: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

9

アクションの編集

ここでは、アクションの記録 のセクションで記録した “ボルト作図” アクションを編集して、アクションに

汎用性を持たせます。

1. “ボルト作図” アクションを一覧から選択して、アク

ション ツリーを展開表示させます。

2. ここでは、アクションの内容を紹介するメッセージを

挿入します。 アクション ツリーの中で PLINE と書かれた部分を

マウスの左ボタンでクリックして、続いて、右ボタン

でクリックしてコンテキスト メニューを表示させま

す。 コンテキスト メニューから [ユーザ メッセージの挿

入] を選択します。

3. [ユーザ メッセージを挿入] ダイアログが表示され

るので、”ボルト側面を作図します。” などの紹介を

記入して、ダイアログを終了します。

4. 最初に指定したボルト側面の基点になる点を、アク

ションの再生時にユーザによって指定させるように

設定します。 アクション ツリーの中で PLINE の下の最初の 座標部分をマウスの左ボタンでクリックして、続い

て、右ボタンでクリックしてコンテキスト メニューを

表示させます。 コンテキスト メニューから [ユーザ入力を要求] を選択します。

Page 10: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

10

5. ボルト部分の長さを任意に指定できるように、ボル

ト長を表す座標を、アクションの再生時にユーザに

よって指定させるように設定します。 アクション ツリーの中で PLINE 直下にある 7 番目の座標部分をマウスの左ボタンでクリックして、

右ボタンでクリックしてコンテキスト メニューを表示

させます。 コンテキスト メニューから [ユーザ入力を要求] を選択します。

ユーザ メッセージの挿入や、ユーザ入力による座

標指定、オブジェクト選択は、任意に指定すること

ができます。これらの指定は、アクションの記録時

にも指定することが可能です。

コマンドの実行前や座標の指定、あるいは、オブジ

ェクトの選択直前に、用途に応じて [アクション レコーダ] リボン パネルのボタンをクリックしてくださ

い。

この方法を実行すれば、アクションを記録したあと

からメッセージを挿入や、ユーザ入力の指定の追

加をしなくても済みます。

アクションの再生

1. “ボルト作図” アクションを一覧から選択して、 [再生] ボタンをクリックします。

2. 最初に挿入したユーザ メッセージが表示されま

す。 [閉じる] をクリックして、アクションの再生を続けま

す。

ユーザ入力 を指定

ユーザメッセージの挿入

Page 11: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

11

3. ボルト側面の基点を、ユーザ入力によって指定し

ます。 任意の位置をマウスでクリックします。

4. ボルト部分の長さを指定します。この指定も、ユー

ザ入力をアクションに指定したために要求されま

す。 その他の座標は、基点に対して相対的に、かつ、

自動的に指定されます。

5. これで、アクションの再生が完了します。

アクションの再生が終了すると、ダイアログが表示

されます。

アクションの削除

作成したアクションは、アクション マクロ ファイルとして、1 アクシ

ョンが 1 ファイルとして保存されます。

アクションを削除する際には、アクション ツリー上に削除したいアクシ

ョンを表示させて、アクション名をマウスでフォーカスしてから、右ボ

タンでコンテキストメニューを表示させて、”削除” を選択することで削

除できます。

アクションを削除すると、対応するアクション マクロ ファイルが削除

されます。誤ってアクションを削除してしまった場合には、削除された

アクション マクロ ファイルは、Windows の ”ごみ箱” に存在していま

すので、必要に応じて “元に戻す” ことができます。

Page 12: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

12

アクションの利点と注意点

このように作成したアクション マクロは、コマンドとしてそのまま利用することができます。この例では、

コマンド プロンプト ウィンドウから、直接、”ボルト作図” と入力しても、[再生] ボタンをクリックしたと

きと同じようにアクションを実行することができます。

つまり、アクション マクロ名がそのままコマンド名として機能するため、AutoLISP や ObjectARX などの AutoCAD API からアクション マクロを呼び出したり、[ユーザ インタフェースをカスタマイズ] ダイアロ

グで、リボンやメニューにアクション マクロを直接割り当てたりすることが可能です。

OPTIONS[オプション] コマンドでダイアログを表示させて、[ファイル] タブにある “アクション レコーダの

設定” で、サーバーなどの共有フォルダにアクションマクロ ファイルの保存先を変更すれば、複数の設計

者でアクション マクロを共有することができます。

NEW[新規図面] コマンドや OPEN[開く] コマンドを記録しても、図面の編集セッションをはさんだ

アクションの再生は正しく機能しません。また、表オブジェクト内のセルの編集も記録されません。

ダイアログ ボックスによっては、ダイアログ ボックス上の編集操作が正しく記録されないものがあり

ます。たとえば、新しい [画層プロパティ管理] パレット上で操作した内容は記録、再生することがで

きますが、CLASSICLAYER コマンドで呼び出すことができる旧タイプの [画層プロパティ管理] ダイアログ ボックス上の操作は記録、再生することができません。 アクションの記録には、コマンド プロンプト ウィンドウにコマンドが表示されるかたちで記録をおこな

ってください。

[プロパティ管理] パレットでは、編集対象として選択したオブジェクトが、アクションの記録時に編集

したオブジェクトと異なる場合、編集したいプロパティが存在しない場合があります。このような場合、

アクション再生時に、プロパティの編集操作が無視されます。たとえば、円オブジェクトの半径の変

更を記録したアクションを実行して、線分を選択すると、アクション再生時にエラーが発生します。

現在のところ、記録したアクション ファイルを直接開いて編集することはできません。また、VBA マクロなどのプログラム言語に変換する機能も提供されていません。

グリップ編集は、アクションに記録して正しく再生することができません。

Page 13: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

13

API (プログラム) によるプロセスのカスタマイズ

AutoCAD API の歴史は古く、さまざまな業種用に AutoCAD を特化する作業が広範におこなわれてきまし

た。このカスタマイズ機能の深さが、AutoCAD が広く普及した大きな理由になっています。

API とは Application Programming Interface の略で、プログラム用インタフェースというような意味を持

ちます。AutoCAD は古くからプログラム(マクロと呼ぶ場合もある) によるカスタマイズを積極的にサポー

トしています。API を使ったカスタマイズを利用すると、日常の設計を飛躍的に向上させることもできます。

AutoCAD のカスタマイズ API

AutoCAD API は、利用目的や知識にあわせて数種類が用意され

ています。

API を使用すると、AutoCAD に組み込まれていない機能を新し

く作成していくことが出来るようになります。

どの API を選択するかは、実現しようとする機能や、開発者の

経験と知識に照らし合わせて吟味する必要があります。

次の表は、API の代表的な機能差をまとめたものです。ここで示されているのは実現できる内容の一部です

が、カスタマイズの指標となりえます。それぞれの API の詳細は後で紹介しますが、一般的な用途と特徴

とついて軽く触れておきます。

Page 14: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

14

AutoLISP AutoCAD 内部での図形操作など、作図機能を向上させるために利用されています。

拡張された Visual LISP では、ActiveX オートメーションを使うこともできます。

ActiveX オートメーションを使えば、同一コンピュータ内で他のアプリケーションと連携

することもできます。AutoLISP 言語は AutoCAD 固有なものです。

ActiveX(VBA) 作図中心のカスタマイズにとどまらず、フォームと呼ばれるダイアログ ボックスの作成

や、同一コンピュータ内の他アプリケーションとの連携にも強い API です。使用する言

語は、Microsoft の Visual Basic なので、Excel VBA などと同じように AutoCAD オブジェクトをカスタマイズすることができます。習得も容易です。

ObjectARX AutoCAD 内での作図を含め、最も深く AutoCAD をカスタマイズできます。メモリ上

の DWG のデータ構造に直接アクセスできるので、標準の LINE や CIRCLE オブ

ジェクトのように、独自のオブジェクトを定義することもできます。また、オブジェクトのド

ラッグやツールパレットなどのカスタマイズもできます。C++ API を使う他のアプリケー

ションとの連携や、ActiveX オートメーション(COM) での連携も可能です。C++ 言語

を利用するので、少々ハードルの高い API です。

.NET API カスタム オブジェクトの定義など一部を除き、ほとんどの ObjectARX の機能を踏襲

しています。つまり、ObjectARX で可能な AutoCAD カスタマイズを同じようにおこな

えます。.NET API は .NET Framework で動く API なので、C++ 言語のほかに、

C#、Visual Basic、J# といった言語でも同様のカスタマイズが可能です。他のアプリケ

ーション連携も、COM に加え、XML Web サービスも利用できるので、インターネット

に接続された他のコンピュータとの連携も可能です。

Page 15: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

15

どの API を使えばいいのか ?

AutoCAD API には、AutoLISP/Visual LISP、VBA、ObjectARX、.NET API の 4 つの API があります。

実際、API でカスタマイズを始めようとする際には、どの API を使用していいか迷ってしまうかもしれま

せん。もちろん、その時点で、「AutoCAD のコマンドや機能、データ構造をどこまで知っているか」、「どの

開発言語を知っているのか」、などが選択の要因になるはずです。しかし、ここには落とし穴があります。

それは、「どのような考え方でプログラムしていくか」という問題です。

ここでは、それぞれ コマンド指向、データ指向、オブジェクト指向 にわけて、考え方の違いを見ていきま

す。

コマンド指向

コマンドを中心に行うプログラムを指すものとして “コマンド指向” という言葉を定義してみます。カス

タム コマンドを作成しようとする場合、AutoCAD の 標準コマンドをプログラムの中から呼び出す方法

が最も簡単です。プログラマが、目的の図形を作画すためのコマンドを知っていれば、コマンド操作と同

様のオプションを与えるだけで図形を作画することができます。ただ、個々の図形を作画するためには、

全く異なるコマンドを習得していなければなりません。

AutoCAD コマンドを使用するプログラムで重要なのは、詳細な処理がすべてコマンドまかせとなってし

まう点です。選択した図形に編集を加えようとする場合など、処理に失敗したか成功したかをプログラム

内で具体的に把握することはできません。また、コマンドが正常終了しても、結果が期待に沿えるもので

あるかの判断も難しいはずです。もし、選択した図形のデータや、これから与えようとしているデータを

あらかじめ細かく調査、分析出来るなら、あいまいな結果を低減できるかも知れません。

データ指向

コマンド指向にならい、データを中心に行うプログラムを指すものとして、”データ指向” という言葉を定

義してみます。この場合、図形の編集前に、図形データの取得、調査、分析が可能になるので、エラーを

未然に防ぎ、かつ、細かい制御が可能になります。

しかし、やはり問題も存在します。それは、データの種類と意味合いを図形毎に把握する必要があるとい

う点です。前に触れたように、DXF グループ コードを用いれば、ある程度のデータの整合性を把握する

ことができます。しかし、どの図形にどういった DXF グループ コードが含まれるかを把握するには、

ある程度の経験と知識が必要となります。

プログラマの知識に依存する例として、BYLAYER 色の扱いをあげることができます。通常、何も指定せ

ずに新規図面上で図形を作画すると、作画された図形には色番号を表す DXF グループ コード 62 は含

まれません。

コマンド: (entget (car (entsel))) オブジェクトを選択: ((-1 . <図形名: 7ef59ea0>) (0 . "LINE") (330 . <図形名: 7ef59cf8>) (5 . "8C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 624.166 173.972 0.0) (11 959.192 393.802 0.0) (210 0.0 0.0 1.0))

Page 16: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

16

CHPROP コマンドで図形の色を赤色に変更すると、色の変更時に色データがリスト上に現れます。

コマンド: CHPROP オブジェクトを選択: 認識された数: 1 オブジェクトを選択: 変更するプロパティを入力 [色(C)/画層(LA)/線種(LT)/線種尺度(S)/線の太さ(LW)/厚さ(T)]: C 新しい色 [TrueColor(T)/カラー ブック(CO)] <BYLAYER>: Red 変更するプロパティを入力 [色(C)/画層(LA)/線種(LT)/線種尺度(S)/線の太さ(LW)/厚さ(T)]:

コマンド: (entget (car (entsel))) オブジェクトを選択: ((-1 . <図形名: 7ef59ea0>) (0 . "LINE") (330 . <図形名: 7ef59cf8>) (5 . "8C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 1) (100 . "AcDbLine") (10 624.166 173.972 0.0) (11 959.192 393.802 0.0) (210 0.0 0.0 1.0))

もし、DXF グループ コード 62 を含まないリストに対して、色番号のみを 入れ替える TRY2 や TRY7コマンドのようなプログラムを実行すると、当然エラーが発生します。データ指向なコマンド例 TRY2 コマンド や TRY7 コマンド は、このエラーを回避するための処理、つまり、BYLAYER 色の図形 (DXF グループ コード 62 がない) に対し、新しく DXF グループ コード 62 を追加する処理を含める必要があ

るので、プログラム量がさらに増大してしまいます。

これが、データ指向プログラムを行なうプログラマに要求される "知識" なのです。このような知識は、

すべて容易に習得できるとは限りません。これを補う最大の要素が “経験” です。

オブジェクト指向

オブジェクト指向を ひと言で AutoCAD 図形にあてはめるなら、 「図形が持つデータと,そのデータを扱うことが出来るコマンドを図形単位でまとめたもの」 と言うことができます。

つまり、個別に詳細なデータを知る必要

がないコマンド指向な点と、細かな制御

が可能となるデータ指向な点、を併せ持

つもの、と解釈できます。

また、逆に、図形毎のコマンドを覚える

必要もなく、図形毎の DXF グループコ

ードを含むデータ種別をあらかじめ学

習しておく必要はない、とも言えます。

実際、オブジェクトには、「同時に編集

コマンド相当の機能も含まれる」ので、

図形さえ特定できれば、すべての機能を

オブジェクト中心に操作できます。

Page 17: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

17

オブジェクトには、データ指向なプログラムで求められた知識が最初から含まれている、と考えることが

できます。また、オブジェクトを適切に操作するための情報が、コマンド指向なプログラムで呼び出すコ

マンドのような形で含まれています。つまり、オブジェクト自身がインテリジェントな存在になっている

と考えられます。

オブジェクト指向 とは、図形を オブジェクトとして捉え、オブジェクトを中心としたプログラミングを

行うための言葉として定義出来るはずです。AutoCAD では、オブジェクト指向なプログラムを可能にす

るために、すべての図形がオブジェクト化されています。これにより、いままでのコマンド指向やデータ

指向プログラムに必要とされたプログラマの "知識" が、実質的に必要なくなります(もちろん、開発言語

の知識は別に必要です)。

オブジェクト指向なプログラマは、作画あるいは編集したい図形(オブジェクト) を特定して、オブジェク

トに命令を与えることが仕事になります。

Page 18: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

18

コマンド指向、データ指向、オブジェクト指向の中で、相対的にプログラム量の少ない手法が、オブジェク

トを指定してプログラムしていく オブジェクト指向 なプログラムであることに気がつくはずです。また、

AutoCAD のバージョンアップへの対応にも、オブジェクト指向なら、コマンドやデータ構造の変更を吸収

できることになります。

既存のプログラム資産を保守しながら再利用していく場合にはあてはまりませんが、これから、新規に API カスタマイズしようと考えるなら、オブジェクト指向なプログラムが可能な VBA や .NET API または、

ObjectARX が最適です。実現したい内容にもよりますが、習得のし易さからは、VBA か Visual Basic .NET で AutoCAD .NET API を利用するのがベストと言えます。

それでは、次に AutoLISP、Visual LISP、VBA、ObjectARX、.NET API で同じ色変更の簡単なサンプル プログラムを紹介していきます。

これらのサンプルが、コマンド指向、データ指向、オブジェクト指向のどれを使っているか、考えながら参

照していただくと、ここまでの説明が分かりやすくなるはずです。

TRY1、TRY5、TRY6 コマンド がコマンドを呼び出すコマンド指向、TRY2、TRY7 コマンドが

DXF グループ コードを指定するデータ指向、TRY3、TRY8、TRY9、TRY10 コマンドと TRY4 マクロがオブジェクトを操作するオブジェクト指向を採用しています。

サンプル コマンド名 AutoCAD API 開発手法

TRY1 コマンド AutoLISP コマンド指向

TRY2 コマンド AutoLISP データ指向

TRY3 コマンド Visual LISP(AutoLISP) オブジェクト指向

TRY4 マクロ VBA(COM) オブジェクト指向

TRY5 コマンド ObjectARX コマンド指向

TRY6 コマンド ObjectARX コマンド指向

TRY7 コマンド ObjectARX データ指向

TRY8 コマンド ObjectARX オブジェクト指向

TRY9 コマンド .NET API オブジェクト指向

TRY10 コマンド .NET API オブジェクト指向

Page 19: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

19

AutoLISP

AutoLISP は、AutoCAD のカスタマイズ API として最も古い歴史を持っています。現在でも多くの資産が

利用されています。

もともと人口知能研究用として知られていた CommonLISP の特徴であるリスト操作を CAD 上の図形デ

ータに適用したもので、AutoCAD に組み込まれたインタプリタ(逐次実行) 言語として動作します。

AutoLISP を使用するには、拡張子 .lsp ファイル をテキストエディタで編集して、AutoCAD 上にロード

する必要があります。通常、カスタム コマンドの作成が主な利用方法ですが、AutoLISP 自体を拡張する

AutoLISP 関数を作成することもできます。AutoCAD R12 からは、ダイアログ ボックスを作成するための DCL 言語も扱えるようになっています。

AutoLISP は、コマンド プロンプトから動的に図形データを取得出来るため、デバッグにも一役買うことが

できます。例えば、CIRCLE コマンドで中心点 10.0,15.5 の位置に半径 36.8 の円を作画したと仮定します。

コマンド: CIRCLE CIRCLE 円の中心点を指定 または [2 点(2P)/3 点(3P)/接、接、半(T)]: 10.0,15.5 円の半径を指定 または [直径(D)]: 36.8

AutoCAD 関数式 “(entget (car (entsel)))” をコマンド プロンプト ウィンドウに入力して、作画された円を

選択すると、選択した円が持つ リスト が表示されます。

コマンド: (entget (car (entsel))) オブジェクトを選択: ((-1 . <図形名: 7ef59e78>) (0 . "CIRCLE") (330 . <図形名: 7ef59cf8>) (5 . "87") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbCircle") (10 10.0 15.5 0.0) (40 . 36.8) (210 0.0 0.0 1.0))

リスト には、この時点で AutoLISP がアクセスできる円の情報が含まれます。個々の情報は、DXF ファイ

ルで使われている DXF グループ コードで表現されています。たとえば、円のリスト式では、DXF グルー

プ コード 10 に中心座標が含まれています。同じように、グループ コード 40 には、半径が含まれている

ことがわかります。ファイルを作成して AutoLISP でプログラムを記述していくほかに、このようなコマン

ド プロンプト ウィンドウからの実行ができるのは、AutoLISP が逐次実行環境(インタプリタ) で動作する

ためです。

AutoLISP では、もちろんプログラム中で変数を作成してコマンド プロンプト ウィンドウから設定、参照

することができます。ただし、複数の図面が表示されている状態(マルチ ドキュメント インタフェース:

MDI) では、AutoLISP の仕様上、注意が必要な点があります。ここでは、図面を表示しているウィンドウ

と図面のことを、AutoCAD API 全般に倣って ドキュメント と呼んでいます。

ある 1 つのドキュメントで設定されたグローバル変数は、別のドキュメントから参照することが

できません。これは、AutoLISP がドキュメント間で共有可能なグローバル変数を持つことがで

きないことを意味しています。

Page 20: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

20

この動作は、簡単に検証することができます。AutoCAD 上で Drawing1.dwg と Drawing2.dwg が開かれた

状態を仮定します。Drawing1 のウィンドウにフォーカスを与えて、プロンプト画面から

コマンド: (setq myatom "test") "test"

と入力してリターンキーを押します。続いて、変数 myatom の内容を確認してみます。 変数の内容確認に

は、変数名に ! を付けて変数名を入力します。

コマンド: !myatom "test"

プロンプト画面には、代入された値 “test” が表示されるはずです。次に、マウス操作で Drawing2 のウ

ィンドウをアクティブにして、変数 myatom の内容を確認すると、設定値がないことを示す nil を返すこ

とがわかります。

コマンド: !myatom nil

このように、AutoLISP はドキュメント毎の実行環境が独立しています。もちろん、複数のドキュメント間

で 1 つの変数を共有する方法も提供しています。ただし、AutoCAD R14 以前のように、図面を 1 つしか

表示できなかった(シングル ドキュメント インタフェース:SDI) 旧バージョンの AutoCAD から AutoLISP アプリケーションを移植する場合には、この振る舞いを把握しておくことが重要です。

同様に、AutoLISP ファイル(拡張子 .lsp) のロードも、ドキュメント毎におこなわなければならない点にも

注意が必要です。

ここでは、図形を 1 つ選択して赤色に変更するプログラム例をいくつか紹介していきます。どれも同じ結

果を生むプログラムですが、プログラム量と考え方に大きな違いがあります。

TRY1 コマンド:

CHPROP コマンドを間接的に実行させる方法です。(command) 関数が CHPROP コマンドの呼び出し

を担当しています。コマンド プロンプトに入力するのと同じキーワード、“C” や “RED” をそのまま使っ

てコマンド呼び出しをしています。

(defun C:TRY1 (/ ename) (setq ename (entsel "¥n オブジェクトを選択:")) (command "CHPROP" ename "" "C" "RED" "") (princ) )

図形を選択して変数に代入

CHPROP コマンドで色を変更

Page 21: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

21

TRY2 コマンド:

選択した図形のリストを取得して、その中から色番号を表す 62 の DXF グループ コードを抽出してか

ら、新しい赤色の色番号 1 を持つリストと置き換えています。ただし、このプログラムは、255 色しか

扱えない AutoCAD インデックス カラー表現にしか対応していません。

(defun C:TRY2 (/ ename datalist newlist newcolor oldcolor) (setq ename (entsel "¥n オブジェクトを選択:")) (setq datalist (entget (car ename))) (setq newcolor (cons 62 1)) ; 1=赤 (setq oldcolor (assoc 62 datalist)) (if (= oldcolor nil) (setq newlist (append datalist (list newcolor))) (setq newlist (subst newcolor oldcolor datalist)) ) (entmod newlist) (princ) )

True Color(トゥルー カラー) に対応した色変更プログラムを作成するには、新しい DXF グループ コー

ド 420 の変更処理をプログラムに挿入する必要があります。下記の青字部分が該当します。

(defun C:TRY2 (/) (setq ename (entsel "¥n オブジェクトを選択:")) (setq datalist (entget (car ename))) (setq newcolor (cons 62 1)) ; 1=赤 (setq oldcolor (assoc 62 datalist)) (if (= oldcolor nil) (setq newlist (append datalist (list newcolor))) (progn (setq newlist (subst newcolor oldcolor datalist)) (setq truecolor (assoc 420 newlist)) (if (/= truecolor nil) (progn (setq prev (member truecolor (reverse newlist))) (setq back (member truecolor newlist)) (setq newlist (append (reverse (cdr prev)) (cdr back))) ) ) ) ) (entmod newlist) (princ) )

図形を選択して変数に代入

リストを取得して変数に代入

リスト中に 62 のデータが

あれば、新しく作成した 赤(1) のデータで置き換

え、そうでなければ、赤(1) のデータをリストに追加 新しいリストで図形を更新

選択図形から取得したリストに 420 データ(トゥルーカラー情報) があると、

62 データ(256 色指定情報) より優先されてしまうので、そのデータをリストか

ら削除

Page 22: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

22

Visual LISP

Visual LISP は、AutoLISP 言語を拡張した開発環境、及び、言語で、AutoLISP を互換性があります。

Visual LISP は、VBA と同じように AutoCAD 内に IDE(統合開発環境) を備えています。この IDE は、シ

ンボルデバッグや、DCL 言語で定義されたダイアログの評価も行うことができます。また、AutoLISP ソー

ル ファイル(拡張子 .lsp) のコンパイル機能で、バイナリ ファイル(拡張子 .fas) を作成することもできま

す。更に、DCL リソースファイルを含む複数のソース ファイルを 1 つにまとめたバイナリ ファイル(拡張

子 .vlx) を作成することもできます。.fas ファイルと .lvx ファイルともに、.lsp ファイルと同じように、

AutoCAD にロードして利用できます。

言語自体も大幅に拡張され、ユーザのアクションをイベントとして取得する リアクタ 機能や、ActiveX オートメーションにアクセスするための機能も追加されています。

次に、選択図形を赤色に変更する例を再び紹介します。使用している言語は、AutoLISP 言語ですが、Visual LISP で新しく登場した関数を利用しているため、プログラムの印象がかなり変わっていることがわかりま

す。特に、リストを扱う Try2 コマンドは、AutoLISP を使った場合より、簡素化しています。

Page 23: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

23

TRY2 コマンド:

AutoLISP で紹介した True Color 対応のリスト操作プログラムを、Visual LISP で新しく登場した (vl-remove) 関数で簡素化しています。基本的には、DXF グループ コードで表現される データ を意識

したプログラム内容です。

(defun C:TRY2 (/) (setq ename (entsel "¥n オブジェクトを選択:")) (setq datalist (entget (car ename))) (setq newcolor (cons 62 1)) ; 1=赤 (setq oldcolor (assoc 62 datalist)) (if (= oldcolor nil) (setq newlist (append datalist (list newcolor))) (progn (setq newlist (subst newcolor oldcolor datalist)) (setq newlist (vl-remove (assoc 420 newlist) newlist)) ) ) (entmod newlist) (princ) )

TRY3 コマンド:

VBA と同じ ActiveX オートメーション インタフェースを用いて、選択図形を赤色に変更しています。

これも Visual LISP で登場した (vl***) 関数群を使用することで実現できます。

(defun C:TRY3 (/ acadObject acadDoc acadUtl objEnt ptPick) (vl-load-com) (setq acadObject (vlax-get-acad-object)) (setq acadDoc (vla-get-activedocument acadObject)) (setq acadUtl (vla-get-utility acadDoc)) (vla-getentity acadutl 'objEnt 'ptPick '"¥n オブジェクトを選択:" ) (vla-put-color objEnt acRed) (vla-update objEnt) (princ) )

AutoLISP ファイル(拡張子 .lsp) や Visual LISP ファイル(拡張子 .fas、.vlx のいずれか) は、ド

キュメント毎にロードしなければなりません。手動操作でロードする場合には、APPLOAD[アプ

リケーション ロード] コマンドを使用すると便利です。ロードした AutoLISP ファイルと Visual LISP ファイルは、ロード解除することはできません。

選択図形から取得したリストに 420 データ(トゥルーカラー情報) があれば、62 データ(256 色指定情報) より優先されてしまうので、そ

のデータをリストから削除

Application オブジェクトを取得

Document オ ブ ジ ェ ク ト か ら Utility オブジェクトを得て、その中

に定義されている図形選択メソッ

ドで図形を選択後、オブジェクトを

取得

オブジェクトに赤色定数を設定 オブジェクトを更新

Page 24: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

24

VBA( ActiveX オートメーション / COM )

ActiveX オートメーションは、Mircrosoft の提供するコンポーネントテクノロジ、COM(コンポーネント オブジェクト モデル) を利用したカスタマイズ環境です。

COM には、アプリケーションの機能を公開する COM サーバー と、公開された機能を参照して再利用す

る COM クライアント があります。AutoCAD の場合、AutoCAD が COM サーバーの役割を持ち、COM クライアント機能を持った VBA や、Microsoft Visual Basic、Visual C++ など(別売) から AutoCAD の機能

を再利用することができます。

AutoCAD が ActiveX オートメーションを採用することで、習得が容易な Visual Basic 言語を用いて、

AutoCAD のカスタマイズが可能になりました。下図は、AutoCAD 2010 が COM サーバー として公開す

る情報、オブジェクト モデル です。オブジェクト モデルは、オブジェクト と オブジェクトのつながり を開発者に伝える役割を持っています。

Page 25: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

25

AutoCAD は、Micsoroft からライセンス提供された IDE (統合開発環境) モジュール、VBA(Visual Basic for Applications) を搭載しています。VBA は AutoCAD とともにインストールされるので、すぐに VBA でカ

スタマイズの環境が整います。

VBA では、カスタムコマンドを直接作成するのではなく、いわゆる VBA マクロを作成することになりま

す。また、マクロ内では AutoCAD のコマンドをそのまま利用するのではなく、”オブジェクト” に対する操

作を処理していく “オブジェクト指向” なプログラミングをおこないます。

TRY4 マクロ:

下記は、VBA で選択図形を赤色に変更するマクロ例です。これだけのプログラムでこの内容でも、トゥ

ルーカラーにも対応しています。

Public Sub TRY4() Dim oEnt As AcadEntity Dim ptPick As Variant ThisDrawing.Utility.GetEntity oEnt, ptPick, "オブジェクトを選択:" Dim oColor As AcadAcCmColor Set oColor = New AcadAcCmColor oColor.ColorIndex = acRed oEnt.TrueColor = oColor oEnt.Update End Sub

トゥルーカラー対応の色オブジェクトに赤色定数を設定

オブジェクトを更新

Document オブジェクトから Utility オブジェクトを得て、その中に 定義されている図形選択メソッドで図形を選択後、オブジェクトを取得

Page 26: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

26

作成されたマクロは、VBA プロジェクト(拡張子 .dvb) に保存することができるほか、図面ファイル

(.dwg、.dxf) に埋め込んで配付することもできます。通常、VBA マクロを実行するためには、VBA のプロ

ジェクト ファイルを AutoCAD にロードする必要がありますが、図面自身に VBA プロジェクトが埋め込

まれている場合には、図面を開いた時点で埋め込まれたプロジェクト内のマクロを利用できる状態になりま

す。

VBA プロジェクトのロードや、マクロの実行のために、次のようなコマンドが用意されています。

コマンド名 内容

VBALOAD VBA プロジェクト ファイルのロード

VBAMAN VBA 管理ダイアログの表示(図面埋め込みなど)

VBARUN VBA マクロの実行

VBAUNLOAD VBA プロジェクト ファイルのロード解除

VBA はコマンドを定義できないため、マクロを実行するために VBARUN コマンドを実行しなければなりま

せん。これを、面倒と感じることがあるかも知れません。このような場合には、AutoLISP のコマンド作成

機能と組み合わせて、間接的にマクロを実行する方法があります。

次の AutoLISP プログラムは、コマンド実行を行う (command) 関数で、VBARUN コマンドを呼び出して VBA マクロ “MyMacro” を起動する、TEST コマンドの定義例です。(command) 関数の替わりに、

(vl-vbarun) 関数でも同様の処理を実現することができます。

(defun C:TEST (/ ) (command “-VBARUN” “MyMacro”) (princ) )

VBA プロジェクト ファイル(拡張子 .dvb) をロードしたり、VBA プロジェクトが埋め込まれた

図面を AutoCAD 上に開いたりする際には、下記のような警告ダイアログ ボックスが表示されま

す。これは、マクロ ウィルスの実行を防止するためのものです。このダイアログの表示を抑止す

るには、「マクロを含むプロジェクトを開くときは常にこのダイアログを表示する」項のチェック

をはずす必要があります。セキュリティ上、システム変数などで警告表示を制御することはでき

ません。

Page 27: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

27

VBA の動作メカニズムと利点

AutoCAD VBA で利用する オブジェクト モデルなどの情報は、Microsoft 社の定義した COM と呼ばれる

仕様によって公開された情報です。ここでは、情報を公開するアプリケーションのことを、COM サーバー と呼びます。一方、COM サーバーによって公開された情報は、COM クライアント と呼ばれる開発ツールで

再利用することができます。VBA も COM クライアントとして考えることができます。このような COM サーバー と COM クライアント の関係を COM の 1 つの実装形態として、ActiveX オートメーション

(古くは、OLE オートメーション)、または COM オートメーション、と呼んでいます。

COM は、Windows プラットフォーム上での共通な仕様であるため、他のアプリケーションが COM サー

バーとして情報を公開していれば、COM クライアントとして AutoCAD VBA から他のアプリケーションを

制御することができます。例えば、Microsoft Office 製品は、自身の機能を COM サーバー として公開して

いるので、内部の VBA が COM クライアントして、簡単にプログラミングを行うことができます。

COM サーバーとして公開される情報の一覧は、タイプ ライブラリ というファイルに記述され

ています。AutoCAD VBA 内部で AutoCAD のオブジェクト モデルに則ってプログラムを行う場

合、AutoCAD タイプ ライブラリ が自動的に参照されています。他のアプリケーションの COM サーバー にアクセスする場合は、マニュアル操作でそのタイプ ライブラリを参照する必要があ

ります。タイプ ライブラリの参照状態は、Visual Basic Editor の [ツール] メニュー から [参照

設定] を選択することでダイアログに表示されます。

Page 28: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

28

VBA に関する注意点と今後

AutoCAD が使用する VBA は、Microsoft 社からライセンス提供されたコンポーネントを利用し

ています。AutoCAD に組み込まれた VBA は、通常、AutoCAD と同じプロセスで動作します。

プロセスとは、ソフトウェアの実行単位で、プロセス毎に実行に必要なメモリ領域が Windows によって割り当てられます。

問題となるのは、Microsoft 社が提供する VBA コンポーネントが 32 ビット用のコンポーネント

のみしか提供されていない、という点です。Windows では、32 ビットコンポーネントと 64 ビッ

トコンポーネントは同じ実行プロセスを共有することができません。このため、64 ビット版の AutoCAD では、VBA 環境を維持するために、VBA コンポーネントを AutoCAD とは別のプロ

セス(メモリ空間)で実行するような仕組みを採用しています。この仕組みについて、少し詳し

く紹介します。

32 ビット Windows で動作する 32 ビット版の AutoCAD 2010 と VBA は、AutoCAD と同じ

プロセス空間で動作します。つまり、AutoCAD と VBA は、実行時に同じメモリ空間を共有する

ため、互いのコンポーネント間に通信は必要ありません。結果として、VBA マクロの実行スピー

ドは高速になります。

一方、64 ビット Windows で動作する 64 ビット版の AutoCAD 2010 では、32 ビット版しか

提供されていない VBA と別プロセスで動作せざるおえません。この場合、プロセス間の通信が

必要になり、同一プロセス内での実行と比べると、VBA マクロの実行スピードが遅くなってしま

う傾向があります。

このように、プラットフォームとなる Windows や AutoCAD に技術的な差が出てしまう点や、

Microsoft 社が 64 ビット版 VBA コンポーネントを提供しない方針を打ち出していることもあ

り、オートデスクは、現在、次世代の組み込み型開発環境の採用を検討し始めています。

AutoCAD 2010 のインストール メディア(DVD-ROM)には、VBA コンポーネントが含まれず、

インターネットによるダウンロードで提供しています。AutoCAD 2010 で引き続き VBA を使用

する場合は、http://www.autodesk.com/vba-download から VBA コンポーネントをダウンロード

してインストールをおこなってください。

ダウンロード ページは英語表記ですが、AutoCAD 2010 がインストールされている環境には、二

日本語版の VBA コンポーネントがインストールされます。ダウンロード時には、32 ビット版

VBA か 64 ビット版 VBA かを選択してください。

Page 29: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

29

ObjectARX

ObjectARX は C++ 言語を使った開発環境で、AutoCAD 自身の開発言語が始めて C++ 言語に替わった AutoCAD R13 から登場したのが、ObjectARX です。登場当初、単に ARX (AutoCAD Runtime eXtension の略) と呼ばれていましたが、AutoCAD R14 から名称が変更され ObjectARX となりました。

ObjectARX を利用するには、環境を整える必要があります。まず、AutoCAD バージョンにあわせた ObjectARX SDK を http://www.autodesk.com/objectarx からダウンロードして入手します。ObjectARX SDK の入手と利用は無償です。

次に、C++ 言語で記述したプログラムをコンパイルするために、Microsoft Visual Studio .2008 を用意(購入)します。実際に利用するのは、Microsoft Visual Studio .2008 SP1 に含まれる Visual C++ 9.0 SP1 になりま

す。コンパイラのバージョンは、対象となる AutoCAD のバージョンによって変化するので注意が必要です。

ObjectARX が持つ C++ クラスライブラリは、AutoCAD 自身を構成するクラス ライブラリの一部を抽出

して提供されたものです。このため、AutoCAD が持つ API 中で最も強力に AutoCAD 内部からカスタマ

イズすることが可能です。ObjectARX クラス階層は、図面アクセスから AutoCAD 固有の MFC ユーザ インタフェース クラス群まで、大規模な範囲をサポートしています。

もちろん、C++ 言語の親和性を生かして、Windows API をはじめとして、他の SDK と一緒に利用するこ

ともできます。

Page 30: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

30

ObjectARX の C++ プログラム ファイル(拡張子 .cpp) をコンパイルしたものが、最終生成ファイルであ

る拡張子 .arx ファイルです。実際には、ダイナミック リンク ライブラリ(拡張子 .dll) に AutoCAD 固有

のエクスポート関数を実装したものが .arx ファイルになっています。

.arx ファイルは、AutoCAD 上にロードすることで、ファイル内に定義されたコマンドやその他の機能が有

効になります。ダイナミック リンク ライブラリ 構造を持つ ObjectARX アプリケーションは、実行時に AutoCAD とメモリを共有して、同一プロセスで動作することを意味します。このため、ObjectARX アプリ

ケーション内のクラッシュが、即 AutoCAD のクラッシュにつながるため、アプリケーションには高い品質

が求められます。

AutoCAD 2010 が使用している MFC のバージョンに依存する ObjectARX は、Visual Studio 2008 SP1 に含まれる Visual C++ 9.0 SP1 での開発のみがサポートされています。AutoCAD 2007 ~ 2009 までの ObjectARX アプリケーション開発には、Visual Studio 2005 に含まれる Visual C++ 8.0 を、AutoCAD 2004 ~ 2006 までの ObjectARX アプリケーション開発には、Visual Studio .NET 2002 に含まれる Visual C++ 7.0 を利用しなければなりません。

なお、AutoCAD 2007 からは、文字を表現するために、従来の MBCS 文字セットに替わって UNICODE 文字セットを使用するようになったため、ObjectARX プロジェクトも UNICODE 文字セットを利用しなければなりません。

ObjectARX でも、カスタム コマンドの作成を主体としたカスタマイズをおこないますが、ユーザが行う操

作をイベントとして取得したり、LINE や CIRCLE といった標準オブジェクトと同じように、AutoCAD 上で動作するカスタム オブジェクトを定義したりすることもできます。

ObjectARX の魅力は、カスタマイズ範囲が広く豊富であることです。ユーザ インタフェースの拡張には、

Microsoft の提供する MFC(マイクロソフト ファウンデーション クラスライブラリ) を利用できます。更

に、ObjectARX に組み込まれている、AutoCAD に特化した MFC 派生クラスも利用することができます。

C++ 環境を持つ ObjectARX は、COM クライアントの機能も持っています。つまり、ObjectARX プログ

ラムの中から、ActiveX オートメーションを使ったプログラムを作成することもできます。もちろん、

Microsoft Excel や Word など、COM サーバー機能を持つ他のアプリケーションを制御することが可能で

す VBA の動作メカニズムと利点 の項を参照してください。

また、Visual C++ 環境で ATL(アクティブ テンプレート ライブラリ) を使うと、ObjectARX アプリケーシ

ョンで定義した独自の処理を、COM サーバーとして公開することもできます。これによって、VBA プログ

ラマが、VBA 単体では実現できない機能を利用できるようになります。

Page 31: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

31

ここからは、再び、選択図形を赤色に変更する例を紹介していきます。

TRY5 コマンド:

C 言語によるカスタマイズ手法だった ADS からの機能を使って、AutoCAD の標準コマンドを呼び出し

ています。コマンドを呼び出す点では、AutoLISP で紹介した TRY1 コマンドと同等です。

static void AdskArxGuideTry5(void) { ads_name ename; ads_point pt; acedEntSel( _T("¥n オブジェクトを選択:"), ename, pt ); acedCommand( RTSTR, _T("CHPROP"), RTENAME, ename, RTSTR, _T(""), RTSTR, _T("C"), RTSTR, _T("RED"), RTSTR, _T(""), RTNONE ); }

TRY6 コマンド:

TRY5 コマンドと同じように AutoCAD の標準コマンドを呼び出しています。違いは、標準コマンドと

オプションを指定するために、リザルトバッファと呼ばれる構造体ポインタで構成されるリストを作成し

ている点です。

static void AdskArxGuideTry6(void) { ads_name ename; ads_point pt; acedEntSel(_T("¥n オブジェクトを選択:" ), ename, pt ); struct resbuf* pRb = acutBuildList( RTSTR, _T("CHPROP"), RTENAME, ename, RTSTR, _T(""), RTSTR, _T("C"), RTSTR, _T("RED"), RTSTR, _T(""), RTNONE ); acedCmd( pRb ); acutRelRb( pRb ); }

Page 32: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

32

TRY7 コマンド:

AutoLISP で紹介した TRY2 コマンドに対応する内容のプログラムが次の例です。AutoLISP では、個々

の情報を DXF グループコードとデータ値を括弧でグループ化した リスト で表現をしますが、C++ 言語では、リザルトバッファ構造体のポインタ リストで表現しています。

正しくトゥルーカラーに対応させるためには、DXF グループ コード 420 への対応も必要になります。

青字部分がこれに該当します。

static void AdskArxGuideTry7(void) { ads_name ename; ads_point pt; acedEntSel(_T("¥n オブジェクトを選択:"), ename, pt ); struct resbuf *pRb, *pWk; pRb = acdbEntGet( ename ); bool bFlag = true; for( pWk=pRb ; pWk->rbnext!=NULL ; pWk=pWk->rbnext ){ if ( pWk->restype == 62 ){ pWk->resval.rint = 1; // 1=赤 bFlag = false; } } if ( bFlag ){ pWk->rbnext = acutNewRb( RTSHORT ); pWk = pWk->rbnext; pWk->restype = 62; pWk->resval.rint = 1; // 1=赤 pWk->rbnext = NULL; } for( pWk=pRb ; pWk->rbnext!=NULL ; pWk=pWk->rbnext ){ if ( pWk->rbnext->restype == 420 ){ struct resbuf *pTc = pWk->rbnext; pTc = pWk->rbnext; pWk->rbnext = pWk->rbnext->rbnext; pTc->rbnext = NULL; acutRelRb( pTc ); } } acdbEntMod( pRb ); acutRelRb( pRb ); }

Page 33: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

33

TRY8 コマンド:

ObjectARX クラス ライブラリを用いた手法です。ActiveX オートメーションを利用した VBA の TRY4 マクロに似ています。COM と C++ クラス ライブラリをいう別の技術を利用しているにもかかわらず、

このような印象を受けるのは、どちらも “オブジェクト指向” なプログラムだからです。

static void AdskArxGuideTry8(void) { ads_name ename; ads_point pt; acedEntSel(_T("¥n オブジェクトを選択:"), ename, pt ); AcDbObjectId objId; acdbGetObjectId( objId, ename ); AcDbEntity* pEnt; acdbOpenAcDbEntity( pEnt, objId, AcDb::kForWrite ); pEnt->setColorIndex( 1 ); // 1=赤 pEnt->close(); }

AutoCAD で ObjectARX アプリケーションを使用する場合も、AutoCAD へのロードが必要です。通常、

コンパイルされた .arx ファイルが対象となりますが、AutoCAD 2000 から拡張子 .dbx を持つ オブジ

ェクト イネーブラ(Object Enabler) もロード出来るようになっています。カスタム オブジェクトとオブ

ジェクト イネーブラについては、後述しています。

ロードされた .arx ファイルは、ロード解除することもできます。AutoLISP とは異なり、.arx ファイル内で定義されたコマンドは、どのドキュメント上からでも利用出来ますが、.arx ファイル

内で利用されるグローバル変数はドキュメント毎に個別の値が保持されないことに注意してくだ

さい。ドキュメント毎に値を保持させる工夫をすることもできますが、ここではドキュメント レベルの変数とアプリケーション レベルの変数を意識する必要があるという点が重要です。このよ

うに、ObjectARX を利用するプログラマは、AutoCAD や C++ 言語の知識とは別に、アプリケ

ーション内部の振る舞いにも気を配らなければなりません。逆の考え方をすれば、より柔軟に様々

な手法を行使できるのも、ObjectARX の強みと言えます。

図形を選択してエンティティ名を取得

エンティティ名をオブジェクト ID に変換

オブジェクト IDでオブジェクトを

オープンしてポインタを取得

オブジェクトを赤色に変更

オブジェクトをクローズで更新

Page 34: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

34

カスタム オブジェクト

カスタム オブジェクト とは、C++ 言語のクラス継承機能を使って “派生” された、ObjectARX 固有のオリ

ジナル オブジェクトを指します。ObjectARX 以外の AutoCAD API ではカスタム オブジェクトを定義出

来ないため、最も ObjectARX らしい機能と言うことができます。

カスタム オブジェクトがどのように振る舞うかは、カスタム オブジェクトを作成するプログラマの一存で

決まります。たとえば、LIST[オブジェクト情報]コマンドでカスタム オブジェクトが選択された場合、どの

ような情報をコマンド プロンプト ウィンドウに表示するか、プログラマ次第で自由に決めることができま

す。同様に、MOVE[移動] コマンド、WBLOCK[ブロック書き出し]コマンドなどの AutoCAD 標準コマンド

に対して、どのように振る舞うかも決定できます。極端な場合、MOVE[移動] コマンドで選択されても、ど

こにも移動しないカスタム オブジェクトにしてしまうことも可能です。逆に言えば、AutoCAD の標準コマ

ンド毎に 1 つ 1 つ振る舞いを定義しなければならないので、非常に手間がかかるのもカスタム オブジェ

クトの側面です。

ここで 1 つの例を紹介します。このカスタム オブジェクトは、図面を ZOOM[ズーム] コマンドで拡大、縮

小しても、常に一定の大きさを保ちます。黄色の円状の図形が、この “マーカー” オブジェクトです。

また、点滅したり、カーソルが近づくと、作図の最に入力した文字をツールチップ上に表示したりします。

Page 35: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

35

もちろん、このマーカー オブジェクトをモデル空間などに作画するためのコマンドも必要になります。場

合によっては、設定用のユーザ インタフェースも必要です。

作画されたマーカー オブジェクトを、LIST[オブジェクト情報]コマンドで選択してみると、固有の情報を表

示します。

コマンド: LIST オブジェクトを選択: 認識された数: 1 オブジェクトを選択: ASDKMARKER 画層: "0" 空間: モデル空間 ハンドル = 5193 基点 ( 9309.127500 , 6089.745700 ) コメント 経路9

このオブジェクトの定義の中では、COPY[複写] コマンドでの複写や、EXPLODE[分解]コマンドでの分解を

禁止しています。このように、かなり細かい部分まで振る舞いを定義することができます。

コマンド: EXPLODE オブジェクトを選択: 認識された数: 1 オブジェクトを選択: ASDKMARKER を分解できません。

同様に、AutoLISP でリストを取得すると、マーカー固有の情報も、適切な DXF グループ コードでグルー

プ化してリストを返します。この情報も、カスタム オブジェクトをどう定義するかによって変化します。

また、AutoLISP 言語のリスト操作によって、マーカー図形を修正できる点のも注目してください。

コマンド: (entget (car (entsel))) オブジェクトを選択: ((-1 . <図形名: 7ef81dd8>) (0 . "ASDKMARKER") (330 . <図形名: 7eb7acf8>) (5 . "5193") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AsdkMarker") (90 . 1) (300 . "経路9") (10 9309.13 6089.75 0.0) (280 . 0) (281 . 0) (40 . 90.0))

このように AutoCAD の標準図形とまったく同じように、様々な振る舞い定義が可能なことがわかります。

Page 36: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

36

プロキシ オブジェクト

カスタム オブジェクトが図面に作画されると、AutoCAD が標準で持つオブジェクトと同様に認識されて扱

われます。ただし、これはオブジェクトの定義元である ObjectARX アプリケーションが、AutoCAD にロ

ードされている間のみ有効です。つまり、カスタム オブジェクトを定義した .arx ファイルがロードされて

いない状態では、AutoCAD はカスタム オブジェクトを正しく認識できません。このような状態のとき、カ

スタム オブジェクトは プロキシ オブジェクト に変化します。

カスタム オブジェクトがプロキシ オブジェクトになる状態には、次のような場面があります。

• カスタム オブジェクトを含む図面を開いた際に、カスタム オブジェクトを定義した .arx ファイル

がロードされていない。

• カスタム オブジェクトを持つ図面の編集中に、カスタム オブジェクトを定義した .arx ファイルが

ロード解除された場合。

カスタム オブジェクトを定義する ObjectARX をロード解除

Page 37: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

37

AutoCAD は、認識できないカスタム オブジェクト、すなわちプロキシ オブジェクトを検出すると、ダイ

アログ ボックスを表示してユーザにプロキシ オブジェクトの存在を知らせます。

一度プロキシ オブジェクトになってしまった場合、再度、そのカスタム オブジェクトを定義し

た .arx ファイルをロードすれば、カスタム オブジェクトとして再認識されます。プロキシオ ブジェクトになってしまっても、カスタム オブジェクト固有の情報を損失することはありません。

データの保護は、AutoCAD によって保証されています。

問題となるのは、カスタム オブジェクトを含んだ図面ファイルを、外注先などに再配布した場合です。配

布先では、AutoCAD を持っていてもカスタム オブジェクト を定義した .arx ファイルが存在していません。

このような場合、配布先で図面ファイルを開くと、カスタム オブジェクトはプロキシ オブジェクトになり

ます。

図面ファイルの配布先でのプロキシ オブジェクト化を抑止するために、オートデスクでは、「データベース / ユーザ インタフェース分離」という概念を取り入れています。これは、カスタム オブジェクトの定義に

必要な 2 種類の情報を、異なる .arx で分割して定義する考え方です。

Page 38: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

38

1 つは カスタム クラス定義部分のみを実装する .dbx ファイル、もう 1 つはユーザ インタフェースとコ

マンドのみを実装する .arx ファイル です。2 つのファイルは拡張子こそ異なりますが、どちらも DLL ファイルであるため、お互いに参照し合う形を確立できます。カスタム オブジェクトの作成と編集には、2 つの定義ファイルがロードされている必要があります。

両者がロードされた状態から、コマンドのみを定義した .arx ファイルをロード解除しても、AutoCAD はロ

ード中の.dbx ファイルのよってカスタム オブジェクトを認識できるので、プロキシ オブジェクトにして

しまうことはありません。編集や新規作成ができなくても、カスタム オブジェクトの振る舞いを AutoCAD が知ることができる点が重要です。

カスタム オブジェクトを販売しているサード パーティ デベロッパは、コマンド定義部分の .arx ファイル

を有償で、カスタム オブジェクトの定義部分の .dbx ファイルを無償で提供(Web ダウンロードなど)す

ることで、プロキシ オブジェクト化を防ぎ、カスタム オブジェクトの有効性を示しながら、アプリケーシ

ョンの販売をおこなうことができます。

Page 39: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

39

.NET API

AutoCAD .NET API は、もっとも新しい カスタマイズ API で、Microsoft が提唱する .NET テクノロジを

使って開発や実行できるよう設計されています。.NET テクノロジの基礎となるのは .NET Framework と呼

ばれるソフトウェア層です。

実は、AutoCAD 2010 をインストールすると、自動的に .NET Framework 3.5 SP1 が同時にインストール

されます。これは、AutoCAD 内部でも .NET テクノロジを使った機能が施されているためです。わかりや

すい例では、画層を管理するための [画層プロパティ管理] ダイアログや、ユーザ インタフェースをカスタ

マイズするための [ユーザ インタフェースをカスタマイズ] ダイアログも、.NET Framework が提供す

る .NET クラス ライブラリを利用して作られたものです。

.NET Framework が提供する機能は、開発者が利用可能な .NET クラス ライブラリと、共通言語ランタイ

ム(Common Language Runtime:CLR) と呼ばれる実行環境の 2 種類です。.NET についてさらに知りたい

方は、次の URL の参照をお勧めします。

.NETの基礎知識: http://msdn.microsoft.com/ja-jp/library/zw4w595w.aspx

.NET クラス ライブラリを使えば、最新のユーザ インタフェースの構築、XML Web サービスを使ったイ

ンターネットを介したデータベース アクセス、従来に比べて高速で安定した Web ベース アプリケーショ

ンなど、いままでより格段に進化したアプリケーションを、デバイスの種類に関係なくソース コードを共

有しながら開発が可能になります。

.NET を使った実装例 (WinForm を使用)

Page 40: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

40

AutoCAD は、.NET Framework クラス ライブラリが提供しない AutoCAD をコントロールするための機

能を、AutoCAD 専用の .NET API セットとして提供しています。これが AutoCAD .NET API です。

.NET クラス ライブラリを使ったアプリケーションの実行には、.NET Framework のもう 1 つの

機能である共通言語ランタイムが必須になります。AutoCAD 自身が .NET テクノロジを使って

いるため、AutoCAD .NET API を使った AutoCAD アプリケーションは、

NET Framework を別

にインストールする必要はありません。

AutoCAD 用の.NET アプリケーションを開発するには、一般的な .NET アプリケーションと同様に Microsoft が提供している Visual Studio を別途購入する必要があります。現状では、AutoCAD 2010 に同

梱される .NET Framework 3.5 SP1 を利用する Visual Studio 2008 SP1 を開発環境として利用することに

なります。ただし、AutoCAD の .NET アプリケーション開発は、ObjectARX 開発のように、サポートす

る Visual Studio のバージョンを限定していません。.NET Framework 3.5 をサポートする Visual Studio であれば、今後登場が予想される Visual Studio 2010 も開発環境として利用することができるはずです。

ObjectARX は、AutoCAD 2010 が使用する Microsoft Foundation Class ライブラリ(MFC) に依

存する共有ランタイムの衝突を防止するため、AutoCAD 自身が使用している MFC バージョン

を持つコンパイラ(Visual Studio 2008 SP1) のみを開発環境としてサポートしています。

いままでのアプリケーション(Exe、Dll…) .NET アプリケーション(Exe、Dll…)

Page 41: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

41

AutoCAD .NET API では、一般的な .NET アプリケーション同様、使用する開発言語を限定しません。Visual Studio .NET 標準で組み込まれている C++ 言語、Visual Basic 言語、C# 言語、J# 言語(Java) のいずれを

使っても、最終的に実行されるのは同じバイナリ実行形式になります。これは開発言語に左右されない、.NET テクノロジの利点の 1 つです。

AutoCAD の .NET API で作成されるファイルは DLL ファイルで、NETLOAD[.NET アプリケーション ロード]コマンドで AutoCAD にロードします。AutoCAD .NET API でも、他の AutoCAD API と同じように、

コマンドの定義やリアクタと呼ばれるイベント処理など、AutoCAD 一般の制御や作画が可能です。

AutoCAD 内で動作する .NET アプリケーションを作成するには、AutoCAD と同時にインストールされる acmgd.dll と acdbmgd.dll の 2 つのファイルを、Visual Studio で作成した “クラス ライブラリ” プロジェ

クトから参照する必要があります。作成された DLL ファイルは、共通言語ランタイムに管理される マネー

ジ アプリケーション なります。プログラミング手法は、もちろ “オブジェクト指向” なものになります。

実装する機能によっては、いままで ObjectARX でしか実現できなかった高度な機能を、Visual Basic の知

識しか持たない開発者でも実現できるようになります。言語知識でカスタマイズ可能な範囲が決定してしま

う従来の概念は、今後変化していくはずです。

現在のところ、.NET アプリケーション開発に関する詳細は、http://www.autodesk.com/objectarx から無償ダウンロード可能な ObjectARX SDK 内のドキュメントとしてのみ提供されています。

次に、Visual Basic と C# の 2 種類の言語を使って、選択図形の赤色への変更プログラムを紹介します。

どちらの言語を使っても、同じ中間コードが生成されるので、最終的な結果は同じです。

任意の開発言語を 中間言語に “ビルド”

CPU が直接解釈 できる実行形式を 実行時コンパイルで 生成します !

C++、C#、VB、Java の いずれかでプログラムを記述

Exe、Dll、…

Page 42: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

42

TRY9 コマンド:

C# で作成した標準コマンドとして、AutoCAD .NET API が持つ名前空間を使って実装されています。

いままで紹介した他の API プログラム例では、エラー処理について記載をしていませんでしたが、ここ

ではあえてエラー処理の部分まで記載しています。例外処理をしている点に注意してください。

[CommandMethod( "TRY9", CommandFlags.Transparent )] public static void Try9() { Database oDb = HostApplicationServices.WorkingDatabase; Editor oEd = Autodesk.AutoCAD.ApplicationServices.Application .DocumentManager.MdiActiveDocument.Editor; Transaction oTr = oDb.TransactionManager.StartTransaction(); try { PromptEntityResult oRlt = oEd.GetEntity("¥n オブジェクトを選択:"); Entity oEnt = (Entity)oTr.GetObject(oRlt.ObjectId, OpenMode.ForWrite); oEnt.ColorIndex = 1; oTr.Commit(); } catch( Autodesk.AutoCAD.Runtime.Exception oEx) { MessageBox.Show(oEx.Message, "例外エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } Finally { oTr.Dispose(); } }

TRY10 コマンド:

TRY9 コマンドを Visual Basic で置き換えたものです。同様に例外処理でエラーを処理しています。

<CommandMethod("TRY10")> _ Public Shared Sub Try10() Dim oDb As Database = HostApplicationServices.WorkingDatabase Dim oTr As Transaction = oDb.TransactionManager.StartTransaction Dim oEd As Editor = Application.DocumentManager.MdiActiveDocument.Editor Try Dim oRlt As PromptEntityResult oRlt = oEd.GetEntity(vbCrLf & "オブジェクトを選択:") Dim oEnt As Entity = oTr.GetObject(oRlt.ObjectId, OpenMode.ForWrite) oEnt.ColorIndex = 1 oTr.Commit() Catch oEx As Autodesk.AutoCAD.Runtime.Exception MsgBox(oEx.Message, MsgBoxStyle.Exclamation, "例外エラー") Finally oTr.Dispose() End Try End Sub

Page 43: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

43

新しい可能性 – サービス指向へ

.NET テクノロジの登場時に最も話題になったのは、XML Web サービスについての話題です。XML Web サービスは、ネットワークを介したアプリケーション間のさまざまな不都合を解消することができます。

コンピュータ間を XML 形式のデータが転送しあうことになりますが、最低限の情報だけをやり取りする

ため、LAN 上に常時接続してネットワーク負荷を高めてしまったり、クライアントを Web ブラウザに

して操作性を損ねてしまったりすることもありません。

クライアント側、サーバー側とも、アプリケーションは共通言語ランタイム上で処理されるので、安定し

て高速なサービスを、操作性を損なうことなく実現できます。もちろん、AutoCAD .NET アプリケーシ

ョンからも XML Web サービスを利用することができます。

Web サービスは、Web サーバー経由で公開され、クライアントからは関数呼び出しのかたちで使用する

ことができるので、クライアント プログラムから違和感なく利用することができるようになります。

ネットワークをサービスでつなぐ手法が、システム連携をより高度なものに変えていきます。.NET API を利用すれば、ネットワーク間の端末として AutoCAD を他のソフトウェアやシステムと連動させることも夢

ではありません。

Page 44: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

44

図形に固有の情報を付加する

API によるカスタマイズが大規模になると、固有の情報を図形に付加して、あとで参照するなどの処理が必

要になることがあります。このような処理が実現できると、より高度なアプリケーションを実現できるよう

になるはずです。ここでは、AutoCAD API を用いた図形への情報付加の方法を、簡単で一般的な順に紹介

します。付加されたデータがわかるように、同時に AutoLISP リストも紹介していますが、他の API でも

制御できます。

ブロック属性

BLOCK[ブロック登録]コマンドでブロックを作成する際に、ブロックに含む図形として属性定義図形を一

緒に定義します。属性定義図形は、ATTDEF[属性定義] コマンドで作画することができます。属性定義は

文字図形なので、固有の意味を持たせることができます。また、1 つのブロック定義に複数の属性定義を

含ませることもできます。属性定義を含むブロックを INSERT[ブロック挿入] コマンドで挿入する際に、

ブロック毎に固有の文字を入力して、値を表示させることができます。属性定義は、非表示状態を指定す

ることもできるので、ユーザの目に触れない属性をブロックに持たせることもできます。属性定義は、ブ

ロック定義に含まれるものなので、同じ名前のブロックであっても、異なる値をもったブロックを複数同

じ図面に配置できます。もちろん、ここで説明したすべての操作を API で制御することが可能です。た

だし、ブロック図形しか対象にできない点に注意してください。また、最もメインテナンスし易い反面、

コマンド操作によってユーザが属性定義を変更してしまう危険性もあります。

拡張エンティティ データ

拡張エンティティ データは、AutoCAD GX5 から導入された、初の API 制御のみで可能な固有データの

付加手法です。AutoCAD の標準コマンドは、付加された拡張エンティティ データの情報を表示しないの

で、これによって、ユーザから付加された固有データを隠蔽して保持することができるようになりました。

拡張エンティティ データを付加するには、まず、図面毎に拡張エンティティ データ用の “アプリケーシ

ョン名” を呼ばれる名前を登録します。その名前で固有のデータ(複数可能) をグループ化することで、

個々の図形にデータを付加します。実際のデータ付加には、整数、実数、文字列などのデータ タイプに

よって、特別な DXF グループ コード 1000 から 1071 までを指定することが規定されています。次の

リストは、拡張エンティティ データが付加された線分のリストを AutoLISP で表示させたものです。

コマンド: (entget (car (entsel)) (list "*")) オブジェクトを選択: ((-1 . <図形名: 7ef6d028>) (0 . "LINE") (330 . <図形名: 7ef58cf8>) (5 . "FD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 757.283 464.255 0.0) (11 984.734 696.05 0.0) (210 0.0 0.0 1.0) (-3 ("MYDATA" (1002 . "{") (1070 . 38) (1040 . 175.0) (1040 . 63.0) (1000 . "Nice Guy") (1002 . "}"))))

拡張エンティティ データは、異なるアプリケーション名を用いることで、1 つの図形に複数のグ

ループ分けされたデータを付加できます。ただし、1 つの図形に付加できる最大サイズは 16 Kバイトまでです。なお、データを区別する目的で、図形毎に異なるアプリケーション名を使用す

るべきではありません。データアクセスの速度が著しく低下する可能性があります。

Page 45: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

45

拡張ディクショナリ

拡張エンティティ データとは別に、図面内の図形には拡張ディクショナリ領域が用意されています。こ

の領域には、DXF グループ コード 1 から 369 の範囲でグループ化した固有のデータを付加すること

ができます。拡張ディクショナリには、1 つの図形に付加できるサイズに上限はありません。この方法も、

API でのみ可能なデータ付加の手法です。次のコマンド プロンプトのイメージでは、線分に付加された

拡張ディクショナリのデータを表示させる手順とデータを示しています。最終的に表示されるリストで、

青字の文字列と実数が固有のデータであることがわかります。

コマンド: (setq data (entget (car (entsel)))) オブジェクトを選択: ((-1 . <図形名: 7ef58f98>) (0 . "LINE") (5 . "F3") (102 . "{ACAD_XDICTIONARY") (360 . <図形名: 7ef6d008>) (102 . "}") (330 . <図形名: 7ef58cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 501.586 611.356 0.0) (11 739.444 807.49 0.0) (210 0.0 0.0 1.0)) コマンド: (setq xname (cdr (assoc 360 data))) <図形名: 7ef6d008> コマンド: (setq xdict (entget xname)) ((-1 . <図形名: 7ef6d008>) (0 . "DICTIONARY") (330 . <図形名: 7ef58f98>) (5 . "F9") (100 . "AcDbDictionary") (280 . 1) (281 . 1) (3 . "TEST") (360 . <図形名: 7ef6d010>)) コマンド: (entget (cdr (assoc 360 xdict))) ((-1 . <図形名: 7ef6d010>) (0 . "XRECORD") (5 . "FA") (102 . "{ACAD_REACTORS") (330 . <図形

名: 7ef6d008>) (102 . "}") (330 . <図形名: 7ef6d008>) (100 . "AcDbXrecord") (280 . 1) (1 . "TEST XRecord") (40 . 123.45))

拡張ディクショナリには、通常 XRECORD という単位で情報を付加します。これとは別に、図

形ではないカスタム オブジェクトを付加させることもできます。

カスタム オブジェクト

固有の情報を付加させるための究極の方法です。オブジェクト自身を新規に作成してしまうので、そのオ

ブジェクトがどのようなデータを持つのか、自由に設定することができます。ただし、それらデータをど

のように DWG ファイルや DXF ファイルに入出力するかまで定義しなければなりません。また、カス

タム オブジェクトを定義した ObjectARX ファイル(拡張 .arx または .dbx) がロードされていないと、

プロキシ オブジェクトになってしまうので、データを正しく認識できません。次の AutoLISP リストは、

カスタム オブジェクト項で紹介したマーカー オブジェクトがプロキシ オブジェクトになった際のもの

です。マーカー の情報が一切表示されていないことがわかります。

コマンド: (entget (car (entsel))) オブジェクトを選択: ((-1 . <図形名: 7ef81dd8>) (0 . "ACAD_PROXY_ENTITY") (330 . <図形名: 7ef75cf8>) (5 . "5193") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0"))

Page 46: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

46

AutoCAD API を使ったユーザ事例

AutoCAD API を使ったユーザ事例は、オートデスクの パンフレットや Web サイトから参照する

ことができます。Web サイトには、ユーザ事例パンフレット の PDF 版もポストされているので、

ダウンロードして印刷することもできます。

API カスタマイズのユーザ事例サイト URL:http://www.autodesk.co.jp/developcase

Page 47: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

47

ファイル定義 によるカスタマイズ

AutoCAD 内で使用する図面要素には、さまざまな定義情報があります。最も一般的な定義情報には、線種

やハッチング パターンがあり、専用の定義ファイルに定義情報が格納されています。AutoCAD では、この

定義ファイルを直接編集することで、独自の線種やハッチング パターンを作成することができます。

線種定義ファイル

AutoCAD で様々な線種を利用するには、線種定義ファイル(拡張子 .lin ) から使用する線種を選択して、図

面にロードする必要があります。線種のロードには、LINETYPE[線種設定] コマンドを使用します。

AutoCAD には、ほとんどのケースに対応できるように、標準の線種定義ファイル acad.lin と acadiso.lin がインストールされていて、100 種類を超える線種が定義されています。この定義にない独自の線種定義をす

ることも可能です。独自の線種(カスタム線種) を作成するためには、標準の線種定義ファイルにカスタム線

種の定義を追記するか、まったく新しく線種定義ファイル(拡張子 .lin) を作成して、そこに定義していくか、

方法を選択することができます。

線種定義はシンプルな規則に沿って記述されています。次の線種定義の例は、新しい線種定義ファイル Example.lin の定義内容です。ここでは、5 点鎖線を表す MyLine 線種が定義されています。

1 つの線種定義は、カンマ(,) 区切りで構成されていて、それぞれ次のような意味を持っています。線種定

義中の改行は無視されます。

;; サンプル線種定義 *MyLine,____________ _ _ _ _ _ ____________ _ _ _ _ _ ____________ _ _ _ _ _ A,3.0,-0.25,0.25,-0.25,0.25,-0.25, 0.25,-0.25,0.25,-0.25,0.25,-0.25

; 以降の行はコメント文字 * 以降の文字が線種名 線種パターンの説明に利用される文字列

A が線種定義の始まりを表す A 以降のカンマ区切りはプラス値が実線部と その長さ、マイナス値が空白部とその長さ

Page 48: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

48

線種には、定義中に文字を挿入することもできます。次の線種は、鎖線中の空白部に “こ”、 “ん”、 “に”、 “ち”、 “わ”、の文字を挿入した MyTextLine 線種の定義部分です。

基本的な部分は、 MyLine 線種と同様です。挿入文字をどの文字スタイルで表示するかの情報や、文字の縮

尺や配置に関する情報が “[“ から “]” の間に埋め込まれている違いが見られます。ここまでの線種、MyLine と MyTextLine を用いて作画した図形は、下図のように線種定義に沿って意図したとおり描かれるはずです。

より複雑な線種を定義するために、定義にシェイプ(拡張子 .shx) を埋め込むこともできます。シェイプの

詳細は、シェイプ の項を参照してください。次の線種定義は、標準シェイプ ファイル ltypeshp.shx 内の “BOX” シンボル シェイプを参照した FENCELINE2 線種の定義です。文字を挿入する替わりにシェイプが

挿入さていることがわかります。

*MyTextLine,_____こ_ん_に_ち_わ_____こ_ん_に_ち_わ_____こ_ん_に_ち_わ_____ A,1.0,["こ",STANDARD,S=0.5,R=0.0,X=0.0,Y=-0.2],-0.5, 0.5,["ん",STANDARD,S=0.5,R=0.0,X=0.0,Y=-0.2],-0.5, 0.5,["に",STANDARD,S=0.5,R=0.0,X=0.0,Y=-0.2],-0.5, 0.5,["ち",STANDARD,S=0.5,R=0.0,X=0.0,Y=-0.2],-0.5, 0.5,["わ",STANDARD,S=0.5,R=0.0,X=0.0,Y=-0.2],-0.5

[ が挿入文字の始まり ] が挿入文字の終わり

挿入文字の文字スタイル

縮尺、回転、XとYオフセット

*FENCELINE2,Fenceline square ----[]-----[]----[]-----[]----[]--- A,6.35,-2.54,[BOX,ltypeshp.shx,x=-2.54,s=2.54],-2.54,25.4

シェイプ名

シェイプ定義を含むシェイプファイル

Page 49: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

49

シェイプ ファイル

AutoCAD 内で使用するシェイプ ファイル(拡張子 .shx) には、文字フォントとして使用されるシェイプ フォントと、シンボルとして使用されるシェイプの 2 種類があります。どちらのシェイプ ファイル(拡張

子 .shx) も、シェイプ定義ファイル(拡張子 .shp) を作成してコンパイル作業をおこなうことで、作成する

ことができます。どちらの場合も、1 つのシェイプ ファイルに複数の文字フォント、あるいは、シンボル

を定義することが可能です。

文字フォントとして使用されるシェイプと、シンボルとして使用されるシェイプは、その定義内容によって

AutoCAD が自動的に区別します。文字フォントは、STYLE[文字スタイル管理] コマンドによって文字スタ

イルを設定する際に利用されます。シンボル シェイプは、LOAD[シェイプ ファイルのロード] コマンドで

図面にロード後、SHAPE[シェイプ挿入] コマンドで図面へシンボル図形として挿入して利用されます。

いずれのシェイプも、シェイプ定義ファイル(拡張子 .shp) を作成して定義を加えていくことで、カスタム シェイプを作成することができます。ただ、シェイプ フォントの場合、文字コードに対応する形状をすべ

て定義することになるため、すぐにカスタマズするというわけにはいきません。ここでは、カスタム線種に

も利用できるシンボル シェイプについて説明することにします。

シェイプで最も重要なのは、シェイプの形状をどのように定義するかについての情報です。これには、構成

線分の大きさ(長さ) とその方向が含まれます。シェイプ定義では、線分の方向を 16 方向に分け、次のよう

な文字で表現します。

1 つの線分は、基本的に 3 文字で構成されていて、最後に方向をこの文字 1 文字で表現します。次の内容

は、単純なシェイプ “SAMPLE” の定義例です。

*1,4,SAMPLE1 024,010,02C,0

シェイプ線分のバイト数

* 以降の文字はシェイプファイル内で 重複しないシェイプ番号

シェイプ名

終端子 0

16 進数を表す 0+長さの数字(最大 15)+方向の文字

Page 50: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

50

ここでは、定義バイト数を 4 としていますが、これは、024, 010, 02C, の実際の形状定義と、終端子であ

る 0 の数と考えます。この定義を含むシェイプ定義ファイル(拡張子 .shp) をコンパイルして、SHAPE[シェイプ挿入] コマンドで図面に挿入すると、次のような解釈で形状が作画されます。

シェイプ定義には、16 進数で 1 から E までの制御コードが用意されているので、それらを組み合わせて、

より複雑なパターンを定義していくこともできます。

制御コード 意 味

0 シェイプ定義の終了。

1 シェイプ描画の開始。

2 シェイプ描画の終了。これ以降指定されたベクトルは作画されない。

3 尺度係数。指定した数値で除算された値を、これ以降の尺度係数としてベクトルに反映される。

4 尺度係数。指定した数値で積算された値を、これ以降の尺度係数としてベクトルに反映される。

5 定義中の座標時の一時記憶を指定。

6 定義中の座標時の一時記憶を復元。

7 シェイプ番号でサブシェイプを指定。

8 現在の位置からの相対位置を X と Y のペアで指定。括弧 ( ) の使用も可能。

9 現在の位置からの相対位置を X と Y のペアで連続指定。終端に (0,0) の指定の必要あり。

A 円、円弧の指定。

B 自由円弧の指定。

C 現在の位置からの相対位置を X と Y のペアで指定し、ふくらみを指定。3 要素に括弧 () の使用も可能。

D 現在の位置からの相対位置を X と Y のペアとふくらみで連続指定。終端に (0,0) の指定の必要あり。

E 縦書きフォントフラグ。

長さ 2、方向 C 長さ 2、方向 4

長さ 1、方向 0

Page 51: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

51

制御コード 1 と 2、9 を使用した単純な定義例として、次のような記述が考えられます。これらは、1 つのシェイプ定義内で混在して使用することもできます。

ハッチング パターン ファイル

HATCH[ハッチング] コマンドを使って配置するハッチング パターンは、拡張子 .pat のハッチング パター

ン定義ファイルに定義されています。AutoCAD では、標準で acad.pat と acadiso.pat の 2 つのハッチン

グ パターン定義ファイルが用意されていて、複数のパターンが定義されています。

*4,6,SAMPLE2 024,2,010,1,02C,0 *5,12,SAMPLE3 9,(1,1),(1,-1),(-1,-1),(-1,1),(0,0),0

SAMPLE3 シェイプ

SAMPLE2 シェイプ

Page 52: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

52

標準の定義にない独自のハッチング パターン定義を作成することも可能です。独自のハッチング パターン

を作成するには、標準のハッチング パターン定義ファイルに定義を追記するか、まったく新しくハッチン

グ パターン定義ファイル(拡張子 .pat) を作成して、そこに定義していく方法を選択できます。

独自のハッチング パターン定義ファイルを作成した場合は、仕様により、ファイル名と一致した

ハッチング パターン名を、ファイル内に 1 つしか定義できません。

ハッチング パターン定義は、線種定義同様、シンプルな規則に沿って記述されています。次のハッチング パターン定義は、新しい定義ファイル MyHatch.pat の例です。ここでは、30 度に傾斜した連続線を 1.0 間隔で作画する MyHatch パターンが定義されています。このファイルは、独自に新しく作成した定義ファイ

ルであるため、ファイル名とパターン名を同じにする必要があります。

赤い矩形を境界図形として、MyHatch パターンを角度 0、尺度 1 で配置すると、次のようになります。

;; サンプル ハッチング パターン定義 *MyHatch, Pattern sample 30, 0, 0, 0, 1.0

; 以降の行はコメント文字 * 以降の文字がパターン名 説明に利用される文字列

傾斜角度 X 原点 Y 原点 パターン線方向の変位 (破線の場合のみ有効)

パターン線垂直方向の変位

(パターン線の間隔)

線分傾斜 30 度

線分間隔 1.0

線分方向変位 0.0

Page 53: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

53

ハッチング パターン定義では、線分に破線を用いることもできます。この場合、線分が引かれる部分と空

白の部分をプラスの値とマイナスの値で区別し、それぞれの長さを数値で指定します。長さ 0 の場合は、

点が作画されます。次の定義は、MyDashHatch.pat ファイルの MyDashHatch パターンと、実際の配置イ

メージです。破線指定と線分方向の変位以外は、MyHatch パターンと同じです。

1 つのハッチング パターン定義を、複数のパターン線で構成することもできます。ここでは、パターン線

の原点位置を変化させることで、パターン定義内での各パターン線の相対位置を変化させていきます。次の

ハッチング パターン定義では、正方形を作画するようなパターンを描きます。

*MyDashHatch, Dashed pattern sample 30, 0, 0, 1.0, 1.0, 0, -1.0, 1.0, -1.0

パターン線方向の変位 1.0

点 長さ 1.0 の空白 長さ 1.0 の実線 長さ 1.0 の空白

*MyMHatch, Multiform line pattern sample 0, 0, 0, 0.0, 1.0, 1.0, -1.0 90, 1.0, 0, 0.0, 1.0, 1.0, -1.0 180, 1.0, 1.0, 0.0, 1.0, 1.0, -1.0 270, 0, 1.0, 0.0, 1.0, 1.0, -1.0

Page 54: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

54

コマンド エイリアス

AutoCAD の操作に慣れてくると、リボンやメニューからコマンドを選択せずに、コマンド プロンプト ウィンドウに省略コマンド名を直接入力するユーザもいることでしょう。この省略したコマンド名のことを、

コマンドの別名という意味で “コマンド エイリアス” と呼んでいます。

たとえば、C と入力すると、CIRCLE[円] コマンドが実行されるようになっています。このような、コマン

ド エイリアスの定義は、acad.pgp ファイルで定義されています。ユーザは、自由にコマンド エイリアス

を登録したり、編集したりすることができます。

acad.pgp ファイルは、テキスト形式で保存されているため、Windows の “メモ帳” (notepad.exe) で編集可

能です。AutoCAD のメニューから開くこともできます。

[2D 製図と注釈] ワークスペース、[3D モデリング] ワークスペースともに、[管理] リボン タブの [カスタ

マイズ] リボン パネルには、acad.pgp ファイルを直接開くコマンドが組み込まれています。

定義は単純です。コマンド エイリアスと、そのエイリアスが入力された際に実行するコマンド名を

コマンド エイリアス名 , *コマンド名

の行形式で追加するだけで、新しいコマンド エイリアスを定義することができます。コマンド エイリアス

は、acad.pgp 内で他のエイリアスと重複しないようにしてください。AutoCAD の起動中に acad.pgp ファイルを変更して、即座にコマンド エイリアスを有効にする場合は、必ず REINIT[再初期化] コマンドを実

行してください。

; [AutoCAD Command Aliases] 3P, *3DPOLY A, *ARC AA, *AREA : Z, *ZOOM MC, *MYCOMMAND

API で定義したカスタム コマンドのコマンド エイリアス

も定義できます。この例では、MC と入力すると MYCOMMAND コマンドが実行されます。

Page 55: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

55

ボーナス ツール

AutoCAD 2010 には、英語版の AutoCAD Express Tools が、ボーナス ツールとして提供されています。こ

のツールは、日本ではサポート対象外ですが、60 以上の優れた作画、編集ツールが利用できます。

Express Tools のインストールは、AutoCAD のインストール中に指定する必要があります。インストレー

ション ウィザード中に [環境設定] ボタンをクリックして、次のような画面が表示されたら、”Express Tools” にチェックします。

AutoCAD 2010 のインストール後に Express Tools を追加インストールするには、コントロール パネルから プログラムの追加と削除(Windows XP)、プログラムと機能(Windows Vista) からメイン

テナンス モードでインストーラを起動して、追加インストールの画面が表示されます。

Express Tools のインストール後に AutoCAD 2010 を起動すると、専用のリボン タブが表示されます。こ

の中には、定義ファイルのカスタマイズをサポートする機能が提供されています。

コマンド エイリアス エディタ

線種定義作成ツール シェイプ定義作成ツール

Page 56: AutoCAD 2010 機能ガイド カスタマイズimages.autodesk.com/apac_japan_main/files/autocad_2010... · 2013-07-17 · AutoCAD でカスタマイズできる範囲や手法を簡単にまとめると、パーソナライズ、プロセスのカスタマイ

56

コマンド エイリアス エディタ

このツールは ALIASEDIT コマンドを提供して、ダイ

アログ ボックスを使った acad.pgp ファイルの編集

を可能にします。

変更したい acad.pgp ファイルを [File] メニューの [Open] で開いて、編集をおこなえます。

なお、AutoCAD 2010 の acad.pgp ファイルは、既定

値では、ローミング フォルダに格納されています。

線種定義作成ツール

このツールは、モデル空間に作画した線分の状態(直線状の実線とブランクの連続) を選択して、自動的に

線種定義ファイル (拡張子 .lin) を作成します。選択した図形にシェイプや文字が含まれと、その情報も

線種定義の情報に埋め込みます。その入力手順は次のようになります。

コマンド: MKLTYPE <ファイルダイアログで線種定義ファイル名を入力> Enter linetype name: <線種名を入力> Enter linetype description: <線種の説明> Specify starting point for line definition:<範囲の始点を指定> Specify ending point for line definition:<範囲の終点を指定> オブジェクトを選択:<線種定義の形状取得図形を選択>

シェイプ定義作成ツール

このツールは、モデル空間に作画した図形群を選択して、自動的にシェイプ定義ファイル(拡張子 .shp) を作成後、すぐに使用可能なシェイプ ファイル(拡張子 .shx) をコンパイルして用意します。

コマンド: MKSHAPE <ファイルダイアログでシェイプファイル名を入力> Enter the name of the shape: <シェイプ名を入力> Enter resolution <128>:<解像度を入力> Specify insertion base point:<挿入基点を指示> オブジェクトを選択:<シェイプの形状取得図形を選択> Determining geometry extents...Done. Building coord lists...Done. Formating coords.../Done. Writing new shape...Done. シェイプ/フォント ファイルをコンパイル中 コンパイル成功。出力ファイル ****.shx は *** バイトです。