カテゴリー: デスクトップアプリ

DXF自動修復ツール

Windows アプリ(無償)

AutoCADで開けないDXFを自動で修復する

「DXF自動修復」— 点検・修正・AutoCAD 自身での確認までをひとつで。元のファイルは触りません。

DXF をダブルクリックしたら、AutoCAD のコマンドラインに「続けるには [Enter] キーを押してください」とだけ出て、Enter を押すと図面が消える。設計事務所で DXF を受け渡ししていると、年に何度かはこの場面に出会います。原因は決まって、AutoCAD が読み込みの途中で「無効 または 不完全な DXF の入力です。図面は破棄されました」と判断していることです。

「DXF自動修復」は、その DXF を開く前に点検し、原因になっている箇所を直して、別名で保存するソフトです。直したあとに、AutoCAD 自身にそのファイルを読ませて「本当に開けるか」まで確かめます。画面に出るのは、AutoCAD が実際に返した判定です。

対象の中心は、Jw_cad などから出力した R12 形式(AC1009)の DXF です。R12 形式は古くから使われている分、どのソフトでも読めるという利点がある一方で、AutoCAD の R12 読み込みは画層名などの「名前」に厳格です。半角の中黒 1 文字で図面ごと破棄されるのは、このためです。

AutoCAD が返すエラー「DXF自動修復」の対応
テーブル項目名 ○○ が間違っています。N 行上。名前に含まれる中黒・括弧・プラスなどを _ に置き換えます。画層の定義と、その画層を使う図形の参照を同時に直すので、図形が行方不明になりません
複合線種にグループコード 49 がありません。AutoCAD 2000 形式で必須の 74 を線種定義に補います
無効 または 不完全な DXF の入力です。セクションやブロックの終端の欠落、EOF の欠落、文字コードの食い違いなど、33 項目の点検表に沿って順に確かめ、直せるものは直します
(黒い画面のまま何も出ない).dxf の関連付けが本体ではなくコンソール版 AutoCAD に向いているときに起きます。点検の最初の項目でお知らせします
POINT 01

原本は一切変更しません

修正した結果は ○○_修正.dxf という別名で保存します。同じ名前があれば番号を付け、上書きもしません。元のファイルはそのまま残ります。

POINT 02

AutoCAD 自身で確かめます

修正版を AutoCAD のコンソール(accoreconsole)に読ませ、開けたかどうかを AutoCAD の判定で表示します。原本のエラー文も記録するので、何が原因だったかが残ります。

POINT 03

名前を変えない道もあります

画層名を変えたくないときは、AutoCAD 2000 形式のファイルも同時に作れます。同じ名前でも 2000 形式なら AutoCAD は受け付けます。変換に必要なものは同梱しています。

画層名を入れると、R12 で開けるかどうかが分かります

「DXF自動修復」が名前を判定する規則を、そのまま JavaScript に移してあります。お手元の DXF の画層名やブロック名を入れてみてください。AutoCAD が返すはずのエラー文と、修正版での名前が出ます。プリセットは、実際に開けなかった図面にあった名前です。

名前の判定と置き換え本体と同じ規則で判定しています
名前を入力
DXF の形式
PRESET

AutoCAD のコマンドラインに出る内容

判定の内訳

この形式で開くと
引っかかった文字
修正版での名前

形式を AutoCAD 2000 に切り替えてみてください。同じ名前がそのまま通ります。R12 の読み込みだけが厳しいのであって、名前そのものが間違っているわけではありません。

置き換えは「定義」と「参照」を同時に行います

画層名は LAYER テーブルで定義され、何万個もの図形が 8 というコードでその名前を参照しています。片方だけ直すと、図形が存在しない画層を指すことになります。「DXF自動修復」は両方を同じ置換表で直し、その置換表をレポートに残します。文字そのもの(図面に書かれた文字列)は触りません。

先頭の * は正しい記法なので触りません

*U58 のような無名ブロックや、*Active というビューポートの名前は、先頭の * が規約です。置き換えるのは先頭以外の * だけです。

R12 の読み込みが受け付けない文字

