-
1:るうるう
:
2024/04/23 (Tue) 07:31:07
-
いつも掲示板見ております。
選択したオブジェクトの画層を図面から選んで基点コピーするようにしたのですが、複数の画層を選択するように改良してほしいのですが、よろしくお願いいたします。
(setq e (nentsel "画層上のオブジェクトを選択"))(setq ent1 (entget(car e)))(setq layername (cdr(assoc 8 ent1)))(setq ss (ssget "X" (list (cons 8 layername))))(terpri)(sssetfirst nil ss)(command "copybase" pause ss "")
IJcad LTです。
-
2:LUNE
:
2024/04/23 (Tue) 10:02:18
-
nentselを使っているのは、ブロック内のオブジェクトにも対応したいからでしょうか?
IJcad LTを所持していないので、動くかどうか分かりませんが、AutoCADなら動きました。
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/multiple-layers-select-lisp/td-p/10409976
上記の6/8の回答の
(defun C:SEL
で始まるコードが、ほとんど質問者さんのやりたいことだと思います。
最後の
(princ "Use 'P' for this selection set: ")
を
(command "copybase" pause ss "")
に変更してください。
-
3:るうるう
:
2024/04/23 (Tue) 13:35:41
-
nentselを使っているのは、ブロック内のオブジェクトにも対応したいからでしょうか?
>その通りです。
ありがとうございます。
(progn (While(setq e (nentsel "\nSelect entity on a layer: "))(princ (strcat "\nSelected entity layer name "(setq lname (cdr (assoc 8 (entget (car e)))))))(setq layerlist (cons lname layerlist))(redraw (car e) 3))(setq ss (ssget "_X" (list (cons 8 (apply 'strcat (mapcar '(lambda (n)(strcat n ",")) layerlist))))))(if (zerop (getvar "CMDACTIVE"))(progn (sssetfirst ss ss)(command "copybase" pause ss "")))ss))
最後のコード部分を変更したら思い通りになりました。動作はしますが、copybase 基点を指定:の次に; エラー: unexpected')'が出ます。
またforumのコードのことで恐縮ですが、最後にssを記入しているのはなぜかわかりますでしょうか。
-
4:LUNE
:
2024/04/23 (Tue) 15:53:57
-
>またforumのコードのことで恐縮ですが、最後にssを記入しているのはなぜかわかりますでしょうか。
私もそのssは不要ではないかと思っています。
書きそびれてました。
私の環境(AutoCAD)では、ssなしでちゃんと動きます。
-
5:るうるう
:
2024/04/23 (Tue) 18:56:54
-
SSを消してもこちらもIJCADLTで動きましたので、消しました。
また何故か前の選択セットが残るので 最初と最後に変数にnillを入れるようにしました。
ありがとうございました。
(progn (setq layerlist nill)(While(setq e (nentsel "\画層上のオブジェクトを選択: "))(terpri)(princ (strcat "選択されたオブジェクトの画層名 "(setq lname (cdr (assoc 8 (entget (car e)))))))(setq layerlist (cons lname layerlist))(redraw (car e) 3))(setq ss (ssget "_X" (list (cons 8 (apply 'strcat (mapcar '(lambda (n)(strcat n ",")) layerlist))))))(if (zerop (getvar "CMDACTIVE"))(progn (sssetfirst ss ss)(command "copybase" pause ss "")))(setq layerlist nill))