Polymorphism











AutoCAD LTを利用できる新発想システム開発ツール!  安全と信頼の完全自社開発製品!

図面データの操作
LT VB-COM HELP Samples


ホーム > 製品 > LT VB-COM > 充実のヘルプ > 図面データの操作


 cad(オブジェクト基本操作)

  基本的なオブジェクト操作を行うための機能です

[書式]
                         クラス名   オブジェクトID   命令     設定データ
                             ↓           ↓          ↓            ↓
  es = obj.cad ( "AcDbXxxx" , objId , "XXXXXX" , setData , getData )
  ↓                                                                                 ↓
エラー状況                                                                    取得データ

設定するデータ:

[データ]
[内容]
[型]
クラス名
(オブジェクト名)
操作したいオブジェクトの種類の名前を指定します。説明の中では「オブジェクト名」としているものもありますが、これは同じものです。「共通」関連の名前も使用できます。ここの名前は英語でも、日本語でも構いません。 文字列
オブジェクトID 操作したいオブジェクトを特定するための、オブジェクトIDを指定します。 整数(Long)
命令 オブジェクトに実行させたい機能の命令を指定します。ここの命令は英語でも、日本語でも構いません。 文字列
設定データ 命令の実行に必要なデータを設定します。データが不要な場合は「Null」を設定してください。 命令により異なる


取得できるデータ:

[データ]
[内容]
[型]

エラー状況

指定の「命令」が正しく動作したかどうかを判断できます。正常終了=True異常終了=False ブール値
取得データ 指定した「命令」が値を返す場合には、ここにデータを格納します。取得されるデータの種類や数は、オブジェクトの種類や命令により異なります。そのため、ここに設定する変数は基本的には、「Variant」型の「空(Empty)」の変数を設定しておきます。また、「エラー状況」にて結果が「False(異常終了)」の場合には、この取得データの値は無効となります。取り出して使用しないでください。取得されるデータがない場合には「Null」を設定してください。 Variant


オブジェクトIDを持つ図面データベース内のすべて(図面データベース オブジェクト以外)のオブジェクトは、この「cad」関数で操作が可能です。(図面データベース内で、この「cad」関数が使用できないのは、「図面データベース オブジェクト」だけです。)
主なオブジェクト操作の例として、「シンボルテーブル オブジェクト」、「シンボルテーブルレコード オブジェクト」、「図形オブジェクト」の操作について説明します。
(図面データベースの構造については、「図面データベースの基本」を参照してください。)

シンボルテーブルの操作:
どのシンボルテーブルも、シンボルテーブル オブジェクトにシンボルテーブルレコード オブジェクトが複数「つながる」という構造はまったく同じです。そのため、このシンボルテーブルに関する操作の方法は1つ理解しておけば、すべてのシンボルテーブルに使用できます。
シンボルテーブルには、以下のような種類があります。

AcDbViewportTable(ビューポートテーブル)
AcDbViewTable(ビューテーブル)
AcDbBlockTable(ブロックテーブル)
AcDbDimStyleTable(寸法スタイルテーブル)
AcDbLayerTable(画層テーブル)
AcDbLinetypeTable(線種テーブル)
AcDbRegAppTable(アプリケーションテーブル)
AcDbTextStyleTable(文字スタイルテーブル)
AcDbUCSTable(UCSテーブル)

例えば、「画層0」の情報が取得したい場合、基本的には以下の手順で図面データベース内の「つながり」を検索します。

 '図面データベースから画層テーブルを取得
 es = obj.db ( "画層テーブル取得" , Null , tableId)
 '画層テーブルから画層テーブルレコードを取得
 es = obj.cad ( "画層テーブル" , tableId , "名前から取得" , "0" , recId)

この手法を利用して図面データベース オブジェクトから目的とするシンボルテーブルレコード オブジェクトを検索することが可能です。このとき、シンボルテーブル オブジェクトである「画層」テーブル オブジェクトも、「cad」関数によって操作できます。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim tableId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '「図面データベース」から指定の「シンボルテーブル」を取得
   es = obj.db ( "画層テーブル取得" , Null , tableId)
   '「画層テーブル」から名前が「"0"」の「画層テーブルレコード」を取得
   es = obj.cad ( "画層テーブル" , tableId , "名前から取得" , "0" , recId)
   '「画層テーブルレコード」の「色」を変更
   es = obj.cad ( "画層テーブルレコード" , recId , "色設定" , 1 , Null)
