Как добавить деталь в сборку 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

Наши рекомендации