newer 发表于 2025-1-23 18:03:38

(XDGE几何库应用)圆弧数据转POLYLINE ARC数据

本帖最后由 newer 于 2025-1-23 18:05 编辑



XDRX API 有个函数 xdrx-geom-arc2poly 函数,可以将圆弧信息,转成POLYLINE ARC数据 (起始点bulge 终止点)

圆弧数据为 xdrx-geom-3p2arc 函数返回数据



Command: (setq arcinfo (xdrx-geom-3p2arc p1 pin p2))
(T (2664.19 1592.85 0.0) 398.517 1.11415 4.90935)



上面数据含义 (逆时针 圆心 半径 起始角 终止角)

通过 xdrx-geom-arc2poly 可以得到POLYLINE ARC的: 起点 bulge 终点



Command: (setq polyinfo (xdrx-geom-arc2poly arcinfo))
((2839.92 1950.53 0.0) 1.39484 (2742.18 1202.03 0.0))



下面通过XDGE几何库,写一个LISP模拟函数xdrx-geom-arc2poly



(defun xd::geom:arc2poly
       (clockwise center radius startang endang / garc pts ret)
;; 定义一个函数 `xd::geom:arc2poly`,接受以下参数:
;; - clockwise: 布尔值,表示圆弧是否为顺时针方向
;; - center: 圆弧的中心点
;; - radius: 圆弧的半径
;; - startang: 圆弧的起始角度
;; - endang: 圆弧的终止角度
;; 局部变量:
;; - garc: 用于存储生成的圆弧对象
;; - pts: 用于存储圆弧的采样点
;; - ret: 用于存储最终返回的结果

;; 尝试构造一个逆时针圆弧几何对象 `garc`
(if (setq garc (xdge::constructor
                   "kCircArc2d"      center radius startang endang nil)
      )
    ;; 如果圆弧对象构造成功,则执行以下代码
    (progn
      ;; 获取圆弧的采样点,采样点数为2
      (setq pts (xdrx-curve-getsamplepoints garc 2))

      ;; 如果圆弧不是顺时针方向
      (if (not clockwise)
      (progn
          ;; 释放之前构造的圆弧对象
          (xdge::free garc)
          ;; 重新构造一个圆弧对象,使用反转后的采样点
          (setq garc (xdge::constructor "kCircArc2d" (reverse pts)))
      )
      )

      ;; 获取圆弧的起始点、凸度和终止点,并存储在 `ret` 中
      (setq ret      (xdge::getpropertyvalue
                  garc
                  "startpoint"
                  "bulge"
                  "endpoint"
                )
            ret      (list (list (car #startpoint) (cadr #startpoint) 0.0)
                      #bulge
                      (list (car #endpoint) (cadr #endpoint) 0.0)
                )
      )

      ;; 释放圆弧对象
      (xdge::free garc)
    )
)
;; 返回结果 `ret`
ret
)





Command: (apply 'xd::geom:arc2poly a)
((2839.92 1950.53 0.0) 1.39484 (2742.18 1202.03 0.0))


页: [1]
查看完整版本: (XDGE几何库应用)圆弧数据转POLYLINE ARC数据