Polymorphism











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

扱えるデータ形式
LT VB-COM HELP Samples


ホーム > 製品 > LT VB-COM > 充実のヘルプ > LT VB-COMの基本 > 扱えるデータ形式

LT VB-COMで扱えるデータ


LT VB-COMで使用できるデータの種類について説明します

LT VB-COMは基本的にVB(Visual Basic)またはVBA(Visual Basic for Application)による、AutoCAD LT用開発ツールです。そのため、基本的なプログラムの構造や制限はVB(Visual Basic)に依存しています。そのため、使用できるデータの種類もVB(Visual Basic)に準拠したものになります。

しかし、LT VB-COMはAutoCAD LTの図面データベース上のオブジェクトを操作することが可能となっているために、図面データベース上のオブジェクトとデータのやりとりが必要となります。このとき、図面データベース上のオブジェクトが扱えるデータを利用しないと、図面データベースのオブジェクトに正しくデータを渡すことはできません。

ここでは、AutoCAD LTの図面データベース上のオブジェクトが扱えるデータの種類について説明します。以下にオブジェクトが取り扱うことができるデータの一覧を表示します。


 オブジェクトが扱えるデータ:

[内容] [型]
実数 実数(Double)
文字列 文字列(String)
16ビット整数 整数(Integer)
ブール値 整数(Integer)
32ビット整数 整数(Long)
オブジェクトID 整数(Long)
3D座標値 実数配列(Double 0 To 2)
3Dベクトル 実数配列(Double 0 To 2)
3次元マトリクス 実数配列(Double ( 0 to 3 , 0 to 3 ))
リザルトバッファ リンクリスト (コード .データ)のリスト


「整数」、「実数」、「文字列」などは通常のVB(Visual Basic)とまったく同様です。それ以外の特殊なデータも、基本的には「整数」や「実数」を配列などで組み合わせて表現しているデータです。以下に各データの詳細な意味と構造を紹介します。



ブール値:
真(True)か偽(False)を表すための値です。オブジェクトとの間で使用する場合には、整数(Integer)型の「0」と「1」のみを使用しています。値の意味は以下の通りです。
  1=真(True)
  0=偽(False)



オブジェクトID:
LT VB-COMにおけるオブジェクトIDは、ObjectARXのそれと異なり単純な整数で表現しています。オブジェクトIDをオブジェクトとの間で使用する場合には、整数(Long)型を使用します。オブジェクトIDは、通常の整数(Long)型で表現されているため、そのまま使用することができます。



3D座標値:
図面データベース上のオブジェクトの多くは、3次元に対応したデータ構造になっています。そのため座標値も3次元用の座標値が必要となります。3次元座標値はXYZの3つの実数値から構成されるデータです。そのためVB(Visual Basic)上ではXYZの3つの実数値をまとめて格納できるように配列を使用して表現できるようにしています。

 例)
    Dim pointData ( 0 to 2 ) As Double
    pointData ( 0 ) = X座標値
    pointData ( 1 ) = Y座標値
    pointData ( 2 ) = Z座標値

3次元座標値は配列で表現しているため、座標値を1つのデータとして扱うことが可能です。また、配列の中身を操作することで、各成分のデータも操作可能です。



3Dベクトル:
図面データベース上のオブジェクトの多くは、3次元に対応したデータ構造になっています。そのためベクトルも3次元用のベクトルが必要となります。3次元ベクトルはXYZの3つの実数値から構成されるデータです。そのためVB(Visual Basic)上ではXYZの3つの実数値をまとめて格納できるように配列を使用して表現できるようにしています。

 例)
    Dim vectorData ( 0 to 2 ) As Double
    vectorData ( 0 ) = X成分
    vectorData ( 1 ) = Y成分
    vectorData ( 2 ) = Z成分

3次元ベクトルは配列で表現しているため、座標値を1つのデータとして扱うことが可能です。また、配列の中身を操作することで、各成分のデータも操作可能です。



3Dマトリクス:
図面データベース上のオブジェクトの多くは、3次元に対応したデータ構造になっています。そのため変換用のマトリクスも3次元マトリクスとなります。3次元マトリクスは以下のような4 X 4の配列(2次元配列)で表現されます。

1.0

0.0

0.0

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0


この3次元マトリクスをすべて自分で作成する場合、各成分は以下のように表現されます。

setData ( 0 , 0 )

setData ( 0 , 1 )

setData ( 0 , 2 )

setData ( 0 , 3 )

setData ( 1 , 0 )

setData ( 1 , 1 )

setData ( 1 , 2 )

setData ( 1 , 3 )

setData ( 2 , 0 )

