DXF入出力

12.23
・長さ寸法とハッチングを相互に変換可能
・DXFOUT_JWコマンドに変更

9.23
DXFファイルは図面交換ファイルフォーマットとして広く普及しています。DXFの入出力機能を備えることで、他のソフトウェアとの図形データのやり取りが可能となり、データの再利用や図形の一次制作において活用が期待されます。DXFファイルはASCII形式のテキストデータで構成されており、ライブラリを使用することで情報の読み込みが比較的容易に行えます。特定の目的に応じて、自前でパーサーを作成することも可能です。

NijiCADにもDXF入出力機能が備わっています。NijiCADはブラウザで動作するアプリケーションのため、npmからライブラリを選定しました。選択肢はそれほど多くなく、機能も十分に揃っていないものが多いですが、ネイティブにDXFを扱うわけではないため、大きな問題にはなりません。パーサーとライターは別々のライブラリを使用していますが、これで十分な役割を果たしています。

また、NijiCADではファイルをサーバーにアップロードせずに直接処理します。これにより、ユーザーはデータのプライバシーを保護しながら安心して利用できます。

DXFOUT

DXFには複数のバージョンが存在します。これはAutoCADのバージョンによるもので、新しい図形や機能が実装されるたびに拡張されてきました。その多くは応用性の高い複合図形で、柔軟なカスタマイズや図面の表現に用いられます。これらは巧妙な仕組みでブロックとして保存されています。

また、文字コードの違いにも注意が必要です。現在のバージョンではUTF8で保存するのが主流ですが、UTF8未対応のソフトで開くと文字化けが発生してしまいます。これを解決するために、別途DXFOUT_JWコマンドを用意しました。これはShift_JISで書き出しを行います。通常はDXFOUTで書き出します。目的に応じて使い分けることができます。

試しにDXFOUT_JWコマンドで書き出してJWCADで開いてみましょう。

適当な図面を作成し、DXFOUT_JWコマンドを起動します。
図形を選択して左下を起点で指定します。
ダウンロードフォルダに 「dxfout_sjis.dxf」がダウンロードされます。

ファイルをJWCADにドラッグアンドドロップします。

DXFOUT_SJISで書き出すことで文字化けすることなく正常に開きました。

以下の表でv0.6.4での対応状況です。順次対応していく予定です。

図形種別DXFOUT 備考日付
ARC-24/09/27
CIRCLE-24/09/27
ELLIPSE楕円弧は未対応24/09/27
IMAGEREF×未対応24/09/27
INSERT静的なブロックに対応24/12/23
DIMLINEAR (長さ寸法)寸法尺度未対応
尺度、計測尺度、寸法値上書き、寸法位置移動、寸法値書式対応
24/12/23
LINE-24/09/27
TEXT文字スタイルを登録
文字枠有の場合はポリラインとして書き出し
24/12/23
MTEXT文字スタイルを登録
文字枠有の場合はポリラインとして書き出し
行間隔の書き出し
24/12/23
PLINE-24/09/27
HATCH-24/09/27
RAY×※対応中24/09/27
XLINE×※対応中24/09/27

※DXFOUT_SJISは図面中にUNICODE文字が含まれていた場合、その文字を??として書き出します。

DXFIN

DXF入力についても文字コードの問題は発生します。DXFが保存された文字コードによって文字化けが発生する可能性があります。そのためにあらかじめ文字コードを知る必要があります。NijiCADではDXFに保存されている $ACADVER の値を読み取ることでUTF8もしくはShif_JISかを判断しています。(一般的には文字コードの判別はその原理上不可能とされているためです。)

DXFINの対応状況は以下です。

図形種別DXFIN備考日付
ARC-24/09/27
CIRCLE-24/09/27
ELLIPSE楕円弧は未対応24/09/27
IMAGEREF×未対応24/12/23
INSERT静的ブロックに対応24/12/23
DIMLINEAR (長さ寸法) 寸法尺度未対応
尺度、計測尺度、寸法値上書き、寸法位置移動、寸法値書式対応
矢印サイズは検討
24/12/23
LINE-24/09/27
TEXT文字位置合わせの最適化24/12/23
MTEXT行間隔の取得24/12/23
PLINE-24/09/27
HATCHSOLIDパターンのみ対応24/12/23
RAY×※未検証24/09/27
XLINE×※未検証24/09/27

※図面中のUNICODEの符号表現は変換されません。 例 \U+3042 は "あ" に変換されません。今後対応を予定しています。

OPENDXF

DXFファイルを開きます。DXFINが現在の図面に挿入されるのに対して、OPENDXFは図面として開きます。この違いは、図面に依存するシステム変数などの設定にあります。現在調整中のため、表示範囲や位置は常に一定です。

表示順序

図面制作において、図形の表示順序は重要な要素です。塗りつぶしのハッチングの前後関係や図形同士の視認性、図形の選択時に大きな影響を与えます。この点は、DXFの出力時も入力時も、表示順序が正しく再現されます。

まとめ

DXFIN、DXFOUTを使用すれば、DXFファイルを目的に応じて入力や出力ができます。過去のコンテンツを読み込んだり再利用したりする場合に有用です。また、デザイン系のアプリや3D系のアプリでの利用を想定して図形を作成することにも適しています。実際の活用方法も随時検証を行っていきますので、どうぞご期待ください。

NijiCADホームページ https://nijicad.com
NijiCADアプリ https://app.nijicad.com
By NijiCAD開発者