Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 50081.doc
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
2.69 Mб
Скачать

Лабораторная работа №4 Анализ графической базы данных чертежа AutoCad. Работа с примитивом типа блок. Использование расширенных данных

1. Цель работы

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

2. Комментарии по выполнению работы

Анализ графической базы данных чертежа AutoCAD

При выполнении анализа графической базы данных чертежа AutoCAD (ГБД) определение количества примитивов производится следующим образом:

Rcount = ThisDrawing.ModelSpace.count

Для организации перебора всех присутствующих в чертеже примитивов и занесения очередного примитива в переменную New_OBJ необходимо организовать следующий цикл:

For index = 0 To Rcount - 1

Set New_OBJ = ThisDrawing.ModelSpace.Item(index)

Next.

Блоки

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

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

Для того чтобы образовать описание блока, нужно применить команду Block (Блок). Команде соответствуют кнопка панели инструментов Draw (Рисование) и пункт меню Draw | Block | Make (Рисование |Блок | Создать).

Команда Block (Блок) вызывает диалоговое окно Block Definition (Описание блока).

В поле раскрывающегося списка Name (Имя) нужно ввести имя создаваемого (или переопределяемого) описания блока. Имена блоков могут содержать русские и латинские буквы, цифры и отдельные знаки (подчеркивание, минус и некоторые другие). Все буквы в составе имени автоматически переводятся системой AutoCAD в верхний регистр. Не допускаются знак плюс и большая часть других символов, не являющихся буквами и цифрами. Длина имени не должна превышать 255 символов. Если значение системной переменной EXTNAMES равно 0 (а обычное значение— 1), то длина имени блока будет ограничиваться 31 символом. Знак пробела допускается в составе имени в системе AutoCAD, но его лучше не употреблять. В качестве заменителя пробела рекомендуется использовать символ подчеркивания.

Рис.18. Диалоговое окно определения блока

Область Base point (Базовая точка) предназначена для задания базовой точки блока (за эту точку блок будет позиционироваться на поле рисунка при вставке). Координаты точки можно ввести с клавиатуры, заполнив поля X, Y и Z.

Область Objects (Объекты) предназначена для того, чтобы указать объекты, включаемые в описание блока.

Группа переключателей, расположенных под кнопкой Select objects (Выбрать объекты), позволяет задать действие над объектами в блоке, которое будет выполнено после создания описания блока:

Retain (Оставить) — сохранить объекты в рисунке в том виде, в каком они были до создания описания блока;

Convert to block (Сделать блоком) — заменить указанные объекты на вхождение блока;

Delete (Удалить) — удалить объекты из рисунка.

По умолчанию, как правило, предлагается вариант Convert to block (Сделать блоком).

После выбора объектов сообщение No objects selected (Объекты не выбраны) в нижней части области Objects (Объекты) заменяется сообщением objects selected (Выбрано объектов: n), где п — число выбранных объектов.

После выбора объектов в правом верхнем углу диалогового окна Block Definition (Описание блока) появится растровый образец с изображением блока, описание которого создается.

В раскрывающемся списке Block units (Единицы блока) области Settings (Настройки) необходимо выбрать единицы для блока при перемещении в другие рисунки. Обычное значение — Millimeters (Миллиметры). Справа от списка расположены два флажка:

Scale uniformly (Одинаковый масштаб) — запрещает вставку блока с разными значениями масштабных коэффициентов по разным осям;

Allow exploding (Разрешить разбиение) — разрешает разбиение вставленного блока на составные элементы.

В списке Description (Пояснение) можно ввести комментарий к создаваемому описанию блока. Кнопка Hyperlink (Гиперссылка) позволяет связать с блоком гиперссылку.

После заполнения параметров и нажатия в диалоговом окне кнопки ОК внутри рисунка образуется описание статического блока с именем Element6. Описание является невидимым компонентом, к которому можно обращаться для операции вставки блока. Если в области Objects (Объекты) выбрать переключатель Convert to block (Сделать блоком), то примитивы, из которых составлено описание блока, сразу заменятся на вхождение блока.

Вставка блока

Для операции вставки блока используется команда Insert (Вставить), которой соответствуют пункт Block (Блок) падающего меню Insert (Вставка), которая вызывает диалоговое окно Insert (Вставка блока) (рис.19).

Данное окно позволяет вставлять в текущий рисунок описанные в нем статические и динамические блоки (а также файлы из других рисунков).

В раскрывающемся списке Name (Имя) нужно выбрать имя вставляемого блока. По умолчанию в данном поле обычно высвечивается имя последнего вставленного блока.

Рис.19. Диалоговое окно вставки блока

