Функции entmod и entmake
В AutoCAD 2004 и более ранних версиях функции entmod и entmake по-другому работают с цветом. Код группы DXF 62 содержит значения индекса цвета AutoCAD (ACI), а код 420 хранит значения полноцветных цветов. В случае конфликта полноцветного значения и значения ACI AutoCAD использует значение 420, поэтому прежде чем использовать значение кода 62, следует удалить значение кода 420. Для получения дополнительных сведений выполните полную установку AutoCAD и просмотрите файл color-util.lsp, находящийся в папке \Sample\VisualLISP.
Из палитры
Если имеется полная установка AutoCAD, программы для работы с полноцветными изображениями находятся в папке \Sample\VisualLISP в файле color-util.lsp. Программы, которые можно использовать для операций, относящихся к полноцветным изображениям, например получение компонентов с номером цвета, преобразование индекса или имени цвета в полноцветное значение, возврат кода группы DXF и работа со списком элементов.
Следующие функции AutoLISP предоставляют доступ к интерфейсу пользователя для работы с полноцветными изображениями:
(acad_truecolordlg color [allowbylayer] [currentlayercolor]).
Запрос цветов с помощью диалогового окна. Параметр цвета представляет собой точечную пару, описывающую цвет по умолчанию; первым элементом точечной пары должен быть один из кодов группы DXF, относящихся к цвету (62, 420 или 430). Если имеется параметр allowbylayer и его значение отлично от nil, отображаются кнопки ByLayer и ByBlock. При успешном выполнении операции функция возвращает список одной или нескольких точечных пар, описывающих выбранный цвет. Последняя точечная пара в списке показывает выбранный цвет. Функция возвращает значение nil, если пользователь отменит отображение диалогового окна.
(acad_truecolorcli color [allowbylayer] [alternatePrompt]).
Запрашивает цвета в командной строке. Первые два параметра аналогичны acad_truecolordlg, а третий параметр является дополнительной строкой подсказки. Если эта строка пропущена, в качестве значения по умолчанию используется значение "Новый цвет".
Изменения, которые могут влиять на сценарии
На существующие сценарии могут повлиять следующие команды или системные переменные:
ADCNAVIGATE - При использовании команды ЦУПЕРЕЙТИ для открытия Центра управления больше не требуется нажимать клавиши ENTER или ESC для отображения подсказки "Путь". Это изменение может повлиять на существующие сценарии.
УДЛИНИТЬ - Если перед вводом команды УДЛИНИТЬ предварительно не был выбран объект при появлении подсказки "Выбрать удлиняемые объекты", то теперь отображается запрос на указание противоположного угла секущей рамки. Это изменение может повлиять на существующие сценарии, в которых вызывается команда УДЛИНИТЬ и задается точка выбора, невыбирающая объекты. Чтобы исправить старые сценарии, можно исключить пункты, в которых не выбираются объекты.
-ВСТАВИТЬ - В случае использования нового параметра "Одинаковый масштаб" в диалоговом окне "Описание блока" запрос на ввод отдельных значений коэффициентов масштаба по осям X,Y,Z не отображается при вставке блока с помощью команды -ВСТАВИТЬ. Это изменение может повлиять на существующие сценарии, в которых используется эта команда.
МЕНЮЗАГР - По умолчанию команда МЕНЮЗАГР загружает файлы CUI в AutoCAD 2006. Чтобы выполнить загрузку меню из файлов MNU или MNS в AutoCAD 2006, необходимо указать расширение в имени файла, как показано в следующем примере:
(команда "менюзагр" "myMenu.mnu")
Однако вместо того чтобы изменять код, настоятельно рекомендуется открыть старые файлы меню в AutoCAD 2006 перед запуском приложений, в которых они используются. AutoCAD автоматически преобразует их в файлы CUI, и файлы CUI будут загружены с использованием существующего кода, в котором не указано расширение файла.
Старый код, в котором указаны расширения MNU, MNS или MNC, следует изменить на ссылку на файл CUI, а приложения на основе AutoCAD 2006 должны поставляться с файлами CUI, а не MNU, MNS или MNC.
ОБРЕЗАТЬ - Если перед вводом команды ОБРЕЗАТЬ предварительно не был выбран объект при появлении подсказки "Выбрать обрезаемые объекты", то теперь отображается запрос на указание противоположного угла секущей рамки. Это изменение может повлиять на существующие сценарии, в которых вызывается команда ОБРЕЗАТЬ и задается точка выбора, невыбирающая объекты. Чтобы исправить старые сценарии, можно исключить пункты, в которых не выбираются объекты.
Объект AcadOle
Чтобы использовать VBA для вставки в AutoCAD информации из другого приложения, используйте объект AcadOle. Дополнительные сведения об объекте AcadOle можно найти в VBA Object Browser.
Ошибки загрузки
Если при выполнении команды ЗАГРУЗИТЬ для файла VLX с отдельным пространством имен возникает ошибка, возможно, некоторые функции были экспортированы в пространство имен текущего документа до обнаружения ошибки. Чтобы обеспечить экспорт в текущий документ правильной версии всех функций, необходимо исправить ошибку, выполнить повторную компиляцию и перезагрузить файл VLX.
После того, как команда CUILOAD загрузить частичное меню в MDI, файл MNL для этого меню загружается один раз для каждого открытого документа, причем взаимодействие с пользователем осуществляется в текущем документе. Чтобы предотвратить появление ненужных печатных сообщений или запросов пользователя при инициализации программы AutoCAD с несколькими рисунками, рекомендуется не включать взаимодействие с пользователем в код MNL LISP. Вместо этого загрузите необходимые файлы AutoLISP с помощью кода MNL для последующего выбора элементов меню. Используйте файл acad.lsp или acaddoc.lsp для выполнения кода AutoLISP при открытии рисунка.
При передаче аргумента имени файла в метод ActiveX UnloadDVB с помощью функции vla-unloadDVB возникает ошибка, если в качестве разделителей используется одна косая черта. Рекомендуется при задании аргументов имени файла в качестве разделителей использовать двойные обратные косые черты при вызове функций vla-loadDVB, vla-RunMacro и vla-unloadDVB.
Отображение диалогового окна "Многодокументная среда"
Диалоговое окно "Многодокументная среда" позволяет изменять функции по умолчанию при инициализации среды AutoLISP. Это диалоговое окно отображается в следующих случаях.
В разделе реестра "Не отображать значение AcadLspAsDocDlg" установлено значение 0. Сценарии не запущены и приложения AutoLISP и ActiveX не запущены. Для системной переменной ACADLSPASDOC установлено значение 0. В пути поиска AutoCAD существует файл acad.lsp. В пути поиска AutoCAD не существует файл acaddoc.lsp. Для системной переменной SDI установлено значение 0.
Если выполняются все эти условия, то диалоговое окно "Многодокументная среда" отображается в каждом сеансе при первом открытии второго документа.
Ручки
AutoCAD более не поддерживает ручки на невыбранных объектах. В результате аргумент ручки функции AutoLISP sssetfirst игнорируется и функция ssgetfirst возвращает значение nil для первого возращенного набор объектов.
Серия неверной печати
При печати списка, содержащего более 4000 символов, возникает циклическое переполнение буфера фиксированного размера, в результате чего при просмотре по сети результаты отображаются неправильно. Чтобы устранить эту ошибку можно исправить код приложений AutoLISP, чтобы одновременно распечатывалось менее 4000 символов. Это означает разбиение распечатываемых результатов на несколько выражений печати.
Уведомления
В некоторых случаях уведомления vlr-sysVarWillChange и vlr-sysVarChanged появляются несколько раз для одного изменения системной переменной.
Видимость процесса AutoCAD
Вызываемые при загрузке программы сценарии AutoLISP® должны проверять видимость процесса AutoCAD. Если приложение невидимо, то выполнять пакет не следует, так как приложение может выполнять вывод на печать или публикацию в фоновом режиме. Для проверки видимости процесса AutoCAD служит свойство Visible объекта Application в объектной модели AutoCAD.
Видимость процесса AutoCAD
Вызываемые при загрузке программы сценарии VBA должны проверять видимость процесса AutoCAD. Если приложение невидимо, то выполнять пакет не следует, так как приложение может выполнять вывод на печать или публикацию в фоновом режиме. Для проверки видимости процесса AutoCAD служит свойство Visible объекта Application в объектной модели AutoCAD.
Возвраты каретки
При использовании в Visual LISP® IDE символ выхода не выполняет возврат каретки. Вместо этого текст отображается сразу после последнего распечатанного текста. Чтобы решить эту проблему, можно вместо \r использовать символ (CHR 13).
Закрытие связанных приложений
Если процедура AutoLISP более не использует объект за пределами AutoCAD, например объект Microsoft Excel, вызовите функцию (vlax-release-object), чтобы обеспечить правильное закрытие приложения. Освобождение объектов с помощью функции (vlax-release-object...) может занимать некоторое время. Реальное освобождение может не произойти до следующей процедуры автоматического сбора мусора. Можно напрямую вызвать процедуру (gc), чтобы принудительно запустить сбор мусора в определенном месте внутри кода. Однако при вызове процедуры сбора мусора (gc) может ухудшаться производительность. Рекомендуется избегать вызова процедур (gc) в тех местах, где существует вероятность вызова в строке несколько раз, например внутри циклов.
Если приложение, связанное с объектом, не закрывается после вызова функции (gc), то это значит, что функция (vlax-release-object) вызывалась не для всех объектов за пределами AutoCAD.