找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 469|回复: 0

[每日一码] (XDGE几何库应用)圆弧数据转POLYLINE ARC数据

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2025-1-23 18:03:38 | 显示全部楼层 |阅读模式

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

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

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



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

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

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



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

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

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



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

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

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

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

  30.       ;; 获取圆弧的起始点、凸度和终止点,并存储在 `ret` 中
  31.       (setq ret        (xdge::getpropertyvalue
  32.                   garc
  33.                   "startpoint"
  34.                   "bulge"
  35.                   "endpoint"
  36.                 )
  37.             ret        (list (list (car #startpoint) (cadr #startpoint) 0.0)
  38.                       #bulge
  39.                       (list (car #endpoint) (cadr #endpoint) 0.0)
  40.                 )
  41.       )

  42.       ;; 释放圆弧对象
  43.       (xdge::free garc)
  44.     )
  45.   )
  46.   ;; 返回结果 `ret`
  47.   ret
  48. )



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


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

本版积分规则

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

GMT+8, 2025-4-25 03:31 , Processed in 0.420217 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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