设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 43|回复: 0

[每日一码] Bulge to Arc 和 Arc to Bulge

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2021-1-14 12:26:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
  1. ;; Bulge to Arc  -  Lee Mac - mod by M.R.
  2. ;; p1 - start vertex
  3. ;; p2 - end vertex
  4. ;; b  - bulge
  5. ;; Returns: (<center> <start angle> <end angle> <radius>)

  6. (defun LM:Bulge->Arc (p1 p2 b / a c r)
  7.   (setq        a (* 2 (atan (abs b)))
  8.         r (abs (/ (distance p1 p2) 2 (sin a)))
  9.         c (if (minusp b)
  10.             (polar p2 (+ (- (/ pi 2) a) (angle p2 p1)) r)
  11.             (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)
  12.           )
  13.   )
  14.   (list c (angle c p1) (angle c p2) r)
  15. )


  1. ;; Arc to Bulge  -  Lee Mac - mod by M.R.
  2. ;; c     - center
  3. ;; a1,a2 - start, end angle
  4. ;; r     - radius
  5. ;; lw    - LWPOLYLINE ename
  6. ;; Returns: (<vertex> <bulge> <vertex>)

  7. (defun LM:Arc->Bulge (c a1 a2 r lw / data1 data2)

  8.   (if
  9.     (vl-member-if
  10.       '(lambda (x)
  11.          (equal (cdr x) (mapcar '+ '(0.0 0.0) (polar c a2 r)) 3e-2)
  12.        )
  13.       (cdr
  14.         (vl-member-if
  15.           '(lambda (x)
  16.              (equal (cdr x) (mapcar '+ '(0.0 0.0) (polar c a1 r)) 3e-2)
  17.            )
  18.           (entget lw)
  19.         )
  20.       )
  21.     )
  22.      (setq data1
  23.             (vl-member-if
  24.               '(lambda (x)
  25.                  (equal        (cdr x)
  26.                         (mapcar '+ '(0.0 0.0) (polar c a1 r))
  27.                         3e-2
  28.                  )
  29.                )
  30.               (reverse (vl-member-if
  31.                          '(lambda (x)
  32.                             (equal (cdr x)
  33.                                    (mapcar '+ '(0.0 0.0) (polar c a2 r))
  34.                                    3e-2
  35.                             )
  36.                           )
  37.                          (reverse (entget lw))
  38.                        )
  39.               )
  40.             )
  41.      )
  42.      (setq data2
  43.             (vl-member-if
  44.               '(lambda (x)
  45.                  (equal        (cdr x)
  46.                         (mapcar '+ '(0.0 0.0) (polar c a2 r))
  47.                         3e-2
  48.                  )
  49.                )
  50.               (reverse (vl-member-if
  51.                          '(lambda (x)
  52.                             (equal (cdr x)
  53.                                    (mapcar '+ '(0.0 0.0) (polar c a1 r))
  54.                                    3e-2
  55.                             )
  56.                           )
  57.                          (reverse (entget lw))
  58.                        )
  59.               )
  60.             )
  61.      )
  62.   )

  63.   (list
  64.     (if        (and data1 (not data2))
  65.       (polar c a1 r)
  66.       (polar c a2 r)
  67.     )
  68.     (if        (and data1 (not data2))
  69.       (if (minusp (cdr (assoc 42 (reverse data1))))
  70.         (if
  71.           (equal (cdr (assoc 42 (reverse data1)))
  72.                  (- (abs ((lambda (x) (/ (sin x) (cos x)))
  73.                            (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  74.                          )
  75.                     )
  76.                  )
  77.                  3e-2
  78.           )
  79.            (- (abs ((lambda (x) (/ (sin x) (cos x)))
  80.                      (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  81.                    )
  82.               )
  83.            )
  84.            (/ 1
  85.               (- (abs ((lambda (x) (/ (sin x) (cos x)))
  86.                         (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  87.                       )
  88.                  )
  89.               )
  90.            )
  91.         )
  92.         (if (equal (cdr (assoc 42 (reverse data1)))
  93.                    (abs        ((lambda (x) (/ (sin x) (cos x)))
  94.                           (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  95.                         )
  96.                    )
  97.                    3e-2
  98.             )
  99.           (abs ((lambda (x) (/ (sin x) (cos x)))
  100.                  (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  101.                )
  102.           )
  103.           (/ 1
  104.              (abs ((lambda (x) (/ (sin x) (cos x)))
  105.                     (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  106.                   )
  107.              )
  108.           )
  109.         )
  110.       )
  111.       (if (minusp (cdr (assoc 42 (reverse data2))))
  112.         (if
  113.           (equal (cdr (assoc 42 (reverse data2)))
  114.                  (- (abs ((lambda (x) (/ (sin x) (cos x)))
  115.                            (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  116.                          )
  117.                     )
  118.                  )
  119.                  3e-2
  120.           )
  121.            (- (abs ((lambda (x) (/ (sin x) (cos x)))
  122.                      (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  123.                    )
  124.               )
  125.            )
  126.            (/ 1
  127.               (- (abs ((lambda (x) (/ (sin x) (cos x)))
  128.                         (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  129.                       )
  130.                  )
  131.               )
  132.            )
  133.         )
  134.         (if (equal (cdr (assoc 42 (reverse data2)))
  135.                    (abs        ((lambda (x) (/ (sin x) (cos x)))
  136.                           (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  137.                         )
  138.                    )
  139.                    3e-2
  140.             )
  141.           (abs ((lambda (x) (/ (sin x) (cos x)))
  142.                  (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  143.                )
  144.           )
  145.           (/ 1
  146.              (abs ((lambda (x) (/ (sin x) (cos x)))
  147.                     (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0)
  148.                   )
  149.              )
  150.           )
  151.         )
  152.       )
  153.     )
  154. ;;; This should be either equal to abs or (- abs) of ( (lambda ( x ) (/ (sin x) (cos x))) (/ (rem (+ pi pi (- a2 a1)) (+ pi pi)) 4.0) )
  155.     (if        (and data1 (not data2))
  156.       (polar c a2 r)
  157.       (polar c a1 r)
  158.     )
  159.   )
  160. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2021-1-27 18:27 , Processed in 0.105756 second(s), 12 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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