setData ( 2 , 1 )

setData ( 2 , 2 )

setData ( 2 , 3 )

setData ( 3 , 0 )

setData ( 3 , 1 )

setData ( 3 , 2 )

setData ( 3 , 3 )


3次元マトリクスのデータを命令の結果として事前に取得していれば、そのまま1つのデータとして使用できますが、新規に3次元マトリクスを自分で作成する場合は、以下のような作業が必要になります。

  例1)マトリクスの初期値の成分を自分で設定する場合
       Dim setData( 0 to 3 , 0 to 3 ) As Double    '(命令の実行に必要な「設定データ」宣言)
       setData( 0,0 )=1.0: setData( 0,1 )=0.0: setData( 0,2 )=0.0: setData( 0,3 )=0.0
       setData( 1,0 )=0.0: setData( 1,1 )=1.0: setData( 1,2 )=0.0: setData( 1,3 )=0.0
       setData( 2,0 )=0.0: setData( 2,1 )=0.0: setData( 2,2 )=1.0: setData( 2,3 )=0.0
       setData( 3,0 )=0.0: setData( 3,1 )=0.0: setData( 3,2 )=0.0: setData( 3,3 )=1.0

  例2)「移動」の変換マトリクスの成分を自分で設定する場合
   「移動」の変換を設定する場合は、以下のX,Y,Zの部分に移動変異を設定します。

1.0

0.0

0.0

X方向

0.0

1.0

0.0

Y方向

0.0

0.0

1.0

Z方向

0.0

0.0

0.0

1.0


       Dim setData( 0 to 3 , 0 to 3 ) As Double    '(命令の実行に必要な「設定データ」宣言)
       setData( 0,0 )=1.0: setData( 0,1 )=0.0: setData( 0,2 )=0.0: setData( 0,3 )=5.0'←ここがX方向変位
       setData( 1,0 )=0.0: setData( 1,1 )=1.0: setData( 1,2 )=0.0: setData( 1,3 )=6.0'←ここがY方向変位
       setData( 2,0 )=0.0: setData( 2,1 )=0.0: setData( 2,2 )=1.0: setData( 2,3 )=7.0'←ここがZ方向変位
       setData( 3,0 )=0.0: setData( 3,1 )=0.0: setData( 3,2 )=0.0: setData( 3,3 )=1.0

  例3)3Dマトリクスの初期値を幾何計算(ジオメトリ)を利用して設定する場合
    3Dマトリクスの初期値(単位行列)

1.0

0.0

0.0

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0

0.0

0.0

0.0

0.0

1.0


    3次元マトリクスの各成分を自分で設定するのは面倒な作業です。
    3次元マトリクス用幾何計算(ジオメトリ)オブジェクト(AcGeMatrix3d)
    を利用すると、3次元マトリクスが簡単に利用できます。
       Dim setData As Variant    '(命令の実行に必要な「設定データ」宣言)
       Dim es As Boolean        '(この命令を実行した結果を格納する「エラー状況」)
       Dim obj As Object         '(外部プログラムとの接続手続き保存用)
       Set obj = GetObject ( , "LT_VBCOM.Application") '(外部プログラムとの接続手続き)
       '(変位のベクトルから3次元マトリクスを作成)
       es = obj.geom ( "3Dマトリクスジオメトリ" , Null , "単位行列設定" , Null , setData)

  例4)「移動」の変換マトリクスを幾何計算(ジオメトリ)を利用して設定する場合
    3次元マトリクスの各成分を自分で設定するのは面倒な作業です。
    3次元マトリクス用幾何計算(ジオメトリ)オブジェクト(AcGeMatrix3d)
    を利用すると、3次元マトリクスが簡単に利用できます。

       Dim setData As Variant    '(命令の実行に必要な「設定データ」宣言)
       Dim vec ( 0 to 2 ) As Double    '(3次元ベクトル用データ)
       Dim es As Boolean        '(この命令を実行した結果を格納する「エラー状況」)
       Dim obj As Object         '(外部プログラムとの接続手続き保存用)
       Set obj = GetObject ( , "LT_VBCOM.Application") '(外部プログラムとの接続手続き)
       vec ( 0 ) = 2.5: vec ( 1 ) = 5.5: vec ( 2 ) = 0.0 '(平行移動変位をベクトルで指定)
       '(変位のベクトルから3次元マトリクスを作成)
       es = obj.geom ( "3Dマトリクスジオメトリ" , Null , "平行移動" , vec , setData)



