本帖最后由 vitalgg 于 2023-7-9 15:54 编辑
- (defun c:tt ()
- (setq pts1 (curve:get-points (car (entsel "第1条曲线"))))
- (setq pts2 (curve:get-points (car (entsel "第2条曲线"))))
- (setq res (list:intersect pts1 pts2))
- ;; 判断 pts2 起点是否在 res内,如果是,则调整 res,
- ;; 然后 测试pts2 的第二点 直到不是为止
- (if (list:member (car pts2) res 0.001)
- (progn
- (setq i 0)
- (while (list:member (nth i pts2) res 0.001)
- (setq res (reverse res))
- (setq res (append (cdr res) (list (car res))))
- (setq res (reverse res))
- (setq i (1+ i))
- )
- )
- )
- ;; 两端点作一直线
- (entity:make-line (car res) (last res))
- )
- 命令: (fun:usage 'list:intersect)
- *** 函数名: list:intersect
- ---------------
- 说明: 求两个列表集合的交集
- 用法: (list:intersect lst1 lst2)
- 参数: 1 lst1 : 列表;2 lst2 : 列表;
- 返回值: List
- 示例:
- 命令: (fun:usage 'curve:get-points)
- *** 函数名: curve:get-points
- ---------------
- 说明: 曲线控制点及端点列表,返回点坐标。
- 用法: (curve:get-points ent)
- 参数: 1 ent : 单个图元;
- 返回值: 点坐标列表
- 示例: (curve:get-points (car (entsel)))
复制代码
多段线起点在重合边界的测试:
|