End Sub

-------------------------------------------------------------------------

シンボルテーブルレコードの操作:
シンボルテーブル オブジェクトの要素であるシンボルテーブルレコードオブジェクトの操作は、基本的にこの「cad」関数を使用しなければなりません。
シンボルテーブルレコード オブジェクトの種類はシンボルテーブル オブジェクトの種類とまったく同じです。

AcDbViewportTableRecord(ビューポートテーブルレコード)
AcDbViewTableRecord(ビューテーブルレコード)
AcDbBlockTableRecord(ブロックテーブルレコード)
AcDbDimStyleTableRecord(寸法スタイルテーブルレコード)
AcDbLayerTablev(画層テーブルレコード)
AcDbLinetypeTableRecord(線種テーブルレコード)
AcDbRegAppTableRecord(アプリケーションテーブルレコード)
AcDbTextStyleTableRecord(文字スタイルテーブルレコード)
AcDbUCSTableRecord(UCSテーブルレコード)

シンボルテーブルレコード オブジェクトを操作するためには図面データベース内を検索し、シンボルテーブル オブジェクトから検索する方法と、図形の特性として保管されている情報(例えば、「画層」や「線種」など)からシンボルテーブルレコード オブジェクトを検索する方法があります。以下にそれぞれの方法について説明します。

テーブルからレコード検索:

検索したいシンボルテーブル オブジェクトから直接操作を開始する手法です。LT VB-COMには指定のシンボルテーブル オブジェクトを直接操作するための「table」関数が用意されているので、これを利用します。例えば、「画層0」(名前が「"0"」の画層テーブルレコード オブジェクト)を検索したい場合には、以下のように画層テーブル オブジェクトに命令を使用します。

このように、「table」関数を利用することで、1行で目的のシンボルテーブルレコード オブジェクトを見つけることができます。見つけたシンボルテーブルレコード オブジェクトは「cad」関数で操作します。以下に「画層0」の「色」を「赤(色番号=1)」に変更するプログラムを紹介します。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '「画層テーブル」から名前が「"0"」の「画層テーブルレコード」を取得
   es = obj.table ( "画層テーブル" , "名前から取得" , "0" , recId)
   '「画層テーブルレコード」の「色」を変更
   es = obj.cad ( "画層テーブルレコード" , recId , "色設定" , 1 , Null)
End Sub

-------------------------------------------------------------------------

図形からレコード検索:

シンボルテーブルレコードの情報は、基本的に各図形に影響を与えています。例えば、「画層」や「線種」は図形の属する画層の情報や図形を構成する線種に反映されますし、「文字スタイル」は文字図形の文字の種類や大きさなどに反映されます。そのため各図形オブジェクトには、さまざまな特性の情報としてシンボルテーブルレコード オブジェクトが関連しています。例えば、図形オブジェクトが属する「画層」の情報は、図形オブジェクト内に画層テーブルレコード オブジェクトの情報(オブジェクトID)として保管されています。

この特性を生かし、図形オブジェクトから各種シンボルテーブルレコードの情報を取得することが可能です。図形オブジェクト内の取得したいシンボルテーブルレコード情報(オブジェクトID)を取得し、直接シンボルテーブルレコード オブジェクトを特定し、操作することが可能です。図形オブジェクトの操作と特定したシンボルテーブルレコード オブジェクトは「cad」関数で操作します。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   es = obj.util ( "最後の図形" , Null , objId )    '(最後の図形を取得)
   '図形オブジェクトから属する「画層テーブルレコード」を取得
   es = obj.cad ( "全図形共通" , objId , "画層ID取得", Null , recId )
   '「画層テーブルレコード」の「色」を変更
   es = obj.cad ( "画層テーブルレコード" , recId , "色設定" , 1 , Null)
End Sub

-------------------------------------------------------------------------

図形オブジェクトの操作:

図形オブジェクトの操作は主にモデル空間上にて行なわれます。モデル空間上の図形オブジェクトは、「モデル空間("*Model Space")」という名前のブロックテーブルレコード オブジェクトに「つながって」いる図形オブジェクトです。そのため、図面データベース内の操作として、この図形オブジェクトを操作する場合は、ブロックテーブルレコード オブジェクトから図形オブジェクトを検索する手法になりますが、LT VB-COMではユーティリティを使用することでAutoCAD LTの作図画面上の図形の図形オブジェクトを直接指定することも可能です。そこでここでは、図形オブジェクトを操作するための基本として、図面データベース内のブロックテーブルレコード オブジェクトから図形オブジェクトを取得する方法と、AutoCAD LTの作図画面上からユーティリティによって、直接図形オブジェクトを取得する方法について説明します。

