SeaGate HomePage 別館
本館 別館 ブログ
 
トップページ
第01回
第02回
第03回
第04回
第05回
第06回
第07回
第08回
第09回
第10回
第11回
第12回
第13回
第14回
おまけ
VBAではじめるAutoCADカスタマイズ VBAではじめるAutoCADカスタマイズ
第2回 ActiveXオートメーションとオブジェクトモデル

■ はじめに

今回は、ActiveXオートメーションとAutoCADのオブジェクトモデルについて解説します。正直なところ筆者にも少々荷が重い話ではあるのですが、話をAutoCAD VBAに限定すれば何とかなりそうです。VBAの背後にあるこれらの仕組みを把握しておくと、VBAプログラミングを理解するのがラクになります。今すぐには理解できなくても構いませんので、一通り目を通してみてください。難しい技術仕様などは理解していなくても作れてしまうところが、VBAプログラミングのよいところでもあります。

■ ActiveXオートメーション

AutoCADを使いこなしている皆さんなら、ExcelからAutoCADを操作して図面を描かせたり、その反対にAutoCADの図形情報をもとにExcelで作表したりすることができるのをご存知だと思います。これはAutoCADやExcelが、ActiveXオートメーションと呼ばれる技術にもとづいて作成されたアプリケーションだからです。

ActiveXとは、Windows上で動作するソフトウェア同士がそのソフトウェアの作成に使用されたプログラミング言語に依存せず、コンピュータ内部やネットワークを通じて情報の交換を行うことができるようにするための技術仕様のことです。また、オートメーションとは文字通り処理を自動化するということで、アプリケーションが実行することができるさまざまな機能をActiveX技術によって外部から制御することで自動化を図る仕組みのことです。

ActiveXでは、アプリケーション自身が持つ機能の公開方法とその利用方法(インターフェイス)が決められているので、ActiveXオートメーションに対応したアプリケーションであればExcelやWordなどのVBAを搭載したアプリケーション、Visual BasicやVisual C++で作成されたプログラムなどから、統一された手順で簡単にデータの交換やアプリケーションの操作を行うことができます。

■ ActiveXとVBA

ActiveXオートメーションでは、ネットワークにおけるクライアントコンピュータとサーバコンピュータのように、機能を公開する側をActiveXサーバ、公開されたActiveXサーバの機能を利用する側をActiveXクライアントといいます。

このような、ActiveXクライアントとサーバの関係をアプリケーション内部に構築し、アプリケーション単独でも自動処理を行えるようにしたものがVBA環境ということになります。ですから、AutoCAD VBAでプログラミングするということは、AutoCAD自身に組み込まれたVBAというActiveXクライアントから、ActiveXインターフェイスを通してActiveXサーバが公開するAutoCADの機能を操作するということになります。

ただし、操作できるのはAutoCADが持つすべての機能というわけではなく、Autodesk社がActiveXの仕様にもとづいて整理、限定して公開しているものだけです。そのためキメ細かな制御を行うには限界があることも事実ですが、通常考えられるような自動処理に必要な機能は充分にそろっていますので、VBAプログラムを作成する上で困ることはほとんどないと思います。

ActiveXオートメーションの概念
ActiveXオートメーションの概念

■  オブジェクトモデル

ActiveXサーバは、アプリケーションを用途や機能ごとに分類されたオブジェクトと呼ばれる基本的な要素の集合体として公開しています。オブジェクトとは、アクセスや操作可能な対象物といったような意味で、個々のオブジェクトは相互に関連しながら独立した機能や属性を持っています。AutoCADではAutoCADそのものも1つのオブジェクト、図面や画層、線種や図形などもそれぞれ1つのオブジェクトで、個々のオブジェクトにはAutoCADが実行することができる機能やデータがグループ化されて割り当てられています。

これらのオブジェクトの多くは、図に示すようなApplicationオブジェクトを頂点とする階層構造を持ちます。このようなオブジェクト間のつながりや構成を定義した、いわばアプリケーションの設計図をオブジェクトモデルと呼びます。オブジェクトモデルはAutoCADの内部が実際にどのように作成されているかは別として、Windows上に表示されているAutoCADのウィンドウ構成、画層や図形などのデータの管理方法に似せて設計されています。

AutoCADオブジェクトモデル
AutoCADオブジェクトモデル
この図はAutoCADオブジェクトモデルの一部を抜粋したものです。オブジェクトモデルの全体像は[開発者用ヘルプ]の[ActiveX/VBAリファレンス]-[オブジェクトモデル]に掲載されています。

コレクションオブジェクト

コレクションオブジェクトとは、図中のDocumentsコレクションのように複数のオブジェクト(この場合はDocumentオブジェクト)をひとまとめにして管理したり、一括して処理を行ったりするための特殊なオブジェクトで、個々のオブジェクトにはコレクションオブジェクトを介してアクセスすることができます。

通常コレクションオブジェクトは、DocumentsやLayersのように管理しているオブジェクトの名前の複数形で表記され、AutoCADの[開発者用ヘルプ]に掲載されたオブジェクトモデル図では四角形で表現されています。

例えば、人間から見るとAutoCADはデスクトップ上に表示されたメインウィンドウの中に複数の作図ウィンドウ(図面)があり、1つの図面には1つのモデル空間といくつかの画層、またその中にいくつかの図形や文字などが作図されているように見えますが、このような関係はAutoCADのオブジェクトモデルでも同様で、Applicationオブジェクトの中には複数のDocumentオブジェクトがあり、1つのDocumentオブジェクトには1つのModelSpaceコレクションといくつかのLayerオブジェクト、またその中にいくつかの個々の図形や文字列などに対応するオブジェクトが存在するというような構成になっています。

ですから、AutoCADを終了する場合は、AutoCAD全体を表わすApplicationオブジェクトに対して自分自身を終了するよう命令することになりますし、図面をファイルに保存する場合は、Documentオブジェクトに対して自分自身をファイルに保存するよう命令することになります。

また、オブジェクトには複雑な構造のデータを表現するため、階層構造には属さず独立して設けられているものもあります。図中のAcCmColorオブジェクトは色を表わすオブジェクトで、RGB値や色名、カラーブック名、カラーインデックスなどのさまざまな形式で色を扱うことができ、色を表わす汎用的なデータとしてさまざまなAutoCADのオブジェクトで使用されます。

AutoCADとオブジェクトモデルの対応関係
AutoCADとオブジェクトモデルの対応関係
この図はオブジェクトモデルがAutoCADの外観などと似ていることを示しているものであり、実際には必ずしも1対1に対応しているわけではありません。

■ 最後に

今まで見てきたように、VBAとAutoCADのオブジェクトはそれぞれ別個の存在です。ですからVBAでAutoCADを操作するという処理は、AutoCADが公開するオブジェクトが持つ機能とVBAというプログラミング言語でオブジェクトを操作する方法とに分けて考えることができます。つまり、一度VBAでオブジェクトを操作する方法を習得してしまえば、AutoCADであろうとExcelであろうとActiveXオートメーションに対応したアプリケーションであれば、同じような手順で操作できるというわけです。
SeaGate
コレクション



inserted by FC2 system