选中圆,按直径大小替换成块,自己画的圆可以替换,3D转的圆不能替换
选中圆,按直径大小替换成块,自己CAD画的圆可以替换,3D图转的圆不能替换,还有圆必须在世界坐标系下才能转,怎么改在任意位置都能替换在当前院校位置,下面是院长的程序:(defun c:THY ()
(princ "\n根据圆直径替换成块: ")
(if (setq ss (ssget '((0 . "circle"))))
(progn
(setq i -1
ss1 (ssadd)
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq ent (entget s1)
pt(cdr (assoc 10 ent))
rr(cdr (assoc 40 ent))
)
(cond ((= rr 3)
(command "insert" "LSPD6" pt 1 1 0)
(ssadd s1 ss1)
)
((= rr 4)
(command "insert" "LSPD8" pt 1 1 0)
(ssadd s1 ss1)
)
((= rr 5)
(command "insert" "LSPD10" pt 1 1 0)
(ssadd s1 ss1)
)
((= rr 6)
(command "insert" "LSPD12" pt 1 1 0)
(ssadd s1 ss1)
)
((= rr 8)
(command "insert" "LSPD16" pt 1 1 0)
(ssadd s1 ss1)
)
((= rr 10)
(command "insert" "LSPD20" pt 1 1 0)
(ssadd s1 ss1)
)
)
)
(command "erase" ss1 "")
)
)
(princ)
)
本帖最后由 bssurvey 于 2018-1-19 16:11 编辑
(defun c:THY ()
(princ "\n根據圓直徑替換成塊: ")
(if (setq ss (ssget '((0 . "circle"))))
(progn
(setq i -1
ss1 (ssadd)
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq ent (entget s1)
pt(cdr (assoc 10 ent))
rr(cdr (assoc 40 ent))
)
(cond ((= (rtos rr 2 0) "3")
(command "insert" "LSPD6" pt 1 1 0)
(ssadd s1 ss1)
)
((= (rtos rr 2 0) "4")
(command "insert" "LSPD8" pt 1 1 0)
(ssadd s1 ss1)
)
((= (rtos rr 2 0) "5")
(command "insert" "LSPD10" pt 1 1 0)
(ssadd s1 ss1)
)
((= (rtos rr 2 0) "6")
(command "insert" "LSPD12" pt 1 1 0)
(ssadd s1 ss1)
)
((= (rtos rr 2 0) "7")
(command "insert" "LSPD16" pt 1 1 0)
(ssadd s1 ss1)
)
((= (rtos rr 2 0) "8")
(command "insert" "LSPD20" pt 1 1 0)
(ssadd s1 ss1)
)
)
)
(command "erase" ss1 "")
)
)
(princ)
)
把 RR值改成文字比對即可
相应的LSPD6.dwg等图块是否存在? (defun c:thy ()
(princ "\n根据圆直径替换成块: ")
(if (setq ss (ssget '((0 . "circle"))))
(progn
(setq i-1
ss1(ssadd)
)
(while (setq s1 (ssname ss (setq i (1+ i))))
(setq ent (entget s1)
pt(cdr (assoc 10 ent))
rr(cdr (assoc 40 ent))
bn(cond ((= rr 3) "LSPD6")
((= rr 4) "LSPD8")
((= rr 5) "LSPD10")
((= rr 6) "LSPD12")
((= rr 8) "LSPD16")
((= rr 10) "LSPD20")
(t nil)
)
)
(if bn
(progn (command "insert" bn pt 1 1 0) (ssadd s1 ss1))
)
)
(command "erase" ss1 "")
)
)
(princ)
) xyp1964 发表于 2018-1-19 13:31
院长秒回呀,太感谢了。没有用呀3D转的图纸还是替换不了,自己画的圆就可以。LSPD6图纸都有,太多了我只是用LSPD8一个做个说明。 (= rr 4)
==>
(equal rr 4 1e-9)
全改用容差 Andyhon 发表于 2018-1-19 14:47
(= rr 4)
==>
(equal rr 4 1e-9)
感谢,确实是这样的。(equal rr 4 1e-9) 替换 (= rr 4)
Andyhon 发表于 2018-1-19 14:47
(= rr 4)
==>
(equal rr 4 1e-9)
还有割问题,替换在世界坐标下可以。自设坐标系后,替换就位置跑偏了,该怎么改在用户坐标系下依然可以替换 AutoLISP Functions
trans
Translates a point (or a displacement) from one coordinate system to another
(trans pt from to )
...
本帖最后由 llsheng_73 于 2018-1-20 12:45 编辑
(defun c:thy(/ ss bns bn e en i)
(princ "\n根据圆直径替换成块: ")
(if(and(setq bns(vl-remove-if-not'(lambda(x)(TBLSEARCH"block"(last x)))
'(("3" "LSPD6")("4" "LSPD8")("5" "LSPD10")
("6" "LSPD12")("8" "LSPD16")("10" "LSPD20"))));;检测图块是否存在
(setq ss(ssget '((0 . "circle")))))
(repeat(setq i(sslength ss))
(setq i(1- i)
e(ssname ss i)
en(entget e))
(if(setq bn(last(assoc(rtos(+(cdr(assoc 40 en))0.5)2 0)bns)))
(entmakex(list'(0 . "INSERT")(cons 2 bn)(assoc 10 en)))
(ssdel e ss))))
(command"reas1"ss"")
)
页:
[1]
2