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

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

無題
以下のようなlispコードがあるのですが
block01 という名前のブロックではなく
選択した複数のブロックに変更はできるのでしょうか

また色だけでなく線種もbyblockに同時に変更できるのでしょうか?

(defun C:ChangePropertiesInBlock ()
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))

; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))

; block01 という名前のブロックを取得
(setq block (vla-item blockTable "block01"))

(vlax-for vlaObject block
; 色を ByBlock に変更
(vlax-put-property vlaObject 'color 0)
)

(princ)
)
  • 初心者lisp
  • 2025/02/21 (Fri) 21:41:33
Re: 無題
CAD によっては動かない可能性もありますが・・・
こんな感じでどうでしょう。

(defun C:xx ( / activeDocument blockTable ss len i block vlaObject lst blockName )
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))
;;(setq lst nil)
;; ユーザーによる複数図形の選択
(if (setq ss (ssget '((0 . "INSERT"))))
(progn
(setq len (sslength ss) i 0)
(repeat len
;; ブロック名を取得、リスト化
(setq blockName (cdr (assoc 2 (entget (ssname ss i)))))
(if (not (member blockName lst))
(setq lst (append lst (list blockName)))
)
(setq i (1+ i))
)
)
)
;; 選択したブロック名のリスト
(if lst
(progn
(setq len (length lst) i 0)
(repeat len
; blockName のブロックを取得
(setq block (vla-item blockTable (nth i lst)))
(vlax-for vlaObject block
; 色を ByBlock に変更
(vlax-put-property vlaObject 'color 0)
; 線種を ByBlock に変更
(vlax-put-property vlaObject 'linetype "BYBLOCK")
)
(setq i (1+ i))
)
(command "_.regen");; ZWCAD では必要
)
)
(princ)
)
  • hime
  • 2025/02/24 (Mon) 15:28:22
Re: 無題
ありがとうございます。
思った通りのことができ大変うれしく思います。
助かりました
  • 初心者
  • 2025/02/25 (Tue) 12:15:50

返信フォーム






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