DXF覚書


DXF(Drawing Interchange Format) AutoCAD Release12


・ENTITIESセクション

Entityの項目はDXFファイルのBLOCKとENTITIESセクションに現れる。
ふたつのセクションに現れるEntityは同一である。

次に述べるものはファイルに現れるそれぞれのEntityのフォーマットである。
いくつかのグループはEntityに必ず現れ、いくつかはオプションでありそして
それらのデフォルト値と異なる場合にのみ現れる。
これ以降では、常に存在するグループではグループ番号と機能を記し、
オプションのグループは -option N と示す。N はグループが省略された時の
デフォルト値である。

DXFを読み込むプログラムはグループのEntityがここに記する順序で存在すると仮定してはいけない。
Entity作成時のグループの終わりは次の0グループのしるし、次のEntityの始まりかセクションの終了
による。

DXFファイルは図面データベースを完全に表現するものだということ、
そしてAutoCADはさらに高度になり、追加される機能を収容するため新しいグループがEntity
に追加されることを忘れないでください。

もしDXFを処理するプログラムをテーブルドリブンで書き、現在定義されていないグループは
無視し、グループEntityの順序を仮定しないように作ったなら
AutoCADの将来のリリースを取り込むのも簡単でしょう。

各Entityは0グループのEntityタイプ始まる。
Entityで使用する名前は以下で示される。
どのEntityもEntityの属するレイヤ名を指定するグループ8を含む。
各Entityは高さ、厚さ、線種、色の情報を関連して一緒に持っても良い。

ハンドルが有効の場合、全てのEntityはハンドルのグループ5を持つ
(文字列で表現された16進番号)

以下のグループはEntityがデフォルトで無い場合のみそれらの物として含まれる。
グループが入力で(DXFIN)省略された時、そのデフォルト値は下記の三番目の欄の示す値になる。
もし、グループの値がデフォルトと同じ場合は出力(DXFOUT)は省略される。

全てのENTITYに共通のグループコード
Group code
意味
省略時デフォルト
6
線種名(BYLAYERでない時)。
特殊な線種名BYBLOCKは浮動的な線種
BYLAYER
38
高さ(0でない時)。R11以前のバージョンのみ出力
他ではZ座標が3xグループで各Entityに与えられる
0
39
厚さ(0でない時) 0
62
色番号(BYLAYERでない時)。0=BYBLOCK(浮動色)  256=BYLAYER 色 BYLAYER(256)
67
無い場合や0の時Entityはモデル空間
1=Entityはペーパ空間、その他は予備
0
210,
220,
230
これらのグループは各Line,Point,Circle,Shape,Text,Arc,Trace,Solid,Block参照,Polyline,寸法,属性,属性定義Entityに含まれ、もしその押出し方向がワールド座標のZ軸と平行でないときに含まれる。
X,Y,Z要素はEntityの押出し方向を示す
0,0,1

残りのグループは以下のようにEntity項目を作成する。
多くのEntityはフラグのグループを含む。
それらは整数のコード(6x,7xグループ)
Entityに関して様々な情報をエンコードする
そして個々のEntityタイプの詳細を
以下の記述では、与えられたbit値は
区切りのbit-codeは意味する
フラグは様々の true/false 値を含む
定義されないbitは無視されて0がセットされてDXFファイルが作成される。

LINE
10,20,30
Line 開始点
11,21,31
Line 終了点

POINT
10,20,30
  点     

  POINT Entityは、PMODEイメージの方位を決定する、オプションのグループ50を持つ。
  グループ値は、POINTが描かれた時のUCSのX軸とECS(EntityCoordinateSystem)の角度
  の負の値。
  POINTが描かれた時のUCSのX軸は常にPointのECSのXY平とに平行で、UCSのX軸とECSのX軸の
  角度は単純な2Dの角度である。
  グループ50の値は水平(有効なX軸)からECSのX軸までの角度である。
  ECSはこのセクションで後に記述される。

CIRCLE
10,20,30
 円中心  
40
 円半径  

ARC
10,20,30
TRACEの角の第1点
11,21,31
TRACEの角の第2点
12,22,32
TRACEの角の第3点
13,23,33
TRACEの角の第4点


