PR

【AutoLISP】範囲を指定して、無名のグループを一括選択するコード

AutoCAD

範囲を指定して、そこから無名のグループを一括選択するAutoLISPのコードを書いてみたので、紹介します。

スポンサーリンク

はじめに

ブログ読者の方から「AutoCADで、任意の範囲の無名のグループを一括選択できるコード」についてのお問合せを頂きました。

いざ取り組んでみると、思ったより苦戦してしまいました。せっかくなので、ブログ上に記録を残しておこうと思います。

動作デモ

動いている様子を紹介します。

まず、対象となる範囲の図形を選択します。すると、あとは勝手に無名のグループが勝手に選択されます。

  • AFが無名のグループで、は名前付きのグループです。
  • 最終的に、四角形の中の無名グループのAとBだけが選択されたので、成功です。
範囲を指定して、無名のグループを一括選択するコードを実行した様子
gifアニメ。範囲を指定して、無名のグループを一括選択するコードを実行している様子。

コード

▼ コードは以下の通りです。もし表示されていない場合は、こちら

処理の流れ

「グループだけを選択したい」と聞いたとき、「普通にssgetのフィルターでパパっと取得できそう」だと軽く考えていました。
しかしドキュメントを読むと、AutoCADにおけるグループは「非グラフィカル オブジェクト」というタイプで、ssgetでは扱えません。

そこで、以下のように2ステップの方法で処理しました。

  1. まずは下記ドキュメントの指示通り、ディクショナリを検索して、グループに所属する図形名を取得します。この工程の最終的には、図面全体に存在するすべてのグループの図形が選択セットに入ります。
  1. 次に、ユーザーが選択した範囲の選択セット bnd と比較します。
    比較した結果、同じ要素だけを別途用意した選択ボックス sbox に追加し、最終的にそれらをハイライトします。

使い方

【重要】エディタにコピペし、文字コードを変更する

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

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

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

Lispファイルをロードする

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

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

コマンドを起動

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

あとは、任意の範囲を選べば、勝手に選択されます。

参考ドキュメント

さいごに

普段グループは使う機会がなかったので、勉強になりました。やっぱAutoCADではブロックの方が、扱いやすいですね。(ssget '((0 . "insert")))ですぐに取得できます。

私事ですが、今AutoCADのライセンスが切れているので、互換CADのBricsCADで動作確認しました。多分AutoCADでも動くと思いますが、もし不具合あればコメント欄で教えて頂ければ幸いです。(すぐに対応できるかはわかりませんが……)

コメント

  1. Sld_heta より:

    のぼゆ様

    この度は本当にありがとうございました。まさしく思い通りの結果です!
    やはり天才は違いますね・・・もう凄いとしか言えない。
    まさかのGROUPがSSGETで対応出来なかったのがお手上げでした。
    ブロックのがAUTOLISPでも扱いやすいですよね。

    まだまだAUTOLISPを勉強中ですが、また何かありましたら今後も何卒宜しくお願い致します。
    ブログの更新楽しみに待っています。

    • のぼゆ のぼゆ より:

      Sld_heta様
      コメントありがとうございます。
      お役に立てて良かったです。
      私も今回、勉強になって面白かったです😊👍

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