Zgodność programów AutoLISP

Programy AutoLISP zazwyczaj nie wymagają wielu zmian, aby mogły zostać uruchomione na najnowszej wersji.

Jednak program AutoLISP może już nie działać poprawnie w najnowszej wersji w związku ze zmianą lub wycofaniem funkcji AutoLIST albo polecenia lub zmiennej systemowej produktu opartego na programie AutoCAD.

Uwaga: Począwszy od produktów opartych na programie AutoCAD 2014, niestandardowe aplikacje muszą działać w trybie bezpiecznym, gdy zmienna systemowa SECURELOAD jest ustawiona na wartość 1 lub 2. W trybie bezpiecznym produkt oparty na programie AutoCAD może wczytywać i uruchamiać tylko te pliki, które zawierają kod z zaufanych lokalizacji określonych przez zmienną systemową TRUSTEDPATHS. Aby uzyskać więcej informacji, zobacz temat „Informacje na temat bezpieczeństwa i zabezpieczania przed wirusami”.

Informacje ogólne

Nieaktualne polecenia i zmienne systemowe

Przejrzyj niestandardowe programy pod kątem poleceń i zmiennych systemowych, które zostały oznaczone jako wycofywane. W niektórych przypadkach wycofywane polecenie lub zmienna systemowa może być w dalszym ciągu używana przez programy niestandardowe, nawet jeśli nie można jej wprowadzić bezpośrednio w wierszu polecenia ani uzyskać do niej dostępu z poziomu interfejsu użytkownika.

Uwaga: Pomimo tego, że wycofywane polecenie lub zmienna systemowa może nadal działać w programie niestandardowym, nie gwarantuje się jej działania w przyszłej wersji produktu. Zaleca się przepisanie programów niestandardowych, aby wyeliminować z nich użycie wycofywanych poleceń i zmiennych systemowych.

W przypadku próby użycia wycofywanego polecenia lub zmiennej systemowej w programie niestandardowym przydatne mogą okazać się następujące techniki:

  • Poprzedzenie nazwy polecenia kropką. Na przykład .ZNACZNIK umożliwia użycie polecenia ZNACZNIK.
  • Unikanie wykonywania wycofywanej zmiennej systemowej za pomocą funkcji POLECENIE, która może zwrócić komunikat o błędzie Nieznane polecenie, a zamiast niej używanie funkcji GETVAR i ZMSYS. Na przykład funkcja (getvar "ZNACZNIK") zwraca bieżącą wartość zmiennej systemowej ZNACZNIK.
Uwaga: Poleceń i zmiennych systemowych usuniętych z produktu nie można przywrócić za pomocą wspomnianych wcześniej technik.

Produkty oparte na oprogramowaniu AutoCAD 2021 i nowsze

Obsługa znaków Unicode

Środowisko AutoLISP zostało zaktualizowane w celu obsługi znaków Unicode, co wpływa na funkcje używane do manipulowania ciągami lub zwracające ich wartości. Aby uzyskać dodatkowe informacje na temat funkcji zaktualizowanych w celu obsługi znaków Unicode, zobacz Co nowego lub zmiany w środowisku AutoLISP.

W zależności od funkcji używanych w programach w celu obsługi znaków Unicode mogą być potrzebne zmiany. Na przykład w porównaniu z wcześniejszymi wersjami, gdy znak Unicode zostanie przekazany do funkcji, zwrócona wartość funkcji ASCII może być teraz większa niż 255 lub inna. Zmienna systemowa LISPSYS umożliwia identyfikację domyślnego środowiska AutoLISP wczytanego do programu oraz sterowanie nim; 0 i 2 = obsługa MBCS (środowisko starszego typu) i 1 = obsługa Unicode.

Poniższy fragment kodu pokazuje, jak określić, które środowisko AutoLISP jest aktualnie wczytane do programu, oraz jak sterować uruchamianiem kodu na podstawie wczytanego środowiska:

(if (= (getvar "LISPSYS") 1)
  (alert (strcat 
             "Unicode support enabled"
             "\n(ASCII \"€\") returns 8364"
         )
  )
  (alert (strcat 
             "MBCS (Legacy) support enabled"
             "\n(ASCII \"€\") returns 128"
         )
  )
)
Uwaga: Podczas kompilowania plików kodu źródłowego programu AutoLISP (LSP) w środowisku Visual LISP Integrated Development Environment (VL IDE) lub za pomocą polecenia TAPLIKLISP bieżąca wartość zmiennej systemowej LISPSYS steruje formatem kompilowania plików. Plików skompilowanych z ustawieniem zmiennej LISPSYS na wartość 1, czyli na format Unicode, nie można wczytywać do programu AutoCAD 2020 ani jego wcześniejszych wersji. Aby móc wczytywać pliki we wcześniejszych wersjach programu, przed rozpoczęciem kompilacji należy zmienić wartość zmiennej LISPSYS na 0 lub 2. Spowoduje to jednak ograniczenie obsługi formatu Unicode.

Produkty oparte na oprogramowaniu AutoCAD 2020 i nowsze

Polecenie WSTAW

Polecenie WSTAW wyświetla teraz paletę Bloki, natomiast nowe polecenie WSTAWKLASYCZNIE wyświetla „klasyczne” okno dialogowe Wstaw. Jeśli używany program AutoLISP wymaga używania okna dialogowego Wstaw, konieczna będzie zmiana istniejącego programu. Wcześniej okno dialogowe Wstaw można było wyświetlać przy użyciu następujących instrukcji programu AutoLISP:

