複数の図面に対して図面破損の有無を確認したいことがあるかもしれません。
AutoCAD 上で図面破損を検出するためには、AUDIT[監査] コマンドを使用がありますが、AUDIT コマンドは現在開いている図面のみを監査対象にするため、複数の図面が対象なると、図面を 1 つずつ開く処理も必要になってしまいます。
残念ながら、AutoCAD は複数の図面に対して図面監査をバッチ処理する標準機能がありません。
次の例は、temp フォルダ内の図面をコンソール バージョンの AutoCAD(AcCoreConsole.exe)で開き、図面監査のみをおこなうものです。
set accoreexe="C:\Program Files\Autodesk\AutoCAD 2025\accoreconsole.exe"set script="C:\temp\do_make_audit.scr"set source="C:\temp"cd source
for %%f in (*.dwg) do (echo %%f を処理中...%accoreexe% /i "%source%\%%f" /s %script%)
auditctl
1auditnquit
バッチ処理による AUDIT コマンド実行前には、システム変数 AUDITCTL を 1(オン)に設定しておくと、AUDIT コマンドがコマンド プロンプト ウィンドウに表示する監査内容を、図面ファイルと同じフォルダに図面監査ファイル(.adt の拡張子を持つテキスト ファイル)に書き出すことが可能です。この図面監査ファイルを後から調べれば、個々の図面の監査内容を把握することが出来ます。
また、AutoCAD .NET API:図⾯監査の⾃動化は可能か? のように、ObjectARX と .NET API であれば、カスタム コマンドで AUDIT コマンドと同等の処理を実行させることも出来ます。例えば、次の .NET API コードを利用すると、temp フォルダ内の図面を Database.ReadDwgFile メソッドでメモリ上に開き(AutoCAD ユーザーインターフェース上には開かずに)、図面監査と修復を同時におこなうものです。
[CommandMethod("MyCommand", CommandFlags.Modal)]public void MyCommand(){Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;Application.SetSystemVariable("AUDITCTL", 1);IEnumerable<string> files = System.IO.Directory.EnumerateFiles(@"C:\temp", "*.dwg", System.IO.SearchOption.AllDirectories);foreach (string dwg in files){ed.WriteMessage("\n****** {0} 処理中", dwg);using (Database db = new Database(false, true)){db.ReadDwgFile(dwg, FileOpenMode.OpenForReadAndAllShare, false, null);db.CloseInput(true);db.Audit(true, true);}}}
この場合、各図面の監査状況は図面毎のウィンドウではなく、MyCommand を実行したウィンドウのコマンド プロンプトに一括表示しまます。ただし、.adt ファイルは図面毎に保存されるのは、バッチファイルでの処理と変わりません。
By Toshiaki Isezaki
コメント
コメントフィードを購読すればディスカッションを追いかけることができます。