PR

モデル空間の一部を選択、原点を指定して別ファイルに書き出す方法

AutoCAD

BricsCADやAutoCADでモデル空間の図面の一部分を選択し、原点を指定して別ファイルに書き出す方法を紹介します。

また、一連の動作をまとめたLispコードも書いたので紹介します。
エラー処理など無いごく簡易なものですが通常手順だと手数が多いので、とても作業が楽になりました。

スポンサーリンク

対象CAD

この記事で 紹介しているLISPコード は、BricsCADとAutoCADが対象です。以下のバージョンで動作確認しました。両者はそれぞれ別のコードなので、ご注意ください。

  • BricsCAD V17
  • AutoCAD 2022

概要

課題

「モデル空間の図面の一部分を選択して別ファイルに書き出す機能」は、標準のコマンド wblock で実現可能です。しかし、この機能では原点を指定できません。

例えば元図の任意の点を新図(書き出したDWGファイル)の原点(0,0)に合わせたくても、 wblockだけでは、できないんです。

▼例図。左半分が元図。右が新図です。

wblockだけで書き出した例。原点が指示できない。
wblockだけで書き出した例。原点が指示できない。

解決方法

解決方法は、UCS機能で元図の任意の点に原点を移動し、それからwblockを実行すると解決します。

▼例図。左半分が元図。右が新図です。 原点が図面Aの図枠の左下になりました。

wblockとUCSで書き出した例。原点が指定できた。
wblockとUCSで書き出した例。原点が指定できた。

動作デモ

手作業の場合

LISPを使わずに手作業で作業した場合の流れは、以下の通りです。

  1. UCSコマンドを実行。元図の任意の点を指示。
  2. wblock実行。開いたウィンドウで、ファイル保存先を指示。
  3. 書き出したい図形を選択する。
  4. UCSコマンドで、原点をワールド座標に戻す。
  5. 完了。元図の任意の点が新図の(0,0)へ移動している。
↑ 動画です

簡易LISP

上記の方法だと手数が多くて時間がかさむので、一連の流れをLISPファイルで書いてみました。
コードは、後述しています。

シンプルなものですが、作業時間を短縮できます。

  1. 新図のファイル名を入力。(例:1.dwgなら、1と入力)
  2. 図形の原点をクリックして指示。
  3. 対象の図形を囲む。
  4. 完了。元図の任意の点が新図の(0,0)へ移動している。
↑動画です

動作環境

動作確認環境は以下の通りです。

  • BricsCAD classic V17
  • AutoCAD 2022
  • Windows 10 64bit
  • BricsCADはAutoCADの互換CADなので、 AutoCADでも多分同じ手順でいけると思います。同一コードでは動かなかったので、AutoCAD向けにコードを書きました。
  • LISPファイルは、LISPが使えないグレードのCAD(AutoCAD LT等)では動作しません。

LISPコード

今回の方法は、若干手数が多くなるので、枚数が多いと面倒だし時間がかさみます。

そこで、簡易なLISPコードを書いてみたので紹介します。動作の様子は前述
クリック一発で自動展開みたいな凄い機能はありませんが、手作業でコマンドを順次打ち込むよりは楽になりました。

BricsCAD向けコード

▼コードは以下の通りです。Eドライブ直下にファイルを保存する想定です。
私の環境では、フォルダ名に日本語を使うとエラーで動きませんでした。三行目以降のコメントも日本語で入れるとエラーが出てしまいます。
仮にドライブ直下など、英数字の仮置きフォルダを作る必要があるかもしれません。

▼ファイルの選択ウィンドウを立ち上げたい場合は、上記4行目の記述を、以下に変えると実現できます。

(setq loc (getfiled "Select a File loc" "E:\\" "" ""))

AutoCAD向けコード

上記のコードがAutoCADでは動かなかったので、書き直しました。

;;;AutoCAD用;;;
;;;モデル空間の一部を選択、原点を指定して別ファイルに書き出す;;;
;;;コマンド名は、oex;;;
(defun c:oex ()
  (setq loc "E:\\") ;set file location
  (setq name (getstring "\nEnter a file name: "))
  (setq fname (strcat loc name ".dwg"))
  (setq origin (getpoint "\nClick a point to set the origin: "))
  (setq obj (ssget))
  (command-s "._ucs" origin "")
  (command-s "._wblock" fname "" origin obj "")
  (command-s "._oops")
  (command-s "._ucs" "w")
)

▼操作の様子です。(gifアニメ)

図面の一部分を別ファイルに書き出すLISPコード

LISPコードの使い方

使用される際は、テスト環境でテストし、元図はバックアップしてください。
データの消失など、十分にご注意ください。

LISPファイルを作る

上記のコードをメモ帳等テキストエディタへコピペして保存します。拡張子はlspです。
例えばtest.lspなど。

LISPファイルをロードする

先ほど作ったlspファイルをロードします。

  • BricsCADは、 appload というコマンドでロード画面が立ち上がります。
    別記事に詳細を記載しています。
  • AutoCADも、apploadというコマンドで指定できます。
    参考記事

実行

  1. コマンドプロンプト上で、oexというコマンドを打ち込みます。
  2. Enter a file nameと聞いてくるので、ファイル名を打ち込みます。
    ※拡張子は無し。1.dwgなら1と入力します。
  3. Click a point to set the originと聞いてくるので、新しい原点にしたい点をクリックします。
  4. あとは、対象となる図形を選択したら、完了です。

ドキュメント

▼LISPの文法やルールは、下記ドキュメントを参照しました。
改造される際は、下記をご覧ください。

関連記事

▼ 別記事で、モデル空間に書いた複数図面を一括で書き出すコードを書きました。

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