AutoCADの通常のグループコマンドは、名前を意識しなくてもオブジェクトをまとめることができます。
しかし、LISPでグループを作成する場合は、グループ名を指定する -GROUP コマンドを使う必要があります。
そこで、CDATEから現在時刻を取得し、グループ名を自動生成することで、名前を入力せずにグループ化できるようにしています。
例えば、G20260208172233 のような名前が自動で作成されます。
これにより、ユーザー側はグループ名を意識せず、通常のグループコマンドに近い感覚で使用できます。
;|時刻グループ作成(対話選択)|;
(defun _NowGroupName ( / s)
;; CDATE → 20260208.172233
(setq s (rtos (getvar "CDATE") 2 6))
;; 小数点削除 → 20260208172233
(setq s (vl-string-subst "" "." s))
(strcat "G" s)
)
(defun c:TGRP ( / gname desc iss )
(vl-load-com)
(setq gname (_NowGroupName))
(setq desc "グループの説明")
(prompt (strcat "\nグループ名: " gname))
;; 事前選択があるかチェック
(setq iss (ssget "_I"))
(if iss
;; 事前選択あり
(command-s "._-GROUP" "_C" gname desc iss "")
;; 事前選択なし
(command "._-GROUP" "_C" gname desc pause)
)
;; 選択解除
(sssetfirst nil nil)
(princ)
)すぐできる設定手順
- コマンド「TGRP」を入力
- グループにしたいオブジェクトを選択
仁(じん)画像付きのSTEPは、下で確認できますよ!
Contents
操作手順
STEP


- コマンド「TGRP」を入力します
- グループにしたいオブジェクトを選択します
STEP


- オブジェクトがグループ化されました
- グループにしたオブジェクトの周囲にグレーの枠が表示されます
※枠が表示されない場合は、「Ctrl」「Shift」「A」でグループをオンにしてください
LISP解説
このLISPは、
「グループ名を自動生成して、そのままグループ化する」仕組みになっています。
(defun _NowGroupName ( / s)グループ名を作るための関数です。
(setq s (rtos (getvar "CDATE") 2 6))現在時刻を取得しています。
こちらをグループ名に使用します。
こうすることで毎秒違うグループ名を作成でき、重複を防ぎます。
(setq s (vl-string-subst "" "." s))現在時刻の小数点を削除しています。
(strcat "G" s)グループ名の先頭に「G」を付ける関数です。
名前が分かりやすくなります。
(defun c:TGRP ( / gname desc iss )コマンド名「TGRP」
(setq gname (_NowGroupName))自動でグループ名を作成します
(setq iss (ssget "_I"))事前選択があるかどうかで処理を分けます
(command-s "._-GROUP" "_C" gname desc iss "")選択済みオブジェクトをそのままグループ化します。
(command "._-GROUP" "_C" gname desc pause)コマンド実行後にオブジェクトを選択します
(sssetfirst nil nil)グループ化後に選択を解除→ 作業をスッキリさせます。



名前は裏で自動生成してるだけなので、普通のグループ感覚で使えますよ!
まとめ
- LISPでグループ化するには、グループ名の指定が必要
- CDATEを使えば現在時刻からグループ名を自動作成できる
コマンドに近い感覚で素早くオブジェクトをまとめられます。


コメント