明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 【KAIXIN】

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

    [复制链接]
发表于 2013-4-25 20:21 | 显示全部楼层
新手过来学习学习
发表于 2013-4-25 21:15 | 显示全部楼层
本帖最后由 461045462 于 2013-4-25 21:27 编辑

根据楼主的图形
是否请试试:
1.框选批量连接线条(注意间隔)
2. 框选批量倒角

评分

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

查看全部评分

发表于 2013-4-27 22:18 | 显示全部楼层
1.框右下、左上二点,由二点另外计算出选择二组线的四个点,
  作为ssget f来使用。有二个选集ss1(右下点->左下点)物件数M及ss2(右下点->右上点)物件数N。
2.ssget f选择时已有方向,这时选完的物件顺序ss1与ss2已有相对应的顺序。
3.输入需要的第一组线倒圆角半径 R1。
4.比较物件数MIN(M,N)做为重复的次数。
5.分别重复计算ss1、ss2的第一条与第二条直线的间距,X1、Y1及第二条与第三条直线间距X2、Y2
  依此类推。
6.用fillet执行第一组线,倒圆角半径R1,连接成多义线,第二组线倒圆角半径R2=R1+MIN(X1,Y1)
  或R2=R1+MAX(X1,Y1)依个人需求决定。 用fillet执行第二组线,倒圆角半径R2连接成多义线。
  ...依此类推。

评分

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

查看全部评分

发表于 2013-9-16 07:41 来自手机 | 显示全部楼层
通过栏选的方式,分两组,进行倒角。我已经发过程序了。可以搜索下。

点评

栏选的容易,框选的有点....  发表于 2013-9-16 08:35

评分

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

查看全部评分

发表于 2013-9-16 14:23 | 显示全部楼层
本帖最后由 fl202 于 2013-9-16 15:37 编辑

