框选进行批量倒圆
本帖最后由 dyzf1314 于 2012-4-23 15:38 编辑请问各位高手,cad的lisp能实现我的需求吗?我现在需要框选图形中的所以图形。类似下图的图形,都是连接在一起的直线。 能实现对连接的直线批量倒圆角吗?
圆角的大小是我事先设定好的。效果类似下图。 谢了。
应版主的要求,附上了CAD 图纸,这些直线是3维的直线,不在一个平面上。
本帖最后由 xiaxiang 于 2012-4-23 14:52 编辑
(defun c:dr ()
(setq cm (getvar "cmdecho") os (getvar "osmode"))
(setvar "cmdecho" 0)
(prompt "选线:")
(while (setq en (ssget '((0 . "LINE"))))
(setq rr (getreal "\n 输入r的大小: ") aa nil)
(setq n (sslength en) i 1 a 0 )
(command "fillet" "r" rr )
(while n
(if (= i (- n 1))(setq en2 (entget (handent cc)) aa 0)
(setq en2 (entget (ssname en a))))
(setq p1 (cdr (assoc 10 en2)) p2 (cdr (assoc 11 en2)) cc (cdr (assoc 5 en2)) i (+ a 1) ii 1)
(while ii
(if (= i n)(setq ii nil n nil)
(progn
(setq en3 (entget (ssname en i)))
(setq pp1 (cdr (assoc 10 en3)) pp2 (cdr (assoc 11 en3)) bb (cdr (assoc 5 en3)))
(setq d (distance p1 pp2) d1 (distance p1 pp1) d2 (distance p2 pp2) d1 (distance p2 pp1) )
(if (or (= d 0.0)(= d1 0.0)(= d2 0.0)(= d3 0.0))
(progn
(setq pp3 (polar pp1 (angle pp1 pp2) (/ (distance pp1 pp2) 2.0)))
(setq p5 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0)))
(command "fillet" pp3 p5)
(setqa i ii nil )
)
(setq i (+ i 1))
) ;-if d 0.0
))
) ;-ii
(if (and (/= n nil)(= i (- n 1)))(setq a 0 i 1))
(if (and (= aa 0)(= i (- n 1)))(setq n nil))
);-n
)
(setvar "cmdecho" cm)
) xiaxiang 发表于 2012-4-23 14:07 static/image/common/back.gif
感谢xiaxiang,但我加载了这个lisp后不能实现啊,能帮忙看下是怎么回事不?
我是框选了所以的线条,然后输入了圆角的大小
CAD提示我:Select second object or shift-select to apply corner:
我就选择了其中一条线,但只能倒一个圆角啊。
请问怎么操作啊? Command里面显示是这样的:
Command: dr
选线:
Select objects: Specify opposite corner: 3 found
Select objects:
输入r的大小: 2
Unknown command "DR".Press F1 for help.
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/Fence/WPolygon/CPolygon
; error: Function cancelled
Select second object or shift-select to apply corner: 本帖最后由 xiaxiang 于 2012-4-23 14:52 编辑
dyzf1314 发表于 2012-4-23 14:31 http://bbs.mjtd.com/static/image/common/back.gif
Command里面显示是这样的:
Command: dr
你用的什么版本cad,刚那个程序有点错误,更新了一下,你再试试一楼程序。
我这边08,提示的是
命令: dr
选线:
选择对象: 指定对角点: 找到 4 个
选择对象:
输入r的大小: 6
貌似没有什么问题。 依楼主附图来看
可以试一下如下代码
(defun c:xlx()
(setq r (getreal "\n半径:"))
(setvar "filletrad" r)
(setq ss (ssget '((0 . "line"))))
(setq pt_list nil)
(setq i 0)
(repeat (sslength ss)
(sub_test1 (ssname ss i))
(setq i (1+ i))
)
(foreach pt pt_list
(progn
(setq ss2 (ssget "c" pt pt))
(setq en1 (ssname ss2 0))
(setq en2 (ssname ss2 1))
(command "fillet" en1 en2)
)
)
(prompt "<<xlx>>相连线批量倒角")
)
(defun sub_test1 (#en)
(setq endata (entget #en))
(setq pt10 (cdr (assoc 10 endata)))
(setq pt11 (cdr (assoc 11 endata)))
(setq ssint (ssget "f" (list pt10 pt11)))
(setq ssint (ssdel #en ssint))
(if (> (sslength ssint) 0)
(progn
(setq j 0)
(repeat (sslength ssint)
(setq ena (ssname ssint j))
(if (ssmemb ena ss)
(progn
(setq pta (cdr(assoc 10 (entget ena))))
(setq ptb (cdr(assoc 11 (entget ena))))
(setq intpt (inters pt10 pt11 pta ptb))
(setq intpt1 (osnap intpt "int"))
(if (not (member intpt1 pt_list))(setq pt_list (cons intpt1 pt_list)))
)
)
(setq j (1+ j))
)
)
)
)
xiaxiang 发表于 2012-4-23 15:45 static/image/common/back.gif
依楼主附图来看
可以试一下如下代码
试了下最新的,可以了,非常感谢版主的无私的回复。 xiaxiang 发表于 2012-4-23 15:45 static/image/common/back.gif
依楼主附图来看
可以试一下如下代码
程序没有问题,应该是CAD的问题.... 多谢开心了。 vlisp2012 发表于 2012-4-23 19:34 static/image/common/back.gif
多谢开心了。
怎么是多谢我呢?