Лабораторный практикум «Автоматизация работ в AutoCAD средствами Visual Basic for Applications» для студентов «Механизация сельского хозяйства» |
Добавил(а) Administrator | ||||||||||||||||
25.01.11 13:57 | ||||||||||||||||
Лабораторный практикум «Автоматизация работ в AutoCAD средствами Visual Basic for Applications» для студентов «Механизация сельского хозяйства»
Автоматизация работ в AutoCAD средствами Visual Basic for Applications Лабораторный практикум для студентов специальности 7.091.902 «Механизация сельского хозяйства»
Содержание Стр. Visual Basic for Applications………………………….......................…………… Объектная модель…………………………………………............…………….. Модель объектов в VBA…………………………………...........…………….... Классы……………………………………………………..........……………...... Интегрированная среда разработки VBA………………..........……………..... ObjectBrowser………………………………………………..........………....…... Структура VBA-программы (процедуры)…………………..........….....……... Отладка………………………………………………………..............…………. Создание VBA-приложений………………………………………….....................……… Построение изображения головки болта………………….............…………... Построение форматной рамки заданного формата с заполнением штампа………………… Считывание атрибутов блоков чертежа (технологической схемы)…............. Построение пространственной твердотельной модели………………............. Построение твердотельной модели пружины в SolidWorks 2001…................ Литература……………………………………………………………………......................
Введение Назначение данного практикума – помочь студенту, не программисту, осваивающему возможности прикладных программ (программ-приложений), обеспечивающих его профессиональную деятельность, получить практические навыки создания управляющих процедур для автоматизации рутинных операций в программах-приложениях, а также глубже познакомиться со структурой взаимодействия как элементов одного приложения, так и взаимодействия различных приложений. Например, инженер часто решает задачи проектирования, включающие в себя расчетные работы, по результатам которых необходимо выполнить чертежи. Расчеты могут быть выполнены в табличном процессоре Microsoft Excel, а чертежи – в САПР AutoCAD. Для выполнения такой работы неплохо было бы использовать программу, в которую вносятся исходные данные для расчета, а на выходе получаются чертежи проектируемого изделия. Visual Basic for Applications. Visual Basic for Applications (VBA) – объектно-ориентированная среда программирования, включающая в себя средства подготовки текстов программ (редактор - Editor) на языке программирования Visual Basic, контроля и отладки (отладчик - Debugger) и выполнения (интерпретатор). VBA включена в популярные продукты Microsoft Word, Excel, Access, а также в САПР среднего уровня AutoCAD 200х, SolidWorks 200х. В отличие от среды программирования Visual Basic VBA не оснащен построителем исполняемого кода (файлов с расширением .exe). При этом у разработчика имеется возможность хранить тексты программ в виде процедур в составе макросов-модулей в файле-документе или файле-чертеже, или в виде отдельных файлов-проектов, которые можно обрабатывать средствами среды программирования Visual Basic. Любая объектно-ориентированная среда программирования способна выполнять управляющие действия в программах-приложениях, построенных на принципах объектного программирования. К таким программам относятся офисные приложения Microsoft, а также указанные САПР. Объектно-ориентированная среда программирования (VBA, Visual Basic, Visual С, Visual Pascal, Java, Delphi и др.) может выступать в роли контроллера автоматизации процессов обработки информации в программах-приложениях. При этом VBA-программа может быть создана в составе Microsoft Excel и выполнять управляющие действия как с книгами Excel, так и с чертежами AutoCAD, базами данных, документами Word. В основе взаимодействия VBA и программ-приложений лежит объектная модель, включающая в себя взаимосвязи объектов, их свойств и методов воздействия на свойства объектов, а также событий, распознаваемых различными объектами. Объектная модель. В классическом определении обработки данных есть четкое различие между двумя базовыми компонентами: программами и данными. Входные данные вводятся в программу, обрабатываются, в результате чего получаютсявыходные данные. При этом в различных программах обращение к одним и тем же входным данным и формирование выходных данных могло осуществляться по-разному, другими словами каждая программа имела свой интерфейс пользователя, несовместимый с другими программами. Такой подход затруднял создание больших проектов, требующих переключения между программами и одновременного использования данных. Идея объектного программирования, ключевыми терминами которой были "Information hiding", "encapsulation", "modularity"("скрытие структур данных", "инкапсуляция", "модульность"), заключается в объединении данных и интерфейса в одном объекте–программе таким образом, что изменение данных возможно только посредством интерфейса. Таким образом, интерфейс обеспечивает защиту данных от прямого доступа, то есть инкапсулирует данные. Подобные структуры отдельных наборов данных позволили создать группы подобных объектов (шаблоны) – модули, или классы. Такое деление объектов на классы позволило ввести понятие "наследования" ("Inheritance"), которое означает, что возможно создание "иерархии" классов. Если новый класс определен как "подкласс" существующего, то он "наследует" структуру данных и функции (методы) своего "суперкласса". При этом возможно "переопределение" ("Оverloading"), то есть специализация (уточнение реакции объектов на методы) наследующих классов. Таким образом, объектно-ориентированные системы программирования и программы-приложения используют одинаковые программы-объекты, управляя которыми, пользователь создает результат своей работы: таблицы расчетов и диаграммы, чертежи, базы данных и проч. Программирование в этом случае сводится к корректному использованию существующих компонент в сочетании с программированием вычислительных процедур, структур следования, ветвления и циклов. Для преобразования объектов используют их свойства, методы и события. Каждая программа-приложение имеет свою иерархическую структуру объектов. Модель объектов в VBA. Для VBA верхним уровнем иерархической модели объектов программы-приложения является сама программа-приложение (объект Application), например “Excel.Application”, “AutoCAD.Application”. Подчиненными объекту Application в Excel являются такие объекты как “рабочая книга” (Workbook), “диаграмма” (Chart), “VBA-проект” (VBProject). Для объекта Application в AutoCAD “глобальные переменные” (Preferences), “активный документ” (Document). Графическое изображение моделей приведено на рис.1 и рис.2. Если организована ссылка на объект-приложение, то тем самым обеспечивается доступ ко всем объектам более низкого уровня иерархии. Чертежи в AutoCAD являются объектами-документами, которые включают в себя объекты пространство модели (ModelSpace), пространство листа (PaperSpace), совокупность блоков (Bloks), размерные стили (DimStyles) и т.д. Объект пространство модели включает в себя примитивы: линии (Line), окружности (Circle), массивы (Array), атрибуты (Attributes) и проч. Часть объектов организованы в “коллекции” (collections), что позволяет выполнять над ними групповые операции или найти необходимый объект, принадлежащий коллекции.
Рис.1. Объектная модель Microsoft Excel
Рис.2. Объектная модель AutoCAD. (коллекции представлены в прямоугольниках со скругленными краями)
Некоторые объекты являются частью других объектов, существуют объекты, принадлежащие нескольким коллекциям. Например блок (Block) – член коллекции Bloks, а также коллекции ModelSpace, если в пространстве модели есть ссылка на этот блок. Практически во всех управляющих программах VBA используют объект форма (Form), а также объекты - элементы управления: поле (Textbox), кнопка (CommandButton), поле со списком (ComboBox), флажок (Checkbox) и др.
Элементы управления могут размещаться в формах (например, привычные для пользователя формы открытия или сохранения файла содержат поля для ввода имени файла, поле со списком для задания имени папки, кнопки “открыть/сохранить” или “отмена”). Возможно размещение элементов управления в других объектах, например, на листах Excel
Таким образом, конкретный документ, таблица, чертеж или форма сами представляют собой объекты, принадлежащие программам-приложениям, и содержат в себе различные объекты: листы, ячейки, линии, слои, блоки, кнопки, поля ввода и проч. Каждый объект представляет собой программу, при этом два одинаковых объекта, например, линии на чертеже, представляю собой две реализации одной и той же программы с различными параметрами (данными). То есть построение линий на чертеже использует одну программу-шаблон, называемую “классом”. Классы. Каждое VBA-приложение использует набор шаблонов для определения объектов, получивших наименование классов. Машинные коды, содержащие шаблоны для определения объектов программы-приложения, размещены в специальных файлах-библиотеках этого приложения или библиотеках типов приложения (файлах с расширением .TLB). Шаблон содержит описание класса, в котором специфицируются типы данных, которые содержит объект, определены его свойства, методы обращения к данным и их преобразования, события, на которые реагирует объект. Шаблон позволяет создать в VBA-приложении экземпляр класса или собственно объект. Каждый класс (classes) содержит список членов (members), в которые входят свойства (properties), методы (methods), события (events). Свойство – атрибут объекта класса, который можно прочитать и изменить, модифицировать (чтение-запись) или только прочитать (только для чтения). Свойства определяют вид объекта AutoCAD на поле чертежа: тип линии (linetype), цвет (color), слой (layer), координаты характерных точек объекта (координаты центра окружности), радиус окружности, видимость на чертеже (visible) и т.д. Метод – это программа (функция), описывающая операции, которые можно выполнять для преобразования объектов класса. Например, объект можно удалить (Erase), копировать (Copy), зеркально отобразить (Mirror), переместить (Move). Событие – это некоторое действие, которое “распознает” объект класса и может на него отреагировать. Реакцию программирует разработчик VBA-приложения. К событиям относятся: нажатие кнопки манипулятора мышь (Click), нажатие клавиши Enter (Enter), выход из окна (Exit), внесение изменений (AfterUpdate) и др. События относятся к классам элементов управления, но часто используются по отношению к классам документов (например, можно программировать обязательное сохранение файла при его закрытии, или сохранение файла на жестком диске при внесении нового данного в ячейку листа книги Excel).
Доступ к файлам-библиотекам VBA-приложение получает, благодаря специальной технологии ActiveX, поддерживаемой VBA. Интегрированная среда разработки VBA. Доступ к среде разработки VBA-приложений открывается непосредственно из программ-приложений (Microsoft Excel, AutoCAD 2000). Для начала работы в среде VBA следует выбрать команду меню: СервисМакросРедактор Visual Basic; ToolsMacroVisual Basic Editor, или нажать комбинацию клавиш <Alt+F11>. На рис.3 приведено окно редактора VBA Microsoft Excel.
Рис.3. Окно среды разработки VBA-приложений
В дальнейшем будем говорить о редакторе VBA Microsoft Excel, так как в практических приложениях (лабораторных работах) будем разрабатывать программы, выполняющие построения в AutoCAD по расчетам, выполненным в Microsoft Excel. Такой подход не принципиален, VBA-приложение можно создавать в среде той программы-приложения, которую считают более удобной для решения конкретной задачи. Интерфейс среды разработки VBA-приложений в разных программах-приложениях практически идентичен. С помощью команд меню Вид (View) в окне редактора VBA устанавливаются окно проекта (Project) и окно свойств (Properties). В окне проекта отражается структура VBA-проекта, который включает в себя объекты программы-приложения. На рис.3 это - объекты Microsoft Excel: рабочая книга (Workbook) и рабочие листы (Worksheet); формы (Forms) и модули (Modules), содержащие процедуры и функции, создаваемые разработчиком VBA-приложения. В окне свойств отражаются свойства выбранного объекта (на рис.3 – это рабочая книга).
При создании проекта в редакторе VBA в AutoCAD 2000 составными частями проекта будут объекты AutoCAD: чертеж (Drawing), пространство модели (Modelspace), пространство листа (Paperspace), а также формы и модули. Для создания объектов проекта служат команды меню Вставка (Insert). Команды позволяют создавать формы, модули, модули классов и процедуры в необходимом количестве. ObjectBrowser. В состав среды VBA конкретного приложения, например, Microsoft Excel включены некоторые библиотеки типов: Excel, MSForms, VBA, Office и др. Это дает возможность создавать VBA-приложения, управляющие объектами Excel, создавать управляющие формы. Но не дает возможности управлять объектами других приложений, например, AutoCAD. Посмотреть состав включенных библиотек типов можно с помощью команды ViewObjectBrowser (см. рис.4).
ObjectBrowser предоставляет информацию об иерархической структуре объектов каждой подключенной библиотеки типов. На рис.4 представлены классы библиотеки Excel, выделен класс диаграмм (Charts) и члены этого класса: методы (Add, Copy, Delete, Move) и свойства: (Application – указывает принадлежность объекта приложению, Count – указывает количество объектов в коллекции, Item – указывает на свойство объекта). Для того, чтобы создаваемое VBA-приложение могло управлять объектами, принадлежащими библиотекам типов, не включенным в среду, следует подключить эти библиотеки, используя механизм ссылок (References), реализующий технологию ActiveX.
Для этого следует воспользоваться командой ToolsReferences. На экране появится окно диалога References, содержащее библиотеки типов всех приложений, поддерживающих технологию ActiveX (см. рис.5).
Подключенные библиотеки помечены флажками. В списке следует найти необходимую библиотеку и подключить ее, установив флажок щелчком кнопки мыши. Для подключения библиотеки объектов AutoCAD следует подключить библиотеку AutoCAD Object Library. В нижней части окна References указывается место расположения этой библиотеки, например: c:\ProgramFiles\AutoCAD2000\acad.tlb. Команды окна References позволяют устанавливать приоритет библиотек, а также отключать библиотеки от проекта. Теперь, после подключения новой библиотеки типов, ее иерархическую структуру можно наблюдать с помощью ObjectBrowser. В таблице 1 приведен неполный перечень свойств и методов класса линия (AcadLine). Таблица 1.
ObjectBrowser при создании VBA-приложения является одним из основных инструментов, так как позволяет узнать, с какими классами можно
выполнять действия, а также, свойства и методы допустимых классов. Выбрав конкретный класс, свойство или метод, можно получить полную справку о нем и примеры кодов VBA-программы, нажав на кнопку с изображением вопросительного знака . Структура VBA-программы (процедуры). 1. Заголовок (Sub или Function). 2. Комментарии (назначение программы, используемые переменные, метод решения задачи и т.д.). 3. Описание переменных и массивов (размерность массива, тип переменной). 4. Объявление констант. 5. Чтение данных из внешних файлов или листов книги Excel. 6. Управляющие конструкции (операторы присвоения, циклов, ветвления, вызова подпрограмм, работы с объектами). 7. Вывод результатов (например, во внешние файлы или на листы книги Excel). 8. Конец программы (End Sub или End Function). Отладка. Отладка (Debug) является важнейшим компонентом разработки VBA-приложения и позволяет устранить синтаксические и логические ошибки программирования. Среда VBA предлагает следующие функции отладки (меню Debug): - компилирование VBA-приложения, позволяющее исправить ошибки синтаксиса – Compile VBA-project; - пошаговое выполнение программы с заходом в подпрограммы, без захода, до места установки курсора в тексте программы – Step Into, Step Over, Run to Cursor; - слежение за значениями переменных – Watch; - использование точек останова – Breakpoint. Выводы. Среда программирования Visual Basic for Application реализует объектную модель управления данными и позволяет создавать VBA-приложения, выполняющие задачи контроллера автоматизации совместных действий различных прикладных программ. Для создания VBA-приложений служит Visual Basic Editor, входящий в состав программ-приложений. Visual Basic Editor создает VBA-проект, включающий в себя программируемые объекты, а также позволяет подключать библиотеки типов, содержащие классы объектов других программ-приложений. Развернутая справочная система позволяет корректно использовать классы объектов, их свойства, методы и события, что существенно сокращает сроки разработки VBA-приложений.
Создание VBA-приложений. С процессом создания VBA-приложений познакомимся на примерах: - построение изображения головки болта (шестиугольник с вписанной окружностью) по заданным координатам центра на поле чертежа и размеру под ключ; - построение форматной рамки заданного формата с заполнением штампа; - считывание атрибутов блоков чертежа (технологической схемы); - построение сложной пространственной твердотельной модели; - построение твердотельной модели пружины в SolidWorks 2001.
Построение изображения головки болта. Разработка VBA-приложения начинается с постановки задачи и разработки проекта, определяющего основные объекты создаваемой программы. Задача – разработать VBA-приложение, позволяющее задавать на листе Excel координаты центра и размер по ключ изображения головки болта (вид сверху) и строить изображение головки болта на поле чертежа AutoCAD. Проект должен включать в себя: - Лист Excel, в ячейки которого будут внесены исходные данные; - управляющий элемент, например, кнопку, нажатие на которую приведет к выполнению процедуры построения. Кнопка может быть размещена непосредственно на Листе; - процедуру построения изображения на поле чертежа AutoCAD. Процедура может быть размещена в модуле или как процедура обработки события в объекте Лист. VBA-приложение будем разрабатывать в среде VBA Microsoft Excel, так как исходные данные для программы мы задаем в ячейки Листа. Этапы разработки приложения. 1 этап – задание исходных данных. Запускаем программу Microsoft Excel, создаем книгу , в книге оставляем один Лист, в ячейки которого вводим поясняющие надписи и значения исходных данных. Результат см. на рис.6. 2 этап. Добавляем элемент управления – кнопку, для чего: - в меню ВидПанели инструментов открываем панель инструментов «Элементы управления»; - выбираем элемент «Кнопка» и изображаем его на Листе; - в контекстном меню элемента «Кнопка» выбираем команду «Свойства», в появившейся таблице свойств изменяем надпись (Caption) на кнопке на слово «Старт», шрифт (Font) устанавливаем жирный Arial высота 14pt; - в контекстном меню элемента «Кнопка» выбираем команду «Обработка события», в результате получаем процедуру в объекте Лист: Private Sub CommandButton1_Click(). Процедура будет выполнена при нажатии на кнопку. - на панели «Элементы управления» нажимаем на кнопку «Выход из режима редактирования», панель элементов управления закрываем.
В результате получим на Листе кнопку (см. рис.6), а в редакторе VBA – процедуру, выполняющуюся при нажатии на кнопку (см. рис.7). Процедура пока не имеет содержания и ничего не выполняет.
Рис.7.
3 этап. Составляем процедуру построения изображения в AutoCAD: - добавляем в проект ссылку на библиотеку типов AutoCAD: ToolsPreferencesAutoCAD Object Library; - далее приводим текст программы с поясняющими комментариями:
Private Sub CommandButton1_Click()
'Комментарии 'Построение головки болта (вид сверху) на поле чертежа AutoCAD 'по заданным координатам центра и размеру под ключ. 'Исходные данные на листе "Исходный". 'Программа AutoCAD должна быть запущена и находится в режиме работы 'в пространстве модели(ModelSpace)
'Описание переменных Dim ACad As Object 'переменная связи с приложением AutoCAD Dim ADoc As Object 'переменная связи с чертежом Dim MSpace As Object 'переменная связи с пространством модели Dim ObjVar As Object 'переменная связи с объектом-линией Dim ObjArr As Object 'переменная связи с объектом-массивом Dim ObjCircle As Object 'переменная связи с объектом-окружностью
Dim Center(0 To 2) As Double 'точка центра Dim StartPoint(0 To 2) As Double 'точка начала линии Dim EndPoint(0 To 2) As Double 'точка конца линии Dim S As Double 'размер под ключ 'Описание констант Const Color As Integer = 5 'цвет линии Const Pi As Double = 3.14159265358979
'Чтение данных из ячеек Листа Center(0) = Sheets("Исходный").Cells(3, 3) 'координата Х Center(1) = Sheets("Исходный").Cells(4, 3) 'координата У Center(2) = 0 'координата Z S = Sheets("Исходный").Cells(7, 3) 'размер под ключ
On Error Resume Next 'Отложенный перехват ошибок.
'Связывает переменную ACad с объектом-приложением AutoCAD Set ACad = GetObject(, "AutoCAD.Application")
'Если AutoCAD не работает, то оператор Set возвратит ошибку в 'переменную Err, о чем будет сообщено в окне-сообщении, 'и программа завершит работу If Err.Number = 429 Then MsgBox "AutoCAD не запущен." Exit Sub End If
'Связывает переменную ADoc с объектом-чертежом Set ADoc = ACad.ActiveDocument
'Связывает переменную MSpace с объектом-пространством модели Set MSpace = ADoc.ModelSpace
'Вычерчивание перекрестья в точке центра For i = 0 To 1 Select Case i Case 0 'Вычисление координат точек 1-й линии перекрестья StartPoint(0) = Center(0) StartPoint(1) = Center(1) - 2.5 StartPoint(2) = 0 EndPoint(0) = Center(0) EndPoint(1) = Center(1) + 2.5 EndPoint(2) = 0 Case 1
'Вычисление координат точек 2-й линии перекрестья StartPoint(0) = Center(0) - 2.5 StartPoint(1) = Center(1) StartPoint(2) = 0 EndPoint(0) = Center(0) + 2.5 EndPoint(1) = Center(1) EndPoint(2) = 0 End Select 'Вычерчивание линий перекрестья и задание цвета линии With MSpace.AddLine(StartPoint, EndPoint) .Color = Color End With Next i 'Вычисление координат точек отрезка шестиугольника StartPoint(0) = Center(0) - S / 2 StartPoint(1) = Center(1) - Tan(Pi / 6) * S / 2 StartPoint(2) = 0 EndPoint(0) = Center(0) - S / 2 EndPoint(1) = Center(1) + Tan(Pi / 6) * S / 2 EndPoint(2) = 0
'Вычерчивание стороны шестиугольника Set ObjVar = MSpace.AddLine(StartPoint, EndPoint)
'назначение цвета линии With ObjVar .Color = Color End With
'Вычерчивание кругового массива 'первый параметр функции - количество сторон (шестиугольника) 'второй параметр - полный угол поворота массива (300 градусов) 'третий параметр - точка центра кругового массива Set ObjArr = ObjVar.ArrayPolar(6, 2 * Pi - Pi / 3, Center)
'Вычерчивание окружности, вписанной в шестиугольник 'первый параметр функции - точка центра окружности 'второй параметр - радиус окружности Set ObjCircle = MSpace.AddCircle(Center, S / 2)
'назначение цвета окружности With ObjCircle .Color = Color - 5 End With End Sub
Использование VBA-приложения. Для выполнения созданной программы следует: - запустить программу AutoCAD; - открыть книгу Excel с созданной программой; - задать в ячейки Листа исходные данные и нажать кнопку «Старт»; - перейти в окно AutoCAD и вывести указатель мыши на поле чертежа. На поле чертежа появится изображение головки болта – шестиугольник с вписанной окружностью (см. рис.8). Если AutoCAD не запущен, то результатом работы программы будет сообщение (см. рис.9).
Рис.8
Рис.9
Приведенная программа решает простую задачу, поэтому проект по структуре простой. Кроме того, проект требует выполнить предварительно вручную запуск программы AutoCAD, а также в нем предполагается, что существует лист Excel «Исходный», а в его ячейках существуют данные. За всем этим надо следить, иначе программа прервет свое выполнение. Программа предусматривает единственную проверку – проверяет рабочее состояние AutoCAD, и если AutoCAD не запущен, заканчивает работу программы, сообщив об этом пользователю.
Задания на разработку: 1. Разработать VBA-приложение, вычерчивающее вид сверху головки болта с крестообразной шлицей.
2. Разработать VBA-приложение, вычерчивающее вид сверху головки болта с прямой шлицей.
3. Разработать VBA-приложение, вычерчивающее вид сверху головки болта с шестигранной шлицей.
4. Разработать VBA-приложение, вычерчивающее вид болта сбоку по заданным наружному диметру резьбы d, шагу резьбы P, длине болта L. При расчете геометрических размеров ориентироваться на соотношения, приведенные на рис.10.
Примерные соотношения размеров: D=2d; k0,25d; DШ=2,2d; d1=d-2P, где Р – шаг резьбы; H=(0,7…0,8)d; S=0,15d.
Рис.10. Упрощенное изображение болтового соединения по ГОСТ 2.135-68
5. Разработать VBA-приложение, вычерчивающее резьбовое отверстие (вид сверху). При расчете геометрических размеров ориентироваться на соотношения, приведенные на рис.10.
Построение форматной рамки заданного формата с заполнением штампа Задача – разработать VBA-приложение, позволяющее вычерчивать на поле чертежа AutoCAD рамку заданного формата, штамп с надписями и заполнять штамп необходимыми данными: кто исполнитель, дата исполнения чертежа, наименование изделия, номер спецификации, масштаб, материал. VBA-приложение целесообразно разрабатывать в среде VBA AutoCAD. Мы же поступим не совсем логично, разработаем его в среде VBA Microsoft Excel, преследуя цели – работать в уже знакомой среде и обеспечить выполнение программы в базовой версии AutoCAD R14, которая не оснащена средой программирования VBA. Проект может включать в себя: - управляющую форму с возможностью внесения исходных данных и запуска программы на выполнение; - Лист Excel с элементом управления, открывающим управляющую форму. Ячейки листа можно использовать как источник данных для полей формы со списком. Такие поля облегчают выполнение задачи, так как предлагают на выбор значения из имеющегося списка; - процедуры построений на поле чертежа AutoCAD и вспомогательные процедуры, размещенные в модулях; - процедуры построения изображения на поле чертежа AutoCAD и вспомогательные процедуры, размещенные как процедуры обработки событий управляющих элементов формы (кнопок, полей, полей со списком) в объекте «форма». Этапы разработки приложения. 1-й этап – разработка схемы проекта:
2-й этап – размещение исходных данных и управляющего элемента на листе Excel. Запускаем программу Microsoft Excel, создаем книгу , в книге оставля-ем один Лист, в ячейки которого вводим поясняющие надписи и значения
исходных данных: значения масштабов и номера форматов, допускаемых ГОСТ (см. рис.11).
С помощью панели инструментов «Рисование» создаем объект «прямоугольник», в который вносим текст «Пуск меню». Затем создаем объект «надпись», в которую заносим инструкцию по использованию программы. Надпись закроет от пользователя исходные данные, размещенные на листе в ячейках. 3-й этап – создание макроса, запускающего на выполнение форму и связывание управляющего элемента с макросом: - запускаем редактор Visual Basic: “СервисМакросРедактор Visual Basic”; - добавляем в проект ссылку на библиотеку типов AutoCAD: ToolsPreferencesAutoCAD Object Library; - в редакторе с помощью команды «ВставкаМодуль» создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» создаем процедуру, в которую заносим одну команду: Public Sub Start_Menu() имя макроса Menu.Show команда вывода на экран формы Menu End Sub Результат выполнения макроса – появление на экране формы по имени Menu. Формы с таким именем пока нет, мы ее создадим позже. - используя панель задач Windows, вернемся в окно Microsoft Excel, выберем в контекстном меню объекта «прямоугольник» команду «Назначить макрос» и в окне диалога выбираем макрос «Start_Menu». Теперь при указании на объект «прямоугольник» мышью ее указатель принимает вид ладошки, приглашающей нажать кнопку. Нажатие кнопки мыши на объекте «прямоугольник» приведет к выполнению макроса «Start_Menu». 4-й этап – создание формы: - в редакторе Visual Basic командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»; - в окне свойств в графе Имя (Name) изменяем имя формы на Menu; - пользуясь панелью элементов управления создаем кнопки, поля и поля со списками, в окне свойств для каждого элемента задаем необходимые параметры: имена, надписи, цвет фона, шрифт и т.д. Форма принимает вид рис.12.
Рис.12.
- создадим процедуры обработки событий, для чего выполним двойной щелчок кнопки мыши на управляющих элементах. Двойной щелчок на элементе управления создаст процедуру, связанную с событием, которое распознает управляющий элемент. Содержание процедур напишем сами:
Описание общих для проекта переменных Public TextName As String Public TextMaterial As String Public TextMasshtab As String Public TextFormat As String Public TextH As String Public TextAutor As String Public TextDate As String
Процедура по нажатию кнопки «Заполнение штампа» заполняет штамп чертежа текстом, указанным в полях формы Private Sub CommandButton1_Click()
Описание переменных процедуры Dim TxtObj As Object Dim Point(0 To 2) As Double Dim FntFile As Variant Dim A As Variant
Описание констант Const Height As Single = 6 Const L0 As Single = 840# Const H0 As Single = 594#
On Error Resume Next ' Отложенный перехват ошибок.
Назначение в переменную приложения AutoCAD Set ACad = GetObject(, "AutoCAD.Application") If Err.Number = 429 Then GoTo Stop1 Если ошибка, перейти на метку Stop1
Set ADoc = ACad.ActiveDocument Назначение в переменную чертежа Set MSpace = ADoc.ModelSpace Назначение в переменную пространства модели
Set TStyle = ADoc.ActiveTextStyle Назначение в переменную стиля текста
Присвоение переменной F значения (величины) переменной TextFormat. Такое переприсвоение необходимо, так как значения из полей ввода читаются как текстовые, то есть не подлежат вычислительной обработке.
F = Val(TextFormat)
Вычисление высоты и ширины поля чертежа по заданному номеру формата If F = 1 Or F = 2 Or F = 3 Or F = 4 Then If F = 1 Or F = 4 Then L = L0 / F If F = 3 Then L = L0 / 2 If F = 2 Then L = H0 If F = 1 Then H = H0 If F = 2 Then H = L0 / 2 If F = 3 Or F = 4 Then H = H0 / 2 Else D=MsgBox("Неверно задан формат листа", vbExclamation, "Attention!") Exit Sub End If
Чтение системной переменной текущей даты TextDate = Date Чтение файла-шрифта из папки AutoCad R14\Fonts TStyle.FontFile = "Gosta_w.shx" Вывод текста (переменная Text…) в пространство модели в точке привязки Point Point(0) = L - 100: Point(1) = 50: Point(2) = 0 With MSpace.AddText(TextH, Point, Height) Height – высота букв .Color = Color + 2 цвет текста .ObliqueAngle = 3.14 * 15 / 180 угол наклона букв 150
End With Point(0) = 80: Point(1) = H - 8: Point(2) = 0 With MSpace.AddText(TextH, Point, Height) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 угол поворота текста 1800 End With Point(0) = L - 110: Point(1) = 35: Point(2) = 0 With MSpace.AddText(TextName, Point, Height) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 115: Point(1) = 10: Point(2) = 0 With MSpace.AddText(TextMaterial, Point, Height - 2) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 20: Point(1) = 30: Point(2) = 0 With MSpace.AddText(TextMasshtab, Point, Height) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 172: Point(1) = 31: Point(2) = 0 With MSpace.AddText(TextAutor, Point, Height - 3) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 134.5: Point(1) = 31: Point(2) = 0 With MSpace.AddText(TextDate, Point, Height - 3.6) .Color = Color + 2 .ObliqueAngle = 3.14 * 15 / 180 End With
Перейти на метку Stop2 GoTo Stop2
Метка Stop1:
Сообщение, что не загружен AutoCAD и выход из процедуры D=MsgBox("Не загружен AutoCAD. Нажми кнопку AutoCAD R14", vbExclamation, "Attention!") Stop2:
End Sub
Процедура по нажатию кнопки «AutoCAD R14» запускает на выполнение программу AutoCAD Private Sub CommandButton2_Click() Dim RetVal Dim CadFileName Метка Label1: Задание в переменную пути к программе AutoCAD CadFileName = "c:\Program Files\AutoCAD R14\acad.EXE" On Error Resume Next ' Отложенный перехват ошибок.
Запуск программы AutoCAD в режиме кнопки на панели задач без передачи фокуса RetVal = Shell(CadFileName, 6) Анализ ситуации, если запуск программы AutoCAD не произошел If Err.Number = 53 Then Err.Clear Сообщение с приглашением ввести правильный путь к программе CadFileName = InputBox("Неверный путь к программе AutoCAD R14. Введите верный путь", "Открытие AutoCAD R14", CadFileName) Повторная проба запуска программы AutoCAD RetVal = Shell(CadFileName, 6)
В случае ошибки возврат на метку Label1 If Err.Number = 53 Then GoTo Label1 End If End Sub
Процедура по нажатию кнопки «Формат» вычерчивает форматную рамку, штамп и надписи на поле рамки и штампа Private Sub CommandButton3_Click()
Вызов процедуры с передачей в нее значения номера формата Call Format(TextFormat) End Sub
Процедура по нажатию кнопки «Выход» скрывает форму Menu Private Sub CommandButton4_Click() Menu.Hide End Sub
Процедура при выходе из поля «Спецификация изделия» записывает в переменную TextH содержимое поля Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextH = TextBox1.Text End Sub
Процедура при выходе из поля «Материал» записывает в переменную TextMaterial содержимое поля Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextMaterial = TextBox3.Text End Sub
Процедура при выходе из поля «Наименование изделия» записывает в переменную TextName содержимое поля Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextName = TextBox2.Text End Sub
Процедура при выходе из поля со списком «Масштаб» записывает в переменную TextMasshtab содержимое поля Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextMasshtab = ComboBox1.Text End Sub
Процедура при выходе из поля «Разработал» записывает в переменную TextAutor содержимое поля Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextAutor = TextBox4.Text End Sub
Процедура при выходе из поля со списком «Формат» записывает в переменную TextFormat содержимое поля Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextFormat = ComboBox2.Text End Sub
5-й этап – создание процедур, вычерчивающих линии рамки и штампа, надписи на поле рамки и штампа: - в редакторе Visual Basic с помощью команды «ВставкаМодуль» создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» создаем процедуры:
Описание общих для проекта переменных Public ACad As Object Public ADoc As Object Public MSpace As Object Public TStyle As Object Public F As Integer
Public L As Single Public H As Single
Описание общих для проекта констант Public Const L0 As Single = 841# Public Const H0 As Single = 594# Public Const Color As Integer = 4
Процедура вычерчивания линий и текста (получает в переменной TextFormat номер формата Public Sub Format(TextFormat) Dim A As Variant On Error Resume Next ' Отложенный перехват ошибок. Set ACad = GetObject(, "AutoCAD.Application") If Err.Number = 429 Then GoTo Stop1
Set ADoc = ACad.ActiveDocument Set MSpace = ADoc.ModelSpace F = Val(TextFormat)
If F = 1 Or F = 2 Or F = 3 Or F = 4 Then If F = 1 Or F = 4 Then L = L0 / F If F = 3 Then L = L0 / 2 If F = 2 Then L = H0 If F = 1 Then H = H0 If F = 2 Then H = L0 / 2 If F = 3 Or F = 4 Then H = H0 / 2 Else Выход из программы, если неверно задан формат (возврат в форму Menu с возможностью задать формат верно и повторить попытку построения) D=MsgBox("Неверно задан формат листа", vbExclamation, "Attention!") Exit Sub End If
Вызов процедуры вычерчивания линий рамки (передает в процедуру размеры высоты и ширины формата) Call Ramka(L, H) Вызов процедуры вычерчивания линий штампа (передает в процедуру размеры высоты и ширины формата) Call Shtamp(L, H) Вызов процедуры вычерчивания текста (передает в процедуру размеры высоты и ширины формата, номера формата) Call Text(L, H, F) GoTo Stop2
Переход на метку, если не загружен AutoCAD и выход из программы (возврат в меню с возможностью запустить AutoCAD и повторить попытку построения) Stop1: D = MsgBox("Не загружен AutoCAD. Нажми кнопку AutoCAD R14", vbExclamation, "Attention!") Stop2: End Sub
Процедура вычерчивания линий рамки (получает размеры высоты и ширины формата) Sub Ramka(L, H) Dim Point1(0 To 2) As Double Dim Point2(0 To 2) As Double Dim aObj As Object
For i = 0 To 3 'Граница формата Select Case i Case 0 Point1(0) = 0: Point1(1) = 0: Point1(2) = 0 Point2(0) = L: Point2(1) = 0: Point2(2) = 0 Case 1 Point1(0) = L: Point1(1) = 0: Point1(2) = 0 Point2(0) = L: Point2(1) = H: Point2(2) = 0 Case 2 Point1(0) = L: Point1(1) = H: Point1(2) = 0 Point2(0) = 0: Point2(1) = H: Point2(2) = 0 Case 3 Point1(0) = 0: Point1(1) = H: Point1(2) = 0 Point2(0) = 0: Point2(1) = 0: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next i
For i = 0 To 3 'Рамка формата Select Case i Case 0 Point1(0) = 20: Point1(1) = 5: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 5: Point2(2) = 0 Case 1 Point1(0) = L - 5: Point1(1) = 5: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = H - 5: Point2(2) = 0 Case 2
Point1(0) = L - 5: Point1(1) = H - 5: Point1(2) = 0 Point2(0) = 20: Point2(1) = H - 5: Point2(2) = 0 Case 3 Point1(0) = 20: Point1(1) = H - 5: Point1(2) = 0 Point2(0) = 20: Point2(1) = 5: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next i
For i = 0 To 1 'Рамка малая Select Case i Case 0 Point1(0) = 20: Point1(1) = H - 19: Point1(2) = 0 Point2(0) = 90: Point2(1) = H - 19: Point2(2) = 0 Case 1 Point1(0) = 90: Point1(1) = H - 19: Point1(2) = 0 Point2(0) = 90: Point2(1) = H - 5: Point2(2) = 0
End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next i
For i = 0 To 12 'Рамка вертикальная Select Case i Case 0 Point1(0) = 20: Point1(1) = H0 / 2 - 5: Point1(2) = 0 Point2(0) = 8: Point2(1) = H0 / 2 - 5: Point2(2) = 0 Case 1 Point1(0) = 20: Point1(1) = H0 / 2 - 65: Point1(2) = 0 Point2(0) = 8: Point2(1) = H0 / 2 - 65: Point2(2) = 0 Case 2 Point1(0) = 20: Point1(1) = H0 / 2 - 125: Point1(2) = 0 Point2(0) = 8: Point2(1) = H0 / 2 - 125: Point2(2) = 0 Case 3 Point1(0) = 20: Point1(1) = 5: Point1(2) = 0 Point2(0) = 8: Point2(1) = 5: Point2(2) = 0 Case 4 Point1(0) = 20: Point1(1) = 30: Point1(2) = 0 Point2(0) = 8: Point2(1) = 30: Point2(2) = 0 Case 5 Point1(0) = 20: Point1(1) = 65: Point1(2) = 0
Point2(0) = 8: Point2(1) = 65: Point2(2) = 0 Case 6 Point1(0) = 20: Point1(1) = 90: Point1(2) = 0 Point2(0) = 8: Point2(1) = 90: Point2(2) = 0 Case 7 Point1(0) = 20: Point1(1) = 115: Point1(2) = 0 Point2(0) = 8: Point2(1) = 115: Point2(2) = 0 Case 8 Point1(0) = 20: Point1(1) = 150: Point1(2) = 0 Point2(0) = 8: Point2(1) = 150: Point2(2) = 0 Case 9 Point1(0) = 8: Point1(1) = 5: Point1(2) = 0 Point2(0) = 8: Point2(1) = 150: Point2(2) = 0 Case 10 Point1(0) = 13: Point1(1) = 5: Point1(2) = 0 Point2(0) = 13: Point2(1) = 150: Point2(2) = 0 Case 11 Point1(0) = 8: Point1(1) = H0 / 2 - 5: Point1(2) = 0 Point2(0) = 8: Point2(1) = H0 / 2 - 125: Point2(2) = 0 Case 12 Point1(0) = 13: Point1(1) = H0 / 2 - 5: Point1(2) = 0 Point2(0) = 13: Point2(1) = H0 / 2 - 125: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next i End Sub
Процедура вычерчивания линий штампа (получает размеры высоты и ширины формата) Sub Shtamp(L, H) Dim Point1(0 To 2) As Double Dim Point2(0 To 2) As Double Dim aObj As Object
'Горизонтали штампа For j = 0 To 10 Point1(0) = L - 190: Point1(1) = 10 + 5 * j: Point1(2) = 0 Point2(0) = L - 125: Point2(1) = 10 + 5 * j: Point2(2) = 0 With MSpace.AddLine(Point1, Point2) .Color = Color End With Next j For j = 0 To 3
Select Case j Case 0 Point1(0) = L - 190: Point1(1) = 20: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 20: Point2(2) = 0 Case 1 Point1(0) = L - 190: Point1(1) = 45: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 45: Point2(2) = 0 Case 2 Point1(0) = L - 190: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 60: Point2(2) = 0 Case 3 Point1(0) = L - 190: Point1(1) = 5: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 5: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next j For j = 0 To 1 Select Case j Case 0 Point1(0) = L - 55: Point1(1) = 25: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 25: Point2(2) = 0 Case 1 Point1(0) = L - 55: Point1(1) = 40: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 40: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next j
'Вертикали штампа For j = 0 To 12 Select Case j Case 0 Point1(0) = L - 190: Point1(1) = 5: Point1(2) = 0 Point2(0) = L - 190: Point2(1) = 60: Point2(2) = 0 Case 1 Point1(0) = L - 183: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 183: Point2(1) = 35: Point2(2) = 0 Case 2 Point1(0) = L - 173: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 173: Point2(1) = 5: Point2(2) = 0 Case 3
Point1(0) = L - 150: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 150: Point2(1) = 5: Point2(2) = 0 Case 4 Point1(0) = L - 135: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 135: Point2(1) = 5: Point2(2) = 0 Case 5 Point1(0) = L - 125: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 125: Point2(1) = 5: Point2(2) = 0 Case 6 Point1(0) = L - 55: Point1(1) = 45: Point1(2) = 0 Point2(0) = L - 55: Point2(1) = 5: Point2(2) = 0 Case 7 Point1(0) = L - 40: Point1(1) = 45: Point1(2) = 0 Point2(0) = L - 40: Point2(1) = 25: Point2(2) = 0 Case 8 Point1(0) = L - 23: Point1(1) = 45: Point1(2) = 0 Point2(0) = L - 23: Point2(1) = 25: Point2(2) = 0 Case 9 Point1(0) = L - 50: Point1(1) = 40: Point1(2) = 0 Point2(0) = L - 50: Point2(1) = 25: Point2(2) = 0 Case 10 Point1(0) = L - 45: Point1(1) = 40: Point1(2) = 0 Point2(0) = L - 45: Point2(1) = 25: Point2(2) = 0 Case 11 Point1(0) = L - 35: Point1(1) = 20: Point1(2) = 0 Point2(0) = L - 35: Point2(1) = 25: Point2(2) = 0 Case 12 Point1(0) = L - 5: Point1(1) = 60: Point1(2) = 0 Point2(0) = L - 5: Point2(1) = 5: Point2(2) = 0 End Select With MSpace.AddLine(Point1, Point2) .Color = Color End With Next j End Sub
Процедура вычерчивания текста (получает размеры высоты и ширины формата, номер формата) Sub Text(L, H, F) Dim TxtObj As Object Dim Point(0 To 2) As Double Dim FntFile As Variant Const Height As Single = 3
Set TStyle = ADoc.ActiveTextStyle
'Чтение файла-шрифта из папки AutoCad R14\Fonts TStyle.FontFile = "Gosta_w.shx"
Point(0) = L - 22: Point(1) = 41: Point(2) = 0 With MSpace.AddText("Масштаб", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 37: Point(1) = 41: Point(2) = 0 With MSpace.AddText("Масса", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 51: Point(1) = 41: Point(2) = 0 With MSpace.AddText("Лит.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 51: Point(1) = 21: Point(2) = 0 With MSpace.AddText("Лист", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 30: Point(1) = 21: Point(2) = 0 With MSpace.AddText("Листов", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 40: Point(1) = 1: Point(2) = 0 With MSpace.AddText("Формат А" + LTrim$(Str$(F)), Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 134: Point(1) = 36: Point(2) = 0 With MSpace.AddText("Дата", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 149: Point(1) = 36: Point(2) = 0 With MSpace.AddText("Подпись", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 170: Point(1) = 36: Point(2) = 0
With MSpace.AddText("N докум.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 182.5: Point(1) = 36: Point(2) = 0 With MSpace.AddText("Лист", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 36: Point(2) = 0 With MSpace.AddText("Изм", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 31: Point(2) = 0 With MSpace.AddText("Разраб.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 26: Point(2) = 0 With MSpace.AddText("Проверил", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 21: Point(2) = 0 With MSpace.AddText("Т.контр.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 11: Point(2) = 0 With MSpace.AddText("Н.контр.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With Point(0) = L - 189.5: Point(1) = 6: Point(2) = 0 With MSpace.AddText("Утв.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 End With
'вертикальные надписи Point(0) = 12: Point(1) = 8: Point(2) = 0 With MSpace.AddText("Инв.N подл.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2
End With Point(0) = 12: Point(1) = 36: Point(2) = 0 With MSpace.AddText("Подп. и дата", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With Point(0) = 12: Point(1) = 68: Point(2) = 0 With MSpace.AddText("Взам. инв.N", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With Point(0) = 12: Point(1) = 93: Point(2) = 0 With MSpace.AddText("Инв.N дубл.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With Point(0) = 12: Point(1) = 120: Point(2) = 0 With MSpace.AddText("Подп. и дата", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With Point(0) = 12: Point(1) = H0 / 2 - 45: Point(2) = 0 With MSpace.AddText("Перв. примен.", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With Point(0) = 12: Point(1) = H0 / 2 - 100: Point(2) = 0 With MSpace.AddText("Справ.N", Point, Height) .Color = Color + 1 .ObliqueAngle = 3.14 * 15 / 180 .Rotation = 3.14 / 2 End With End Sub
Использование VBA-приложения. Для выполнения созданной программы следует: - открыть книгу Excel с созданной программой; - нажать на элемент управления «Старт меню»; - заполнить окна необходимой информацией;
- если программа AutoCAD не загружена, загрузить ее нажатием кнопки «AutoCAD R14». - для вычерчивания рамки и штампа заданного формата нажать кнопку «Формат»; - для ввода текста в штамп нажать кнопку «Заполнение штампа»; - перейти в окно AutoCAD, установить указатель мыши в графическую зону экрана. На экране появятся изображения рамки нужного формата , штампа и текста; - для завершения работы с формой нажать кнопку «Выход». При неверном вводе данных в поле «Формат А» программа сообщит о неверном вводе и позволит повторить ввод. При незапущенном приложении AutoCAD программа сообщит об ошибке и позволит ее исправить. Программа использует шрифт "Gosta_w.shx", соответствующий ГОСТу, который необходимо разместить в папке шрифтов AutoCAD: с:\Program Files\AutoCad R14\Fonts или с:\Program Files\AutoCad 2000\Fonts.
Задания на разработку: 1. Разработать VBA-приложение, вычерчивающее таблицу параметров зубчатого зацепления с возможностью выбора его параметров.
2. Разработать VBA-приложение, вычерчивающее обозначение сварочного соединения с возможностью выбора его параметров.
2. Разработать VBA-приложение, вычерчивающее изображение подшипника (поперечный разрез) с возможностью выбора его параметров.
Считывание атрибутов блоков чертежа (технологической схемы). Задача – разработать VBA-приложение, позволяющее считывать из чертежа атрибуты его блоков. Задача актуальна при составлении спецификаций схем, содержащих большое количество узлов и стандартных элементов (например, сборочные чертежи сложных механизмов, схемы технологических линий). Такие чертежи, как правило, включают в себя изображения элементов в виде блоков – групп примитивов, объединенных одним именем и распознаваемых в базе данных чертежа как один объект. Блоки имеют возможность содержать текстовую информацию – атрибуты (например, наименование узла, его марка, основные характеристики – производительность, потребляемая мощность и т.д.). Таблица атрибутов блоков представляет собой точную спецификацию сборочного чертежа или схемы, так как читается непосредственно из чертежа. Существуют способы чтения атрибутов блоков с помощью команд самой программы AutoCAD, но работа с ними трудоемка и неудобна. VBA-приложение целесообразно разрабатывать в среде VBA Microsoft Excel, так как спецификацию удобно иметь в виде таблицы, кроме того, такое приложение обеспечит выполнение программы в базовой версии AutoCAD R14, которая не оснащена средой программирования VBA. В этом VBA-приложении больше внимания уделим проверке и обеспечению выполнения программируемых действий, таких как запуск приложений, загрузка чертежа, наличие-отсутствие листа для печати таблицы атрибутов. Проект может включать в себя: - Лист Excel с элементом управления, например, кнопкой, запускающим на выполнение процедуру чтения атрибутов; - процедуру чтения атрибутов блоков чертежа AutoCAD. Процедура может быть размещена в модуле; -Лист Excel с таблицей результатов.
Этапы разработки приложения. 1 этап – создание элемента управления. Запускаем программу Microsoft Excel, создаем книгу , в книге оставляем один Лист, переименовываем его в «Главный». Создаем элемент управления – кнопку, для чего: - в меню ВидПанели инструментов открываем панель инструментов «Элементы управления»; - выбираем элемент «Кнопка» и изображаем его на Листе; - в контекстном меню элемента «Кнопка» выбираем команду «Свойства», в появившейся таблице свойств изменяем надпись (Caption) на кнопке на фразу «Читать атрибуты»; - в контекстном меню элемента «Кнопка» выбираем команду «Обработка события», в результате получаем процедуру в объекте Лист, в которую вносим одну строку – имя макроса, выполняющего чтение атрибутов Blocks_Attributes. (этот макрос создадим позже):
Private Sub CommandButton1_Click() Blocks_Attributes End Sub Процедура будет выполнена при нажатии на кнопку; - на панели «Элементы управления» нажимаем на кнопку «Выход из режима редактирования», панель элементов управления закрываем.
2-й этап – создание макроса, читающего атрибуты в таблицу листа Excel: - запускаем редактор Visual Basic: “СервисМакросРедактор Visual Basic”; - добавляем в проект ссылку на библиотеку типов AutoCAD: ToolsPreferencesAutoCAD Object Library; - в редакторе с помощью команды «ВставкаМодуль» создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» создаем процедуру:
Описание общих переменных Public acad As Object Public excelSheet As Object
Процедура чтения атрибутов блоков Sub Blocks_Attributes()
Описание локальных переменных Dim objMspace As Object Dim objElement As Object Dim objExcel As Object Dim objDoc As Object Dim intI As Integer Dim objAttr As Variant Dim strBlockName(1 To 1000) As String Dim intNumBlockName(1 To 1000) As Integer Dim intTotalNumOfBlocks As Integer
1-я часть – установление связи с программой AutoCAD и загрузка в нее нужного чертежа On Error Resume Next Отложенный перехват ошибки 'Устанавливает связь с AutoCAD, если программа уже работает Set acad = GetObject(, "AutoCAD.Application") If Err Then 'Если ошибка (AutoCAD не запущен и связь не установлена), то переменная, содержащая ошибку, «обнуляется», и программа получает возможность исправить ошибку. Err.Clear
'Создает сеанс работы AutoCAD, если программа не работает. Сеанс создается скрытым, то есть действия не отображаются на экране и панели задач, что экономит ресурсы компьютера и ускоряет процесс обработки. Проверить, что программа работает можно, нажав клавиши Ctrl+Alt+Del, и посмотрев список загруженных программ. Set acad = CreateObject("AutoCAD.Application") 'Если приложение AutoCAD отсутствует, выводит сообщение и завершает работу программы. If Err Then MsgBox "Не могу установить связь с AutoCAD" Exit Sub End If End If Работу AutoCAD можно сделать видимой командой (здесь команда не работает, так как преобразована в комментарий): 'acad.Visible = True
'Выбор файла чертежа с помощью стандартного окна Windows "Открыть файл" Powtor: Параметры команды «Открыть файл» - типы доступных к открытию файлов ( в нашем случае – это файлы чертежей AutoCAD - Dwg Files (*.dwg)). Имя выбранного файла записывает в переменную DwgName DwgName = Application.GetOpenFilename("Dwg Files (*.dwg), *.dwg")
Если имя не выбрано, например, нажата кнопка «Отмена», или в переменной DwgName нет значения, то предлагается завершить работу с программой или повторить выбор файла If DwgName = False Then Response = MsgBox("Завершить работу с программой?", 4, "Отказ выбора файла")
If Response = vbYes Then 'Подтверждаем выход из программы
'Если AutoCAD активен (то есть загружался до начала работы VBA-приложения, например, вручную), то запрашивает о выходе из AutoCAD If acad.Visible = True Then Response = MsgBox("Завершить работу с AutoCAD?", 4, "AutoCAD Quit") If Response = vbYes Then 'Подтверждаем выход из AutoCAD ‘выгружает AutoCAD и завершает работу программы acad.Quit Exit Sub End If End If
Exit Sub ' Выходит из программы без выгрузки AutoCAD
Else 'Отказываемся от завершения работы программы GoTo Powtor 'Возврат по метке в окно "Открыть файл" End If End If
Если выбранный файл не файл с расширением ".dwg", то следует повторить выбор. Для реализованного варианта работы с окном «Открыть файл» возможность ошибки исключена, так как доступны к открытию только файлы с расширением ".dwg". If (Right(DwgName, 4) <> ".dwg") Then MsgBox "Выбранный файл не чертеж AutoCAD. Повторите ввод." GoTo Powtor End If Устанавливает в переменную objDoc активный документ AutoCAD Set objDoc = acad.ActiveDocument Если полное имя активного документа AutoCAD не совпадает с выбранным нами именем, которое записано в переменную DwgName, то устанавливает в переменную objDoc объект–коллекцию документов AutoCAD, затем открывает документ с именем, размещенным в переменной DwgName, методом Open. If objDoc.FullName <> DwgName Then Set objDoc = acad.Documents objDoc.Open DwgName End If
Устанавливает в переменную objDoc активный документ AutoCAD (теперь уже тот, который мы выбрали), а в переменную objMspace пространство модели активного документа. Set objDoc = acad.ActiveDocument Set objMspace = objDoc.ModelSpace
2-я часть – создание или очистка от данных листа «Атрибуты» Устанавливает связь с приложением Excel Set objExcel = GetObject(, "Excel.Application") В переменную Key устанавливает значение 0 Key = 0
'Просматривает все листы активной книги Excel. Если есть лист с именем «Атрибуты», в переменную Key устанавливает значение 1 For Each objElement In ActiveWorkbook.Sheets With objElement If (.Name = "Атрибуты") Then Key = Key + 1
End If End With Next
Если переменная Key=0 (листа «Атрибуты» в книге нет), то создает новый лист и задает ему имя «Атрибуты» If Key = 0 Then ActiveWorkbook.Sheets.Add ActiveSheet.Name = "Атрибуты" End If Активизирует лист «Атрибуты» Set objExcelSheet = objExcel.ActiveWorkbook.Sheets("Атрибуты") Worksheets("Атрибуты").Activate
Очищает содержимое диапазона ячеек листа «Атрибуты» objExcelSheet.Range(Cells(1, 1), Cells(100, 12)).Clear intI = 1
3-я часть – чтение атрибутов чертежа и запись их в ячейки листа «Атрибуты» 'Читает из чертежа имена блоков, просматривая коллекцию блоков открытого чертежа, и записывает их в ячейки Листа (в 1-й столбец, начиная с 1-й строки), если имя блока не начинается символом «*» (этим символом начинаются имена служебных блоков базы данных чертежа AutoCAD). Имена блоков записывает в массив strBlockName. Следует различать имена блоков, входящих в базу данных чертежа, и вхождения блоков, то есть их реализации на чертеже. Блок в чертеже может быть один (например, изображение подшипника), а вхождений этого блока в чертеж несколько (несколько изображений этого блока на поле чертежа). Каждое вхождение имеет свои атрибуты (тип подшипника, его размеры). For Each objElement In objDoc.Blocks With objElement If (Left(.Name, 1) <> "*") Then objExcelSheet.Cells(intI, 1) = objElement.Name strBlockName(intI) = objElement.Name intI = intI + 1 End If End With Next 'Обнуляет количество "вхождений" каждого блока в чертеж intI = intI - 1 intTotalNumOfBlocks = intI For intI = 1 To intTotalNumOfBlocks intNumBlockName(intI) = 0 Next
Шрифт ячеек с именами блоков чертежа назначает жирным objExcelSheet.Range(Cells(1, 1), Cells(intI, 1)).Font.Bold = True
'Считает число вхождений каждого блока xRow = 1
'Для всех элементов пространства модели выполняет For Each objElement In objMspace With objElement Found = False
'Функция сравнения символьных строк: если объект - блок, то в цикле ищет его вхождение If StrComp(objElement.EntityName, "AcDbBlockReference", 1)=0 Then
'Цикл по количеству блоков в чертеже For intI = 1 To intTotalNumOfBlocks If Not Found Then
'Сравнивает имя элемента и имя блока If StrComp(.Name, strBlockName(intI), 1) = 0 Then
'Если имена совпадают, считывает атрибуты в массив objAttr objAttr = objElement.GetAttributes
'Выводит в ячейки листа текст всех атрибутов блока, создавая таблицу атрибутов For I = LBound(objAttr) To UBound(objAttr) objExcelSheet.Cells(xRow, 5 + I) = objAttr(I).TextString Next I 'Считает найденное вхождение блока intNumBlockName(intI) = intNumBlockName(intI) + 1 Found = True xRow = xRow + 1 End If End If Next End If End With Set objElement = Nothing Next objElement
'Печатает количество вхождений блока на Лист For intI = 1 To intTotalNumOfBlocks objExcelSheet.Cells(intI, 2) = intNumBlockName(intI)
Next
4-я часть – завершение работы программы 'Если AutoCAD активен, то запросить о выходе If acad.Visible = True Then Response = MsgBox("Завершить работу с AutoCAD?", 4, "AutoCAD Quit") If Response = vbYes Then ' Подтверждение закрытия AutoCAD acad.Quit ' Else 'Отказ от выхода из AutoCAD Exit Sub ' Выход из программы End If End If
'Если AutoCAD работал скрытно, выгружает его acad.Quit
Конец программы End Sub
Использование VBA-приложения. Для выполнения созданной программы следует: - открыть книгу Excel с созданной программой; - нажать на элемент управления - кнопку «Читать атрибуты»; VBA-приложение создаст в этой книге лист «Атрибуты», если его не было, или очистит от данных существующий лист с именем «Атрибуты», а затем выведет наименование каждого блока чертежа и количество "вхождений" блока в чертеж, а также список атрибутов блоков. Атрибуты каждого блока размещаются в строке. Программа проверяет, загружен ли AutoCAD, и если нет, то загружает его в скрытом режиме. В окне диалога "Открыть файл" следует указать DWG-файл, из которого следует извлечь атрибуты блоков. В конце работы программа выгружает AutoCAD. Если AutoCAD был уже загружен, то желательно, чтобы DWG-файл, из которого следует извлечь атрибуты блоков, был открыт. Если AutoCAD был загружен до начала работы VBA-приложения, то оно запросит, нужно ли выгружать AutoCAD, или нет. На рис.13 приведен чертеж-схема, содержащий 2 блока: «Узел» - 5 вхождений и «Емкость» - 2 вхождения, каждое из которых имеет свои атрибуты (выведены на поле чертежа рядом с изображением блока). На рис.14 приведен результат работы программы – перечень блоков чертежа с указанием количества вхождений и таблица атрибутов вхождений блоков в чертеж
Рис.13. Чертеж-схема
Рис.14. Таблица атрибутов блоков чертежа
Задания на разработку: 1. В приведенном VBA-приложении разработать процедуру, сортирующую таблицу атрибутов по наименованию узла.
Построение пространственной твердотельной модели.
Задача – разработать VBA-приложение, позволяющее по заданным глубине и ширине срезаемого пласта, углу установки и углу врезания спроектировать цилиндроидальный отвал плуга. Отвал плуга представляет собой сложное геометрическое тело, не имеющее (за исключением плоскости лезвия) плоских поверхностей. Цилиндроидальные плуги являются самыми простыми по геометрии, так как такой плуг практически можно вырезать из трубы большого диаметра. Задачей проектирования является создание твердотельной модели плуга, которая позволит определить, задавшись плотностью материала плуга, массовые, инерционные характеристики, а также позволит выполнить прочностные, вибрационные и гидродинамические расчеты. Твердотельные модели представляют собой математические описания пространственных фигур и их сочетаний, выполненных по правилам логического сложения/вычитания. Так, например, труба есть логическое вычитание двух соосных цилиндров одинаковой длины и разного диаметра. Сами пространственные фигуры создаются заданием плоской фигуры, которая затем вращается вокруг заданной оси (фигуры вращения) или экструдируется (выдавливается) вдоль направляющей. Например, цилиндрическая пружина есть круг, выдавленный по цилиндрической спирали (см. рис.15).
Рис.15. Тор с вырезанным сегментом – фигура вращения, виток спирали – экструдированная фигура
VBA-приложение целесообразно разрабатывать в среде VBA AutoCAD, так как программа предполагает выполнение геометрических расчетов, включающих в себя решение систем нелинейных уравнений и вычисление производных функций. Для решения таких задач удобно воспользоваться программой Mathcad, а управляющие формы, процедуры геометрических построений и преобразований выполнить в среде VBA AutoCAD. Проект может включать в себя: - управляющую форму с возможностью внесения исходных данных и запуска процедур обработки данных и построения на выполнение; - документы Mathcad, осуществляющие математическую обработку данных; - временные ASCII-файлы данных для обмена данными между Mathcad и AutoCAD;
- процедуры построений на поле чертежа AutoCAD и вспомогательные процедуры, размещенные в модулях, а также процедуры, размещенные как процедуры обработки событий управляющих элементов формы (кнопок, полей, полей со списком) в объекте «форма». Использование в проекте временных ASCII-файлов существенно упрощает процесс обмена данными между приложениями, но является самой медленной технологией. Файлы создаются при необходимости в директории c:\Windows\Temp и удаляются после их использования.
Этапы разработки приложения. 1-й этап – разработка схемы проекта:
2-й этап – создание макроса, запускающего на выполнение форму: - запускаем редактор Visual Basic: “СервисМакросРедактор Visual Basic” (ToolsMacroVisual Basic Editor); - в редакторе с помощью команды «ВставкаМодуль» (InsrtModule) создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» (InsertProcedure) создаем процедуру, в которую заносим одну команду: Sub Start_01() имя макроса Start.Show команда вывода на экран формы Start End Sub Результат выполнения макроса – появление на экране формы по имени Start. Формы с таким именем пока нет, мы ее создадим позже. 3-й этап – создание управляющей формы: - в редакторе Visual Basic командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»; - в окне свойств в графе Имя (Name) изменяем имя формы на Start; - пользуясь панелью элементов управления создаем кнопки и поля, в окне свойств для каждого элемента задаем необходимые параметры: имена, надписи, цвет фона, шрифт и т.д. Форма принимает вид рис.16
Рис.16. Управляющая форма - создадим процедуры обработки событий, для чего выполним двойной щелчок кнопки мыши на управляющих элементах. Двойной щелчок на элементе управления создаст процедуру, связанную с событием, которое распознает управляющий элемент. Содержание процедур напишем сами:
Описание общих для проекта переменных Option Explicit Public FileName As String Public Flag As String Dim M(0 To 23) As Double Public h As Double Public B As Double Public Gamma As Double Public Epsil As Double Установка фокуса в текстовом окне «Глубина в см» при открытии формы Private Sub UserForm_Activate() TextBox1.SetFocus End Sub Чтение данного (глубина) из окна как числа при выходе из окна Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Val(TextBox1.Text) h = TextBox1.Text End Sub Чтение данного (ширина) из окна как числа при выходе из окна
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2.Text = Val(TextBox2.Text) B = TextBox2.Text End Sub Чтение данного (угол установки) из окна как числа при выходе из окна Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox3.Text = Val(TextBox3.Text) Gamma = TextBox3.Text End Sub Чтение данного (угол врезания) из окна как числа при выходе из окна Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox4.Text = Val(TextBox4.Text) Epsil = TextBox4.Text End Sub Создание файла, запись в него данных по нажатию кнопки «Ввод» Private Sub CommandButton5_Click() Dim q As String Проверка правильности ввода исходных данных If h <= 0 Then q = MsgBox("Глубина должна быть >0. Повтори ввод!", 0) ElseIf B <= 0 Then q = MsgBox("Ширина должна быть >0. Повтори ввод!", 0) ElseIf Gamma <= 0 Or Gamma > 90 Then q = MsgBox("Угол установки задан неверно. Повтори ввод!", 0) ElseIf Epsil <= 0 Or Epsil > 90 Then q = MsgBox("Угол врезания задан неверно. Повтори ввод!", 0) Else Ввод имени файла данных FileName = "c:\Windows\Temp\data.dat" 'имя файла обмена данными FileName = InputBox("Введите имя файла для записи", "Запись", FileName) If FileName = "" Then q = MsgBox("Не задано имя файла!", 0) GoTo End2 End If On Error GoTo End1 'Открытие файла для передачи данных в Mathcad-программу Open FileName For Output Shared As #1 Write #1, h, B, Gamma, Epsil 'Write comma-delimited data. Close #1 Flag = "yes" 'флаг наличия файла данных End If End2: Exit Sub End1:
q = MsgBox("Ошибка открытия файла!", 0) End0: End Sub Вызов программы Mathcad расчета направляющей кривой по нажатию кнопки «Направляющая кривая» Private Sub CommandButton2_Click() Dim Arm Dim MCadFileName Dim ProjectFileName Dim q As String Если существует файл данных: If Flag = "yes" Then 'флаг наличия файла данных Открытие и выполнение Mathcad-программы MCadFileName = "c:\Program Files\Mathsoft\Mathcad\mcad.exe" MCadFileName = InputBox("Введите путь к программе Mathcad", "Открытие Mathсad", MCadFileName) If MCadFileName = "" Then q = MsgBox("Неверный путь к программе!", 0) Exit Sub End If ProjectFileName = "c:\Plug-Project\Plug1_VB.mcd" ProjectFileName = InputBox("Введите имя проекта", "Имя проекта", ProjectFileName) If ProjectFileName = "" Then q = MsgBox("Неверный путь к файлу!", 0) Exit Sub End If On Error GoTo End1 Запуск программы расчета Mathcad в режиме активного окна Arm = Shell(MCadFileName + " " + ProjectFileName, 3) Открытие формы Hello после выхода из программы Mathcad Hello.Show Exit Sub Else q = MsgBox("Файл данных не создан", 0) End If End Sub Вызов программы Mathcad расчета профиля и контура по нажатию кнопки «Лобовое сечение и контур» Private Sub CommandButton3_Click() Dim Arm Dim MCadFileName Dim ProjectFileName Dim q As String If Flag = "yes" Then 'флаг наличия файла данных
Открытие и выполнение Mathcad-программы MCadFileName = "c:\Program Files\Mathsoft\Mathcad\mcad.exe" MCadFileName = InputBox("Введите путь к программе Mathcad", "Открытие Mathсad", MCadFileName) If MCadFileName = "" Then q = MsgBox("Неверный путь к программе!", 0): Exit Sub End If ProjectFileName = " c:\Plug-Project\Plug2_VB.mcd" ProjectFileName = InputBox("Введите имя проекта", "Имя проекта", ProjectFileName) If ProjectFileName = "" Then q = MsgBox("Неверный путь к файлу!", 0): Exit Sub End If On Error Exit Sub Запуск программы расчета Mathcad в режиме активного окна Arm = Shell(MCadFileName + " " + ProjectFileName, 3) Открытие формы Hello после выхода из программы Mathcad Hello.Show Exit Sub Else q = MsgBox("Файл данных не создан", 0) End If End Sub Чтение результатов расчета из ASCII-файла, закрытие формы и вызов подпрограммы рисования лобового сечения по нажатию кнопки «Лобовое сечение» Private Sub CommandButton1_Click() Dim alfa1 As String Dim q As String Dim i As Single Dim FileName1 As String FileName1 = "c:\Windows\Temp\profil" 'имя файла обмена данными If Flag = "yes" Then 'Открытие файла для чтения данных после работы Mathcad-программы Open FileName1 For Input As #1 i = 0 Do While Not EOF(1) M(i) = Val(Input(8, #1)) 'Чтение результатов в массив М alfa1 = Input(2, #1) i = i + 1 Loop Close #1 'Закрытие файла данных Закрытие формы Start и вызов процедуры построения лобового сечения Profil(M, h, B) Start.Hide
Call Profil(M, h, B) Else q = MsgBox("Файл не создан", 0) End If End Sub Чтение результатов расчета из ASCII-файла, закрытие формы и вызов подпрограммы рисования модели по нажатию кнопки «Модель» Private Sub CommandButton4_Click() Start.Hide Call Region_07 End Sub 4-й этап – создание информационной формы: - в редакторе Visual Basic командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»; - в окне свойств в графе Имя (Name) изменяем имя формы на Hello; - пользуясь панелью элементов управления создаем кнопку, в окне свойств для каждого элемента задаем необходимые параметры: имена, надписи, цвет фона, шрифт и т.д. Форма принимает вид рис.17. - создадим процедуру обработки события – нажатие кнопки, результат которой – закрытие формы Hello: Private Sub CommandButton1_Click() Hello.Hide End Sub 5-й этап – создание процедур, выполняющих построения в пространстве модели AutoCAD: - в редакторе Visual Basic с помощью команды «ВставкаМодуль» создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» создаем процедуры: Описание общих для проекта переменных Option Explicit Public h As Double Public B As Double Dim M(0 To 23) As Double Процедура вычерчивания лобового сечения (вызывается кнопкой «Лобовое сечение») массив М содержит координаты точек лобового сечения и расчетные углы и радиусы дуг h – глубина резания, В – ширина резания Public Sub Profil(M, h, B) Dim lineObj As AcadLine Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Dim arcObj As AcadArc Dim centerPoint(0 To 2) As Double Dim radius As Double
Dim startAngle As Double Dim endAngle As Double Dim ww, X, Y Dim newViewport As AcadViewport Создание нового видового экрана и его активация Set newViewport = ThisDrawing.Viewports.Add("front1") ThisDrawing.ActiveViewport = newViewport X = 0: Y = 0 задание координат точек и рисование отрезка прямой между точками startPoint(0) = M(0) + X startPoint(2) = M(1) + Y endPoint(0) = M(2) + X endPoint(2) = M(3) + Y Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) задание координат точек и рисование отрезка прямой между точками startPoint(0) = M(2) + X startPoint(2) = M(3) + Y endPoint(0) = M(6) + X endPoint(2) = M(7) + Y Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) задание координат точек и рисование отрезка прямой между точками startPoint(0) = M(0) + X startPoint(2) = M(1) + Y endPoint(0) = M(4) + X endPoint(2) = M(5) + Y Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) задание координат точек и рисование отрезка прямой между точками startPoint(0) = M(4) + X startPoint(2) = M(5) + Y endPoint(0) = M(10) + X endPoint(2) = M(11) + Y Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) задание координат точек и рисование отрезка прямой между точками startPoint(0) = M(10) + X startPoint(2) = M(11) + Y endPoint(0) = M(14) + X endPoint(2) = M(15) + Y Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) задание координаты центра, радиуса, начального и конечного углов и рисование дуги radius = M(18) centerPoint(0) = M(16) + X centerPoint(2) = M(17) + Y endAngle = M(22) startAngle = M(23)
Set arcObj = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngle, endAngle) задание координаты центра, радиуса, начального и конечного углов и рисование дуги radius = M(19) centerPoint(0) = M(8) + X centerPoint(2) = M(9) + Y endAngle = M(20) startAngle = M(21) Set arcObj = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngle, endAngle) Вывод всех изображенных линий в границах экрана ZoomAll End Sub Процедура вычерчивания твердотельной модели Sub Region_07() Dim regionObj As Variant Dim solidObj As Acad3DSolid Dim sliceObj As Acad3DSolid Dim Line(0 To 2) As AcadEntity Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Dim data(0 To 1000) As Double Dim FileName2 As String Dim AAA As String Dim i As Single Dim j As Single Dim buffallo As Double Dim N As Single, N1 As Single Dim h As Single, Angle As Single h = 1 'Высота выдавливания Angle = 0 'Угол выдавливания Задание имени ASCII-файла с результатами расчета (координатами точек контура поверхности). Файл содержит матрицу координат Х, У, Z для точек контура с заданным шагом по высоте (координате Z). FileName2 = "c:/windows/temp/left.dat" i = 0 Open FileName2 For Input As #1 Открытие ASCII-файла для чтения Input #1, AAA Input #1, AAA Input #1, AAA Input #1, AAA Do While Not EOF(1) 'Читать, пока файл не закончится Input #1, data(i), buffallo 'Чтение данного в переменную i = i + 1
Loop Close #1 Закрытие файла 'Kill FileName2 Удаление файла N = i N1 = N / 2 For j = 0 To N1 - 5 Step 3 Построение сторон треугольника, объединение их в область и экструдирование Задание координат точек линии startPoint(0)=data(j): startPoint(1)=data(j+1): startPoint(2)=data(j+2) endPoint(0)=data(j+3): endPoint(1)=data(j+4): endPoint(2)=data(j+5) Создание линии – 1-го элемента области Set Line(0) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) Задание координат точек линии startPoint(0)=data(j): startPoint(1)=data(j+1): startPoint(2)=data(j+2) endPoint(0)=data(N1+j): endPoint(1)=data(N1+j+1): endPoint(2)=data(N1+j+2) Создание линии – 2-го элемента области Set Line(1) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) Задание координат точек линии startPoint(0)=data(j+3): startPoint(1)=data(j+4): startPoint(2)=data(j+5) endPoint(0)=data(N1+j): endPoint(1)=data(N1+j+1): endPoint(2)=data(N1+j+2) Создание линии – 3-го элемента области Set Line(2) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) Создание треугольной области из трех линий, имеющих общие вершины regionObj = ThisDrawing.ModelSpace.AddRegion(Line) Выдавливание (экструдирование) области на заданную высоту в заданном направлении Set solidObj = ThisDrawing.ModelSpace.AddExtrudedSolid(regionObj(0), h, Angle)
Построение сторон треугольника, объединение их в область и экструдирование startPoint(0)=data(N1+j+3): startPoint(1)=data(N1+j+4): startPoint(2)=data(N1+j+5) endPoint(0)=data(j+3): endPoint(1)=data(j+4): endPoint(2)=data(j+5) Set Line(0) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) startPoint(0)=data(N1+j+3): startPoint(1)=data(N1+j+4): startPoint(2)=data(N1+j+5) endPoint(0)=data(N1+j): endPoint(1)=data(N1+j+1): endPoint(2)=data(N1+j+2) Set Line(1) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) startPoint(0)=data(j+3): startPoint(1)=data(j+4): startPoint(2)=data(j+5) endPoint(0)=data(N1+j): endPoint(1)=data(N1+j+1): endPoint(2)=data(N1+j+2) Set Line(2) = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) regionObj = ThisDrawing.ModelSpace.AddRegion(Line) Set solidObj = ThisDrawing.ModelSpace.AddExtrudedSolid(regionObj(0), h, Angle) Next j
ZoomAll End Sub
Особенностью построения твердотельной модели является использование треугольных областей (Region). Объект область (Region) в AutoCAD подвергается действию метода - выдавливание .AddExtrudedSolid(regionObj(0), h, Angle), в результате действия которого получается пространственная фигура – призма. Область формируется в AutoCAD только как плоская фигура, поэтому для создания областей использованы треугольники, являющиеся плоскими фигурами по определению.
6-й этап – создание расчетных программ в программе Mathcad: Расчет геометрических параметров плуга реализует методику Летошнева [Летошнев М.Н. Сельскохозяйственные машины. М., Госсельхозиздат, 1955], позволяющую по заданным глубине и ширине пласта, углу установки плуга и углу врезания лемеха в почву определить координаты поперечного контура отвала и направляющей цилиндроидальной кривой. Расчеты включают в себя: а) расчет двумерных координат характерных точек поперечного контура отвала (вершин и точек сопряжения), координат центров и радиусов дуг контура, позволяющих получить лобовый контур плуга (проекцию на плоскость, перпендикулярную направлению движения); б) расчет двумерных координат направляющей кривой поверхности плуга; в) расчет пространственных координат контура отвала.
Использование VBA-приложения. Для выполнения созданной программы следует: - открыть файл-чертеж AutoCAD с созданной программой; - выбрать команду меню «ToolsMacroMacros», указать макрос Start_01 и нажать кнопку «Выполнить» (Run); - в поля открывшейся формы следует ввести исходные данные и нажать кнопку «Ввод данных». Если данные введены некорректно, на экране появится соответствующее сообщение с предложением исправить ввод данных. При попытке выполнить расчеты или построения без ввода данных программа вернет сообщение, что файл данных не создан; - после ввода данных следует последовательно выполнить расчетные программы в Mathcad. Об успешном выполнении программ будет сообщать информационная форма; - после выполненных расчетов можно выполнять построения модели или лобового сечения на выбор. Результат построения модели представлены на рис.17; - для определения массогабаритных свойств полученной твердотельной модели следует воспользоваться командой AutoCAD MASSPROP, для чего: 1. Выбрать изометрическое изображение объекта на экране командой: View3D ViewsSW Isometric. Уменьшить изображение модели так, чтобы вся модель была видна в поле экрана.
2. Выбрать в меню команду ToolsInquiryMass Properties и в ответ на приглашение указать объекты рамкой указать всю модель (следует учесть, что модель состоит из «набора» призм с треугольным основанием).
Рис.17. Модель отвала плуга
3. Получить перечень массовых, геометрических и инерционных характеристик объекта: массу, объем, центр масс, моменты инерции, центробежные моменты, радиусы инерции, центральные моменты.
Задания на разработку: 1. Разработать VBA-приложение создания твердотельной модели шатровой поверхности: - крыши в виде полуцилиндра (ангар); - крыши в виде параболоида (седловидная поверхность).
Построение твердотельной модели пружины в SolidWorks 2001. САПР AutoCAD не относится к «удобным» системам трехмерного параметрического моделирования. Большим недостатком AutoCAD можно считать отсутствие менеджера построений, позволяющего отследить этапы создания модели и внести в них изменения. Ведь один и тот же объект разные конструкторы разрабатывают по разному. САПР SolidWorks 2001 является простой и удобной системой, позволяющей строить параметрические модели деталей и сборочных единиц, при этом построениями можно управлять из VBA. SolidWorks имеет свой редактор Visual Basic и позволяет сохранять процедуры VBA в файлах специального типа, которые можно выполнять с помощью команды «СервисМакросВыполнить», а также внести изменения в существующие процедуры командой «СервисМакросИзменить». Процедуры VBA, управляющие построениями в SolidWorks, можно создавать и в других приложениях, например Microsoft Excel. Задача – разработать VBA-приложение, позволяющее создавать твердотельную модель пружины по следующим исходным данным: Радиус пружины, м Шаг пружины, м Конусность, град Количество витков Радиус прутка, м VBA-приложение может быть разработано в среде Visual Basic for Microsoft Excel. В простейшем виде проект может включать в себя: исходные данные на Листе книги Microsoft Excel и процедуры построения, размещенные в модуле VBA. Ниже приведем текст процедуры построения модели пружины при условии, что программа SolidWorks активна и создан объект «деталь»: Область описания переменных Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long Dim Annotation As Object Dim Gtol As Object Dim DatumTag As Object Dim FeatureData As Object Dim Feature As Object Dim Component As Object Процедура построения модели Sub Пружина_модель() задание констант alfa0 = 1.570796326795 'угол начала спирали, рад fi = 0.5235987755983 'угол поворота плоскости круга тела спирали, рад
чтение исходных данных из ячеек активного листа книги Excel
R = Cells(6, 4) радиус пружины, м Step = Cells(7, 4) высота витка, м Nstep = Cells(10, 4) количество витков gammaGrad = Cells(8, 4) угол конусности пружины, град rPrutka = Cells(9, 4) радиус прутка
gamma = gammaGrad * 3.14159265358979 / 180
связь с активным объектом-приложением SolidWorks Set swApp = CreateObject("SldWorks.Application")
связь объектом-деталь Set Part = swApp.ActiveDoc
Построение пространственной спирали, которая послужит направляющей для создания модели пружины выбор плоскости построения эскиза Part.SelectByID "Спереди", "PLANE", 0, 0, 0
создание эскиза Part.InsertSketch
вычерчивание окружности радиусом R с координатами центра 0,0 Part.CreateCircle 0, 0, 0, R, 0, 0
выход из эскиза Part.ClearSelection Part.InsertSketch
создание объекта спираль Part.InsertHelix 0, 1, 1, 0, 0, 0.2, Step, Nstep, gamma, alfa0
Построение окружности, которая послужит основанием для формирования пружины (радиус окружности = радиусу прутка пружины) выбор плоскости «Справа» Part.SelectByID "Справа", "PLANE", 0, 0, 0
создание эскиза в выбранной плоскости Part.InsertSketch создание осевой линии Part.CreateLine2(0, 0.05, 0, 0, -0.05, 0).ConstructionGeometry = True Part.SetPickMode Part.ClearSelection Part.InsertSketch
Создание плоскости, повернутой относительно созданной осевой линии на угол fi относительно плоскости «Справа» Part.SelectByID "Справа", "PLANE", 0, 0, 0 Part.AndSelectByID "Линия1@Эскиз2", "EXTSKETCHSEGMENT", 0, -0.01092507630943, 0 Part.CreatePlaneAtAngle fi, 0
Создание эскиза и построение окружности на созданной плоскости Part.InsertSketch Part.CreateCircle 0, R, 0, 0, R - rPrutka, 0 Part.ClearSelection Part.InsertSketch
Построение модели пружины Выбор окружности как основы «выдавливания» пружины по направлению Part.SelectByMark "Эскиз3", "SKETCH", 0, 0, 0, 1 Выбор спирали как направления для выдавливания Part.AndSelectByMark "Спираль1", "REFERENCECURVES", -0.01708010583218, -0.0375323476687, 0.1565494011601, 4 Выдавливание (экструдирование) пружины Part.InsertProtrusionSwept4 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 Скрытие объектов построения Part.SelectByID "Плоскость1", "PLANE", 0, 0, 0 Part.UnBlankRefGeom Part.SelectByID "Эскиз2", "SKETCH", 0, 0, 0 Part.BlankSketch Part.SelectByID "Плоскость1", "PLANE", 0, 0, 0 Part.BlankRefGeom Part.SelectByID "Эскиз1", "SKETCH", 0, 0, 0 Part.BlankSketch Вывод на экран всей модели пружины в изометрии Part.ViewZoomtofit2 End Sub
Использование VBA-приложения. Для выполнения созданной программы следует: - запустить на выполнение программу SolidWorks, создать в ней новую деталь; - открыть книгу Excel c исходными данными построения и процедурой построения, внести в исходные данные необходимые изменения; - запустить на выполнение процедуру построения, перейти в приложение SolidWorks, в котором наблюдать результат действия процедуры (см. рис.18).
Задания на разработку: 1. Разработать VBA-приложение создания твердотельной модели : - прямозубой рейки; - маховика.
Литература 1. Хауз Рон. Использование AutoCAD 2000. Специальное издание: Пер. с англ.: Уч.пос. – М.: Издательский дом «Вильямс», 2000. – 832с. 2. Ткаченко В.Б. ActiveX Automations для AutoCAD. www.cad.dp.ua.
|
||||||||||||||||
Последнее обновление 07.02.11 15:20 |