NCデータをDXF変換するためのDXFフォーマットを解説します

NCデータをDXF変換するためのDXFフォーマットを解説します

前回公開した、NCデータ確認ソフトに、少し名前を変更しDXF変換機能を追加しました。


「NcCheck2Dxf Ver3.41」こちらからダウンロードできます。


機能追加にあたり、DXFファイルの情報を集めなおしたので、今回はDXFについての記事を書いてみます。

以前の記事で、DXFには少し触れていますので、興味ある方は下記もご覧ください。

こちらは、DXFファイルから、円要素のみを穴情報として取り出し、簡易的な穴加工用NCデータを作成するソフトでした。
今回は、逆にNCデータからDXFファイルを作成しようと思います。
DXFフォーマット仕様は、私はあまり理解していませんが、手元にある古~い資料と他CADから吐き出したDXFファイル、さらにネット上の情報などを参考に書いていこうと思います。

DXFファイルフォーマット

DXFはAutodesk社のAutoCADの図面情報が記述されているテキストファイルで、他CADとの互換性を重視して規定しているフォーマットです。
そのため多くのCADがサポートしているので、事実上の標準フォーマットと言えるデータ構造です。

DXFを構成するグループ

DXFはグループの集まりです。
2行で1グループの構成で、最初がグループコード、次がグループ値です。
グループコードは、右寄せで3文字になるように左をスペースで埋めた正の整数です。
グループ値は、グループコードによりその変数の型が異なります。
古い情報ですが、下記のように決められています。

グループ・コード  グループ値
++++++++++++++++++++++++++++++++++++++++++++++++
0 ~ 9       文字列
    0    ファイルの分離符号、データの開始
    1    一つのデータに対する最初の文字の値
    2    名前(属性名称、複合図形名など)
   3-5    その他の文字の値あるいは名前の値
    6    線種名
    7    字体名
    8    画層名
    9    変数名を特定(HEADERセクションのみ)
--------------------------------------------------
10~59      浮動小数点
    10   最初のX座標(線分、円中心、文字始点など)
  11-18   その他のX座標
    20   最初のY座標
  21-28   その他のX座標
    30   最初のZ座標
  31-36   その他のX座標
    38   0でなければ、この図形の高度
    39   0でなければ、この図形の厚さ
  40~48   浮動小数点値(文字高さ、尺度など)
    49   反復される値(LTYPE ダッシュの長さなど)
  50~58   角度
-----------------------------------------------------
60~79       整数 
    62   色番号 
    66   後続図面ありフラグ
  70~78   反復数、フラグ、ビット、モードなど整数値 
-------------------------------------------------------  

AutoCAD 2011の情報は、こちらに公開されています。
各データテーブルの記入項目、ファイル分離符号は、常にグループコード「 0」で始まり、次の行に項目を説明する名前が続きます。

DXFの構成

一般的なDXFファイルの構成は、以下のようなイメージです。
DXFバージョンによっては、他にもいくつかのセクションがあるようですが変換ソフトでは、下記から「BLOCKS」を除いた、3つのセクションで構成しようと思います。

----------------------------------------
HEADER セクション
  図面の情報データ、空間など
----------------------------------------
TABLES セクション
  線種、色、レイヤー、スタイルなど
----------------------------------------
BLOCKS セクション
  ブロック図形のデータ
----------------------------------------
ENTITIES セクション
  線・円弧など、図面データ
----------------------------------------
END OF FILE
  ファイルの終わり
----------------------------------------

一つのセクションは、
 0
SECTION
で始まり。
 0
ENDSEC
で終わります。

HEADER(ヘッダ) セクション

HEADERセクションは、図面に関する変数設定が記述されます。
AutoCAD 2011 の情報がこちらにありますが、別のCADで吐き出したDXFファイルのヘッダー部分をそのまま使用しても問題ないと思いますが、
公開の変換ソフトでは、図形要素が主な目的なので、このセクションは省略しても手持ちのCADでの読み込みは問題ありませんでした。
私は、「$ACADVER」のAutoCAD のバージョン番号のみ定義する事にします。
なるべく古いDXF形式のほうが互換性はありそうなので、新しい機能は使用せず「AC1006」バージョン程度の指令とします。

  0
SECTION
  2
HEADER
  9
$ACADVER
  1