ブロックテーブルレコードから図形を検索:

図面データベース内で、図形オブジェクトを検索する場合、基本的にはブロックテーブルレコード オブジェクトに「つながる」図形オブジェクトを検索することになります。そのためには、シンボルテーブル関連の基本操作と同様に、シンボルテーブル オブジェクトから、シンボル テーブルレコード オブジェクトを検索するところから開始します。例えば、「モデル空間」上の図形オブジェクトをプログラムで操作したい場合、「モデル空間」を表すブロックテーブルレコード オブジェクトを見つけ出す必要があります。「モデル空間」を表すブロックテーブルレコード オブジェクトは、「"*Model Space"」という名前のブロックテーブルレコード オブジェクトになります。指定のブロックテーブルレコード オブジェクトを取得するためには、ブロックテーブル オブジェクトを直接操作することができる「table」関数を利用します。

「"*Model_Space"」という名前のブロックテーブルレコード オブジェクトを見つければ、そのブロックテーブルレコード オブジェクトからこのオブジェクトにつながる図形オブジェクトを見つけ出すことが可能です。見つけた図形オブジェクトは、「cad」関数で操作します。ただし、この場合図面データベース上に保管されている図形オブジェクトの情報が直接操作できるので、各図形オブジェクトが作図図面上のどの図形に相等するかを判断するのはなかなか難しいところです。図形オブジェクトの内部情報だけで図形の識別が可能な場合や、すべての図形の走査やデータ抽出、編集などの用件の場合に使用すると便利です。以下に、「モデル空間」上に存在しているすべての図形の種類を表示するプログラムを紹介します。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim ids As Variant   '(複数の「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '「ブロックテーブル」から名前が「"*Model Space"」の「ブロックテーブルレコード」を取得
   es = obj.table ( "ブロックテーブル" , "名前から取得" , "*Model Space" , recId)
   If es Then
       '「ブロックテーブルレコード」の構成要素の図形をすべて取得
       es = obj.cad ( "ブロックテーブルレコード" , recId , "全図形取得" , Null , ids)
       For i = LBound ( ids ) To UBound ( ids )
           MsgBox obj.NameJ( ids ( i ) ), vbOKOnly , "構成要素図形"
       Next
   End If
End Sub

-------------------------------------------------------------------------

作図画面上から図形を指定:

LT VB-COMでは、図形オブジェクトの操作をより便利にするために、AutoCAD LTの作図画面上における図形から、図形オブジェクトを特定するための様々なユーティリティを用意しています。LT VB-COMは、基本的に図面データベース内のオブジェクトを操作するためのツールのため、その標準機能ではAutoCAD LTの作図画面上における図形の操作はできません。しかし、アプリケーションを作成する上で、この作図画面上での図形の操作はどうしても必要な機能です。そのために、ユーティリティとしてその機能を用意しています。図面データベースからではなく、作図画面上における図形の状態から、その図形の実際のデータである図面データベース内の図形オブジェクトの情報を直接取得できます。

ユーティリティを使用するためには、「util」関数を使用します。このユーティリティ中で、もっとも簡単に作図画面上から図形を特定する方法として、「最後の図形(acdbEntLast)」という命令があります。この命令は、文字通り作図画面上で最後に描画された図形のオブジェクトIDを取得します。こうすることで、作図画面上の図形の状態から、直接図面データベース内の図形オブジェクトを特定することができます。このユーティリティを使用すれば、図面データベース内を検索する必要が不要となります。特定した図形オブジェクトは、「cad」関数で操作します。以下に、作図画面上に最後に描画された図形の「色」を「赤(色番号)」にするプログラムを紹介します。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   '(最後に作図した図形のオブジェクトIDを取得)
   es = obj.util ("最後の図形" ,Null , objId) 
   es = obj.cad)"全図形共通" , objId ,"色番号設定" , 1 ,Null )
   '実行が成功すると図形の色が変化します
End Sub

-------------------------------------------------------------------------

