Сведения о совместимости AutoLISP

В программы на языке AutoLISP® часто требуется внести небольшие изменения, чтобы они могли выполняться в новой версии.

Однако программа AutoLISP может работать неправильно в последней версии, так как функция AutoLISP либо команда программы или системная переменная на основе AutoCAD была изменена или устарела.

Прим.: Начиная с программных продуктов на основе AutoCAD 2014, пользовательские приложения должны работать в безопасном режиме, когда для системной переменной SECURELOAD установлено значение 1 или 2. При работе в режиме безопасности программа на основе AutoCAD ограничивается загрузкой и выполнением файлов, содержащих код из доверенных местоположений; доверенные местоположения определяются системной переменной TRUSTEDPATHS. Для получения дополнительной информации см. раздел «Безопасность и антивирусная защита».

Общая информация

Устаревшие команды и системные переменные

Проверьте свои пользовательские программы, чтобы выявить команды и системные переменные, которые могли устареть. В некоторых случаях устаревшие команды и системные переменные могут использоваться в таких программах, даже если их нельзя ввести непосредственно в командную строку или запустить через пользовательский интерфейс.

Прим.: Несмотря на то, что устаревшие команды и системные переменные могут работать в пользовательских программах, нельзя гарантировать, что они продолжат работать в последующих версиях продукта. Рекомендуется переделать пользовательские программы, так чтобы устаревшие команды и системные переменные в них не использовались.

При необходимости использовать устаревшую команду или системную переменную в пользовательской программе можно обратиться к следующим методам.

  • Поставьте точку перед командой. Например, чтобы воспользоваться командой BLIPMODE, введите .BLIPMODE.
  • Не используйте устаревшие системные переменные в рамках функции COMMAND, так как это может привести к появлению ошибки «Неизвестная команда». Вместо этого рекомендуется использовать функции GETVAR или SETVAR. Например, выражение (getvar "BLIPMODE") возвращает текущее значение системной переменной BLIPMODE.
Прим.: Команды и системные переменные, которые были удалены из продукта, не могут быть восстановлены с помощью описанного выше способа.

Программы на основе AutoCAD 2021

Поддержка Юникода

Среда 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 (LSP) с помощью интегрированной среды разработки Visual LISP (VL IDE) или команды СОЗДПРИЛLISP текущее значение системной переменной LISPSYS определяет формат, в котором выполняется компиляция файлов. Файлы, скомпилированные при значении переменной LISPSYS, равном 1 (формат Юникода), невозможно загрузить в AutoCAD 2020 и более ранние версии. Чтобы файлы можно было загрузить в более ранние версии, перед компиляцией файлов задайте для системной переменной LISPSYS значение 0 или 2, однако это ограничит поддержку Юникода.

Программы на основе AutoCAD 2020

Команда ВСТАВИТЬ

Теперь команда ВСТАВИТЬ открывает палитру блоков, а новая команда КЛВСТАВИТЬ отображает устаревшее диалоговое окно «Вставка». Если программа на языке AutoLISP использует диалоговое окно «Вставка», то необходимо изменить текущую программу. Возможно, ранее использовались следующие инструкции AutoLISP для отображения диалогового окна «Вставка»:

(initdia)
(command "insert")

Чтобы продолжить открывать диалоговое окно «Вставка» с помощью программ на языке AutoLISP, необходимо внедрить в эти программы один из указанных ниже подходов.

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

Программы на основе AutoCAD 2019 и более поздних версий

Системная переменная LOCALE

Теперь системная переменная LOCALE возвращает код, который содержит сокращение минимум из двух букв и представляет текущий язык. Ранее использовалось сокращение из трех букв, которое представляло язык и подъязык. Сокращение минимум из двух букв основано на функции GetLocaleInfo Windows, использующей константу LOCALE_SISO639LANGNAME.

До выпуска программ на основе AutoCAD 2019 код состоял из трех букв, возвращаемых функцией GetLocaleInfo Windows с использованием константы LOCALE_SABBREVLANGNAME. Сокращение из трех букв было основано на двух параметрах: сокращении из двух букв, обозначающем язык, и третьей букве, используемой для обозначения подъязыка. Например, сокращение ENU состояло из сокращения EN, обозначающего английский (English), и буквы U, обозначающей США (United States).

Программы на основе AutoCAD 2017 и более поздних версий

CDATE, DATE и другие связанные с датой и временем системные переменные

В значениях системных переменных CDATE и DATE больше не отражаются текущая дата и время с точностью до тысячной или сотой доли секунды. Теперь наименьшей единицей времени для выражения значений этих переменных являются секунды. Если необходимо отследить промежутки времени с точностью до долей секунды, используйте значение системной переменной MILLISECS, которое отражает разницу во времени с момента запуска компьютера в миллисекундах.

В следующих системных переменных, связанных с датой и временем, также больше не используются миллисекунды:

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

Если для любой из программ требуется свести различия времени к ближайшей миллисекунде, можно получить последние две или три цифры значения, хранящегося в системной переменной 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

Системная переменная EPDFSHX, представленная в AutoCAD 2016 Update 1, переименована в PDFSHX. В результате изменения названия следует пересмотреть все утверждения AutoLISP, которые ссылаются на системную переменную EPDFSHX. Функции, на которые скорее всего повлияет данное изменение в пользовательских программах:

  • GETVAR — с большей вероятностью вернет значение nil, а не целое значение 0 или 1.
  • SETVAR — выполнение программы может приостановиться с появлением сообщения об ошибке Настройка переменной AutoCAD отвергнута: epdfshx.
  • COMMAND — выполнение программы может приостановиться с появлением сообщения об ошибке EPDFSHX Неизвестная команда EPDFSHX.

Программы на основе AutoCAD 2016 и более поздних версий

Файлы с цифровой подписью

В файлах AutoLISP теперь поддерживается цифровая подпись. Если добавить к файлу AutoLISP цифровую подпись, то при его загрузке в среду чертежа AutoCAD не будет отображаться предупреждение о том, что файл получен из ненадежного источника. Файлы VLX с цифровой подписью нельзя загружать в продукты на базе AutoCAD 2015 или более ранних версий.

функция объектной привязки

Функция объектной привязки больше не поддерживает быстрый режим объектной привязки qui. Ссылки на режим qui необходимо удалить из всех операторов, использующих функцию объектной привязки в программах AutoLISP. Если режим не удаляется, функция объектной привязки возвращает NIL, а не значение координат для допустимой точки в области чертежа.