Вы находитесь на странице: 1из 88

Министерство образования и науки Российской Федерации

Уральский федеральный университет имени первого Президента России Б.Н. Ельцина

Д.В. Куреннов,В.И. Кондратьев

РАЗРАБОТКА VBA ПРИЛОЖЕНИЙ


В SOLIDWORKS
Часть 1

Сборник лабораторных работ


Подготовлено кафедрой «Информационные системы и автоматизация
проектирования»
Научный редактор: доц., кандидат технических. наук Н.Д. Старостин

Методическое пособие по курсу «Системы автоматизированного


проектирования -САПР» для студентов дневной формы обучения направление
230000  Информатика и вычислительная техника: 230105  Программное
обеспечение вычислительных комплексов и систем.

Описаны основные возможности и понятия, связанные с разработкой макросовв


среде графического пакета Solid Works. Рассмотрены подходы разработки
макросов, реализующих автоматизированное проектирование
пространственных моделей объектов и получения чертежей

Екатеринбург
2013

УДК 681.3

Составители: Д.В. Куреннов, В. И. Кондратьев


Научный редактор Н.Д. Cтаростин, к.т.н., доц. РАЗРАБОТКА VBA
ПРИЛОЖЕНИЙ
В SOLIDWORKS:Методические указания по дисциплине “Системы
автоматизированного проектирования -САПР ”/ Д.В. Куреннов, В. И.
Кондратьев. изд. институт УГТУ-УПИ, 2012. 50c.

В данных методических указаниях приведены сведения о разработке


макросов в среде графического пакета Solid Works, рассмотрены подходы
формирования макросов для построения трехмерных моделей объектов и
построения чертежей . В пособии приведено большое количество примеров.

Библиогр.: 3 назв. Рис.20.

Подготовлено кафедрой

2
“ ИНФОРМАЦИОННЫЕ СИСТЕМЫ И АВТОМАТИЗАЦИЯ
ПРОЕКТИРОВАНИЯ ”

© УГТУ-УПИ,2013
Введение

Solid Works является расширяемым пакетом, то есть он содержит средства,


позволяющие создавать новые команды и приложения. Такие приложения
обеспечивают большую степень автоматизации, чем ручное проектирование.
Можно выделить три варианта макросов, которые разрабатываются в Solid
Works.
Первый вариант связан с автоматическим способом записи макросов. Так,
в Solid Works имеются панель и меню с командами для записи и сохранения
макросов (рис.1).

Рис.1. Панель для записи , сохранения и выполнения макросов

Макросы таким способом формируются следующим образом, включается


команда Запись макроса, после чего строится модель объекта в командном
режиме. Когда модель построена, выполняется команда Остановить запись
макроса. После чего макрос сохраняется на диске и его можно запускать на
выполнение.
Недостатком таких макросов является то, что они формируют модель точно
такой же формы и размеров, какую мы построили. Положительным моментом
является то, что в макросе содержатся операторы на языке Visual Basic, которые
3
можно использовать для разработки более универсальных и гибких
приложений.
По степени универсальности их можно разделить на два вида. К первому
виду относятся приложения, которые позволяют при постоянной форме модели,
которая формируется заранее ручным способом, менять размеры объектов,
задавая значения размеров в диалоге и, если объект стандартный, то с
использованием таблиц параметров. Ко второму виду, относятся приложения, в
которых модель строится программно с использованием операторов языка
Visual Basic For Application. В этом случае можно создавать более гибкие и
интеллектуальные приложения, позволяющие управлять формой и размерами
объектов проектирования.
Рассмотрим примеры разработки VBA приложений.

Создание параметрических объектов в SolidWorks на языке Visual


Basic с использованием таблиц параметров

Рассмотрим методику создания параметрических моделей в среде Solid


Works на языке Visual Basic с использованием таблиц параметров.
1. С этой целью создадим модель куба (рис.2).

Рис.2. Модель куба

4
Сохраним модель в файле Соparametric.SLDPRT

2. Затем создадим макрос Macpar1.swp и в нем создадим форму


UserForm1(Рис.3).

Рис.3. Форма макроса

В форме разместим элементы: image,listbox,label,commandButton.

3. Поставим в соответствие событию нажатия кнопки OK следующий прогаммный код

Public iii As Integer


Dim MyArray(6, 3) 'Объявление массива

Private Sub CommandButton1_Click()

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

Sub ParametricSub(ByVal XValue_Passed As Double, ByVal YValue_Passed As Double, ByVal


ZValue_Passed As Double)
Dim swApp As Object

Set swApp = Application.SldWorks

Dim Part As Object ' Define variable used to hold the part object

MyPath = CurDir ' Determine current directory

Set Part = swApp.ActivateDoc("coparametric.SLDPRT")

' Change Dimension values to the X, Y, and Z values passed in


'XValue_Passed = 80
Part.Parameter("D1@Sketch1").SystemValue = XValue_Passed / 1000

6
Part.Parameter("D2@Sketch1").SystemValue = YValue_Passed / 1000
Part.Parameter("D1@Extrude1").SystemValue = ZValue_Passed / 1000

' Regenerate the partfile since changes were made


Part.EditRebuild

' Save the changes made to the partfile


Part.Save

End Sub

4. Поставим в соответствие событию выбора из списка ListBox1 следующий прогаммный код

Private Sub ListBox1_Click()

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)

Msg = "Changes Complete" ' Define message.


Style = vbOKOnly ' Button option shows OK only
Title = "Parametric Block" ' Define title.

Call MsgBox(Msg, Style, Title)


7
End Sub

5.Поставим в соответствие событию нажатия кнопки CANCEL следующий прогаммный код

Private Sub CommandButton2_Click()


UserForm1.Hide
End Sub

6. Запустите макрос (Рис.4).

Рис.4. Запуск макроса

7.В появившемся окне выберите нужные размеры объекта(Рис.5).

8
Рис.5. Выбор размеров объекта

В приведенном примере набор параметрических размеров объекта заносился непосредственно в


ссивы внутри программы. Такой вариант при изменении размерных данных объекта требует
менения программного кода, что для пользователя является неприемлемым.
1. Решим поставленную задачу, поместив данные о размерах объекта в файл Zapicw.txt.

100,120,150
200,220,250
300,320,350
400,420,450
500,520,550
600,620,650

Здесь в каждой строке представлены данные о длине, ширине и высоте рассматриваемой детали.

9
2. Затем создадим макрос Macpar2.swp и в нем создадим форму UserForm1(Рис.6).

Рис.6. Форма макроса

Эта форма точно такая же.

3. Событию нажатия кнопки ОК будет соответствовать программный код

Public iii As Integer


Dim MyArray() 'Определение массива переменной размерности

Private Sub CommandButton1_Click()


Dim i As Integer

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

Sub ParametricSub(ByVal XValue_Passed As Double, ByVal YValue_Passed As Double, ByVal


Value_Passed As Double)
Dim swApp As Object

Set swApp = Application.SldWorks

Dim Part As Object ' Define variable used to hold the part object

MyPath = CurDir ' Determine current directory

Set Part = swApp.ActivateDoc("parametric.SLDPRT")

' Change Dimension values to the X, Y, and Z values passed in

Part.Parameter("D1@Sketch1").SystemValue = XValue_Passed / 1000

Part.Parameter("D2@Sketch1").SystemValue = YValue_Passed / 1000

