找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 149|回复: 0

[几何] XD::GEOM:LIST-EXTENTS

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2025-5-11 21:15:00 | 显示全部楼层 |阅读模式

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

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

×

  1. ;; ------------------------------------------------------------------------
  2. ;;; 函数名称 / Function Name: XD::GEOM:LIST-EXTENTS
  3. ;;;
  4. ;;; 【功能说明 / Description】
  5. ;;;     计算点列表的边界范围,返回包含所有点的最小包围盒的两个对角点。
  6. ;;;     输入为二维或三维点列表,自动判断点维度,分别计算最小和最大坐标。
  7. ;;;
  8. ;;; 【参数说明 / Parameters】
  9. ;;;     lst - (list) 点列表,每个点为二维或三维坐标列表,如 ( (x1 y1) (x2 y2) ... ) 或 ( (x1 y1 z1) (x2 y2 z2) ... )
  10. ;;;
  11. ;;; 【返回值 / Return Value】
  12. ;;;     (list) 包含两个点的列表,分别为边界盒的左下角(最小坐标)和右上角(最大坐标)。
  13. ;;;            例如 ((xmin ymin [zmin]) (xmax ymax [zmax]))
  14. ;;;
  15. ;;; 【依赖函数 / Dependencies】
  16. ;;;     - car, cadr, caddr : 访问点坐标分量
  17. ;;;     - apply, min, max : 计算最小值和最大值
  18. ;;;
  19. ;;; 【使用示例 / Example Usage】
  20. ;;;     (XD::GEOM:LIST-EXTENTS '((1 2) (3 4) (0 5)))
  21. ;;;     => ((0 2) (3 5))
  22. ;;;
  23. ;;;     (XD::GEOM:LIST-EXTENTS '((1 2 3) (3 4 5) (0 5 1)))
  24. ;;;     => ((0 2 1) (3 5 5))
  25. ;;;
  26. ;;; 【备注 / Notes】
  27. ;;;     - 如果点为二维,返回二维边界;如果为三维,返回三维边界。
  28. ;;;     - 该函数适用于计算点云或图形对象的包围盒。
  29. ;;;
  30. (defun XD::GEOM:LIST-EXTENTS (lst / lst1 lst2 lst3 a b c p1 p2)
  31.   ;; 提取所有点的第1、2、3坐标分量列表
  32.   (setq lst1 (mapcar 'car lst))
  33.   (setq lst2 (mapcar 'cadr lst))
  34.   (setq lst3 (mapcar 'caddr lst))
  35.   (setq lst nil)
  36.   ;; 判断是否存在第三维坐标(即三维点)
  37.   (if (apply 'and lst3)
  38.     (progn
  39.       ;; 三维点,计算各坐标分量的最小值和最大值
  40.       (setq a (apply 'min lst1))
  41.       (setq b (apply 'min lst2))
  42.       (setq c (apply 'min lst3))
  43.       (setq p1 (list a b c))
  44.       (setq a (apply 'max lst1))
  45.       (setq b (apply 'max lst2))
  46.       (setq c (apply 'max lst3))
  47.       (setq p2 (list a b c))
  48.     )
  49.     (progn
  50.       ;; 二维点,计算X和Y的最小值和最大值
  51.       (setq a (apply 'min lst1))
  52.       (setq b (apply 'min lst2))
  53.       (setq p1 (list a b))
  54.       (setq a (apply 'max lst1))
  55.       (setq b (apply 'max lst2))
  56.       (setq p2 (list a b))
  57.     )
  58.   )
  59.   ;; 返回边界盒的两个对角点
  60.   (list p1 p2)
  61. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-7 06:15 , Processed in 0.152848 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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