Кнопка Browse (Обзор) используется для выбора файла, если данное диалоговое окно было открыто для вставки файла. В этом случае параметр Path (Путь) отобразит полный путь к файлу, который выбран для вставки.

В области Insertion point (Точка вставки) нужно задать точку текущего рисунка, в которую будет помещена базовая точка блока. Если установить флажок Specify On-screen (Указать на экране), то после закрытия окна точка вставки будет отдельно запрошена системой.

Область Scale (Масштаб) предназначена для ввода по каждой из трех осей масштабных коэффициентов, с которыми блок будет вставляться. Если все три масштабных коэффициента (по осям X, У и Z) равны 1, то блок будет вставлен с теми же размерами, какие были у объектов, использованных в описании блока. Если по какой-то оси масштабный коэффициент меньше 1, то блок при вставке сжимается вдоль этой оси, если больше 1 — растягивается с данным коэффициентом по этой оси. Масштабные коэффициенты могут быть и отрицательными (тогда изображение блока по этой оси переворачивается). Установленный флажок Specify On-screen (Указать на экране) означает, что по закрытии окна можно будет ввести масштабные коэффициенты или вместо них можно будет указать трехмерную точку, три координаты смещения (в миллиметрах) которой от точки вставки блока станут тремя коэффициентами масштабирования блока. Если установлен флажок Uniform Scale (Равные масштабы), то поля Y и Z становятся недоступными (гасятся), а значение, заданное в поле X, становится значением масштабных коэффициентов по всем трем осям.

В области Rotation (Угол поворота) задается угол поворота блока относительно точки вставки (положительные значения — при повороте против часовой стрелки). Если значение угла поворота будет равно нулю, то блок не поворачивается. Установка флажка Specify On-screen (Указать на экране) означает, что после закрытия диалогового окна угол будет указан мышью. Поле Angle (Угол) используется для задания угла числом с помощью клавиатуры.

В области Block Unit (Единицы блока) показано, какие единицы измерения и коэффициент пересчета размеров были заданы в описании блока.

Последний флажок — Explode (Разбить), расположенный в левом нижнем углу диалогового окна Insert (Вставка блока), — предназначен для разбиения блока сразу после его вставки. В этом случае изображение блока вставляется с заданными параметрами масштабных коэффициентов и угла и тут же раскладывается на отдельные примитивы. Изображение вставленного блока при этом уже не будет единым объектом (т. е. не будет вхождением блока).

После задания всех параметров следует закрыть диалоговое окно Insert (Вставка блока) с помощью кнопки ОК. Если в области Insertion point (Точка вставки) установлен флажок Specify On-screen (Указать на экране), то после закрытия диалогового окна Insert (Вставка блока) система AutoCAD выдает запрос:

Specify insertion point or

[Basepoint/Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]:

(Точка вставки или [Базовая

точка/Масштаб/Х/У/г/ПОворот/ПМасштаб/ПХ/ПУ/Пг/ППоворот]:)

Если в этот момент перемещать курсор по графическому экрану, то вместе с перекрестием, указывающим на базовую точку блока, начинает перемещаться изображение блока в натуральную величину.

Для выбора блоков из ГБД чертежа: можно воспользоваться свойством ObjectName, которое для вставки блока имеет значение "AcDbBlockReference".

Запись блока в файл

Для операции записи блоков в файл на диске в формате *.dwg используется команда WBlock (Запись блока), которая вызывает диалоговое окно Write Block (рис.20).

Данное окно позволяет записать часть чертежа отдельным файлом на жесткий диск.

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

Если выбраны объекты, то нажатием кнопки Select Objects(Выбрать объекты) выбрать объекты для записи. Группа переключателей, расположенных под кнопкой Select objects, позволяет задать действие над выбранными объектами рисунка, которое будет выполнено после создания описания блока для записи на диск.

Рис.20. Диалоговое окно записи блока на диск

В области Base point (Базовая точка) нужно задать базовую точку блока.

В поле File name and path указать путь и имя файла, куда будет записана информация.

Область Insert Units предназначена для ввода единиц измерения.

Таким образом формируются элементы графических библиотек.

Расширенные данные

К любому примитиву рисунка с помощью приложений Visual LISP и ObjectARX можно добавлять расширенные данные, т. е. блоки текстовых, численных и других данных, которые желательно хранить вместе с геометрией (например, марки материалов, наименова­ния узлов, секций и т. п.). Обычно наличие такой информации позволяет разраба­тывать программы связи с базами данных. Расширенные данные связываются обычно с именем определенного приложения. У одного графического примитива могут быть данные нескольких приложений, которые располагаются последовательно в опреде­ленной структуре.

