仅支持闭合多段线
 - (defun PLConvert (PLEntName / PtsLst0 PtsLst1 MinLeng LinLeng PtsLst2 Pnt0 Pnt1 Pnt2 Pnt3 Pnt4 Pnt5)
- (setq PtsLst0 (mapcar 'cdr
- (vl-remove-if
- '(lambda (x) (/= 10 (car x)))
- (entget PLEntName)
- )
- )
- PtsLst1 (append (cdr PtsLst0) (list (car PtsLst0)))
- MinLeng (apply '+ (mapcar 'distance PtsLst1 PtsLst0))
- PtsLst1 (mapcar 'list PtsLst0 PtsLst1)
- )
- (foreach x PtsLst1
- (if (< (setq LinLeng (apply 'distance x)) MinLeng)
- (setq MinLeng LinLeng
- PtsLst2 x
- )
- )
- )
- (setq Pnt0 (car PtsLst2)
- Pnt1 (cadr PtsLst2)
- Pnt2 (mapcar '* (mapcar '+ Pnt0 Pnt1) '(0.5 0.5 0.5))
- PtsLst0 (append (member Pnt0 PtsLst0)
- (reverse (cdr (member Pnt0 (reverse PtsLst0))))
- )
- PtsLst0 (append (cddr PtsLst0) PtsLst2)
- Pnt3 Pnt1
- PtsLst1 (list Pnt2)
- )
- (while (not (equal Pnt3 Pnt0))
- (setq Pnt4 (car PtsLst0)
- Pnt5 (cadr PtsLst0)
- Pnt2 (polar Pnt2 (angle Pnt3 Pnt4) (distance Pnt3 Pnt4))
- )
- (if (vlax-curve-getParamAtPoint PLEntName Pnt2)
- (setq Pnt2 (polar Pnt2 (angle Pnt4 Pnt3) (* MinLeng 0.5))
- PtsLst1 (cons Pnt2 PtsLst1)
- Pnt2 (polar Pnt2 (angle Pnt5 Pnt4) (* MinLeng 0.5))
- PtsLst1 (cons Pnt2 PtsLst1)
- )
- (setq Pnt2 (polar Pnt2 (angle Pnt3 Pnt4) (* MinLeng 0.5))
- PtsLst1 (cons Pnt2 PtsLst1)
- Pnt2 (polar Pnt2 (angle Pnt4 Pnt5) (* MinLeng 0.5))
- PtsLst1 (cons Pnt2 PtsLst1)
- )
- )
- (setq Pnt3 Pnt4
- PtsLst0 (cdr PtsLst0)
- )
- )
- (setq PtsLst1 (reverse PtsLst1)
- PtsLst1 (mapcar '(lambda (x) (cons 10 x)) PtsLst1)
- PtsLst2 (length PtsLst1)
- PtsLst1 (mapcar '(lambda (x) (list (cons 40 MinLeng) (cons 41 MinLeng) x)) PtsLst1)
- PtsLst1 (cddr (apply 'append PtsLst1))
- )
- (entmake
- (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "AcDbPolyline") (8 . "0") (62 . 6) (70 . 0))
- (list (cons 90 PtsLst2))
- PtsLst1
- )
- )
- )
|