(initdia)
(command "insert")

Aby kontynuować wyświetlanie okna dialogowego Wstaw w używanych programach AutoLISP, programy te należy zmienić tak, aby korzystać w nich z jednego z poniższych sposobów:

  • (initcommandversion 2)
    (initdia)
    (command "insert")
  • (command "classicinsert")

Produkty oparte na programie AutoCAD 2019 i jego nowszych wersjach

Zmienna systemowa LOCALE

Zmienna systemowa LOCALE zwraca obecnie kod zawierający skrót składający się z dwóch lub większej liczby liter, który reprezentuje bieżący język, a nie trzyliterowy skrót, który reprezentował język i podjęzyk. Ten skrót składający się z dwóch lub większej liczby liter jest oparty na funkcji GetLocaleInfo systemu Windows używającej stałej LOCALE_SISO639LANGNAME.

Przed produktami opartymi na programie AutoCAD 2019 kod był trzyliterowym skrótem zwracanym przez funkcję GetLocaleInfo systemu Windows używającą stałej LOCALE_SABBREVLANGNAME. Ten trzyliterowy skrót był oparty na dwóch informacjach: dwuliterowym skrócie, który wskazywał język i trzeciej literze, która wskazywała podjęzyk. Skrót ENU reprezentował na przykład kombinację języka angielskiego (EN) i Stanów Zjednoczonych (U) jako podjęzyka.

Produkty oparte na programie AutoCAD 2017 i jego nowszych wersjach

Zmienne systemowe CDATE, DATE i inne dotyczące daty\godziny

Wartości przechowywane w zmiennych systemowych CDATE i DATE nie reprezentują już bieżącej daty/godziny z dokładnością do milisekundy ani jednej setnej sekundy. Najmniejszą jednostką czasu są teraz sekundy i w nich wyrażane są wartości tych obu zmiennych. W razie potrzeby mierzenia przedziałów czasu z dokładnością większą niż jedna sekunda należy rozważyć użycie wartości zwracanej przez zmienną systemową MILLISECS, która reprezentuje czas w milisekundach od momentu ostatniego uruchomienia stacji roboczej.

Usunięcie milisekund miało także wpływ na następujące zmienne systemowe dotyczące daty\godziny:

  • TDCREATE
  • TDINDWG
  • TDUCREATE
  • TDUPDATE
  • TDUSRTIMER
  • TDUUPDATE

Jeśli którykolwiek z istniejących programów wymaga podawania różnic czasu z dokładnością do najbliższej milisekundy, można pobierać dwie lub trzy ostatnie cyfry wartości przechowywanej w zmiennej systemowej MILLISECS i je dołączać do wartości zwracanej przez zmienną systemową CDATE. Powstawałaby wtedy wartość porównywalna z wartością zwracaną przez zmienną systemową CDATE w produktach opartych na programie AutoCAD w wersji 2016 i wcześniejszych. Poniższy przykładowy kod pokazuje, jak w wybranej wersji oprogramowania AutoCAD można uzyskiwać wartość daty i godziny zawierającą milisekundy:

; Returns a CDATE value that includes milliseconds based on release
; Usage: (CDate)
; Replaces (rtos (getvar "CDATE") 2 8)
(defun CDate ( / ms)
  ; Check to see which AutoCAD release is being used
  (if (<= (atof (getvar "ACADVER")) 22.0)
    (rtos (getvar "CDATE") 2 8)
    (progn
      ; Get the current milliseconds and append it to the CDATE value
      (setq ms (itoa (getvar "MILLISECS")))
      (strcat (rtos (getvar "CDATE") 2 6)(substr ms (- (strlen ms) 2)))
    )
  )
)
Zmienna systemowa EPDFSHX

Zmienna systemowa EPDFSHX wprowadzona w programie AutoCAD 2016 Update 1 ma nową nazwę PDFSHX. W związku ze zmianą nazwy należy odpowiednio zmodyfikować wszystkie instrukcje języka AutoLISP odwołujące się do zmiennej systemowej EPDFSHX. Zmiana dotyczy najprawdopodobniej następujących funkcji w programach niestandardowych:

  • GETVAR — będzie zwracana wartość nil, a nie liczba całkowita 0 lub 1
  • SETVAR — wykonywanie programu może zostać wstrzymane, czemu towarzyszy komunikat o błędzie ; błąd: odrzucono ustawienia zmiennych programu AutoCAD: „epdfshx”
  • COMMAND — wykonywanie programu może zostać wstrzymane, czemu towarzyszy komunikat o błędzie EPDFSHX Nieznane polecenie „EPDFSHX”

Produkty oparte na programie AutoCAD 2016 i jego nowszych wersjach

Pliki podpisane cyfrowo

Pliki AutoLISP można teraz podpisywać cyfrowo. Dodanie podpisu cyfrowego do pliku AutoLISP pozwala wczytać go do środowiska rysunku w programie AutoCAD bez ostrzeżenia, że plik nie jest zaufany. Podpisanych cyfrowo plików VLX nie można wczytywać do produktów opartych na programie AutoCAD 2015 ani wcześniejszych.

Funkcja osnap

Funkcja obiekt nie obsługuje już trybu lokalizacji względem obiektów Szybki (qui). Odniesienia do trybu qui muszą być usunięte ze wszystkich wyrażeń, które używają funkcji obiekt w swoich programach AutoLISP. Jeśli tryb nie zostanie usunięty, funkcja osnap zwróci wartość nil zamiast wartości współrzędnych dla poprawnego punktu w obszarze rysunku.