明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12163|回复: 28

[基础] 批量倒角有没有什么更速的办法

  [复制链接]
发表于 2010-6-25 12:31:00 | 显示全部楼层 |阅读模式
做水的看一下,能不能批量倒角呀

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-10-8 22:58:02 | 显示全部楼层

代码提示错位,求解
发表于 2010-6-25 12:38:00 | 显示全部楼层

不用程序,如果从画图的角度来说,你用的方法很慢,你可以用复制的方法复制那个倒角边到每个需要的位置上,再快一点,就是阵列了。

实际上对于一些普通的制图,并不一定要用程序来解决。

 楼主| 发表于 2010-6-25 22:05:00 | 显示全部楼层

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

 楼主| 发表于 2010-6-27 18:19:00 | 显示全部楼层
大家顶呀,不顶这么好的铁可沉了呀
发表于 2010-6-27 19:39:00 | 显示全部楼层
本帖最后由 作者 于 2010-6-27 21:02:19 编辑

  1. (defun c:tt ()
  2.   (vl-catch-all-apply
  3.     (function
  4.       (lambda (/ drcf p1 p2 ss sl i an df)
  5. (defun drcf (p1 p2 an e / p3 p4 intpt p p0 p00 p)
  6.    (setq p3    (vlax-curve-getstartpoint e)
  7.   p4    (vlax-curve-getendpoint e)
  8.   intpt (inters p1 p2 p3 p4 nil)
  9.    )
  10.    (if (> (distance p3 intpt) (distance p4 intpt))
  11.      (setq p (list (car p4) (cadr p4)))
  12.      (setq p (list (car p3) (cadr p3)))
  13.    )
  14.    (setq p0  (polar intpt an df) ;_倒角距离
  15.   p00 (polar intpt (angle intpt p) df)
  16.    )
  17.    (entmake (list '(0 . "LWPOLYLINE") ;_当前层
  18.     '(100 . "AcDbEntity")
  19.     '(100 . "AcDbPolyline")
  20.     '(90 . 3)
  21.     (cons 10 p0)
  22.     (cons 10 p00)
  23.     (cons 10 p)
  24.      )
  25.    )
  26. )
  27. (if (and (setq p1 (getpoint "\nStart Point: ") ;_控制倒角方向
  28.          p2 (getpoint p1 "\nEnd Point: ")
  29.    )
  30.    (progn
  31.      (princ "\n选择线....")
  32.      (setq ss (ssget '((0 . "LINE"))))
  33.    )
  34.      )
  35.    (progn
  36.      (if
  37.        (not (setq
  38.        df (getdist (strcat "\n倒角距离<"
  39.       (rtos (getvar "chamfera") 2 2)
  40.       ">: "
  41.      )
  42.    )
  43.      )
  44.        )
  45.         (setq df 10.)
  46.         (setq df (getvar "chamfera"))
  47.      )
  48.      (setvar "chamfera" df)
  49.      (setq sl (sslength ss)
  50.     i  -1
  51.     an (angle p2 p1)
  52.      )
  53.      (repeat sl
  54.        (drcf p1 p2 an (ssname ss (setq i (1+ i))))
  55.      )
  56.    )
  57. )
  58.       )
  59.     )
  60.   )
  61.   (princ)
  62. )
发表于 2010-6-27 20:22:00 | 显示全部楼层

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

发表于 2010-6-27 20:33:00 | 显示全部楼层
5楼的大大还真利害。刚刚我研究了一下终于知道怎么使用了。连有斜度的都能做出倒角。因该是说直接绘制出倒角。只是倒角的距离怎么像是不能自定?是我使用错误了吗?
发表于 2010-6-27 21:02:00 | 显示全部楼层
楼上代码加入了设定倒角距离
发表于 2010-6-27 21:15:00 | 显示全部楼层
;我这个不是很完善,只是提个思路,用到倒角命令。
  1. (defun c:xxx(/ EL SS X)
  2. (setq el (entsel "\n 选择一边:"))
  3. (setq ss (ssget (progn (vla-eval (vlax-get-acad-object)"ThisDrawing.SendCommand  "f " ") nil)))
  4. (mapcar
  5.   '(lambda(x)
  6.      (command ".fillet" el x))
  7.   (mapcar '(lambda(x)(list (cadr x)(cadr (last x))))(ssnamex ss))
  8. )(princ)
  9. )
发表于 2010-6-27 23:49:00 | 显示全部楼层
纯属凑热闹
一倒多 只能做到 倒直线。呵呵。
  1. ;一倒多:简单版本β1.0
  2. ;功能介绍:倒角命令 一 倒多条线。
  3. ;第一次提示输入倒角距离值。
  4. ;加载后执行TT1 ,选择第一条线,确定。(多选了,只认选的第一条线)
  5. ;选择需要倒角的其他直线,其他的可以框选,最后一根建议单选。
  6. ;确定后就可以完成倒角效果。
  7. ;code by edata 2010年6月27日23:18:35
  8. (defun c:tt1(/ ds1 e1 e2 ess2 ss sn n enss2 en )
  9.   (if (= sk_distance1 nil) (setq sk_distance1 0))
  10.   (setq ds1 (getdist (strcat "\n输入倒角距离["(rtos sk_distance1)"]:")))
  11.   (if (= ds1 nil)
  12.       (princ (strcat "\n倒角距离["(rtos sk_distance1)"]:"))
  13.     (setq sk_distance1 ds1)
  14.       )
  15.   (if(/= sk_distance1 nil)
  16.     (progn   
  17. (setq e1 (ssget '((0 . "LINE"))))
  18.   (setq e2 (ssname e1 0))
  19.   (setq ess2 nil)
  20.   (setq ess2(ssadd e2 ))
  21. (setq ss (ssget '((0 . "LINE"))))
  22. (setq sn (sslength ss))
  23.     (setq n 0)
  24.     (repeat sn
  25.       (setq enss2 nil)
  26. (setq en (ssname ss n ))
  27.       (if (/= e2 en)
  28. (progn
  29.       (setq enss2(ssadd en ))
  30.     (command "CHAMFER" "d" sk_distance1 sk_distance1 "")
  31.     (command "CHAMFER" "t" "t" "")
  32.     (command "CHAMFER"  ess2 enss2)
  33.       ))
  34.       (setq n(+ n 1))
  35.     )
  36.   )
  37.    
  38.   (princ "倒角距离无效,请重新输入!!")
  39.    
  40.     )
  41.    (princ)
  42.   )
  43. ;一倒多:简单版本2β1.0
  44. ;功能介绍:倒角命令 一 倒多条线。
  45. ;第一次提示输入倒角距离值。
  46. ;加载后执行TT2 ,选择第一条线,确定。(多选了,只认选的第一条线)
  47. ;选择需要倒角的其他直线,其他的可以框选,最后一根建议单选。
  48. ;确定后就可以完成倒角效果。
  49. ;code by edata 2010年6月27日23:25:45
  50. (defun c:tt2(/ ds1 ds2 e1 e2 ess2 ss sn n enss2 en )
  51.   (if (= sk_distance1 nil) (setq sk_distance1 0))
  52.   (if (= sk_distance2 nil) (setq sk_distance2 0))
  53.   (setq ds1 (getdist (strcat "\n输入第一倒角距离["(rtos sk_distance1)"]:")))
  54.   (if (= ds1 nil)
  55.       (princ (strcat "\n第一倒角距离["(rtos sk_distance1)"]:"))
  56.     (setq sk_distance1 ds1)
  57.       )
  58.   (setq ds2 (getdist (strcat "\n输入第二倒角距离["(rtos sk_distance2)"]:")))
  59.   (if (= ds2 nil)
  60.       (princ (strcat "\n第二倒角距离["(rtos sk_distance2)"]:"))
  61.     (setq sk_distance2 ds2)
  62.       )
  63.   (princ (strcat "\n第一倒角距离["(rtos sk_distance1)"],第二倒角距离["(rtos sk_distance2)"]:"))
  64.   
  65.   (if(and (/= sk_distance1 nil) (/= sk_distance2 nil))
  66.     (progn   
  67. (setq e1 (ssget '((0 . "LINE"))))
  68.   (setq e2 (ssname e1 0))
  69.   (setq ess2 nil)
  70.   (setq ess2(ssadd e2 ))
  71. (setq ss (ssget '((0 . "LINE"))))
  72. (setq sn (sslength ss))
  73.     (setq n 0)
  74.     (repeat sn
  75.       (setq enss2 nil)
  76. (setq en (ssname ss n ))
  77.       (if (/= e2 en)
  78. (progn
  79.       (setq enss2(ssadd en ))
  80.     (command "CHAMFER" "d" sk_distance1 sk_distance2 "")
  81.     (command "CHAMFER" "t" "t" "")
  82.     (command "CHAMFER"  ess2 enss2)
  83.       ))
  84.       (setq n(+ n 1))
  85.     )
  86.   )
  87.    
  88.   (princ "倒角距离无效,请重新输入!!")
  89.    
  90.     )
  91.    (princ)
  92.   )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 07:23 , Processed in 0.183572 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表