先假设多段线不自交
 - (defun intersectPts (vlaobj1 vlaobj2 / ptsVar ptsArray value point)
- (setq ptsVar (vla-intersectwith vlaobj1 vlaobj2 acExtendNone)
- ptsArray (vlax-variant-value ptsVar)
- ptsList (vl-catch-all-apply 'vlax-safeArray->list (list ptsArray))
- value nil
- )
- (if (vl-catch-all-error-p ptsList)
- (setq ptsList nil)
- )
- (while ptsList
- (setq point (list (car ptsList) (cadr ptsList) (caddr ptsList))
- value (append value (list point))
- ptsList (cdddr ptsList)
- )
- )
- value
- )
- (defun c:tt (/ PLEname0 PLEname1 PntLst PrmLst0 PrmLst1 PntLst0 PntLst1 ClosedArea SumArea)
- (and
- (setq PLEname0 (car (entsel)))
- (setq PLEname1 (car (entsel)))
- (> (length (setq PntLst (intersectPts (vlax-ename->vla-object PLEname0) (vlax-ename->vla-object PLEname1)))) 1)
- (progn
- (setq PrmLst0 (mapcar (function (lambda (x) (vlax-curve-getparamatpoint PLEname0 x))) PntLst)
- PrmLst0 (mapcar (function (lambda (x) (* x 0.5))) (mapcar '+ PrmLst0 (cdr PrmLst0)))
- PrmLst1 (mapcar (function (lambda (x) (vlax-curve-getparamatpoint PLEname1 x))) PntLst)
- PrmLst1 (mapcar (function (lambda (x) (* x 0.5))) (mapcar '+ PrmLst1 (cdr PrmLst1)))
- PntLst0 (mapcar (function (lambda (x) (vlax-curve-getpointatparam PLEname0 x))) PrmLst0)
- PntLst1 (mapcar (function (lambda (x) (vlax-curve-getpointatparam PLEname1 x))) PrmLst1)
- PntLst (mapcar (function (lambda (x y) (mapcar '* (mapcar '+ x y) '(0.5 0.5 0.5)))) PntLst0 PntLst1)
- SumArea 0.0
- )
- (foreach Item PntLst
- (setq ClosedArea (bpoly Item)
- SumArea (+ SumArea (vlax-curve-getarea ClosedArea))
- )
- (entdel ClosedArea)
- )
- (princ SumArea)
- )
- )
- (princ)
- )
|