明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8655|回复: 22

批量倒角的各种思路,(用心回帖奖币)

    [复制链接]
发表于 2013-4-25 13:42 | 显示全部楼层 |阅读模式
就下图为例子:批量直线一对一的进行倒角

下图是:效果图



欢迎大家说说你要操作这个例子的思路方法!



该贴已经同步到 【KAIXIN】的微博

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-9-11 17:51 | 显示全部楼层
原来还有这么多人也究研这个的。1.框选不同角度的2组线;
2.按角度值分组,前面黄工的程序要注意(rem ang (/ pi 2)),135/90余45,225/90同样余45,但这是2条不同角度的线,还有互为180度的线应视为同组线,0度与接近360度的视为同组线,当然要处理这样的线条为同方向;
3.用鼠标的即时坐标作参考点对分组的线条排序;
4.鼠标的即时坐标参考点在2组线条的相对位置,从而确定2组线条是把StartPoint还是endPoint移至交点上。至于如果确定鼠标的即时坐标参考点在2组线条的相对位置大家可以参考“【越飞越高讲堂16】CAD 的坐标系统和trans函数的工作原理”最后那段。



本帖子中包含更多资源

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

x
发表于 2018-4-5 07:09 | 显示全部楼层
一次选择,根据角度分成两组,分别取两组直线与其垂线的虚交点,如果分组直线角度不为0则按虚交点x坐标进行排序,如果某一组直线角度为0,则按虚交点的y轴坐标进行排序,这样就完成了分组与排序,而且还方便求出直线之间的距离,倒角大小还渐增大时这个距离就有用了,然后根据指定倒角大小,大小是否渐变对应倒角即可。

评分

参与人数 1金钱 +10 收起 理由
【KAIXIN】 + 10 赞一个!

查看全部评分

发表于 2018-4-10 22:30 | 显示全部楼层
虽然我还不会写。但是跟据你的图例应该如下:
1:框选+判断
2:圆角的应该是像批量偏移才对。
3:批量偏移完成后。像圆角太小的是不可能倒的出来的。和你线的层板有关联。这个位置要给个提示之类的。
水平有限,见谅
发表于 2013-4-25 13:51 | 显示全部楼层
好像G版有一个吧

点评

不要推荐别人的,自己玩玩  发表于 2013-4-25 14:00

评分

参与人数 1明经币 +1 金钱 +6 收起 理由
【KAIXIN】 + 1 + 6 赞一个!

查看全部评分

发表于 2013-4-25 14:04 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2013-4-26 16:53 编辑

