Перейти к публикации

Вставка сборки в сборку через макрос (SW)


Evgen_e46

Рекомендованные сообщения

Всем привет! Недавно начал изучать макросы от SW, поэтому прошу помощи у более опытных. Если тема создана не в том месте, прошу перенести её в нужное место или укажите как это сделать пожалуйста.

 

Суть проблемы - имеется одна огромная сборка, в неё вставляются сборки поменьше (изделия состоящие из набора деталей). Маленьких сборок (читай далее "изделий") очень много, поэтому для упрощения их выбора был написан макрос в виде формы с выбором изделий из заданного списка и кнопкой "Добавить". Файлы берутся из определённой папки. Однако после нажатия кнопки "Добавить" ничего не происходит - изделие не добавляется, даже не отображается в дереве изделий слева. Код написал пока что для вставки одной сборки, чтобы проверить работоспособность, и написал двумя способами, но оба не работают.

 

Собственно вопрос - подскажите пожалуйста это я ошибся в коде или или что-то не то с SW? В SW перезаходил, комп перезагружал уже чтобы наверняка.

 

Вариант кода №1

Option Explicit

' Creating variable for Solidworks application
Dim swApp As SldWorks.SldWorks
________________________________________________

' Call when user load
Private Sub UserForm_Initialize()
  
  With ListBox1
    .AddItem "х1"           ' Adding х1 in List Box
    .AddItem "х2"           ' Adding х2 in List Box
    .ListIndex = 0          ' Select list index for default value to show in listbox
  End With
End Sub
________________________________________________

Private Sub AddFileButton_Click()
      
    Dim swApp As SldWorks.SldWorks
    Dim swPart As SldWorks.ModelDoc2
    Dim boolstatus As Boolean
    Dim longstatus As Long, longwarnings As Long
    Dim filePath As String
    
      If ListBox1.Value = "х1" Then
      
        Set swApp = Application.SldWorks
      
        Set swPart = swApp.ActiveDoc
        
        filePath = "C:\Users\en5\Desktop\SW Details\x1.SLDASM"
      
        Dim swInsertedComponent As Component2
        Set swInsertedComponent = swPart.AddComponent5("filePath", 0, "", False, "", 0, 0, 0)
      
      End If
      
  
  ' Hiding the Window after opening the selected document
  OpenFormAddSchL.Hide
  
End Sub

 

Вариант кода №2

Option Explicit

' Creating variable for Solidworks application
Dim swApp As SldWorks.SldWorks


' Call when user load
Private Sub UserForm_Initialize()
  
  With ListBox1
    .AddItem "x1"           ' Adding x1 in List Box
    .AddItem "x2"           ' Adding x2 in List Box
    .ListIndex = 0          ' Select list index for default value to show in listbox
  End With
End Sub

Private Sub AddFileButton_Click()
      
    Dim swApp As SldWorks.SldWorks
    Dim swPart As SldWorks.ModelDoc2
    Dim tmpObj As SldWorks.ModelDoc2
    Dim errors As Long
    Dim longwarnings As Long
    Dim FilePath1 As String
    Dim FilePath2 As String
    
      If ListBox1.Value = "x1" Then
      
        Set swApp = Application.SldWorks
      
        Set swPart = swApp.ActiveDoc
        
        FilePath1 = swPart.GetPathName
        FilePath2 = "C:\Users\en5\Desktop\SW Details\x1.SLDASM"
        
        Set tmpObj = swApp.OpenDoc6(FilePath2, 1, 32, "", errors, longwarnings)
        Set swPart = swApp.ActivateDoc3(FilePath1, True, 0, errors)
      
        Dim swInsertedComponent As Component2
        Set swInsertedComponent = swPart.AddComponent5("filePath", 0, "", False, "", 0, 0, 0)
        
        swApp.CloseDoc FilePath2
      
      End If
      
  
  ' Hiding the Window after opening the selected document
  OpenFormAddSchL.Hide
  
End Sub

 

Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts
3 часа назад, Evgen_e46 сказал:

filePath = "C:\Users\en5\Desktop\SW Details\x1.SLDASM"

 

Dim swInsertedComponent As Component2

Set swInsertedComponent = swPart.AddComponent5("filePath", 0, "", False, "", 0, 0, 0)

 

3 часа назад, Evgen_e46 сказал:

Собственно вопрос - подскажите пожалуйста это я ошибся в коде или или что-то не то с SW?

Будьте внимательны с кавычками, они коварны.

Это как в старом мультике фраза КАЗНИТЬ НЕЛЬЗЯ ПОМИЛОВАТЬ, в зависимости от расстановки запятой смыл меняется на противоположный.

 

Всё просто, вы назначаете переменную с путём: filePath = "C:\Users\en5\Desktop\SW Details\x1.SLDASM"

Но потом переменную filePath ни где не используете, а вместо этого открываете файл с именем которого не существует "filePath" (то есть добавляете с именем текста в кавычках, а не путь прописанный в переменной).

А должны бы были добавлять существующий файл и указать переменную, в которую как раз внесён путь, без кавычек:

Set swInsertedComponent = swPart.AddComponent5(filePath, 0, "", False, "", 0, 0, 0)

Во втором примере всё тоже самое, но там вы filePath не объявляете и там нужен FilePath2 - так что будьте внимательны и последовательны.

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
14 часов назад, Kelny сказал:

Но потом переменную filePath ни где не используете, а вместо этого открываете файл с именем которого не существует "filePath" (то есть добавляете с именем текста в кавычках, а не путь прописанный в переменной).

Благодарю, что указали на ошибку, теперь буду внимателен с кавычками. Исправил с двух вариантах.

 

Однако после исправления всё равно не происходит никакого добавления файла. Может это быть связано, что не хватает какой-то библиотеки или ещё чего? Заметил, что метод AddComponent5 отсутствует в списке, если выделить его и через пкм нажать "List Properties/Methods". Может это что-то значить?

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, Evgen_e46 сказал:

Однако после исправления всё равно не происходит никакого добавления файла.

Вероятно из-за того, что файл не был предварительно загружен, ведь согласно справке: 

Цитата

Метод AddComponent5 (IAssemblyDoc)

...

Путь к предварительно загруженной детали или сборке для добавления в качестве компонента (см. Примечания )

...

Примечания

Указанный файл должен быть загружен в память. Файл загружается в память, когда вы загружаете файл в сеансе SolidWorks ( ISldWorks::OpenDoc6 ) или открываете сборку, которая уже содержит файл.

А если файл не загружен (как у вас), то так понимаю предлагается использовать другие методы вставки:

Цитата

Если вы хотите добавить компонент в положение относительно корневого компонента, используйте  IComponent2::Transform2 для изменения положения компонента сразу после вызова этого метода. Или вы можете использовать IAssemblyDoc::AddComponents  или IAssemblyDoc::AddComponents2  , чтобы указать преобразование при вставке компонента, вставить сразу столько компонентов, сколько нужно, а также повернуть и масштабировать компонент с помощью матрицы преобразования.

ВАЖНО: параметры x, y и z этого метода относятся к ограничивающей рамке компонента. Используйте этот метод только в том случае, если вы хотите приблизительно расположить компонент. Используйте IComponent2::Transform2, если вы хотите более точно расположить компонент.

https://help.solidworks.com/2010/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iassemblydoc~addcomponent5.html

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...