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