试试这个:
- (defun c:DoItAll ( / *error* _startundo _endundo acdoc cmdecho locked i s )
- (defun *error* ( msg )
- (if cmdecho (setvar 'CMDECHO cmdecho))
- (if acdoc (_EndUndo acdoc))
- (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
- (princ (strcat "\nError: " msg))
- )
- (princ)
- )
- (defun _StartUndo ( doc )
- (_EndUndo doc)
- (vla-StartUndoMark doc)
- )
- (defun _EndUndo ( doc )
- (if (= 8 (logand 8 (getvar 'UNDOCTL)))
- (vla-EndUndoMark doc)
- )
- )
- (setq acdoc (vla-get-activedocument (vlax-get-acad-object))
- cmdecho (getvar 'CMDECHO)
- )
- (_StartUndo acdoc)
- (setvar 'CMDECHO 0)
- ;; Turn on and unlock all Layers
- (vlax-for layer (vla-get-layers acdoc)
- (vla-put-layeron layer :vlax-true)
- (if (eq :vlax-true (vla-get-lock layer))
- (vla-put-lock (car (setq locked (cons layer locked))) :vlax-false)
- )
- )
- ;; Delete Layout Tabs:
- (vlax-for layout (vla-get-layouts acdoc)
- (if (not (eq "Model" (vla-get-name layout)))
- (vla-delete layout)
- )
- )
- ;; Delete all Text, MText, Lines & Points
- (if (setq s (ssget "_X" '((0 . "TEXT,MTEXT,LINE,POINT"))))
- (repeat (setq i (sslength s))
- (entdel (ssname s (setq i (1- i))))
- )
- )
- ;; Set properties of remaining objects
-
- (vlax-for obj (vla-get-modelspace acdoc)
- (vla-put-layer obj "0")
- (vla-put-linetype obj "BYBLOCK")
- (vla-put-color obj acbyblock)
- (vla-put-lineweight obj aclnwtbyblock)
- )
- ;; Purge all RegApps:
- (command "_.-purge" "_R" "*" "_N")
- ;; Relock those layers!
- (foreach layer locked (vla-put-lock layer :vlax-true))
- ;; Reset the environment
-
- (setvar 'CMDECHO 1)
- (_EndUndo acdoc)
- (princ)
- )
- (vl-load-com) (princ)
|