Cespuglio 发表于 2022-7-5 17:17:42

关于entmod

我发现entmod用lisp来更改点Z坐标,但我也想更改颜色编号。我尝试了以下代码:
(defun c:ELEVAZIONE (/ ss i sn pts txt d di e ent)
;;;   ==-- Author : Tharwat Al Shoufi --==         ;;;
;;; Entmod the Z value of Points according        ;;;
;;;           to the nearest text's value                 ;;;
(if (setq ss (ssget '((0 . "POINT,*TEXT"))))
   (repeat (setq i (sslength ss))
   (setq sn (ssname ss (setq i (1- i))))
   (if (eq (cdr (assoc 0 (entget sn))) "POINT")
       (setq pts (cons (list (cdr (assoc 10 (entget sn))) sn) pts))
       (setq txt (cons (list (cdr (assoc 10 (entget sn))) sn) txt))
   )
   )
)

(foreach p pts
   (foreach x txt
   (if (not d)
       (setq d (distance (car p) (car x))
             e (cadr x)
       )
       (if (< (setq di (distance (car p) (car x))) d)
         (setq d di
               e (cadr x)
         )
       )
   )
   )
   (setq d nil)
   


(if (numberp (read (cdr (assoc 1 (entget e)))))
   (progn
(entmod
       (subst
         (cons 10
               (list (car (cdr (assoc 10 (setq ent (entget (cadr p))))))
                     (cadr (cdr (assoc 10 ent)))
                     (read (cdr (assoc 1 (entget e))))
                                          )
         )
         (assoc 10 ent)
         ent
       )
)
        (entmod (subst (cons 62 1) (assoc 62 ent) ent)) ; this is my code
))
)
(princ "\n Written by Tharwat Al Shoufi")
(princ)
)
 
但不起作用。有人能帮我吗?

Cespuglio 发表于 2022-7-5 17:43:09

我以这种方式更新了代码,它似乎有效:
(defun c:ELEVAZIONE (/ ss i sn pts txt d di e ent)
;;;   ==-- Author : Tharwat Al Shoufi --==         ;;;
;;; Entmod the Z value of Points according        ;;;
;;;           to the nearest text's value                 ;;;
(if (setq ss (ssget '((0 . "POINT,*TEXT"))))
   (repeat (setq i (sslength ss))
   (setq sn (ssname ss (setq i (1- i))))
   (if (eq (cdr (assoc 0 (entget sn))) "POINT")
       (setq pts (cons (list (cdr (assoc 10 (entget sn))) sn) pts))
       (setq txt (cons (list (cdr (assoc 10 (entget sn))) sn) txt))
   )
   )
)

(foreach p pts
   (foreach x txt
   (if (not d)
       (setq d (distance (car p) (car x))
             e (cadr x)
       )
       (if (< (setq di (distance (car p) (car x))) d)
         (setq d di
               e (cadr x)
         )
       )
   )
   )
   (setq d nil)
   


(if (numberp (read (cdr (assoc 1 (entget e)))))
   (progn


(setq elist
        (subst
         (cons 10
               (list (car (cdr (assoc 10 (setq ent (entget (cadr p))))))
                     (cadr (cdr (assoc 10 ent)))
                     (read (cdr (assoc 1 (entget e))))
                                                  )
         )
         (assoc 10 ent)
         ent
       ))
(setq elist (subst (cons 62 1) (assoc 62 elist) elist))


(entmod elist)
))


)
(princ "\n Fatto!")
(princ)
)

David Bethel 发表于 2022-7-5 18:14:13

您还需要处理具有颜色BYLAYER的实体
 

(setq elist (if (assoc 62 elist)
               (subst (cons 62 1) (assoc 62 elist) elist)
               (append elist (list (cons 62 1)))))

 
-大卫

Cespuglio 发表于 2022-7-5 18:19:21

好的,谢谢,太好了
页: [1]
查看完整版本: 关于entmod