明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7616|回复: 26

框选进行批量倒圆

    [复制链接]
发表于 2012-4-23 13:58:24 | 显示全部楼层 |阅读模式
本帖最后由 dyzf1314 于 2012-4-23 15:38 编辑

请问各位高手,cadlisp能实现我的需求吗?我现在需要框选图形中的所以图形。
类似下图的图形,都是连接在一起的直线。 能实现对连接的直线批量倒圆角吗?

圆角的大小是我事先设定好的。
效果类似下图。 谢了。

应版主的要求,附上了CAD 图纸,这些直线是3维的直线,不在一个平面上。




本帖子中包含更多资源

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

x
发表于 2012-4-23 14:07:28 | 显示全部楼层
本帖最后由 xiaxiang 于 2012-4-23 14:52 编辑
  1. (defun c:dr ()
  2.   (setq cm (getvar "cmdecho") os (getvar "osmode"))
  3.   (setvar "cmdecho" 0)
  4.   (prompt "选线:")
  5.   (while (setq en (ssget '((0 . "LINE"))))
  6.   (setq rr (getreal "\n 输入r的大小: ") aa nil)
  7.   (setq n (sslength en) i 1 a 0 )
  8.   (command "fillet" "r" rr )
  9.   (while n
  10.     (if (= i (- n 1))(setq en2 (entget (handent cc)) aa 0)
  11.    (setq en2 (entget (ssname en a))))
  12.     (setq p1 (cdr (assoc 10 en2)) p2 (cdr (assoc 11 en2)) cc (cdr (assoc 5 en2)) i (+ a 1) ii 1)
  13.    (while ii
  14.       (if (= i n)(setq ii nil n nil)
  15.         (progn
  16.          (setq en3 (entget (ssname en i)))
  17.          (setq pp1 (cdr (assoc 10 en3)) pp2 (cdr (assoc 11 en3)) bb (cdr (assoc 5 en3)))
  18.          (setq d (distance p1 pp2) d1 (distance p1 pp1) d2 (distance p2 pp2) d1 (distance p2 pp1) )
  19.          (if (or (= d 0.0)(= d1 0.0)(= d2 0.0)(= d3 0.0))
  20.           (progn
  21.            (setq pp3 (polar pp1 (angle pp1 pp2) (/ (distance pp1 pp2) 2.0)))
  22.            (setq p5 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0)))
  23.            (command "fillet" pp3 p5)
  24.            (setq  a i ii nil )
  25.           )
  26.           (setq i (+ i 1))
  27.         )   ;-if d 0.0
  28.       ))
  29.     )   ;-ii
  30.     (if (and (/= n nil)(= i (- n 1)))(setq a 0 i 1))
  31.      (if (and (= aa 0)(= i (- n 1)))(setq n nil))
  32.     )  ;-n
  33.   )
  34.   (setvar "cmdecho" cm)
  35.   )
 楼主| 发表于 2012-4-23 14:22:17 | 显示全部楼层
xiaxiang 发表于 2012-4-23 14:07

感谢xiaxiang,但我加载了这个lisp后不能实现啊,能帮忙看下是怎么回事不?

我是框选了所以的线条,然后输入了圆角的大小

CAD提示我:Select second object or shift-select to apply corner:

我就选择了其中一条线,但只能倒一个圆角啊。

请问怎么操作啊?
 楼主| 发表于 2012-4-23 14:31:11 | 显示全部楼层
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:
发表于 2012-4-23 14:51:35 | 显示全部楼层
本帖最后由 xiaxiang 于 2012-4-23 14:52 编辑
dyzf1314 发表于 2012-4-23 14:31
Command里面显示是这样的:

Command: dr


你用的什么版本cad,刚那个程序有点错误,更新了一下,你再试试一楼程序。
我这边08,提示的是
命令: dr
选线:
选择对象: 指定对角点: 找到 4 个
选择对象:
输入r的大小: 6
貌似没有什么问题。
发表于 2012-4-23 15:45:23 | 显示全部楼层
依楼主附图来看
可以试一下如下代码

  1. (defun c:xlx()
  2.   (setq r (getreal "\n半径:"))
  3.   (setvar "filletrad" r)
  4.   (setq ss (ssget '((0 . "line"))))
  5.   (setq pt_list nil)
  6.   (setq i 0)
  7.   (repeat (sslength ss)
  8.     (sub_test1 (ssname ss i))
  9.     (setq i (1+ i))
  10.     )
  11.   (foreach pt pt_list
  12.     (progn
  13.       (setq ss2 (ssget "c" pt pt))
  14.         (setq en1 (ssname ss2 0))
  15.     (setq en2 (ssname ss2 1))
  16.         (command "fillet" en1 en2)
  17.       )
  18.     )
  19.   (prompt "<<xlx>>相连线批量倒角")
  20.   )
  21.   (defun sub_test1 (#en)
  22.     (setq endata (entget #en))
  23.     (setq pt10 (cdr (assoc 10 endata)))
  24.     (setq pt11 (cdr (assoc 11 endata)))
  25.     (setq ssint (ssget "f" (list pt10 pt11)))
  26.     (setq ssint (ssdel #en ssint))
  27.     (if (> (sslength ssint) 0)
  28.       (progn
  29.     (setq j 0)
  30.     (repeat (sslength ssint)
  31.       (setq ena (ssname ssint j))
  32.       (if (ssmemb ena ss)
  33.         (progn
  34.           (setq pta (cdr(assoc 10 (entget ena))))
  35.           (setq ptb (cdr(assoc 11 (entget ena))))
  36.           (setq intpt (inters pt10 pt11 pta ptb))
  37.           (setq intpt1 (osnap intpt "int"))
  38.           (if (not (member intpt1 pt_list))(setq pt_list (cons intpt1 pt_list)))
  39.           )
  40.         )
  41.       (setq j (1+ j))
  42.       )
  43.     )
  44.       )
  45.     )

点评

还需要改进呀,半径太大,出错没控制  发表于 2014-9-24 15:41
怎么不支持多段线哦!  发表于 2013-3-15 10:31
2006提示: 错误: 参数类型错误: lselsetp nil  发表于 2012-4-23 18:17
 楼主| 发表于 2012-4-23 15:57:24 | 显示全部楼层
xiaxiang 发表于 2012-4-23 15:45
依楼主附图来看
可以试一下如下代码

试了下最新的,可以了,非常感谢版主的无私的回复。
发表于 2012-4-23 18:20:56 | 显示全部楼层
xiaxiang 发表于 2012-4-23 15:45
依楼主附图来看
可以试一下如下代码

程序没有问题,应该是CAD的问题....
发表于 2012-4-23 19:34:15 | 显示全部楼层
多谢开心了。
发表于 2012-4-23 19:38:48 | 显示全部楼层
vlisp2012 发表于 2012-4-23 19:34
多谢开心了。

怎么是多谢我呢?

点评

看走眼了,不好意思。  发表于 2012-4-23 20:50
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 06:11 , Processed in 0.447532 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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