本帖最后由 Gu_xl 于 2015-4-26 20:58 编辑
加载XLRX_API:
语法: (XLRX-Curve-getClosestPointTo curve1 curve1 [tol]) 功能:返回曲线1上离指定曲线2最近的点(在 WCS 上)参数: curve1 曲线1图元名 curve2 曲线2图元名 tol 容差值 返回值: 如果成功则返回三维点列表,'(曲线1上一点 曲线2上一点) ,否则返回 nil
语法: (XLRX-Curve-distanceTo curve1 curve1 [tol]) 功能:返回曲线上离指定点最近的距离(在 WCS 上)参数: curve1 曲线1图元名curve2 曲线2图元名 tol 容差值 返回值: 如果成功则返回实数,否则返回 nil
Lisp版本代码如下:
 - (defun c:tt (/ CURVE1 CURVE2 D L1 L2 OBJ1 OBJ2 DATA P L P1 P2)
- (setq curve1 (car (entsel "\n第一条曲线:"))
- curve2 (car (entsel "\n第二条曲线:"))
- )
- (if (vlax-invoke
- (vlax-ename->vla-object curve1)
- 'IntersectWith
- (vlax-ename->vla-object curve2)
- acExtendNone)
- (princ "\n曲线相交")
- (progn
- (setq d (getreal "\n分割长度<0.10>:"))
- (if (null d)
- (setq d 0.1))
-
- (setq l1 (vlax-curve-getDistAtParam curve1 (vlax-curve-getEndParam curve1))
- l2 (vlax-curve-getDistAtParam curve2 (vlax-curve-getEndParam curve2))
- )
- (if (< l1 l2) (setq obj1 curve1 obj2 curve2) (setq obj1 curve2 obj2 curve1))
- (setq data (list (setq p (vlax-curve-getStartPoint obj1)) (vlax-curve-getClosestPointTo obj2 p)))
- (setq l d)
- (while (< l (min l1 l2))
- (setq p1 (vlax-curve-getpointatdist obj1 l)
- p2 (vlax-curve-getClosestPointTo obj2 p1)
- )
- (if (< (distance p1 p2) (apply 'distance data))
- (setq data (list p1 p2))
- )
- (setq l (+ l d))
- )
- (setq p1 (vlax-curve-getEndPoint obj1)
- p2 (vlax-curve-getClosestPointTo obj2 p1)
- )
- (if (< (distance p1 p2) (apply 'distance data))
- (setq data (list p1 p2))
- )
- (entmake (list '(0 . "line")
- '(100 . "AcDbEntity")
- '(62 . 1)
- (cons 10 (car data))
- (cons 11 (cadr data))
- )
- )
-
- )
-
- )
- (princ)
- )
|