Last active
August 12, 2023 12:34
-
-
Save mechanoboyu/b980236f494d01d9d7fd293019489925 to your computer and use it in GitHub Desktop.
図面内の任意の範囲を指定すると、そこから名前の無いグループを、一括選択します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(vl-load-com) | |
;**************************************************************************; | |
; 関数名:sel_grp | |
; ファイル名:select-unnamed-group-specified-selection.lsp | |
; 作成日:2023/8/12 | |
; 作成:Noboyu | |
; | |
; 内容:図面内の任意の範囲を指定すると、そこから名前の無いグループを、一括選択します。 | |
; | |
; 開発環境:BricsCAD v17 Windows版 | |
; | |
; 参考にしたドキュメントなど詳細は、以下に掲載しています。 | |
; * https://www.noboyu.com/lisp-unnamed-group-specified-selection/#ref | |
; | |
; 注記: 1. バグ出しは出来ていないので、 | |
; 使用される際は、元図はバックアップの上、まずは簡単な図面でテストして下さい。 | |
; 2. このコードを保存する際は、必ずエンコードを「Shift-Jis」に指定して下さい。 | |
;**************************************************************************; | |
; | |
;図面全体から取得したグループと、ユーザの選択範囲の要素をそれぞれ比較し、 | |
;共通する要素の図形リストを作る関数 | |
(defun selbnd(/ bnd) | |
(prompt "名前のないグループを取得したい範囲を、選択して下さい。\n")(terpri) | |
;ユーザーが範囲の図形を選択する | |
(setq bnd (ssget)) | |
(setq index 0) | |
;選択セットの空箱をつくる。 | |
(setq sbox (ssadd)) | |
;Mainで作った選択セットssの図形の個数を得る | |
(setq len (sslength ss)) | |
;選択セットssとユーザーが選択したbndとを比較し、 | |
;一致している図形だけを集めて、新しい選択セットsboxを作る。 | |
(repeat len | |
(setq x (ssname ss index)) | |
(if (not (not (ssmemb x bnd))) | |
(ssadd x sbox) | |
) | |
(setq index (1+ index)) | |
) | |
(setq bnd nil) | |
) | |
;;Main ;; | |
(defun c:sel_grp (/ a1 gname newGRPNameList sbox) | |
;実行前に何かが選択されていたら、解除する | |
(sssetfirst nil nil) | |
;図面全体からグループオブジェクトを取得する | |
(setq grp (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))) | |
;名前にアスタリスクが入っているグループ(=名前なしグループ)の名前を取得する | |
(vlax-for entry grp | |
(setq gname (vla-get-name entry)) | |
(if (wcmatch gname "*`**") | |
(setq newGRPNameList (cons gname newGRPNameList)) | |
) | |
) | |
;図面全体から、グループに属する図形名のリストを得る | |
(setq grp1 (dictsearch (namedobjdict) "ACAD_GROUP")) | |
;選択セットの空箱をつくる。 | |
(setq ss (ssadd)) | |
;グループごとに所属する図形を取得し、それらを順次選択セットに追加する。 | |
;最終的には、選択セットssには、図面全体の分のグループが格納される。 | |
(foreach grpname newGRPNameList | |
(setq a1 (dictsearch (cdr (assoc -1 grp1)) grpname)) | |
(while (/= (assoc 340 a1) nil) | |
(setq ent (assoc 340 a1)) | |
(setq ss (ssadd (cdr ent) ss)) | |
(setq a1 (subst (cons 0 "") ent a1)) ;選択セットに入れた終わった図形名は、空のドットペアで上書き | |
) | |
) | |
(selbnd) | |
;目的のグループを、選択した状態で表示する | |
(sssetfirst nil sbox) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment