Макросы vba в автокаде что это

Адаптация AutoCAD при помощи VBA

VBA может служить средством интеграции различных приложений, в которые встроена поддержка VBA. Таким образом, AutoCAD может управлять другими приложениями, например Microsoft Word или Excel, используя их библиотеки объектов.

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

Разработка при помощи AutoCAD VBA

VBA отправляет сообщения через интерфейс AutoCAD ActiveX Automation. С помощью макроса AutoCAD VBA среда Visual Basic может работать одновременно с AutoCAD и осуществлять программный контроль AutoCAD через интерфейс ActiveX Automation. Связка AutoCAD, ActiveX Automation и VBA является очень мощным средством программирования. Она позволяет не только управлять объектами AutoCAD, но и обмениваться данными с другими приложениями.

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

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

Второй составляющей является интерфейс ActiveX Automation, который определяет порядок передачи сообщений (взаимодействия) с объектами AutoCAD. Программирование на VBA требует понимания принципов организации интерфейса ActiveX Automation.

Третьей составляющей является, собственно, сама среда VBA. VBA имеет свой собственный набор объектов, ключевых слов, констант, которые используются при написании, отладке и выполнении программ. В комплект поставки AutoCAD входит обширная справочная система по VBA от Microsoft.

Интерфейс ActiveX/VBA программы AutoCAD обладает рядом преимуществ по сравнению с другими интерфейсами API AutoCAD.

Использование приложений VBA

Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы».

Загрузка проекта VBA осуществляется командой VBALOAD. После загрузки модули и макросы проекта становятся доступными в диалоговом окне «Макросы». Для выполнения модуля VBA служит команда VBARUN. Если не загружено ни одного проекта VBA, данные параметры недоступны. При выводе процедур в списке с именами макросов используется следующий синтаксис:

В диалоговом окне «Макросы» перечнем отображаемых в списке модулей можно управлять с помощью списка «Макросы из».

Запуск макрокоманды VBA из командной строки

Автоматическая загрузка и выполнение проектов VBA

Можно автоматически загружать ранее созданные проекты VBA при каждом запуске AutoCAD. При этом содержащиеся в таких проектах макросы стразу же становятся доступными. Кроме того, для автоматической загрузки нужных приложений может использоваться команда ЗАГПРИЛ.

acvba.arx — Автоматическая загрузка VBA

Загрузка VBA возможна только после выполнения любой из команд AutoCAD VBA. Для того чтобы arx-модуль VBA автоматически загружался при запуске AutoCAD, следующую строку нужно добавить в файл acad. rx:

Для автоматического выполнения макроса его следует добавить в файл acad. dvb и назвать AcadStartup. Макрос с именем AcadStartup из файла acad. dvb выполняется автоматически при загрузке модуля VBA.

acad.dvb — Автоматическая загрузка проекта VBA

Файл acad. dvb удобно использовать для загрузки отдельных объектов VBA при каждом запуске AutoCAD. При каждом запуске нового сеанса AutoCAD производится поиск и загрузка файла acad. dvb.

Если какой-либо макрос файла acad. dvb должен выполняться при создании нового или открытии имеющегося чертежа, в файл acaddoc.lsp следует добавить приведенный ниже код:

Источник

Автоматизация рутинных операций между Excel и AutoCAD при помощи VBA

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

Я инженер-проектировщик ОВиК, не программист. И не хочу, да и некогда, вникать в серьезное программирование. Чаще всего появляется ситуация, что нужно как-то автоматизировать рутину здесь и сейчас. На помощь приходит простой язык VBA.

Далее я покажу, как можно без особых забот сделать самому то, за что серьезные ребята берут не плохие денежки. А именно перенос данных из Excel в AutoCAD и обратно. Заинтересованных прошу под кат.

Программировать будем на стороне Excel — мне так проще. Для подключения нужно войти в режим разработчика: Alt+F8 Либо можно открыть вкладку «разработчик» из настроек ленты.

В окне разработчика VBA входим в верхнее меню: Tools/References. В этом окне нужно поставить галочку на вашей версии AutoCAD

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

В моем случае это AutoCAD 2014 Type Library. Далее нужно в левом окне создать в вашей книге модуль, как на скриншоте (Module)

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

И в модуль вставляем нижеприведенный код:

Аналогичным способом можно создавать блоки с атрибутами, в которые можно вставлять текст из ячеек.
Нужно внести в верхний код изменения вроде:

Код обновления текста по хэндлу — написан ниже: ‘получаем хэндл из ячейки, в которую мы записали кодом выше.

entHandle = ActiveCell.Offset(0, 3).Value ‘получили наш блок по хэндлу
Set blockObj = acadDoc.HandleToObject(entHandle)

А дальше делаем всё то же самое, что и выше.

Для того, чтобы немного разъяснить как это работает вживую — записал видео:

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

Опять же чем хорош VBA — что он всегда под рукой 🙂 Excel-то основной инструмент у инженера.

Источник

Программирование на VBA

Введение. Обзор команд. Объектная модель

Введение

Интерфейс AutoCAD ActiveX/VBA дает некотoрые преимущества по сравнению с другими методами создания приложений AutoCAD :

Понятие внедренных и глобальных проектов VBA

Загрузка существующего проекта

Определение компонентов проекта

Проект может состоять из различных компонентов:

Обзор команд VBA AutoCAD

Основные понятия объектной модели AutoCAD

Через объект Application можно получить доступ к следующим объектам:

Через объект Preferences можно получить доступ к следующим объектам

Через объект Documents можно получить доступ к объекту Document а через него к большинству других объектов и коллекций:

Доступ к иерархии объектов. Коллекции, свойства и методы

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

Ссылка на объекты в иерархии объектов

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

Для доступа к объекту через объектную переменную поступаем следующим образом. Определяем переменную желаемого типа, после чего устанавливаем переменную так, чтобы она ссылалась на нужный объект. К примеру следующий код определит объектную переменную moSpace типа AcadModelSpace так, чтобы она ссылалась на текущее пространство модели :

Коллекции объектов

Доступ к коллекции

Добавление нового элемента коллекции

Следующий пример создает слой и добавляет его в коллекцию:

Перебор членов коллекции

Пример поиска слоя с именем ABC :

Удаление члена коллекции

Пример удаления слоя:

Удаленный объект восстановлению не подлежит.

Понятие свойств и методов

Понятие родительского объекта

Библиотеки типов

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

Получение первого примитива из базы данных рисунка

Применение variant в методах и свойствах

Интерпретация variant-массивов

Использование других языков программирования

Следующий пример демонстрирует создание линии в VB и VBA

Управление окружением AutoCAD

Открытие, сохранение и закрытие чертежа

Источник

Приложение AutoCAD VBA и особенности работы с ним

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы 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 в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Важно то, что при выборе модуля VBA Enabler нужно обратить внимание на версию AutoCAD и его разрядность. Например, модуль VBA для AutoCAD 2018 32-x не будет работать в среде AutoCAD 2018 64-x.

После скачивания, распаковки и установки модуля AutoCAD VBA Enabler в программе AutoCAD появится возможность работать с приложениями на языке VBA.

Окно редактора VBA (VBA IDE) запускается командой VBAIDE.

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Оно стандартное для языка VBA и ничем не отличается от VBA в других программах.

Обратите внимание, что двоичный формат файлов проектов VBA в AutoCAD не совместим с форматом проектов Visual Basic. Однако, в VBA для AutoCAD можно импортировать формы, модули и классы, хранящиеся в файлах форматов FRM, BAS и CLS соответственно.

Список команд, предназначенных для работы с программами VBA:

Источник

Програмирование в AutoCAD с помощью VBA.

Следующие шаги