SOLID(2D塗潰し)
10,20,30
solidの角の4点
11,21,31

12,22,32
3点のみが入力された時には(3角形solid)3番目と4番目のpointは同じ
13,23,33


TEXT
10,20,30
挿入基準点
40
高さ
1
文字列
50
回転角 -optional 0
41
X スケールファクタ -op 1.
51
傾斜角 -op 0
7
テキストスタイル名 -op STANDARD
71
テキストジェネレーションフラグ -op 0
72
水平位置調整 -op 0
73
垂直位置調整 -op 0
11,21,31
アラインメント位置
-op 72又は73のグループがありそして0でない場合に限り、現われる

"テキストジェネレーションフラグ"は次のような意味のbit-codedフィールド
2
テキストは後向き(X鏡像)
4
テキストは逆さま(Y鏡像)

位置調整タイプの値(グループコード72,73-bitコードではない)はテキストで使用する
テキストの位置調整を示し、以下のようになる
Group73
垂直位置調整
Group72(水平位置調整)
0
Group72
1
Group72
2
Group72
3
Group72
4
Group72
5
3 (Top)
Left
Center Right


2 (Middle)
Left Center Right


1 (Bottom)
Left Center Right


0 (Baseline)
Left Center Right Aligned Middle Fit

もし位置調整がBaseline/Left(Group72,73が共に0)以外であれば、グループコード
11,21,31はアラインメントポイントを指定する。(又はアライン又はフィットのための
2番目のアラインメントポイント)

DXFOUTは、テキストストリング中の^(カレット)に続くASCIIコントロールキャラクタ
を扱う。
例えばASCIIのControl-G(BELL 10進コード7)は ^G を出力する。もしテキストそれ自身が
カレット文字を含むのなら、^ (カレット,空白)に拡張される。
DXFINは補足する変換を行う

SHAPE
10,20,30
挿入点
40
サイズ
2
SHAPE名
50
回転角 -optional 0
41
X スケールファクタ -op 1.
51
傾斜角 -op 0

BLOCK
2
BLOCK(複合図形)名
3
これもまたBLOCK名
70
BLOCKタイプフラグ
10,20,30
BLOCK基点

BLOCKが外部参照の場合グループコード1(Xrefパス)も含む。
BLOCK EntityはEntitiesセクションにではなくBLOCKSセクションにのみ現れる。
BLOCKタイプフラグ(グループ70)はbit-codeで、以下の意味を持つ。

 1
 匿名のBLOCK、HATCH,自動調整寸法,内部操作,アプリなどで作成される
 2
BLOCKは属性を持つ
 4
BLOCKは外部参照(Xref)
 8
未使用
 16
BLOCKは外部従属
 32
外部参照が解決又は外部参照に従属
 64
この定義は参照されている

ENDBLK

  グループ無し。BLOCKSセクションにのみ現れる。

INSERT
66
属性ありフラグ -op 0
2
BLOCK名
10,20,30
挿入点
41
Xスケールファクタ -op 1
42
Yスケールファクタ -op 1
43
Zスケールファクタ -op 1
50
回転角 -op 0
70,71
行数、列数 -op 1
44,45
行間隔、列間隔 -op 0

もし属性ありフラグが1であれば、INSERTの後にATTRIB Entityが続き、SEQENDで終わる。

ATTDEF
10,20,30
属性テキスト開始点
40
テキスト高さ
1
デフォルト値,ASCIIコントロールキャラクタについてはTEXT参照
3
プロンプト文字列
2
Tag文字列
70
属性フラグ
73
フィールド長 -op 0
50
テキスト回転 -op 0
41
Xスケールファクタ -op 1
51
傾斜角 -op 1
7
テキストスタイル名 -op STANDARD
71
テキストジェネレーションフラグ -op 0,TEXT参照
72
水平方向位置調整タイプ -op 0,TEXT参照
74
垂直方向位置調整タイプ -op 0,TEXt参照
11,21,31
アラインメントポイント
-op72又は74のグループがありそして0でない場合に限り、現われる

属性フラグはbit-codedで以下の意味を持つ
  1
属性は不可視(表示されない)
  2