また、「util」関数の他に、LT VB-COMの機能とVB(Visual Basic)の標準関数を組み合わせて作成したサンプルユーティリティとして、AutoCAD LTの作図画面上から任意の図形を選択できるようにした機能も用意しています。このサンプルユーティリティにつきましては「参考ユーザインターフェースツール」を参照してください。



 table(シンボル テーブル操作)

  各シンボルテーブルオブジェクトを操作するための機能です

[書式]
                              クラス名            命令      設定データ
                                 ↓                 ↓           ↓
  es = obj.table ( "AcDb***Table" , "XXXX" , setData , getData )
  ↓                                                                            ↓
エラー状況                                                               取得データ

 「"AcDb***Table"」の部分には、各シンボルテーブルの名前を使用することができます。

[シンボルテーブル]
[日本語名]
AcDbViewportTable ビューポートテーブル
AcDbViewTable

ビューテーブル

AcDbBlockTable ブロックテーブル
AcDbDimStyleTable 寸法スタイルテーブル
AcDbLayerTable 画層テーブル
AcDbLinetypeTable 線種テーブル
AcDbRegAppTable アプリケーションテーブル
AcDbTextStyleTable 文字スタイルテーブル
AcDbUCSTable UCSテーブル

設定するデータ:

[データ]
[内容]
[型]
クラス名
(オブジェクト名)
操作したいシンボルテーブルオブジェクトの種類の名前を指定します。説明の中では「オブジェクト名」としているものもありますが、これは同じものです。「共通」関連の名前も使用できます。ここの名前は英語でも、日本語でも構いません。 文字列
命令 シンボルテーブルオブジェクトに実行させたい機能の命令を指定します。ここの命令は英語でも、日本語でも構いません。 文字列
設定データ 命令の実行に必要なデータを設定します。データが不要な場合は「Null」を設定してください。 命令により異なる


取得できるデータ:

[データ]
[内容]
[型]

エラー状況

指定の「命令」が正しく動作したかどうかを判断できます。正常終了=True異常終了=False ブール値
取得データ 指定した「命令」が値を返す場合には、ここにデータを格納します。取得されるデータの種類や数は、オブジェクトの種類や命令により異なります。そのため、ここに設定する変数は基本的には、「Variant」型の「空(Empty)」の変数を設定しておきます。また、「エラー状況」にて結果が「False(異常終了)」の場合には、この取得データの値は無効となります。取り出して使用しないでください。取得されるデータがない場合には「Null」を設定してください。 Variant



シンボルテーブルの操作:

どのシンボルテーブルも、シンボルテーブル オブジェクトにシンボルテーブルレコード オブジェクトが複数「つながる」という構造はまったく同じです。そのため、このシンボルテーブルに関する操作の方法は1つ理解しておけば、すべてのシンボルテーブルに使用できます。
例えば、「画層0」の情報が取得したい場合、基本的には以下の手順で図面データベース内の「つながり」を検索します。

この手法を使用すると、シンボルテーブル オブジェクトを直接操作することが可能です。以下に「画層0」のオブジェクトを検索し、その「色」を「赤」に変更するサンプルを紹介します。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '「画層テーブル」から名前が「"0"」の「画層テーブルレコード」を取得
   es = obj.table ( "画層テーブル" , "名前から取得" , "0" , recId)
   '「画層テーブルレコード」の「色」を変更
   es = obj.cad ( "画層テーブルレコード" , recId , "色設定" , 1 , Null)
End Sub

-------------------------------------------------------------------------

このシンボルテーブルの操作方法は、すべてのシンボルテーブルに共通で使用できます。上の例の赤い文字で書かれたシンボルテーブルの名前を、操作したいシンボルテーブルの名前に変更するだけで使用できます。

プログラムでは、以下の「XXXテーブル」の部分を操作したいシンボルテーブルの名前に変更するだけです。

-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '「XXXテーブル」から名前が「"名前1"」の「XXXテーブルレコード」を取得
   es = obj.table ( "XXXテーブル" , "名前から取得" , "名前1" , recId)
   '「XXXテーブルレコード」に「命令」を実行
   es = obj.cad ( "XXXテーブルレコード" , recId , "命令" , setData , getData)
End Sub

-------------------------------------------------------------------------

(上記の"名前1"や"命令"はシンボルテーブル毎の任意の文字列になります)



  db(図面データベースオブジェクト操作)

  図面データベースオブジェクトを操作するための機能です

[書式]
                            命令      設定データ
                              ↓              ↓
  es = obj.db ( "XXXXXXXXXX" , Null , getData )
  ↓                                                     ↓
エラー状況                                        取得データ