Это был быстрый тур по ActiveX Automation, но вы могли оценить свои возможности. ActiveX Automation является простым способом настроить AutoCAD, и VBA позволяет это делать самостоятельно каждому, от новичка до эксперта. Много приложений, включая Microsoft Word и Excel, поддерживают программирование с помощью ActiveX Automation, так же как большинство проффесиональных средсв разработки типа Borland Delphi.

Изучение интерфейса VBA


Оформление внешнего вида программы на VBA

Откройте меню Insert menu и выберите UserForm. Появяться два новых окна. Первое, называемое Project-UserForm1 (UserForm), это конструктор форм. Вы должны использовать его для графического конструирования форм. Второе окно, называемое Toolbox, содержит различные объекты, которые вы можете добавить к форме.

Прежде всего, посмотрите на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль внутри проекта, и каждый объект и каждый объект в каждой форме имеет свое имя. Когда вы начинаете проект, добавляете новую форму к проекту, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я думаю, что вы будите изменять эти имена на другие, что нибудь значащие для вас. Нажмите правой кнопкой мыши на Project в Project Explorer и выберите Project Properties из всплывающего меню. Измените имя проекта на VbaDemo и нажмите на OK.

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Рисунок 1. Меню Properties

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Рисунок 2. Меню Toolbox

Теперь вы готовы углубиться в Toolbox (ниже слева) и спроектировать свою собственную форму. Чтобы добавить управление к вашей форме, кликните на иконке в панели инструментов Control, а затем кликните на форме. Если Вы не уверены, какой вид управления представляет определенная кнопка в пaнели инструментов Control, подведите курсор мыши на несколько секунд к иконке, и тогда отобразиться описание того, что собой представляет данная иконка. Верхняя левая точка иконки расположиться в той точке, на которую вы укажете в форме. Вы можете изменить размер иконки управления перемещая любой из его углов или граней, точно так же как Вы мог бы изменять размеры Проводника Windows.

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Рисунок 3. Общий вид формы

Вы можете также установить его свойста Top, Left, Height, и Width в окне свойств (Properties). Дале добавте две командные кнопки к форме. Измените имя первой кнопки на SayHello и ее заголовок на Say Hello, а затем измените имя второй кнопки на AskQuestion и ее заголовок на Ask a Question. Ваша первая форма должна быть похожа на ту, которая показана на рисунке 2.

Работа с пользователем.

Теперь, когда интерфейс с пользователем завершен, вам нужно добавить немного кода за сценой. VBA в AutoCAD R14.01 и R2000 имеет встроенную связь с AutoCAD, в отличие от R14, где нужно вручную подключать VBA к AutoCAD.

Я уверен что Вы стремитесь видеть все это в действии. Выберите General из падающего меню Objects и Declarations из падающего меню Events, и затем добавьте следующие переменные для образования связи: Private ThisApplication As Object

Если вы используете AutoCAD 14.01 или 2000, вы можете удалять весь код что вы набрали. Как я упомянул, Вы имеете встроенный объект ThisDrawing который представляет текущий чертеж. Он имеет свойство Application которое вы можете использовать для вызова любых методов объекта Application.

Получение ответа

После того как вы подключились к AutoCAD, вам необходимо добавить немного кода к вашему приложению что бы оно занало, что делать, когда пользователь что-то делает. Сделайте двойной щелчек мыши на кнопке SayHello в вашей форме. Обратите внимание что ваш редактор кода перемещается к событию Click кнопки. Это событие по умолчанию для управления кнопкой. Если вы желаете немного другое событие, Вы можете просто выбрать его из правого падающего списка.

Как минимум, вы дадите для MsgBox сообщение для отображения, но этот метод может больше, если ему дать больше информации. К примеру, он может задать вопрос пользователю и сообщить его вам. Выберите AskQuestion из меню Object в редакторе кода; редактор снова предположит что вам нужно событие Click. Добавьте следующий код:

If (MsgBox(«Is it raining out?», vbYesNo, «Hey, Weatherman!») = vbYes) _ Then MsgBox «Better close the window!» Else MsgBox «Enjoy the nice day!» End If

Когда вы укажите MsgBox отобразить кнопки Yes и No, вы можете проверить код возврата что бы определить, какую кнопку нажал пользователь. Если возвращаемое значение эквивалентно встроенной константе vbYes, пользователь нажал кнопку Yes. И как вы можете догадаться, нажатие кнопки No будет возвращать значение vbNo.

Готовы видеть результаты ваших усилий? Запустите программу на выполнение выбрав Run из меню Run. Ваша форма отобразиться в окне AutoCAD, и выступающие кнопки будут настаивать на ответе. Немного поотвечайте на вопросы, а затем возвращайтесь, когда вы утомитесь отвечать на вопросы. Ваше приложение прочти закончено, но оно не содержит одной важной детали. Приложение запускается из среды разработки VBA, но как оно будет загружаться внутри AutoCAD? Никакие силы не заставят без этой детали запуститься приложению из командной строки AutoCAD. Что бы это сделать, вам необходим метод-помощник. Откройте в VBA меню Insert и выберите Module. Измените имя модуля на AppStuff, и введите следующий код в редакторе:

Public Sub VbaDemo() MainWin.Show End Sub Сохраните ваш VBA-проект, затем переключитесь в командную строку AutoCAD и наберите vbarun AppStuff.VbaDemo. Ваша форма отобразилась на экране!

В данном уроке мы охватим понятия настройки AutoCAD с помощью VBA. Мы создадим FancyText, Простое VBA-приложение, которое будет создавать привязанный текст под любым уголом на текущем уровне. Если Вы сталкиваетесь с проблемами (или только слишком ленивы чтобы набрать код), FancyText доступен на Web-сайте CADALYST.

Создание формы

Второе окно, под названием Toolbox, содержит различные объекты которые вы можете добавлять к форме. Я скоро опишу процесс создания форм, но прежде всего посмотрите на на новое имя формы: UserForm1. Каждый VBA-проект, каждая форма и модуль в проекте, и каждый объект в каждой форме имеет свое имя. Когда вы начинаете проект, добавляете новую форму к проеку, или добавляете новый объект к форме, VBA создает имя по умолчанию. Я всегда изменяю эти имена по умолчанию на что-нибудь более значимое. Кликните правой кнопкой мыши на Project в Project Explorer и затем выберите Project Properties из всплывающего меню. Измените имя проекта на FancyText и кликните на OK. Далее найдите окно под названием Properties. Вы наверно помните, что большинство объектов имеют различные свойства, которые определяют внешний вид этих объектов. Окно Properties позволяет вам легко устанавливать эти свойства. Прямо сейчас, в падающем меню в верху окна должно находиться UserForm1 UserForm. Это падающее меню содержит каждый объект, который вы расположили на форме. Ниже в этом падающем меню находится длинный список свойств формы: Caption, Height, Top, и множество других.

Создание интерфейса пользователя

Теперь вы готовы начать создание интерфейса пользователя для FancyText. Кликните на конструкторе форм, что бы активировать панель инструментов (Toolbox). Что бы расположить объект на форме, кликните на соответсвующей иконке в панели инструментов, а затем переместите его в конструктор форм. Когда вы перемещаете объекты по форме, вы можете видеть что перемещаемый объект выделен с внешней стороны.

После того, как вы расположили объект, вы можете изменить его размеры, или с помощью мыши, или устанавливая его свойства top, left, height, и width в окне Properties. Пользователи нашей программы будут нуждаться в изменении высоты текста, поэтому разместите метку (label) и блок текста (textbox) из панели инструментов на форму. Кликните на метке, переместите ее в окно Properties, и измените ее имя на lblHeight и ее заголовок на Height. Кликните на блок текста и измените его имя txtHeight.