写的长了点,思路:根据是否相交分成两个选择集ss2、ss3(根据角度也行,同一个选择集如ss2内稍微不平行的线判断角度就比较麻烦,还是判断交点好些),然后排序,然后倒角。
  1.     (defun midpt (ptx pty / pt)
  2.     (setq pt (list (/ (+ (nth 0 ptx) (nth 0 pty)) 2)  
  3.                       (/ (+ (nth 1 ptx) (nth 1 pty)) 2)  ) )
  4.         pt
  5.        )
  6.    (princ "\n 请选择2组平行直线")
  7.    ;(if
  8.    (setq ss1 nil ss1 (ssget (list (cons 0 "LINE"))))
  9.        ;(progn
  10.         (setq data1 (entget (ssname ss1 0)))
  11.            (setq px1 (cdr (assoc 10 data1)) py1 (cdr (assoc 11 data1)) )
  12.            (setq ang1 (angle px1 py1) ang2 (+ ang1 pi) ang3 (+ ang1 (/ pi 2)) )
  13.            (setq pt1 (midpt px1 py1))
  14.            (setq pt2 (polar pt1 ang3 (* 100 (distance px1 py1)) )  pt5 (polar pt1 (+ ang3 pi) (* 100 (distance px1 py1)) )   )   
  15.          (setq b2 '() b3 '()  i 0 ss2 nil ss3 nil ss2 (ssadd) ss3 (ssadd)  )
  16.    (repeat (sslength ss1)
  17.        (setq en1 (ssname ss1 i))
  18.        (setq data1 (entget en1)  px1 (cdr (assoc 10 data1)) py1 (cdr (assoc 11 data1)) ang4 (angle px1 py1) )
  19.        (setq pt3 (polar pt2 (+ ang4 (/ pi 2)) 100) )
  20.        (setq pt4 (inters px1 py1 pt2 pt3 nil) d1 (distance pt2 pt4)) ;;;(print (list  px1 py1 pt2 pt5 (inters px1 py1 pt2 pt5)))
  21.        (if (inters px1 py1 pt2 pt5)
  22.        (setq b2 (cons (list d1 en1) b2))
  23.        (setq b3 (cons (list d1 en1) b3))  )
  24.        (setq i (1+ i))
  25.        )
  26.        (print (list (length b2) (length b3) ))
  27.     (setq b2 (vl-sort b2  (function (lambda (e1 e2)  (< (car e1) (car e2)) ) ) )  )
  28.     (setq b3 (vl-sort b3  (function (lambda (e1 e2)  (< (car e1) (car e2)) ) ) )  )
  29.    
  30.     (setq en1 (nth 1 (nth 0 b3)))
  31.     (setq px1 (cdr (assoc 10 (entget en1))) py1 (cdr (assoc 11 (entget en1))) )
  32.     (setq pt1 (midpt px1 py1))
  33.     (setq en2 (nth 1 (nth 0 b2)) en3 (nth 1 (nth 1 b2)) )
  34.     (setq ptx2 (cdr (assoc 10 (entget en2))) ptx3 (cdr (assoc 10 (entget en3)))
  35.           pty2 (cdr (assoc 11 (entget en2))) pty3 (cdr (assoc 11 (entget en3)))  
  36.           d1 (distance pt1 (inters px1 px2 ptx2 pty2 nil ))  d2 (distance pt1 (inters px1 px2 ptx3 pty3 nil ))  )
  37.     (if (> d1 d2)
  38.       (setq b2 (vl-sort b2  (function (lambda (e1 e2)  (> (car e1) (car e2)) ) ) )  )
  39.       (princ)
  40.       )
  41.       
  42.     (setq n 0)
  43.     (repeat (length b2)
  44.     (setq en1 (nth 1 (nth n b2)))
  45.     (setq ss2 (ssadd en1 ss2))
  46.     (setq n (1+ n))
  47.     )
  48.       (setq n 0)
  49.     (repeat (length b3)
  50.     (setq en1 (nth 1 (nth n b3)))
  51.     (setq ss3 (ssadd en1 ss3))
  52.     (setq n (1+ n))
  53.     )   
  54.     (command "chprop" ss2 "" "c" 6 "")   
  55.     (setq i 0 r1 50)
  56.     (setq os1 (getvar "osmode"))
  57.     (setvar "osmode" 0)
  58.      (command "fillet" "r" r1)
  59.     (repeat (min (sslength ss2) (sslength ss3))
  60.       (setq en1 (ssname ss2 i) en2 (ssname ss3 i) data1 (entget en1) data2 (entget en2) )
  61.       (setq px1 (cdr (assoc 10 data1))  py1 (cdr (assoc 11 data1))  )
  62.       (setq pt1 (midpt px1 py1))
  63.       (setq px1 (cdr (assoc 10 data2))  py1 (cdr (assoc 11 data2))  )
  64.       (setq pt2 (midpt px1 py1))
  65.       (command "fillet"  (list en1 pt1) (list en2 pt2) )
  66.       (setq i (1+ i))
  67.       )   
  68.     (setvar "osmode" os1)

点评

大致看了下,你的这个写的太啰嗦  发表于 2013-9-16 17:52

评分

参与人数 1金钱 +5 收起 理由
【KAIXIN】 + 5 赞一个!才看到呢

查看全部评分

 楼主| 发表于 2013-9-16 16:55 | 显示全部楼层

本帖子中包含更多资源

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

x

点评

怎么没给我奖励分数啊?。。。  发表于 2013-9-16 17:38
发表于 2013-9-16 19:14 | 显示全部楼层
荒野孤行 发表于 2013-9-16 07:41
通过栏选的方式,分两组,进行倒角。我已经发过程序了。可以搜索下。

是不是要这种效果?我只做出来了相交直线倒圆角,不想交的还在思考怎么做。

本帖子中包含更多资源

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

x

点评

论坛应该有现成的  发表于 2013-9-17 09:02
这种也太容易了  发表于 2013-9-17 08:58
发表于 2013-11-17 00:36 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-17 00:39 编辑

一次性全选,
把顶点数多于2个的作为依据,按其余线到它的距离排序
把距离大致相同(图上看是象是相同)的求交点p,再按设定的倒角大小(或者用第一根线的倒角)计算它们的端点p1和p2,这样算出来的点都应该在线外,用计算出的点求它到所涉及到的这两根线的最近点p1-1和P2-1(其实就是它的端点之一)可以确定各自对应哪一根线
接下来把其对应的端点换成p1,p2加上线段原来的端点重新绘制,删掉这两根线(也可以往其中一条线中加入P1,P2及另一条线的端点,这样可以只删除一条线和修改一条线)
发表于 2014-9-20 21:09 | 显示全部楼层
fl202 发表于 2013-9-16 14:23
写的长了点,思路:根据是否相交分成两个选择集ss2、ss3(根据角度也行,同一个选择集如ss2内稍微不平行的线 ...

老大,我怎么用不起啊?  (5 5) ; 错误: 参数类型错误: 二维/三维点: nil
发表于 2018-4-4 10:14 | 显示全部楼层
这两天正需要这个,进来研究下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 08:26 , Processed in 0.288883 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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