Как добавить деталь в сборку 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 ExplicitDim swApp As SldWorks.SldWorksDim model As ModelDoc2Dim assem As AssemblyDocConst compName As String = "ring.SLDPRT"Dim compNamePath As StringDim 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.SldWorksSet model = swApp.ActiveDocSet 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, warnDebug.Print errDebug.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 ExplicitDim swApp As SldWorks.SldWorksDim model As ModelDoc2Dim assem As AssemblyDocConst compName As String = "ring.SLDPRT"Dim compNamePath As StringDim err As Long, warn As LongSub main()Set swApp = Application.SldWorksSet model = swApp.ActiveDocSet assem = modelcompNamePath = swApp.GetCurrentMacroPathFolder & "\" & compNameswApp.OpenDoc6 compNamePath, swDocPART, swOpenDocOptions_Silent, "", err, warnDebug.Print errDebug.Print warnassem.AddComponent5 compNamePath, 0, "", False, "", 0, 0, 0swApp.CloseDoc compNamePathEnd 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