AutoCAD 2027 に、画層が 1 つだけの小さな DXF を何通りも読ませて確かめた結果です。漢字や半角カタカナは問題になりません。問題になるのは記号です。

名前に含む文字R12 の読み込み備考
漢字・ひらがな開けます
半角カタカナ(ハッチ ライン ロゴ)開けます濁点「゙」単独も可
全角の英字・数字(ELV 1)開けます
半角の中黒 ・破棄されますJw_cad のレイヤ名でよく使われます
全角の中黒 ・破棄されます半角を全角に直しても通りません
括弧(全角・半角)破棄されます半角の ( ) は R12 のときだけ
プラス +破棄されます「p513+45」のような通り芯の表記
先頭以外の *破棄されます2000 形式でも不可
_ や –開けます置き換え先に使えます

このほか、すべての形式で名前に使えない文字(< > / \ ” : ; ? * , = ` ‘)も同じように置き換えます。ただし縦棒 | は外部参照の画層名に使われる正規の記法なので、置き換えずに報告だけします。

ezdxf などの検証ツールで「エラーなし」でも、AutoCAD で開けるとは限りません

この文字の問題は、DXF の構造としては正しいため、一般的な検証ライブラリでは見つかりません。AutoCAD 自身に読ませて、返ってくるメッセージを見る以外に確実な方法がありません。「DXF自動修復」はそれを自動で行います。

点検する項目は 33 あります

名前の問題がいちばん多いのですが、それだけではありません。文字コードの食い違い、終端の欠落、線種定義の不整合、未定義の画層への参照など、開けない原因になりうる項目を 33 に整理した点検表(YAML ファイル)を同梱しており、ソフトは起動時にそれを読み込んで順に確かめます。

下の一覧で分類を切り替えてみてください。「自動」はソフトが直す項目、「一部」は直せる範囲が限られる項目、「報告」はお知らせだけの項目です。半径 0 の円のように、消すと図面の内容が変わってしまうものは報告にとどめています。

点検項目の一覧(DXF読み込みチェックリスト Ver.1.0)ソフトが読み込む点検表と同じ内容です
分類
絞り込み
表示中
自動で直せる
一部
報告のみ

点検表は、実際に開けなかった図面で AutoCAD が返したエラーに加え、Autodesk の DXF 仕様書や各種フォーラムで報告されている原因(BOM 付きの UTF-8、UTF-16 で保存された DXF、同じハンドルの重複、R12 形式に混ざった新しい図形タイプなど)を集めて作りました。本体と点検表は一体で版を上げます。

修正版は 2 種類。名前を変えるか、形式を上げるか

同じ図面を開けるようにする方法は 2 つあります。どちらが優れているという話ではなく、画層名をどう扱いたいかで選びます。

○○_修正.dxf○○_修正_R2000.dxf
形式R12 のままAutoCAD 2000 形式に変換
画層名など記号を _ に置き換えます(例: ハッチ・物干 は ハッチ_物干)そのまま残ります(先頭以外の * だけは例外)
向いている場面R12 で受け渡しを続けたいとき。古いソフトでも読める形式を保てますJw_cad 側の画層名をそのまま AutoCAD の図面に引き継ぎたいとき
作られる条件いつも作ります(異常が無ければ作りません)オプションをオンにしたとき
必要なものなし変換に Python と ezdxf を使います。どちらも同梱しているので、別途の準備は要りません
2000 形式への変換だけでは開けません

R12 の線種定義を 2000 形式に変換すると、2000 形式で必須のグループコード 74 が付かないまま書き出されることがあります。AutoCAD はこれを「複合線種にグループコード 49 がありません」として破棄します。「DXF自動修復」は変換後にもう一度点検を回し、この 74 を補ってから保存します。変換ツールを使うだけでは済まない理由です。

使いかた

  1. DxfCheckFix.exe を起動するインストールは不要です。ZIP を解凍したフォルダーの中身を、そのまま同じ場所に置いて起動します。
  2. DXF ファイルを指定する「参照」で選ぶか、ウィンドウにドラッグ&ドロップします。
  3. オプションを選ぶふだんは初期設定のままで構いません。名前を残したいときだけ「AutoCAD 2000 形式も作成」をオンにします。
  4. 「チェック実行」を押す点検、修正、別名保存、AutoCAD での検証が順に進みます。18MB・11 万図形の平面図でも 10 秒ほどです。
  5. 完了メッセージとレポートを見る修正版のパスと「AutoCAD での検証: OK」が出れば完了です。同じフォルダーに ○○_チェック結果.txt が残ります。

画面に出る結果の意味

OK問題なし
修正済異常があり、修正版に反映しました
NG異常があり、自動では直せません。レポートに説明があります
注意開けなくなる原因ではありませんが、気を付けたい点(範囲を大きく外れた図形など)
情報参考情報(形式、単位、テーブルの内訳など)
該当なしこのファイルの形式では点検対象外

いちばん大事なのは、画面下部とレポート先頭の「修正版の AutoCAD 検証: OK」です。これは AutoCAD が実際にそのファイルを開いて返した結果なので、OK なら安心して使えます。

DXF自動修復_Ver1.0 DxfCheckFix.exe 本体 DXF読み込みチェックリスト.yaml 点検表(本体と一体で版を上げます) 初めにお読み下さい.txt 説明書 python 同梱の Python と ezdxf(2000 形式の作成に使用) licenses 同梱ソフトのライセンス文
フォルダーの中身は、まとめて同じ場所に置いてください

本体は、同じフォルダーにある点検表を読んで動きます。EXE だけを別の場所にコピーすると、点検表が見つからず動きません。Google ドライブや OneDrive 上のファイルで失敗するときは、いったんローカルのフォルダーにコピーしてから実行してください。

実際に開けなかった図面で確かめました

Jw_cad から R12 形式で出力した 3 つの図面です。いずれも AutoCAD 2027 で「図面は破棄されました」となっていたもので、修正版は AutoCAD で開け、図形の数は原本と完全に一致しました。

図面原本のエラー(AutoCAD の第一エラー)修正版2000 形式版図形数
住宅の 1 階平面図(18MB)テーブル項目名 _1-D_ハッチ・物干 が間違っています開けました未作成114,887
別荘 南棟の平面・立面テーブル項目名 _1-1_P513+45 が間違っています開けました開けました12,882
別荘 北棟の平面・立面同上(ほかにブロック名の括弧と * も)開けました開けました6,263

3 つとも、画層名の記号が原因でした。ソフトの判定は、AutoCAD が返したエラー文と 1 回目で一致しています。推測で直しているのではなく、AutoCAD の判定を基準にしているためです。

動作環境

OSWindows 10 / 11(64bit)
必要なもの.NET Framework 4.8(Windows 10 1903 以降と Windows 11 には標準で入っています)
AutoCAD無くても点検と修正はできます。「開けるかの検証」だけが AutoCAD のある PC で行われます(2027 で確認。2022 以降の accoreconsole.exe があれば使います)
対応する DXFASCII 形式の DXF(R12 から 2018 形式まで)。バイナリ DXF は対象外です
開発言語Visual Basic .NET(変換部に Python + ezdxf を同梱)
ソフト種別無償
バージョンVer.1.0(点検表 version 1.0)
コマンドラインからも使えます

画面を出さずに実行し、結果をテキストに書くこともできます。終了コードは、修正版が開けたとき 0、開けないとき 1 です。多数の DXF をまとめて処理するときにお使いください。

DxfCheckFix.exe “図面.dxf” /nogui /r2000

うまく動かないとき

「チェックリストが見つかりません」点検表(DXF読み込みチェックリスト.yaml)を EXE と同じフォルダーに置いてください。
「accoreconsole.exe が見つからない」AutoCAD が無い PC では検証を行いません。修正自体は行われるので、修正版を AutoCAD のある PC で開いて確認してください。
修正版も NG になるレポート末尾の「accoreconsole 出力」にある「… N 行上。」の行が AutoCAD 自身のエラーです。自動修正の範囲外の異常なので、その行番号付近を確認するか、元のソフトから AutoCAD 2000 形式以上で出力し直してください。
起動時に SmartScreen の警告が出る「詳細情報」を押してから「実行」で起動できます。