试试这个快速修改。
- (defun c:Test (/ *error* echo dc fn fname prg)
- (defun *error* (msg)
- (if (and fname (findfile fname))
- (vl-file-delete fname)
- )
- (if echo
- (setvar 'CMDECHO echo)
- )
- (if (and msg
- (not (wcmatch (strcase msg) "*CANCEL*,*BREAK*,*EXIT*"))
- )
- (princ (strcat "\nError =>: " msg "..."))
- )
- (princ)
- )
- (if
- (and
- (setq fname (vl-filename-mktemp "dcl.dcl"))
- (setq fn (open fname "w"))
- (write-line
- "tmp : dialog { label = "Automated Layer Renaming - V06-08-15";
- : column {
- : boxed_column { : button { key = "btnUnit"; label = "Fix Standard Unit Layers"; is_default = false;}}
- : boxed_row { : button { key = "cancel"; label = "Close"; is_default = true; is_cancel = true;}}}}"
- fn
- )
- (not (close fn))
- )
- (progn
- (if (and (<= 0 (setq dc (load_dialog fname)))
- (new_dialog "tmp" dc)
- )
- (progn (action_tile
- "btnUnit"
- "(unitLayer)(setq prg t)(done_dialog)"
- )
- (start_dialog)
- (unload_dialog dc)
- (vl-file-delete fname)
- (if prg
- (progn
- (setq echo (getvar 'CMDECHO))
- (setvar 'CMDECHO 0)
- (command "._-purge" "la" "" "n")
- (setvar 'CMDECHO echo)
- )
- )
- )
- (progn (if (>= dc 0)
- (unload_dialog dc)
- )
- (if (and fname (setq fname (findfile fname)))
- (vl-file-delete fname)
- )
- )
- )
- )
- )
- (princ)
- )
- (defun unitLayer (/ layers newLayer ss i ent)
- (setq layers (vla-get-layers
- (vla-get-activedocument (vlax-get-acad-object))
- )
- newLayer "1_ANSI"
- )
- (foreach oldLayer '("ANSI" "_ANSI" "F.H." "1_F.H.")
- (cond ((and (tblsearch "layer" oldLayer)
- (not (tblsearch "layer" newLayer))
- )
- (vla-put-name (vla-item layers oldLayer) newLayer)
- )
- ((and (tblsearch "layer" oldLayer)
- (tblsearch "layer" newLayer)
- (setq ss (ssget "_X" (list (cons 8 oldLayer))))
- )
- (repeat (setq i (sslength ss))
- (setq ent (entget (ssname ss (setq i (1- i))))
- ent (subst (cons 8 newLayer)
- (assoc 8 ent)
- ent
- )
- )
- (entmod ent)
- )
- )
- ((not (tblsearch "layer" oldLayer))
- (prompt (strcat "\nLayer " oldLayer " not found. "))
- )
- )
- )
- (princ)
- )(vl-load-com)
我不确定如何在renameLayer函数中重命名层。
- ;(command "._purge" "la" "" "n")
我可以在unitLayer函数开始之前卸载对话框,以便使用命令吗?
如果在卸载对话框之前必须运行该函数,那么我可能需要从使用命令行切换到使用Visual Lisp重命名层。我在AfraLISP上找到了关于使用VLISP和层的完整论述。 |