В программы на языке AutoLISP® часто требуется внести небольшие изменения, чтобы они могли выполняться в новой версии.
Однако программа AutoLISP может работать неправильно в последней версии, так как функция AutoLISP либо команда программы или системная переменная на основе AutoCAD была изменена или устарела.
Проверьте свои пользовательские программы, чтобы выявить команды и системные переменные, которые могли устареть. В некоторых случаях устаревшие команды и системные переменные могут использоваться в таких программах, даже если их нельзя ввести непосредственно в командную строку или запустить через пользовательский интерфейс.
При необходимости использовать устаревшую команду или системную переменную в пользовательской программе можно обратиться к следующим методам.
Среда AutoLISP обновлена и теперь поддерживает символы Юникода, что влияет на используемые функции, с которыми ведется работа и которые возвращают строковые значения. Дополнительные сведения о функциях, которые были обновлены для поддержки Юникода, см. в разделе о новых возможностях и изменениях в работе AutoLISP.
В зависимости от используемых в программах функций для работы с символами Юникода могут потребоваться изменения. Например, возвращаемое значение функции ASCII теперь может быть больше 255 или различаться, если символ Юникода передается функции, в сравнении с более ранними версиями. С помощью системной переменной LISPSYS можно управлять загружаемой в программу средой AutoLISP по умолчанию и определять ее: 0 и 2 = поддержка MBCS (среда из предыдущих версий), 1 = поддержка Юникода.
В следующем фрагменте кода показан способ определения среды AutoLISP, которая загружена в программу в настоящий момент, а также управление выполнением кода на основе загруженной среды:
(if (= (getvar "LISPSYS") 1)
(alert (strcat
"Unicode support enabled"
"\n(ASCII \"€\") returns 8364"
)
)
(alert (strcat
"MBCS (Legacy) support enabled"
"\n(ASCII \"€\") returns 128"
)
)
)
Теперь команда ВСТАВИТЬ открывает палитру блоков, а новая команда КЛВСТАВИТЬ отображает устаревшее диалоговое окно «Вставка». Если программа на языке AutoLISP использует диалоговое окно «Вставка», то необходимо изменить текущую программу. Возможно, ранее использовались следующие инструкции AutoLISP для отображения диалогового окна «Вставка»:
(initdia) (command "insert")
Чтобы продолжить открывать диалоговое окно «Вставка» с помощью программ на языке AutoLISP, необходимо внедрить в эти программы один из указанных ниже подходов.
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
Теперь системная переменная LOCALE возвращает код, который содержит сокращение минимум из двух букв и представляет текущий язык. Ранее использовалось сокращение из трех букв, которое представляло язык и подъязык. Сокращение минимум из двух букв основано на функции GetLocaleInfo Windows, использующей константу LOCALE_SISO639LANGNAME.
До выпуска программ на основе AutoCAD 2019 код состоял из трех букв, возвращаемых функцией GetLocaleInfo Windows с использованием константы LOCALE_SABBREVLANGNAME. Сокращение из трех букв было основано на двух параметрах: сокращении из двух букв, обозначающем язык, и третьей букве, используемой для обозначения подъязыка. Например, сокращение ENU состояло из сокращения EN, обозначающего английский (English), и буквы U, обозначающей США (United States).
В значениях системных переменных CDATE и DATE больше не отражаются текущая дата и время с точностью до тысячной или сотой доли секунды. Теперь наименьшей единицей времени для выражения значений этих переменных являются секунды. Если необходимо отследить промежутки времени с точностью до долей секунды, используйте значение системной переменной MILLISECS, которое отражает разницу во времени с момента запуска компьютера в миллисекундах.
В следующих системных переменных, связанных с датой и временем, также больше не используются миллисекунды:
Если для любой из программ требуется свести различия времени к ближайшей миллисекунде, можно получить последние две или три цифры значения, хранящегося в системной переменной MILLISECS, и добавить их к значению, которое вернула системная переменная CDATE, в результате чего будет получено значение, сравнимое с возвращенным системной переменной CDATE в продуктах на основе AutoCAD 2016 и более ранних версиях. Следующий пример кода показывает, что можно сделать, чтобы получить значение даты/времени, которое включает миллисекунды, на основании целевого выпуска AutoCAD.
; 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)))
)
)
)
Системная переменная EPDFSHX, представленная в AutoCAD 2016 Update 1, переименована в PDFSHX. В результате изменения названия следует пересмотреть все утверждения AutoLISP, которые ссылаются на системную переменную EPDFSHX. Функции, на которые скорее всего повлияет данное изменение в пользовательских программах:
В файлах AutoLISP теперь поддерживается цифровая подпись. Если добавить к файлу AutoLISP цифровую подпись, то при его загрузке в среду чертежа AutoCAD не будет отображаться предупреждение о том, что файл получен из ненадежного источника. Файлы VLX с цифровой подписью нельзя загружать в продукты на базе AutoCAD 2015 или более ранних версий.
Функция объектной привязки больше не поддерживает быстрый режим объектной привязки qui. Ссылки на режим qui необходимо удалить из всех операторов, использующих функцию объектной привязки в программах AutoLISP. Если режим не удаляется, функция объектной привязки возвращает NIL, а не значение координат для допустимой точки в области чертежа.