symoin 发表于 2022-7-6 09:57:18

更改blo的对象层

所有人,
 
我有一个有许多块的图形,问题是块内包含的对象层与插入块的层不同。是否有任何lisp可以将对象层更改为块插入层。
 
附件为参考图纸。
提前谢谢。
块图层。图纸

Lee Mac 发表于 2022-7-6 10:53:10

 
听起来您更希望将块内的所有对象更改为层“0”,以便它们可以继承块放置的任何层。

Lee Mac 发表于 2022-7-6 11:00:02

考虑一下这个函数:
 

;;---------------=={ Apply to Block Objects }==---------------;;
;;                                                            ;;
;;Applies a supplied function to all objects in a block   ;;
;;definition.                                             ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;_blockname - name of block to apply function            ;;
;;_function- function to apply to all objects in block    ;;
;;------------------------------------------------------------;;
;;Returns:T if block is found, else nil                   ;;
;;------------------------------------------------------------;;

(defun LM:ApplytoBlockObjects ( _blockname _function )
(vl-load-com)
;; © Lee Mac 2010
(
   (lambda ( _function / def )
   (if
       (not
         (vl-catch-all-error-p
         (setq def
             (vl-catch-all-apply 'vla-item
               (list
               (vla-get-blocks
                   (vla-get-ActiveDocument (vlax-get-acad-object))
               )
               _blockname
               )
             )
         )
         )
       )
       (vlax-for obj def (_function obj))
   )
   )
   (eval _function)
)
)


;; Test Function to Move all Objects in a Block to Layer "0"

(defun c:test ( / ss l )

(if (setq ss (ssget "_+.:E:S" '((0 . "INSERT"))))
   (progn   
   (LM:ApplytoBlockObjects (cdr (assoc 2 (setq l (entget (ssname ss 0)))))
       (function
         (lambda ( obj ) (vla-put-Layer obj "0"))
       )
   )
   (if (= 1 (cdr (assoc 66 l)))
       (vl-cmdf "_.attsync" "_N" (cdr (assoc 2 l)))
   )
   )
)

(princ)
)
页: [1]
查看完整版本: 更改blo的对象层