新手请教程序代码运行问题
请教高手以下代码实现不了变直径功能,请帮忙指出不对之处,谢谢(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)
)
(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)
) (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)
(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)
)
这样简洁一些 aws 发表于 2024-10-14 14:02
谢谢高手不令赐教 (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)
) xyp1964 发表于 2024-10-14 22:01
写得真好!
页:
[1]