Что-бы позволить пользователям вращать текст добавьте еще одну метку и блок текста вместе со слайдером (SpinButton). Пользователи теперь смогут вводить угол поворота непосредственно в блок текста, или использовать слайдер для изменения угла вращения при одном нажатии на один градус.

Измените имя новой метки на lblRotation и ее заголовок на Rotation. Измените имя нового текстового окна на txtRotation, и затем измените имя слайдера на spnRotation. Что бы пользователи могли вводить текст, добавьте еще одну метку и еще один блок текста.

Измените имя метки на lblText и ее заголовок на Text:, после этого измените имя блока текста на txtText.Finally, и добавьте кнопку управления (CommandButton) к форме. Измените ее имя на cmdGo и ее заголовок на Go! Нажатие на уту кнопку будет вызывать создание текста. Ваша форма должна выглядеть как показано на рисунке 4.

Макросы vba в автокаде что это. Смотреть фото Макросы vba в автокаде что это. Смотреть картинку Макросы vba в автокаде что это. Картинка про Макросы vba в автокаде что это. Фото Макросы vba в автокаде что это

Рисунок 4. Окно ввода данных для Fancy Text.

Создание кода программы

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

Одно VBA-приложение может управлять любым количеством поддерживающих VBA приложений. К примеру, вы можете использовать VBA что-бы создать список материалов извлекя инормацию из атрибутов в вашем черетеже и перенести его в таблицу в Excel. Вы можете даже использовать среду AutoCAD VBA что бы создавать приложения, не связанные с AutoCAD. Как всегда, добавление гибкости означает добавление лишней работы, но к счастью, эта работа не слишком напряженная.

Private mappAcad As Object

Работа с вашим первым приложением

В уроке 3 мы начали ваше первое VBA-приложение для AutoCAD, FancyText. Вы создали диалоговое окно и теперь вы готовы работать с тем, что пользователь будет в них вводить. Готовы? Переместимся в событие Click объекта CmdGo (командная кнопка). Когда что-нибудь произойдет, ваша програма должна прежде всего проверить то что введено пользователем. Она должна проверить тип текста и его наличие, и обратить внимание пользователя, если он что-то забыл ввести. Наберите:

If (Trim(txtText.Text) = «») Then MsgBox «Please enter some text!» txtText.SetFocus Exit Sub End If

Изучение свойства Text блока текста сообщит вам, если пользователь забыл заполнить его. Используйте SetFocus tчто бы переместить курсор на поле, где отсутствует информация, что сделает Fancy Text более дружественной к пользователю. В противном случае пользователь должен будет сам перейти на незаполненное поле. Проверка высоты текста более сложна. Вы можете использовать 5 различных систем едениц что-бы вводить растояние в AutoCAD, и Fancy Text принимает ввод пользователем в текущих еденицах чертежа. Мало того, что Вы должны проверить что пользователь ввел высоту, вы так же должны конвертировать высоту в число:

If (Trim(txtHeight.Text) = «») Then MsgBox «Please enter a text height!» txtHeight.SetFocus Exit Sub End If Dim unit% unit% = mappAcad.ActiveDocument._ GetVariable(«LUNITS») On Error Resume Next Dim height# height# = mappAcad.ActiveDocument._ Utility.DistanceToReal(_ txtHeight.Text, unit%) If (Err.Number <> 0) Then MsgBox «Please enter a » & «valid text height!» txtHeight.SetFocus End If Используйте GetVariable() что бы получить значение любой системной переменной AutoCAD или переменной окуржения, подобно тому, как вы используете функии (getvar) и (getenv) в AutoLISP.

После того, как вы определили текущие еденицы чертежа, вы можете использовать метод DistanceToReal() объекта Utility что бы конвертировать расстояние из строковой переменной в числовую. Ошибка происходит когда конвертация не удается, поэтому при попытке конвертации вы должны осуществлять проверку на возможность ошибки, и сообить пользователю, если введенная высота не может быть сконвертирована. Теперь вы почти готовы начать создание текста, но вам еще нужна центральная точка текста. Переместимся в начало события Click и добавим несколько констант:

