グループコマンドのLISP化

  • URLをコピーしました!

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を使えば現在時刻からグループ名を自動作成できる

コマンドに近い感覚で素早くオブジェクトをまとめられます。

関連記事

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

Contents