固定の属性
  4
この属性の入力に確認を必要とする
  8
属性は事前に設定されている(挿入時にプロンプトなし)

ATTRIB
10,20,30
テキスト開始点
40
テキスト高さ
1
属性値,ASCIIコントロールキャラクタについてはTEXT参照
2
属性Tag文字列
70
属性フラグ(ATTDEF参照)
73
フィールド長 -op 0
50
テキスト回転 -op 0
41
Xスケールファクタ -op 1
51
傾斜角 -op 1
7
テキストスタイル名 -op STANDARD
71
テキストジェネレーションフラグ -op 0,TEXT参照
72
水平方向位置調整タイプ -op 0,TEXT参照
74
垂直方向位置調整タイプ -op 0,TEXt参照
11,21,31
アラインメントポイント
-op72又は74のグループがありそして0でない場合に限り、現われる

POLYLINE
66
頂点継続フラグ
10,20,30
polyline高さ,30があれば高さ、10,20は常に0がセット
70
polylineフラグ -op 0
40
デフォルトの開始幅 -op 0
41
デフォルトの終了幅 -op 0
71,72
ポリゴンメッシュのMとNの数 -op 0
73,74
スムーズサーフェイスのMとNの密度 -op 0
75
カーブとスムーズサーフェイスのタイプ -op 0

デフォルトの幅は、幅のないどのVERTEXにも有効(後述)。

頂点継続フラグは常に1で、Polylineの後に必ずVertexEntityが続く事を示し、
シーケンス終了(SEQEND)Entityで終了する。
Polylineフラグ(グループ70)はbit-codeフィールドで以下のように定義される。

1
閉じたPolyline(又はM方向が閉じたPolygonメッシュ)
2
カーブにフィットした頂点が付加
4
Splineにフィットした頂点が付加
8
3D Polyline
16
3D Polygonメッシュ.
グループ75は以下のスムーズサーフェイスタイプを示す
0=スムーズサーフェイスフィット無し 5=2次B-Splineサーフェイス
6=3次B-Splineサーフェイス 8=Bezierサーフェイス
32
N方向に閉じたPolygonメッシュ
64
PolylineはPolyfaceメッシュ
128
線種タイプパターンはPolylineの頂点付近でも継続される

PolyfaceメッシュはDXF内でPolyline Entityの変形である事を表現している。
PolylineヘッダーはPolyfaceメッシュの始まりをPolylineフラグのグループ70の64bitで示す。
グループ71はメッシュの頂点数を表し、グループ72は面の数である。
PFACEコマンドで全てのメッシュを作成する限りこれらの数は正しいが、アプリはこれらの
フィールドに正しい値を必要としない、そしてAutoCADは実際にはそれら正確であることを
当てにしない。

Polylineヘッダーに、頂点の座標とメッシュを構成する面の指定するVERTEX Entityシーケンスが
続く。
アプリケーションはPolyfaceで任意の大きな数でPolygonを表現したいかもしれない。
しかしながらAutoCAD Entity構造は、FACE Entityが指定する頂点の数に制限を課す。
それらを三角形のくさび形に分解することによって、より複雑な多角形を表すことができる。
それらのエッジは、細分化が描かれて見えてしまう事を防ぐために、不可視にするべきである。
PFACEコマンドは自動的にこの細分化を行う、しかしアプリケーションが直接Polyfaceメッシュを
生成する時、アプリはそれ自身がこれをしなければならない。

面あたりの頂点の数はこの細分化時の鍵になる要因である。
システム変数PFACEVMAXは面Entityあたりの頂点の数を提供する。
この値はリードオンリーであり、4がセットされる。

PFACEコマンドで作成されたPolyfaceメッシュは常に、
全ての頂点座標Entityが最初に、続いて面定義のEntityと共に、生成される。
 
そのAutoCAD内部のPolyfaceメッシュの処理コードはでは[現在]この順序を必要としない;
それは、データベースの頂点座標と面の定義に分割された面の指定のない頂点のインデックスでも
動作する。

DXFからPolyfaceメッシュを読み込むプログラムは
AutoCADががそうであるように半端な頂点と面の発生に寛容であることが賢明である。