словами, події в системі виникають в результаті дій користувача, даної або іншої програми або дій самої операційної системи. На кожну можливу і цікавить нас подію в програмі повинен бути описаний відповідний відгук, інакше програма не зможе відреагувати на дану подію і воно залишається безмовним. В цілому суть програмування на мові VBA полягає в створенні коду програм (методів), які генерують необхідні відгуки на події, що цікавлять нас.
6.3 Редактор Visual Basic
Редактор VBA використовується для створення нових модулів, редагування вже створених модулів, створення і редагування коду макроса, створенню вікон користувача і для рішення багатьох інших задач, які відносяться до написання і обслуговування програм на VBA. Таким чином, щоб подивитися модулі чи код, який вони містять необхідно запустити редактор VBA.
Запустити редактор VBA в більшості підтримуючих дану мову програмування додатків можна кліканням на кнопці редактор Visual Basic(Visual Basic Editor) або вибором команди меню Tools->Macro-> Visual Basic Editor, або натисканням клавіш Allt+F11.
Рис. 2 Загальний вигляд редактора VBA
6 Розробка програми
Для спрощення розробки програми на VBA обєєкт поділемо на елементорні частини. Кожна частина обєєкту будується у окремій процедурі програми. Пізніше звертаючись до цих процедур побудуємо логічні блоки фігури (частини), і кожен із них помістимо у окремий слой згідно завдання.
Для побудови першої частини заданого обєєкта я розділив його на пєять кубів – один основний, а решта додаткові і чотири додоткові циліндри з метою щоб ці додаткові обєєкти відняти від основного і одержати необхідну фігуру.
Оголошення будь-якого тривимірного обєєкту для побудови його у AutoCAD здійснюється наступним чином: Dim <назва обєєкта> As Acad3DSolid.
Щоб побудувати обєєкт використовуємо команду Set. Наприклад для побудови циліндра запишемо такий код програми:
Set cylinderObj = ThisDrawing.ModelSpace.AddCylinder(center, radius, height)
Процедура побудови куба має наступний вигляд:
Sub AddBox2()
Dim length As Double, width As Double, height As Double
Dim center(0 To 2) As Double
center(0) = 17.5: center(1) = 17.5: center(2) = -13.5
length = 15#: width = 15: height = 15#
Set box2Obj = ThisDrawing.ModelSpace.AddBox(center, length, width, height)
End Sub
Команду повороту Rotate3D здійснюємо наступним чином:
Sub AddCylinderRotate()
Dim radius As Double
Dim center(0 To 2) As Double
Dim height As Double
center(0) = -13.5: center(1) = 17.5: center(2) = 0#
radius = 3# height = 50#
Set cylinderObj = ThisDrawing.ModelSpace.AddCylinder(center, radius, height)
Dim rotatePt1(0 To 2) As Double
Dim rotatePt2(0 To 2) As Double
Dim rotateAngle As Double
Dim rotateAngl As Double
rotatePt1(0) = 0: rotatePt1(1) = 4: rotatePt1(2) = 0
rotatePt2(0) = 0: rotatePt2(1) = 0: rotatePt2(2) = 0
rotateAngle = 90: rotateAngl = -90: rotateAng = 180:
rotateAngle = rotateAngle * 3.141592 / 180#
rotateAngl = rotateAngl * 3.141592 / 180#
rotateAng = rotateAng * 3.141592 / 180#
cylinderObj.Rotate3D rotatePt1, rotatePt2, rotateAngle
End Sub
Для віднімання двох обєєктів використаємо команду Subtract. Дана команда програмується наступним чином:
boxObj.Boolean acSubtraction, box2Obj
де boxObj – основний обєєкт, який і буде результатом віднімання, а box2Obj додатковий. Операцію віднімання основного проводимо і з рештою додаткових частин проводимо так само.
Врезультаті провединих операцій отримаємо частину зображену на рис.3.
Рис. 3 Перша частина побудованого обєєкту.
Створюємо окремий слой для нашого побудованого обєєкту:
Dim Blok1_Layer As AcadLayer
Set Blok1_Layer = ThisDrawing.Layers.Add("Blok1")
Зодоємо колір слою:
Dim color As AcadAcCmColor
Set color = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.16")
color.ColorIndex = 160
Blok1_Layer.TrueColor = color
Будуємо наступну частину обєєкту. Для її побудови є кілька варіанті, але я обрав на мою думку оптимальний із них.
Для цього потрібно використати команду “витягування” обєєкта, тобто будуємо в площині замкнуту основу за допомогою curves, які обєєднюємо у регіон(команда regionObj = ThisDrawing.ModelSpace.AddRegion(curves)), а потім командою ExtrudedSolid отримаємо потрібний тривимірний обєєкт рис.4:
Dim regionObj As Variant
regionObj = ThisDrawing.ModelSpace.AddRegion(curves)
Dim height As Double
Dim taperAngle As Double
height = 16
taperAngle = 0
Set Part3 = ThisDrawing.ModelSpace.AddExtrudedSolid(regionObj(0), height, taperAngle)
Рис.4 Побудований обєєкт командою ExtrudedSolid
Наступну частинку будуємо шляхом прокручування основи відносно заданої осі командою RevolvedSolid рис.5:
Dim axisPt(0 To 2) As Double
Dim axisDir(0 To 2) As Double
Dim angle As Double
axisPt(0) = 0: axisPt(1) = -1: axisPt(2) = 0
axisDir(0) = 0: axisDir(1) = 0: axisDir(2) = 1
angle = 6.3
Set Part5 = ThisDrawing.ModelSpace.AddRevolvedSolid(regionObj(0), axisPt, axisDir, angle)
Рис.5 Побудований обєєкт командою RevolvedSolid
Висновок
В даній курсовій роботі розроблено програму на Visual Basic for AutoCAD побудови тривимірної моделі у AutoCAD 2004 згідно завдання.
Проведено огляд існуючих програмних продуктів графічного моделювання. Зроблено опис основних принципів роботи AutoCAD 2004. Фігуру побудовану у тривимірному просторі візуалізовано засобами рендерингу PhotoTrace шайдером.
Перелік посилань на джерела
1. Погорелов В. AutoCAD 2005 для начинающих. – Санкт-Петербург: БВХ-Петербург, 2004. – 400с.
2. Полещук Н. Н., Савельева В. А. Самоучитель AutoCAD 2005. – Санкт-Петербург.: БХВ-Петербург, 2004. – 656 с.
3. Соколова Т. AutoCAD 2005 для студента. – Санкт-Петербург: Питер, 2005. – 320 с.
4. Слепцова Л. Д. Программирование на VBA. Самоучитель.: - М.: Издательский дом “Вильямс”, 2004. – 384 с.
5. Ткачев Д. А. AutoCAD 2005. Самоучитель. – Санкт-Петербург; Питер; Киев: Издательськая группа ВНV, 2005. – 462 с.
6. .
7. .
8. .
9. http://www.solid-edge.com.
10. http://www.render.ru.
Додаток В Текст програми
Dim boxObj As Acad3DSolid
Dim cylinderObj As Acad3DSolid
Dim Part As Acad3DSolid
Dim Part1 As Acad3DSolid
Dim Part2 As Acad3DSolid
Sub AddSliceBox()
' This code creates a box in model space.
Dim length As Double, width As Double, height As Double
Dim center(0 To 2) As Double
' Define the box
center(0) = 0#: center(1) = 0#: center(2) = 0#
length = 50#: width = 50: height = 80#
' Create the box (3DSolid) object in model space
Set boxObj = ThisDrawing.ModelSpace.AddBox(center, length, width, height)
' визначення секції
Dim slicePt1(0 To 2) As Double
Dim slicePt2(0 To 2) As