11
Part.Parameter("D1@Extrude1").SystemValue = ZValue_Passed / 1000

' Regenerate the partfile since changes were made


Part.EditRebuild

' Save the changes made to the partfile


Part.Save

End Sub

4. Поставим в соответствие событию выбора из списка ListBox1 следующий прогаммный код

Private Sub ListBox1_Click()

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)

Msg = "Changes Complete" ' Define message.


Style = vbOKOnly ' Button option shows OK only
Title = "Parametric Block" ' Define title.

Call MsgBox(Msg, Style, Title)


End Sub
5.Поставим в соответствие событию нажатия кнопки CANSEL следующий прогаммный код
12
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub

6. Запустите макрос

7.В появившемся окне выберите нужные размеры объекта(Рис.7).

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)

где

(VARIANT_BOOL)sd – TRUE,если вытягивание в одном направлении,FALSE – в двух;


(VARIANT_BOOL)flip – TRUE для смены направления выреза;
(VARIANT_BOOL)dir - TRUE для смены направления вытягивания;
(double)d1 – глубина вытягивание в первом направлении;
(double)d2 – глубина вытягивание во втором направлении;
(VARIANT_BOOL)dchk1 – TRUE для изменения угла наклона в первом направлении,FALSE
– не изменять;
(VARIANT_BOOL)dchk2 – TRUE для изменения угла наклона во втором направлении,FALSE
– не изменять;
(VARIANT_BOOL) ddir1- TRUE – уклон первого угла внутрь, FALSE –наружу;
(VARIANT_BOOL) ddir2- TRUE – уклон второго угла внутрь, FALSE –наружу
(double)dang1- значение угла для первого направления;

15
(double)dang2- значение угла для второго направления;
(VARIANT_BOOL)offsetReverse1- TRUE – реверс направления вытягивания в первом
направлении, FALSE – не изменять направление вытягивания;
(VARIANT_BOOL)offsetReverse2- TRUE – реверс направления вытягивания во втором
направлении, FALSE – не изменять направление вытягивания;
(VARIANT_BOOL) translateSurface1 – TRUE для отсчета глубины вытяжки от
противоположной плоскости в первом направлении, FALSE- от текущей плоскости;

После кубика строятся конструктивные элементы с помощью следующих функций:

(VARIANT_BOOL) translateSurface2 – TRUE для отсчета глубины вытяжки от


противоположной плоскости во втором направлении, FALSE- от текущей плоскости;
(VARIANT_BOOL) merge- TRUE, если нужно объединить с телом, FALSE- не нужно;
(VARIANT_BOOL) useFeatScope- - TRUE, если вытягиваемый объект влиет на другие
объекты, , FALSE- не влияет;
(VARIANT_BOOL) useAutoSelect - TRUE,-для автоматического выделения объектов, FALSE-
вручную;
(long) t0 – начальное условие swStartConditions_e;
(double)startOffset – Если задано значение t0, устанавливается значение отступа;
(VARIANT_BOOL)flipStartOffset - Если задано значение t0, TRUE – изменить направление на
противоположное, FALSE- не изменять.

FeatureFillet

FeatureFillet(options,r1,ftyp,overFlowType,radii,setBackDistances,pointRadiusArray)

Где

(long)options – опция скругления swFeatureFilletOptions_e;

(double)r1 – радиус скругления;

(long)ftyp – 0 – для простого скругления;


1 – для варьируемого радиуса скругления;
2 – для смещения радиуса

(long)overFlowType – контроль выхода скругления на смежные поверхности.

FeatureCut

16
Создает вырез по эскизу на заданную глубину

FeatureCut(sd,flip,dir,t1,t2,d1,d2,dchk1, dchk2,ddir1,ddir2,dang1,dang2,offsetReverse1,
offsetReverse2,translateSurface1, translateSurface2,normalCut,useFeatScope,useAutoSelect)

Элементы этой функции аналогичны элементам FeatureExtrusion2.

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)

где

(double) va – расстояние отступа от выбранной плоскости;


(VARIANT_BOOL) flipDir – TRUE – для смены направления;

17
(VARIANT_BOOL) autoSize- TRUE – для автоматического задания размеров.

FeatureRevolveCut

Вращает контур на заданный угол вокруг выбранной точки

FeatureRevolveCut(angle,revolveDir, angle2,revType,options,useFeatScope,useAutoSel)

Где

(double) angle – угол вращения;


(VARIANT_BOOL) revolveDir – TRUE – для противоположного направления вращения, FALS
не менять;
(double) angle2– угол вращения;
(long)- revType – тип вращения;
(long)options – дополнительный контроль;
(VARIANT_BOOL) useFeatScope – TRUE вращать выбранные объекты, FALSE – вращать
вcе объекты;
(VARIANT_BOOL) useAutoSel- автоматически выбрать объекты, FALSE – вручную выбрать
объекты.

Создание макроса для проектирования штампа

1. Создадим макрос, используя Tools/Macroc/New


2. Создадим форму для ввода исходных данных(Рис.8).

18
Рис.8. Форма макроса

Текст программного кода для 12 версии Solid Works

Private Sub CommandButton1_Click()

Dim swApp As Object

Dim Part As Object


Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc


boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
Dim vSkLines As Variant
19
Dim B As Double
Dim L As Double
Dim H As Double
Dim B1 As Double
Dim h1 As Double
Dim i1 As Double
Dim b3 As Double
Dim r3 As Double
Dim h3 As Double
Dim r As Double
Dim alfa As Double

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)

' Вырез паза

