马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 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))
|