AutoCADマクロ屋本舗 掲示板


選択したオブジェクトの画層のオブジェクトを選択して基点コピー

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))

  • 名前: E-mail(省略可):
  • 画像:

Copyright © 1999- FC2, inc All Rights Reserved.