lisp 圆大小排列问题

(defunc:bcnc(/liet)(if(and(setqss(ssget"x"(list(cons8"1")))))(progn(setqi0clst(list))... (defun c:bcnc ( / li et)
(if (and(setq ss (ssget "x"(list(cons 8 "1")))) )
(progn
(setq i 0 clst (list))
(repeat (sslength ss)
(setq en (ssname ss i)
ent (entget en)
r1 (assoc 40 ent)
i (1+ i))
(if (not (member (cdr r1) clst))
(progn
(setq ss1 (ssget "x"(list(cons 8 "1")r1)))
(setq r (assoc 40 ent))
(setq newd (getdist (strcat "\n直径-->" (rtos (* (cdr r) 2) 2 4) "<--:")))
(if newd (progn
(setq j 0)
(setq r (/ newd 2))
(setq clst (cons r clst))
(repeat (sslength ss1)
(setq ent1 (entget(ssname ss1 j))
ent1 (subst (cons 40 r) (assoc 40 ent1) ent1)
j (1+ j))
(entmod ent1)
)
))
))
)
)
)
(princ)
)

上面改圆大小的程序 目前程序对圆没有排列
帮忙修改一下从最小直径往大的排列?
谢谢
结果:从5,6,8,9,10,15,16
展开
 我来答
半途中888
2017-11-15 · TA获得超过837个赞
知道小有建树答主
回答量:463
采纳率:81%
帮助的人:127万
展开全部

(defun c:bcnc ( / li et clst cenlist )

(if (and(setq ss (ssget "x"(list(cons 8 "1")))) ) 

(progn

(setq i 0 clst (list)  cenlist  nil)

(repeat (sslength ss)

(setq en (ssname ss i)

ent (entget en)

r1 (assoc 40 ent)

cenlist (cons(cdr r1) cenlist)

i (1+ i))

(setq cenlist (vl-sort cenlist '< ))

)

(foreach e cenlist

(if (not (member e clst));(setq e (nth 0 cenlist)) 

(progn

(setq ss1 (ssget "x"(list(cons 8 "1") (cons 40 e))))

;(setq r (assoc 40 ent))

(setq newd (getdist (strcat "\n直径-->" (rtos (* e 2) 2 4) "<--:")))

(if newd (progn

(setq j 0)

(setq e (/ newd 2))

(setq clst (cons e clst))

(repeat (sslength ss1)

(setq ent1 (entget(ssname ss1 j))

ent1 (subst (cons 40 e) (assoc 40 ent1) ent1)

j (1+ j))

(entmod ent1)

)

))

))

)

)

)

(princ)

)

应该是这个意思吧,你自己测试一下。
更多追问追答
追问

首先感谢你的解答 ,

程序试用结果如上图,在修改时只能一个个改不是统一一种 的改,而且只能改一种 就出现参数错误? 谢谢

追答
(defun c:bcnc ( / li et clst cenlist l2 )
(if (and(setq ss (ssget "x"(list(cons 8 "1")))) )
(progn
(setq i 0 clst nil cenlist nil l2 nil)
(repeat (sslength ss)
(setq en (ssname ss i)
ent (entget en)
r1 (assoc 40 ent)
cenlist (cons(cdr r1) cenlist)
i (1+ i))
(setq cenlist (vl-sort cenlist '" (rtos (* e 2) 2 4) "<--:")))
(if newd (progn
(setq j 0)
(setq e (/ newd 2))
(setq clst (cons e clst))
(repeat (sslength ss1)
(setq ent1 (entget(ssname ss1 j))
ent1 (subst (cons 40 e) (assoc 40 ent1) ent1)
j (1+ j))
(entmod ent1)
)
))
))
)
)
)
(princ)
)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式