Лабораторный практикум «Автоматизация работ в AutoCAD средствами Visual Basic for Applications» для студентов «Механизация сельского хозяйства» |
Добавил(а) Administrator |
25.01.11 13:57 |
Страница 13 из 17
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
|
Последнее обновление 07.02.11 15:20 |