ycpyxl 发表于 2024-10-14 13:39:53

新手请教程序代码运行问题

请教高手以下代码实现不了变直径功能,请帮忙指出不对之处,谢谢

(defun c:TY()
(setq new_rad(getreal "请求输入圆的新半径值:"))
(prompt "\n<<框选欲更新半径的圆>>")
(setq ss(ssget))
(setq n 0 k 0)
(repeat(sslength ss)
(setq en(ssname ss n))
(setq endata(entget en))
(setq entype (cdr (assoc 0 endata)))
(if (=entype "CIRCLE")
    (sub_upd_rad)
    )
(setq n (1+n))



(princ(strcat "\n共有<" (itoa k) ">个圆更新半径=" (rtos new_rad)))
(prin1)
)
(defun sub_upd_rad()
(setq 40_list(assoc 40 endata))
(setq new_40_list (cons 40 new_rad))
(setq endata(subst new_40_list 40 list endata))
(entmod endata)
(setq k (1+k))
)

(prin1)
)

aws 发表于 2024-10-14 14:02:00

(defun c:TY(/ en endata entype k n new_rad ss sub_upd_rad)
(setq new_rad(getreal "请求输入圆的新半径值:"))
(prompt "\n<<框选欲更新半径的圆>>")
(setq ss(ssget))
(setq n 0 k 0)
(repeat(sslength ss)
                (setq en(ssname ss n))
                (setq endata(entget en))
                (setq entype (cdr(assoc 0 endata)))
                (if(= entype "CIRCLE")
                        (progn
                                (setq 40_list(assoc 40 endata))
                                (setq new_40_list (cons 40 new_rad))
                                (entmod(subst new_40_list 40_list endata))
                        )
    )
                (setq n (1+ n))
                (setq k (1+ k))
                (prin1)
        )
        (princ(strcat "\n共有<" (itoa k) ">个圆更新半径=" (rtos new_rad)))
        (prin1)
)

sbwdx 发表于 2024-10-14 14:09:26

(defun c:TY ()
(setq new_rad (getreal "请求输入圆的新半径值:"))
(prompt "\n<<框选欲更新半径的圆>>")
(setq ss (ssget))
(setq n 0 k 0)
(repeat (sslength ss)
    (setq en (ssname ss n))
    (setq endata (entget en))
    (setq entype (cdr (assoc 0 endata)))
    (if (= entype "CIRCLE")
      (sub_upd_rad)
    )
    (setq n (1+ n))
)
(princ (strcat "\n共有<" (itoa k) ">个圆更新半径=" (rtos new_rad)))
(prin1)
)

(defun sub_upd_rad ()
(setq 40_list (assoc 40 endata))
(setq new_40_list (cons 40 new_rad))
(setq endata (subst new_40_list 40_list endata))
(entmod endata)
(setq k (1+ k))
)

(prin1)

aws 发表于 2024-10-14 14:14:20

(defun c:gg(/ en n new-r ss)
        (setq ss(ssget '((0 . "CIRCLE"))));直接选取圆
        (setq new-r(getreal "设置新半径:"))
        (setq n(sslength ss))
        (print(strcat "共计修改了"(rtos n 2 0)"个圆!半径为"(rtos new-r 2 0)))
        (repeat n
                (setq en(ssname ss(setq n(1- n))))
                (entmod(subst(cons 40 new-r)(assoc 40(entget en))(entget en)))
        )
        (princ)
)

这样简洁一些

ycpyxl 发表于 2024-10-14 15:49:39

aws 发表于 2024-10-14 14:02


谢谢高手不令赐教

xyp1964 发表于 2024-10-14 22:01:54

(defun c:tt ()
(defun SubUpd(e c v)(entmod(subst(cons c v)(assoc c(entget e))(entget e)))(entupd e))
(setq rr (getreal "\n请求输入圆的新半径值: ")
      i-1
)
(if (setq ss (ssget '((0 . "circle"))))
    (while (setq s1 (ssname ss (setq i (1+ i))))
      (SubUpd s1 40 rr)
    )
)
(princ)
)

弥勒 发表于 2024-10-15 09:10:49

xyp1964 发表于 2024-10-14 22:01


写得真好!
页: [1]
查看完整版本: 新手请教程序代码运行问题