Объекты и семейства

Безопасные массивы

Массивы недоступны в обычных функциях 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 размерностью 3´3 с элементами вещественного типа.

Присвоение значений элементу массива

( 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: