批量倒角有没有什么更速的办法
做水的看一下,能不能批量倒角呀 xyp1964 发表于 2010-6-28 01:08代码提示错位,求解 <p>不用程序,如果从画图的角度来说,你用的方法很慢,你可以用复制的方法复制那个倒角边到每个需要的位置上,再快一点,就是阵列了。</p>
<p>实际上对于一些普通的制图,并不一定要用程序来解决。</p> <p>不同意二楼的意见,因为水是有定的斜度的,所以下面那线不会是垂直于马桶的下流水管,所以无论是复制还是阵列都不会接上的</p> 大家顶呀,不顶这么好的铁可沉了呀 本帖最后由 作者 于 2010-6-27 21:02:19 编辑
(defun c:tt ()
(vl-catch-all-apply
(function
(lambda (/ drcf p1 p2 ss sl i an df)
(defun drcf (p1 p2 an e / p3 p4 intpt p p0 p00 p)
(setq p3 (vlax-curve-getstartpoint e)
p4 (vlax-curve-getendpoint e)
intpt (inters p1 p2 p3 p4 nil)
)
(if (> (distance p3 intpt) (distance p4 intpt))
(setq p (list (car p4) (cadr p4)))
(setq p (list (car p3) (cadr p3)))
)
(setq p0(polar intpt an df) ;_倒角距离
p00 (polar intpt (angle intpt p) df)
)
(entmake (list '(0 . "LWPOLYLINE") ;_当前层
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(90 . 3)
(cons 10 p0)
(cons 10 p00)
(cons 10 p)
)
)
)
(if (and (setq p1 (getpoint "\nStart Point: ") ;_控制倒角方向
p2 (getpoint p1 "\nEnd Point: ")
)
(progn
(princ "\n选择线....")
(setq ss (ssget '((0 . "LINE"))))
)
)
(progn
(if
(not (setq
df (getdist (strcat "\n倒角距离<"
(rtos (getvar "chamfera") 2 2)
">: "
)
)
)
)
(setq df 10.)
(setq df (getvar "chamfera"))
)
(setvar "chamfera" df)
(setq sl (sslength ss)
i-1
an (angle p2 p1)
)
(repeat sl
(drcf p1 p2 an (ssname ss (setq i (1+ i))))
)
)
)
)
)
)
(princ)
) <p>谢谢楼上的大大,只是该LISP怎么弄起来怪怪的?而且对于PLINE没有作用?能给个说明怎么使用吗?我也需要用到呢!</p> 5楼的大大还真利害。刚刚我研究了一下终于知道怎么使用了。连有斜度的都能做出倒角。因该是说直接绘制出倒角。只是倒角的距离怎么像是不能自定?是我使用错误了吗? 楼上代码加入了设定倒角距离 ;我这个不是很完善,只是提个思路,用到倒角命令。
(defun c:xxx(/ EL SS X)
(setq el (entsel "\n 选择一边:"))
(setq ss (ssget (progn (vla-eval (vlax-get-acad-object)"ThisDrawing.SendCommand\"f \" ") nil)))
(mapcar
'(lambda(x)
(command ".fillet" el x))
(mapcar '(lambda(x)(list (cadr x)(cadr (last x))))(ssnamex ss))
)(princ)
)
纯属凑热闹
一倒多 只能做到 倒直线。呵呵。
;一倒多:简单版本β1.0
;功能介绍:倒角命令 一 倒多条线。
;第一次提示输入倒角距离值。
;加载后执行TT1 ,选择第一条线,确定。(多选了,只认选的第一条线)
;选择需要倒角的其他直线,其他的可以框选,最后一根建议单选。
;确定后就可以完成倒角效果。
;code by edata 2010年6月27日23:18:35
(defun c:tt1(/ ds1 e1 e2 ess2 ss sn n enss2 en )
(if (= sk_distance1 nil) (setq sk_distance1 0))
(setq ds1 (getdist (strcat "\n输入倒角距离["(rtos sk_distance1)"]:")))
(if (= ds1 nil)
(princ (strcat "\n倒角距离["(rtos sk_distance1)"]:"))
(setq sk_distance1 ds1)
)
(if(/= sk_distance1 nil)
(progn
(setq e1 (ssget '((0 . "LINE"))))
(setq e2 (ssname e1 0))
(setq ess2 nil)
(setq ess2(ssadd e2 ))
(setq ss (ssget '((0 . "LINE"))))
(setq sn (sslength ss))
(setq n 0)
(repeat sn
(setq enss2 nil)
(setq en (ssname ss n ))
(if (/= e2 en)
(progn
(setq enss2(ssadd en ))
(command "CHAMFER" "d" sk_distance1 sk_distance1 "")
(command "CHAMFER" "t" "t" "")
(command "CHAMFER"ess2 enss2)
))
(setq n(+ n 1))
)
)
(princ "倒角距离无效,请重新输入!!")
)
(princ)
)
;一倒多:简单版本2β1.0
;功能介绍:倒角命令 一 倒多条线。
;第一次提示输入倒角距离值。
;加载后执行TT2 ,选择第一条线,确定。(多选了,只认选的第一条线)
;选择需要倒角的其他直线,其他的可以框选,最后一根建议单选。
;确定后就可以完成倒角效果。
;code by edata 2010年6月27日23:25:45
(defun c:tt2(/ ds1 ds2 e1 e2 ess2 ss sn n enss2 en )
(if (= sk_distance1 nil) (setq sk_distance1 0))
(if (= sk_distance2 nil) (setq sk_distance2 0))
(setq ds1 (getdist (strcat "\n输入第一倒角距离["(rtos sk_distance1)"]:")))
(if (= ds1 nil)
(princ (strcat "\n第一倒角距离["(rtos sk_distance1)"]:"))
(setq sk_distance1 ds1)
)
(setq ds2 (getdist (strcat "\n输入第二倒角距离["(rtos sk_distance2)"]:")))
(if (= ds2 nil)
(princ (strcat "\n第二倒角距离["(rtos sk_distance2)"]:"))
(setq sk_distance2 ds2)
)
(princ (strcat "\n第一倒角距离["(rtos sk_distance1)"],第二倒角距离["(rtos sk_distance2)"]:"))
(if(and (/= sk_distance1 nil) (/= sk_distance2 nil))
(progn
(setq e1 (ssget '((0 . "LINE"))))
(setq e2 (ssname e1 0))
(setq ess2 nil)
(setq ess2(ssadd e2 ))
(setq ss (ssget '((0 . "LINE"))))
(setq sn (sslength ss))
(setq n 0)
(repeat sn
(setq enss2 nil)
(setq en (ssname ss n ))
(if (/= e2 en)
(progn
(setq enss2(ssadd en ))
(command "CHAMFER" "d" sk_distance1 sk_distance2 "")
(command "CHAMFER" "t" "t" "")
(command "CHAMFER"ess2 enss2)
))
(setq n(+ n 1))
)
)
(princ "倒角距离无效,请重新输入!!")
)
(princ)
)