AC1006
  0
ENDSEC

TABLES(テーブル)セクション

TABLESセクションには、いくつかのTABLEが含まれます。
AutoCAD 2011 のTABLEセクション
ここでは、「LTYPE(線種)」「LAYER(画層)」のみを設定します。
各TABLE の順番は変化するかもしれませんが、「LTYPE」は常に「LAYER」より先に定義します。

LTYPE(線種)テーブル

LTYPEテーブルは、グループ「 2」に続いて「LTYPE」が指示され、続いて「 70」の後に、「LTYPE(線種)」の最大数を指定します。

  0
SECTION
  2
TABLES
  0
TABLE
  2
LTYPE
 70
     6

次に「 0」に続いて具体的な「線種」を定義していきます。
他CADが吐き出したDXFファイルを参考にしました。
種類は一般的な「CONTINUOS:実線」「DOT:点線」「HIDDEN:隠れ線」「DASHED:破線」「CENTER:一点鎖線」「PHANTOM:二点鎖線」の6種類とします。
種類は「 2」に続いて、線種名「CONTINUOS」などを設定し
次に「 70」に続いては標準フラグ値の設定ですが、AutoCADコマンド用みたいで無視してよいとの事なので「0」にしました。
次に「 3」に続いて、線種の説明「Solid line」などを定義します。
次に「 72」に続いては、位置合わせコードとなっていますが、常に「65」のようです。
次は「 73」に続いて、線種パターンの要素数です。
要素数は、プロッタで描く場合を想像し「ペンダウン」の場合と「ペンアップ」の場合をそれぞれ1と数えます。
ただし、「実線」の場合は少し特殊で「0」となるようです。
続いて、「 40」でパターンの全長、「 49」で「ペンアップ・ダウン」の長さを指定します。
ペンダウンはプラス符号、ペンアップはマイナス符号になります。
ここも、「実線」の場合は、「0.0」になるようです。

実線の定義

  0
LTYPE
  2
CONTINUOUS
 70
      0
  3
Solid line __________
 72
     65
 73
      0
 40
0.0

点線の定義

点線は、「ペンダウン:0.1」「ペンアップ:1.0」としてみます。

  0
LTYPE
  2
DOT
 70
0
  3
Dot line ..........
 72
     65
 73
      2
 40
1.1
 49
0.1
 49
-1.0

一点鎖線(センターライン)の定義

一点鎖線は、「ペンダウン:5.0」「ペンアップ:1.0」「ペンダウン:1.0」「ペンアップ:1.0」とします。

  0
LTYPE
  2
CENTER
 70
     64
  3
Center line ___ _ ___
 72
     65
 73
      4
 40
8.0
 49
5.0
 49
-1.0
 49
1.0
 49
-1.0

LTYPEテーブルの終了

各テーブルの終了は「 0」に続き「ENDTAB」を定義します。

  0
ENDTAB

LAYER(画層)テーブル

LAYERテーブルも、まずはグループ「 2」に続いて「LAYER」が指示され、続いて「 70」の後に、「LAYER(画層)」の最大数を指定します。

  0
TABLE
  2
LAYER
 70
     20

続いて、レイヤーの名前や色、事前に設定されている線種を定義します。
「 2」に続いて適当なレイヤー名、次に「 70」に続いては「LTYPE」と同様に「 0」でよさそうです。
次に「 62」に続いて色番号を定義します。
基本的な色番号は

1:赤
2:黄
3:緑
4:水
5:青
6:紫
7:白

となります。
次は「 6」に続いて、「LTYPE」で定義された線種名を指定します。
テーブル終了は同様に「 0」「ENDTAB」で終了します。

  0
LAYER
  2
Move
 70
      0
 62
      1
  6
DOT
  0
LAYER
  2
Center
 70
      0
 62
      7
  6
CENTER
  0
ENDTAB

STYLE(文字スタイル)テーブル

ここも最初のSTYLEテーブルの宣言は同様で、「 2」に続いてスタイル名を定義するのも同じです。
作成するDXFデータに「文字」を使用しない場合には、このテーブルは不要かもしれませんが、とりあえず1つだけ「STANDARD」の名前で定義しておこうと思います。

  0
TABLE
  2
STYLE
 70
      1
  0
STYLE
  2
STANDARD
 70
      0
 40
