Für AutoLISP-Programme sind in der Regel sehr wenige Änderungen erforderlich, damit sie in der aktuellen Version ausgeführt werden können.
Ein AutoLISP-Programm wird jedoch möglicherweise in der neuesten Version nicht mehr richtig ausgeführt, da eine AutoLISP-Funktion oder ein Befehl des AutoCAD-basierten Produkts oder eine Systemvariable geändert wurde oder nicht mehr unterstützt wird.
Überprüfen Sie Ihre benutzerdefinierten Programme auf Befehle und Systemvariablen, die als veraltet gekennzeichnet wurden. In einigen Fällen funktionieren veraltete Befehle oder Systemvariablen möglicherweise weiterhin mit ihren benutzerdefinierten Programmen, obwohl sie nicht direkt in der Befehlszeile eingegeben oder über die Benutzeroberfläche aufgerufen werden können.
Die folgenden Techniken können nützlich sein, wenn Sie veraltete Befehle oder Systemvariablen in einem benutzerdefinierten Programm verwenden möchten:
Die AutoLISP-Umgebung wurde aktualisiert und unterstützt jetzt Unicode-Zeichen, was sich auf Funktionen auswirkt, die zum Bearbeiten oder Zurückgeben von Zeichenfolgenwerten verwendet werden. Weitere Informationen zu den Funktionen, die für die Unicode-Unterstützung aktualisiert wurden, finden Sie unter Neue Funktionen oder Änderungen in AutoLISP.
Basierend auf den in Ihren Programmen verwendeten Funktionen müssen Sie möglicherweise Änderungen vornehmen, damit Unicode-Zeichen verwendet werden können. Der Rückgabewert der ASCII-Funktion kann nun beispielsweise größer als 255 sein oder im Vergleich zu früheren Versionen einen anderen Wert aufweisen, wenn ein Unicode-Zeichen an die Funktion übergeben wird. Sie können die Systemvariable LISPSYS verwenden, um die in das Programm geladene vorgabemäßige AutoLISP-Umgebung zu identifizieren und zu steuern; 0 und 2 = MBCS-Unterstützung (alte Umgebung) und 1 = Unicode-Unterstützung.
Das folgende Code-Snippet zeigt, wie Sie bestimmen, welche AutoLISP-Umgebung derzeit in das Programm geladen ist, und wie die Code-Ausführung auf Grundlage der geladenen Umgebung gesteuert wird:
(if (= (getvar "LISPSYS") 1) (alert (strcat "Unicode support enabled" "\n(ASCII \"€\") returns 8364" ) ) (alert (strcat "MBCS (Legacy) support enabled" "\n(ASCII \"€\") returns 128" ) ) )
Der Befehl EINFÜGE zeigt jetzt die Blockpalette an, während der neue Befehl KLASSISCHEINFÜG jetzt das "alte" Dialogfeld Einfügen anzeigt. Wenn die Verwendung des Dialogfelds Einfügen für Ihr AutoLISP-Programm wichtig ist, müssen Sie das vorhandene Programm ändern. Bisher haben Sie möglicherweise die folgenden AutoLISP-Anweisungen verwendet, um das Dialogfeld Einfügen anzuzeigen:
(initdia) (command "insert")
Um das Dialogfeld Einfügen auch weiterhin mit Ihren AutoLISP-Programmen anzuzeigen, müssen Sie Ihre vorhandenen Programme so ändern, dass einer dieser Ansätze genutzt wird:
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
Die Systemvariable LOCALE gibt jetzt einen Code zurück, der eine Abkürzung aus mindestens zwei Buchstaben enthält, die die aktuelle Sprache darstellt, und nicht eine Abkürzung aus drei Buchstaben, die eine Sprache und Sprachvariante darstellt. Die aus mind. zwei Buchstaben bestehende Abkürzung basiert auf der Windows-Funktion GetLocaleInfo, die die Konstante LOCALE_SISO639LANGNAME verwendet.
In Vorgängerversionen von AutoCAD 2019-basierten Produkten bestand der Code aus einer Abkürzung mit drei Buchstaben, die von der Windows-Funktion GetLocaleInfo unter Verwendung der Konstanten LOCALE_SABBREVLANGNAME zurückgegeben wurde. Die aus drei Buchstaben bestehende Abkürzung bestand aus zwei Datenquellen; einem aus zwei Buchstaben bestehenden Sprachenkürzel und einem dritten Buchstaben, der die Sprachvariante angab. Beispiel: ENU stellte die Kombination der englischen Sprache (EN) und den Vereinigten Staaten (United States, U) als Sprachvariante dar.
Die in den Systemvariablen CDATE und DATE gespeicherten Werte stellen nicht mehr das/die auf eine Millisekunde oder eine Hundertstelsekunde genaue aktuelle Datum/Uhrzeit dar. Sekunden stellen nun die kleinste Zeiteinheit dar, in der die Werte dieser beiden Systemvariablen ausgedrückt werden. Wenn Sie die Zeitintervalle in einer kleineren Einheit als eine Sekunde nachverfolgen müssen, sollten Sie den von der Systemvariable MILLISECS zurückgegebenen Wert berücksichtigen, der die Zeitdifferenz seit dem Start der Arbeitsstation in Millisekunden speichert.
Die folgenden datums-\zeitbezogenen Systemvariablen waren auch durch das Entfernen der Millisekunden betroffen:
Wenn Sie bei einem Ihrer vorhandenen Programme den Zeitunterschied bis zur nächsten Millisekunde benötigen, können Sie die letzten zwei oder drei Ziffern des in der Systemvariable MILLISECS gespeicherten Werts abrufen und diese an den von der Systemvariable CDATE ausgegebenen Wert anhängen. So entsteht ein Wert, der mit dem von der Systemvariable CDATE bei AutoCAD 2016-basierten Produkten und Produkten einer früheren Version vergleichbar ist. Das folgende Codebeispiel zeigt, wie Sie basierend auf der Ziel-AutoCAD-Version einen Wert für Datum/Zeit mit Millisekunden abrufen können:
; 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))) ) ) )
Die Systemvariable EPDFSHX auf AutoCAD 2016 Update 1 eingeführt wurde in PDFSHX umbenannt. Aufgrund dieser Namensänderung müssen alle AutoLISP-Anweisungen, die auf die Systemvariable EPDFSHX verweisen, überarbeitet werden. Dies sind die Funktionen, die höchstwahrscheinlich durch diese Änderung in Ihren benutzerdefinierten Programmen betroffen sind:
Jetzt können AutoLISP-Dateien digital signiert werden. Durch das digitale Signieren kann eine AutoLISP-Datei ohne Warnung der Benutzer, dass die Datei nicht vertrauenswürdig ist, in die AutoCAD-Zeichnungsumgebung geladen werden. Digital signierte VLX-Dateien können nicht in auf AutoCAD 15 oder früher basierende Produkte geladen werden.
Die Funktion OFang unterstützt nicht mehr den Objektfangmodus qui. Verweise auf die qui entfernt werden muss, verwenden Sie die alle OFANG-Funktionen in Ihren AutoLISP-Anwendungen verwenden. Wenn der Modus nicht entfernt wird, geben die OFang-Funktionen NULL anstelle eines Koordinatenwerts für einen gültigen Punkt im Zeichenbereich zurück.