AutoCAD LTを利用できる新発想システム開発ツール! 安全と信頼の完全自社開発製品! |
オブジェクトの基本操作
|
オブジェクトの操作 |
|||||||||||||||||||||||||||||||||||||||||||||
LT VB-COMでは、AutoCAD LTのコマンドを使用せずに図面データベース内部のオブジェクトを直接操作することができます。 AutoCAD LTの図面データベース内には、以下の図のように、「図面データベース オブジェクト」、「シンボルテーブル オブジェクト」、「シンボルテーブルレコード オブジェクト」、「図形オブジェクト」などの種類が存在します。 LT VB-COMではこれらのオブジェクトをすべて操作することが可能です。これらのオブジェクトを操作するためには、操作用の関数が用意されています。そのもっとも基本となる関数が以下の「cad」関数です。 ------------------------------------------------------------------------- es=obj.cad("オブジェクト名",オブジェクトID ,"命令",設定データ,取得データ) ------------------------------------------------------------------------- (詳細は「cad(オブジェクト基本操作)」を参照してください) オブジェクトIDを持つ図面データベース内のすべてのオブジェクトは、この「cad」関数で操作が可能です。(図面データベース内で、この「cad」関数が使用できないのは、「図面データベース オブジェクト」だけです。) また、オブジェクト操作によっては引数の「オブジェクトID」や「オブジェクト名」などが不要な操作もあります。そのため、各オブジェクトの操作に適したより便利な関数を提供しています。以下にオブジェクトの種類ごとに使用できる関数を紹介します。
図面データベース オブジェクトの操作: 図面データベース オブジェクトは、図面データベース全体を管理している、図面データベース内に1つしか存在しない特別なオブジェクトです。そのため操作は通常のオブジェクト操作で使用する「cad」関数を使用するのではなく、図面データベース オブジェクトを操作する専用の「db」関数を使用します。 図面データベース オブジェクトを操作したい場合には、この「db」関数を利用することで、何の準備もなく図面データベース オブジェクトを直接操作することができます。 例)図面データベース中のオブジェクトの数を取得 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- シンボルテーブル関連の操作: シンボルテーブル関連の操作は、シンボルテーブル オブジェクトとその要素であるシンボルテーブルレコードオブジェクトの操作になります。多くの場合、各シンボルテーブルレコード オブジェクトの操作をするために、シンボルテーブル オブジェクトを利用します。 シンボルテーブルには、図の画層を含め以下のような種類があります。 AcDbViewportTable(ビューポートテーブル) 各シンボルテーブルには、それぞれその要素となるシンボルテーブルレコード オブジェクトが存在しています。シンボルテーブルレコード オブジェクトの種類はシンボルテーブル オブジェクトの種類とまったく同じです。 AcDbViewportTableRecord(ビューポートテーブルレコード) 図面データベースの情報を抽出する場合には、このシンボルテーブルレコード オブジェクトから、各シンボルテーブルレコードの情報を抽出します。 シンボルテーブルレコード オブジェクトの検索には図面データベースを検索し、シンボルテーブル オブジェクトから検索する方法と、図形の特性として保管されている情報(例えば、「画層」や「線種」など)からシンボルテーブルレコード オブジェクトを検索する方法があります。以下にそれぞれの方法について説明します。 テーブルからレコード検索:
------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- 図形からレコード検索:
------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- 図形オブジェクトの操作: 図形オブジェクトの操作は主にモデル空間上にて行なわれます。モデル空間上の図形オブジェクトは、「モデル空間("*Model_Space")」という名前のブロックテーブルレコード オブジェクトに「つながって」いる図形オブジェクトです。そのため、図面データベース内の操作として、この図形オブジェクトを操作する場合は、ブロックテーブルレコード オブジェクトから図形オブジェクトを検索する手法になりますが、LT VB-COMではユーティリティを使用することでAutoCAD LTの作図画面上の図形の図形オブジェクトを直接指定することも可能です。そこでここでは、図形オブジェクトを操作するための基本として、図面データベース内のブロックテーブルレコード オブジェクトから図形オブジェクトを取得する方法と、AutoCAD LTの作図画面上からユーティリティによって、直接図形オブジェクトを取得する方法について説明します。 ブロックテーブルレコードから図形を検索:
------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- 作図画面上から図形を指定:
------------------------------------------------------------------------- Sub Sample() -------------------------------------------------------------------------
|
オブジェクトの作成 |
||||||||||||||||||
LT VB-COMでは、AutoCAD LTのコマンドを使用せずに図面データベース内部に直接オブジェクトを生成することができます。LT VB-COMで作成できるオブジェクトは、図面データベース内でも「シンボルテーブルレコード オブジェクト」と「図形オブジェクト」になります。 LT VB-COMの機能でオブジェクトを生成する場合、オブジェクトを生成するための専用の関数を使用します。そのもっとも基本となる関数が以下の「make」関数です。 ------------------------------------------------------------------------- es=obj.make("オブジェクト名", "名前")設定データ,親データ,オブジェクトID ) ------------------------------------------------------------------------- (詳細は「make(各種オブジェクト作成)」を参照してください) 図面データベース内の図形オブジェクトとシンボルテーブルレコード オブジェクトは、基本的にこの「make」関数で直接図面データベース内に作成することが可能です。図面データベース オブジェクトや各シンボルテーブル オブジェクトは、AutoCAD LTのシステムによって用意される図面データベース内に1つしか存在しないオブジェクトです。そのため、ユーザがそれらのオブジェクトを生成することはできません。 また、作成するオブジェクト種類によっては、引数の「名前」や「設定データ」などが不要な操作もあります。そのため、様々なオブジェクトを作成するのに適したより便利な関数を提供しています。以下にオブジェクトの種類ごとに使用できる関数を紹介します。
|
シンボルテーブルレコード オブジェクトの作成 |
||||
この一連の作業を実行するのが、「make」や「makeRec」関数になります。 ユーザが作成できるシンボルテーブルレコード オブジェクトには以下のものがあります。 AcDbViewportTableRecord(ビューポートテーブルレコード) AcDbViewTableRecord(ビューテーブルレコード) AcDbBlockTableRecord(ブロックテーブルレコード) AcDbDimStyleTableRecord(寸法スタイルテーブルレコード) これらのシンボルテーブルレコード オブジェクトは、上で説明している「make」や「makeRec」関数で作成できることはもちろんですが、それ以外にもシンボルテーブル オブジェクトへの「命令」として、新しいシンボルテーブルレコード オブジェクトを追加、作成させる機能もあります。設計の流れやプログラムの状況に応じて、便利な方を使用してください。以下にそれぞれの方法について説明します。 「make」や「makeRec」関数による作成:
------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- シンボルテーブルの「命令」よる作成:
------------------------------------------------------------------------- Sub Sample() -------------------------------------------------------------------------
|
図形オブジェクトの作成 |
しかし、図形オブジェクトの追加は、シンボルテーブルレコード オブジェクトの追加と異なり、追加する図形オブジェクトを「つなげる」先を指定する必要があります。それは、図面データベース内で図形オブジェクトを「つなげる」ことができるのが、ブロックテーブルレコード オブジェクトだからです。ブロックテーブルレコード オブジェクトは、要素(レコード)のため、ユーザが任意に作成できるものです。つまり、図面データベースのブロックテーブル上には、複数のブロックテーブルレコード オブジェクトが存在しているのです。 ブロックテーブルレコード オブジェクトは、AutoCAD LTの「ブロック登録」機能により、ブロック登録を実行すると登録されたブロックの情報が、ブロックテーブルレコード オブジェクトとして作成されます。そのブロックの構成要素である図形が、図形オブジェクトとして、ブロックテーブルレコード オブジェクトに「つながる」のです。(「図形の基本構造」を参照してください。)そのため、図面データベースに図形オブジェクトを追加したい場合には、どのブロックテーブルレコード オブジェクトに「つなげる」のかを明確にしておく必要があるのです。 「make」関数を使用して図形オブジェクトを作成する際には、どのブロックテーブルレコード オブジェクトに「つなげる」のかを、基本的には指定しないといけません。この指定が、「make」関数内の引数「親データ」の部分になります。 ------------------------------------------------------------------------- es=obj.make("図形名", Null ,設定データ,親データ,オブジェクトID ) ------------------------------------------------------------------------- この「親データ」の部分には、「つなげる」ブロックテーブルレコード オブジェクトの「オブジェクトID」か「名前」を指定することができます。プログラムの中で取得しやすい方か、すでに取得されているデータを使用すれば良いでしょう。 また、「make」関数を使用する際に必要な2番目の引数である「"名前"」は、図形オブジェクトには不要のため使用しません。そのため「Null」を設定して使用します。 例えば、「登録ブロック」(ブロックテーブルレコード オブジェクト)に「"ABC"」という名前のブロックが存在すると仮定します。このとき、この「"ABC"」という「登録ブロック」の構成要素である図形として、新しく「円」の図形オブジェクトを追加することを考えてみます。図形オブジェクトの作成には「make」関数を使用しますが、このとき「親データ」の部分に指定する、ブロックテーブルレコード オブジェクトの情報として、「オブジェクトID」か「名前」が必要です。ここでは、「名前」がわかっていることを前提としているので「名前」で指定することにします。 新しく追加する図形を「円」としているので、その「設定データ」(「円」の場合、「中心」と「半径」)を初期値として設定することも可能です。これらの作業をプログラムにすると、以下のように記述できます。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- この例では、「登録ブロック」「"ABC"」が存在することを仮定にして説明してきました。図面データベースの構造上、まったく同じプログラムを利用して、「モデル空間」に「円」を作成するプログラムに変更することが簡単にできます。それは、「モデル空間」がブロックテーブルレコード オブジェクトの1つだからです。 図のように作成する図形オブジェクトを「つなげる」先(「親データ」の部分)を、ブロックテーブルレコード「"ABC"」から、「モデル空間」を表す「"*Model_Space"」に変更するだけで、上のプログラムは「モデル空間」に図形を追加するプログラムに変更されます。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- AutoCAD LTの図形の操作においては、恐らくこの「モデル空間」上での作業が一番多くなるでしょう。そのため、この使用頻度の高い「モデル空間」への図形オブジェクトをより簡単に実行するために用意したのが、「makeEnt」関数です。 「makeEnt」関数は、作成する図形オブジェクトを「つなげる」先(「親データ」の部分)を指定しなくても、自動的に現在の作業空間を識別し、その作業空間に相等するブロックテーブルレコード オブジェクトを指定するようになっています。現在の作業空間が「モデル空間」であれば、「モデル空間」用のブロックテーブルレコード オブジェクトに、「ペーパー空間」であれば、「ペーパー空間」用のブロックテーブルレコード オブジェクトに図形オブジェクトを追加します。 そのため、「makeEnt」関数の指定には、「親データ」の指定部分も、「"名前"」を指定する部分もありません。 ------------------------------------------------------------------------- es=obj.makeEnt("図形名",設定データ,オブジェクトID ) ------------------------------------------------------------------------- 上のプログラムを、「makeEnt」関数を使用した方法に書き直してみます。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- |
「共通」機能の使用 |
||||
オブジェクトに共通で使用できる機能の利用方法を説明します LT VB-COMでオブジェクトを操作する場合、各オブジェクトに固有の機能と、いくつかのオブジェクトに共通の機能があります。AutoCAD LTの図面データベース内のオブジェクトは機能別に分類されているため、同じ種類のオブジェクトに関しては、その種類で共通の機能が使えるのです。このことは、このヘルプの記述からもわかるようになっています。例えば、「円」オブジェクトを操作したい場合にこのヘルプを見ると、以下のように機能(命令)が紹介されています。
これは「色」に関する内容や「画層」や「線種」に関する内容が、「円」固有の機能(命令)ではないからです。上の「円」オブジェクトのヘルプに表示されている内容は、「円」オブジェクトにだけ利用が可能な命令だけが、表示されているのです。そのため、「円」オブジェクト固有の機能(命令)でないものは、ここに表示されていません。ここで注目すべき場所は、ヘルプの上の方に表示される以下の部分です。
この部分は、別のヘルプの内容にジャンプするようになっています。この部分の日本語名を見ると、「全オブジェクト共通」や、「全図形共通」、「線形図形共通」と、最後に「共通」がついているものばかりです。実は、ここが「共通」で使用できる機能(命令)になります。 この「共通」の機能(命令)は、もちろん「円」オブジェクトにも使用できる機能(命令)です。つまり、実際に「円」オブジェクトで操作できる機能(命令)の種類は、以下のように「円」固有の機能に各「共通」の機能を加えた数になります。 AcDbCircle + AcDbCurve + AcDbEntity + AcDbObject 各「共通」機能の中には、多くの機能(命令)が含まれているので、これらを含めると「円」オブジェクトを操作できる機能(命令)には、非常に多くの機能(命令)があると言えるでしょう。 このとき各「共通」の機能が、どのようなオブジェクトに対して共通に使用できるかにつきましては、すべてのオブジェクトのツリー構造を見ていただくとわかります。このツリー構造の中で各「共通」の機能は、その下につながっているオブジェクトの種類に対して有効になります。例えば、「AcDbCurve(線形図形共通)」に含まれる機能(命令)は、その下につながっている各図形オブジェクトの種類に対して、すべて共通で使用できる機能(命令)になります。 ------------------------------------------------------------------------- | ------------------------------------------------------------------------- このことから、この「共通」の機能(命令)は以下のように分類することができます。 「AcDbObject(全オブジェクト共通)」 「AcDbEntity(全図形共通)」 「AcDbCurve(線形図形共通)」 ------------------------------------------------------------------------- 「共通」機能による「曖昧」なオブジェクト操作: 各オブジェクトの操作には、「共通」機能(命令)も利用できることは上で説明した通りです。 ここでは、この「共通」機能を利用した設計の方法について説明します。 例えば、AutoCAD LTの作図画面上の最後に描画された図形の「色」を「赤(色番号=1)」に変更するプログラムを考えてみます。 この場合、AutoCAD LTの作図画面の最後に描画された図形オブジェクトを取得するために、ユーティリティを使用することはわかります。 ------------------------------------------------------------------------- Dim es As Boolean '(命令の「エラー状況」を格納する変数宣言) ------------------------------------------------------------------------- しかし、このとき「オブジェクトID」として取得できる図形オブジェクトが、何の図形オブジェクトなのかはまったくわかりません。それは、直前の作業によって描画される図形が異なるからです。 ここで、この例題の内容を確認します。この例題では、「最後に描画した図形に色を設定する」というものです。つまり、この例題の設計においても「図形」の特定はされていません。例題の内容を言い換えると、「最後に描画した図形は何の図形であれ色を設定する」と考えることができるのです。このことから、この例題の中で操作の対象となる図形オブジェクトの種類が特定されないまま、作業(この例題では「色」を設定する作業)をしなければならないことがわかります。 このように、操作の対象となるオブジェクトが特定されない作業を実行しなければならない場合、「共通」の機能が有効になります。この例においてわかっていることは、取得できるオブジェクトが「図形オブジェクト」であることだけです。つまり、取得できる図形オブジェクトの種類が何であれ、最低限「図形オブジェクトに『共通』の機能(命令)」は、使用できるはずなのです。 このような場合には、「図形オブジェクトに『共通』の機能(命令)」を使用すれば、オブジェクトの種類を特定することなく命令を実行することができるのです。「図形オブジェクトに『共通』の機能(命令)」とはつまり、「AcDbEntity(全図形共通)」に記述されている機能(命令)のことなのです。 例題では、図形の「色」を設定することにしています。この図形に「色」を設定する機能(命令)は、「図形オブジェクトに『共通』の機能(命令)」である「AcDbEntity(全図形共通)」の中に記述されています。この機能は、「色番号設定(setColorIndex)」です。この命令を使用して、図形オブジェクトを特定しないままの設計にする場合、プログラムは以下のようになります。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- このようにLT VB-COMでは、操作するオブジェクトを特定せずに、その最低限のオブジェクトの種類を含む「共通」の機能を利用することができるのです。ただしこの場合、「共通」の機能に含まれる命令を使用することが、前提となります。 |
オブジェクトの識別 |
LT VB-COMによるプログラム設計において、様々な形でオブジェクトを取得することになります。多くの場合取得したオブジェクトに対して命令を使用することになります。いくつかのオブジェクトに「共通」の命令を使用している場合は、問題ありませんが、特定のオブジェクト固有の命令を使用したい場合には、オブジェクトを識別する必要があります。 オブジェクトの識別には、以下の機能を使用します。 obj.typeCheck("オブジェクト名",チェックしたいオブジェクトID) (詳細は、「typeCheck(オブジェクトの種類識別)」を参照してください。) 指定するオブジェクトIDのオブジェクトが、指定する「オブジェクト名」と一致する場合に「1(真)」、一致しない場合に「0(偽)」を返します。 例)取得したオブジェクトIDが「objId」の場合 obj.typeCheck ( "円", objId ) など オブジェクト固有の特定はもちろん、「共通」の「オブジェクト名」を指定することで、オブジェクトのだいたいの種類を識別することもできます。そのため、「オブジェクト名」は完全に一致する名前でなくても構いません。「共通」で使用している「オブジェクト名」でもチェック可能です。「共通」の「オブジェクト名」の場合、指定したオブジェクトIDのオブジェクトが、その「共通」機能を含んでいれば「1(真)」を返します。 例)取得したオブジェクトIDが「objId」の場合 obj.typeCheck ( "全図形共通", objId ) など 例えば、「オブジェクト名」の場所に「"全図形共通"」を指定した場合、取得したオブジェクトIDのオブジェクトが、「図形オブジェクト」であるかどうかを識別できます。 以下にこのオブジェクトの識別が不要な例と、必要な例を挙げて説明します。 オブジェクトの特定が不要な例: 「AutoCAD LTの作図画面上で最後に描かれた図形の『色』を『赤(色番号=1)』にする。」 この例の場合、取得するオブジェクトはAutoCAD LTの作図画面上の図形に限定されています。そのため、必ず「図形オブジェクト」が取得されることを前提にプログラムを設計します。しかも取得される図形オブジェクトの詳細な形は限定されていません。取得する図形オブジェクトであれば、「線分」であろうが「円」であろうが、どのような図形オブジェクトでも構わずに「色」に「赤」を設定します。つまり、このプログラムで操作するオブジェクトは、オブジェクトの種類を特定しない「図形オブジェクト」という「曖昧」な状態でのオブジェクト操作になります。この場合、「図形オブジェクト」に共通の機能(命令)であれば、「共通」機能を利用することで、プログラムを作成することができます。以下にそのプログラムを紹介します。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- オブジェクトに対する操作の部分で、オブジェクト名に対して「全図形共通」という名前を付け、特定のオブジェクト名を指定していません。 オブジェクトの特定が必要な例: 「AutoCAD LTの作図画面上で最後に描かれた図形が『円』の場合、『半径』を『1.5』にする。」 この例の場合も、取得するオブジェクトはAutoCAD LTの作図画面上の図形に限定されています。しかし、オブジェクトの操作が「『円』の場合」と限定されているために、オブジェクトの識別をする必要があります。(「半径」の設定は、一部の図形オブジェクトにしか有効ではありません。そのため、この作業を図形オブジェクトの「共通」機能として利用することはできません。そのために、図形の特定をする必要があります。)取得するオブジェクトが、何のオブジェクトかを識別し、「円」オブジェクトの場合にのみ「半径」の設定作業を行ないます。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- |
ディクショナリの基本操作 |
|
ディクショナリを操作するための基本的な内容について説明します 図面データベースにおけるディクショナリ オブジェクトは少し特殊なオブジェクトです。そのため、図面データベースにおいてもディクショナリ オブジェクトの管理は、ディクショナリ専用の場所で行なわれています。(詳しくは、「ディクショナリの基本構造」を参照してください。) 図のように、基本的なディクショナリ オブジェクトは、シンボルテーブル オブジェクトと同じように、図面データベース オブジェクトから直接「つながって」います。この図面データベース オブジェクトから「つながっている」ディクショナリ オブジェクトをここでは「基本ディクショナリ オブジェクト」と呼ぶことにします。それは、ディクショナリ オブジェクトが他のシンボルテーブルの構造と異なり、同じディクショナリ オブジェクトが複数存在することができるからです。 AutoCAD LTにおいて、このディクショナリ オブジェクトを利用して設計されている「シンボルテーブル」と同じような構造のものには、以下のものがあります。 AcDbGroup(グループ) これらの構造につきましては、基本的にディクショナリ オブジェクトを組み合わせて実現されています。上記の各オブジェクトは、それぞれ「グループ」や「マルチラインスタイル」などの情報を保管するオブジェクトですが、これらの各オブジェクトを複数つなげてを管理しているオブジェクトは、それぞれディクショナリ オブジェクトなのです。 「グループ」、「マルチラインスタイル」、「プレイスホルダー」、「印刷設定」、「レイアウト」、「イメージ定義」は、それぞれ専用のディクショナリで管理されています。この専用のディクショナリは、通常のディクショナリとまったく同じディクショナリです。管理しているそれぞれのオブジェクトがわかり易いように、それぞれのオブジェクトの名前を付けて「グループ ディクショナリ」や「マルチライン ディクショナリ」などと呼ぶこともあります。 「グループ」、「マルチラインスタイル」、「プレイスホルダー」、「印刷設定」、「レイアウト」、「イメージ定義」の基本的なオブジェクトの作業は、この構造を踏まえて実行する必要があります。図のように、基本的にこれらの管理方法の構造は同じ形になっているので、その操作方法を1つ知っていれば、他のディクショナリの操作の際にも応用できます。 ここでは、「グループ(AcDbGroup)」を例に、その操作方法を説明します。 「グループ」オブジェクトの操作: 上の図からもわかるように、図面データベースにおいて「グループ」オブジェクトは、専用ディクショナリ「グループ ディクショナリ」(とは言っても通常のディクショナリです)によって管理されています。「グループ ディクショナリ」は通常の「ディクショナリ オブジェクト」です。ただ、「グループ」を管理しているので、わかりやすくするために「グループ ディクショナリ」と呼びます。「グループ ディクショナリ」オブジェクトは、「基本ディクショナリ」オブジェクトから「つながって」います。この「グループ ディクショナリ」オブジェクトに、複数の「グループ」オブジェクトが名前を付けて「つながる」ことになります。実際の「グループ」の情報は、この「グループ」オブジェクトに保管されているのです。「グループ」の操作とは、この「グループ」オブジェクトを見つけ出して操作する作業になります。 作業@:「グループ ディクショナリ」オブジェクトの検索 「グループ」を操作するにはまず、図面データベースの中から「グループ ディクショナリ」オブジェクトを見つけ出さなければいけません。これは、図面データベース内のオブジェクトの「つながり」をたどることで可能となります。 基本的には「手法@」の方法で、ディクショナリ オブジェクトを順に検索する必要があります。以下の例は「手法@」に従って「グループ ディクショナリ」オブジェクトを検索する方法です。「基本ディクショナリ」オブジェクトから、「グループ ディクショナリ」オブジェクトを検索する際には、目的とするオブジェクトの「名前」を指定する必要があるのですが、「グループ ディクショナリ」オブジェクトには、「"ACAD_GROUP"」という名前が付けられています。この名前で検索することで、「グループ」管理用の「グループ ディクショナリ」オブジェクトが見つかります。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- 上記の「手法@」では、図面データベース オブジェクトから「基本ディクショナリ」オブジェクト、「グループ ディクショナリ」オブジェクトの順に検索しています。LT VB-COMでは、このステップを軽減するために、図の「手法A」のように、図面データベース オブジェクトから直接「グループ ディクショナリ」オブジェクトを見つけることができる「命令」を用意しています。この手法を使用すると簡単に「グループ ディクショナリ」オブジェクトを見つけることができます。この命令は「グループディクショナリ取得(getGroupDictionary)」です。この命令を利用すると、上のプログラムは以下のように記述することができます。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- 「手法@」とくらべて、ずっと簡単な内容になりました。図面データベースの構造を理解する上で「手法@」も必要ですが、実際にプログラムを設計する際には「手法A」を利用することが多くなるでしょう。 参考:
作業A:「グループ」オブジェクトの検索 AutoCAD LTで複数の「グループ」を定義すると、それぞれに名前を付けて保管することができます。このとき、図面データベース内では、「グループ ディクショナリ」オブジェクトに、名前を付けて「グループ」オブジェクトが「つなげ」られています。LT VB-COMでこれらの「グループ」オブジェクトを操作する場合、「グループ ディクショナリ」オブジェクトから目的の「グループ」オブジェクトを見つける必要があります。 すべての「グループ」を操作する場合には、「グループ ディクショナリ」オブジェクトに「つながって」いるすべての「グループ」オブジェクトの「オブジェクトID」を取得できる、以下の命令を利用します。 全レコード取得(getAllRecord) また、特定の「グループ」のみを探して操作したい場合には、「グループ」の「名前」を指定して「グループ」オブジェクト(のオブジェクトID)を取得できる、以下の命令を使用します。 名前から取得(getAt) 上記のいずれかの方法で、「グループ」オブジェクトを特定することができます。以下にそれぞれの使用例を紹介します。 ------------------------------------------------------------------------- [全レコードを取得する例] Sub Sample() ------------------------------------------------------------------------- [名前から取得する例] Sub Sample() ------------------------------------------------------------------------- 作業B:「グループ」オブジェクトの操作 作業@、Aによって「グループ」オブジェクトが特定されれば、あとは通常のオブジェクト操作とまったくかわりません。「cad(オブジェクト基本操作)関数」を使用して、見つけた「グループ」オブジェクトを操作するだけです。 以下に、登録されているすべての「グループ」を取り出し、各「グループ」に含まれるすべての図形オブジェクトをそれぞれ表示するサンプルを紹介します。 ------------------------------------------------------------------------- Sub Sample() ------------------------------------------------------------------------- |