- •1. Введение
- •2. Неавтоматизированное создание чертежей в AutoCad
- •3. Программирование в AutoCad
- •4. Элементы языка AutoLisp
- •5. Интегрированная среда Visual lisp
- •6. Применение функций AutoLisp
- •7. Функции вывода графических примитивов
- •8. Диалоги и диалоговые окна
- •Работа с диалогами из lisp-программ
- •Атрибуты заголовка диалога
- •Элементы диалога
- •Атрибуты элементов диалога
- •Переменные действия
- •Функции, работающие с графическими элементами
- •9. Управление работой AutoCad с помощью системных переменных
- •10. Меню и адаптации
- •11. Введение в технологию ActiveX
- •Безопасные массивы
- •Объекты и семейства
- •Варианты
- •Свойства
- •Другие функции ActiveX
- •События и реакторы
- •12. Программы, созданные на платформе AutoCad спдс GraphiCs
- •13. Специализированные программы для архитектуры и строительства
- •Ат Венцы
- •Комплекс программных продуктов, объединенных компанией аскон
- •Лоцман: спдс
- •Компас-график
Безопасные массивы
Массивы недоступны в обычных функциях AutoLISP, но с ними могут работать функции ActiveX. Массивы называются безопасными (safe arrays), так как AutoCAD постоянно контролирует тип и количество записываемых в них данных.
Вспомним для сравнения: в стандартной части языка AutoLISP тип переменных может динамически меняться!
Существуют следующие основные операции над массивами.
Создание массива
(setq p1 (vlax-make-safearray тип ‘(Ин1 . Ик1) ‘(Ин2 . Ик2) … ))
p1 – имя массива;
тип – тип элементов массива:
vlax-vbInteger – целые (начальные значения 0);
vlax-vbLong – длинные целые (начальные значения 0);
vlax-vbSingle – вещественные (начальные значения 0.0);
vlax-vbDouble – вещественные двойной точности (начальные значения 0.0);
vlax-vbString – строковые (начальные значения “”);
vlax-vbBoolean – логические (начальные значения :vlax-false (константа, используемая как «ложь»)).
Существуют другие типы данных, о которых можно прочитать в рекомендованной литературе.
В отличие от большинства других языков программирования, при создании массива происходит присвоение элементам массива начальных значений.
‘(Ин1 . Ик1) – точечная пара. Ин, Ик – начальное и конечное значение индекса. Значения индексов могут быть и отрицательными, но должно соблюдаться условие Ин < Ик.
Пример.
(setq p1 (vlax-make-safearray vlax-vbSingle ‘(1 . 3) ‘(0 . 2))) – создание массива p1 размерностью 33 с элементами вещественного типа.
Присвоение значений элементу массива
(vlax-safearray-put-element p1 2 2 3.1416) – присвоение значения 3,1416 элементу (2, 2) массива p1 (рис. 3).
0,0 |
0,0 |
0,0 |
0,0 |
0,0 |
3,1416 |
0,0 |
0,0 |
0,0 |
Рисунок 3 – состояние массива p1
Извлечение элемента массива
(sefq p2 (vlax-safearray-get-element p1 1 1)) – равносильно следующему оператору языка Pascal: p2:=p1[1,1];
Преобразование массива в список
(setq p3 (vlax-safearray->list p1)) – сохранение в переменной p3 списка, составленного из элементов массива p1.
Как уже говорилось, для того, чтобы функции работы с массивами были доступны, перед их первым применением необходимо в текст программы включить выражение
(vl-load-com).
Рассмотрим возможности технологии ActiveX для автоматизированной работы с чертежом.
Технология ActiveX в AutoCADе работает с чертежом (геометрической моделью) как с совокупностью объектов, свойств, методов и событий.
Объекты и семейства
Объекты (более полное название – VLA-объекты) рассматриваются как иерархическое дерево, содержащее графические примитивы и другие данные AutoCADа. Однотипные объекты объединяются в семейства.
Дерево объектов имеет следующую структуру.
Application – корневой объект (само приложение AutoCAD).
Document – открытый документ (чертеж).
Blocks – блоки.
ModelSpace – пространство модели.
PaperSpace – пространство листа.
В первые три семейства входят объекты, в том числе графические объекты, которыми оперирует система AutoCAD. Всего существует 160 имен объектов. Объекты образуют свои семейства, например, LINE – семейство отрезков.
DimStyles – размерные стили.
Layers – слои.
Linetypes – типы линий.
и т.д.
Document …
Открытых документов может быть несколько. Они образуют семейство документов. Каждый документ обладает своей собственной структурой.
MenuBar – строка меню.
MenuGroup – группы адаптаций.
Preference – настройки (различные настройки – файловые, чертежные и т. д.).
Каждый объект дерева содержит указатели на информацию, связанную с объектом, и указатели на вложенные (подчиненные или более низкого уровня) объекты. Указатель – это адрес в оперативной памяти или на диске, по которому расположена информация.
Для доступа к информации о каком-либо объекте сначала нужно пройти по дереву для того, чтобы AutoCAD прочитал указатели всех объектов более высоких уровней.
Рассмотрим пример использования функций, осуществляющих проход по дереву объектов.
(defun beg ()
(vl-load-com) ; Загрузка функций расширения AutoLISP.
(setq p1 (vlax-get-acad-object) ;Чтение указателя корневого объекта.
p2 (vla-get-activedocument p1) ; Чтение указателя открытого
чертежа.
p3 (vla-get-modelspace p2))) ; Чтение указателя пространства
модели.
После выполнения функции beg становятся доступными для работы, например, графические объекты пространства модели.
Графические объекты можно преобразовать в обычные графические примитивы, после чего с ними можно работать с помощью обычных средств AutoLISPа. Обычные графические примитивы также могут быть преобразованы в VLA-объекты для применения к ним технологии ActiveX.
Методы
Каждому объекту (не только графическому) соответствует перечень действий, которые можно применять к данному объекту. Эти действия называются «методами».
Методы ActiveX позволяют:
создавать графические объекты, в том числе трехмерные (клин, конус, параллелепипед, тор, цилиндр, шар, эллиптический конус («стог сена»), плоские объекты в пространстве (не в плоскости XY), произвольные 3D-объекты способом вращения или выдавливания по траектории);
Пример.
(vla-AddBox pm (vlax-3D-point (getpoint)) 50 30 10) - создание параллелепипеда указанных размеров (длина (x), ширина (y), высота(z)) от введенной базовой точки. Функция vlax-3D-point создает точку в формате варианта (вариант – новый тип данных).
редактировать существующие графические объекты (изменять их свойства), в том числе масштабировать, копировать, удалять, размножать в форме массивов и т.д., а также клонировать объекты в другой документ или из другого документа;
выполнять булевы операции над трехмерными телами;
изменять и добавлять пункты главного, падающих или контекстных меню, а также кнопки в панелях инструментов;
вставлять в чертеж изображения растровых файлов (можно, например, использовать фотографии реальной местности для фона чертежа);
создавать таблицы и редактировать их конфигурацию (изменять количество и размеры столбцов и строк), форматировать данные внутри таблицы;
производить измерения в области графических построений (на чертеже);
работать с внешними базами данных;
управлять настройками печати;
посылать команды и сообщения в командную строку;
и т. д.
Получить список всех методов объекта можно с помощью функции vlax-dump-object.
Таким образом, на AutoLISPе можно перепрограммировать любые операции AutoCADа и создавать новые. Эти возможности, в сочетании с работой с «частичными адаптациями», являются средством для создания программ-надстроек над AutoCADом и программ на платформе AutoCADа.
