本帖最后由 dcl1214 于 2020-2-6 16:06 编辑
不知道您的最短路径是否允许干涉存在,如果不允许干涉存在就不要往下看了,以下是我随便写的几句代码
 - (setq ss (ssget (list (cons 0 "point"))))
- (setq ents (ssToentlst ss))
- (setq jbs (mapcar (function (lambda (a) (cdr (assoc 5 (entget a)))))
- ents
- )
- )
- (setq jbs-2 ($列表两两组合$ jbs))
- (setq
- jbs-2-L
- (apply 'append
- (mapcar
- (function
- (lambda (a / l)
- (setq
- l (distance
- (cdr (assoc 10 (entget (handent (car a)))))
- (cdr (assoc 10 (entget (handent (cadr a)))))
- )
- )
- (list (reverse (cons l (reverse a)))
- (reverse (cons l a))
- )
- )
- )
- jbs-2
- )
- )
- )
- (SETQ LJS NIL)
- (setq sart (cdr (assoc 5 (entget (car (entsel))))))
- (WHILE
- (SETQ DATA (VL-REMOVE-IF-NOT
- (FUNCTION (LAMBDA (A) (= (CAR A) sart)))
- jbs-2-L
- )
- )
- (SETQ DATA (VL-REMOVE-IF
- (FUNCTION (LAMBDA (A) (MEMBER (CADR A) LJS)))
- DATA
- )
- )
- (SETQ
- N (CAR
- (VL-SORT DATA
- (FUNCTION (LAMBDA (E1 E2) (< (NTH 2 E1) (NTH 2 E2))))
- )
- )
- )
- (SETQ jbs-2-L (VL-REMOVE-IF
- (FUNCTION (LAMBDA (A) (= (CAR A) SART)))
- jbs-2-L
- )
- )
- (SETQ LJS (CONS sart LJS))
- (SET 'SART (CADR N))
- )
- (SETQ LJS (REVERSE LJS))
- (MAPCAR (FUNCTION
- (LAMBDA (A B)
- (vla-addLine
- (vla-Get-ModelSpace
- (vla-get-ActiveDocument
- (vlax-get-acad-object)
- )
- )
- (vlax-3D-Point (cdr (assoc 10 (entget (handent A)))))
- (vlax-3D-Point (cdr (assoc 10 (entget (handent B)))))
- )
- )
- )
- LJS
- (CDR LJS)
- )
如果将起始点设定为中间那个点,结果有点像外凸壳
|