0.0
 41
1.0
 50
0.0
 71
      0
 42
1.0
  3
TXT
  4
BIGFONT
  0
ENDTAB

ENTITIES(図形)セクション

ここからようやく図形要素を定義していきます。
前述の線種やレイヤーなどの属性が必要なければ、「ENTITIES」セクションだけでもいいということになります。
「ENTITIES」は、かなり多数の図形要素を定義できますが、2Dレベルの図形をDXFに変換する目的であれば、
直線(LINE)、円(CIRCLE)、円弧(ARC)、点(POINT)、程度でいいと思いますが、図形の最大最小や加工時間など、コメントなどもDXF内に含めたい場合には、文字列(TEXT)もあると便利ですね。
また、AC1012(R13)のバージョンあたりから、サブクラスマーカーと呼ばれるグループコードが標準化されたようですが、ここではそれ以前の単純な方法を使っていきたいと思います。

共通のグループコード

まずは、上述のセクションと同様に、
「 0」「SECTION」「 2」「ENTITIES」として図形セクションの定義が始まる事を宣言します。
その後、「 0」に続いて「図形タイプ」(LINE など)、
「 8」に続いて「レイヤー名」
その次から、図形の座標値が定義されていきます。
座標は、「10」「20」「30」それぞれに続いて始点や中心の「X,Y,Z」座標。
「11」「21」「31」は終点の「X,Y,Z」座標。
「40」は円弧半径。「50」「51」は円弧の「開始・終点角度」となります。

LINE(線分)

「ENTITIES」セクション宣言後、「 0」に続いて、図形タイプ「LINE」を指示します。
次に「 8」の次で「LAYER」で定義済みのレイヤー名を指定する事で、この線分を任意のレイヤーに含める事ができます。
「 62」や「 6」のグループコードを使用して、この線分のみの「色番号」や「線種」を指定する事もできます。
設定しなくても、問題はありません。
次の「 10」「 20」「 30」で線分の開始点の「X , Y , Z」座標を設定します。
Z軸が必要ない場合は、省略できます。
続けて、「 11」「 21」「 31」で線分の終点を指示します。

  0
ENDSEC
  0
SECTION
  2
ENTITIES
  0
LINE
  8
Center
 10
-20.1230
 20
0.0000
 11
20.7890
 21
0.0000
  0
LINE
  8
Center
 10
0.0000
 20
-20.5670
 11
0.0000
 21
20.8960
  0
ENDSEC

ARC(円弧)

円弧も線分と基本的には定義の方法は同様ですが、
図形タイプが「ARC」になり、「 10」「 20」「 30」のグループコードは円弧の中心座標となります。
次に「 40」で円弧半径を定義し、「 50」「 51」で円弧の開始角度、終了角度を指示します。
真円の場合には、次に説明する「CIRCLE」を使用するのが基本ですが、「ARC」でも「50」「51」を「0.0 , 0.0」や「0.0 , 360.0」とする事で真円と認識してくれるCADもありましたが、図形を描いてくれないCADもありました。
やはり、円と円弧は別に定義したほうがよさそうですね。

  0
ARC
  8
Nomal
 10
0.0000
 20
0.0000
 40
50.0000
 50
15.1230
51
260.5670

CIRCLE(円)

円は、円弧に比べると図形タイプを「CIRCLE」とし、「 50」「 51」のグループコードが省略された形になっています。

  0
CIRCLE
  8
Nomal
 10
0.0000
 20
0.0000
 40
50.0000

EOF(ファイルの終了)

最後に、「End Of File」ファイル終了コードを挿入して終了となります。

  0
EOF

NCデータからDXFファイルを作成するには、この程度の仕様でいいと思います。

NcCheck に DXF変換機能追加しました。

前回公開した、「NcCheck.exe Ver2.6」にDXF変換機能を追加し
「NcCheck2Dxf.exe Ver3.2」として公開します。
ウィンドウサイズとフォント状態を記憶する仕様としました。
「NcCheck2Dxf.exe Ver3.4」として公開します。
「NcCheck2Dxf.exe Ver3.41」として公開します。

ダウンロード

Vector には登録申請中です。
登録終了しましたら、こちらにアドレスをリンクします

C++Builderカテゴリの最新記事

%d人のブロガーが「いいね」をつけました。