乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 59|回复: 2

[编程交流] 一对多圆角

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:48:14 | 显示全部楼层 |阅读模式
我知道这个问题的一个版本已经出现了很多次,但我还没有找到一个lisp来将多条直线圆角到一条直线上。e、 g.电气图纸中电缆分支的电线。有人有这样的东西吗?我知道我可以用圆角中的多个特征来做,但我做了很多线。
204816bmw1zb879kn57x1z.png
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:21:52 | 显示全部楼层
你可以排列这些东西。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 21:15:04 | 显示全部楼层
或者,如果你的线不平行,并交叉主线,尝试这个Lisp程序。。。
 
  1. (defun c:filletlines ( / 3d2d v^v unit acos angle3d marc ss i li lil lixl lill p pl ml lilr sp ep p1 p2 rlpl r gr p a ip d v aep1 aep2 li cp dd arc arcl x )
  2. (vl-load-com)
  3. (defun 3d2d ( p )
  4.    (mapcar '+ '(0.0 0.0) p)
  5. )
  6. (defun v^v ( u v )
  7.    (mapcar '(lambda ( s1 s2 a b ) (+ ((eval s1) (* (nth a u) (nth b v))) ((eval s2) (* (nth a v) (nth b u))))) '(+ - +) '(- + -) '(1 0 0) '(2 2 1))
  8. )
  9. (defun unit ( v )
  10.    (mapcar '(lambda ( x ) (/ x (distance '(0.0 0.0 0.0) v))) v)
  11. )
  12. (defun acos ( x )
  13.    (cond
  14.      ((equal x 1.0 1e- 0.0)
  15.      ((equal x -1.0 1e- pi)
  16.      ((equal x 0.0 1e- (/ pi 2.0))
  17.      ((equal x -0.0 1e- (* 3.0 (/ pi 2.0)))
  18.      ((atan (/ (sqrt (- 1.0 (* x x))) x)))
  19.    )
  20. )
  21. (defun angle3d ( p1 por p2 / vec1 vec2 dd ang )
  22.    (setq vec1 (unit (mapcar '- p1 por))
  23.          vec2 (unit (mapcar '- p2 por))
  24.          dd (distance vec1 vec2)
  25.          ang (acos (- 1.0 (/ (expt dd 2) 2.0)))
  26.    )
  27.    (if (minusp ang) (+ ang pi) ang)
  28. )
  29. (defun marc ( c p1 p2 / dxf10 dxf40 dxf210 dxf50 dxf51 uz )
  30.    (setq dxf10 (trans c 0 (setq uz (v^v (mapcar '- p1 c) (mapcar '- p2 c)))))
  31.    (setq dxf40 (distance c p1))
  32.    (setq dxf210 (unit uz))
  33.    (setq dxf50 (angle dxf10 (trans p1 0 uz)))
  34.    (setq dxf51 (angle dxf10 (trans p2 0 uz)))
  35.    (entmakex (list '(0 . "ARC") '(100 . "AcDbEntity") '(100 . "AcDbCircle") (cons 10 dxf10) (cons 40 dxf40) (cons 210 dxf210) '(100 . "AcDbArc") (cons 50 dxf50) (cons 51 dxf51)))
  36. )
  37. (prompt "\nSelect intersecting lines...")
  38. (setq ss (ssget "_:L" '((0 . "LINE"))))
  39. (while (not ss)
  40.    (prompt "\nEmpty sel.set... Please select intersecting lines again...")
  41.    (setq ss (ssget "_:L" '((0 . "LINE"))))
  42. )
  43. (repeat (setq i (sslength ss))
  44.    (setq li (ssname ss (setq i (1- i))))
  45.    (setq lil (cons li lil))
  46.    (setq lixl (cons (entget li) lixl))
  47. )
  48. (setq lill lil)
  49. (foreach li1 lil
  50.    (setq lill (vl-remove li1 lill))
  51.    (foreach li2 lill
  52.      (if (setq p (vlax-invoke (vlax-ename->vla-object li1) 'intersectwith (vlax-ename->vla-object li2) acextendnone))
  53.        (setq pl (cons p pl))
  54.      )
  55.    )
  56. )
  57. (if (null pl)
  58.    (progn
  59.      (prompt "\nLines don't intersect... Restart routine and choose lines that intersect each other... Quitting...")
  60.      (exit)
  61.    )
  62.    (vl-some '(lambda ( x ) (if (vl-every '(lambda ( p ) (vlax-curve-getparamatpoint x p)) pl) (setq ml x))) lil)
  63. )
  64. (setq lilr (vl-remove ml lil))
  65. (setq sp (trans (cdr (assoc 10 (entget ml))) 0 1) ep (trans (cdr (assoc 11 (entget ml))) 0 1))
  66. (foreach li lilr
  67.    (setq p1 (trans (cdr (assoc 10 (entget li))) 0 1) p2 (trans (cdr (assoc 11 (entget li))) 0 1))
  68.    (setq rlpl (cons (list li (vl-some '(lambda ( p ) (if (vlax-curve-getparamatpoint li p) p nil)) pl) (list p1 p2)) rlpl))
  69. )
  70. (initget 7)
  71. (setq r (getdist "\nPick or specify fillet radius : "))
  72. (foreach rlp rlpl
  73.    (if (eq (cadr rlp) nil) (setq rlpl (vl-remove rlp rlpl)))
  74. )
  75. (prompt "\nMove mouse around selected lines and when desired fillets are displayed click mouse button to accept...")
  76. (while (and (/= (car (setq gr (grread t))) 3) (/= (car gr) 11) (/= (car gr) 25))
  77.    (if (< (distance (setq p (cadr gr)) sp) (distance p ep))
  78.      (progn
  79.        (if (null x)
  80.          (progn
  81.            (if arcl
  82.              (progn
  83.                (mapcar 'entdel arcl)
  84.                (setq arcl nil)
  85.              )
  86.            )
  87.            (mapcar '(lambda ( x ) (entmod x)) lixl)
  88.            (setq rlpl (vl-sort rlpl '(lambda ( a b ) (< (distance (cadr a) (cdr (assoc 10 (entget ml)))) (distance (cadr b) (cdr (assoc 10 (entget ml))))))))
  89.            (foreach rlp rlpl
  90.              (if (or
  91.                    (equal (distance (3d2d (cadr (caddr rlp))) (setq ip (inters (3d2d (cadr (caddr rlp))) (3d2d p) (3d2d sp) (3d2d ep) nil))) (+ (distance (3d2d (cadr (caddr rlp))) (3d2d p)) (distance (3d2d p) ip)) 1e-6)
  92.                    (equal (distance (3d2d (cadr (caddr rlp))) (setq ip (inters (3d2d (cadr (caddr rlp))) (3d2d p) (3d2d sp) (3d2d ep) nil))) (+ (distance (3d2d (cadr (caddr rlp))) (3d2d p)) (distance (3d2d (cadr (caddr rlp))) ip)) 1e-6)
  93.                  )
  94.                (progn
  95.                  (setq a (angle3d (cdr (assoc 10 (entget ml))) (cadr rlp) (cdr (assoc 11 (entget (car rlp))))))
  96.                  (setq d (/ r (/ (sin (/ a 2.0)) (cos (/ a 2.0)))))
  97.                  (setq v (unit (mapcar '- (cdr (assoc 11 (entget (car rlp)))) (cdr (assoc 10 (entget (car rlp)))))))
  98.                  (entmod (subst (cons 10 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d)))) (assoc 10 (entget (car rlp))) (entget (car rlp))))
  99.                  (setq aep1 (cdr (assoc 10 (entget (car rlp)))))
  100.                  (setq v (unit (mapcar '- (cdr (assoc 10 (entget ml))) (cdr (assoc 11 (entget ml))))))
  101.                  (setq aep2 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d))))
  102.                  (setq li (entmakex (list '(0 . "LINE") (cons 10 (cadr rlp)) (cons 11 (mapcar '/ (mapcar '+ aep1 aep2) (list 2.0 2.0 2.0))))))
  103.                  (setq cp (vlax-curve-getclosestpointto li aep1 t))
  104.                  (setq v (unit (mapcar '- (cadr rlp) cp)))
  105.                  (setq cp (mapcar '+ (cadr rlp) (list (* (- (car v)) (setq dd (sqrt (+ (expt d 2) (expt r 2))))) (* (- (cadr v)) dd) (* (- (caddr v)) dd))))
  106.                  (setq arc (marc cp aep1 aep2))
  107.                  (setq arcl (cons arc arcl))
  108.                  (entdel li)
  109.                )
  110.                (progn
  111.                  (setq a (angle3d (cdr (assoc 10 (entget ml))) (cadr rlp) (cdr (assoc 10 (entget (car rlp))))))
  112.                  (setq d (/ r (/ (sin (/ a 2.0)) (cos (/ a 2.0)))))
  113.                  (setq v (unit (mapcar '- (cdr (assoc 10 (entget (car rlp)))) (cdr (assoc 11 (entget (car rlp)))))))
  114.                  (entmod (subst (cons 11 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d)))) (assoc 11 (entget (car rlp))) (entget (car rlp))))
  115.                  (setq aep1 (cdr (assoc 11 (entget (car rlp)))))
  116.                  (setq v (unit (mapcar '- (cdr (assoc 10 (entget ml))) (cdr (assoc 11 (entget ml))))))
  117.                  (setq aep2 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d))))
  118.                  (setq li (entmakex (list '(0 . "LINE") (cons 10 (cadr rlp)) (cons 11 (mapcar '/ (mapcar '+ aep1 aep2) (list 2.0 2.0 2.0))))))
  119.                  (setq cp (vlax-curve-getclosestpointto li aep1 t))
  120.                  (setq v (unit (mapcar '- (cadr rlp) cp)))
  121.                  (setq cp (mapcar '+ (cadr rlp) (list (* (- (car v)) (setq dd (sqrt (+ (expt d 2) (expt r 2))))) (* (- (cadr v)) dd) (* (- (caddr v)) dd))))
  122.                  (setq arc (marc cp aep1 aep2))
  123.                  (setq arcl (cons arc arcl))
  124.                  (entdel li)
  125.                )
  126.              )
  127.            )
  128.            (entmod (subst (cons 11 aep2) (assoc 11 (entget ml)) (entget ml)))
  129.            (setq x t)
  130.          )
  131.        )
  132.      )
  133.      (progn
  134.        (if x
  135.          (progn
  136.            (if arcl
  137.              (progn
  138.                (mapcar 'entdel arcl)
  139.                (setq arcl nil)
  140.              )
  141.            )
  142.            (mapcar '(lambda ( x ) (entmod x)) lixl)
  143.            (setq rlpl (vl-sort rlpl '(lambda ( a b ) (< (distance (cadr a) (cdr (assoc 11 (entget ml)))) (distance (cadr b) (cdr (assoc 11 (entget ml))))))))
  144.            (foreach rlp rlpl
  145.              (if (or
  146.                    (equal (distance (3d2d (cadr (caddr rlp))) (setq ip (inters (3d2d (cadr (caddr rlp))) (3d2d p) (3d2d sp) (3d2d ep) nil))) (+ (distance (3d2d (cadr (caddr rlp))) (3d2d p)) (distance (3d2d p) ip)) 1e-6)
  147.                    (equal (distance (3d2d (cadr (caddr rlp))) (setq ip (inters (3d2d (cadr (caddr rlp))) (3d2d p) (3d2d sp) (3d2d ep) nil))) (+ (distance (3d2d (cadr (caddr rlp))) (3d2d p)) (distance (3d2d (cadr (caddr rlp))) ip)) 1e-6)
  148.                  )
  149.                (progn
  150.                  (setq a (angle3d (cdr (assoc 11 (entget ml))) (cadr rlp) (cdr (assoc 11 (entget (car rlp))))))
  151.                  (setq d (/ r (/ (sin (/ a 2.0)) (cos (/ a 2.0)))))
  152.                  (setq v (unit (mapcar '- (cdr (assoc 11 (entget (car rlp)))) (cdr (assoc 10 (entget (car rlp)))))))
  153.                  (entmod (subst (cons 10 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d)))) (assoc 10 (entget (car rlp))) (entget (car rlp))))
  154.                  (setq aep1 (cdr (assoc 10 (entget (car rlp)))))
  155.                  (setq v (unit (mapcar '- (cdr (assoc 11 (entget ml))) (cdr (assoc 10 (entget ml))))))
  156.                  (setq aep2 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d))))
  157.                  (setq li (entmakex (list '(0 . "LINE") (cons 10 (cadr rlp)) (cons 11 (mapcar '/ (mapcar '+ aep1 aep2) (list 2.0 2.0 2.0))))))
  158.                  (setq cp (vlax-curve-getclosestpointto li aep1 t))
  159.                  (setq v (unit (mapcar '- (cadr rlp) cp)))
  160.                  (setq cp (mapcar '+ (cadr rlp) (list (* (- (car v)) (setq dd (sqrt (+ (expt d 2) (expt r 2))))) (* (- (cadr v)) dd) (* (- (caddr v)) dd))))
  161.                  (setq arc (marc cp aep1 aep2))
  162.                  (setq arcl (cons arc arcl))
  163.                  (entdel li)
  164.                )
  165.                (progn
  166.                  (setq a (angle3d (cdr (assoc 11 (entget ml))) (cadr rlp) (cdr (assoc 10 (entget (car rlp))))))
  167.                  (setq d (/ r (/ (sin (/ a 2.0)) (cos (/ a 2.0)))))
  168.                  (setq v (unit (mapcar '- (cdr (assoc 10 (entget (car rlp)))) (cdr (assoc 11 (entget (car rlp)))))))
  169.                  (entmod (subst (cons 11 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d)))) (assoc 11 (entget (car rlp))) (entget (car rlp))))
  170.                  (setq aep1 (cdr (assoc 11 (entget (car rlp)))))
  171.                  (setq v (unit (mapcar '- (cdr (assoc 11 (entget ml))) (cdr (assoc 10 (entget ml))))))
  172.                  (setq aep2 (mapcar '+ (cadr rlp) (list (* (car v) d) (* (cadr v) d) (* (caddr v) d))))
  173.                  (setq li (entmakex (list '(0 . "LINE") (cons 10 (cadr rlp)) (cons 11 (mapcar '/ (mapcar '+ aep1 aep2) (list 2.0 2.0 2.0))))))
  174.                  (setq cp (vlax-curve-getclosestpointto li aep1 t))
  175.                  (setq v (unit (mapcar '- (cadr rlp) cp)))
  176.                  (setq cp (mapcar '+ (cadr rlp) (list (* (- (car v)) (setq dd (sqrt (+ (expt d 2) (expt r 2))))) (* (- (cadr v)) dd) (* (- (caddr v)) dd))))
  177.                  (setq arc (marc cp aep1 aep2))
  178.                  (setq arcl (cons arc arcl))
  179.                  (entdel li)
  180.                )
  181.              )
  182.            )
  183.            (entmod (subst (cons 10 aep2) (assoc 10 (entget ml)) (entget ml)))
  184.            (setq x nil)
  185.          )
  186.        )
  187.      )
  188.    )
  189. )
  190. (princ)
  191. )
HTH,M.R。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:23 , Processed in 0.435663 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表