求助:多段线拐点画圆lisp程序
多段线拐点绘制圆,删除圆内线段1. 找到选中的多段线拐点的点集(entsel选中,entget得到串行,坐标行表头为10得到多段线坐标); 2. 在每个顶点处利用CAD命令画圆(circle,圆半径为0.4米);· 3. 删除圆内多段线;
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 知行ooo李肖坪的微博 建议第三步不要对多段线进行修改(不管是修剪还是怎么样),用多段线模拟圆做个wipeout把圆内的多段线盖住 ZZXXQQ大师不是给你解决了吗??? http://bbs.mjtd.com/thread-169202-1-1.html ;批量画圆
(vl-load-com)
(defun vertexs (ename / plist pp n)
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
(vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 2)
(setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
(setq n (+ n 2))
)
pp
)
(defun c:tt()
(setvar "CMDECHO" 0)
(setq r (getreal "\n半径:"))
(setq s1 (car (entsel "\n选择多段线: ")))
(setq ptn (vertexs s1))
(setq i 0)
(while (and (setq p0 (nth i ptn))
(setq pt p0) )
(setq i (1+ i)
)
(command "circle" pt r)
)
)
打断还没搞出来呵呵 先用着吧 光是多段线断点批量画圆实现了 (defun c:hydd ()
(setvar "CMDECHO" 0)
(setq r (getreal "\n半径:"))
(while (and (setq s1 (entsel "\n选择多段线: "))
(setq ent (entget(car s1)))
(= (cdr(assoc 0 ent)) "LWPOLYLINE"))
(setq ptlst (list))
(foreach x ent (if (= (car x) 10) (setq ptlst (cons (cdr x) ptlst))))
(foreach x ptlst
(entmake (list '(0 . "CIRCLE") (cons 10 x) (cons 40 r)))
(command "_.TRIM" "L" "" x "")
)
)
(setvar "CMDECHO" 1)
(princ)
)
非常感谢……………… llsheng_73 发表于 2015-12-20 11:28 static/image/common/back.gif
建议第三步不要对多段线进行修改(不管是修剪还是怎么样),用多段线模拟圆做个wipeout把圆内的多段线盖住
谢谢……这个建议是可行的
页:
[1]
2