Лабораторный практикум «Автоматизация работ в 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; ToolsMacroVisual 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. Посмотреть состав включенных библиотек типов можно с помощью команды ViewObjectBrowser (см. рис.4).

 

 


 

 

 

 

 

ObjectBrowser предоставляет информацию об иерархической структуре объектов каждой подключенной библиотеки типов. На рис.4 представлены классы библиотеки Excel, выделен класс диаграмм (Charts) и члены этого класса: методы (Add, Copy, Delete, Move) и свойства: (Application – указывает принадлежность объекта приложению, Count – указывает количество объектов в коллекции, Item – указывает на свойство объекта).

Для того, чтобы создаваемое VBA-приложение могло управлять объектами, принадлежащими библиотекам типов, не включенным в среду, следует подключить эти библиотеки, используя механизм ссылок (References), реализующий технологию ActiveX.

 

Для этого следует воспользоваться командой ToolsReferences. На экране появится окно диалога References, содержащее библиотеки типов всех приложений, поддерживающих технологию ActiveX (см. рис.5).

 

 

 

Подключенные библиотеки помечены флажками. В списке следует найти необходимую библиотеку и подключить ее, установив флажок щелчком кнопки мыши. Для подключения библиотеки объектов AutoCAD следует подключить библиотеку AutoCAD Object Library. В нижней части окна References указывается место расположения этой библиотеки, например: c:\ProgramFiles\AutoCAD2000\acad.tlb.

Команды окна References позволяют устанавливать приоритет библиотек, а также отключать библиотеки от проекта.

Теперь, после подключения новой библиотеки типов, ее иерархическую структуру можно наблюдать с помощью ObjectBrowser.

В таблице 1 приведен неполный перечень свойств и методов класса линия (AcadLine).

Таблица 1.


Класс

Свойство

Метод

AcadLine

Angle, Application, Color, Delta, EndPoint, Layer, Length, LineType, StartPoint, Visible

ArrayPolar, ArrayRectangular, Copy, Delete, Mirror, Move, Rotate, ScaleEntity, Update

 

 


 

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: ToolsPreferencesAutoCAD 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; k0,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: ToolsPreferencesAutoCAD Object Library;

- в редакторе с помощью команды «ВставкаМодуль» создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» создаем процедуру, в которую заносим одну команду:

Public Sub Start_Menu() имя макроса

Menu.Show команда вывода на экран формы Menu

End Sub

Результат выполнения макроса – появление на экране формы по имени Menu. Формы с таким именем пока нет, мы ее создадим позже.

- используя панель задач Windows, вернемся в окно Microsoft Excel, выберем в контекстном меню объекта «прямоугольник» команду «Назначить макрос» и в окне диалога выбираем макрос «Start_Menu». Теперь при указании на объект «прямоугольник» мышью ее указатель принимает вид ладошки, приглашающей нажать кнопку. Нажатие кнопки мыши на объекте «прямоугольник» приведет к выполнению макроса «Start_Menu».

4-й этап – создание формы:

- в редакторе Visual Basic командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»;

- в окне свойств в графе Имя (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: ToolsPreferencesAutoCAD 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” (ToolsMacroVisual Basic Editor);

- в редакторе с помощью команды «ВставкаМодуль» (InsrtModule) создаем новый модуль VBA-проекта, а затем командой «ВставкаПроцедура» (InsertProcedure) создаем процедуру, в которую заносим одну команду:

Sub Start_01() имя макроса

Start.Show команда вывода на экран формы Start

End Sub

Результат выполнения макроса – появление на экране формы по имени Start. Формы с таким именем пока нет, мы ее создадим позже.

3-й этап – создание управляющей формы:

- в редакторе Visual Basic командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»;

- в окне свойств в графе Имя (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 командой «ВставкаФорма» (InsertUserForm) создаем объект «форма»;

- в окне свойств в графе Имя (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 с созданной программой;

- выбрать команду меню «ToolsMacroMacros», указать макрос Start_01 и нажать кнопку «Выполнить» (Run);

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

- после ввода данных следует последовательно выполнить расчетные программы в Mathcad. Об успешном выполнении программ будет сообщать информационная форма;

- после выполненных расчетов можно выполнять построения модели или лобового сечения на выбор. Результат построения модели представлены на рис.17;

- для определения массогабаритных свойств полученной твердотельной модели следует воспользоваться командой AutoCAD MASSPROP, для чего:

1. Выбрать изометрическое изображение объекта на экране командой: View3D ViewsSW Isometric. Уменьшить изображение модели так, чтобы вся модель была видна в поле экрана.

 

 

2. Выбрать в меню команду ToolsInquiryMass 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).

 

 

 

 

 

 

Радиус пружины, м

0,01

Высота витка, м

0,005

Количество витков

5

Конусность, град

5

Радиус прутка, м

0,0015

 

Задания на разработку:

1. Разработать VBA-приложение создания твердотельной модели :

- прямозубой рейки;

- маховика.

 

 

 

 

 

 

Литература

1. Хауз Рон. Использование AutoCAD 2000. Специальное издание: Пер. с англ.: Уч.пос. – М.: Издательский дом «Вильямс», 2000. – 832с.

2. Ткаченко В.Б. ActiveX Automations для AutoCAD. www.cad.dp.ua.

 

Последнее обновление 07.02.11 15:20