Author Topic: Keep your xrefs on a lock layer  (Read 1461 times)

0 Members and 1 Guest are viewing this topic.

mohan

  • Newt
  • Posts: 98
Keep your xrefs on a lock layer
« on: August 01, 2021, 09:15:18 AM »
Help fixing bug after running the below route I receive
Command: Xreflock
Unknown command "Xreflock".  Press F1 for help.
Unknown command "Xreflock".  Press F1 for help.
But it is working !

Code: [Select]
(defun c:Xreflock  (/ layer found ss i sn vl)
      (setvar "cmdecho" 0)
      (vl-cmdf ".undo" "BEGIN")
      (setq layer "Xref_Locked")
      (if (= (tblsearch "layer" layer) nil)
            (vl-cmdf "-LAYER" "NEW" layer "" ""))
      (if (setq ss (ssget "_x" '((0 . "INSERT"))))
            (repeat (setq i (sslength ss))
                  (setq sn (ssname ss (setq i (1- i))))
                  (if (vlax-property-available-p (setq vl (vlax-ename->vla-object sn)) 'path)
                        (vla-put-layer vl layer)))
            (cond (t (princ "\n No Xrefs files found in drawing "))))
      (vl-cmdf "-LAYER" "LOCK" layer "" "")
      (vl-cmdf ".undo" "END")
      (setvar "cmdecho" 1)
      (vl-load-com)
      (princ))

Then I got another xref need to insert after inserting & when i run the lisp - Command: Xreflock
; error: Automation Error. On locked layer
"Save Energy"

mhupp

  • Bull Frog
  • Posts: 250
Re: Keep your xrefs on a lock layer
« Reply #1 on: August 02, 2021, 12:11:26 AM »
tweked your code a bit to get rid of the errors.

Code: [Select]
(defun c:Xreflock (/ old ss)
  (if (setq SS (ssget "_x" '((0 . "INSERT")))) 
    (progn                                     
      (setvar 'cmdecho 0)                       
      (vl-cmdf "_.Undo" "BE")
      (setq old (getvar 'clayer))                       
      (if (not (tblsearch "layer" "Xref_Locked"))
        ;(vl-cmdf "_.Layer" "M" "Xref_Locked" "LO" "Xref_Locked" "" "")  ;might have to modify this to use Autocad commands I use BricsCAD.
        (vl-cmdf "_.Layer" "M" "Xref_Locked" "LO" "Xref_Locked" "")  ;removed extra "" to get rid of unknown command
      )
      (vl-cmdf "_.Chprop" SS "" "LA" "Xref_Locked" "")  ;simple change properties command to move all items in selection set to xref_lock layer
      (vl-cmdf "_.Undo" "E")
      (setvar 'clayer old)                             
      (setvar 'cmdecho 1)
    )
    (prompt "\nNo Xrefs files found in drawing ")
  )
  (princ)
)
« Last Edit: August 04, 2021, 07:34:42 AM by mhupp »

mohan

  • Newt
  • Posts: 98
Re: Keep your xrefs on a lock layer
« Reply #2 on: August 04, 2021, 03:18:49 AM »
Yes, fine thanks
it was working but at the beginning (Unknown command "Xreflock")

Command: Xreflock
Unknown command "Xreflock".  Press F1 for help.
"Save Energy"

mhupp

  • Bull Frog
  • Posts: 250
Re: Keep your xrefs on a lock layer
« Reply #3 on: August 04, 2021, 07:31:43 AM »
https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-routine-works-but-unknown-command-is-displayed/m-p/5241001/highlight/true#M325569

seems their is a extra "" in the layer command that was causing this. never ran the code.  :idiot2:
Also added ignore any blocks on Xref_locked layer to the ssget since they don't need to change layers and would prompt getting the error code about on locked layer.
updated the error reply for the first if statement.

Code: [Select]
(defun c:Xreflock (/ old ss)
  (if (setq SS (ssget "_x" '((0 . "INSERT") (8 . "~Xref_Locked"))))  ;the "~" means to ignore whatever its next to.
    (progn
      (setvar 'cmdecho 0)
      (vl-cmdf "_.Undo" "BE")
      (setq old (getvar 'clayer))
      (if (not (tblsearch "layer" "Xref_Locked"))
        (vl-cmdf "_.Layer" "M" "Xref_Locked" "LO" "Xref_Locked" "") ;might have to modify this to use Autocad commands I use BricsCAD.
      )
      (vl-cmdf "_.Chprop" SS "" "LA" "Xref_Locked" "")  ;simple change properties command to move all items in selection set to xref_lock layer
      (vl-cmdf "_.Undo" "E")
      (setvar 'clayer old)
      (setvar 'cmdecho 1)
    )
    (if (setq SS (ssget "_x" '((0 . "INSERT") (8 . "Xref_Locked"))))
      (prompt "\nAll Xrefs are on locked layer")
      (prompt "\nNo Xrefs files found in drawing")
    )
  )
  (princ)
)
« Last Edit: August 04, 2021, 08:22:25 AM by mhupp »