【AutoLISP】複数のDwgファイルを、一括で1つのファイルのモデル空間に集めて並べるコード

AutoCAD

複数のDwgファイルを、一括で1つのファイルのモデル空間に集めて並べるAutolLISPコードを書いたので、紹介します。

スポンサーリンク

はじめに

先日、「1つのモデル空間に描いた複数の図面を、一括で1枚ずつ書き出して分割保存するコード」を書きました。
Youtubeに紹介動画をアップしたところ、「その逆はできませんか?」という旨のコメントを頂きました。そこで、今回この記事で新たに取り組んでみました。

▼ 動作イメージ図

複数のDwgファイルを、一括で1つのファイルのモデル空間に集めて並べるコードのイメージ図

動作環境

正常動作を確認したCADは以下の通りです。いずれもWindows版です。

  • AutoCAD 2023
  • BricsCAD Classic V17 (BricsCAD Classic V17では動作しません)

動作デモ

使い方の大まかな流れは以下の通りです。詳しい導入方法や使い方は、後述しています。

  1. 対象のファイルを、一つのフォルダに入れておく
  2. 新規作成画面を開き、コマンドを起動する
  3. 対象のファイルが入っているフォルダを開き、ファイルを一つ指定する
    (※ファイルを何か一つ選ぶと、dwgファイルの一覧を取得します)
  4. 最終確認後、実行

▼ 動作の様子のgifアニメです。

▼ 実行前の元データの例

それぞれが独立したDwgファイルです。A~Iの9枚分用意しました。

▼ 実行結果

9枚のdwgファイルを指定して、実行しました。100mm間隔で、2行n列に並んでいく設定にしてあります。行数は、任意の数を指定できます。

コード

コードは以下のGithubに置きました。
テスト用のDwgファイルもアップしています。(図面は、zipファイルにしています)
詳細は、導入方法使い方の項に記載しています。

files/lisp-batch-insert-multiple-dwg-model at main · mechanoboyu/files
Contribute to mechanoboyu/files development by creating an account on GitHub.

導入方法

使用される際は、元図はバックアップの上、ご自身の環境でまずは数枚の図面でテストして下さい。

  • データの消失など、ファイルの挙動には十分にご注意ください。
  • 一度に大量の図面の読み込みを行うと、フリーズやエラーが発生する可能性があります。  
  • 後の項にも注意点記載しています。

LISPファイルを保存する

コードをメモ帳等テキストエディタに保存します。以下の方法でできます。

.lspファイルを保存する

まず、Githubのページを開きます。
そして、右上の raw を右クリック→名前を付けてリンク先を保存を選択して保存場所を選び、保存します。
または、Rawの近くのボタンをクリックすると、全文をコピーできます。

  • もし拡張子が.txtになっていたら、.lsp に変更して下さい。

【重要】文字コードを変更する

.lspファイルを作ったら、テキストエディタでファイルを開き、文字コードをShift-JISに指定して上書き保存して下さい。
この操作が無いと、動作しません。(Windows付属のメモ帳だったら、ANSIを選んでください)

テキストエディタのMeryで開いて、文字コードを変更している様子です。

lspファイルをテキストエディタで開いて、文字コードを変更している様子

使い方

対象の図面ファイルを、一つのフォルダに入れる

まず、読み込みたい複数の図面ファイルを、任意のフォルダにまとめて入れておきます。

新規作成で新しいファイルを用意する

ファイル→新規作成で、新しいまっさらなdwgファイルの画面を開きます。

Lispファイルをロードする

先ほど作った.lspファイルを、新規dwgファイルの画面にロードします。
一度試すだけなら、.lspファイルをCAD画面にポイっとドラッグアンドドロップすれば、ロードされます。

その場合、以下のようなメッセージが出る場合があります。その際は内容を確認の上、「1回ロードする」を選んでおけばOKです。

常時ロードしたい場合は、appload というコマンドで出てくる画面で設定できます。詳しい仕様は、ドキュメントをご覧ください。

  • BricsCADも同様に appload というコマンドで設定できます。
    別記事に詳細を記載しています。

コマンドを起動

コマンドラインに bd_insertと打ち込んで、エンターキーを押します。

行数を指示する

最初に、以下のメッセージが出るので、行数を入力して下さい。

行数を入力して下さい:

例えば、 2 と入力してエンターキーで確定すると、2行n列で並びます。

対象ファイルの場所を指示

次に、ファイルの保存場所を選ぶ画面が出ます。
対象の図面ファイルが入っているフォルダの中のファイルを、何か一つ選択します。
するとそのファイルから、Dwgファイルの一覧を自動的に取得します。

最終確認

最後に、コマンドラインに以下の選択肢が出ます。

n個のファイルを読み込みます。よろしいですか?[Yes/No] :

問題なければ、Yesと入力します。選択肢がポップアップされるので、マウスで選んでもokです。

よろしくない場合は、No(もしくは n)と入力するとコマンドがキャンセルされます。

完了

あとはdwgファイルが順次読み込まれ、図面が自動的に並びます。
始めの行数の指示で、2と入力したので、2行n列で並んでいます。

注意点

無限の構築線は処理できません

XLINEコマンドで描いた構築線があると、GetBoundingBox メソッドで処理できないため、読み込みを中止します。一応、コード上で例外エラーが発生するとアラート画面がでるようにしました。その場合は、元図の構築線を消してから、再度お試しください。

要素数が多いと固まるかも

このプログラムは、「図面を順次一枚ずつ読み込んで、配置する」という処理をファイルの個数分繰り返します。
要素数の多い図面をたくさん読み込むと、フリーズする可能性があるので、実行前は慎重にテストをお願いします。

共用防止のため、ブロック名が変わります

読み込んだDwgファイルのブロックについて、ブロック名に番号を付加して名前を変える処理を入れています。
理由は、ブロックの共用防止の為です。例えば、元図Aと元図Bに、全く同一の名前のブロックがあるとします。全く共通の図形なら問題ありません。
しかし両者で形状が違っていると、名前が同じだと先に読み込んだブロックと同一だとみなされて、ブロックが共用されてしまいます。
普通は「同じブロック名で形状違い」という運用は無いかもしれませんが、一応処理を入れておきました。

参考ドキュメント

さいごに

当初は「一つのファイルから分割して書き出す」事しか頭にありませんでしたが、その逆も便利だなと思いました。
複数の関連図面を並べて一覧できると、検討時などに役立ちそうです。

AutoCADは個人でも必要な期間だけネットで入手できるので、興味がある方はAutodeskのストアを覗いてみて下さい。当ブログでも、使い方などの記事を随時アップしていきます。

▼ AUTODESK製品の一覧ページです。
購入する場合は、購入したいソフト名にカーソルを当てて契約期間を選び、カートに追加をクリックします。
製品の詳細情報 をクリックすると、そのソフトの概要ページが開きます。

Banner3


▼ 関連記事

コメント

  1. Sld_heta より:

    とても素晴らしいです。
    挿入は上方向ではなく、下方向は可能ですか?

  2. Sld_heta より:

    不具合修正本当にありがとうございました。🙇
    のぼゆ様のBD_INSERTを酷使させていただきます😄

タイトルとURLをコピーしました