設定するデータ:

[データ]
[内容]
[型]
命令 図面データベースオブジェクトに実行させたい機能の命令を指定します。ここの
命令は英語でも、日本語でも構いません。
文字列
設定データ 命令の実行に必要なデータを設定します。データが不要な場合は「Null」を設
定してください。
命令により異なる


取得できるデータ:

[データ]
[内容]
[型]

エラー状況

指定の「命令」が正しく動作したかどうかを判断できます。正常終了=True異常終了
=False
ブール値
取得データ 指定した「命令」が値を返す場合には、ここにデータを格納します。取得されるデータの
種類や数は、オブジェクトの種類や命令により異なります。そのため、ここに設定する変
数は基本的には、「Variant」型の「空(Empty)」の変数を設定しておきます。また、
「エラー状況」にて結果が「False(異常終了)」の場合には、この取得データの値は無
効となります。取り出して使用しないでください。取得されるデータがない場合には
「Null」を設定してください。
Variant

図面データベース オブジェクトは、図面データベース全体を管理している、図面データベース内に1つしか存在しない特別なオブジェクトです。そのため操作は通常のオブジェクト操作で使用する「cad」関数を使用するのではなく、図面データベース オブジェクトを操作する専用の「db」関数を使用します。
図面データベース オブジェクトを操作したい場合には、この「db」関数を利用することで、何の準備もなく図面データベース オブジェクトを直接操作することができます。

例)図面データベース中のオブジェクトの数を取得
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim getData As Variant   '(取得したデータを格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   '図面データベース中のオブジェクトの数を取得
   es = obj.db ( "オブジェクト数取得" , Null , getData)
   MsgBox getData& "個" , vbOKOnly , "オブジェクトの数"
End Sub

-------------------------------------------------------------------------



  name(オブジェクト(設計図「クラス」)の名前)

  オブジェクトIDからオブジェクトの名前を文字列で取得します

[書式]
                            オブジェクトID
                                   ↓    
         str = obj.name ( objId )
         ↓
      取得データ


設定するデータ:

[データ]
[内容]
[型]
オブジェクトID 名前を取得したいオブジェクトのオブジェクトIDを指定します。 整数(Long)


取得できるデータ:

[データ]
[内容]
[型]
取得データ 指定したオブジェクトIDが示すオブジェクトの「オブジェクトの名前(クラス名)」を文字列で取得します。 文字列(String)


[関連項目]
 □ nameJ (オブジェクト(設計図「クラス」)の日本語名)


