AutoCAD... AutoLISP... VisualLISP...

  [3] Wczytywanie własnych ustawień zmiennych systemowych

index  

  Zainspirowany nieco dyskusją która swego czasu toczyła się na autocadowym forum.cad.pl pod tytułem "Automatyczne ustawianie wybranych zmiennych systemowych AutoCAD-a", przedstawiam tutaj moją wersję rozwiązania tego problemu. Zadanie na pierwszy rzut oka wydaje się proste łatwe i przyjemne, lecz jak się okazuje później, prawdą jest powiedzenie że pozory często mylą.
O tym czym są zmienne systemowe AutoCAD-a, do czego służą i w jaki sposób je wykorzystywać najlepiej byłoby omówić osobno w oddzielnym miejscu, teraz skupiamy się na tytułowym wątku.

Moja koncepcja rozwiązania tego problemu, najogólniej polega na oddzieleniu źródła danych (tutaj: zmienne systemowe i ich wartości) i programu (Lisp oczywiście) który będzie te dane przetwarzał. Rozwiązanie to pociąga za sobą w naturalny sposób stworzenie osobnego pliku z danymi, który zostanie wczytywany. Oczywiście format pliku powinien być jasny nawet dla osób nie znających Lisp-a, nie posiadających żadnych narzędzi itd. Wybór pada zatem na plik tekstowy (edytowalny w zwykłym notatniku), o prostej strukturze gromadzenia informacji, nieco przestarzały - windowsowy plik typu *.ini.
O budowie, sposobach wykorzystywania, zaletach i wadach plików tego typu też należałoby napisać osobno, teraz wystarczą tylko podstawowe informacje. Poniżej przedstawiona jest zawartość przykładowego pliku o nazwie svar.ini, który jest wymagany dla działania programu svar.vlx. Struktura jego jest bardzo prosta, dane są zgromadzone w następujacy sposób:
nazwa_zmiennej_systemowej = wartość_zmiennej
itd. linia po linii. Cała reszta (odczyt, wielostopniowe sprawdzenie poprawności danych, zmiana określonej zmiennej) należy już do programu.
    Krótko wspomnę tutaj o problemach które trzeba było rozwiązać programując ten (pozornie) prosty proces jakim jest zmiana zmiennej systemowej. Od początku zatem:
    • plik svar.ini musi istnieć na dysku i musi zostać znaleziony
    • plik musi być poprawny, czyli musi zawierać grupę [VARIABLES] a w niej co najmniej jedną poprawną (pod względem składni) linię z danymi
    • odczytana nazwa zmiennej (wszystko przed znakiem "=") musi być poprawną nazwą zmiennej systemowej AutoCAD-a (w dowolnej wersji) - co za tym idzie, program musi sprawdzić czy taka zmienna istnieje.
    • jeżeli zmienna istnieje, należy sprawdzić czy można ją zmienić, innymi słowy - pomimo tego że zmienna jest poprawna i istnieje, nie może być w trybie tylko-do-odczytu.
    • odczytana z pliku wartość zmiennej (jest typu STR) musi zostać przekonwertowana na odpowiedni typ danych. Program musi sprawdzić poprawność wartości, sprawdzić dopuszczalny typ danych (STR, INT, REAL, LIST) i dopiero ją przekonwertować na właściwy typ danych.
    • Program musi sprawdzić poprawność zakresu wartości zmiennej systemowej. Przykładowo: zmienna BLIPMODE może mieć wartość (typu INT) 0 lub 1, zatem pomimo tego że dowolna liczba całkowita spełnia warunek typu danych (INT), poprawnymi wartościami są tylko liczby 0 i 1.
Po sprawdzeniu tych wszystkich warunków, dopiero teraz można dokonać zmiany wartości zmiennych systemowych. Napisany przeze mnie program wykonuje wszystkie te (i inne) testy, zapewniając zmianę wszystkich poprawnych danych odczytanych z pliku svar.ini. Złe, błędne i niepoprawne wpisy pod względem składni, nazwy zmiennej, rodzaju, wartości, typu danych itp. są po prostu pomijane. Po załadowaniu dostępne są dwa polecenia: SVAR - zmienia zmienne na podstawie pliku svar.ini, oraz SVARMODE - określające czy po zmianie wartości zmiennych są wyświetlane komunikaty.

Program działa na wszystkich dotychczas znanych wersjach AutoCAD-a począwszy od wersji 2000.

  Plik: svar.zip   Polecenia: SVAR i SVARMODE