Макросы vba в автокаде что это
Аннотация: Язык программирования Visual Basic for Application и среда его разработки включены в AutoCAD как его приложение. Средства VBA предоставляют простые способы настройки программы, автоматизации обработки чертежей и запуска других программ из основного приложения. Код VBA компилируется в исполняемый файл, который может быть запущен автономно. Проекты VBA хранятся в отдельных файлах с расширением .dvb, но могут быть сохранены и в файле чертежа.
Цель лекции: изучить редактор VBA и научиться составлять процедуры.
Редактор Visual Basic
Интерфейс
Кроме Visual LUISP в системе AutoCAD имеется вторая интегрированная среда для разработки приложений пользователя. В ней используется язык VBA - Visual Basic for Application . Для активизации среды VBA нужно выполнить команду Tools - Macro - Visual Basic Editor . Можно также набрать команду vbaide ↵ ( IDE - Integrated Development Enveronment - интегрированная среда разработки). В результате запуска этой команды активизируется окно редактора VBA (рис. 7.1).
Интерфейс среды содержит меню, панель инструментов и четыре диалоговых окна:
- окно проектов Project Explorer ;
- текстовый редактор модуля проекта (в проекте может быть несколько модулей);
- окно свойств модуля Properties Window ;
- библиотека объектов Object Browser .
Элементы интерфейса устанавливаются через пункты меню Insert и View . Программный код размещается в модулях. В модуле можно создать новую процедуру по команде Insert - Procedure . Для перехода в программу AutoCAD можно щелкнуть по крайней левой кнопке панели инструментов. Заметим, что когда среда VBA активна, то AutoCAD продолжает работать в фоновом режиме.
В окне проектов Project Explorer отражается иерархия существующих встроенных и глобальных проектов и модулей этих проектов.
В окне Object Browser редактора VBA в левой панели представлен список объектов. При этом можно работать как с коллекциями, так и с отдельными объектами. Например, Acadlayer - слой как объект, а Acadlayers - набор слоев как объект. Поэтому, например, есть возможность добавить вновь созданный слой в набор слоев.
В правой панели окна Object Browser представлен список свойств и методов выделенного слева объекта. При составлении процедуры наименование свойств и методов объекта необходимо выбирать из этого списка.
Проекты
Приложения Autocad VBA оформлены в виде проектов. Проект представляет собой набор объектов, программных модулей, модулей классов и форм. Проект может быть сохранен как в рисунке (внедренный) так и во внешнем файле. Внедренный проект автоматически загружается при открытии рисунка. Ограничение внедренных проектов в том, например, что они не могут закрыть рисунок, внутри которого находятся. Глобальные проекты более гибки, но пользователь должен знать, где расположен файл, в котором хранятся макросы. Глобальный проект проще передавать другим пользователям, и в нем удобно хранить общие макросы. В любой момент могут быть использованы оба типа проектов. На уровне двоичного кода проект Autocad VBA не совместим с проектом Visual Basic , однако обмен формами, модулями и классами можно производить через экспорт-импорт. (Команды Export File, Import File ).
Проекты можно создать по команде Tools - Macro - VBA manager . В диалоговом окне (рис. 7.2) производятся операции с проектами: создание, загрузка и выгрузка из программы, создание макросов.
Файлы глобальных проектов имеют расширение dvb . Сохранять их нужно в каталогах, указанных в маршрутах поддержки ( Tools - Options - Files - Support File Search Path ).Из окна менеджера проектов можно перейти в редактор Visual Basic, где в модуле будут распечатаны процедуры выделенного проекта.
При загрузке проекта все глобальные процедуры, называемые также макросами, становятся доступными для использования. Загрузить проект можно через VBA -менеджер или из командной строки командой VBALoad . Кроме того, при открытии сеанса AutoCAD автоматически загружает проект с именем acad. dvb , который он ищет в путях файлов поддержки. При загрузке проекта может появиться предупреждение что он содержит макросы. Выгрузка проекта командной VBAUNLOAD приводит к освобождению памяти, ранее занятой проектом. Чтобы среда разработки VBA загружалась автоматически, в файл acad.arx нужно внести строку: acadvba.arx
Язык VBA
Основные элементы
Visual Basiс является объектно-ориентированным языком программирования. Главной особенностью этих языков является механизм инкапсуляции. Код и данные связываются вместе в одно целое. Они защищены от внешнего воздействия и от неправильного использования. Инкапсуляции позволяет создать объект.
Объект представляет собой логическое целое, включающее в себя данные и код для работы с этими данными. Мы можем определить часть кода и данных как собственность объекта, которая недоступна извне. На этом пути объект обеспечивает существенную защиту против случайной модификации или некорректного использования таких частных членов объекта.
Во всех случаях объект представляет собой переменную, тип которой определяется пользователем. Когда определяется объект, то неявным образом создается новый тип переменной. Объект имеет набор свойств, т.е. характеристик или величин, применяемых к данному объекту. Например, объект AcadLine обладает свойством StartPoint . Линия может быть красная, - цвет является свойством объектов AutoCAD . Кроме свойств, объекты характеризуются методами. Метод - это определенная операция, которая может быть выполнена над объектом. Например, объект AcadLine обладает методом Rotate .
Объектно-ориентированные языки программирования поддерживают полиморфизм, суть которого можно выразить фразой: "Один интерфейс - множество методов". Полиморфизм представляет собой атрибут, который позволяет использовать один и тот же интерфейс при реализации целого класса различных действий. Выбор того, какое именно действие будет совершено, определяется конкретной ситуацией.
Третьим атрибутом объектно-ориентированных языков программирования является наследование. Оно представляет собой процесс, благодаря которому один объект может наследовать, приобретать свойства от другого объекта. Это свойство поддерживает концепцию классификации, чем и обусловливается его важность. Такая концепция лежит в основе классификации знаний. Например, красное яблоко представляет собой часть класса яблоко. Этот класс, в свою очередь, представляет собой часть класса фрукты. Этот класс, в свою очередь, представляет собой часть класса продукты питания. Без использования классификации каждый объект должен был бы определять все свои характеристики явным образом. Благодаря механизму наследия объект нуждается только в определении таких качеств, которые отличают его от других объектов этого класса.
Семейство (объект Collection ) представляет собой объект, содержащий несколько других объектов одного и того же типа. Каждый элемент семейства нумеруется и может быть идентифицирован либо по номеру, либо по имени.
Класс - это проект, на основе которого впоследствии будет создан конкретный объект. Класс определяет имя объекта, его свойства и методы, т.е. действия, выполняемые над объектом.
Полная ссылка на объект состоит из ряда имен, последовательно вложенных друг в друга. Разделителями имен являются точки. Ряд начинается с объекта Application и заканчивается именем самого объекта. Например, код, который добавляет на чертеж окружность, имеет вид:
Методы - это действия, выполняемые над объектом. Синтаксис применения: Объект.Метод
Свойства - это атрибуты объекта, определяющие его характеристики, такие как размер, цвет, положение на экране и состояние объекта (например, доступность или видимость). Чтобы изменить характеристики объекта, надо просто изменить значения его свойств:
События - это действия, распознаваемые объектом, например, Click или нажатие клавиши. Суть программирования на VBA как раз и заключается в этих двух понятиях: событие и отклик на него. Если пользователь производит какое-либо действие, например, нажимает кнопку, то в качестве отклика выполняется код созданной пользователем процедуры обработки события. Если процедуры нет, то система на данное событие не реагирует.
Чаще всего используют событие нажатия кнопки. Предварительно должна быть составлена процедура в модуле листа, например, для щелчка по кнопке CommandButton1 :
Иерархия объектов
Все объекты AutoCAD организованы в виде иерархической структуры. Корнем дерева является объект Application
Через объект Application можно получить доступ к следующим объектам:
- Preferences
- Documents
- MenuBar
- MenuGroups
Через объект Preferences можно получить доступ к следующим объектам
- PreferencesDisplay
- PreferencesDrafting
- PreferencesFiles
- PreferencesOpenSave
- PreferencesOutput
- PreferencesProfiles
- PreferencesSelection
- PreferencesSystem
- PreferencesUser
Через объект Documents можно получить доступ к объекту Document а через него к большинству других объектов и коллекций:
Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне "Макросы".
В отличие от приложений Microsoft, которые используют для хранения проектов, макросов и программ VBA непосредственно документы, AutoCAD для этих целей использует специальные файлы с расширением .dvb. Это обеспечивает возможность взаимодействия интерфейсов VBA с AutoCAD аналогично тому, как это делается в AutoLISP и ObjectARX. Благодаря тому, что проекты VBA хранятся в отдельных файлах, в одном сеансе AutoCAD приложения VBA могут открывать и закрывать различные чертежи.
Примечание Двоичный формат файлов проектов VBA в AutoCAD не совместим с форматом проектов Visual Basic 6 (файлами VBP). Однако из интегрированной среды разработки IDE (integrated development environment) VBA можно экспортировать и импортировать формы, модули и классы, используя для этого команды ИМПОРТ и ЭКСПОРТ.
Загрузка проекта VBA осуществляется командой VBALOAD . После загрузки модули и макросы проекта становятся доступными в диалоговом окне "Макросы". Для запуска модуля VBA служит команда VBARUN . Если не загружено ни одного проекта VBA, данные опции недоступны. При выводе процедур в списке с именами макросов используется следующий синтаксис:
В диалоговом окне "Макросы" перечнем отображаемых в списке модулей можно управлять с помощью списка "Макросы из".
Запуск макрокоманды VBA из командной строки
С помощью команды -VBARUN можно запустить макрокоманду из командной строки. Это позволяет запускать макрокоманды VBA из командной строки, сценариев и других сред программирования AutoCAD. Единственным аргументом команды должно быть имя модуля и макроса VBA, отделенные точкой ( модуль . макрос ). Образец вызова выглядит следующим образом:
Необходимость использования синтаксиса вида модуль . макрос обусловлена тем, что различные модули могут содержать макросы с одинаковыми именами.
Visual Basic for Applications (VBA) - это язык программирования, встроенный во многие приложения, включая офисные программы, САПР, графические редакторы и многие другие. VBA является упрощенной версией языка Visual Basic, имеет схожий с ним синтаксис. Среда программирования VBA обычно встроена в саму программу, поэтому пользователь может сразу начинать писать программы или загружать готовые приложения для работы.
При разработке языка VBA его авторы ориентировались на обычных пользователей, а не на профессиональных программистов, поэтому создавать программы на VBA достаточно просто и быстро.
Из преимуществ языка VBA можно отметить легкость его освоения и простоту использования, универсальность (изучив VBA для AutoCAD пользователь без труда изучит, например, VBA для Microsoft Word или Excel). Главный недостаток языка VBA – проблемы с обратной совместимостью разных версий.
В AutoCAD также есть встроенная поддержка языка VBA, для этого служит отдельный модуль AutoCAD VBA Enabler. С помощью программ на VBA можно обращаться ко всем объектам AutoCAD, примитивам чертежа, общаться между AutoCAD и сторонними приложениями и многое другое. Другими словами, с помощью языка VBA можно создавать программы любой сложности, которые позволят расширить функциональность системы, автоматизировать рутинные операции и многое другое.
Важным отличием VBA для AutoCAD от VBA для других программ является то, что в нем программы хранятся не внутри файлов, а во внешних файлах с расширением DVB.
В последних версиях AutoCAD модуль VBA Enabler не входит в дистрибутив и не устанавливается вместе с самим AutoCAD. Чтобы получить возможность работать с VBA в AutoCAD, вам необходимо скачать и установить AutoCAD VBA Enabler со специальной страницы в интернете
Важно то, что при выборе модуля VBA Enabler нужно обратить внимание на версию AutoCAD и его разрядность. Например, модуль VBA для AutoCAD 2018 32-x не будет работать в среде AutoCAD 2018 64-x.
После скачивания, распаковки и установки модуля AutoCAD VBA Enabler в программе AutoCAD появится возможность работать с приложениями на языке VBA.
Окно редактора VBA (VBA IDE) запускается командой VBAIDE.
Оно стандартное для языка VBA и ничем не отличается от VBA в других программах.
Обратите внимание, что двоичный формат файлов проектов VBA в AutoCAD не совместим с форматом проектов Visual Basic. Однако, в VBA для AutoCAD можно импортировать формы, модули и классы, хранящиеся в файлах форматов FRM, BAS и CLS соответственно.
Аннотация: Язык VBA предоставляет широкие возможности программирования в среде AutoCAD. В лекции показана возможность управления окружением AutoCAD и даны технологии создания и редактирования слоев и объектов. Разбирается работа с текстом и размерностями, с блоками и листами, с трехмерными поверхностями и сплошными 3D объектами.
Цель лекции: изучить принципы и конкретные технологии программирования на VBA .
Введение. Обзор команд. Объектная модель
Введение
Интерфейс AutoCAD ActiveX/VBA дает некотoрые преимущества по сравнению с другими методами создания приложений AutoCAD :
- Высокая скорость выполнения процесса, так как в отличие от AutoLISP -приложений выполнение команд происходит внутри процесса;
- Простота использования, обусловленная простотой языка программирования;
- Большие возможности межпрограмного обмена, так как VBA и ActiveX разрабатывались для взаимодействия с другими Windows -приложениями.
Понятие внедренных и глобальных проектов VBA
Приложение Autocad VBA представляет собой набор программных модулей, модулей классов и форм. Пороект может быть сохранен как в рисунке (внедренный), так и во внешнем файле. Внедренный проект автоматически загружается при открытии рисунка. Ограничение внедренных проектов в том, например, что они не могут закрыть рисунок, внутри которого находятся. Глобальные проекты в этом плане более гибки, при этом однако пользователь должен знать где расположен файл в котором хранятся макросы. Глобальный проект проще передавать другим пользователям и в нем удобно хранить общие макросы. В любой момент могут быть использованы оба типа проектов. На уровне двоичного кода проект Autocad VBA не совместим с проектом Visual Basic , однако обмен формами, модулями и классами можно производить через экспорт- импорт. (Команды IMPORT и EXPORT VBA ).
Загрузка существующего проекта
При загрузке проекта все глобальные процедуры, называемые так же макросами, становятся доступными для использования. Загрузить проект можно через VBA -менеджер или с командной строки VBALOAD . Кроме того автокад грузит автоматически проект с именем acad. dvb , который может найти в путях файлов поддержки. При загрузке проекта может появиться предупреждение, что он содержит макросы, а значит может содержать и вирусы. Выгрузка проекта командной VBAUNLOAD приводит к высвобождению памяти ранее занятой проектом. Внедрить проект в рисунок можно с помощью VBA -менеджера, он же позволяет извлечь проект из рисунка, при этом предлагая сохранить его в отдельном файле. Чтобы среда разработки VBA автоматически загрузилась при загрузке AutoCAD , в файл acad.arx нужно внести строку acadvba.arx .
Определение компонентов проекта
Проект может состоять из различных компонентов:
- объекты;
- формы;
- стандартные модули;
- модули класса;
- ссылки.
Добавить компонент можно через меню Insert , компоненты так же можно импортировать из файлов ( .frm, . bas , .cls ).
Обзор команд VBA AutoCAD
- VBAIDE - открывает окно VBA IDE , позволяющее редактировать, запускать и отлаживать программы.
- VBALOAD - загружает проект.
- VBARUN - запускает макрос на выполнение.
- VBAUNLOAD - выгружает проект, освобождая память.
- VBAMAN - показывает окно менеджера VBA .
- VBASTMT - позволяет выполнить команду VBA в командной строке AutoCAD .
Основные понятия объектной модели AutoCAD
Все объекты AutoCAD организованы в виде иерархической структуры. Корнем дерева является объект Application .
Через объект Application можно получить доступ к следующим объектам:
- Preferences;
- Documents;
- MenuBar;
- MenuGroups;
Через объект Preferences можно получить доступ к следующим объектам
- PreferencesDisplay;
- PreferencesDrafting;
- PreferencesFiles;
- PreferencesOpenSave;
- PreferencesOutput;
- PreferencesProfiles;
- PreferencesSelection;
- PreferencesSystem;
- PreferencesUser.
Через объект Documents можно получить доступ к объекту Document а через него к большинству других объектов и коллекций:
В двух последних расположены объекты AutoCAD , видимые на рисунке:
Доступ к иерархии объектов. Коллекции, свойства и методы
Связь VBA с активным чертежом обеспечивается посредством объекта ThisDrawing . С его помощью можно получить немедленный доступ ко всем свойствам и методам объекта Document а также ко всем другим объектам в иерархии.
Когда используются глобальные проекты, ThisDrawing всегда ссылается на активный документ. При использовании внедренных проектов ThisDrawing всегда ссылается на документ, содержащий проект. Например, следующая строка кода в глобальном проекте сохраняет любой чертеж, который в данный момент активен:
Ссылка на объекты в иерархии объектов
Доступ к объекту можно получить непосредственно или через объектную переменную. Для непосредственной сслыки на объект достаточно указать полный путь к нему в иерархии. Например, следующий фрагмент кода добавляет линию в пространство модели:
Для доступа к объекту через объектную переменную поступаем следующим образом. Определяем переменную желаемого типа, после чего устанавливаем переменную так, чтобы она ссылалась на нужный объект. К примеру следующий код определит объектную переменную moSpace типа AcadModelSpace так, чтобы она ссылалась на текущее пространство модели :
В примере добавляем линию в пространство модели , используя эту переменную:
Корневой объект Application расположен в иерархии выше объекта Document . Выше показано, что объект ThisDrawing обеспечивает доступ к объекту Document . А у объекта Document есть свойство Application , которое и является ссылкой на объект Application . Пример обращения:
Коллекции объектов
Объект Collection - является предопределенным объектом содержащим все вхождения подобных объектов. Существуют следующие объекты коллекции:
Доступ к коллекции
Большинство коллекций доступны через объект Document , т.к. он содержит свойства для каждой из коллекций. Следующий код устанавливает ссылку объектной переменной на коллекцию Layers :
Коллекции Documents, MenuBar и MenuGroups доступны через объект Application . Он содержит свойства для каждой из этих коллекций. Следующий пример определяет объектную переменную и создает ссылку через нее на коллекцию:
Добавление нового элемента коллекции
Следующий пример создает слой и добавляет его в коллекцию:
Перебор членов коллекции
Для выбора нужного члена коллекции используется метод Item . В качестве параметра ему передается номер ( Index ) объекта в коллекции либо его символьный идентификатор. Пример демонстрирует перебор всех слоев с отображением их имен
Пример поиска слоя с именем ABC :
Не следует использовать методы редактирования примитивов ( Copy, Array, Mirror и др.) на любом объекте который одновременно перебирается с помощью механизма For Each . В случае необходимости нужно закончить перебор, создать временный массив эквивалентный коллекции и в этом массиве выполнить редактирование.
Удаление члена коллекции
Пример удаления слоя:
Удаленный объект восстановлению не подлежит.
Понятие свойств и методов
Каждый объект обладает связанными с ним свойствами и методами. Свойства описывают некоторые характеристики присущие объекту, а методы позволяют выполнять действия над объектами, в частности, менять и читать свойства. Например, объект окружность имеет свойство Центр, которое представляет трехмерную координату центра окружности. Чтобы сменить свойство достаточно задать ему другое значение. Окружность как целое имеет метод Offset , который создает новый объект на указанном смещении от существующего. Полный перечень свойств и методов есть в ActiveX and VBA Reference .
Понятие родительского объекта
Каждый объект имеет своего родителя с которым он постоянно связан. Доступ к каждому объекту можно осуществить следуя от родительского объекта к дочернему. Кроме того все объекты имеют свойство Application , как непосредственную ссылку на корневой объект.
Библиотеки типов
Описание объектов, свойств и методов хранятся в библиотеке типов, с помощью которой браузеры и приложения могут определить характеристики объектов. Прежде чем использовать объекты автоматизации, следует создать ссылку на библиотеку типов. Это нужно для того, чтобы глобальные функции были доступны непосредственно без подготовки. Вызовы функций при этом могут контролироваться компилятором на корректность. Увеличивается надежность и читабельность программы.
Получение первого примитива из базы данных рисунка
Применение variant в методах и свойствах
Для передачи массива данных AutoCAD использует тип Variant который может принимать данные любого типа за исключением строк фиксированной длины и типов данных, определяемых пользователем. Может также принимать значения Empty, Error, Nothing, NULL . Чтобы узнать какой именно тип данных хранятся в переменной типа Variant , нужно обратиться к функции VarType или TypeName .
Тип данных Variant используется для передачи массива данных из/в AutoCAD ActiveX Automation . В AutoCAD VBA -входные массивы автоматически преобразуются в тип Variant . Однако c выходными массивами все не так просто. Метод CreateTypedArray преобразует массив в Variant , содержащий "смесь" из Integer, Double и т.д. Эту "смесь" можно передать в любой метод или любое свойство AutoCAD , которые принимают массив чисел как Variant .
В примере преобразуются три массива координат сплайна с передачей их методу AddSpline .
Интерпретация variant-массивов
Передаваемая AutoCAD ActiveX Automation информация массива возвращается как тип Variant , если типы данных элементов массива известны. Иначе применяем функции VarType Typename . Для перебора элементов массива удобен метод For Each . Пример вычисления расстояния между двумя точками введенными пользователем:
Использование других языков программирования
Чтобы использовать приведенные примеры не в VBA а в VB следует, во-первых, сослаться на библиотеку типов, во-вторых заменить все ссылки ThisDrawing Для этого определить переменную для приложения AutoCAD (myApp) и для активного документа ( myDoc ). Если AutoCAD запущен, метод GetObject возвращает объект AutoCAD Application . Если AutoCAD не запущен, то вызывается обработчик ошибок. Затем метод CreateObject пытается создать объект AutoCAD Application , как в следующем примере:
Здесь уже используем acadDoc -переменную для ссылки на текущий рисунок AutoCAD . Если запущены несколько сеансов, AutoCAD -функция GetObject возвращает первое вхождение из Windows Running Object Table (ROT) .
Следующий пример демонстрирует создание линии в VB и VBA
Управление окружением AutoCAD
Открытие, сохранение и закрытие чертежа
Коллекция Documents и объект Document обеспечивают доступ к файловым функциям. Для этого следует использовать один из методов Add, Close, Save, SaveAs, Import, Export . Пример открытия рисунка:
Аннотация: Язык VBA предоставляет широкие возможности программирования в среде AutoCAD. В лекции показана возможность управления окружением AutoCAD и даны технологии создания и редактирования слоев и объектов. Разбирается работа с текстом и размерностями, с блоками и листами, с трехмерными поверхностями и сплошными 3D объектами.
Цель лекции: изучить принципы и конкретные технологии программирования на VBA .
Введение. Обзор команд. Объектная модель
Введение
Интерфейс AutoCAD ActiveX/VBA дает некотoрые преимущества по сравнению с другими методами создания приложений AutoCAD :
- Высокая скорость выполнения процесса, так как в отличие от AutoLISP -приложений выполнение команд происходит внутри процесса;
- Простота использования, обусловленная простотой языка программирования;
- Большие возможности межпрограмного обмена, так как VBA и ActiveX разрабатывались для взаимодействия с другими Windows -приложениями.
Понятие внедренных и глобальных проектов VBA
Приложение Autocad VBA представляет собой набор программных модулей, модулей классов и форм. Пороект может быть сохранен как в рисунке (внедренный), так и во внешнем файле. Внедренный проект автоматически загружается при открытии рисунка. Ограничение внедренных проектов в том, например, что они не могут закрыть рисунок, внутри которого находятся. Глобальные проекты в этом плане более гибки, при этом однако пользователь должен знать где расположен файл в котором хранятся макросы. Глобальный проект проще передавать другим пользователям и в нем удобно хранить общие макросы. В любой момент могут быть использованы оба типа проектов. На уровне двоичного кода проект Autocad VBA не совместим с проектом Visual Basic , однако обмен формами, модулями и классами можно производить через экспорт- импорт. (Команды IMPORT и EXPORT VBA ).
Загрузка существующего проекта
При загрузке проекта все глобальные процедуры, называемые так же макросами, становятся доступными для использования. Загрузить проект можно через VBA -менеджер или с командной строки VBALOAD . Кроме того автокад грузит автоматически проект с именем acad. dvb , который может найти в путях файлов поддержки. При загрузке проекта может появиться предупреждение, что он содержит макросы, а значит может содержать и вирусы. Выгрузка проекта командной VBAUNLOAD приводит к высвобождению памяти ранее занятой проектом. Внедрить проект в рисунок можно с помощью VBA -менеджера, он же позволяет извлечь проект из рисунка, при этом предлагая сохранить его в отдельном файле. Чтобы среда разработки VBA автоматически загрузилась при загрузке AutoCAD , в файл acad.arx нужно внести строку acadvba.arx .
Определение компонентов проекта
Проект может состоять из различных компонентов:
- объекты;
- формы;
- стандартные модули;
- модули класса;
- ссылки.
Добавить компонент можно через меню Insert , компоненты так же можно импортировать из файлов ( .frm, . bas , .cls ).
Обзор команд VBA AutoCAD
- VBAIDE - открывает окно VBA IDE , позволяющее редактировать, запускать и отлаживать программы.
- VBALOAD - загружает проект.
- VBARUN - запускает макрос на выполнение.
- VBAUNLOAD - выгружает проект, освобождая память.
- VBAMAN - показывает окно менеджера VBA .
- VBASTMT - позволяет выполнить команду VBA в командной строке AutoCAD .
Основные понятия объектной модели AutoCAD
Все объекты AutoCAD организованы в виде иерархической структуры. Корнем дерева является объект Application .
Через объект Application можно получить доступ к следующим объектам:
- Preferences;
- Documents;
- MenuBar;
- MenuGroups;
Через объект Preferences можно получить доступ к следующим объектам
- PreferencesDisplay;
- PreferencesDrafting;
- PreferencesFiles;
- PreferencesOpenSave;
- PreferencesOutput;
- PreferencesProfiles;
- PreferencesSelection;
- PreferencesSystem;
- PreferencesUser.
Через объект Documents можно получить доступ к объекту Document а через него к большинству других объектов и коллекций:
В двух последних расположены объекты AutoCAD , видимые на рисунке:
Доступ к иерархии объектов. Коллекции, свойства и методы
Связь VBA с активным чертежом обеспечивается посредством объекта ThisDrawing . С его помощью можно получить немедленный доступ ко всем свойствам и методам объекта Document а также ко всем другим объектам в иерархии.
Когда используются глобальные проекты, ThisDrawing всегда ссылается на активный документ. При использовании внедренных проектов ThisDrawing всегда ссылается на документ, содержащий проект. Например, следующая строка кода в глобальном проекте сохраняет любой чертеж, который в данный момент активен:
Ссылка на объекты в иерархии объектов
Доступ к объекту можно получить непосредственно или через объектную переменную. Для непосредственной сслыки на объект достаточно указать полный путь к нему в иерархии. Например, следующий фрагмент кода добавляет линию в пространство модели:
Для доступа к объекту через объектную переменную поступаем следующим образом. Определяем переменную желаемого типа, после чего устанавливаем переменную так, чтобы она ссылалась на нужный объект. К примеру следующий код определит объектную переменную moSpace типа AcadModelSpace так, чтобы она ссылалась на текущее пространство модели :
В примере добавляем линию в пространство модели , используя эту переменную:
Корневой объект Application расположен в иерархии выше объекта Document . Выше показано, что объект ThisDrawing обеспечивает доступ к объекту Document . А у объекта Document есть свойство Application , которое и является ссылкой на объект Application . Пример обращения:
Коллекции объектов
Объект Collection - является предопределенным объектом содержащим все вхождения подобных объектов. Существуют следующие объекты коллекции:
Доступ к коллекции
Большинство коллекций доступны через объект Document , т.к. он содержит свойства для каждой из коллекций. Следующий код устанавливает ссылку объектной переменной на коллекцию Layers :
Коллекции Documents, MenuBar и MenuGroups доступны через объект Application . Он содержит свойства для каждой из этих коллекций. Следующий пример определяет объектную переменную и создает ссылку через нее на коллекцию:
Добавление нового элемента коллекции
Следующий пример создает слой и добавляет его в коллекцию:
Перебор членов коллекции
Для выбора нужного члена коллекции используется метод Item . В качестве параметра ему передается номер ( Index ) объекта в коллекции либо его символьный идентификатор. Пример демонстрирует перебор всех слоев с отображением их имен
Пример поиска слоя с именем ABC :
Не следует использовать методы редактирования примитивов ( Copy, Array, Mirror и др.) на любом объекте который одновременно перебирается с помощью механизма For Each . В случае необходимости нужно закончить перебор, создать временный массив эквивалентный коллекции и в этом массиве выполнить редактирование.
Удаление члена коллекции
Пример удаления слоя:
Удаленный объект восстановлению не подлежит.
Понятие свойств и методов
Каждый объект обладает связанными с ним свойствами и методами. Свойства описывают некоторые характеристики присущие объекту, а методы позволяют выполнять действия над объектами, в частности, менять и читать свойства. Например, объект окружность имеет свойство Центр, которое представляет трехмерную координату центра окружности. Чтобы сменить свойство достаточно задать ему другое значение. Окружность как целое имеет метод Offset , который создает новый объект на указанном смещении от существующего. Полный перечень свойств и методов есть в ActiveX and VBA Reference .
Понятие родительского объекта
Каждый объект имеет своего родителя с которым он постоянно связан. Доступ к каждому объекту можно осуществить следуя от родительского объекта к дочернему. Кроме того все объекты имеют свойство Application , как непосредственную ссылку на корневой объект.
Библиотеки типов
Описание объектов, свойств и методов хранятся в библиотеке типов, с помощью которой браузеры и приложения могут определить характеристики объектов. Прежде чем использовать объекты автоматизации, следует создать ссылку на библиотеку типов. Это нужно для того, чтобы глобальные функции были доступны непосредственно без подготовки. Вызовы функций при этом могут контролироваться компилятором на корректность. Увеличивается надежность и читабельность программы.
Получение первого примитива из базы данных рисунка
Применение variant в методах и свойствах
Для передачи массива данных AutoCAD использует тип Variant который может принимать данные любого типа за исключением строк фиксированной длины и типов данных, определяемых пользователем. Может также принимать значения Empty, Error, Nothing, NULL . Чтобы узнать какой именно тип данных хранятся в переменной типа Variant , нужно обратиться к функции VarType или TypeName .
Тип данных Variant используется для передачи массива данных из/в AutoCAD ActiveX Automation . В AutoCAD VBA -входные массивы автоматически преобразуются в тип Variant . Однако c выходными массивами все не так просто. Метод CreateTypedArray преобразует массив в Variant , содержащий "смесь" из Integer, Double и т.д. Эту "смесь" можно передать в любой метод или любое свойство AutoCAD , которые принимают массив чисел как Variant .
В примере преобразуются три массива координат сплайна с передачей их методу AddSpline .
Интерпретация variant-массивов
Передаваемая AutoCAD ActiveX Automation информация массива возвращается как тип Variant , если типы данных элементов массива известны. Иначе применяем функции VarType Typename . Для перебора элементов массива удобен метод For Each . Пример вычисления расстояния между двумя точками введенными пользователем:
Использование других языков программирования
Чтобы использовать приведенные примеры не в VBA а в VB следует, во-первых, сослаться на библиотеку типов, во-вторых заменить все ссылки ThisDrawing Для этого определить переменную для приложения AutoCAD (myApp) и для активного документа ( myDoc ). Если AutoCAD запущен, метод GetObject возвращает объект AutoCAD Application . Если AutoCAD не запущен, то вызывается обработчик ошибок. Затем метод CreateObject пытается создать объект AutoCAD Application , как в следующем примере:
Здесь уже используем acadDoc -переменную для ссылки на текущий рисунок AutoCAD . Если запущены несколько сеансов, AutoCAD -функция GetObject возвращает первое вхождение из Windows Running Object Table (ROT) .
Следующий пример демонстрирует создание линии в VB и VBA
Управление окружением AutoCAD
Открытие, сохранение и закрытие чертежа
Коллекция Documents и объект Document обеспечивают доступ к файловым функциям. Для этого следует использовать один из методов Add, Close, Save, SaveAs, Import, Export . Пример открытия рисунка:
Читайте также: