CADXChange

Alle LISP-Befehle

CXLAYRESLayerVersion 1.0.0In AutoCAD getestet

Die von CXLAYISO ausgeschalteten Layer zurückholen

Schaltet genau die Layer wieder ein, die CXLAYISO verborgen hat. Wurde nichts isoliert, bietet der Befehl an, alle ausgeschalteten Layer einzuschalten.

So verwenden Sie ihn

  1. CXLAYRES eingeben.
  2. Die von CXLAYISO verborgenen Layer kommen zurück.
  3. Ohne vorherige Isolierung mit Yes antworten, um alle ausgeschalteten Layer einzuschalten.

Gut zu wissen

  • Funktioniert auch nach mehreren CXLAYISO-Aufrufen in derselben Sitzung.

In AutoCAD laden

  1. Speichern Sie die Datei an einem beliebigen Ort.
  2. Geben Sie APPLOAD ein, wählen Sie die Datei und klicken Sie auf Laden.
  3. Geben Sie den Befehl ein: CXLAYRES.

Damit er bei jedem Start bereitsteht, fügen Sie ihn im selben Dialog zum Startup-Set hinzu, oder laden Sie mit dem optionalen Loader einen ganzen Ordner auf einmal. Der optionale Loader

In AutoCAD (Vollversion) getestet. Andere Programme, die AutoLISP ausführen, funktionieren vielleicht, wurden aber nicht getestet.

Der Code

Reiner Text, nichts ist versteckt. Kopieren Sie ihn in eine Datei namens cxlayres.lsp oder laden Sie ihn herunter.

;;; ============================================================================
;;; CXLAYRES - Bring back the layers CXLAYISO switched off
;;; Version 1.0.0
;;; CADXChange LISP tools - https://cadxchange.net/resources/lisp/cxlayres
;;; Tested in: AutoCAD (full version). Other programs that run AutoLISP may work but are not tested.
;;; Copyright (c) CADXChange. Free for personal and commercial use; do not resell or
;;; republish it as a collection. Terms: https://cadxchange.net/legal/lisp-terms
;;; ============================================================================

;; Switch on the layers CXLAYISO switched off. With ALL true, every layer that is off comes back instead.
;; Returns how many layers were switched on.
(defun cx:layres-run (all / n ed names)
  (setq n 0 names (if all (cx:layers) *cx-layiso*))
  (foreach name names
    (if (and (setq ed (tblsearch "LAYER" name)) (< (cdr (assoc 62 ed)) 0))
      (progn
        (cx:lay-set name 62 (- (cdr (assoc 62 ed))))
        (setq n (1+ n)))))
  (setq *cx-layiso* nil)
  n)

(defun c:CXLAYRES ( / *error* cx:sv all)
  (setq *error* cx:err)
  (setq all (if *cx-layiso* nil (= (cx:ask-kw "Nothing was isolated. Switch on every layer that is off" "Yes No" "Yes") "Yes")))
  (if (or *cx-layiso* all)
    (progn
      (cx:start '(("CMDECHO" . 0)))
      (princ (strcat "\n" (itoa (cx:layres-run all)) " layer(s) switched on."))
      (cx:end)))
  (princ))


;;; ---- Shared helpers (used by the command above; identical in every CADXChange tool) ----

(defun cx:dxf (code ed)
  (cdr (assoc code ed)))

;; Names of all layers.
(defun cx:layers (/ r out)
  (setq r (tblnext "LAYER" T))
  (while r
    (setq out (cons (cx:dxf 2 r) out) r (tblnext "LAYER")))
  (reverse out))

;; Set the DXF group CODE of layer NAME to VAL; returns T, or nil when there is no such layer.
(defun cx:lay-set (name code val / en ed)
  (if (setq en (tblobjname "LAYER" name))
    (progn
      (setq ed (entget en))
      (entmod (if (assoc code ed)
                (subst (cons code val) (assoc code ed) ed)
                (append ed (list (cons code val)))))
      T)))

;; Close the undo step and put the system variables back.
(defun cx:end ()
  (foreach v cx:sv (setvar (car v) (cdr v)))
  (command "_.UNDO" "_End")
  (setq cx:sv nil)
  (princ))

;; Error handler: restores everything, stays quiet on Esc.
(defun cx:err (msg)
  (if (> (getvar "CMDACTIVE") 0) (command))
  (cx:end)
  (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")))
    (princ (strcat "\nError: " msg)))
  (princ))

;; Replace every OLD in STR by NEW (case sensitive).
(defun cx:replace (str old new / n out pos)
  (setq n (strlen old) out "" pos 1)
  (if (= n 0)
    str
    (progn
      (while (<= pos (1+ (- (strlen str) n)))
        (if (= (substr str pos n) old)
          (setq out (strcat out new) pos (+ pos n))
          (setq out (strcat out (substr str pos 1)) pos (1+ pos))))
      (strcat out (substr str pos)))))

;; Ask for one of the keywords in BITS ("Yes No"), default DEF; returns the keyword.
(defun cx:ask-kw (msg bits def / v)
  (initget 0 bits)
  (setq v (getkword (strcat "\n" msg " [" (cx:replace bits " " "/") "] <" def ">: ")))
  (if v v def))

;; Save the system variables in VARS ((name . value) ...), set them, and open one undo step.
;; The caller declares cx:sv as a local so the saved values live exactly as long as the command.
(defun cx:start (vars)
  (setq cx:sv (mapcar (function (lambda (v) (cons (car v) (getvar (car v))))) vars))
  (command "_.UNDO" "_Begin")
  (foreach v vars (setvar (car v) (cdr v)))
  (princ))

(princ "\nCXLAYRES loaded. Type CXLAYRES to start.")
(princ)

Versionsverlauf

Version 1.0.0 · 27. Oktober 2026

Erste Veröffentlichung.

Für viele Zeichnungen auf einmal?

LayerSync erledigt diese Art von Aufgabe für einen ganzen Ordner voller Zeichnungen in einem Durchlauf.

LayerSync

Weitere Befehle: Layer