357785513 发表于 2010-6-25 12:31:00

批量倒角有没有什么更速的办法

做水的看一下,能不能批量倒角呀

sky-x-x 发表于 2023-10-8 22:58:02

xyp1964 发表于 2010-6-28 01:08


代码提示错位,求解

mccad 发表于 2010-6-25 12:38:00

<p>不用程序,如果从画图的角度来说,你用的方法很慢,你可以用复制的方法复制那个倒角边到每个需要的位置上,再快一点,就是阵列了。</p>
<p>实际上对于一些普通的制图,并不一定要用程序来解决。</p>

357785513 发表于 2010-6-25 22:05:00

<p>不同意二楼的意见,因为水是有定的斜度的,所以下面那线不会是垂直于马桶的下流水管,所以无论是复制还是阵列都不会接上的</p>

357785513 发表于 2010-6-27 18:19:00

大家顶呀,不顶这么好的铁可沉了呀

Ea 发表于 2010-6-27 19:39:00

本帖最后由 作者 于 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)
)

jialiang168 发表于 2010-6-27 20:22:00

<p>谢谢楼上的大大,只是该LISP怎么弄起来怪怪的?而且对于PLINE没有作用?能给个说明怎么使用吗?我也需要用到呢!</p>

jialiang168 发表于 2010-6-27 20:33:00

5楼的大大还真利害。刚刚我研究了一下终于知道怎么使用了。连有斜度的都能做出倒角。因该是说直接绘制出倒角。只是倒角的距离怎么像是不能自定?是我使用错误了吗?

Ea 发表于 2010-6-27 21:02:00

楼上代码加入了设定倒角距离

狂刀lxx 发表于 2010-6-27 21:15:00

;我这个不是很完善,只是提个思路,用到倒角命令。

(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)
)

edata 发表于 2010-6-27 23:49:00

纯属凑热闹
一倒多 只能做到 倒直线。呵呵。

;一倒多:简单版本β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)
)


页: [1] 2 3
查看完整版本: 批量倒角有没有什么更速的办法