DXFの話

DXF形式からGAME BASICのポリゴンデータへの変換について(1998/7/7)

keep on shining your eyes!

…。まぁそんな感じで Poser 2.0J でエクスポートした DXF ファイルを、DXFCONV で変換してみたんですがあっさり異常終了な気分。現在開発元の Bits さんの方で原因調査をして頂いているところですが、ただ待っているだけっちゅうのもアレなんで自分で変換プログラム作ろうかとも思ってみました。対応版が先に出るのを覚悟で適当に作ってみたいと思います。飽きたら終了。

取り敢えず今の時点でわかったこと

まずはこのDXFファイルとDXFCONVで生成したリストを見てちょん。図形はなんの変哲もない直方体(下図)。ソフトは Shade de'but で 3DFACE を指定して書き出しました。

□

なんとなくわかりますかね?DXFCONV はドキュメントやソース(DXF2POL.C) を見るとわかるように、DXF ファイルの中から 3DFACE エンティティグループを抜き出して、それを GAME BASIC 用のデータに置き換えています。3DFACE エンティティグループてのは「面」を表しています。ですから例えば今回の場合は6面体ですから、合計6つの 3DFACE エンティティグループが出来るわけです。

0     (←グループコード)
3DFACE          (グループ1)
・
・
・
0
3DFACE          (グループ2)
・
・
・
(以下同様に合計6つ分続く)

DXF の場合は1つの形状に対して複数の 3DFACE エンティティグループで構成され(※あくまでも 3DFACE のデータの場合)、それぞれの 3DFACE エンティティグループは4つの頂点座標より成り立っています。

対して GAME BASIC のポリゴンデータの場合は、まず最初に SETVERTEX で頂点座標をナンバリングして登録、その後にそのナンバリングされた番号を使って面データを作成します。

んげーいい加減な説明をすると、DXF の 3DFACE エンティティグループが GAME BASIC の SETPOLYGON に対応してるって感じですかね。DXF の場合はその中(面データの中)に直接座標データまで持っちゃうけど、GAME BASIC の場合は座標に紐付いた番号の方を使うといった感じ。座標は座標でまた、別に登録するという。

DXFCONVがこけた理由

わかりません(ぉ  単純にデータ量が多過ぎるからかな〜と思って一応頂点数を数えるプログラムを作ってみたんですが、5476個ありました。

いかにもC初心者が書いたプログラム(削除しました)

かなり決め打ちで作ってありますので汎用性は全然ありませんし、誤動作の可能性はヴリヴァリにあります(死(しかも途中やり(死**2  そんなわけでここをこうした方が良いというアドヴァイスなんかあったら是非教えて下さい。

使い方はコマンドプロンプトから、以下のとおり。

dxf2gbp <入力ファイル名> <出力ファイル名>

出力ファイルはプログラムを起動した瞬間に新規に作りにいくんでデータは消えます。注意して下さい。あと実行ファイルじゃ無いんでコンパイルしてくださいね(おいおい)

その他・疑問点

  1. DXF形式にはASCII形式とBINARY形式があるみたいなんだけど、DXFCONVはBINARY形式に対応してるんだろうか?→多分無理。
  2. 3DFACEエンティティの無いDXFデータはどうなるの?→こんなんになります。(ファイル消失)
  3. SETVERTEXで登録できる個数は何に制限されるのか?→多分メモリの空き容量
  4. SETVERTEXで登録する頂点は重複不可か?→可能みたい…だけどメモリの無駄?だろうな。

参考文献

  1. 「グラフィックファイル フォーマット ハンドブック」(ASCII) / David C.Kay & John R.Levine著,MbCD(株式会社 森ビル)訳
  2. GAME BASIC for SEGASATURN付属DXFCONVのソース / Bits-Laboratory

DXF小話その2(1998/7/10)

インチキコンバータ完成

一応出来ました。(削除しました) 何故か.cppなのはご愛敬。

実行形式はコチラ(Ver.UPに伴いリンク削除:1998/07/12)。(Windows95のDOS窓で動作確認。)

※なにぶんC初心者のプログラムですので下手に動かすとヤバいかも知れません。くれぐれも各人の責任に於いてご使用ください。使用に際して発生したいかなる問題に対しても当方では一切責任を持ちかねます。ごめんね。

その他・疑問点

  1. 重複する頂点座標は取り除いていません。
  2. でっかいデータは転送時間が馬鹿です絶対。なんか転送中に必ず Communication errorで 終了。
  3. そのうちオブジェクト指向で書き直したいです>dxf2gbp。少なくとももう少しエレガンツに(ぷ

DXF小話その3(1998/7/12)

さらにバグ。1998/7/12,12:38が最新版です。下記リンクは修正済みです。

インチキコンバータVer.UP

Ver.UPのソースです。思い切りバグって真下。ゴメンナサイ。

実行形式はコチラ。(Windows95のDOS窓で動作確認。)

注意:前回のプログラムでは WORK.TMP という中間ファイルが出来っぱなしの状態になるという仕様でしたが、今回改善(?)しました。というか作らないようにしました。申し訳ないですが WORK.TMP を手で消して下さい。もう使わないのでいつまでも残ってしまうので…あ、というか WORK.TMP というファイルが既にあった場合は消えてしまいます。消えてしまった方ゴメンナサイ…m(__)m。

※ちなみに頂点数5000超のデータを実行しようとしたら Vertex data over と返ってきました。駄目ですか、やっぱ。

削除

Royta World ©arym since2000