DXFことはじめ #2


 以前の投稿で、DXFはコンス・セルの集まりであることと、もっとも大きなデータのくくりがセクションであることを説明しました。

 ここでは、DXFの先頭にあるセクション(HEADERセクション)について説明します。

 DXFの2行で一つのペアになっていて、それをコンス・セルと呼ぶ(他の呼び方もあるけど、筆者はこれが好み)ことを踏まえて、ここでは、

 0 
SECTION
 2 
HEADER

を、

(  0 . SECTION)
(  2 . HEADER)

と表記して説明します。

HEADERセクション

 DXFのはじめにあるセクションです。中身は、こんな感じになっています。

(  0 . SECTION)
(  2 . HEADER)
(  9 . $ACADVER)
(  1 . AC1015)
(  9 . $ACADMAINTVER)
( 70 .    18)
(  9 . $DWGCODEPAGE)
(  3 . ANSI_932)
(  9 . $INSBASE)
( 10 . 0.0)
( 20 . 0.0)
( 30 . 0.0)
  ;
(  0 . ENDSEC)

 はじめの2つはセクションの開始のしるしとセクションの名前なので、省いて見てみると、

(  9 . $ACADVER)
(  1 . AC1015)
(  9 . $ACADMAINTVER)
( 70 .    18)
(  9 . $DWGCODEPAGE)
(  3 . ANSI_932)
(  9 . $INSBASE)
( 10 . 0.0)
( 20 . 0.0)
( 30 . 0.0)
  ;
(  0 . ENDSEC)

一回おきに、グループコードが9のコンスセルになっているようです。そして、その値は$から始まる識別子みたいですね。ってゆうか、そういうことなんですけど。

 HEADERセクションは、基本的には、2つのコンスセルが一組のkey-valueペアになっています。おそらく、これはAutoCAD内で使っている設定を吐き出したものと考えて間違いないでしょう。こんな感じ、

((  9 . $ACADVER)      . (  1 . AC1015))
((  9 . $ACADMAINTVER) . ( 70 .    18))
((  9 . $DWGCODEPAGE)  . (  3 . ANSI_932))
((  9 . $INSBASE)      . (( 10 . 0.0) ( 20 . 0.0) ( 30 . 0.0))
  :
(  0 . ENDSEC)

で、考えると、わかりやすいと思います。

 さりげなく流しましたが、上記の4つめのペアは、2つのコンスセルの組ではなく10, 20, 30のグループコードのセルをまとめて扱っています。これらのグループコードは、3つで一つの3次元座標あるいは3次元ベクトルを表します。

 というわけで、上記の部分を口語訳すると、使用したAutoCADのバージョン($ACADVER)は、文字列表記で”AC1015″、数値で表す($ACADMAINTVER)と、バージョン18、使用している文字列エンコーディング($DWGCODEPAGE)はANSI_932、挿入基点($INSBASE)が座標(0, 0, 0)であることを意味しています。

 DXFを扱う用途によって違いはありますが、実際にはほとんどが必要のないデータです。リファレンス・マニュアルから自分が必要なデータを拾い出し、それ以外は、無視してしまいましょう(^-^)。