AutoCADでモデル空間に描いた複数の図面を、一度の操作で別ファイルに書き出すAutolLISPコードを書いたので、紹介します。
AutoCAD向けに書きましたが、Lisp対応しているなら互換CADでも使えると思います。
(BricsCADで確認しました)
はじめに
AutoCADで図面を描く際、モデル空間にずらっと図枠を並べて作業することはありませんか?
本来は1ファイル1図面が管理上の基本だと思いますが、並べると複写作業などが速く効率が良いので、私はよくやります。
しかし、作成後に「1ファイル1図面」にする必要が出た場合、とても面倒なことになります。
AutoCADの標準コマンド「WBLOCK」を使うと、一回ごとに手動で範囲と保存先を指示する操作が必要なので、複数枚の図面を書き出すには手間がかかってしまうのです。
そこで、AutoLISPコードを書いたので紹介します。図面の外側の枠をまとめて選択すると、それぞれの中身を別ファイルとして一括で書き出します。
個人的には、かなり時短になり負担が減りました。
ダイジェスト動画
操作の流れを、2分ほどの紹介動画にしました。(ご注意:音声ありです)
動作環境
動作を確認したCADは以下の通りです。いずれもWindows版です。
- AutoCAD 2023
- BricsCAD Classic V17
動作デモ
動作の大まかな流れは以下の通りです。詳しい導入方法や使い方は、後述しています。
1. コマンドラインにコマンド名を入力
2. 保存先のフォルダを指定
3. 書き出したい図面の外枠をまとめて選択する
4. 提示される枚数を確認後、yesを選ぶと実行
▼ 動作の様子のgifアニメです。
結果
▼ 保存先のフォルダを見ると、「wblock_batch_test_n.dwg(nは連番)」というファイル名で、複数のファイルが書き出されています。
▼ 書き出されたファイルを開くと、ちゃんと1ファイル1図面になっています。
また、原点は図枠左下、図面範囲(limits)の設定もしているので、連続印刷の際に便利だと思います。
コード
コードは以下のGithubに置きました。テスト用のDwgファイルもアップしています。
詳細は、導入方法、使い方の項に記載しています。
導入方法
LISPファイルを保存する
コードをメモ帳等テキストエディタに保存します。以下の方法でできます。
.lspファイルを保存する
まず、Githubのページを開きます。
そして、右上の raw を右クリック→名前を付けてリンク先を保存を選択して保存場所を選び、保存します。
または、Rawの近くのボタンをクリックすると、全文をコピーできます。
- もし拡張子が.txtになっていたら、.lsp に変更して下さい。
【重要】文字コードを変更する
.lspファイルを作ったら、テキストエディタでファイルを開き、文字コードをShift-JISに指定して上書き保存して下さい。
この操作が無いと、動作しません。(Windows付属のメモ帳だったら、ANSIを選べばokだと思います)
▼ テキストエディタのMeryで開いて、文字コードを変更している様子です。
LISPファイルをロードする
先ほど作った.lspファイルをロードします。
一度試すだけなら、.lspファイルをCAD画面にポイっとドラッグアンドドロップすれば、ロードされます。
その場合、以下のようなメッセージが出る場合があります。その際は内容を確認の上、「1回ロードする」を選んでおけばOKです。
常時ロードしたい場合は、appload
というコマンドで出てくる画面で設定できます。詳しい仕様は、ドキュメントをご覧ください。
- BricsCADも同様に appload というコマンドで設定できます。
→別記事に詳細を記載しています。
これで、導入は完了です。次は、使い方を紹介します。
使い方
コマンドを起動
コマンドラインに bd_wblock
と打ち込んで、エンターキーを押します。
保存先を指定
すると、保存先を選ぶ画面が出ます。
保存先のフォルダの中のファイルを、何か一つ選択します。するとそのファイルから、フォルダのパスを取得します。
(フォルダが空っぽの場合は、何かダミーでも良いので、ファイルを置いておく必要があります)
図枠の外枠を選択する
すると、コマンド欄に「図枠の外枠を選択して下さい」というメッセージが出ます。
指示通り、書き出したい図面の外枠のみを選択し、確定して下さい。がばっとまとめて窓で選択できます。
誤選択防止用のフィルターをかけているので、外枠はこれらの条件で描いてください。
▼ フィルターの条件は、以下の通りです。
- ポリラインの四角形に限ります。(rectangコマンドで描く普通の四角形です)
- レイヤーは、Defpointsに置いてください。
▼窓で囲むと、外の枠だけが選択された。
最終確認
コマンドラインに以下の選択肢が出ます。問題なければ、Yesと入力します。選択肢がポップアップされるので、マウスで選んでもokです。
n個のファイルを書き出します。よろしいですか?[Yes/No] :
よろしくない場合は、No(もしくは n)と入力するとコマンドがキャンセルされます。
完了
あとは指定したフォルダに、自動的に書き出されます。
ファイル名は、リネームソフトなどで後から適宜修正して下さい。
▼ 一括でファイル名を変えられる便利なソフトは、いろいろあります。ちなみに私は秀丸ファイラーというソフトの一括リネーム機能を使っています。
未解決の課題
現時点の私の環境では致命的な問題はありませんが、以下の課題があります。
まとめて選択すると、書き出されるファイルの順番が見た目と違う
複数の外枠をまとめて囲って選択すると、書き出される順番はランダムになります。
(ソートする処理を入れていない為)
例えば、wblock_batch_test_1.dwg は図面B、wblock_batch_test_2.dwg は図面Aといった具合です。
現状の対策しては、がばっと囲わずに外枠を書き出したい順番に順次選択すれば、順番通りになります。
数枚くらいなら、そこまで手間に感じないのでそのままにしています。
参考ドキュメント
- WBlock メソッド(ActiveX)
https://help.autodesk.com/view/OARX/2023/JPN/?guid=GUID-4EEC4025-ACFC-41DA-899A-8264394D7691 - SelectionSets プロパティ(ActiveX)
https://help.autodesk.com/view/OARX/2023/JPN/?guid=GUID-671644CD-D776-4743-88D4-C0F759EC5D89 - 概要 – AutoCAD Application オブジェクトにアクセスする(VBA/ActiveX)
https://help.autodesk.com/view/OARX/2023/JPN/?guid=GUID-62F07541-9663-4D83-B5EE-24D562351FCE
コード
コードは以下のGithubに置きました。テスト用のDwgファイルもアップしています。
詳細は、導入方法、使い方の項に記載しています。
さいごに
LISPコードを書くと、自分の作業スタイルにあわせたカスタマイズを比較的手軽にできて気持ち良いですね。
今回取り組んでみて、カスタマイズを継続的に取り組むなら、やはりAutoCADを入れておくと捗ると思いました。ドキュメントも充実していますし、人気のテキストエディタVisual Studio Codeの拡張機能を入れるとかなり快適な開発環境が整います。
関連記事
▼ この記事とは逆に、複数のDwgファイルを1つのファイルのモデル空間に読み込むコードも書いてみました。
コメント
いいですね!ありがとうございます。
.dxfファイルはどうですか。今、このlispはdxfファイルもう出来ないですね。
それことお願いいたします。
コメント、ありがとうございます。😊
一気にDXFとして出力するのは難しそうです。
このlispでdwgを生成した後に、一括DXF変換を行うコードを実行すれば、出来ると思います。
多分、Exportメソッドを使えばできそうです。