本帖最后由 llsheng_73 于 2025-11-3 13:53 编辑
取每条线的(起点 第二点)和(终点、倒数第二点)组成表,对每四个点进行共线检查,如果起点与终点都在(第二点、倒数第二点)所在直线段内,则连接(起点 终点),则达到楼主需求
 - (defun PToLn(p p1 p2);;;点p到p1,p2所在直线分量
- (trans(mapcar'- p1 p) 0 (mapcar'- p1 p2)))
- (defun s2e(s)
- (vl-remove'nil(mapcar'(lambda(x)(if(=(type(cadr x))'ename)(cadr x)))(ssnamex s))))
- (defun c:tt(/ s p p1)
- (setq s(apply'append(mapcar(function(lambda(x / n)(setq n(vlax-curve-getendparam x))
- (list(list(vlax-curve-getpointatparam x 0)(vlax-curve-getpointatparam x 1))
- (list(vlax-curve-getpointatparam x n)(vlax-curve-getpointatparam x(1- n))))))
- (s2e(ssget'((0 . "lwpolyline")(-4 . "<not")(-4 . "&")(70 . 1)(-4 . "not>")))))))
- (while(setq p(car s)s(cdr s))
- (if(vl-some(function(lambda(x / d a b)
- (and(not(equal p(reverse x)1e-5))
- (setq d(distance(cadr p)(cadr x))
- a(PToLn(car p)(cadr p)(cadr x))
- b(PToLn(car x)(cadr x)(cadr p)))
- (equal(car a)0 1e-5)
- (equal(car b)0 1e-5)
- (< 0(caddr a)d)
- (< 0(caddr b)d)
- (setq p1 x))))s)
- (entmakex(mapcar'cons'(0 100 100 62 90 10 10)(list"LWPOLYLINE""AcDbEntity""AcDbPolyline"1 2(car p)(car p1)))))))
|