Jump to content

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


Evgen_e46

Recommended Posts

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

 

Link to post
Share on other sites


UnPinned posts
Kelny
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 - так что будьте внимательны и последовательны.

Edited by Kelny
Link to post
Share on other sites
Evgen_e46
14 часов назад, Kelny сказал:

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

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

 

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

Link to post
Share on other sites
Kelny
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

 

  • Нравится 2
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • Fedor
      Наверное ветровая нагрузка даст большее горизонтальное воздействие. В принципе удобно заменять ветровую нагрузку сейсмической, проще считать ... 
    • tav78
      Добрый день, прошу помощи. Учусь работать с Солиде. Столкнулся с непонятной ситуацией. К сожалению  из-за недостатка сообщений, загружать файлы в форум я не могу, поэтому выложил картинки и модель в Солиде 2022 на Майл диске. https://cloud.mail.ru/public/ysFQ/BXg7EXKV1 (ссылке тоже по человечески создать я не могу) Учусь создавать детали в сборке сверху-вниз. Создал эскиз шатуна в сборке (Рис.1) и начинаю создавать на основе эскиза детали и элементы. Все хорошо, создал деталь Шатун (Рис.2), потом создал деталь Скобу, но на этапе создания отверстия под болт в детали «Скоба» обнаружил, что геометрия этого отверстия не проецируется на плоскость эскиза, точнее она вообще почему то не выделяется при попытке ее выделить (Рис.3). Другая геометрия этого же эскиза проецируется, можно спроецировать весь эскиз, а потом удалить лишнею геометрию, но отдельно геометрия отверстия не проецируется. Какая у Солида в этом логика понять не могу, все время сталкиваюсь, что часть геометрии в сборках сверху-вниз не цепляется для использования, до этого работал в Инвенторе, там все цеплялось.
    • статист
    • Bot
      Мы приближаем время приятных знаков внимания и запускаем предпраздничное бонусное предложение. Купите IYNO Start до 29 декабря и получите 3 месяца использования бесплатно*. Бонус! Расширенные возможности из IYNO PRO на весь срок действия подписки на IYNO Start: Автоматизированное создание лотов для организации закупок и включение их в договоры подряда. Теперь обновление моделей от проектировщика автоматически актуализирует не только сводную ведомость объёмов работ, но и лоты, сформированные на её основе. Детальный учёт факта выполнения работ по конкретным конструкциям. Это позволит строить аналитические отчёты в любых срезах, мониторить темпы выполнения работ по захваткам, подрядчикам или договорам, основываясь на достоверных данных информационной модели. Встроенная конфигурируемая BI-система для представления данных внутри IYNO — это возможность в реальном времени формировать отчёты о плановых и фактически выполненных объёмах работ. Специалистам больше [...] View the full article
    • Povar1
      Реализовать не сложно но не логичней коррекции брать в цикле смены инструмента через параметр #4120 а из поста убрать вывод Н и D.
    • maxx2000
      @mrvcf1 Токарно-карусельный например, где нет оси Y. Или G12 Circular Pocket Milling CW / G13 Circular Pocket Millin... (haascnc.com) т.е. в одном кадре обработка кармана. Так что о конкретном преимуществе судить тяжело
    • kukuj
      У HAASовцев универсальная версия документации. Заходишь сюда или сюда и ищешь там, то, что надо. У студиозов думалка не работает: откуда взять информацию?
    • CottonCow
      Пытался построить сетку ЦИЛИНДРА в Ансисе, выдает ошибку   The mesh generation did not complete due to poor quality elements or incorrect input. Please try meshing with another mesh method or different mesh options. При попытке обновить mesh 
    • mrvcf1
      Все зависит от оси С. Возможно на каких-то станках и есть преимущество.
    • Борман
      Проект проходит Главгосэкспертизу как положено.   Должен, вопрос в нормах. Либо трубных, либо сосудных. И почему.   Сделать на стройке из трубы емкость для сбора конденсата, или под импульсный газ - это вообще в порядке вещей, и никогда вопросов не было, пока какой то умник не сделал это на заводе:)   Спасибо за ответы.
×
×
  • Create New...