onsdag 24 oktober 2012

45. Systemvariabler - acaddoc.lsp


Vissa versioner av AutoCad har egenheter som ibland kan vara svårdefinierade eller svårförklarade.

Publish- funktionen måste för att fungera, tillfälligt, ställa om vissa systemvariabler bla autosave till 0. När Publish är färdig ska den ställa tillbaka variabeln, vilken i vissa versioner av AutoCad tydligen inte fungerar.


Det finns 3 sorters systemvariabler:


  1. De som skrivs till windows-registret och gäller alltid
  1. De som skrivs till AutoCad-filen och fungerar oavsett dator
  1. De som skrivs i AutoCad-sessionen och försvinner när AutoCad avslutas.
Sist jag kollade fanns det närmare 300 system-variabler.http://www.cadproblems.us/forms/ACAD2011.pdf
http://www.cadproblems.us/forms/ACAD2012.pdf
Hur gör man då för att bli varnad när en system-variabel ändras? Först gäller det att veta vilka man vill övervaka, sedan hur man vill bli varnad och till sist hur man åtgärdar det.

Om man lägger till följande rader i Acaddoc.lsp gör att man alltid när Autosave-variabeln ändras till 0, ställs den tillbaka till 10 (man kan välja en annan tid också)

;Ändrar alltid tillbaka systemvariabeln savetime till 5 minuter
;Om man vill bli notifierad, tar man bort ; under (alert…
(defun C:ALERTME ()
   (vl-load-com)
   (setq VTFRXN (vlr-editor-reactor nil '((:VLR-sysVarChanged . VTF))))
)
 
(defun VTF (CALL CALLBACK)
   (if (and
         (= (strcase (car CALLBACK)) (setq str "SAVETIME"))
         (not (eq (getvar str) 5))
       )
       (progn
         ;(alert (strcat str " has been changed back to 5"))
         (setvar "SAVETIME" 5)
       )
   )
)
(c:alertme)