我的变体、维护层、线型、颜色、宽度等。
也适用于闭合多段线和三维旋转多段线。
- (defun C:BreakPoly ( / *error* el en end head i ss start tail)
- (or acDoc (setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
- (vla-startundomark acDoc)
- (defun *error* (m)
- (and m (not (wcmatch (strcase m) "*CANCEL*,*QUIT*,*EXIT*")) (princ (strcat "\nError: " m)))
- (vla-endundomark acDoc)
- (princ)
- )
-
- (if
- (setq ss (ssget '((0 . "LWPOLYLINE"))))
- (repeat (setq i (sslength ss))
- (setq en (ssname ss (setq i (1- i)))
- el (entget en)
- head (vl-remove-if-not '(lambda (x) (vl-position (car x) '(0 100 67 410 8 62 6 370 43 38 39))) el)
- head (append head (list '(90 . 2) (cons 70 (logand (cdr (assoc 70 el)) 128))))
- tail (member (assoc 10 el) el)
- start (if (= (logand (cdr (assoc 70 el)) 1) 1) (car tail))
- end (append '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0)) (list (assoc 210 el)))
- )
- (repeat (1- (cdr (assoc 90 el)))
- (entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4 5)) end))
- (setq tail (member (assoc 10 (cdr tail)) (cdr tail)))
- )
- (if start
- (entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4)) (list start) end))
- )
- (entdel en)
- )
- )
- (vla-endundomark acDoc)
- (princ)
- )
|