DxfExtract


説明

DXFファイルから指定した情報を抽出し、2次元配列に返します。

 

書式

Object.DxfExtract(retCount,ExtractArray,SectionName,TableName,ObjectName,GroupList,[DxfFullPath]) As Boolean

引数 説明
retCount 抽出されたオブジェクトの数を返す変数を指定します。
ExtractArray 抽出結果が2次元の配列で返されます。
SectionName セクション名(HEADER,TABLES,BLOCKS,ENTITIES等)を指定します。
TableName テーブル名(LAYER,LTYPE等)を指定します。
ObjectName 抽出したいオブジェクト名(TEXT,LINE等)を指定します。オブジェクト名にはワイルドカード(*)等のパターン文字を含めることが出来ます。
GroupList 抽出したい複数のグループコードをパイプ文字で区切って指定します。
DxfFullPath 省略可能です。省略するとWindowsテンポラリフォルダ内のAcadRemocon.dxfになります。

 

戻り値

戻り値 説明
True 正常終了しました。
False 異常終了しました。エラーの詳しい内容はShowErrorメソッドで確認出来ます。

 

説明

例えば、3個のTEXTオブジェクトを含むDXFファイルに対して、下記のような引数を与えて実行した場合
Object.DxfExtract retCount,ExtractArray,"ENTITIES","","TEXT","1|10|20"

2次元配列 ExtractArray(X,Y) は、下記のような構造になります。

配列の添字 (0,Y) (1,Y) (2,Y) (3,Y)
(X,1) 文字1のオブジェクト名"TEXT" 文字1のグループコード1の内容 文字1のグループコード10の内容 文字1のグループコード20の内容
(X,2) 文字2のオブジェクト名"TEXT" 文字2のグループコード1の内容 文字2のグループコード10の内容 文字2のグループコード20の内容
(X,3) 文字3のオブジェクト名"TEXT" 文字3のグループコード1の内容 文字3のグループコード10の内容 文字3のグループコード20の内容

例えば文字3の内容は、ExtractArray(1,3)で得ることが出来ます。

 

高度な使い方

2次元配列 ExtractArray の通常的に使用するエリアは ExtractArray(1〜グループコードの種類,1〜抽出されたオブジェクト数) となりますが、それ以外にも下記の列が確保されています。

 

使用例(VBScript)

Dim Acad  'Acad変数はErサブルーチンでも使うのでここで宣言
Call Main 'Mainサブルーチンコール

'選択した直線を50mm平行移動
Sub Main()
    'AcadRemoconオブジェクト作成
    Set Acad = CreateObject("AcadRemocon.Body")
    '図形選択→DXFファイル書き出し(ロックされた画層で描かれた図形は選択不可)
    If Not Acad.acDxfOut("線分を選択", "", False) Then Er: Exit Sub
    'DXFファイルからLINEオブジェクトを抽出(10=始点X座標のグループコード,11=終点X座標のグループコード)
    If Not Acad.DxfExtract(Cnt, ExtArr, "ENTITIES", "", "LINE", "10|11") Then Er: Exit Sub
    '抽出数が0なら終了
    If Cnt = 0 Then Exit Sub
    '始点と終点のX座標を50mmずらす
    For i = 1 To Cnt: ExtArr(1, i) = ExtArr(1, i) + 50: ExtArr(2, i) = ExtArr(2, i) + 50: Next
    '配列への変更をDXFファイルに反映
    If Not Acad.DxfUpdate(ExtArr) Then Er: Exit Sub
    'DXFIN実行
    If Not Acad.acDxfIn() Then Er: Exit Sub
    '直前の選択セットを削除
    If Not Acad.acPostCommand("ERASE P^M^M") Then Er: Exit Sub
End Sub

'エラー処理
Sub Er()
    'ユーザーによるキャンセル
    If Acad.ErrNumber = vbObjectError + 1000 Then
        'ここにキャンセル時の処理を追加
        '

    Else
        'エラー内容表示
        Acad.ShowError
    End If
End Sub

 

参考資料

0 : Entity,Table entityの開始、またはファイルセパレータ、これに続くテキスト値でentityタイプを指定。
1 : Entityのテキスト値
2 : 属性タグ、Blockの名前など
3 - 4 : その他の文字列、名前の値
5 : Entityハンドル(16進数文字列)
6 : 線種名
7 : テキストスタイル名
8 : レイヤ名
9 : 変数名(DXFのHEADERセクションでのみ使用)
10 : プライマリX座標値(この後にY値,Z値の20,30が続く)
11-18 : その他のX座標値(この後にY値,Z値の21-28,31-38が続く)
20 : プライマリY座標値
21-28 : その他のY座標値
30 : プライマリZ座標値
31-37 : その他のZ座標値
38 : AutoCAD R11以前のみ、高さ(0でない場合)
39 : Entityの厚さ
40-48 : 浮動小数点値(テキスト高さ、スケールファクタなど)
49 : 繰返し値
50-58 : 角度
62 : 色番号