Vlax ename vla object что это
Список функций Visual Lisp
(VL-AUTOCAD-DEFUN) — определяет имя функции Visual LISP в AutoLisp.
(VL-AUTOCAD-UNDEFUN) — отменяет имя функции Visual LISP в AutoLisp. T, если отменила, и Nil, если нет (например функция не была определена в AutoLisp).
(VL-CONSP) — определяет, действительно ли переменная — список.
Пример:
(VL-DIRECTORY-FILES) — ищет нужные файлы в каталоге (DIRECTORY); если каталог Nil или отсутствует, используется текущий каталог, если шаблон Nil или отсутствует, используется *.*; если число равно -1; ищутся только каталоги; если 0 — файлы и каталоги; если 1 — файлы.
Пример:
(VL-EVERY. ) — проверяет, является ли условие истинным для каждой комбинации элементов списков (сначала первых элементов, затем вторых и т.д.). Пример:
(VL-EXE-FILENAME) — возвращает полное имя файла текущей выполняемой программе. Пример:
(VL-FILE-COPY <«файл1»> <«файл2»> [число]) — копирует файл 1 и добавляет к файлу 2, если третий параметр есть и не Nil. Если возвращается Nil, то ошибка при копировании: файл 1 не читается, файл 1 явялется каталогом, файл 2 существует. Пример:
(VL-FILE-DELETE <«имя файла»>) — удаляет файл. Т, если успешно, и Nil, если нет.
(VL-FILE-DIRECTORY-P <«имя»>) — определяет, является ли имя именем каталога. Т, если да и Nil, если нет. Пример:
(VL-FILE-RENAME <«новое имя»> <«старое имя»>) — переименовывает файл. Т, если переименовал, и Nil, если нет. Пример:
(VL-FILE-SIZE <«имя файла»>) — определяет размер файла в байтах. Nil, если имя нечитаемо, и 0, если имя файла — каталог или пустой файл. Пример:
(VL-FILE-SYSTIME <«имя файла»>) — время последней модификации. Возвращает список, содержащий дату и время последнего изменения, или Nil, если файл не найден. Пример:
(VL-FILENAME-BASE <«имя файла»>) — возвращает имя файла после снятия пути DIRECTORY и расширения. Пример:
(VL-FILENAME-DIRECTORY <«имя файла»>) — возвращает путь каталога файла, без имени файла. Пример:
(VL-FILENAME-EXTENSION <«имя файла»>) — возвращает только расширение из имени файла, если его нет — Nil. Пример:
(VL-FILENAME-MKTEMP [копирует расширение DIRECTORY]) — определяет уникальное имя файла, которое нужно использовать для временного файла. Основа имени — до 5 символов, принимаемых из имени файла, плюс 3 уникальных комбинаций из символов. Все именя файлов, сгенерированные функцией в течении сеанса Visual Lisp, удаляются, когда осуществляется выход из Visual Lisp.
(VL-INIT) — Подражает инициализации AutoLISP на открытой или новой команде рисунка. Т, если инициализация прошла успешно.
(VL-LIST* <«объект»>) — создает и возвращает список. Когда последний элемент — атом, результат — точечный список. Если последний параметр — список, то функция присоединяет ко всем предыдущим параметрам. Пример:
(VL-LIST-> STRING <«список ASCII-кодов»>) — преобразует список ASCII-кодов в элементы строки. Пример: (VL-LIST-LENGTH <«список»>) — вычисляет длину списка. Пример:
(VL-MEMBER-IF ‘<«предикат»> <«список»>) — определяет, является ли предикат (условие) истинным для одного из элемента списка. Предикат (условие) — это функция с одним аргументом, которая принимает значение Т для любого условия, назначенного пользователем. Функция передает каждый элемент в списке функции, определенной в функции предиката. Если функциональные возвраты не Nil, возвращается остальная часть списка тем же способом, как и в функции (MEMBER. ).
(VL-MEMBER-IF-NOT ‘<«предикат»> <«список»>) — определяет, является ли предикат Nil для одного из элементов списка.
(VL-POSITION <«символ»> <«список»>) — возвращает номер позиции определенного элемента списка, а первый элемент списка под номером 0, второй — 1 и так далее.
(VL-PRIN1-TO-STRING <«объект»>) — возвращает строковое представление любого объекта LISP, как это выводилось функцией (PRIN1. ).
(VL-PRINC-TO-STRING <«объект»>) — возвращает строковое представление любого объекта LISP, как это выводилось функцией (PRINC. ).
(VL-REGISTRY-WRITE <«раздел реестра»> [<«имя»> <«значение»>]) — создает в реестре WINDOWS новый раздел, параметры, состоящий из имени и значения. Пример:
(VR-REGISTRY-READ <«раздел реестра»> [<«имя»> <«значение»>]) — чтение данных, сохраненных в реестре WINDOWS.
(VL-REGISTRY-DELETE <«раздел реестра»> [<«имя»> <«значение»>]) — удаляет из реестра WINDOWS имя или значение. Если регистр обеспечен и Nil, заданная величина будет очищена от записи. Если значение имени отсутствует или Nil, функция удаляет определенную клавишу и все ее значения.
(VL-REGISTRY-DESCENDENTS <«раздел реестра»> [<«список»>]) — возвращает список имен подразделов выбранного раздела реестра.
(VL-REMOVE ‘<«элемент»> <«список»>) — удаляет элементы из списка.
(VL-REMOVE-IF ‘<«предикат»> <«список»>) — удаляет все элементы из списка, которые соответствуют условию.
(VL-REMOVE-IF-NOT ‘<«предикат»> <«список»>) — удаляет все элементы из списка, которые не соответствуют условию.
(VL-SOME/ ‘<«предикат»> <«список»>) — проверяет выполнение условия для первых элементов каждого списка, затем для вторых и т.д.
(VL-SORT <«список»> ‘<«функция сравнения»>) — сортирует элементы в списке согласно функции сравнения. Функцией сравнения может быть любая функция, которая принимает два параметра и возвращает Т. Поворяющиеся элементы могут быть удалены из списка.
(VL-SORT-I <«список»> ‘<«функция сравнения»>) — сортирует элементы в списке согласно функции сравнения и возвращает номера (индексы) элементов. Повторяющиеся элементы будут сохранятся.
(VL-STRING->LIST <строка>) — преобразует элементы строки в список кодов ASCII.
(VL-STRING-ELT <строка> <позиция>) — возвращает представление символа строки, стоящего в определенной позиции в строке в коде ASCII. Нулевой позиции соответствует первый символ в строке.
(VL-STRING-LEFT-TRIM <строка удаляемых символов> <строка исходных символов>) — удаляет определенные символы с начала строки.
(VL-STRING-MISMATCH <строка1> <строка2> [<позиция1> <позиция2>]) — возвращает длину совпадающего фрагмента символов для двух строк. Можно указать позицииначала фрагмента. Наличие буквы Т снимает различии в написании строчных и прописных букв.
(VL-STRING-POSITION <код символа> <строка> [<нач. позиция 1> <T>]) — определяет позицию символа с определенным ASCII-кодом в строке. Т — поиск с конца строки.
(VL-STRING-RIGHT-TRIM <удаляемые символы> <строка>) — удаляет определенные символы с конца строки.
(VL-STRING-SEARCH <фрагмент> <строка> [позиция начала поиска]) — определяет начальную позицию позицию первого вхождения заданного фрагмента в строке. Поиск чуствителен к регистру.
(VL-STRING-SUBST <новый фрагмент> <старый фрагмент> <исходная строка> [позиция начала поиска]) — заменяет старый фрагмент в исходной строке на новый.
(VL-STRING-TRANSLATE <исходный набор> <новый набор> <строка>) — заменяет исходный набор символов в строке на новый набор символов.
(VL-STRING-TRIM <удаляемый набор> <строка>) — удаляет набор символов в начале и в конце строки.
(VL-SYMBOL-NAME <символ>) — возвращает строку, содержащую имя символа.
(VL-SYMBOL-VALUE <символ>) — возвращает текущее значение, связанное с символом. Эта функция эквивалентна функции (EVAL. ) AutoLISP, но не вызывает вычислитель lISP.
(VL-SYMBOLP <объект>) — идентифицирует, действительно ли определенный объект — символ.
(VLAX-3D-POINT <список>) — создает ACTIVEX-совместимую трехмерную структуру точки. Список — 2 или 3 числа, представляет точку.
(VLAX-ADD-CMD <глобальное имя> <имя функции> [<локальное имя> <CMD-флажок>]) — добавляет команды к группе. Имя функции — функции Auolisp с нулевыми параметрами. CMD-флажки — целое число (значение по умолчанию к ACRX_CMD_MODAL|ACRX_CMD_REDRAW)
(VLAX-CURVE-GETAREA <кривая>) — возвращает область внутри кривой.
(VLAX-CURVE-GETDISTATPARM <кривая> <параметр>) — возвращает длину сегмента кривой от начала кривой до отметки, определяемой параметром.
(VLAX-CURVE-GETDISTATPOINT <кривая> <отметка>) — возвращает длину сегмента кривой между точкой начала кривой и определенной отметкой (в мировой системе координат).
(VLAX-CURVE-GETENDPARM <кривая>) — возвращает конечную точку кривой.
(VLAX-CURVE-GETENDPOINT <кривая>) — возвращает конечную точку кривой (в мировой системе координат).
(VLAX-CURVE-GETPOINTATPARM <кривая> <параметр>) — определяет точку на кривой, которая соответствует параметру, и возвращает эту точку.
(VLAX-CURVE-GETSTARTPARM <кривая>) — возвращает параметр начала кривой.
(VLAX-CURVE-GETSTARTPOINT <кривая>) — возвращает отметку начала кривой (в мировых координатах).
(VLAX-CURVE-ISCLOSED <кривая>) — определяет, закрыта ли определенная кривая.
(VLAX-CURVE-GETCLOSESTPOINTTO <кривая> <точка> [расширение]) — возвращает точку (в мировых координатах) на кривой, которая является самой близкой к определенной точке. Если значение расширения не ноль, расширяет кривую при аоиске самой близкой точки.
(VLAX-CURVE-GETCLOSESTPOINTTOPROJECTIONV <кривая> <точка> <нормаль> [расширение]) — возвращает точку (в мировых координатах) на кривой, которая является самой близкой к определенной точке. Если значение расширения не ноль, расширяет кривую при аоиске самой близкой точки.
(VLAX-CURVE-GETFIRSTDERIV <кривая> <параметр>) — возвращает первую производную (в мировых координатах) кривой в определенном расположении.
(VLAX-CURVE-GETSECONDDERIV <кривая> <параметр>) — возвращает вторую производную (в мировых координатах) кривой в определенном расположении.
(VLAX-DUMP-OBJECT <объект VLA>) — перечисляет методы и реквизиты объекта.
(VLAX-ENAME->VLA-OBJECT <входное имя объекта>) — трансформирует объект в объект VLA (VISUAL LISP APLICATON)
(VLAX-ERASED-P <объект VLA>) — определяет, был ли объект уничтожен. Т, если объект был уничтожен, иначе Nil.
(VLAX-FOR <символ> <набор объектов> [выражение1 [выражение2 . ]]) — выполняет итерации через набор объектов, оценивающих каждое выражение.
(VLAX-GET-AUTOCAD-OBJECT) — восстанавливает верхний уровень объекта приложения AutoCAD для текущего сеанса AutoCAD.
(VLAX-INVOKE <объект VLA> <метод> <список параметров>) — называет определенный метод объекита. Функция может использоваться для заказанного объекта ACTIVEX.
(VLAX-LDATA-DELETE <объект VLA или AutoCAD> <клавиши>) — стирает данные LISP из словаря чертежа. Т, если успешно, и Nil, если нет (например данные не существуют).
(VLAX-LDATA-GET <объект VLA или AutoCAD> <клавиши> [заданные по умолчанию данные]) — восстанавливает данные LISP из словаря рисунка.
(VLAX-LDATA-LIST <объект VLA или AutoCAD>) — перечисляет данные LISP в словаре — ассоциативном списке, состоящем из пар (клавиша — значение).
(VLAX-LDATA-PUT <объект VLA или AutoCAD> <клавиши> <сохраняемые данные>) — сохраняет данные LISP в словаре чертежа.
(VLAX-LDATA-TEST <данные LISP> ) — определяет, могут ли данные быть сохранены за границей сеанса. Т, если данные могут быть сохранены и восстановлены за границей сеанса, Nil, если нет.
(VLAX-MAP-COLLECTION <объект VLA> <функция>) — применяет функцию ко всем объектам в наборе.
(VLAX-METHOD-APPLICABLE-P <объект VLA> <метод>) — определяет, поддерживает ли объект специфический метод.
(VLAX-OBJECT-RELEASED-P <объект VLA>) — определяет, был ли объект реализован.
(VLAX-PRODUCT-KEY) — возвращает путь записи AutoCAD. Этот путь может быть использован с целью регистрации приложения для загрузки запроса.
(VLAX-PROPERTY-AVAILABLE-P <объект VLA> <свойство> [T]) — определяет, имеет ли объект определенное свойство. Обратите внимание, как введение третьего параметра изменяет результат. Функция возвращает Nil, хотя окружность имеет свойство «AREA» («Область»), которое не может изменяться.
(VLAX-PUT <объект VLA> <свойство> <значение>) — установка значения свойства функции нижнего уровня. Возращает Nil, если установлено занчение свойства.
(VLAX-READ-ENABLED-P <объект VLA>) — определяет, может ли объет читаться. Т — если объект читаем, Nil — если нет.
(VLAX-REG-APP <имя регистрации приложения> <список описаний команды> <INTA> [имя приложения [булев флажок]]) — регистрирует приложение (VLISP FUNCTION). Имя регистрации приложения — строка в форме: «программное обеспечение\\<название компании>\\<название программы>\\<версия программы>». Список описаний команды — в следующей форме (< GLOBAL-CMD-NAME >. < LOCAL-CMD-NAME >) или < CMD-NAME > . Каждое < CMD-NAME > — строка или символ. Булев флажок предотвращает сбой на операциях записи, если он не Nil, и возвращает Nil, значение по умолчанию — Nil. Возврат — строка, содержащая путь раздела реестра, в котором было зарегистрировано приложение.
(VLAX-RELEASE-OBJECT <объект VLA>) — сбрасывает объект рисования. Возврат неопределенный.
(VLAX-REMOVE-CMD <глобальное имя>) — удаляет одиночную команду или целую группу команд для текущего сеанса AutoCAD.
(VLAX-TMATRIX <список>) — возвращает подходящее представление для матриц преобразования 4*4, которые нужно использовать в VLA-методах. Список — список четыпех списков, каждый состоит из четырех чисел, представляя элементы матрицы преобразования.
(VLAX-TYPEINFO-AVAILABLE-P <объект VLA>) — определяет доступность TYPELIB информации. Т, если TYPELIB доступна, и Nil, если нет.
(VLAX-VLA-OBJECT->> ENAME <объект VLA>) — трансформирует объект VLA в объект AutoLISP. Возвращает имя объекта AutoLISP.
(VLAX-WRITE-ENABLED-P <объект VLA или входной объект AutoLISP>) — определяет, может ли объект AutoCAD изменяться.
(VLISP-EXPORT-SYMBOL ‘<имя символа>) — экспортирует местную переменную AutoLISP к значению, которое она имеет в Visual Lisp.
(VLISP-IMPORT-EXSUBRS ‘(Эимя загрузочного модуля приложения» «названия функций приложения» . )) — регистрирует точку входа или приложения ARX внутри среды Visual LISP.
(VLISP-IMORT-SYMBOL ‘<символ AutoLISP или список символов>) — назначает символ Visual Lisp к тому же значение, которое он имеет в местном AutoLISP. Возвращает значение импортируемого символа или последнего импортируемого символа в списке символов.
(VLR-ACDB-REACTOR <данные AutoLISP> <список пар>) — создает базу данных объекта REACTOR (глобальной переменной). Список пар включает (<имя события> . <функция повторного вызова>), где имя события — один из символов, перечисленных в таблице ACDB. Каждая функция повторного принимает два параметра: REACTOR_OBJECT — объект VLR, называемый функцией повторного вызова, и OBJ — объект базы данных (передаваемый как объект AutoLISP), связанный с событием.
(VLR-ADD <объект VLR>) — доступ к заблокированному объекту REACTOR.
(VLR-ADDED-P <объект VLR>) — проверка допуска к объекту REACTOR. Т, если допускается, и nil, если REACTOR заблокирован.
(VLR-BEEP-REACTION [параметры]) — выдает звуковой сигнал. Работает только в Visual LISP IDE.
(VLR-CURRENT-REACTION-NAME) — возвращает имя текущего события, если вызывается изнутри повторного вызова оъекта REACTOR.
(VLR-DATA-SET <объект VLR>) — возвращает специфические для объекта данные, связанные с объектом REACTOR.
(VLR-DATA-SET <объект VLR> <данные AutoLISP>) — Записывает поверх специфические для объекта данные, связанные с объектом REACTOR.
(VLR-EDITOR-REACTOR <данные AutoLISP> <список пар>) — создает редактор объекта REACTOR. Объект REACTOR будет добавлен к базе данных чертежа, но не станет постоянным.
Список включает (<имя события> <функция повторного вызова>), где имя события — один из символов, перечисленных в «Таблице редактора». Каждая функция повторного вызова принимает два параметра: REACTOR_OBJECT — объект VLR, называемый функцией повторного вызова, и OBJ — объект базы данных (передаваемый как объект AutoLISP), связанный с событием. Список пар — (<имя события> <список дополнительных элементов данных, связанных со специфическим событием>).
(VLR-LINKER-REACTOR <данные AutoLISP> <список пар>) — задает компоновщик объекта REACTOR. Список пар — (<имя события> <функция повторного вызова>), где имя события — один из символов, перечисленных в «Таблице событий компоновщика». Каждая функция повторного вызова принимает два параметра: объект VLR и список, содержащий строку имени программы ARX.
(VLR-OBJECT-REACTOR <список AutoLISP объектов VLR> <данные AutoLISP> <список пар>) — создает объектный объект REACTOR. Список пар — (<имя события> <функция повторного возврата>), где имя события — один из символов, перечисленных в «Таблице событий объекта». Каждая функция повторного вызова принимает три параметра: владелец объекта VLR, объект VLR и список дополнительных элементов данных.
(VLR-OWNER-ADD <объект VLR> <добавляемый объект VLR>) — добавляет объект к списку NOYIFIERS объектов VLR объектного REACTOR. Добавляет новый источник событий.
(VLR-OWNER-REMOVE <объект VLR> <удаляемый объект VLR>) — удаляет объект из списков NOYIFIERS объектного REACTOR.
(VLR-OWNERS <объект VLR>) — возвращает список объектов, которые сообщают определенному объекту REACTOR.
(VLR-PERS <объект VLR>) — делает объект REACTOR постоянным.
(VLR-PERS-P <объект VLR>) — определяет, действительно ли объект REACTOR постоянный.
(VLR-PERS-RELEASE <объект VLR>) — делает объект REACTOR нерезидентным.
(VLR-REACTION-NAMES <REACTOR-TYPE>) — возвращает список всех условий повторного вызова для этого типа объекта REACTOR (VLISP FUNCTION).
(VLR-REACTION-SET <объект VLR> <тип события> <функция VLR>) — добавляет или заменяет функцию AutoLISP в объекте REACTOR. Чтобы использовать функции, созданные в Visaul LISP в AutoCAD, необходимо экспортировать имена функций в AutoCAD или ввести их неявно. При явном экспорте используют функцию (VL-AUTOCAD-DEFUN . )
(VL-AUTOCAD-DEFUN ‘<имя функции>) — экспортирует имя функции в AutoCAD.
1. Объектная модель AutoCAD
Объектная модель AutoCAD основана на концепции COM ( Component Object Model ). Это спецификация метода создания компонентов, из которых строятся приложения. Система AutoCAD поддерживает технологию ActiveX Automation , которая реализует принципы объектно-ориентированного программирования. В этой технологии модель работающего приложения представляется совокупностью объектов, свойств, методов и событий. Для каждого из этих элементов имеется свой алгоритм реализации в виде операций и данных, которые обеспечивают взаимодействие с пользователем.
Объекты ActiveX в системе AutoCAD рассматриваются как иерархия, содержащая примитивы, символьные таблицы, словари и пр. Однотипные объекты объединяются в семейства ( collections ).
Высшим элементом в иерархии является объект Application ( AcadApplication ). Этот объект является родительским для следующих объектов:
· VBE (объект интегрированной среды VBA -приложений);
· MenuBar (Строка меню);
· MenuGroups (Группы меню).
Эти объекты, в свою очередь, являются родительскими для объектов более низких уровней. Семейство Documents включает в себя объекты Document — открытые документы или рисунки. В семейство MenuGroups входят объекты типа MenuGroup (Группа меню или Группа адптации). В семейство MenuBar входят объекты типа PopupMenu (Падающие меню, загруженные в строку меню).
Наиболее важным для практики является объект Document . Он включает в себя, в частности, такие семейства:
· ModelSpase (Пространство модели) ;
· PaperSpace (Пространство листа) ;
· DimStyles (Размерные стили) ;
· Linetypes (Типы линий) ;
· PlotConfigurations (Конфигурации печати) ;
· Preferences ( Настройки чертежа );
· RegisteredApplications (Зарегистрированные приложения) ;
· SummaryInfo ( Свойства чертежа );
· SelectionSets (Выделенные наборы) ;
· TextStyles (Текстовые стили) ;
· UCSs (Пользовательские системы координат) ;
· Viewports (Видовые экраны) ;
В семейства Blocks , ModelSpase и PaperSpace входят объекты, которые соответствуют графическим примитивам.
Полностью список объектов показан на рис.9.1. Рисунок взят из справочной службы AutoCAD: ActiveX and VBA Reference — Object Model.
Рис. 9.1. Список объектов AutoCAD
Для реализации базовых инструментов объектной технологии в модели предусмотрены компоненты, называемые интерфейсами. В базовом интерфейсе описываются все типичные свойства и методы. Например, базовым интерфейсом всех графических примитивов является IAcadEntity . Он является родительским для интерфейса IAcadLine . С помощью этого интерфейса создаются объекты семейства AcDLine , представителем которого является объект Line .
Каждый объект в технологии ObjectX имеет свои свойства и методы. Свойства можно читать или изменять с помощью соответствующих функций. Функции, соответствующие методам, реализуются в командах с соответствующими параметрами. Элементами объектной модели являются также события. Они возникают в результате действий пользователя ( Click ) или при изменениях в программе ( onLoad ). Программа может отслеживать события и реализовать сценарий отклика на события.
С полным перечнем объектов, свойств, методов и событий можно познакомиться в справочной службе AutoCAD .
2. Функции и типы данных
Функции , реализующие технологию ActiveX в Visual LISP, имеют префиксы vla-, vlax-, vlr. Доступ к этим функциям можно получить только после выполнения в данном сеансе AutoCAD функции vl — load — com .
Работа с каждым из объектов в технологии ActiveX ведется на уровне указателей. Они носят название VLA -объекты. VLA -объектами являются указатели не только графических примитивов, но и документов, пространства модели и приложений.
Практически обязательной для всех приложений, использующих ActiveX , является следующая структура функций:
(setq acad_app (vlax-get-acad-object))
(setq active_doc (vla-get-activedocument acad_app))
(setq model_space (vla-get-modelspace active_doc))
(setq paper_space (vla-get-paperspace active_doc))
В результате выполнения функции begin_activex будут получены следующие VLA -объекты:
· acad_app приложение AutoCAD ;
· active_doc активный документ;
· model_space пространство модели;
· paper_space пространство листа.
После получения основных VLA -объектов можно через них обращаться к другим элементам иерархии системы AutoCAD (примитивам, таблицам и пр.) для получения или модификации их свойств и методов. Основным средством получения VLA -объекта для примитива является функция vlax — ename -> vla — object . Обратная функция vlax — vla — object -> ename .
Кроме VLA -объектов, в ActiveX используют новые типы данных: безопасные массивы и варианты.
Безопасные массивы являются массивами однотипных объектов. Они создаются с помощью функций
Для извлечения данных из безопасных массивов с целью использования обычных LISP -функций применяются функции:
Для преобразования массива в список используют функцию
vlax — safearray -> list .
Варианты — это структуры, которые могут хранить однотипные данные. Тип данных является типом варианта. Создание варианта выполняется с помощью функции ( vlax — make — variant [<данное> [<целое>]]).
В качестве второго аргумента передается целое число, задающее тип варианта. Если оно опущено, то тип варианта определяется по типу первого аргумента. В качестве значения аргумента < целое > используются зарезервированные константы.
Неинициализированный (значение по умолчанию)
Пустой (без данных)
Короткое целое число
Длинное целое число
Вещественное число с двойной точностью
Примеры функций, выполняющих операции с вариантами:
· vlax — variant — type — получение типа варианта;
· vlax — variant — value — получение значения варианта;
· vlax-variant-change-type — изменение типа варианта ;
· vlax — variant — type — оформление трехмерной точки как варианта.
3. Использование элементов ActiveX в Visual LISP
Элементы ActiveX — это программный интерфейс, который используется в поддерживающих его языках программирования. Элементы ActiveX обеспечивают взаимодействие между объектами, с одной стороны, и пользователем или приложением, с другой стороны. Технология ActiveX позволяет получать информацию об объектах чертежа с помощью функций доступа ( get functions ) и модифицировать объекты с помощью функций модификации ( put functions ).
Выше было рассмотрено, как извлекать и модифицировать информацию об объектах с помощью функций-интерфейсов на языке AutoLISP . Элементы ActiveX обеспечивают аналогичный способ получения и модификации информации. Однако для этого необходима определенная подготовка.
AutoCAD предоставляет все свои объекты, включая функции доступа и модификации, в распоряжение элементов ActiveX . Вначале в Visual LISP необходимо перед началом сеанса работы загрузить все функции ActiveX с помощью функции
При этом все функции-интерфейсы ActiveX станут доступными. Загрузив интерфейс ActiveX , можно выполнить необходимые действия над созданным ранее отрезком. Но вначале нужно преобразовать имя сущности в объект vla . Этот объект ActiveX практически ничем не отличается от имени сущности, но содержит ряд свойств, которые отсутствуют в его аналоге в языке AutoLISP . Для преобразования используется функция vlax-ename->vla-object . Пример обращения к этой фунции:
(setq vla-line (vlax-ename->vla-object (entlast))) Ã
Среда Visual LISP возвратит следующее выражение:
#< VLA — OBJECT IAcadLine 03612 b 14>
Протокол операций будет выглядеть следующим образом:
Command: _line Specify first point: 5,5,0
Specify next point or [Undo] : 15,-5,0
Specify next point or [Undo]: *Cancel*
Command: ‘_.zoom _e
Command: (setq vla-line (vlax-ename->vla-object (entlast)))
#<VLA-OBJECT IAcadLine 01f1bb4c>
Возвращаемое значение переменной есть объект vla . Теперь можно визуально отслеживать значения этой переменной, выделив ее и выбрав команду VIEW — INSPECT . То же самое можно сделать в окне CONSOLE , запустив функцию
( vlax — dump — object vla — line ) Ã
Возникающее окно инспектора показано на рис. 9.2.
Рис. 9.2. Окно инспектора объекта VLA
Для получения начальной точки объекта используется функция VLA-GET-STARTPOINT . В рассматриваемом примере отрезок был преобразован в объект vla , свойства которого содержит переменная vla — line . Для получения начальной точки можно ввести следующее выражение:
( setq Starting ( vla — get — startpoint vla — line )) Ã
В ответ будет выдано сообщение:
Чтобы преобразовать координаты начальной точки из типа данных variant к координатному формату, введите следующую строку кода:
(safe-array-value (vlax-variant-value Starting)) Ã
Теперь Visual LISP возвратит координаты начальной точки отрезка:
Чтобы изменить значение свойства StartPoint на (0,0,0), напишите выражение:
(vla-put-startpoint vla-line (vlax-3d-point ‘(0 0 0))) Ã
Проверьте отрезок в окне AutoCAD . Для проверки значения свойства StartPoint можно также воспользоваться функцией VLA-GET-STARTPOINT .
(safe-array-value (vlax-variant-value (vla-get-startpoint vla-line))) Ã
Теперь Visual LISP возвратит такое значение:
Получение и модификация свойств объектов
2. На новом чертеже постройте отрезок (5,5,0)-(15,5,0).
3. В окне CONSOLE редактора AutoLISP введите команду загрузки функции ActiveX ( vl — load — com ) Ã
4. Для преобразования имени сущности в объект vla введите:
(setq vla-line (vlax-ename->vla-object (entlast))) Ã
5. Чтобы просмотреть свойства объекта введите ( vlax — dump — object vla — line )
6. Для получения начальной точки отрезка введите:
(setq Starting (vla-get-startpoint vla-line)) Ã
7. Для преобразования координат начальной точки из типа данных variant к формату отображения координат введите:
(safearray-value (vlax-variant-value Starting)) Ã
8. Чтобы изменить координаты начальной точки отрезка на 0,0,0, введите:
(vla-put-startpoint vla-line (vlax-3d-point ‘(0 0 0))) Ã
9. Проверьте отрезок — его начальная точка находится в начале координат.
4. Создание объектов с помощью функций ActiveX
При работе с интерфейсом ActiveX объекты можно извлекать только в порядке, соответствующем их иерархии. Прежде чем получить объект, необходимо извлечь следующие элементы:
· Acad — object — представляет программу AutoCAD ;
· ActiveDocument — представляет активный чертеж;
· ModelSpace / PaperSpace — представляет рабочее пространство AutoCAD .
В AutoLISP вначале извлекается тип пространства, затем чертеж и последним — объект AutoCAD . Возьмем простую программу создания отрезка и модифицируем ее с использованием функций ActiveX .
;;; Эта функция создает отрезок с использованием Visual LISP и ActiveX
;;; и возвращает отрезок в виде объекта vla
( vla — get — ModelSpace ;извлечение объекта пространства модели;
( vla — get — ActiveDocument ;извлечение текущего документа;
(vla-get-Acad-object) ; извлечение объекта AutoCAD;
( vlax -3 d — point ) ‘(5 5 0);_начальная точка
( vlax -3 d — point ) ‘(15 5 0);_конечная точка
Введите этот код в окне редактора Visual LISP и загрузите его в чертеж. Чтобы посмотреть, как работает функция, введите в окно Console команду
( ax — make — aLine ) Ã
Visual LISP возвратит выражение #<VLA-OBJECT IAcadLine 03614934>
Ознакомиться с другими функциями ActiveX, предназначенными для создания объектов , можно в справочной системе Visual LISP: HELP — Visual LISP HELP TOPICS — CONTENT — ACTIVEX and VBA REFERENCE — METHODS . Чтобы создать функцию Visual LISP , добавьте к имени метода префикс vla- . Например, для добавления окружности используйте функцию vla-AddCircle .
5. Доступ к документам
Работа с примитивами возможна как в активном документе, так и в других открытых чертежах. Некоторые программы выполняют операции не с одним чертежом, а с несколькими. Тогда при выполнении программы активным должен оставаться один и тот же документ. LISP -программа загружается в пространство имен текущего чертежа.
В следующем примере функция opendocs _ name возвращает список с именами открытых в данный момент чертежей.
(defun opendocs_names ( / _OpenDocs _nlist _d)
; Семейство открытых документов
(setq _OpenDocs (vla-get-documents (vlax-get-acad-object)))
; _nlist — пустой список (nil) как локальная переменная
(vlax-for _d _OpenDocs
(append _nlist (list (strcat (vla-get-path _d) "\\" (vla-get-name _d))))
VLA- объект приложения AutoCAD, получаемый с помощью функции vlax-get-acad-object, имеет свойство Documents . Оно возвращает VLA -объект семейства открытых документов.
Для того, чтобы использовать это свойство Documents , нужно вызвать функцию с таким же именем, но прибавить префикс vla — get -. Поэтому с помощью выражения
(setq _OpenDocs (vla-get-documents (vlax-get-acad-object)))
Переменной _ OpenDocs присваивается VLA -объект семейства открытых в данном сеансе документов.
Для перебора элементов запускается цикл, выполняемый функцией vlax — for . В этом цикле рабочая переменная _ d используется как обозначение текущего из перебираемых элементов семейства. Строки с именами открытых чертежей накапливаются в списке _ nlist . Начальное значение этой локальной переменной равно нулю. Для добавления к списку нового элемента использована функция append .
Функция vla — get — fullname соответствует свойству FullName . Она возвращает полное имя открытого dwg -файла. Однако если новый чертеж не сохранялся, то вместо имени будет возвращена пустая строка, хотя в заголовке окна стоит имя Drawing 1. dwg . Поэтому в примере полное имя файла получается с помощью свойств Path и Name .
Когда одновременно открыто несколько чертежей, то с помощью LISP -программы, запущенной в активном чертеже, можно получить доступ ко всем другим документам. Нельзя только активизировать другой документ, так как выполнение программы прервется. Все семейства имеют метод Item , который предоставляет доступ к элементам по номеру или по имени. Нумерация элементов начинается с нуля.
Для примера рассмотрим текст функции, которая для открытого документа с номером N возвращает имя его текущего слоя.
(defun anydoc_clayer (N / _OpenDocs)
; Семейство открытых документов
(setq _OpenDocs (vla-get-documents (vlax-get-acad-object)))
; Проверка номера документа и возврат имени текущего слоя
(if (and (= ‘INT (type N)) (>= N 0) (< N (vla-get-count _OpenDocs)))
(vla-get-name (vla-get-ActiveLayer (vla-item _OpenDocs N)))
После получения семейства открытых документов проверяется тип аргумента N (он должен быть целым) и правильность значения. Значение должно быть положительным и меньше количества элементов семейства (свойство семейства count ). В случае ошибки программа возвращает ноль, иначе — имя текущего слоя указанного документа.
6. Создание реакторов
VLR -объекты или реакторы — особые объекты ActiveX . Они задают отклик системы на события. Выполняемые действия описываются функциями на языке AutoLISP , которые имеют префикс vlr -. Для того, чтобы эти функции были доступны, необходимо выполнить функцию vl — load — com . Она загружает расширение языка LISP .
Ошибка «Ошибка: отсутствует определение функции: VLAX-ENAME->VLA-OBJECT» при запуске функции на основе LISP в AutoCAD
Автор:
Проблема
Процедура ранее выполнялась без ошибок или работает нормально на другом компьютере.
Примечание. В AutoCAD Electrical используется множество процедур LISP для нормальной работы, поэтому эта ошибка может появляться при редактировании таких компонентов, как быстрое перемещение, удаление и т. д. Кроме того, контекстное меню Electrical (отслеживающее) может вызвать сбой со следующим сообщением: