Екатеринбург
2013
УДК 681.3
Подготовлено кафедрой
2
“ ИНФОРМАЦИОННЫЕ СИСТЕМЫ И АВТОМАТИЗАЦИЯ
ПРОЕКТИРОВАНИЯ ”
© УГТУ-УПИ,2013
Введение
4
Сохраним модель в файле Соparametric.SLDPRT
5
ListBox1.ColumnCount = 3
'Заполнение массива
MyArray(1, 0) = 100
MyArray(1, 1) = 120
MyArray(1, 2) = 150
MyArray(2, 0) = 200
MyArray(2, 1) = 220
MyArray(2, 2) = 250
MyArray(3, 0) = 300
MyArray(3, 1) = 320
MyArray(3, 2) = 350
MyArray(4, 0) = 400
MyArray(4, 1) = 420
MyArray(4, 2) = 450
MyArray(5, 0) = 500
MyArray(5, 1) = 520
MyArray(5, 2) = 550
MyArray(6, 0) = 600
MyArray(6, 1) = 620
MyArray(6, 2) = 650
ListBox1.List = MyArray
End Sub
Dim Part As Object ' Define variable used to hold the part object
6
Part.Parameter("D2@Sketch1").SystemValue = YValue_Passed / 1000
Part.Parameter("D1@Extrude1").SystemValue = ZValue_Passed / 1000
End Sub
iii = 0
iii = ListBox1.ListIndex
'MsgBox iii
NN = MyArray(iii, 0)
LL = MyArray(iii, 1)
HH = MyArray(iii, 2)
NN = Val(NN)
LL = Val(LL)
HH = Val(HH)
'MsgBox iii
'MsgBox NN
'MsgBox LL
'MsgBox HH
XValue = LL
YValue = HH
ZValue = NN
Call ParametricSub(XValue, YValue, ZValue)
8
Рис.5. Выбор размеров объекта
100,120,150
200,220,250
300,320,350
400,420,450
500,520,550
600,620,650
Здесь в каждой строке представлены данные о длине, ширине и высоте рассматриваемой детали.
9
2. Затем создадим макрос Macpar2.swp и в нем создадим форму UserForm1(Рис.6).
ListBox1.ColumnCount = 3
10
'Определение размерности массива
i=0
Open "C:\vlad\Solid\Basic\param_dan_file\Zapicw.txt" For Input As #2
Do While Not EOF(2)
Input #2, vr1, vr2, vr3
i=i+1
Loop
Close #2
ReDim MyArray(i, 3)
'Заполнение массива из файла данных Zapicw.txt
i=0
Open "C:\vlad\Solid\Basic\param_dan_file\Zapicw.txt" For Input As #2
Do While Not EOF(2)
Input #2, MyArray(i, 0), MyArray(i, 1), MyArray(i, 2)
i=i+1
Loop
Close #2
ListBox1.List = MyArray
End Sub
Dim Part As Object ' Define variable used to hold the part object
11
Part.Parameter("D1@Extrude1").SystemValue = ZValue_Passed / 1000
End Sub
iii = 0
iii = ListBox1.ListIndex
'MsgBox iii
NN = MyArray(iii, 0)
LL = MyArray(iii, 1)
HH = MyArray(iii, 2)
NN = Val(NN)
LL = Val(LL)
HH = Val(HH)
'MsgBox iii
'MsgBox NN
'MsgBox LL
'MsgBox HH
XValue = LL
YValue = HH
ZValue = NN
Call ParametricSub(XValue, YValue, ZValue)
6. Запустите макрос
13
Рис.7. Выбор размеров объекта
14
Рассмотрим примеры формирования макросов по второму варианту на примерах построения
елей деталей.
Модель штампа в основном строится методами вытяжки и выреза в преобразовании 2D в 3D. Это
ит, что для построения объемного элемента сначала выбирается плоскость, на ней строится эскиз,
м этот эскиз вытягивается на определенное расстояние, образуя объемный конструктивный
мент.
Построение модели начинается с создания кубика.
Построение кубика использует следующие функции:
SketchRectangle(val1,val2,z1,val3,val4,z2)
где
val1 – координата X левого верхнего угла;
(double)val2 - координата Y левого верхнего угла;
(double)z2 - координата Z левого верхнего угла;
(double)val3 – координата X правого нижнего угла;
(double)val4 - координата Y правого нижнего угла;
(double)z2 - координата Z правого нижнего угла.
FeatureExtrusion2(sd,flip,dir,t1,t2,d1,d2,dchk1, dchk2,ddir1,
ddir2,dang1,dang2,offsetReverse1, offsetReverse2,translateSurface1,
translateSurface2,merge,useFeatScope,useAutoSelect,t0,startOffset,,flipStartOffset)
где
15
(double)dang2- значение угла для второго направления;
(VARIANT_BOOL)offsetReverse1- TRUE – реверс направления вытягивания в первом
направлении, FALSE – не изменять направление вытягивания;
(VARIANT_BOOL)offsetReverse2- TRUE – реверс направления вытягивания во втором
направлении, FALSE – не изменять направление вытягивания;
(VARIANT_BOOL) translateSurface1 – TRUE для отсчета глубины вытяжки от
противоположной плоскости в первом направлении, FALSE- от текущей плоскости;
FeatureFillet
FeatureFillet(options,r1,ftyp,overFlowType,radii,setBackDistances,pointRadiusArray)
Где
FeatureCut
16
Создает вырез по эскизу на заданную глубину
FeatureCut(sd,flip,dir,t1,t2,d1,d2,dchk1, dchk2,ddir1,ddir2,dang1,dang2,offsetReverse1,
offsetReverse2,translateSurface1, translateSurface2,normalCut,useFeatScope,useAutoSelect)
CreateCircle
CreateCircle2(xc,yc,zc,xp,yp,zp)
где
(double) xc,yc,zc – координаты центра окружности;
(double) xp,yp,zp – координаты края окружностию.
CreateLine2
CreateLine2(xStart,yStart,zStart,xEnd,yEnd,zEnd)
где
(double)xStart,yStart,zStart – координаты начальной точки;
(double)xEnd,yEnd,zEnd – координаты конечной точки.
CreatePlaneAtOffset3
CreatePlaneAtOffset3(val,flipDir,autoSize)
где
17
(VARIANT_BOOL) autoSize- TRUE – для автоматического задания размеров.
FeatureRevolveCut
FeatureRevolveCut(angle,revolveDir, angle2,revType,options,useFeatScope,useAutoSel)
Где
18
Рис.8. Форма макроса
Set swApp = _
Application.SldWorks
B = Val(TextBoxB.Text)
L = Val(TextBoxL.Text)
H = Val(TextBoxH.Text)
B1 = Val(TextBoxB1.Text)
BB = Val(TextBoxBB.Text)
h1 = Val(TextBoxh1.Text)
i1 = Val(TextBoxi1.Text)
b3 = Val(TextBoxb3.Text)
r3 = Val(TextBoxr3.Text)
r = Val(TextBoxr.Text)
h3 = Val(TextBoxh3.Text)
alfa = Atn((B1 - BB) / h1)
'Построение кубика
vSkLines = Part.SketchManager.CreateCornerRectangle(0, 0, 0, B, L, 0)
Part.ClearSelection2 True
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Эскиз1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Dim myFeature As Object
'Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 6, 0, H, H, False,
False, False, False, 1.74532925199433E-02, 1.74532925199433E-02, False, False, False, False, True,
True, True, 0, 0, False)
Part.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, H, 0.01, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 1, 1, 1, 0, 0, False
Part.SelectionManager.EnableContourSelection = False
'Боковые вырезы
20
'boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H / 2, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SketchRectangle 0, 0, 0, (B - B1) / 2, L, 0, 1
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0,
Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, h1, True, False, True, False, alfa, alfa,
False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
'boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.SketchRectangle B, 0, 0, B - ((B - B1) / 2), L, 0, 1
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0,
Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, True, 0, Nothing,
0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, h1, True, False, True, False, alfa, alfa,
False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
'boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
'boolstatus = Part.Extension.SelectByID2("", "FACE", 0, L, 0, False, 0, Nothing, 0)
'Боковые отверстия
'Скругления
22
Part.FeatureManager.FeatureCut True, False, False, 0, 0, L + 10, 0.01, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
Part.SketchRectangle 0, 0, 0, 0, 0, 0, 1
H = -H
Part.CreateLine2 B / 2, H - 3, 0, B / 2 + 20, H - 3, 0
Part.CreateLine2 B / 2 + 20, H - 3, 0, B / 2 + 20, H + 8, 0
Part.CreateLine2 B / 2 + 20, H + 8, 0, B / 2 + 14, H + 8, 0
Part.CreateLine2 B / 2 + 14, H + 8, 0, B / 2 + 14, H + 13, 0
Part.CreateLine2 B / 2 + 14, H + 13, 0, B / 2, H + 13, 0
Part.CreateLine2 B / 2, H + 13, 0, B / 2, H - 3, 0
Part.CreateLine2(B / 2, H - 20, 0, B / 2, H + 13, 0).ConstructionGeometry = True
'Вращение контура
boolstatus = Part.Extension.SelectByID2("Эскиз9", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureRevolveCut 6.28318530718, False, 0, 0, 0, 1, 1
Part.ClearSelection2 True
23
End Sub
24
'Построение кубика
Part.SketchRectangle 0, 0, 0, B, L, 0, 1
'Боковые вырезы
25
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, True, 0,
Nothing, 0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, h1, True, False, True, False, alfa, alfa,
False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("", "FACE", 0, L, 0, False, 0, Nothing, 0)
'Боковые отверстия
'Скругления
boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, H / 2, False, 0, Nothing, 0)
Part.CreateCircle ((B + BB) / 2), h1, 0, ((B + BB) / 2), h1 + r, 0
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0,
Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, L + 10, 0.01, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
'Вращение контура
boolstatus = Part.Extension.SelectByID2("Sketch9", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureRevolveCut 6.28318530718, False, 0, 0, 0, 1, 1
27
'Part.SelectionManager.EnableContourSelection = 0
Part.ClearSelection2 True
End Sub
28
'Построение кубика
Part.SketchRectangle 0, 0, 0, B, L, 0, 1
'Боковые вырезы
29
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0, 0, 0, True, 0,
Nothing, 0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, h1, True, False, True, False, alfa, alfa,
False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("", "FACE", 0, L, 0, False, 0, Nothing, 0)
'Боковые отверстия
'Скругления
boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, H / 2, False, 0, Nothing, 0)
Part.CreateCircle ((B + BB) / 2), h1, 0, ((B + BB) / 2), h1 + r, 0
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0,
Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, L + 10, 0.01, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
'Вращение контура
boolstatus = Part.Extension.SelectByID2("Эскиз9", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureRevolveCut 6.28318530718, False, 0, 0, 0, 1, 1
31
''Part.SelectionManager.EnableContourSelection = 0
Part.ClearSelection2 True
End Sub
32
alfa = Atn((B1 - BB) / h1)
'Ïîñòðîåíèå êóáèêà
Part.SketchRectangle 0, 0, 0, B, L, 0, 1
'Áîêîâûå âûðåçû
'Áîêîâûå îòâåðñòèÿ
Part.ClearSelection2 True
End Sub
35
Текст для 16 версии
Set swApp = _
Application.SldWorks
'Построение кубика
Part.SketchRectangle 0, 0, 0, B, L, 0, 1
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0,
0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
37
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
Part.FeatureManager.FeatureExtrusion2 True, False, False, 0, 0, H, 0.01, False
False, False, False, 0.01745329251994, 0.01745329251994, False, False, False,
False, 1, 1, 1, 0, 0, False
Part.SelectionManager.EnableContourSelection = 0
'Боковые вырезы
38
boolstatus = Part.Extension.SelectByID2("Line4", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, h1, True, False, T
False, alfa, alfa, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0,
Nothing, 0)
boolstatus = Part.Extension.SelectByID2("", "FACE", 0, L, 0, False, 0, Nothin
0)
'Боковые отверстия
39
boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L, H / 2, False, 0,
Nothing, 0)
Part.CreateCircle B / 2, b3, 0, B / 2, b3 - r3, 0
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0,
False, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, h3, 0.01, False, False
False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, 0
1
Part.SelectionManager.EnableContourSelection = 0
'Скругления
boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, H / 2, False, 0,
Nothing, 0)
Part.CreateCircle ((B + BB) / 2), h1, 0, ((B + BB) / 2), h1 + r, 0
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0,
False, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, L + 10, 0.01, False,
False, False, False, 0.01745329251994, 0.01745329251994, False, False, False,
False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
40
boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, H / 2, False, 0,
Nothing, 0)
Part.CreateCircle ((B - BB) / 2), h1, 0, ((B - BB) / 2), h1 + r, 0
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0,
False, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, L + 10, 0.01, False,
False, False, False, 0.01745329251994, 0.01745329251994, False, False, False,
False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
'Вращение контура
boolstatus = Part.Extension.SelectByID2("Эскиз9", "SKETCH", 0, 0, 0, False
Nothing, 0)
Part.FeatureManager.FeatureRevolveCut 6.28318530718, False, 0, 0, 0, 1, 1
41
''Part.SelectionManager.EnableContourSelection = 0
Part.ClearSelection2 True
Синтаксис:
olstatus = Part.Extension.SelectByID2(Name,Type,X,Y,Z,Append,Mark,Callout,
ectOption)
me – имя выделяемого объекта, например “Спереди” – плоскость; этот атрибут является необязатель
жет заменяться пустыми кавычками если неизвестно название элемента;
EDGE – грань;
FACE – кромка;
PLANE - плоскость;
AXIS – ось;
DATUMPOINT – точка;
43
pend – имеет одно из двух значений: True –используется, когда элемент выделен для снятия
еления, False - наоборот для выделения невыделенного элемента.При значении False снимаютя
выделения, назначенные ранее и выделяется элемент.
olstatus = Part.Extension.SelectByID2(“Спереди”,”PLANE”,0,0,0,False,0,Nothing,0)
нтаксис:
нтаксис:
Синтаксис
oolstatus = Part.CreateTangentArc2(p1x,p1y,p1z,p2x,p2y,p2z,arcTypeIn)
где
p1x,p1y,p1z-начало дуги;
p2x,p2y,p2z- конец дуги;
arcTypeIn – место положение дуги, может принимать следующие значения:
swForward
swLeft
swBack
swRight
После создания того или иного элемента необходимо снять все выделения с помощью команды:
art.CleareSelection2 True
Пример1. Создадим макрос, отрисовывающий эскиз, который будет основой для трехмерного
лемента по траектории.
m swApp As Object
m Part As Object
m SelMgr As Object
m boolstatus As Boolean
m longstatus As Long, Longwarnings As Long
m Feature As Object
b main()
Set swApp = Application.SldWorks
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
45
Part.InsertSketch2 True
oolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.CreateLine2 0, 0, 0, 0, -0.22, 0
Part.ClearSelection2 True
Part.CreateTangentArc2 0, -0.22, 0, -0.025, -0.22, 0, 1
Part.ClearSelection2 True
Part.CreateLine2 -0.025, -0.22, 0, -0.025, -0.16, 0
Part.ClearSelection2 True
Part.CreateTangentArc2 -0.025, -0.16, 0, -0.0125, -0.147560912591, 0, 1
Part.ClearSelection2 True
Part.InsertSketch2 True
boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
oolstatus = Part.Extension.SelectByID2("Сверху ", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircle 0, 0, 0, 0, 0.015 / 2, 0
Part.ClearSelection2 True
d Sub
Вспомогательная геометрия
46
Вспомогательная плоскость строится на расстоянии от выделенной плоскости с использованием
анды CreatePlaneAtOffset3(val,flipDir,autoSize)
де
Пример2:
помогательная ось строится на пересечении двух плоскостей, при этом используется команда
.InsertAxis2 True
Пример3:
Работа с 3D объектами
Существуют разные способы преобразования эскиза в 3D модель. К одному из них относится вытяги
раектории. Для этого необходимо создать эскиз пофиля и
скиз траектории.
Эта операция выполняется командой InsertProtrusionSweept3, перед ее использованием следует выде
з профиля и траектории.
Добавим в текст макроса примера1 введенный эскиз.
ример4:
m swApp As Object
m Part As Object
m SelMgr As Object
m boolstatus As Boolean
m longstatus As Long, Longwarnings As Long
m Feature As Object
b main()
Set swApp = Application.SldWorks
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
47
Part.InsertSketch2 True
oolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.CreateLine2 0, 0, 0, 0, -0.22, 0
Part.ClearSelection2 True
Part.CreateTangentArc2 0, -0.22, 0, -0.025, -0.22, 0, 1
Part.ClearSelection2 True
Part.CreateLine2 -0.025, -0.22, 0, -0.025, -0.16, 0
Part.ClearSelection2 True
Part.CreateTangentArc2 -0.025, -0.16, 0, -0.0125, -0.147560912591, 0, 1
Part.ClearSelection2 True
Part.InsertSketch2 True
art.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
oolstatus = Part.Extension.SelectByID2("Сверху ", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircle 0, 0, 0, 0, 0.015 / 2, 0
Part.ClearSelection2 True
Part.ClearSelection2 True
olstatus = Part.Extension.SelectByID2("Эскиз2", "SKETCH", 0.007438434637666, 9.590047659801E-04,
1, Nothing, 0)
olstatus = Part.Extension.SelectByID2("Эскиз 1", "SKETCH", 0, -0.1170332174933, 0, True, 4, Nothing,
m myFeature As Object
myFeature = Part.FeatureManager.InsertProtrusionSwept3(False, False, 0, False, False, 0, 0, False, 0, 0, 0,
True, True, 0, True)
d Sub
48
Рис.11 Модель детали Ручка
нтаксис:
atureCut ( sd, flip, dir, t1, t2, d1, d2, dchk1, dchk2, ddir1, ddir2, dang1, dang2, offsetReverse1, offsetRevers
ateSurface1, translateSurface2, normalCut, useFeatScope, useAutoSelect )
нтаксис:
ример5:
ub main()
D = 260
H = 55
1 = 200
D2 = 50
D3 = 150
Dm = 13
m1 = 19
Hm = 25
H1 = 15
et swApp = Application.SldWorks
et Part = swApp.ActiveDoc
et SelMgr = Part.SelectionManager
art.InsertSketch2 True
boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0.003457473309609, 0, False, 0, Nothin
Part.ClearSelection2 True
Part.CreateCircle 0, 0, 0, D / (2 * 1000), 0, 0
Part.ClearSelection2 True
'Dim myFeature As Object
51
'Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, True, 0, 0, H, 0, False, False, False
e, 0, 0, False, False, False, False, 1, 1, 1, 0, 0, False)
'Part.SelectionManager.EnableContourSelection = False
Part.FeatureManager.FeatureExtrusion2 True, False, True, 0, 0, H / 1000, 0, False, False, False, False, 0, 0
e, False, False, False, 1, 1, 1, 0, 0, False
'Выполнение отверстия
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircleByRadius2 D3 / (2 * 1000), 0, 0, Dm / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H / 1000, 0, False, False, False, False, 0, 0, False
e, False, False, 0, 1, 1
'Ось через пересечение плоскостей
boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
Part.InsertAxis2 True
'Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, D2 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, (Hm + 0.005) / 1000, 0, False, False, False, False
alse, False, False, False, 0, 1, 1
'Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, 0.025 / 2
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H / 1000, 0, False, False, False, False, 0, 0, False
e, False, False, 0, 1, 1
'Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, d1 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, 0.005, 0, False, False, False, False, 0, 0, False, F
e, False, 0, 1, 1
'Выполнение отверстия
52
Part.InsertSketch2 True
boolstatus = Part.Extension.SelectByID2("", "FACE", 0, 0, -H, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.CreateCircleByRadius2 D3 / (2 * 1000), 0, 0, dm1 / (2 * 1000)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H1 / 1000, 0, False, False, False, False, 0, 0, Fals
e, False, False, 0, 1, 1
nd Sub
53
Дополнительные функции для преобразования 3D объектов
Синтаксис:
где
m swApp As Object
m Part As Object
m SelMgr As Object
m boolstatus As Boolean
m longstatus As Long, Longwarnings As Long
m Feature As Object
m D, H, D3, Dm, D2, Hm, H1, d1, dm1 As Double
nst Pi = 3.141592654
b main()
= 260
= 55
= 200
= 50
= 150
m = 13
1 = 19
54
m = 25
= 15
swApp = Application.SldWorks
Part = swApp.ActiveDoc
SelMgr = Part.SelectionManager
rt.InsertSketch2 True
oolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0.003457473309609, 0, False, 0, Nothing
Part.ClearSelection2 True
Part.CreateCircle 0, 0, 0, D / (2 * 1000), 0, 0
Part.ClearSelection2 True
Dim myFeature As Object
Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, True, 0, 0, H, 0, False, False, False, F
alse, False, False, False, 1, 1, 1, 0, 0, False)
Part.SelectionManager.EnableContourSelection = False
Part.FeatureManager.FeatureExtrusion2 True, False, True, 0, 0, H / 1000, 0, False, False, False, False, 0, 0,
False, False, 1, 1, 1, 0, 0, False
Выполнение отверстия
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircleByRadius2 D3 / (2 * 1000), 0, 0, Dm / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H / 1000, 0, False, False, False, False, 0, 0, False,
False, 0, 1, 1
Ось через пересечение плоскостей
boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
Part.InsertAxis2 True
'Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, D2 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, (Hm + 0.005) / 1000, 0, False, False, False, False,
False, False, False, 0, 1, 1
Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, 0.025 / 2
55
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H / 1000, 0, False, False, False, False, 0, 0, False,
False, 0, 1, 1
'Выполнение отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, d1 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, 0.005, 0, False, False, False, False, 0, 0, False, Fal
False, 0, 1, 1
'Выполнение отверстия
Part.InsertSketch2 True
boolstatus = Part.Extension.SelectByID2("", "FACE", 0, 0, -H, False, 0, Nothing, 0)
Part.ClearSelection2 True
Part.CreateCircleByRadius2 D3 / (2 * 1000), 0, 0, dm1 / (2 * 1000)
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, False, 0, 0, H1 / 1000, 0, False, False, False, False, 0, 0, False
False, False, 0, 1, 1
d Sub
56
Рис.13. Разрез детали Кольцо
Рассмотрим набор команд, необходимый для программного создания новых документов определенн
па и дальнейшего их сохранения.
Для создания документа используется команда NewDocument
Синтаксис:
где
templateName – параметр, указывающий путь к файлу, часто это
swDwgPaperA3size
swDwgPaperA2size
swDwgPaperA1size
57
swDwgPaperA0size
При работе с несколькими открытыми документами для переключения между ними указывается
манда swap.ActivateDoc2. Эта команда используется для задания имени документа, используемое
утри SolidWorks.
Синтаксис:
где
name – имя документа для активизации или назначенное имя, если документ был только что
ан;
Синтаксис:
где
saveAsCopy – сохранение документа под новым именем без замены текущего имени;
silent – TRUE, если вы хотите избежать сообщений об ошибках, FALSE – в противном случае.
58
Приведем пример макроса, в котором создается деталь под именем Деталь и сохраняется под
нем vrem1. SLDPRT.
Пример 6.
Const Pi = 3.141592654
Sub main()
D = 260
H = 55
d1 = 200
D2 = 50
D3 = 150
Dm = 13
dm1 = 19
Hm = 25
H1 = 15
59
swApp.ActivateDoc2 "Деталь3", False, longstatus
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircle 0, 0, 0, D / (2 * 1000), 0, 0
Part.ClearSelection2 True
'Part.SelectionManager.EnableContourSelection = False
'Выполнение отверстия
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.ClearSelection2 True
60
boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
Part.InsertAxis2 True
'Создание отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, D2 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, (Hm + 0.005) / 1000, 0, False, False, False,
e, 0, 0, False, False, False, False, 0, 1, 1
'Создание отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, 0.025 / 2
Part.ClearSelection2 True
'Создание отверстия
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, d1 / (2 * 1000)
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 0, 0, 0.005, 0, False, False, False, False, 0, 0, False,
e, False, False, 0, 1, 1
'Создание отверстия
61
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.ClearSelection2 True
'Part.InsertCutSurface False, 0
'longstatus =
SaveAs3("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vrem1.SLDPRT", 0, 2)
Part.SaveAs3 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vrem1.SLDPRT", 0, 2
End Sub
62
Для создания чертежа используются те же функции, что и для создания документа детали. Для
вки детали в чертеж необходимо чтобы деталь была открыта в SolidWorks, а также знать
треннее имя детали в SolidWorks.
vSheetProps = swSheetProperties
vSheetProps (3) = 1
Например:
63
'Retrieve current sheet settings
vSheetProps = swSheet.GetProperties
vSheetProps(k) – изменяет значение свойства, k – номер свойства (может изменяться от1 до 6);
Например:
vSheetProps = swSheet.GetProperties
64
Debug.Print "Name = " + swSheet.GetName
bFirstAng = vSheetProps(4)
swSheet.SetProperties _
vSheetProps(0), _
vSheetProps(1), _
vSheetProps(2), _
vSheetProps(3), _
vSheetProps(4), _
vSheetProps(5), _
vSheetProps(6)
65
' Current projection property
swDwgTemplateCastom, swDwgTemplateNone
vSheetProps(4) – firstAngle принимает значение TRUE, если нужно создать первое угловое
проектирование, иначе – FALSE;
Синтаксис:
66
Set myView = Part.CreateDrawViewFromModelView2(ModeName,ViewName,LocX,
LocY,LocZ),
где
ModeName – имя файла детали или сборки ( с расширением .sldprt или .sldasm), на
основе которого будет создан чертеж;
Приведем пример макроса, который открывает файл модели детали и создает чертеж
ее с видом спереди.
Const Pi = 3.141592654
Sub main()
D = 260
Set Part =
swApp.OpenDoc6("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vrem1.SLDPRT",
1, 0, "", longstatus, longwarnings)
67
swApp.ActivateDoc2 "vrem1", False, longstatus
myModelView.FrameLeft = 0
myModelView.FrameTop = 0
myModelView.FrameState = swWindowState_e.swWindowMaximized
myModelView.FrameState = swWindowState_e.swWindowMaximized
'Установка мастаба
vSheetProps = swSheet.GetProperties
vSheetProps(3) = 2
Set myView =
Part.CreateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Sta
mp\vrem1.SLDPRT", "*Спереди", D / (4 * 1000) + 0.06, D / (4 * 1000) + 0.03, 0)
68
End Sub
езультатом работы макроса будет загрезка файла модели детали Кольцо и формирование чертежа с
ом сверху для этой детали (Рис.14).
CreateUnfoldedViewAt3(x,y,z,notAligned)
нтаксис:
notAligned – TRUE – если нужно разорвать привязки к главному виду, иначе – FALSE.
Пример:
69
m swApp As Object
m Part As Object
m boolstatus As Boolean
m ExcludedComponents As Variant
nst Pi = 3.141592654
b main()
swApp = Application.SldWorks
= 260
Part = swApp.OpenDoc6("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vrem1.SLDPRT",
0, "", longstatus, longwarnings)
myModelView.FrameLeft = 0
myModelView.FrameTop = 0
myModelView.FrameState = swWindowState_e.swWindowMaximized
myModelView.FrameState = swWindowState_e.swWindowMaximized
70
t Part = swApp.ActiveDoc
swSheet = Part.GetCurrentSheet
ñòàíîâêà ìàñòàáà
heetProps = swSheet.GetProperties
heetProps(3) = 2
swSheet = Part.GetCurrentSheet
m myView As Object
myView =
rt.CreateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vrem1
LDPRT", "*Спереди", D / (4 * 1000) + 0.06, D / (4 * 1000) + 0.03, 0)
d Sub
71
Рис.15. Формирование вида спереди
нтаксис:
где
X, Y, Z – координаты положения центра нового сечения;
SectionLabel – метка для обозначения названия вида;
Options - настройка, которая определяется swCreateSectionViewAtOptions_e;
Пример.
72
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim ExcludedComponents As Variant
Dim D, H, D3, Dm, D2, Hm, H1, d1, dm1 As Double
Const Pi = 3.141592654
Sub main()
'Построение сечения
Part.EditSketch
73
Part.ClearSelection2 True
Part.CreateLine2 -D / (2 * 1000) - 0.05, 0, 0, D / (2 * 1000) + 0.05, 0, 0
Set DrawView = Part.CreateSectionViewAt4(D / (4 * 1000) + 0.06, D / (2 * 1000) + 0.1, 0, "A", 20,
ExcludedComponents)
Part.SaveAs2 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\plita.SLDDRW", 0, False,_
False
End Sub
74
Рис.17. Деталь для выполнения примера
Sub main()
End Sub
76
Функции для работы со сборкой
рка собирается из набора созданных предварительно деталей путем установки между ними
ений.
добавления деталей в сборку используется функция AddComponent.
таксис:
новной задачей при составлении сборки является установление сопряжений между различными
ями. При этом требуется выделять отдельные элементы деталей. В этом случае координатный
б выделения в сборке малоэффективен.
этому для решения вопроса выделения элементов при составлении сборки следует при
руировании деталей присваивать имена элементам деталей, которые будут участвовать в сборке.
и выполнении операции присваивания имени элементу нужно выделить элемент и затем
лнить следующую команду:
прмер для кромки – Part.SelectedEdgeProperties “Название кромки”
где
rgbColor – цвет;
transparency – прозрачность от 0 до 1;
emission – эмиссия от 0 до 1;
77
faceName – имя грани.
В сборке есть свои особенности выделения объектов. Это связано с тем, что в наличии имеется
колько деталей и , например, несколько из них могут иметь элемент ось.
При указании названия элемента идет следующий порядок: название элемент а-@название детали-
вание сборки.
Пример:
Синтаксис:
где
swMateCOINCIDENT
swMateCONCENTRIC
swMatePERPENDICULAR
swMatePARALLEL
swMateTANGENT
swMateDISTANCE
swMateANGLE
swMateUNKNOWN
swMateSYMMETRIC
swMateCAMFOLLOWER
swMateGEAR
swMateWIDTH
78
swMateLOCKTOSKETCH
swMateRACKPINION
swMateMAXMATES
swMatePATH
swMateLOCK
swMateSCREW
swMateLINEARCOUPLER
swMateUNIVERSALJOINT
swMateCOORDINATE
swMateAlignALIGNED
swMateAlignANTI_ALIGNED
swMateAlignCLOSEST
79
errorStatus – сообщение об ошибке, может принимать значения:
Dim kd, kd1, kd2, kdm, kk, ke, kh, khm, kh1, kh2, kh3 As Double
Const Pi = 3.141592654
Sub main()
Dim kd, kd1, kd2, kdm, kk, ke, kh, khm, kh1, kh2, kh3 As Double
kd = 200 * 0.001
80
kd1 = 80 * 0.001
kdm = 12 * 0.001
kk = 59.5 * 0.001
ke = 30 * 0.001
kh = 85 * 0.001
khm = 30 * 0.001
kh1 = 30 * 0.001
kh2 = 15 * 0.001
kh3 = 15 * 0.001
'Вытянуть основание
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, kd / 2
Part.ClearSelection2 True
Part.SelectionManager.EnableContourSelection = 0
'Вырез с уклоном
Part.InsertSketch2 True
Part.ClearSelection2 True
Part.CreateCircleByRadius2 0, 0, 0, kd1 / 2
Part.ClearSelection2 True
Part.FeatureManager.FeatureCut True, False, False, 1, 0, 0.01, 0.01, True, False, False, False, Pi / 180 *
5, 0, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0
Part.InsertAxis2 True
Part.ClearSelection2 True
Part.SaveAs2 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\Wheel.SLDPRT", 0,
False, False
Set Part =
swApp.OpenDoc6("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\plita.SLDPRT", 1,
0, "", longstatus, longwarnings)
'Создание сборки
83
Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application
Data\SolidWorks\SolidWorks 2009\templates\Ñáîðêà.asmdot", 0, 0, 0)
Part.AddComponent
"F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\Wheel.SLDPRT", 0, 0, 0
Part.ClearSelection2 True
boolstatus =
Part.AddComponent("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\plita.SLDPRT",
0, 0, 0.09)
Part.ClearSelection2 True
Part.SaveAs2 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\Stamp.SLDASM",
0, False, False
Part.ClearSelection2 True
Part.ClearSelection2 True
84
boolstatus = Part.Extension.SelectByID2("Справа@plita-1@Stamp", "PLANE", 0, 0, 0, True, 1,
Nothing, 0)
Part.ForceRebuild3 False
Part.SaveAs2 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\Stamp.SLDASM",
0, False, False
Part.ClearSelection2 True
End Sub
85
Рис.19. Модель детали
86
Рис.20. Модель сборки
Информационный портал
ГОУ ВПО УГТУ-УПИ
http://www.ustu.ru
88