boolstatus = Part.Extension.SelectByID2("Top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


Part.ClearSelection2 True
Part.SketchRectangle (B - ((B - B1) / 2)) - i1, L / 2 - i1 / 2, 0, (B - ((B - B1) / 2)), L / 2 + i1 / 2, 0, 1
Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2("Line2", "SKETCHSEGMENT", 0, 0, 0, False, 0,
Nothing, 0)
21
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, 0, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0

'Боковые отверстия

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, 0, 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, 1
Part.SelectionManager.EnableContourSelection = 0

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, 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, 0, 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, 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, 0, 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

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("Top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


Part.CreatePlaneAtOffset3 L / 2, False, True

boolstatus = Part.Extension.SelectByID2("Плоскость1", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


'Part.SelectedFeatureProperties 0, 0, 0, 0, 0, 0, 0, 1, 0, "New_Name"
'boolstatus = Part.Extension.SelectByID2("New_Name", "PLANE", 0, 0, 0, False, 0, Nothing, 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

Текст программного кода для 8 версии Solid Works

Private Sub CommandButton1_Click()


Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim B As Double
Dim L As Double
Dim H As Double
Dim B1 As Double
Dim h1 As Double
Dim i1 As Double
Dim b3 As Double
Dim r3 As Double
Dim h3 As Double
Dim r As Double
Dim alfa As Double
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swApp = Application.SldWorks
boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
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)

24
'Построение кубика

Part.SketchRectangle 0, 0, 0, B, L, 0, 1

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.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

'Боковые вырезы

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H, 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)

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("Top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


Part.ClearSelection2 True
Part.SketchRectangle (B - ((B - B1) / 2)) - i1, L / 2 - i1 / 2, 0, (B - ((B - B1) / 2)), L / 2 + i1 / 2, 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, 0, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0

'Боковые отверстия

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, 0, 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, 1
Part.SelectionManager.EnableContourSelection = 0

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, 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, 0, 0, False, 0,
Nothing, 0)
26
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, 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, 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("", "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("Top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.CreatePlaneAtOffset3 L / 2, False, True
boolstatus = Part.Extension.SelectByID2("Plane1", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SelectedFeatureProperties 0, 0, 0, 0, 0, 0, 0, 1, 0, "New_Name"
boolstatus = Part.Extension.SelectByID2("New_Name", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
'Part.ClearSelection2 True
Part.SketchRectangle 0, 0, 0, 0, 0, 0, 1
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("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

'Part.SketchRectangle 0, 0, 0, 30, 40, 0, 1

End Sub

Текст программного кода для 9 версии Solid Works

Private Sub CommandButton1_Click()


Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim B As Double
Dim L As Double
Dim H As Double
Dim B1 As Double
Dim h1 As Double
Dim i1 As Double
Dim b3 As Double
Dim r3 As Double
Dim h3 As Double
Dim r As Double
Dim alfa As Double
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swApp = Application.SldWorks
boolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
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)

28
'Построение кубика

Part.SketchRectangle 0, 0, 0, B, L, 0, 1

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.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

'Боковые вырезы

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H, 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)

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("Сверху", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


Part.ClearSelection2 True
Part.SketchRectangle (B - ((B - B1) / 2)) - i1, L / 2 - i1 / 2, 0, (B - ((B - B1) / 2)), L / 2 + i1 / 2, 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, 0, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0

'Боковые отверстия

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, 0, 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, 1
Part.SelectionManager.EnableContourSelection = 0

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, 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, 0, 0, False, 0,
Nothing, 0)
30
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, 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, 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("", "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("Сверху", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.CreatePlaneAtOffset3 L / 2, False, True
boolstatus = Part.Extension.SelectByID2("Плоскость1", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SelectedFeatureProperties 0, 0, 0, 0, 0, 0, 0, 1, 0, "New_Name"
boolstatus = Part.Extension.SelectByID2("New_Name", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
'Part.ClearSelection2 True
Part.SketchRectangle 0, 0, 0, 0, 0, 0, 1
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
31
''Part.SelectionManager.EnableContourSelection = 0
Part.ClearSelection2 True

'Part.SketchRectangle 0, 0, 0, 30, 40, 0, 1

End Sub

Текст программного кода для 6 версии Solid Works

Private Sub CommandButton2_Click()


Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim B As Double
Dim L As Double
Dim H As Double
Dim B1 As Double
Dim h1 As Double
Dim i1 As Double
Dim b3 As Double
Dim r3 As Double
Dim h3 As Double
Dim r As Double
Dim alfa As Double
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swApp = Application.SldWorks
boolstatus = Part.Extension.SelectByID2("Front", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
B = Val(TextBox1.Text)
L = Val(TextBox2.Text)
H = Val(TextBox3.Text)
B1 = Val(TextBox4.Text)
BB = Val(TextBox5.Text)
h1 = Val(TextBox6.Text)
i1 = Val(TextBox7.Text)
b3 = Val(TextBox8.Text)
r3 = Val(TextBox9.Text)
r = Val(TextBox10.Text)
h3 = Val(TextBox11.Text)

32
alfa = Atn((B1 - BB) / h1)
'Ïîñòðîåíèå êóáèêà

Part.SketchRectangle 0, 0, 0, B, L, 0, 1

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.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
Part.SelectionManager.EnableContourSelection = 0

'Áîêîâûå âûðåçû

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H, 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)
33
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("Top", "PLANE", 0, 0, 0, False, 0, Nothing, 0)


Part.ClearSelection2 True
Part.SketchRectangle (B - ((B - B1) / 2)) - i1, L / 2 - i1 / 2, 0, (B - ((B - B1) / 2)), L / 2 + i1 / 2, 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, 0, False, False, False, False,
0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 0

'Áîêîâûå îòâåðñòèÿ

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, 0, 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, 1
Part.SelectionManager.EnableContourSelection = 0

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, 0, 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, 0, 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, 1
Part.SelectionManager.EnableContourSelection = 0
34
'Ñêðóãëåíèÿ
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("", "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
Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L, H / 2, False, 0, Nothing, 0)


Part.CreatePlaneAtOffset3 L / 2, True, True
boolstatus = Part.Extension.SelectByID2("Ïëîñêîñòü1", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
'Part.SelectedFeatureProperties 0, 0, 0, 0, 0, 0, 0, 1, 0, "Íîâàÿ_ïëîñêîñòü"
'boolstatus = Part.Extension.SelectByID2("Íîâàÿ_ïëîñêîñòü", "Ïëîñêîñòü1", 0, 0, 0, False, 0,
Nothing, 0)
'Part.SketchRectangle 0, 0, 0, B, L, 0, 1
Part.CreateCircle -B / 2, -b3, 0, -B / 2, -b3 - 0, 0
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("Sketch9", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Part.FeatureManager.FeatureRevolveCut 6.28318530718, False, 0, 0, 0, 1, 1
'Part.SelectionManager.EnableContourSelection = 0

Part.ClearSelection2 True
End Sub

35
Текст для 16 версии

Private Sub CommandButton1_Click()

Dim swApp As Object

Dim Part As Object


Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Set swApp = _
Application.SldWorks

Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWOR


2016\templates\gost-part.prtdot", 0, 0, 0)
swApp.ActivateDoc2 "Деталь1", False, longstatus
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
'boolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, Fals
Nothing, 0)

'Dim swApp As Object


'Dim Part As Object
'Dim boolstatus As Boolean
Dim B As Double
Dim L As Double
Dim H As Double
36
Dim B1 As Double
Dim h1 As Double
Dim i1 As Double
Dim b3 As Double
Dim r3 As Double
Dim h3 As Double
Dim r As Double
Dim alfa As Double
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set swApp = Application.SldWorks
boolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, False
Nothing, 0)
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)

'Построение кубика

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

'Боковые вырезы

boolstatus = Part.Extension.SelectByID2("", "FACE", B / 2, L / 2, H, 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, 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)
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("", "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, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 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)

' Вырез паза

boolstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, False


Nothing, 0)
Part.ClearSelection2 True
Part.SketchRectangle (B - ((B - B1) / 2)) - i1, L / 2 - i1 / 2, 0, (B - ((B - B1) / 2)),
2 + i1 / 2, 0, 1
Part.ClearSelection2 True
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)
boolstatus = Part.Extension.SelectByID2("Line3", "SKETCHSEGMENT", 0,
0, True, 0, Nothing, 0)
Part.FeatureManager.FeatureCut True, False, True, 0, 0, h1, 0, False, False, Fa
False, 0.01745329251994, 0.01745329251994, False, False, False, False, 0, 1, 1
Part.SelectionManager.EnableContourSelection = 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 / 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("Сверху", "PLANE", 0, 0, 0, False,
Nothing, 0)
Part.CreatePlaneAtOffset3 L / 2, False, True
boolstatus = Part.Extension.SelectByID2("Плоскость1", "PLANE", 0, 0, 0, F
0, Nothing, 0)
Part.SelectedFeatureProperties 0, 0, 0, 0, 0, 0, 0, 1, 0, "New_Name"
boolstatus = Part.Extension.SelectByID2("New_Name", "PLANE", 0, 0, 0, Fa
0, Nothing, 0)
'Part.ClearSelection2 True
Part.SketchRectangle 0, 0, 0, 0, 0, 0, 1
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 = T

'Вращение контура
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

'Part.SketchRectangle 0, 0, 0, 30, 40, 0, 1


End Sub

Окончательный вид заготовки штампа будет выглядеть следующим


образом(Рис.9)..

Рис.9. Окончательный вид заготовки штампа

ассмотрим второй пример конструирования элементов штампа для высадки.


42
Конструирование элементов штампа для высадки в Solid Works

ассмотрим возможности макро средств программы Solid Works по конструированию трехмерных


ектов на примере конструирования элементов штампов для высадки болтов.
Напомним, что конструирование трехмерных объектов начинается с создания эскизов. Затем
олняются операции выдавливания, вырезания, движения по траектории, поворота, построения
ектов по сечениям и т. д. Рассмотрим основные команды, применяемые при разработке этих VBA
ложений для создания эскизов.
Вначале необходимо выбрать плоскость, на которой будет строиться эскиз. Для этих целей
ользуется функция Part.Extension.SelectByID2, позволяющая выбирать не только плоскость, но и
менты трехмерной детали: кромка, грань, поверхность.

Синтаксис:

olstatus = Part.Extension.SelectByID2(Name,Type,X,Y,Z,Append,Mark,Callout,
ectOption)

olstatus – переменная типа Boolean;

me – имя выделяемого объекта, например “Спереди” – плоскость; этот атрибут является необязатель
жет заменяться пустыми кавычками если неизвестно название элемента;

pe – указывает тип выделяемого элемента:

EDGE – грань;

FACE – кромка;

PLANE - плоскость;

AXIS – ось;

DATUMPOINT – точка;

SKETCHSEGMENT –элемент эскиза, например, дуга окружности;

Y,Z – координаты одной из точек выделяемого элемента;

43
pend – имеет одно из двух значений: True –используется, когда элемент выделен для снятия
еления, False - наоборот для выделения невыделенного элемента.При значении False снимаютя
выделения, назначенные ранее и выделяется элемент.

ark – используется другими функциями, рекомендуется ставить 0;

llout – заполняется значением Nothing;

ectOption – заполняется значением 0;

ример выделения плоскости эскиза

olstatus = Part.Extension.SelectByID2(“Спереди”,”PLANE”,0,0,0,False,0,Nothing,0)

строение вспомогательной плоскости на расстоянии от выделенной выполняется функцией


tePlaneAtOffset3.

нтаксис:

olstatus = Part.ModelDoc2.CreatePlaneAtOffset3 (val, flipDir,autoSize),

– расстояние от выделенной плоскости в метрах;

pDir – изменение направления, значение 1 или 0

oSize – автомастаб плоскости.

сле выбора плоскости на ней создается эскиз функцией Part.InsertSketch2.True.


и построении эскиза чаще всего используются инструменты формирования линий, окружностей и
окружностей.

ния строится командой CreateLine2

нтаксис:

olstatus = Part. CreateLine2(xStart, yStart, zStart, xEnd, yEnd, zEnd),

tart, yStart, zStart - координаты начала отрезка;

nd, yEnd, zEnd - координаты конца отрезка.


44
ружность можно построить несколькими способами:
) задав центр и радиус CreateCircleByRadius2
) задав центр и на окружности CreateCircle2
oolstatus = Part.CreateCircleByRadius2(xc,yc,zc,radius)
где
xc,yc,zc – координаты центра окружности;
radius – радиус.

oolstatus = Part.CreateCircle2(xc,yc,zc, xp,yp,zp)


где
xc,yc,zc – координаты центра окружности;
xp,yp,zp– координаты края окружности.

Касательная дуга окружности к линии CreateTangentArc2

Синтаксис

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

сле выполнения макроса получится следующий эскиз (Рис.10).

Рис.10. Построение эскизов

Вспомогательная геометрия

К вспомогательгой геометрия относят точку,плоскость,ось. Вспомогательная геометрия


ользуется при создании эскизов, вырезов, круговых массивов, сопряжения в сборке и т. д.

46
Вспомогательная плоскость строится на расстоянии от выделенной плоскости с использованием
анды CreatePlaneAtOffset3(val,flipDir,autoSize)
де

val – расстояние от выделенной плоскости в метрах;


ipDir – изменение направления, значение 1 или 0;
utoSize – автомасстаб плоскости.

Пример2:

olstatus = Part.Extension.SelectByID2("Спереди ", "PLANE", 0, 0, 0, True, 0, Nothing, 0)


rt.CreatePlaneAtOffset3 0.05, False, True

помогательная ось строится на пересечении двух плоскостей, при этом используется команда
.InsertAxis2 True

Пример3:

olstatus = Part.Extension.SelectByID2("Спереди", "PLANE", 0, 0, 0, True, 0, Nothing, 0)


olstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
olstatus = Part.InsertAxis2(True)
rt.InsertAxis2 True

Работа с 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

ьтате выполнения данного макроса получим модель детали Ручка (Рис.11).

48
Рис.11 Модель детали Ручка

Операция “вытянутая бобышка”

Эта операция реализуется командой FeatureExtrusion2. Для выполнения этой


манды необходимо выделить эскиз.
Синтаксис:
eatureExtrusion2(sd,flip,dir,,t1,t2,d1,d2,dchk1,dchk2,ddir1,ddir2,dang1,dang2,
setReverse1, offsetReverse2,translateSurvace1, translateSurvace2,merge,useFeatScope,
eAutoSelect,t0,startOffset,,flipStartOffset)

– TRUE, если вытягивание в одном направлении, FALSE - в двух;


p – TRUE для смены направления выреза;
- TRUE для смены направления вытягивания;
– глубина вытягивания в первом направлении;
– глубина вытягивания во втором направлении;
hk1 – TRUE для изменения углов наклона в первом направлении, FALSE - не
изменять;
hk1- TRUE для изменения углов наклона во втором направлении, FALSE - не
изменять;
r1 – TRUE – уклон первого угла внутрь, FALSE - наружу;
r2 – TRUE – уклон второго угла внутрь, FALSE - наружу;
ng1 – значение угла в первом направлении;
49
setReverse1 - TRUE –реверс направления вытягивания в первом направлении,
FALSE - не изменять направления вытягивания;
setReverse2 - TRUE –реверс направления вытягивания во втором направлении,
FALSE - не изменять направления вытягивания;
nslateSurvace1- TRUE – для отсчета глубины вытяжки от противоположной плоск-
кости в первом направлении, FALSE - от текущей плоскости;
nslateSurvace2- TRUE – для отсчета глубины вытяжки от противоположной плоск-
кости во втором направлении, FALSE - от текущей плоскости;
rge - TRUE –если нужно объединить с телом, FALSE - не нужно;
eFeatScope - TRUE – если вытягиваемый объект влияет на другие объекты, FALSE -
не влияет;
eAutoSelect - TRUE –для автоматического выделения объектов, FALSE – вручную;
начальное условие swStartConditions_e;
rtOffset – если задано значение t0, то устанавливается значение отчтупа;
flipStartOffset - если задано значение t0, TRUE – изменить направление на противоположное, FALSE
изменять.

Операция “вытянутый вырез”

Эта операция используется для получения выреза на основе эскиза с исполь-


ванием команды FeatureCut, что позволяет получить любую форму выреза.

нтаксис:

atureCut ( sd, flip, dir, t1, t2, d1, d2, dchk1, dchk2, ddir1, ddir2, dang1, dang2, offsetReverse1, offsetRevers
ateSurface1, translateSurface2, normalCut, useFeatScope, useAutoSelect )

rmalCut - TRUE обеспечивает создание выреза нормально к поверхности объекта,


FALSE нет.

тальные переменные этой команды аналогичны операции вытянутая бобышка.

Операция “круговой массив”

а операция выполняется с применением команды FeatureCircularPattern2.


я выполнения операции требуется выделить ось, вокруг которой будут копироваться элементы, и сам
нт, которых может быть несколько.

нтаксис:

atureCircularPattern2 ( num, spacing, flipDir, dName, geometryPattern)


50
е
num – количество копий, включая оригинал;
spacing – центральный угол между двумя копиями в радианах;
flipDir – TRUE если нужно сменить направление создания копий, иначе – FALSE;
dName – имя углового размера, определяющего направление массива ( рекомен-
дуется NULL);
geometryPattern – TRUE при использовании геометрического массива, FALSE – нет.

Рассмотрим на примере использования этих функций и покажем вариант задания параметризации


и.

ример5:

Dim swApp As Object


Dim Part As Object
Dim SelMgr As Object
Dim boolstatus As Boolean
Dim longstatus As Long, Longwarnings As Long
Dim Feature As Object
Dim D, H, D3, Dm, D2, Hm, H1, d1, dm1 As Double
Const Pi = 3.141592654

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

'Создание кругового массива


boolstatus = Part.Extension.SelectByID2("Вытянуть2", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Ось1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", 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

'Создание кругового массива


boolstatus = Part.Extension.SelectByID2("Âûòÿíóòü6", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Îñü1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", True)

nd Sub

результате работы макроса получим(Рис.12):

Рис.12. Модель детали Кольцо

53
Дополнительные функции для преобразования 3D объектов

Плоскости можно использовать для рассечения деталей. Эта задача решается


командой InsertCutSurface. Для выполнения этой команды следует выделить
плоскость, затем выполнить эту функцию. После этого произойдет погашение всех
элементов, лежащих по одну сторону от плоскости.

Синтаксис:

Part.InsertCutSurface ( flip, keepPieceIndex )

где

flip – переключение направления погашения элементов;

keepPieceIndex – True – если сохранять деталь, если есть двусмысленность, иначе-


False

пример, добавим к концу предыдущего макроса:

ыполнение разреза детали пополам


boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.InsertCutSurface False, 0

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

Создание кругового массива


boolstatus = Part.Extension.SelectByID2("Вытянуть2", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Ось1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", 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

'Создание кругового массива


boolstatus = Part.Extension.SelectByID2("Âûòÿíóòü6", "BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Îñü1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)
Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", True)

ыполнение разреза детали пополам


oolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.InsertCutSurface False, 0

d Sub

результате работы макроса получим (Рис.13):

56
Рис.13. Разрез детали Кольцо

Функции работы с файлами

Рассмотрим набор команд, необходимый для программного создания новых документов определенн
па и дальнейшего их сохранения.
Для создания документа используется команда NewDocument

Синтаксис:

NewDocument( templateName, paperSize, width, height )

где
templateName – параметр, указывающий путь к файлу, часто это

"E:\Documents and Settings\All Users\Application Data\SolidWorks\SolidWorks


09\templates\Деталь.prtdot”, если создается деталь и: Сборка.asmdot, если создается сборка и –
ртеж.drwdot – для чертежа.

paperSize – параметр, указывающий на формат создаваемого листа при создании


чертежей. Существуют следующие варианты:

swDwgPaperA3size

swDwgPaperA2size

swDwgPaperA1size

57
swDwgPaperA0size

width, height – параметры,задающие высоту и ширину листа в метрах.

При работе с несколькими открытыми документами для переключения между ними указывается
манда swap.ActivateDoc2. Эта команда используется для задания имени документа, используемое
утри SolidWorks.

Синтаксис:

Set Part = SldWorks. ActivateDoc2 ( name, silent, &errors),

где

name – имя документа для активизации или назначенное имя, если документ был только что
ан;

silent – TRUE, если диалогов и предупреждения сообщений следует избежать,

FALSE – если они должны быть показаны;

&errors – переменная булевого типа, в случае ошибки возвращает значение 1.

Сохранение документа выполняется командой SaveAs2

Синтаксис:

SaveAs2 ( newName, saveAsVersion, saveAsCopy, silent ),

где

newName – полное имя файла с расширением, которое может быть

для детали - .SLDPRT;

для сборки - .SLDASM;

для чертежа - .SLDDRW.

saveAsVersion – сохранение под определенную версию программы;

swSaveAsCurrentVersion – стандартный тип;

saveAsCopy – сохранение документа под новым именем без замены текущего имени;

silent – TRUE, если вы хотите избежать сообщений об ошибках, FALSE – в противном случае.
58
Приведем пример макроса, в котором создается деталь под именем Деталь и сохраняется под
нем vrem1. SLDPRT.

Пример 6.

Dim swApp As Object

Dim Part As Object

Dim SelMgr As Object

Dim boolstatus As Boolean

Dim longstatus As Long, Longwarnings As Long

Dim Feature As Object

Dim D, H, D3, Dm, D2, Hm, H1, d1, dm1 As Double

Const Pi = 3.141592654

Sub main()

D = 260

H = 55

d1 = 200

D2 = 50

D3 = 150

Dm = 13

dm1 = 19

Hm = 25

H1 = 15

Set swApp = Application.SldWorks

Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application


\SolidWorks\SolidWorks 2009\templates\Деталь.prtdot", 0, 0, 0)

59
swApp.ActivateDoc2 "Деталь3", False, longstatus

'Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

Part.InsertSketch2 True

boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0.003457473309609, 0, False, 0,


hing, 0)

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,


e, False, 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,


False, 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,


e, False, False, False, 0, 1, 1

'Ось через пересечение плоскостей

boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

60
boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

Part.InsertAxis2 True

'Создание кругового массива

boolstatus = Part.Extension.SelectByID2("Вытянуть2", "BODYFEATURE", 0, 0, 0, False, 4, Nothing,

boolstatus = Part.Extension.SelectByID2("Ось1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)

Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", 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.FeatureManager.FeatureCut True, False, False, 0, 0, H / 1000, 0, False, False, False, False, 0, 0,


e, False, 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,
e, False, False, 0, 1, 1

'Создание отверстия

61
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,


e, False, False, False, 0, 1, 1

'Создание кругового массива

boolstatus = Part.Extension.SelectByID2("Вытянуть6", "BODYFEATURE", 0, 0, 0, False, 4, Nothing,

boolstatus = Part.Extension.SelectByID2("Ось1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)

Set Feature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", True)

'Выполнение разреза детали пополам

'boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, True, 0, Nothing, 0)

'boolstatus = Part.Extension.SelectByID2("Справа", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

'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

swSheetProperties vSheetProps (0) vSheetProps (1) vSheetProps (2) vSheetProps (3)

vSheetProps (4) vSheetProps (4) vSheetProps (6)

GetProperties - считывает свойства чертежного документа в переменную vSheetProps

Например:

Dim swApp                       As SldWorks.SldWorks

    Dim swModel                     As SldWorks.ModelDoc2

    Dim swDraw                      As SldWorks.DrawingDoc

    Dim swSheet                     As SldWorks.Sheet

    Dim vSheetProps                 As Variant

    Dim bRet                        As Boolean

    

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swDraw = swModel

    Set swSheet = swDraw.GetCurrentSheet

    

    Debug.Print "File = " & swModel.GetPathName

    Debug.Print "  Sheet = " & swSheet.GetName

    Debug.Print "    Template = " & swSheet.GetTemplateName

63
'Retrieve current sheet settings

    vSheetProps = swSheet.GetProperties

    Debug.Print "      PaperSize      = " & vSheetProps(0)

    Debug.Print "      TemplateIn     = " & vSheetProps(1)

    Debug.Print "      Scale1         = " & vSheetProps(2)

    Debug.Print "      scale2         = " & vSheetProps(3)

    Debug.Print "      FirstAngle     = " & vSheetProps(4)

    Debug.Print "      Width          = " & vSheetProps(5)

    Debug.Print "      Height         = " & vSheetProps(6)

vSheetProps(k) – изменяет значение свойства, k – номер свойства (может изменяться от1 до 6);

SetProperties – применяет установленные свойства;

Например:

Dim swApp                   As SldWorks.SldWorks

    Dim swDraw                  As SldWorks.DrawingDoc

    Dim swSheet                 As SldWorks.Sheet

    Dim vSheetProps             As Variant

    Dim bFirstAng               As Boolean

    Dim bRet                    As Boolean

    Set swApp = Application.SldWorks

    Set swDraw = swApp.ActiveDoc

    Set swSheet = swDraw.GetCurrentSheet

    

    ' Get current sheet properties

    vSheetProps = swSheet.GetProperties

    

    ' Current sheet properties

64
    Debug.Print "Name = " + swSheet.GetName

    Debug.Print "  TemplateName              = " & swSheet.GetTemplateName

    Debug.Print "  PaperSize                 = " & vSheetProps(0)

    Debug.Print "  TemplateIn                = " & vSheetProps(1)

    Debug.Print "  Scale1                    = " & vSheetProps(2)

    Debug.Print "  scale2                    = " & vSheetProps(3)

    Debug.Print "  FirstAngle                = " & vSheetProps(4)

    Debug.Print "  Width                     = " & vSheetProps(5)

    Debug.Print "  Height                    = " & vSheetProps(6)

    

    

    

    ' Switch projection property

    bFirstAng = vSheetProps(4)

    vSheetProps(4) = Not bFirstAng

    

    ' Apply updated sheet properties

    swSheet.SetProperties _

        vSheetProps(0), _

        vSheetProps(1), _

        vSheetProps(2), _

        vSheetProps(3), _

        vSheetProps(4), _

        vSheetProps(5), _

        vSheetProps(6)

        

65
        ' Current projection property

    Debug.Print " "

    Debug.Print "  New FirstAngle setting    = " & vSheetProps(4)

vSheetProps(0) – определяет размер листа и может принимать следующие значения:

swDwgPaperAsize, swDwgPaperAsizeVertical, swDwgPaperBsize,

swDwgPaperCsize, swDwgPaperDsize, swDwgPaperEsize, swDwgPaperA4size,

swDwgPaperA4sizeVertical, swDwgPaperA3size, swDwgPaperA2size, swDwgPaperA1size,


swDwgPaperA0size, swDwgPaperUserDefined

vSheetProps(1) – tempi – определяет формат шаблона оформления чертежа, может принимать


следующие значения:

swDwgTemplateCsize, swDwgTemplateACsizeVertical, swDwgTemplateBsize,

swDwgTemplateCsize, swDwgTemplateDsize, swDwgTemplateEsize,

swDwgTemplateA4size, swDwgTemplateA4sizeVertical, swDwgTemplateA3size,

swDwgTemplateA2size, swDwgTemplateA1size, swDwgTemplateA0size,

swDwgTemplateCastom, swDwgTemplateNone

vSheetProps(2) – scale – установка первого индекса масштаба листа;

vSheetProps(3) – scale – установка второго индекса масштаба листа;

vSheetProps(4) – firstAngle принимает значение TRUE, если нужно создать первое угловое
проектирование, иначе – FALSE;

vSheetProps(5) – width – устанавливает ширину листа, если в формате листа

выбран paperSz = swDwgPaperUserDefined;

vSheetProps(6) – height– устанавливает высоту листа, если в формате листа

выбран paperSz = swDwgPaperUserDefined;

CreateDrawViewFromModelView2 – функция для создания главного вида на чертеже

Синтаксис:

66
Set myView = Part.CreateDrawViewFromModelView2(ModeName,ViewName,LocX,

LocY,LocZ),

где

ModeName – имя файла детали или сборки ( с расширением .sldprt или .sldasm), на
основе которого будет создан чертеж;

ViewName – название вида, который будет нарисован в качестве главного (спереди,


сзади и т.д.)

LocX,LocY,LocZ - координаты местоположения центра вида на листе чертежа.

Приведем пример макроса, который открывает файл модели детали и создает чертеж
ее с видом спереди.

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()

Set swApp = Application.SldWorks

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

Set Part = swApp.ActiveDoc

Dim myModelView As Object

Set myModelView = Part.ActiveView

myModelView.FrameLeft = 0

myModelView.FrameTop = 0

Set myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

Set myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

'Set Part = swApp.ActiveDoc

Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application


Data\SolidWorks\SolidWorks 2009\templates\Чертеж.drwdot", 2, 0.2794, 0.4318)

Set swSheet = Part.GetCurrentSheet

'Установка мастаба

vSheetProps = swSheet.GetProperties

vSheetProps(3) = 2

swSheet.SetProperties vSheetProps(0), vSheetProps(1), vSheetProps(2), vSheetProps(3),


vSheetProps(4), vSheetProps(5), vSheetProps(6)

Set swSheet = Part.GetCurrentSheet

Dim myView As Object

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).

Рис.14. Вид сверху для детали Кольцо

Функция для создания дополнительного вида

CreateUnfoldedViewAt3(x,y,z,notAligned)

нтаксис:

myView = Part.CreateUnfoldedViewAt3 ( x, y, z, notAligned),

x, y, z - координаты центра нового вида;

notAligned – TRUE – если нужно разорвать привязки к главному виду, иначе – FALSE.

качестве примера дополним предыдущий макрос функцией создания дополнительного вида

Пример:

69
m swApp As Object

m Part As Object

m boolstatus As Boolean

m longstatus As Long, longwarnings As Long

m ExcludedComponents As Variant

m D, H, D3, Dm, D2, Hm, H1, d1, dm1 As Double

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)

wApp.ActivateDoc2 "vrem1", False, longstatus

Set Part = swApp.ActiveDoc

Dim myModelView As Object

Set myModelView = Part.ActiveView

myModelView.FrameLeft = 0

myModelView.FrameTop = 0

Set myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized

Set myModelView = Part.ActiveView

myModelView.FrameState = swWindowState_e.swWindowMaximized
70
t Part = swApp.ActiveDoc

Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application


ta\SolidWorks\SolidWorks 2009\templates\×åðòåæ.drwdot", 2, 0.2794, 0.4318)

swSheet = Part.GetCurrentSheet

ñòàíîâêà ìàñòàáà

heetProps = swSheet.GetProperties

heetProps(3) = 2

Sheet.SetProperties vSheetProps(0), vSheetProps(1), vSheetProps(2), vSheetProps(3), vSheetProps(4),


heetProps(5), vSheetProps(6)

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)

myView = Part.CreateUnfoldedViewAt3(D / (4 * 1000) + 0.06, D / (4 * 1000) + D / (2 * 1000), 0, True)

d Sub

результате получим (Рис.15):

71
Рис.15. Формирование вида спереди

здание сечения на основе выбранного вида выполняется с помощью функции


eSectionViewAt4(x,y,z,notAligned) выполняется с помощью секущей плоскости перпендикулярной
положение которой определяется отрезком, который следует начертить перед выполнением данной
ции

нтаксис:

Set DrawView = CreateSectionViewAt4 ( X, Y, Z, SectionLabel, Options, ExcludedComponents),

где
X, Y, Z – координаты положения центра нового сечения;
SectionLabel – метка для обозначения названия вида;
Options - настройка, которая определяется swCreateSectionViewAtOptions_e;

ExcludedComponents – множество компонентов для исключения.

Рассмотрим пример построения вида сверху и сечения для детали плиты.

Пример.

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()

Set swApp = Application.SldWorks


D = 260
Set Part = swApp.OpenDoc6("F:\vlad\My_documents\drawing_SolidWorks\Metod\_
Stamp\vrem1.SLDPRT", 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "vrem1", False, longstatus
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 0
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized

'Set Part = swApp.ActiveDoc

Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application


Data\SolidWorks\SolidWorks 2009\templates\Чертеж.drwdot", 2, 0.2794, 0.4318)
Set swSheet = Part.GetCurrentSheet
'Построение чертежа
vSheetProps = swSheet.GetProperties
vSheetProps(3) = 2
swSheet.SetProperties vSheetProps(0), vSheetProps(1), vSheetProps(2), vSheetProps(3), vSheetProps(4),
vSheetProps(5), vSheetProps(6)
Set swSheet = Part.GetCurrentSheet
Dim myView As Object
Set myView =
Part.CreateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\
vrem1.SLDPRT", "*Ñïåðåäè", D / (4 * 1000) + 0.06, D / (4 * 1000) + 0.03, 0)

'Построение сечения

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

В результате получим следующий чертеж (Рис.16).

Рис.16. Формирование разреза

Примечание.Приведем пример макроса создания трех видов некоторой произвольной детали


ис17).

74
Рис.17. Деталь для выполнения примера

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()

Set swApp = Application.SldWorks


D = 260
'Открытие файла детали vremvrem1.SLDPRT
Set Part =
p.OpenDoc6("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vremvrem1.SLDPRT", 1, 0, "",
atus, longwarnings)
swApp.ActivateDoc2 "vrem1", False, longstatus
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 0
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized

'Set Part = swApp.ActiveDoc


'Создание документа чертежа
Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application
SolidWorks\SolidWorks 2009\templates\Чертеж.drwdot", 2, 0.2794, 0.4318)
Set swSheet = Part.GetCurrentSheet
75
'Установка мастаба
vSheetProps = swSheet.GetProperties
vSheetProps(3) = 2
swSheet.SetProperties vSheetProps(0), vSheetProps(1), vSheetProps(2), vSheetProps(3), vSheetProps(4),
tProps(5), vSheetProps(6)
Set swSheet = Part.GetCurrentSheet
Dim myView As Object
'Создание вида спереди
Set myView =
reateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vremvrem
DPRT", "*Спереди", D / 1000, 2 * D / 1000, 0)
'Создание вида слева
Set myView =
reateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vremvrem
DPRT", "*Слева", D / 1000 + D / 1000, 2 * D / 1000, 0)
'Создание вида сверху
Set myView =
reateDrawViewFromModelView2("F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\vremvrem
DPRT", "*Сверху", D / 1000, D / 1000, 0)

End Sub

В результате получим следующий чертеж (Рис.18).

Рис.18. Формирование трех видов

76
Функции для работы со сборкой

рка собирается из набора созданных предварительно деталей путем установки между ними
ений.
добавления деталей в сборку используется функция AddComponent.

таксис:

AddComponent ( ModeName, X,Y,Z),

ModeName – полное имя файла детали с расширением;


X,Y,Z – координаты центра детали в сборке.

новной задачей при составлении сборки является установление сопряжений между различными
ями. При этом требуется выделять отдельные элементы деталей. В этом случае координатный
б выделения в сборке малоэффективен.
этому для решения вопроса выделения элементов при составлении сборки следует при
руировании деталей присваивать имена элементам деталей, которые будут участвовать в сборке.
и выполнении операции присваивания имени элементу нужно выделить элемент и затем
лнить следующую команду:
прмер для кромки – Part.SelectedEdgeProperties “Название кромки”

для грани - Part.SelectedFaceProperties ( rgbColor, ambient, diffuse, specular, shininess, transparency,


emission, usePartProps, faceName),

где

rgbColor – цвет;

ambient – окружающий цвет, изменяется от 0 до 1;

diffuse – диффузная составляющая цвета от 0 до 1;

specular – зеркальная сотавляющая цвета от 0 до 1;

shininess – солнечная составляющая цвета от 0 до 1;

transparency – прозрачность от 0 до 1;

emission – эмиссия от 0 до 1;

usePartProps – TRUE – если грань наследует свойства, FALSE – в противном случае;

77
faceName – имя грани.

В сборке есть свои особенности выделения объектов. Это связано с тем, что в наличии имеется
колько деталей и , например, несколько из них могут иметь элемент ось.

При указании названия элемента идет следующий порядок: название элемент а-@название детали-
вание сборки.

Пример:

Boolstatus = Part.Extension.SelectByID2(“Ось1@” + “part-1@”+ “asem”,


IS”,0,0,0,True,1,Nothing,0)

После выделения двух элементов можно выполнять сопряжения с применением команды


Mate3.

Синтаксис:

Set Feature = Part.AddMate3 ( mateTypeFromEnum, alignFromEnum, flip, distance, distAbsUpperLimit,


AbsLowerLimit, gearRatioNumerator, gearRatioDenominator, angle, angleAbsUpperLimit,
eAbsLowerLimit, ForPositioningOnly, errorStatus ),

где

mateTypeFromEnum – определяет тип взаимосвязи или соответствующий индекс:

swMateCOINCIDENT

swMateCONCENTRIC

swMatePERPENDICULAR

swMatePARALLEL

swMateTANGENT

swMateDISTANCE

swMateANGLE

swMateUNKNOWN

swMateSYMMETRIC

swMateCAMFOLLOWER

swMateGEAR

swMateWIDTH

78
swMateLOCKTOSKETCH

swMateRACKPINION     

swMateMAXMATES

swMatePATH

swMateLOCK

swMateSCREW

swMateLINEARCOUPLER

swMateUNIVERSALJOINT

swMateCOORDINATE    

alignFromEnum – определяет тип привязок, принимает следующие значения:

swMateAlignALIGNED

swMateAlignANTI_ALIGNED

swMateAlignCLOSEST

flip – переключатель направления: TRUE – реверс направления – иначе – FALSE;

distance - расстояние между выделенными элементами, при использовании привязки с учетом


тояния;

distAbsUpperLimit – максимальный предел расстояния, в случае, если расстояние задается


делом, до возникновения противоречия в сопряжениях;

distAbsLowerLimit - минимальный предел расстояния, в случае, если расстояние задается


делом, до возникновения противоречия в сопряжениях;

gearRatioNumerator – нумератор сопряжения;

gearRatioDenominator - денумератор сопряжения;

angle – угол между сопрягаемыми элементами в радианах;

angleAbsUpperLimit – максимальный предел угла;

angleAbsLowerLimit – минимальный предел угла;

ForPositioningOnly – если TRUE, то проверка правильности касательного сопряжения, иначе –


SE;

79
errorStatus – сообщение об ошибке, может принимать значения:

swAddMateError_ErrorUknown // Unknown error occurred

swAddMateError_NoError // Success, no error

swAddMateError_IncorrectMateType // Unknown mate type or mate type not present in


swMateType_e

swAddMateError_IncorrectAlignment // Unknown mate alignment or mate alignment is not present


in swMateAlign_e

swAddMateError_IncorrectSelections // Incorrect selections for mate

swAddMateError_OverDefinedAssembly // Mate is over-defining the assembly

swAddMateError_IncorrectGearRatios // Mate gear ratios are invalid

Для правильного отображения дерева конструирования требуется его перестраивать с


менением функции Part.ForceRebuild3 False.

Пример. Приведем пример использования ранее созданного макроса конструирования детали с


авлением кода создания еще одной детали – кольца с последующим построением сборки. В сборке
новим сопряжения по совпадению вспомогательной геометрии ОСЬ и ПЛОСКОСТЬ.

Dim swApp As Object

Dim Part As Object

Dim SelMgr As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim Feature As Object

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

kd2 = 150 * 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

Set swApp = Application.SldWorks

Set Part = swApp.NewDocument("E:\Documents and Settings\All Users\Application


Data\SolidWorks\SolidWorks 2009\templates\Деталь.prtdot", 0, 0, 0)

swApp.ActivateDoc2 "Wheel", False, longstatus

Set Part = swApp.ActiveDoc

'Вытянуть основание

boolstatus = Part.Extension.SelectByID2("Сверху", "PLANE", 0, 0, 0, False, 0, Nothing, 0)

Part.InsertSketch2 True

Part.ClearSelection2 True

Part.CreateCircleByRadius2 0, 0, 0, kd / 2

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)


81
Part.FeatureManager.FeatureExtrusion2 True, False, True, 0, 0, kh, 0, False, False, False, False, 0, 0,
False, False, False, False, 1, 1, 1, 0, 0, False

Part.SelectionManager.EnableContourSelection = 0

'Вырез с уклоном

Set SelMgr = Part.SelectionManager

boolstatus = Part.Extension.SelectByID2("", "Face", 0, 0, 0, False, 0, Nothing, 0)

Part.InsertSketch2 True

Part.ClearSelection2 True

Part.CreateCircleByRadius2 0, 0, 0, kd1 / 2

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Arc1", "SKETCHSEGMENT", 0, 0, 0, False, 0, Nothing, 0)

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

'Выполнение отверстия с резьбой

Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

boolstatus = Part.Extension.SelectByID2("", "Face", 0, 0, kd2 / 2, True, 1, Nothing, 0)

Dim myFeature As Object

Set myFeature = Part.FeatureManager.HoleWizard3(4, 8, 146, "M12", 0, 0.0102, kh1, kh1, 0, 0, 0, 0,


2.059488517353, 1, 0, 0, -1, -1, -1, "", False, True, True, True, True, False)

'Ось через пересечение плоскостей


82
Part.ClearSelection2 True

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

boolstatus = Part.Extension.SelectByID2("Отверстие обработанное метчиком M121",


"BODYFEATURE", 0, 0, 0, False, 4, Nothing, 0)

boolstatus = Part.Extension.SelectByID2("Ось1", "AXIS", 0, 0, 0, True, 1, Nothing, 0)

Set myFeature = Part.FeatureManager.FeatureCircularPattern2(6, Pi / 3, False, "NULL", 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)

'Создание сборки

Set swApp = Application.SldWorks

' Создание документа сборки

Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

' Добавление детали в сборку

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

' Добавление сопряжение по расположению деталей на одной оси

Set SelMgr = Part.SelectionManager

boolstatus = Part.Extension.SelectByID2("Ось1@Wheel-1@Stamp", "AXIS", 0, 0, 0, True, 1,


Nothing, 0)

boolstatus = Part.Extension.SelectByID2("Ось1@plita-1@Stamp", "AXIS", 0, 0, 0, True, 1, Nothing,


0)

Set Feature = Part.AddMate2(0, 1, False, 0, 0, 0, 1, 1, 1, 1, 1, longstatus)

Part.ClearSelection2 True

'Сопряжения для выравнивания отверстий, расположенных по кругу

Part.ClearSelection2 True

boolstatus = Part.Extension.SelectByID2("Спереди@Wheel-1@Stamp", "PLANE", 0, 0, 0, True, 1,


Nothing, 0)

84
boolstatus = Part.Extension.SelectByID2("Справа@plita-1@Stamp", "PLANE", 0, 0, 0, True, 1,
Nothing, 0)

Set Feature = Part.AddMate2(0, 0, False, 0, 0, 0, 1, 1, 0, 0, 0, longstatus)

'Сопряжение, установленное на расстоянии плиты и кольца от поверхности с ‘учетом входа


кольца в паз

boolstatus = Part.Extension.SelectByID2("Сверху@Wheel-1@Stamp", "PLANE", 0, 0, 0, True, 1,


Nothing, 0)

boolstatus = Part.Extension.SelectByID2("Спереди @plita-1@Stamp", "PLANE", 0, 0, 0, True, 1,


Nothing, 0)

Set Feature = Part.AddMate2(5, 0, True, 0.005, 0.005, 0.005, 1, 1, 0, 0, 0, longstatus)

Part.ForceRebuild3 False

Part.SaveAs2 "F:\vlad\My_documents\drawing_SolidWorks\Metod\Stamp\Stamp\Stamp.SLDASM",
0, False, False

Set SelMgr = Part.SelectionManager

Part.ClearSelection2 True

End Sub

В результате получим следующую деталь(Рис.19) и сборку(Рис.20).

85
Рис.19. Модель детали

86
Рис.20. Модель сборки

Заключение. В представленном методическом пособии приведены средства и подходы разработки


росов для расширения возможностей пакета SolidWorks

Учебное текстовое издание

Куреннов Дмитрий Валерьевич


Кондратьев Владимир Иванович

РАЗРАБОТКА VBA ПРИЛОЖЕНИЙ


В SOLIDWORKS
Часть 1
87
Редактор Л.Д. Селедкова
Компьютерная верстка П.В. Володин

Рекомендовано РИС ГОУ ВПО УГТУ-УПИ


Разрешен к публикации 10.11.12.
Формат 60х90 1/8 Объем 1,5 уч.-изд. л.

Издательство ГОУ-ВПО УГТУ-УПИ


620002, Екатеринбург, ул. Мира, 19

Информационный портал
ГОУ ВПО УГТУ-УПИ
http://www.ustu.ru

88

Вам также может понравиться