[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   es = obj.util ("最後の図形" ,Null , objId) '(最後に作図した図形のオブジェクトIDを取得)
   MsgBox "図形名:" & obj.name (objId) , vbOKOnly , "図形名表示"
End Sub

-------------------------------------------------------------------------



  nameJ(オブジェクト(設計図「クラス」)の日本語名)

  オブジェクトIDからオブジェクトの名前を日本語の文字列で取得します

[書式]
                              オブジェクトID
                                     ↓    
         str = obj.nameJ ( objId )
         ↓
      取得データ


設定するデータ:

[データ]
[内容]
[型]
オブジェクトID 名前を取得したいオブジェクトのオブジェクトIDを指定します。 整数(Long)


取得できるデータ:

[データ]
[内容]
[型]
取得データ 指定したオブジェクトIDが示すオブジェクトの「オブジェクトの名前(クラス名)」を日本語の名前として文字列で取得します。 文字列(String)


[関連項目]
 □ name (オブジェクト(設計図「クラス」)の名前)

[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   es = obj.util ("最後の図形" ,Null , objId) '(最後に作図した図形のオブジェクトIDを取得)
   MsgBox "図形名:" & obj.nameJ (objId) , vbOKOnly , "図形名表示"
End Sub

-------------------------------------------------------------------------



  typeCheck(オブジェクトの種類識別)

  オブジェクトのタイプをチェックします
オブジェクトIDで指定されるオブジェクトのタイプをオブジェクト(クラス)の名前からチェックします。このチェックは、実際のオブジェクト(クラス)の名前ではなくても構いません。オブジェクトに対して使用したい命令が、そのオブジェクト固有の命令の場合などは、この機能を利用してオブジェクト識別した後に固有の命令を使用すると良いでしょう。

[書式]
                                            クラス名     オブジェクトID
                                               ↓             ↓    
         es = obj.typeCheck ( "AcDbXXX" ,  objId )
         ↓
      取得データ


設定するデータ:

[データ]
[内容]
[型]
クラス名
(オブジェクト名)
チェックしたいオブジェクトの種類の名前を指定します。説明の中では「オブジェクト名」としているものもありますが、これは同じものです。「共通」関連の名前も使用できます。ここの名前は英語でも、日本語でも構いません。 文字列

(String)

オブジェクトID 名前を取得したいオブジェクトのオブジェクトIDを指定します。 整数(Long)


取得できるデータ:

[データ]
[内容]
[型]
取得データ 指定したオブジェクトIDが、「クラス名」で指定した名前のオブジェクトかどうかの判断
結果が取得できます。一致=True不一致=False
ブール値


オブジェクト名を指定の例
  es =obj.typeCheck ( "AcDbCircle" , objId)
  es =obj.typeCheck ( "円" , objId)

この場合、指定のオブジェクトが「円」であるかどうかを識別しています。「円」オブジェクトの場合にだけ、「一致=True」となります。

共通のオブジェクト名を指定の例
  es =obj.typeCheck ( "AcDbEntity" , objId)
  es =obj.typeCheck ( "全図形共通" , objId)

この場合、オブジェクトが「図形」であるかどうかを識別しています。「図形」オブジェクトであれば、どのようなオブジェクト(「線分」や「円」など)でも、「一致=True」となります。


[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   es = obj.util ("最後の図形" ,Null , objId) '(最後に作図した図形を取得)
   If obj.typeCheck ( "" , objId ) Then
       'オブジェクトが「円」の場合のみ実行
       es = obj.cad ("" , objId ,"半径設定" , 1.5 ,Null )
   End If
End Sub

-------------------------------------------------------------------------



  errorStatus(エラー状況取得)

  エラーの内容を文字列で取得できます

エラー状況を文字列で取得できます。主に「errorTypeSet (エラー表示方法設定)」によって、エラーメッセージを表示していない場合などに、独自のエラーコントロールが行えます。

[書式]
                               
         stat = obj.errorStatus ( msg )
          ↓                                  ↓
        エラーモード                     取得データ


取得できるデータ:

[データ]
[内容]
[型]
エラーモード 現在「errorTypeSet (エラー表示方法設定)」によって設定されているエラーモードが取得できます。 整数(Integer)
取得データ 発生したエラーのエラーメッセージの内容を文字列として取得できます。 文字列
(String)

 <エラーモードの値と意味>

[値]

[内容]

0

ダイアログボックス表示(規定値)

1

AutoCAD LTコマンド領域

2

表示なし


[関連項目]
 □ errorTypeSet (エラー表示方法設定)

[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim msg As Variant   '(「エラーメッセージ」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   es = obj.errorTypeSet ( 2 ) 'エラー表示を「オフ」に設定
   '「"画層1"」という名前の「画層テーブルレコード」を作成
   es = obj.makeRec ( "画層テーブルレコード" , "画層1" , recId)
   If es = False Then
       'エラーメッセージ取得
       es = obj.errorStatus ( msg)
       MsgBox "内容:" & msg , vbOkOnly , "独自のメッセージ"
   End If
End Sub

-------------------------------------------------------------------------



  errorTypeSet(エラー表示方法設定)

  エラーメッセージの表示方法を制御します

エラーメッセージの表示方法を制御します。自分の表示したいエラーメッセージのモードをセットします。

[書式]
                                            エラーモード
                                                 ↓    
          es = obj.errorTypeSet ( mode )
          ↓                
        エラー状況              


設定するデータ:

[データ]
[内容]
[型]
エラーモード エラーメッセージを表示する方法をエラーモードとして設定きます。 整数(Integer)


取得できるデータ:

[データ]
[内容]
[型]

エラー状況

指定の「関数」が正しく動作したかどうかを判断できます。正常終了=True異常終了=False ブール値


 <エラーモードの値と意味>

[値]

[内容]

0

ダイアログボックス表示(規定値)

1

AutoCAD LTコマンド領域

2

表示なし


[関連項目]
 □ errorStatus (エラー状況取得)

[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim recId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim msg As Variant   '(「エラーメッセージ」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application") '(外部プログラムとの接続手続き)
   es = obj.errorTypeSet ( 2 ) 'エラー表示を「オフ」に設定
   '「"画層1"」という名前の「画層テーブルレコード」を作成
   es = obj.makeRec ( "画層テーブルレコード" , "画層1" , recId)
   If es = False Then
       'エラーメッセージ取得
       es = obj.errorStatus ( msg)
       MsgBox "内容:" & msg , vbOkOnly , "独自のメッセージ"
   End If
End Sub

-------------------------------------------------------------------------



 参考ユーザインターフェースツール

  

AutoCAD LTの作図画面上で、図形を選択したり、座標値の取得を実行するための、参考のユーザインターフェースを用意してあります。

インターフェース1:図形選択
AutoCAD LTの作図画面上から図形を選択します。
この機能は、AutoCAD LTの「SELECT」コマンドと同じ選択方法です。
ただし、選択オプションの「L=最後」は機能上使用できません。
この機能を使用すると、複数のオブジェクトIDが同時に取得できます。

[書式]
                                接続手続き
                                        ↓    
         ids = SelectEntity ( obj )
         ↓
     オブジェクトID群


設定するデータ:

[データ]
[内容]
[型]
接続手続き 「GetObject」関数により、LT VB-COMとの接続手続きで取得できるオブジェ
クトを指定します。接続手続きの詳細は「外部プログラムとの接続手続き」を参
照してください。

オブジェクト
(Object)


取得できるデータ:

[データ]
[内容]
[型]
オブジェクトID群 AutoCAD LTの画面上から選択した複数の図形のオブジェクトIDを、リスト
(配列)の形で取得します。

整数(Long)
の配列



[変数]
[内容]
[型]

1.

ids (0) オブジェクトID 整数(Long)

2.

ids (1) オブジェクトID 整数(Long)

...

ids (...) オブジェクトID 整数(Long)

n.

ids (n-1) オブジェクトID 整数(Long)

    (最初のデータは「0」番目になります。)


[使用例]
 @複数の選択図形をまとめて操作する場合
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim ids As Variant   '(複数の「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   ids = SelectEntity ( obj )
   '選択した図形の「色」をすべて「赤(色番号=1)」にする
   For i = LBound ( ids ) To UBound ( ids )
       es = obj.cad ("全図形共通" , ids ( i ) ,"色番号設定" , 1 ,Null ) 
   Next
End Sub

-------------------------------------------------------------------------

 A1つの選択図形を操作する場合
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim ids As Variant   '(複数の「オブジェクトID」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   ids = SelectEntity ( obj )
   '選択した図形の「色」を「赤(色番号=1)」にする
   es = obj.cad ("全図形共通" , ids ( 0 ) , "色番号設定" , 1 ,Null )
End Sub

-------------------------------------------------------------------------

インターフェース2:座標値指示
AutoCAD LTの作図画面上から座標値を取得します。

[書式]
(ラバーバンドなしの場合)

                          接続手続き
                                 ↓    
         pt = getPoint ( obj )
         ↓
       座標値


設定するデータ:

[データ]
[内容]
[型]
接続手続き 「GetObject」関数により、LT VB-COMとの接続手続きで取得できるオブジェ
クトを指定します。接続手続きの詳細は「外部プログラムとの接続手続き」を参
照してください。

オブジェクト
(Object)


取得できるデータ:

[データ] [内容] [型]
座標値 AutoCAD LTの作図画面上で位置を指示した3次元座標値を取得取得します。

実数(Double)

の配列


[書式]
(ラバーバンドありの場合)

                          接続手続き 基点
                                     ↓   ↓
         pt = getPointEx ( obj , p0 )
         ↓
       座標値


設定するデータ:

[データ]
[内容]
[型]
接続手続き 「GetObject」関数により、LT VB-COMとの接続手続きで取得できるオブジェクトを指定します。接続手続きの詳細は「外部プログラムとの接続手続き」を参照してください。

オブジェクト
(Object)

基点 ラバーバンド表示の基点となる点の座標値を指定します。

実数(Double)
の配列


取得できるデータ:

[データ]
[内容]
[型]
座標値 AutoCAD LTの作図画面上で位置を指示した3次元座標値を取得取得します。

実数(Double)
の配列


[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim pt1 As Variant   '(「座標値」を格納する変数宣言)
   Dim pt2 As Variant   '(「座標値」を格納する変数宣言)
   Dim setData ( 0 To 1 ) As Variant   '(「設定データ」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   'AutoCAD LTの作図画面上で2点を指示
   pt1 = getPoint ( obj ) 'ラバーバンドなし
   pt2 = getPointEx ( obj , pt1 ) 'ラバーバンドあり
   setData ( 0 ) = pt1
   setData ( 1 ) = pt2
   es = obj.makeEnt ("線分" , setData ,objId )
End Sub

-------------------------------------------------------------------------

サンプルインターフェース使用の手続き:
このインターフェースを使用するためには、LT VB-COMのシステムディレクトリ内の以下のファイルを
VBやVBAのエディタ上でインポートして使用してください。

      LT VB-COM.bas



 コマンド実行

  AutoCAD LTに対するコマンドの実行について説明します

LT VB-COMは、AutoCAD LTのすべてを制御できる開発ツールではありません。基本的にはAutoCAD LTの図面データベース内のオブジェクトを操作するための開発ツールです。そのため、実際のプログラム設計の中では、AutoCAD LTの「コマンド」実行等による操作も発生してきます。
コマンドの実行は、VB(Visual Basic)の標準機能を利用しAutoCAD LTに対して「キー」や「メッセージ」を発行します。

「キー」の発行(SendKeys関数):
簡単にAutoCAD LTに情報を送りたい場合には、この「SendKeys」関数による「キー」の発行が便利です。

   SendKeys "メッセージ", True

このヘルプの中でもサンプルにいくつか使用していますが、手続きが不要なので簡単に使用できます。
「SendKeys」関数で「キー」を送信す前にAutoCAD LTを「アクティブ」にしておく必要があるだけです。AutoCAD LTを「アクティブ」にするためには、以下のVB(Visual Basic)の標準関数を使用します。

  AppActivate "AutoCAD LT"

ただし、動作の確実さの点では多少問題があります。この関数は、アクティブなWindowにメッセージを送る関数のため、Windowsシステムとの同期などが合わなかったりすると、AutoCAD LTに正しく「キー」が送れない場合があります。
「SendKeys」関数はVB(Visual Basic)の標準関数です。詳細はVB(Visual Basic)に関する資料を参照してください。

[使用例]
-------------------------------------------------------------------------

Sub Sample()
   AppActivate "AutoCAD LT" '(AutoCAD LTをアクティブにする)
   'キー送信
   SendKeys "CIRCLE 5.0,5.0 1.5" & Chr$(13), True
End Sub

-------------------------------------------------------------------------

「メッセージ」の発行(SendMessage関数):推奨
AutoCAD LTに安全確実に情報を送るには、この「SendMessage」関数による「メッセージ」の発行が有効です。ただし、この「SendMessage」関数を使用するためには、Windows APIの呼び出しや、専用の構造体の作成など多くの手続きが必要です。(「SendMessage」関数はVB(Visual Basic)の標準関数です。呼び出しの方法や、構造体の詳細はVB(Visual Basic)に関する資料を参照してください。)

そこで、LT VB-COMではこの「SendMessage」関数による「メッセージ」の発行を簡単に実現するためのユーティリティを用意してあります。LT VB-COMを利用する際には、この手法を推奨しております。

このユーティリティを使用するためには、LT VB-COMのシステムディレクトリ内の以下のファイルをVBやVBAのエディタ上でインポートして使用してください。

      LT VB-COM.bas



ユーティリティ:

[書式]
                    送信ウィンドウ 送信文字列
                             ↓        ↓
         SendMsg ( hWnd  ,  msg )


設定するデータ:

[データ]
[内容]
[型]
送信ウィンドウ メッセージを送る先のウィンドウハンドルを指定します。LT VB-COMにおいて、AutoCAD LTのウィンドウハンドルは「obj.getHWND」を使用すると取得できます。

整数(Long)

メッセージ ウィンドウに送るメッセージの文字列を指定します。

文字列
(String)


[使用例]
-------------------------------------------------------------------------

Sub Sample()
   Dim es As Boolean    '(命令の「エラー状況」を格納する変数宣言)
   Dim objId As Variant   '(「オブジェクトID」を格納する変数宣言)
   Dim hWnd As Long   '(「Windowハンドル」を格納する変数宣言)
   '外部プログラムとの接続手続き
   Dim obj As Object     '(外部プログラムとの接続手続き保存用)
   Set obj = GetObject ( , "LT VBCOM.Application" ) '(外部プログラムとの接続手続き)
   hWnd = obj.getHWND '(AutoCAD LTの「Windowハンドル」を取得)
   'メッセージ送信
   SendMsg hWnd , " CIRCLE 5.0,5.0 1.5 "
End Sub

-------------------------------------------------------------------------