;|ToDos: Funktionen für das Setzen der sinnvollen Werte der Applikations-Statusleiste Viele der Einstellungen der Applikations-Statusleiste sind Zeichnungs-spezifisch was je nach Arbeitsweise echt nerven kann. Die hier zur Verfügung gestellten Funktionen dienen dazu das Ganze User-Spezifisch zu machen. Implementiert über die acaddoc.lsp, sorgt Funktion "C:CADDE:APPSTATUSUSERDEFAULT" dafür das bei jedem Start von AutoCAD, bei jedem Öffnen einer Datei die Applikations-Statusleisten-Einstellungen so geladen werden wie der User diese präferiert. Es werden nicht nur die EInstellungen selbst gemanaged (z.B. Osnap-Einstellungen) sondern auch der Schaltzustand der SChaltflächen der Applikationsstatusleiste. Vorbedingungen: # Diese Lisp-Datei muss sich irgendwo im AutoCAD-Suchpfad befinden # Eine acaddoc.lsp muss (richtig) definiert und implementiert sein # Der acaddoc.lsp müssen folgende Zeilen hinzugefügt werden: (if (setq STR-FULLPATHFILENAME (findfile "acadusersettings.lsp")) (progn (load STR-FULLPATHFILENAME) (C:CADDE:APPSTATUSUSERDEFAULT) ) ) Folgende Funktionen sind für eine User-Interaktion vorgesehen (z.B. Einbindung in Tool-Palette oder Multifunktionsleiste) C:CADDE:APPSTATUSDEFAULT > Befehl: CADDE:APPSTATUSDEFAULT > Lädt die von der CAD-Administration empfohlenen Werte für die Applikationsstatusleiste > Die Vorgabewerte speisen sich aus der AutoCAD-Versionsabhängigen Liste "LST-DEFAULTUSERSYSVARS" die hier definiert ist. Eventuell ist eine Anpassung erforderlich C:CADDE:APPSTATUSUSERDEFAULT > Befehl: CADDE:APPSTATUSUSERDEFAULT > Lädt die User-spezifischen Einstellungen für die Applikationsstatusleiste > Beim ersten Aufruf sind das die gleichen Einstellungen wie die empfohlenen Vorgabe-Einstellungen > Wenn der User die Applikationsstatusleisten-Einstellungen verändert und mit "CADDE:SET:USERDEFAULTSETTINGSFILE" speichert, werden fortan die User-Einstellungen geladen C:CADDE:SET:USERDEFAULTSETTINGSFILE > Befehl: CADDE:SET:USERDEFAULTSETTINGSFILE > Speichert die aktuellen Einstellungen der Applikationsstatusleiste in der User-spezifischen Datei "[User-Tempfolder]\[username].lsp" > Die gespeicherten Werte orientieren sich an dem Inhalt der hier definierten Liste "LST-DEFAULTUSERSYSVARS" |; (vl-load-com) ;; Definiert den Namen der Datei in der User-Settings gespeichert werden und aus der die User-Settings geladen werden (defun CADDE:GETACADUSERSETTINGSFILENAME (/ STRFILENAME) ;; Aktuelle Einstellung: "[User-Tempfolder]\[username].lsp" (strcase (strcat (vla-get-tempfilepath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) ) (getvar "loginname") ".lsp" ) ) ) ;; Funktion lädt User-Vorgabeeinstellungen aus Datei oder legt sie mit Vorgabeeinstellungen an ;; Am Ende wird die Settingsdatei dann auch geladen (defun CADDE:GET:USERDEFAULTSETTINGS (/ LST-USERSYSVARS STRFILENAME) ;; Dateinamensfindung (setq STRFILENAME (CADDE:GETACADUSERSETTINGSFILENAME)) (if (not (findfile STRFILENAME)) ;; Wenn es die userspezifische Settingsdatei noch nicht gibt, leg' die an (progn (setq LST-USERSYSVARS LST-DEFAULTUSERSYSVARS) (CADDE:LST->FILE (quote LST-USERSYSVARS) STRFILENAME) ) ) ;; Lade die User-Settingsdatei (load STRFILENAME) ) ;; Liste dient als Vorgabe für zu speichernde Variablen sowie als Liste für ECE Standardvorgaben ;; Diese Liste ist AutoCAD-Versionsabhängig und sollte für jede AutoCAD-Version angelegt bzw. vor Einsatz mit neuer Version überprüft werden ;; Hier definiert für die Versionen < 2015, 2015, 2018 & 2022 (cond ((< (atof (getvar "ACADVER")) 20.0) ;; kleiner 2015 (also 2011) (setq LST-DEFAULTUSERSYSVARS '(("CONSTRAINTINFER" 0) ("SNAPMODE" 0) ("GRIDMODE" 0) ("ORTHOMODE" 0) ("AUTOSNAP" 63) ;| 0 Turns all off 1 Turns on the AutoSnap marker 2 Turns on the AutoSnap tooltips 4 Turns on the AutoSnap magnet 8 Turns on polar tracking 16 Turns on object snap tracking OTRACK 32 Turns on tooltips for polar tracking, object snap tracking, and Ortho mode |; ("SNAPTYPE" 1) ;_ PolarSnap ;_ ("POLARANG" 0.261799) ;_ Inkremementwinkel ("POLARADDANG" "45.00;135.00;225.00;315.00") ;_ Absolute Winkel ("POLARMODE" 7) ;_ Controls settings for polar and object snap tracking. ;| 0 Measure polar angles based on current UCS (absolute) 1 Measure polar angles from selected objects (relative) Object snap tracking 0 Track orthogonally only 2 Use polar tracking settings in object snap tracking Use additional polar tracking angles 0 No 4 Yes Acquire object snap tracking points 0 Acquire automatically 8 Press SHIFT to acquire |; ("OSMODE" 6183) ("OSNAPZ" 1) ("3DOSMODE" 11) ;_ Bitcode minus eins zum einschalten Bit 1 ist an ("DYNMODE" 3) ;_ Dynamische Eingabe an ;| When DYNMODE is set to a negative value, the Dynamic Input features are not turned on, but the setting is stored. Press the Dyn button in the status bar to set DYNMODE to the corresponding positive value. 0 All Dynamic Input features, including dynamic prompts, off 1 Pointer input on 2 Dimensional input on 3 Both pointer input and dimensional input on If dynamic prompts are on (DYNPROMPT is set to 1), they are displayed when DYNMODE is set to 1, 2, or 3. When dimensional input is turned on (DYNMODE = 2 or 3), the program switches to pointer input when you enter a comma or an angle bracket (<), or when you select multiple grip points. When DYNMODE is set to 1, 2, or 3, you can turn off all features temporarily by holding down the temporary override key, F12. |; ("DYNPIFORMAT" 0) ;_ 0 Polar / 1 Kartesisch ("DYNPICOORDS" 0) ;_ 0 Relative / 1 Absolut ("DYNPIVIS" 1) ;_ Anzeige von Punktkoordinaten nur wenn Befehl fragt ("DYNDIVIS" 1) ;_ Dynamic Dim Display, Zwei Werte ("DYNDIGRIP" 31) ;_ Nur aktiv wenn DYNDIVIS=2 ("DYNPROMPT" 1) ;_ Anzeige Commandline am Cursor ("UCSDETECT" 0) ;_ Dynamisches BKS AUS ("LWDISPLAY" 0) ;_ Linienstärke anzeigen AUS ("LWDEFAULT" 25) ;_ Vorgabelinienstärke ;; Control of LWDisplayScale (setenv "LineWeightDisplayScale" LWEIGTHD) ("TRANSPARENCYDISPLAY" 0) ;_ Transparenzanzeige aus ("CETRANSPARENCY" -1) ;_ Tranparenz: -1 ByLayer, -2 ByBlock ("QPMODE" -1) ;_ Schnelleigenschaften aus ("SELECTIONCYCLING" 0) ;_ Wechselnde Auswahl AUS ;;; Variablen aus den Optionen ("APBOX" 0) ("APERTURE" 9) ("PICKBOX" 9) ("GRIPSIZE" 8) ;;; !!! Achtung! Environment !!! ;;; Groß/Klein WIRD unterschieden!! ("AutoSnapSize" "8") ("LineWeightDisplayScale" "7") ) ) ) ((= (atof (getvar "ACADVER")) 20.0) ;; ACA2015 (setq LST-DEFAULTUSERSYSVARS '(("CONSTRAINTINFER" 0) ("SNAPMODE" 0) ("GRIDMODE" 0) ("ORTHOMODE" 0) ("AUTOSNAP" 63) ;| 0 Turns all off 1 Turns on the AutoSnap marker 2 Turns on the AutoSnap tooltips 4 Turns on the AutoSnap magnet 8 Turns on polar tracking 16 Turns on object snap tracking OTRACK 32 Turns on tooltips for polar tracking, object snap tracking, and Ortho mode |; ("SNAPTYPE" 1) ;_ PolarSnap ;_ ("POLARANG" 0.261799) ;_ Inkremementwinkel ("POLARADDANG" "45.00;135.00;225.00;315.00") ;_ Absolute Winkel ("POLARMODE" 7) ;_ Controls settings for polar and object snap tracking. ("SNAPISOPAIR" 0) ;_ New in 2015 Appstatusbar ("SNAPSTYL" 0) ;_ New in 2015 Appstatusbar ;| 0 Measure polar angles based on current UCS (absolute) 1 Measure polar angles from selected objects (relative) Object snap tracking 0 Track orthogonally only 2 Use polar tracking settings in object snap tracking Use additional polar tracking angles 0 No 4 Yes Acquire object snap tracking points 0 Acquire automatically 8 Press SHIFT to acquire |; ("OSMODE" 6183) ("OSNAPZ" 1) ("3DOSMODE" 11) ;_ Bitcode minus eins zum einschalten Bit 1 ist an ("DYNMODE" 3) ; Dynamische Eingabe an ;| When DYNMODE is set to a negative value, the Dynamic Input features are not turned on, but the setting is stored. Press the Dyn button in the status bar to set DYNMODE to the corresponding positive value. 0 All Dynamic Input features, including dynamic prompts, off 1 Pointer input on 2 Dimensional input on 3 Both pointer input and dimensional input on If dynamic prompts are on (DYNPROMPT is set to 1), they are displayed when DYNMODE is set to 1, 2, or 3. When dimensional input is turned on (DYNMODE = 2 or 3), the program switches to pointer input when you enter a comma or an angle bracket (<), or when you select multiple grip points. When DYNMODE is set to 1, 2, or 3, you can turn off all features temporarily by holding down the temporary override key, F12. |; ("DYNPIFORMAT" 0) ;_ 0 Polar / 1 Kartesisch ("DYNPICOORDS" 0) ;_ 0 Relative / 1 Absolut ("DYNPIVIS" 1) ;_ Anzeige von Punktkoordinaten nur wenn Befehl fragt ("DYNDIVIS" 1) ;_ Dynamic Dim Display, Zwei Werte ("DYNDIGRIP" 31) ;_ Nur aktiv wenn DYNDIVIS=2 ("DYNPROMPT" 1) ;_ Anzeige Commandline am Cursor ("UCSDETECT" 0) ;_ Dynamisches BKS AUS ("SUBOBJSELECTIONMODE" 0) ;_ New in Appstatusbar 2015 ("LWDISPLAY" 0) ;_ Linienstärke anzeigen AUS ("LWDEFAULT" 25) ;_ Vorgabelinienstärke ;; Control of LWDisplayScale (setenv "LineWeightDisplayScale" 7) ("TRANSPARENCYDISPLAY" 0) ;_ Transparenzanzeige aus ("CETRANSPARENCY" -1) ;_ Tranparenz: -1 ByLayer, -2 ByBlock ("QPMODE" -1) ;_ Schnelleigenschaften aus ("QPLOCATION" 0) ;_ New in ACA2015 ("SELECTIONCYCLING" -2) ;_ Wechselnde Auswahl AUS & Defaultsettings changed in ACA2015 ("PREVIEWFILTER" 3) ;_ Neu in ACA2015 ("DEFAULTGIZMO" 0) ;_ New in Appstatusbar 2015 ("ANNOMONITOR" -2) ;_ New in Appstatusbar 2015 ("STATUSBAR" 2) ;_ ACA2015 Display Drawing Status bar ("OSOPTIONS" 7) ;_ New in ACA2015 ;;; Variablen aus den Optionen ("APBOX" 0) ("APERTURE" 9) ("PICKBOX" 9) ("GRIPSIZE" 8) ("PICKAUTO" 7) ;_ Geändert in ACA2015 Steuert nun auch u.a. Lassofang, verschoben in ACA2015 usersettings ("PICKDRAG" 2) ;_ Geändert in ACA2015 Steuert nun die Methode für die Erzeugung des Auswahlfensters, verschoben in ACA2015 usersettings ;;; !!! Achtung! Environment !!! ;;; Groß/Klein WIRD unterschieden!! ("AutoSnapSize" "8") ("LineWeightDisplayScale" "7") ) ) ) ((= (atof (getvar "ACADVER")) 22.0) ;; ACA2018 (setq LST-DEFAULTUSERSYSVARS '(("CONSTRAINTINFER" 0) ("SNAPMODE" 0) ("GRIDMODE" 0) ("ORTHOMODE" 0) ("AUTOSNAP" 63) ;| 0 Turns all off 1 Turns on the AutoSnap marker 2 Turns on the AutoSnap tooltips 4 Turns on the AutoSnap magnet 8 Turns on polar tracking 16 Turns on object snap tracking OTRACK 32 Turns on tooltips for polar tracking, object snap tracking, and Ortho mode |; ("SNAPTYPE" 1) ;_ PolarSnap ;_ ("POLARANG" 0.261799) ;_ Inkremementwinkel ("POLARADDANG" "45.00;135.00;225.00;315.00") ;_ Absolute Winkel ("POLARMODE" 7) ;_ Controls settings for polar and object snap tracking. ("SNAPISOPAIR" 0) ;_ New in 2015 Appstatusbar ("SNAPSTYL" 0) ;_ New in 2015 Appstatusbar ;| 0 Measure polar angles based on current UCS (absolute) 1 Measure polar angles from selected objects (relative) Object snap tracking 0 Track orthogonally only 2 Use polar tracking settings in object snap tracking Use additional polar tracking angles 0 No 4 Yes Acquire object snap tracking points 0 Acquire automatically 8 Press SHIFT to acquire |; ("OSMODE" 6183) ("OSNAPZ" 1) ("3DOSMODE" 11) ;_ Bitcode minus eins zum einschalten Bit 1 ist an ("DYNMODE" 3) ; Dynamische Eingabe an ;| When DYNMODE is set to a negative value, the Dynamic Input features are not turned on, but the setting is stored. Press the Dyn button in the status bar to set DYNMODE to the corresponding positive value. 0 All Dynamic Input features, including dynamic prompts, off 1 Pointer input on 2 Dimensional input on 3 Both pointer input and dimensional input on If dynamic prompts are on (DYNPROMPT is set to 1), they are displayed when DYNMODE is set to 1, 2, or 3. When dimensional input is turned on (DYNMODE = 2 or 3), the program switches to pointer input when you enter a comma or an angle bracket (<), or when you select multiple grip points. When DYNMODE is set to 1, 2, or 3, you can turn off all features temporarily by holding down the temporary override key, F12. |; ("DYNPIFORMAT" 0) ;_ 0 Polar / 1 Kartesisch ("DYNPICOORDS" 0) ;_ 0 Relative / 1 Absolut ("DYNPIVIS" 1) ;_ Anzeige von Punktkoordinaten nur wenn Befehl fragt ("DYNDIVIS" 1) ;_ Dynamic Dim Display, Zwei Werte ("DYNDIGRIP" 31) ;_ Nur aktiv wenn DYNDIVIS=2 ("DYNPROMPT" 1) ;_ Anzeige Commandline am Cursor ("UCSDETECT" 0) ;_ Dynamisches BKS AUS ("SUBOBJSELECTIONMODE" 0) ;_ New in Appstatusbar 2015 ("LWDISPLAY" 0) ;_ Linienstärke anzeigen AUS ("LWDEFAULT" 25) ;_ Vorgabelinienstärke ;; Control of LWDisplayScale (setenv "LineWeightDisplayScale" 7) ("TRANSPARENCYDISPLAY" 0) ;_ Transparenzanzeige aus ("CETRANSPARENCY" -1) ;_ Tranparenz: -1 ByLayer, -2 ByBlock ("QPMODE" -1) ;_ Schnelleigenschaften aus ("QPLOCATION" 0) ;_ New in ACA2015 ("SELECTIONCYCLING" -2) ;_ Wechselnde Auswahl AUS & Defaultsettings changed in ACA2015 ("PREVIEWFILTER" 3) ;_ Neu in ACA2015 ("DEFAULTGIZMO" 0) ;_ New in Appstatusbar 2015 ("ANNOMONITOR" -2) ;_ New in Appstatusbar 2015 ("STATUSBAR" 1) ;_ ACA2018 Display Drawing Status bar ist in Statusbar wieder integriert ("OSOPTIONS" 7) ;_ New in ACA2015 ;;; Variablen aus den Optionen ("APBOX" 0) ("APERTURE" 9) ("PICKBOX" 9) ("GRIPSIZE" 8) ("PICKAUTO" 7) ;_ Geändert in ACA2015 Steuert nun auch u.a. Lassofang, verschoben in ACA2015 usersettings ("PICKDRAG" 2) ;_ Geändert in ACA2015 Steuert nun die Methode für die Erzeugung des Auswahlfensters, verschoben in ACA2015 usersettings ;;; !!! Achtung! Environment !!! ;;; Groß/Klein WIRD unterschieden!! ("AutoSnapSize" "8") ("LineWeightDisplayScale" "7") ) ) ) ((= (atof (getvar "ACADVER")) 24.1) ;; ACA2022 (setq LST-DEFAULTUSERSYSVARS '(("CONSTRAINTINFER" 0) ("SNAPMODE" 0) ("GRIDMODE" 0) ("ORTHOMODE" 0) ("AUTOSNAP" 63) ;| 0 Turns all off 1 Turns on the AutoSnap marker 2 Turns on the AutoSnap tooltips 4 Turns on the AutoSnap magnet 8 Turns on polar tracking 16 Turns on object snap tracking OTRACK 32 Turns on tooltips for polar tracking, object snap tracking, and Ortho mode |; ("SNAPTYPE" 1) ;_ PolarSnap ;_ ("POLARANG" 0.261799) ;_ Inkremementwinkel ("POLARADDANG" "45.00;135.00;225.00;315.00") ;_ Absolute Winkel ("POLARMODE" 7) ;_ Controls settings for polar and object snap tracking. ("SNAPISOPAIR" 0) ;_ New in 2015 Appstatusbar ("SNAPSTYL" 0) ;_ New in 2015 Appstatusbar ;| 0 Measure polar angles based on current UCS (absolute) 1 Measure polar angles from selected objects (relative) Object snap tracking 0 Track orthogonally only 2 Use polar tracking settings in object snap tracking Use additional polar tracking angles 0 No 4 Yes Acquire object snap tracking points 0 Acquire automatically 8 Press SHIFT to acquire |; ("OSMODE" 6183) ("OSNAPZ" 1) ("3DOSMODE" 11) ;_ Bitcode minus eins zum einschalten Bit 1 ist an ("DYNMODE" 3) ; Dynamische Eingabe an ;| When DYNMODE is set to a negative value, the Dynamic Input features are not turned on, but the setting is stored. Press the Dyn button in the status bar to set DYNMODE to the corresponding positive value. 0 All Dynamic Input features, including dynamic prompts, off 1 Pointer input on 2 Dimensional input on 3 Both pointer input and dimensional input on If dynamic prompts are on (DYNPROMPT is set to 1), they are displayed when DYNMODE is set to 1, 2, or 3. When dimensional input is turned on (DYNMODE = 2 or 3), the program switches to pointer input when you enter a comma or an angle bracket (<), or when you select multiple grip points. When DYNMODE is set to 1, 2, or 3, you can turn off all features temporarily by holding down the temporary override key, F12. |; ("DYNPIFORMAT" 0) ;_ 0 Polar / 1 Kartesisch ("DYNPICOORDS" 0) ;_ 0 Relative / 1 Absolut ("DYNPIVIS" 1) ;_ Anzeige von Punktkoordinaten nur wenn Befehl fragt ("DYNDIVIS" 1) ;_ Dynamic Dim Display, Zwei Werte ("DYNDIGRIP" 31) ;_ Nur aktiv wenn DYNDIVIS=2 ("DYNPROMPT" 1) ;_ Anzeige Commandline am Cursor ("UCSDETECT" 0) ;_ Dynamisches BKS AUS ("SUBOBJSELECTIONMODE" 0) ;_ New in Appstatusbar 2015 ("LWDISPLAY" 0) ;_ Linienstärke anzeigen AUS ("LWDEFAULT" 25) ;_ Vorgabelinienstärke ;; Control of LWDisplayScale (setenv "LineWeightDisplayScale" 7) ("TRANSPARENCYDISPLAY" 0) ;_ Transparenzanzeige aus ("CETRANSPARENCY" -1) ;_ Tranparenz: -1 ByLayer, -2 ByBlock ("QPMODE" -1) ;_ Schnelleigenschaften aus ("QPLOCATION" 0) ;_ New in ACA2015 ("SELECTIONCYCLING" -2) ;_ Wechselnde Auswahl AUS & Defaultsettings changed in ACA2015 ("PREVIEWFILTER" 3) ;_ Neu in ACA2015 ("DEFAULTGIZMO" 0) ;_ New in Appstatusbar 2015 ("ANNOMONITOR" -2) ;_ New in Appstatusbar 2015 ("STATUSBAR" 1) ;_ ACA2018 Display Drawing Status bar ist in Statusbar wieder integriert ("OSOPTIONS" 7) ;_ New in ACA2015 ;;; Variablen aus den Optionen ("APBOX" 0) ("APERTURE" 9) ("PICKBOX" 9) ("GRIPSIZE" 8) ("PICKAUTO" 7) ;_ Geändert in ACA2015 Steuert nun auch u.a. Lassofang, verschoben in ACA2015 usersettings ("PICKDRAG" 2) ;_ Geändert in ACA2015 Steuert nun die Methode für die Erzeugung des Auswahlfensters, verschoben in ACA2015 usersettings ;;; !!! Achtung! Environment !!! ;;; Groß/Klein WIRD unterschieden!! ("AutoSnapSize" "8") ("LineWeightDisplayScale" "7") ) ) ) ) ;; Funktion lädt die von der CAD-Administration empfohlenen Vorgabewerte für die Applikations-Statusleiste ;; Gut als Alternative zu den User-Settings oder als Möglichkeit eine User-Settings-Datei wieder mit Defaultwerten ;; als Ausgangsbasis zur Neu-Einstellung zu haben (defun C:CADDE:APPSTATUSDEFAULT () (foreach ELEM LST-DEFAULTUSERSYSVARS (cond ;_ !!! Achtung! Environment !!! ;_ Groß/Klein WIRD unterschieden!! ((= (car ELEM) "AutoSnapSize") (vl-catch-all-apply 'setenv ELEM) ) ((= (car ELEM) "LineWeightDisplayScale") (vl-catch-all-apply 'setenv ELEM) ) ;_ Alle anderen Variablen ('t (vl-catch-all-apply 'setvar ELEM)) ) (CADDE:PRINCSYSVARANDVALUE ELEM) ) (princ "\nEmpfohlene Einstellungen für die Applikations-Statusleiste geladen!" ) (princ) ) (defun C:CADDE:APPSTATUSUSERDEFAULT () (foreach ELEM (CADDE:GET:USERDEFAULTSETTINGS) (cond ;_ !!! Achtung! Environment !!! ;_ Groß/Klein WIRD unterschieden!! ((= (car ELEM) "AutoSnapSize") (vl-catch-all-apply 'setenv ELEM) ) ((= (car ELEM) "LineWeightDisplayScale") (vl-catch-all-apply 'setenv ELEM) ) ;_ Alle anderen Variablen ('t (vl-catch-all-apply 'setvar ELEM)) ) (CADDE:PRINCSYSVARANDVALUE ELEM) ) (princ "\nAnwender-spezifische Einstellungen für die Applikations-Statusleiste geladen!" ) (princ) ) ;; Befehlsversion der Funktion zum Speichern der Anwender-spezifischen Einstzellungen (defun C:CADDE:SET:USERDEFAULTSETTINGSFILE () ;; Subroutine aufrufen (CADDE:SET:USERDEFAULTSETTINGSFILE) (princ) ) (defun CADDE:SET:USERDEFAULTSETTINGSFILE (/ LST-USERSYSVARS STRFILENAME X) ;; Sicherstellen das es eine Anwender-spezifische Einstellungsdatei überhaupt gibt ;; Sollte es noch keine Datei für Anwender-spezifische Einstellung geben: ;; Die nachfolgende Subroutine sorgt dafür (CADDE:GET:USERDEFAULTSETTINGS) ;; Pfad und Datei der Anwender-spezifischen Einstellungsdatei ermitteln (setq STRFILENAME (CADDE:GETACADUSERSETTINGSFILENAME)) (if (setq STRFILENAME (findfile STRFILENAME)) (progn ;; Lesen der aktuellen User-Einstellungen auf Basis der versionsabhängigen Standardliste ;; Sonderbehandlungen für Umgebungsvariablen und Fangwinkel (setq LST-USERSYSVARS (mapcar '(lambda (X) (cond ;_ !!! Achtung! Environment !!! ;_ Groß/Klein WIRD unterschieden!! ((= (car X) "AutoSnapSize") (list (car X) (getenv (car X))) ) ((= (car X) "LineWeightDisplayScale") (list (car X) (getenv (car X))) ) ;_ !!! Special Handling für die festen Winkel: Addiere immer die Viertel ((= (strcase (car X)) "POLARADDANG") (list (car X) (CADDE:USERDEFAULTSPOLARADDANG (getvar (car X)) ) ) ) ;_ Alle anderen Variablen ('t (list (car X) (getvar (car X)))) ) ) LST-DEFAULTUSERSYSVARS ) ) (CADDE:LST->FILE (quote LST-USERSYSVARS) STRFILENAME) (alert (strcat "Die Werte Deiner persönlichen Applikations-Statusleisten-Einstellungsdatei wurden aktualisiert..." "\n\n\t" STRFILENAME ) ) ) (alert "Zugriff auf Deine persönliche Applikations-Statusleisten-Einstellungsdatei war nicht möglich...\nBitte kontaktiere Deine CAD-Administration!" ) ) (princ) ) (defun CADDE:PRINCSYSVARANDVALUE (LST-SYSVARANDVALUE /) (if (= (type LST-SYSVARANDVALUE) 'list) (progn (princ (strcat "\nSystemvariable >" (vl-princ-to-string (car LST-SYSVARANDVALUE)) "< gesetzt auf >" (vl-princ-to-string (cadr LST-SYSVARANDVALUE)) "<" ) ) ) ) ) ;| Funktion erweitert die Liste der absoluten Winkel des Users mit den Standard-Viertelwinkeln "45.00" "135.00" "225.00" "315.00" ;;;Argumente: ;;;STR-POLARADDANG = String mit delimitter |; (defun CADDE:USERDEFAULTSPOLARADDANG (STR-POLARADDANG / LST-DEFAULTVALUES RETVAL TOKEN X) (setq LST-DEFAULTVALUES '("45.00" "135.00" "225.00" "315.00")) ;;;Funktion zum Zerlegen des String der Variable Polaraddang und einbinden der Standardmäßigen 4tel Winkel ;;;Argumente: ;;;STR = String mit delimitter ;;;TOKEN = Delimitter ;;;FLAG = 'T oder nil, wenn 'T werden Leere Werte entfernt ;;; ;;;Beispiel: ;;;(setq lst (CADDE:STRTOKEN (getvar "polaraddang") ";" 'T)) = ("45.00" "135.00" "225.00" "315.00") (defun CADDE:STRTOKEN (STR TOKEN FLAG / LST POS) (if (= (type STR) 'STR) (progn (setq STR (strcat STR TOKEN) POS t ) (while POS (if (setq POS (vl-string-position (ascii TOKEN) STR)) (setq LST (append LST (list (substr STR 1 POS))) STR (substr STR (+ POS 2)) ) ) ) (if (and FLAG LST) (setq LST (vl-remove-if '(lambda (A /) (eq A "")) LST)) ) ) ) LST ) ;;;Funktion zum Zusammenbauen einer Liste von Werten zu einem String ;;;Argumente: ;;;LST = Liste mit Werten ;;;TOKEN = Delimitter ;;; ;;;Beispiel: ;;;(setq str (CADDE:STRDELIMITED '("45.00" "135.00" "225.00" "315.00") ";")) = ("45.00" "135.00" "225.00" "315.00") (defun CADDE:STRDELIMITED (LST TOKEN /) (vl-string-right-trim TOKEN (apply 'strcat (mapcar '(lambda (X) (strcat X TOKEN)) LST) ) ) ) ;;;Funktion zum zusammenführen von zwei Listen (defun CADDE:UNION (X Y) (cond ((null X) Y) ((member (car X) Y) (CADDE:UNION (cdr X) Y)) ('t (cons (car X) (CADDE:UNION (cdr X) Y))) ) ) (if (or (not STR-POLARADDANG) (= STR-POLARADDANG "")) (setq RETVAL (CADDE:STRDELIMITED LST-DEFAULTVALUES ";")) (progn (setq RETVAL (CADDE:STRTOKEN STR-POLARADDANG ";" 't) RETVAL (CADDE:UNION RETVAL LST-DEFAULTVALUES) RETVAL (vl-sort RETVAL '(lambda (V1 V2) (< (angtof V1 0) (angtof V2 0)) ) ) RETVAL (CADDE:STRDELIMITED RETVAL ";") ) ) ) RETVAL ) ;; Mapcar Magie... ;; Endgültige Fassung, alles andere waren nur Vorüberlegungen! ;; Schreibt Listen in ein externes File ;| Argumente: Symlist = Liste aus Symbolen, an die Listen gebunden sind Filename = Fullpathname für File Symlist: (CADDE:LST->FILE 'liste1 "datei1.lsp") oder auch so: (CADDE:LST->FILE '(liste1 liste2) "datei1.lsp") |; (defun CADDE:LST->FILE (SYMLIST FILENAME / FH RETVAL) (if (setq FH (open FILENAME "w")) (progn (foreach SYM (if (listp SYMLIST) SYMLIST (list SYMLIST) ) ;_ end of if (princ "(setq " FH) (princ SYM FH) (foreach ITEM (list (cons 'quote (list (eval SYM)))) (prin1 ITEM FH) ) ;_ end of foreach (princ ")" FH) ) ;_ end of foreach (close FH) (setq RETVAL 't) ) ;_ end of progn ) ;_ end of if RETVAL ;_ Rückgabe 'T für erfolgreich nil für Bad ) ;_ end of defun (princ)