Как добавить деталь в сборку SW с помощью макроса
Условие: Есть файл детали (находится в одной папке с макросом). У нас открыт документ сборки. Запускаем макрос и эта деталь появляется в этой сборке.
Для того чтобы добавить компонент в сборку существует метод: AddComponent5 (до версии SW 2013 №5 точно) интерфейса IAssemblyDoc. Этот интерфейс нужен для работы с файлом сборки: добавлять и удалять компоненты, менять условия сопряжения, скрывать компоненты и т.д.
Метод AddComponent5 принимает 8 параметров и возвращает объект класса Component2 (это деталь в файле сборки).
component2 = [ISldWorks].AddComponent5 (compName, ConfigOption, NewCongfigname, UseConfigForPartReferences, ExistingConfigName, X,Y,Z )
compName. Тип string. Полный путь до файла детали.
configOption.Тип integer или long. Режим открытия файла. Возможны три значения:
§ 0 – добавить деталь или сборку в последней сохраненной конфигурации (наш случай)
§ 1 – добавить сборку со всеми решенными компонентами
§ 2 – добавить сборку со всеми погашенными компонентами
NewCongfigname. Тип string. Имя для новой конфигурации сборки. Нужно указывать, только если в configOption стоит 1 или 2.
UseConfigForPartReferences. Тип Boolean. True – использовать конфигурацию указанную в параметре ExistingConfigName.
ExistingConfigName. Тип string. Имя конфигурации загруженного компонента. Применяется если в предыдущем параметре (UseConfigForPartReferences) находится true.
X,Y,Z. Тип double.Координаты расположения центра компонента (добавляемой детали) в сборке. Эти параметры являются приблизительными и не могут служить для точного позиционирования детали в сборке.
ВАЖНО: Для того чтобы воспользоваться методом AddComponent5, нужно чтобы файл, который мы хотим добавить в сборку был уже загружен в память программы. Другими словами, должен быть открыт файл детали или файл сборки, где находится эта деталь.
Перейдем к коду:
Visual Basic
Option Explicit Dim swApp As SldWorks.SldWorks Dim model As ModelDoc2 Dim assem As AssemblyDoc Const compName As String = "ring.SLDPRT" Dim compNamePath As String Dim err As Long, warn As Long
Option Explicit Dim swApp As SldWorks.SldWorks Dim model As ModelDoc2 Dim assem As AssemblyDoc Const compName As String = "ring.SLDPRT" Dim compNamePath As String Dim err As Long, warn As Long |
Объявляем переменные.
o assem – объект класса AssemlyDoc (дочерний класс от ModelDoc2)
o compName – константа с именем файла. У меня это “ring.SLDPRT”
o compNamePath – здесь будет хранится полный путь до файла.
o err и warn – переменные для хранения ошибок и предупреждений
Visual Basic
Set swApp = Application.SldWorks Set model = swApp.ActiveDoc Set assem = model
Set swApp = Application.SldWorks Set model = swApp.ActiveDoc Set assem = model |
Получаем доступ к интерфейсу IAssemblyDoc.
Visual Basic
compNamePath = swApp.GetCurrentMacroPathFolder & "\" & compName
compNamePath = swApp.GetCurrentMacroPathFolder & "\" & compName |
Нам надо получить полный путь до нужного файла, чтобы с ним работать. Так как файл детали (по условию) находится в той же папке, что и макрос, то можно воспользоваться методом GetCurrentMacroPathFolder интерфейса ISldWorks. Он возвращает строку, которая содержит полный путь до папки со скриптом, но без конечного слеша(\).
Visual Basic
swApp.OpenDoc6 compNamePath, swDocPART, swOpenDocOptions_Silent, "", err, warn Debug.Print err Debug.Print warn
swApp.OpenDoc6 compNamePath, swDocPART, swOpenDocOptions_Silent, "", err, warn Debug.Print err Debug.Print warn |
Чтобы открыть файл детали, воспользуемся методом OpenDoc6 интерфейса ISldWorks. Подробно на нем сейчас останавливаться не буду. Смотрите пост: как открыть файл детали.
assem.AddComponent5 compNamePath, 0, "", False, "", 0, 0, 0
assem.AddComponent5 compNamePath, 0, "", False, "", 0, 0, 0 |
Итак, гвоздь программы, уже описанный метод AddComponent5. Передаем 8 параметров.
· 1 – compNamePath – полный путь до файла
· 2 – У нас файл детали, поэтому пишем 0
· 3 – Никакие конфигурации указывать не надо, так как у нас 0 во втором параметре
· 4 – Никакой конфигурации для детали указывать не будем. Пишем false
· 5 –Последние три цифры – координаты расположения центра детали.
Visual Basic
swApp.CloseDoc compNamePath
swApp.CloseDoc compNamePath |
После того, как деталь добавлена в сборку, её можно закрыть. Для этого воспользуемся свойством CloseDoc интерфейса ISldWorks. Достаточно одного параметра – полного пути до файла.
Полный код программы:
Visual Basic
Option Explicit Dim swApp As SldWorks.SldWorks Dim model As ModelDoc2 Dim assem As AssemblyDoc Const compName As String = "ring.SLDPRT" Dim compNamePath As String Dim err As Long, warn As Long Sub main() Set swApp = Application.SldWorks Set model = swApp.ActiveDoc Set assem = model compNamePath = swApp.GetCurrentMacroPathFolder & "\" & compName swApp.OpenDoc6 compNamePath, swDocPART, swOpenDocOptions_Silent, "", err, warn Debug.Print err Debug.Print warn assem.AddComponent5 compNamePath, 0, "", False, "", 0, 0, 0 swApp.CloseDoc compNamePath End Sub
Option Explicit Dim swApp As SldWorks.SldWorks Dim model As ModelDoc2 Dim assem As AssemblyDoc Const compName As String = "ring.SLDPRT" Dim compNamePath As String Dim err As Long, warn As Long Sub main() Set swApp = Application.SldWorks Set model = swApp.ActiveDoc Set assem = model compNamePath = swApp.GetCurrentMacroPathFolder & "\" & compName swApp.OpenDoc6 compNamePath, swDocPART, swOpenDocOptions_Silent, "", err, warn Debug.Print err Debug.Print warn assem.AddComponent5 compNamePath, 0, "", False, "", 0, 0, 0 swApp.CloseDoc compNamePath End Sub |