Если расширенные данные присоединены к примитиву, в базе рисунка они следуют за обычными данными (DXF-коды обычных данных находятся в диапазоне от -2 до 239).

DXF-коды расширенных данных

Код

Назначение

Строковая константа длиной не более 255 знаков (256-й знак зарезервирован под символ с кодом 0)

Строковая константа, используемая только для указания имени приложения, длиной не более 31 знака (если код 1001 попадает внутрь списка, организуемого с помощью DXF-кодов 1002, он интерпретируется как обычная константа, а не имя приложения; Имя приложения должно состоять только из цифр, латинских букв и символов $, -, _

Продолжение таблицы

Код

Назначение

Строка, которая может иметь значения "{" или "}", имеет тот же смысл, что и ле­вая и правая круглые скобки в обозначении списка. С помощью группы с кодом 1002 можно формировать в расширенных данных списковые структуры (они должны начинаться открывающей скобкой с кодом 1002, после чего должны идти данные, включаемые в список, а закрывающая скобка с кодом 1002 завер­шает оформление списка).

Имя слоя, с которым связываются расширенные данные

Двоичные данные длиной не более 127 байтов. Обрабатываются только приложениями ObjectARX

Метка объекта в базе чертежа

Трехмерная точка (три вещественных числа)

Трехмерная точка, интерпретируемая как положение в МСК. Такая точка пере­мещается, масштабируется, поворачивается и симметрируется одновременно с родительским примитивом рисунка. Если точка попадает в рамку выбора команды STRETCH (РАСТЯНУТЬ), она подвергается операции растягивания вместе с родительским примитивом

Продолжение таблицы

Код

Назначение

Трехмерная точка, интерпретируемая как перемещение в МСК. Такая точка не перемещается и не растягивается одновременно с основным примитивом, но участвует вместе с ним в операциях масштабирования, поворота и симметриро­вания

Трехмерная точка, интерпретируемая как направление в МСК. Такая точка не масштабируется, не перемещается и не растягивается одновременно с основ­ным примитивом, но участвует вместе с ним в операциях поворота и симметри­рования. Вектор с координатами, взятыми из группы с кодом 1013, является нормализованным, т. е. вектором единичной длины

Трехмерная точка, интерпретируемая как направление в МСК. Такая точка не масштабируется, не перемещается и не растягивается одновременно с основ­ным примитивом, но участвует вместе с ним в операциях поворота и симметри­рования

Трехмерная точка, интерпретируемая как направление в МСК. Такая точка не масштабируется, не перемещается и не растягивается одновременно с основ­ным примитивом, но участвует вместе с ним в операциях поворота и симметри­рования. Вектор с координатами, взятыми из группы с кодом 1013, является нормализованным, т. е. вектором единичной длины

Окончание таблицы

Код

Назначение

Вещественное число

Вещественное число, интерпретируемое как расстояние. Оно масштабируется одновременно с родительским примитивом

Вещественное число, интерпретируемое как масштабный коэффициент. Масштабируется одновременно с родительским примитивом.

1070

16-битовое целое число (со знаком или без знака).

Извлечь расширенные данные можно с помощью метода GetXData:

New_OBJ.GetXData "имя_данных", xtypeOut, xdataOut

Запросу должно предшествовать описание переменных:

Dim xdataOut As Variant

Dim xtypeOut As Variant

Если «имя данных» не указано или указано пустое значение « », то в переменные xdataOut и xtypeOut будут прочитаны ВСЕ расширенные данные, прикрепленные к примитиву.

Для записи расширенных данных используется команда SetXData:

New_OBJ.SetXData DataType, Data

Команде должно предшествовать описание и первоначальное определение переменных:

Dim DataType(0 To 9) As Integer

Dim Data(0 To 9) As Variant

Dim reals3(0 To 2) As Double

Dim worldPos(0 To 2) As Double

DataType(0) = 1001: Data(0) = "obhod"

' имя данных

DataType(1) = 1000: Data(1) = "это строка "

' строка до 255 симв.

DataType(2) = 1003: Data(2) = "0"

' layer

DataType(3) = 1040: Data(3) = 0

' real

DataType(4) = 1041: Data(4) = 0 ' distance

DataType(5) = 1070: Data(5) = 0 ' 16 bit Integer

DataType(6) = 1071: Data(6) = 0 ' 32 bit Integer

DataType(7) = 1042: Data(7) = 0 ' scaleFactor

reals3(0) = 0: reals3(1) = 0: reals3(2) = 0

DataType(8) = 1010: Data(8) = reals3 ' real

worldPos(0) = 0: worldPos(1) = 0: worldPos(2) = 0

DataType(9) = 1011: Data(9) = worldPos

' world space position