
- ;;适用 AutoCAD 2006 下的 Pline 去除重复点及"瘦身"程序
- ;;利用 Join 命令和 Pedit 组合达到去除重复点及合并线段
- ;;对伪闭合线可以处理
- ;;注意: 对含宽度的Pline、拟合的Pline处理后会变形
- (defun xdl-Clearcset (/ cset)
- (if (not (vl-catch-all-error-p
- (setq cset
- (vl-catch-all-apply
- 'vla-item
- (list
- (vla-get-selectionsets
- (vla-get-activedocument (vlax-get-acad-object)) ;_
- )
- "CURRENT"
- )
- )
- )
- )
- )
- (vla-delete cset)
- )
- (princ)
- )
- (defun c:clwpl (/ ss obj el el1 el2 a l)
- (xdl-clearcset)
- (if (setq ss (ssget '((0 . "lwpolyline"))))
- (progn
- (setvar "cmdecho" 0)
- (setvar "peditaccept" 1)
- (command ".undo" "be")
- (vlax-for obj (vla-get-activeselectionset
- (vla-get-activedocument (vlax-get-acad-object))
- )
- (setq el (mapcar 'vlax-vla-object->ename
- (safearray-value (variant-value (vla-explode obj)))
- )
- el1 el
- l (length el)
- )
- (repeat l
- (setq a (car el1)
- el2 (vl-remove-if
- '(lambda (x) (vlax-erased-p x))
- (cdr el1)
- )
- el1 (cdr el1)
- )
- (if (and el2
- (not (vlax-erased-p a))
- )
- (progn
- (command ".join" a)
- (mapcar 'command el2)
- (command "")
- )
- )
- )
- (command ".pedit" "m")
- (mapcar 'command
- (vl-remove-if
- '(lambda (x) (vlax-erased-p x))
- el
- )
- )
- (command "")
- (command "j")
- (command "0")
- (command "")
- )
- (setvar "peditaccept" 0)
- (command ".erase" ss "")
- (command ".undo" "end")
- )
- )
- (princ)
- )
|