リザルトバッファのリンクリスト:
カスタマイズで使用する「拡張データ」や「拡張レコード」を使用する場合、それらにセットする値はリザルト バッファのリンクリスト形式のデータになります。リザルト バッファはデータの意味を明確にするために、1つのデータをそのデータの意味を表す「コード」と実際の「データ」から構成します。コードは、決められた整数の値になります。

(コード ・ データ)

このデータ表現手法は、図面の中間ファイル「DXF」ファイル内で使用されている構造と同じ考え型のものです。こうすることで、「データ」の値が何を表すものなのかが、明確になります。この「コード」と「データ」を組み合わせたリザルト バッファ型のデータを複数集めたものがリンクリストになります。

(コード ・ データ)
(コード ・ データ)
(コード ・ データ)

「拡張データ」や「拡張レコード」には、このリザルト バッファ型のデータを任意の数だけ保存することができます。そのために、リザルト バッファ型のデータをリストにして扱います。「拡張データ」や「拡張レコード」に値をセットする場合には、このリザルト バッファのリンクリストを自分で作成し、「拡張データ」や「拡張レコード」に渡します。また、「拡張データ」や「拡張レコード」からデータを受け取る際にも、このリザルト バッファのリンクリスト形式で受け取ることになります。

リザルト バッファの「コード」部分で使用できる整数の値は、「拡張データ」と「拡張レコード」では若干異なります。以下にそれぞれで使用できる「コード」の種類とその「コード」が表す意味を一覧します。

    <「拡張レコード」で使用できるコード一覧>

[コード]

[データ型]

1

4

文字列

6

9

文字列

10

17

3D座標値

38

59

実数

60

79

16ビット整数

90

99

32ビット整数

102



"{"または "}"

140

149

実数

170

179

16ビット整数

210

219

実数

270

279

16ビット整数

280

289

8ビット整数

300

309

文字列



    <「拡張データ」で使用できるコード一覧>

[コード]

[データ型]

1000

一般文字列

1001

アプリケーション名(文字列)

1002

"{"または "}"

1003

画層(文字列)

1004

バイナリ(未サポート)

1005

ハンドル番号(文字列)

1010

一般3D座標値

1011

ワールド座標上での位置

1012

ワールド座標上での変異

1013

ワールド座標上の方向

1040

一般実数

1041

距離(実数)

1042

尺度(実数)

1070

16ビット一般整数

1071

32ビット一般整数

基本的に「拡張データ」の場合には、「コード」の値が、1000番以降になります。
上記の「コード」を利用して、リザルト バッファのリンクリストをLT VB-COMで使用する場合には、以下のように「コード」と「データ」を「配列(Variant)」型の変数に順番に格納することで表現します。

Dim setData ( 0 To n ) As Variant
setData ( 0 ) =コード
setData ( 1 ) =データ
setData ( 2 ) =コード
setData ( 3 ) =データ
  ・・・・・・
setData ( n-1 ) =コード
setData ( n ) =データ

「拡張データ」や「拡張レコード」からデータを受け取る際にも、上記の形式の「配列」として受け取ることになります。以下に「拡張データ」や「拡張レコード」のデータセットと受け取りの例を示します。

  例)変数「getData」に「拡張データ」を取得した場合


[値] [意味] [内容]
getData ( 0 ) 1070 コード (1070・123)
getData ( 1 ) 123 データ
getData ( 2 ) 1040 コード (1040・1.23)
getData ( 3 ) 1.23 データ
getData ( 4 ) 1000 コード (1000・"ABC")
getData ( 5 ) "ABC" データ
getData ( 6 ) 1010 コード (1010・(5.0,5.0,0.0))
getData ( 7 ) (5.0,5.0,0.0) データ


  例)変数「setData」を利用して「拡張レコード」をセットする場合


[値] [意味] [内容]
setData ( 0 ) 60 コード (60・123)
setData ( 1 ) 123 データ
setData ( 2 ) 38 コード (38・1.23)
setData ( 3 ) 1.23 データ
setData ( 4 ) 1 コード (1・"ABC")
setData ( 5 ) "ABC" データ
setData ( 6 ) 10 コード (10・(5.0,5.0,0.0))
setData ( 7 ) (5.0,5.0,0.0) データ

「拡張データ」や「拡張レコード」に実際に値をセットする具体的な方法は、以下の「命令」を参照してください。

・AcDbObject(全オブジェクト共通)の操作
 □ xData 日本語名:「拡張データ取得」
 □ setXData 日本語名:「拡張データ設定」

・AcDbXrecord(拡張レコード)オブジェクトの操作
 □ rbChain(または getRbChain) 日本語名:「一連のリザルトバッファ取得」
 □ setFromRbChain 日本語名:「一連のリザルトバッファ設定」