1 先判断线的位置,分成两组
2 然后依次从两组中取线,并判断那一个点离虚交点近,然后倒角
A 分组
  1. ;;1 对象分组,返回组列表
  2. (defun ss:group (ss / ANG ANG1 ANG2 GETENDPOINT GROUP1 GROUP2 OBJ PARAM STARTPOINT)
  3.   (setq obj (ssname ss 0))
  4.   (SsDel obj SS)
  5.   (setq StartPoint (vlax-curve-getStartPoint obj))
  6.   (setq getEndPoint (vlax-curve-getEndPoint obj))
  7.   (setq param (vlax-curve-getStartParam obj))
  8.   ;;起点切线方向的角度值
  9.   (setq ang (angle StartPoint
  10.                    (mapcar '+ StartPoint (vlax-curve-getFirstDeriv obj param))
  11.             )
  12.   )
  13.   (setq ang1 (rem ang (/ pi 2)))
  14.   (setq group1 (cons obj group1))

  15.   (repeat (sslength ss)
  16.     (setq obj (ssname ss 0))
  17.     (SsDel obj SS)
  18.     (setq StartPoint (vlax-curve-getStartPoint obj))
  19.     (setq getEndPoint (vlax-curve-getEndPoint obj))
  20.     (setq param (vlax-curve-getStartParam obj))
  21.     ;;起点切线方向的角度值
  22.     (setq ang (angle StartPoint
  23.                      (mapcar '+ StartPoint (vlax-curve-getFirstDeriv obj param))
  24.               )
  25.     )
  26.     (setq ang2 (rem ang (/ pi 2)))

  27.     (if (equal ang1 ang2 0.1)
  28.       (setq group1 (cons obj group1))
  29.       (setq group2 (cons obj group2))
  30.     )
  31.   )

  32.   (list group1 group2)
  33. )



B 组排序
  1. ;;2 排序
  2. (defun sortObjects (lst / LST1 MINPT N OBJ)
  3.   ;;2.1  获取对象的外边框
  4.   (defun HH:MinMaxPt (ent / MinPt MaxPt)
  5.     (vla-GetBoundingBox
  6.       (vlax-Ename->vla-Object ent)
  7.       'MinPt
  8.       'MaxPt
  9.     )
  10.     (mapcar 'vlax-safearray->list (list MinPt MaxPt))
  11.   )
  12.   ;;2.2  点表排序
  13.   (defun Sort_pList (PLIST / p1 p2)
  14.     (vl-sort plist
  15.              '(lambda (p1 p2)
  16.                 (cond ((< (car (car p1)) (car (car p2))) T)
  17.                       ((and (= (car (car p1)) (car (car p2)))
  18.                             (< (cadr (car p1)) (cadr (car p2)))
  19.                        )
  20.                        T
  21.                       )
  22.                       (T nil)
  23.                 )
  24.               )
  25.     )
  26.   )
  27.   ;;2.3 列表排序
  28.   (repeat (setq n (length lst))
  29.     (setq obj (nth (setq n (1- n)) lst))
  30.     (setq MinPt (car (HH:MinMaxPt obj)))
  31.     (setq obj (list MinPt obj))
  32.     (setq lst1 (cons obj lst1))
  33.   )
  34.   (Sort_pList lst1)
  35. )


C 第一组的第一根线与第二组的第一根线和最后一根线比较,决定第二组是否需要倒序
D 两线倒角时,是以起点还是终点处倒角





点评

测试了下,类型不对,(HH:MinMaxPt obj) OBJ错误  发表于 2013-5-4 16:24
一次性框选的,黄兄,练练手  发表于 2013-4-25 14:40

评分

参与人数 1明经币 +2 金钱 +12 收起 理由
【KAIXIN】 + 2 + 12 赞一个!

查看全部评分

发表于 2013-4-25 15:29 | 显示全部楼层
开心版主在集各家所长

评分

参与人数 1明经币 +1 金钱 +6 收起 理由
【KAIXIN】 + 1 + 6 来实习下

查看全部评分

发表于 2013-4-25 15:54 | 显示全部楼层
管道布线专业的程序,3D的,比这要复杂得多,而且肯定是付费程序。
依例图来看,一次性选中所有直线依据旋转角度不同分成两组,再对每组直线依据起始点坐标分别排序直线,生成排序后的两组实体列表,依次取出倒角。

点评

对于起点终点来判断,可能会乱  发表于 2013-4-25 16:11

评分

参与人数 1明经币 +2 金钱 +6 收起 理由
【KAIXIN】 + 2 + 6 赞一个! 是朋友求助的!

查看全部评分

发表于 2013-4-25 16:35 | 显示全部楼层
不是付费程序最好,不然别人不会轻易给出源码!
你把例图给出,情况有多少种,程序自然就可以写出来了。
如果仅仅是两组等长的直线,可能要简单很多。
发表于 2013-4-25 17:44 | 显示全部楼层
特殊情况,好做:不用分组,建立一个选择集,依次判断每根线与其它线的交点是否在虚交点连线上,是的时候对这两根线进行倒角
倒角完毕后将这两条线从选择集中移除
不知道行不行

评分

参与人数 1明经币 +2 金钱 +9 收起 理由
【KAIXIN】 + 2 + 9 赞一个!

查看全部评分

发表于 2013-4-25 19:04 | 显示全部楼层
分两次ssget ,然后排序,再倒角!

评分

参与人数 1明经币 +2 金钱 +9 收起 理由
【KAIXIN】 + 2 + 9 赞一个!

查看全部评分

发表于 2013-4-25 19:15 | 显示全部楼层
编这个的难点在于怎么选中和其对应的那一条线,然后进行倒角。估计得首先按照坐标和角度对两组线分别进行排序,然后按顺序逐个进行倒角。

评分

参与人数 1明经币 +1 金钱 +15 收起 理由
【KAIXIN】 + 1 + 15 赞一个!

查看全部评分

发表于 2013-4-25 20:02 | 显示全部楼层
让我想想...
1.输入四个点,两个点用于选择第一组线,两个点用于选择另一组线
2.分两次用  ssget f 选中两组线
3.前两个点创建一条线,后两个点创建一条线
4.用对象数少的一组线的数目作为循环数
5.两组依次取出一个,与刚才画的线求交点,判断交点,起始点,两线虚交点的位置关系,修改起始点的位置达到两线连在一起,加入新选择集
6.完成后用选择集的线聚合连接成多义线(pedit  pedit里有一个倒角的参数)
完工。。好累。。

评分

参与人数 1明经币 +3 金钱 +6 收起 理由
【KAIXIN】 + 3 + 6 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 05:16 , Processed in 1.500895 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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