この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

選択したオブジェクトの画層のオブジェクトを選択して基点コピー
いつも掲示板見ております。

選択したオブジェクトの画層を図面から選んで基点コピーするようにしたのですが、複数の画層を選択するように改良してほしいのですが、よろしくお願いいたします。

(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です。


  • るうるう
  • 2024/04/23 (Tue) 07:31:07
Re: 選択したオブジェクトの画層のオブジェクトを選択して基点コピー
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 "")
に変更してください。
  • LUNE
  • 2024/04/23 (Tue) 10:02:18
Re: 選択したオブジェクトの画層のオブジェクトを選択して基点コピー
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を記入しているのはなぜかわかりますでしょうか。

  • るうるう
  • 2024/04/23 (Tue) 13:35:41
Re: 選択したオブジェクトの画層のオブジェクトを選択して基点コピー
>またforumのコードのことで恐縮ですが、最後にssを記入しているのはなぜかわかりますでしょうか。

私もそのssは不要ではないかと思っています。
書きそびれてました。
私の環境(AutoCAD)では、ssなしでちゃんと動きます。
  • LUNE
  • 2024/04/23 (Tue) 15:53:57
Re: 選択したオブジェクトの画層のオブジェクトを選択して基点コピー
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))
  • るうるう
  • 2024/04/23 (Tue) 18:56:54

返信フォーム






プレビュー (投稿前に内容を確認)