DGNファイルの注意点あれこれ

DGNファイルは変わったフォーマットではあります。
相当古いフォーマットらしいです。

以下では、デザインファイルにかかわる注意点を列挙します。

詳細についてはMicrostation 95/ISFF Description (pdf)を参照してください。

単位

デザインファイルの各点の座標値は整数値(LONG)で保存され、UORと呼ばれています。
したがって、値の範囲は-2147483647~2147483648までです。

この値を実際の単位と関連付けている情報はTCB(Terminal Control Block)という要素として書き込まれています。

TCBには主単位、副単位のそれぞれの名前と比率が書き込まれているフィールドがあります。
主単位がメートル、副単位がミリメートルならば、1:1000の比率が書き込まれます。
dgnlibは、このテーブルを参照して、UORを主単位+小数点に変換して浮動小数で返してきます。

問題はデザインファイルの値の範囲です。
上記のとおり、値の範囲は決まっているので、単位の設定で範囲が変わってしまいます。
例えば、主単位メートル、副単位ミリメートルの場合、値の範囲は-2147483.647~2147483.648mです。
意外と狭い範囲なので、UTM座標系のデータだったりすると範囲を超えてしまうことがあります。

この場合はしょうがないので、主単位をメートル、副単位をセンチメートルとするしかありません。
これなら値の範囲は-21474836.47~21474836.48mとなります。

デザインファイルはこのように、任意の単位を使用することが出来るので、
使うときには単位の設定を確認しておいたほうが無難でしょう。

デザインファイルには色の情報を各要素ごとに持つことが出来ます。
しかし、この色情報はRGBの値ではなく、カラーテーブルへの番号です。

カラーテーブルはGroup Data Elementsという要素に書き込まれています。
読み込み側で色を再現したいときはあらかじめこの要素から色情報を取り出しておく必要があります。

読めない要素

正確には、dgnlibが読み込むファイルはIntergraph標準ファイルです。
したがって、標準ファイルが準拠していない要素は読み込むことが出来ません。

筆者が知る限りでは、寸法要素、複線は確か読み込めなかったと思います。

点要素

デザインファイルにはポイントをあらわす要素がありません。

ポイントは、長さ0の線分要素として記録されます。
ポイントと線分を明確に区別したい場合は始点と終点の座標を調べる必要があります。

2Dと3Dファイル

デザインファイルは2次元ファイルと3次元ファイルでフォーマットが異なります。
dgnlibはこの違いを吸収して要素の情報を返してくれますが、いくつか注意があります。

  • 当然ですが、各頂点のデータがxyかxyzかで異なります。
  • テキスト、弧、楕円要素は2Dなら回転角、3Dならクオータニオンを返します。

これまた明確に区別したい場合はあらかじめ2Dか3Dかを調べる必要があります。

デザインファイルが2Dか3Dかの区別は、TCBに書き込まれています。

連続線分、多角形要素の頂点数の上限

これらの要素の頂点数は、上限が100点までと決められています。
100点を越える連続線分、多角形要素は複合連結、複合多角形要素として書き込まなければなりません。

アーカイブ