Const L_PT_FIRST = 0 Const L_PT_X = 0 Const L_PT_Y = 1 Const L_PT_Z = 2 Const L_PT_LAST = 2

Точка представляется в VBA как массив из трех элементов типа doubles. Эти константы помогут вам легко объявит точечные переменные и доступ к параметрам этих точек. Теперь переместимся в конец события Click.

Когда форма должна быть скрыта

Dim ptPickd As Variant Dim ptInsert#(L_PT_FIRST To L_PT_LAST) Me.Hide mappAcad.ActiveDocument.Utility._ InitializeUserInput 1 + 2 ptPickd = mappAcad.ActiveDocument._ Utility.GetPoint(, «Pick the » _ & «center point for the text: «) ptInsert#(L_PT_X) = ptPickd(L_PT_X) ptInsert#(L_PT_Y) = ptPickd(L_PT_Y) ptInsert#(L_PT_Z) = ptPickd(L_PT_Z) Метод InitializeUserInput() позволяет вам указать какой метод семейства GetXxx проверяет ввод пользователя; аргумент 1 + 2 говорит GetPoint() что бы он игнорировал нулевой ввод. После того как у вас есть точка, вы должны сконвертировать ее. GetPoint() возращает точку как Variant, но большинство функций VBA, которые используют точки требует трех-элементный массив типа double. Вы должны выполнить черную работу копирования x-, y-, и z-координат точки из Variant в массив типа double.

Черчение текста

Dim objText As Object Set objText = mappAcad.ActiveDocument._ ModelSpace.AddText(txtText.Text, _ ptInsert#, height#)

Все функции типа Add возвращают последний созданный примитив. Вам необходимо ссылаться на них несколько раз, так что за ними необходимо следить. Создание обводки текста более сложный процесс. Что бы начать обводку нам нужно знать какую площадь занимает текст. К счастью каждый примитив имеет метод GetBoundingBox который обеспечивает вас нжней левой и верхней правой координатами:

Создание обводки

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

В отличии от большинства других примитивов, полилинии не имеют z-координату, что означает массив координат должен иметь только восем элементов, а не двенадцать:

Теперь будем вращать текст и его обводку. Большинство людей представляет себе углы в градусах, но VBA требует их в радианах. Необходимо сконвертировать угол вращения перед тем как он будет передан в метод Rotate.

Const L_PI = 3.14159 objText.Rotate ptCenter#, _ (txtRotation.Text * L_PI / 180#) objOutline.Rotate ptCenter#, _ (txtRotation.Text * L_PI / 180#) И наконец, переместим текст и его обводку так что бы их центры совпали с точкой, указанной пользователем. objText.Move ptCenter#, ptStart# ptCenter#(L_PT_Z) = 0 objOutline.Move ptCenter#, ptStart# Теперь, обновим текст и его обводку на экране, освободим наши ссылки на них и выгрузим: objText.Update objOutline.Update Set objOutline = Nothing Set objText = Nothing Unload Me

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

Последние штрихи

FancyText отлично работает из среды VBA IDE, но я думаю вам будет приятно запустить ее из командной строки? Добавьте новый модуль к вашему проекту, установите его имя (Name) в «modApps», и затем добавьте следующие процедуры к модулю:

Теперь вы знаете как создавать диалоговые окна для взаимодействия с пользователем, как добавлять новые примитивы к чертежу, и как манипулировать текстовыми примитивами в чертеже. Вы можете улучшить FancyText различными способами, включая установку высоты текста по умолчанию к текущей высоте текста по умолчанию в AutoCAD и добавление дополнительных типов обводки. Версия FancyText доступная на Web-сайт журнала CADALYST добавляет прямоугольные и круговые текстовые стили. Я был бы заинтересован узнать, как Вы улучшите ее.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *