Наверх

Пакетное сохранение конфигураций модели в SOLIDWORKS и Autodesk Inventor

29 января 2017 г.

SOLIDWORKS

При создании 3D-моделей в SolidWorks часто удобно использовать такую вещь как конфигурации. Это разновидности детали или сборки внутри одного файла. Если рассматривать на примере переменного резистора, то конфигурациями удобно делать модели с различной длиной вала:

И если создавать конфигурации в SOLIDWORKS можно при помощи таблиц, то вот сохранение всех конфигураций в раздельные STEP-файлы нужно делать вручную, что крайне неудобно. А если потом заметишь в модели ошибку и недочет, после исправления которого нужно все снова сохранять...

Но в SolidWorks же есть VBA! А значит можно написать макрос, который все это автоматизирует. После некоторого поиска и копания в VBA получился следующий код:

Текст макроса Option Explicit Sub main() Dim swApp As SldWorks.SldWorks Set swApp = Application.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swModel = swApp.ActiveDoc Dim swConfig As SldWorks.Configuration Set swConfig = swModel.GetActiveConfiguration Dim fname, current As String Dim step As Long Dim configs As Variant step = swApp.SetUserPreferenceIntegerValue(swStepAP, 214) 'Сохранять в формат STEP AP214 fname = swModel.GetPathName fname = Mid(fname, 1, InStr(fname, ".") - 1) 'Записать путь к файлу с именем файла без расширения current = swModel.GetActiveConfiguration.name 'Имя текущей конфигурация configs = swModel.GetConfigurationNames 'В переменную записывается весь список конфигураций Dim i As Long For i = 0 To UBound(configs) 'Цикл по всем конфигурациям модели swModel.ShowConfiguration2 (configs(i)) Dim name As String name = fname + configs(i) + ".STEP" 'Путь к файлу для новой конфигурации Call swModel.SaveAs3(name, 0, 0) 'Сохраняем как STEP открытый документ Next i 'К следующей конфигурации MsgBox ("Saved " + CStr(i) + " file(s)!"), vbInformation, "Done" swModel.ShowConfiguration2 (current) 'Возвращаем документ к исходной конфигурации End Sub

Немного позже я добавил макросу интерфейс, позволяющий:

  1. Выбирать префикс к именам создаваемых файлов и имя подпапки, создаваемой для сохранения:


  2. Наблюдать процесс сохранения с отображением процентов и списка созданных файлов:


  3. Прерывать выполнение макроса:


Скачать макрос (SWP)


24 октября 2021 г.

Autodesk Inventor

Со времени создания макроса для SOLIDWORKS прошло несколько лет, утекло много воды, и я переехал на Autodesk Inventor :)

Создав параметрическую деталь или сборку и заполнив таблицу параметров, в модели станет доступно несколько конфигураций.

К сожалению, в нем я также не обнаружил возможности создать набор файлов для всех конфигураций. Снова пришлось лезть в редактор VBA и писать макрос... Принцип работа макроса точно такой же - проходим в цикле по всем конфигурациям модели или сборки и сохраняем каждую в отдельный файл.

Текст макроса Public Sub SaveConfigurationsToSTEP() On Error GoTo Canceled ' Get the STEP translator Add-In Dim oSTEPTranslator As TranslatorAddIn Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}") If oSTEPTranslator Is Nothing Then MsgBox ("Could not access STEP translator!"), vbCritical, "Error" GoTo Canceled End If Dim oContext As TranslationContext Set oContext = ThisApplication.TransientObjects.CreateTranslationContext Dim oOptions As NameValueMap Dim oDocument As Document Set oDocument = ThisApplication.ActiveDocument Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap 'File Type Check and iLogic Presence Dim iType As Integer iType = 0 '0 - No iLogic, 1 - iPart, 2 - iAssembly If (Right(oDocument.DisplayName, 3) = "ipt") Then If (oDocument.ComponentDefinition.IsiPartFactory) Then iType = 1 End If ElseIf (Right(oDocument.DisplayName, 3) = "iam") Then If (oDocument.ComponentDefinition.IsiAssemblyFactory) Then iType = 2 End If End If If (iType = 0) Then MsgBox ("There are no configurations in the document!"), vbCritical, "Error" GoTo Canceled Else If oSTEPTranslator.HasSaveCopyAsOptions(ThisApplication.ActiveDocument, oContext, oOptions) Then ' Set application protocol ' 2 = AP 203 - Configuration Controlled Design ' 3 = AP 214 - Automotive Design oOptions.Value("ApplicationProtocolType") = 3 ' Other options... 'oOptions.Value("Author") = "" 'oOptions.Value("Authorization") = "" 'oOptions.Value("Description") = "" 'oOptions.Value("Organization") = "" oContext.Type = kFileBrowseIOMechanism Dim oData As DataMedium Set oData = ThisApplication.TransientObjects.CreateDataMedium 'Set filepath as original document filepath Dim FilePath As String FilePath = Left(oDocument.File.FullFileName, InStrRev(oDocument.File.FullFileName, "\")) 'Name prefix request Dim NamePrefix As String NamePrefix = InputBox("Enter the file prefix", "Names", "") If StrPtr(NamePrefix) = 0 Then GoTo Canceled End If 'Directory request Dim Directory As String Directory = InputBox("Enter the sub-directory name for saving to " & FilePath, "Directory name", "STEP") If StrPtr(Directory) = 0 Then GoTo Canceled Else Directory = Directory & "\" End If 'Save number of current configuration Dim ActiveIndex As Integer 'Create a new ProgressBar object. Dim oProgressBar As ProgressBar 'Create Loop Index Dim i As Integer If (iType = 1) Then 'Check to see it it's an iPart 'Set a reference to the iPart Factory Dim oiPartFactory As iPartFactory Set oiPartFactory = oDocument.ComponentDefinition.iPartFactory ActiveIndex = oiPartFactory.DefaultRow.Index Set oProgressBar = ThisApplication.CreateProgressBar(True, oiPartFactory.TableRows.Count, "Saving progress") ' Set the message for the progress bar oProgressBar.Message = "Saving configurations to STEP files" 'Loop through all the rows in the iPart table and set that row to the active iPart For i = 1 To oiPartFactory.TableRows.Count Dim IPF As iPartFactory Set IPF = oDocument.ComponentDefinition.iPartFactory Dim oPRow As iPartTableRow Set oPRow = IPF.TableRows.Item(i) IPF.DefaultRow = oPRow oProgressBar.Message = "Saving " & i & " files" oProgressBar.UpdateProgress oData.FileName = FilePath & Directory & NamePrefix & oPRow.MemberName & ".step" Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oData) Next 'Reset to active configuration Set oPRow = IPF.TableRows.Item(ActiveIndex) IPF.DefaultRow = oPRow ElseIf (iType = 2) Then 'Check to see it it's an iAssembly 'Set a reference to the iAssembly Factory Dim oiAssemblyFactory As iAssemblyFactory Set oiAssemblyFactory = oDocument.ComponentDefinition.iAssemblyFactory ActiveIndex = oiAssemblyFactory.DefaultRow.Index Set oProgressBar = ThisApplication.CreateProgressBar(True, oiAssemblyFactory.TableRows.Count, "Saving progress") ' Set the message for the progress bar oProgressBar.Message = "Saving configurations to STEP files" 'Loop through all the rows in the iAssembly table and set that row to the active iAssembly For i = 1 To oiAssemblyFactory.TableRows.Count Dim IAF As iAssemblyFactory Set IAF = oDocument.ComponentDefinition.iAssemblyFactory Dim oARow As iAssemblyTableRow Set oARow = IAF.TableRows.Item(i) IAF.DefaultRow = oARow oProgressBar.Message = "Saving " & i & " files" oProgressBar.UpdateProgress oData.FileName = FilePath & Directory & NamePrefix & oARow.MemberName & ".step" Call oSTEPTranslator.SaveCopyAs(ThisApplication.ActiveDocument, oContext, oOptions, oData) Next 'Reset to active configuration Set oARow = IAF.TableRows.Item(ActiveIndex) IAF.DefaultRow = oARow Else GoTo Canceled End If 'Terminate the progress bar oProgressBar.Close 'Create message MsgBox ("Saved " + CStr(i) + " file(s)!"), vbInformation, "Done" Else 'Create error message MsgBox ("STEP translator error!"), vbCritical, "Error" End If End If Canceled: End Sub

У этого макроса также есть простой интерфейс, позволяющий выбирать префикс к именам создаваемых файлов и имя подпапки, создаваемой для сохранения в корневом каталоге модели:

Процесс сохранения можно наблюдать в строке состояния окна Autodesk Inventor:

По окончании работы макроса в поддиректории STEP будет создана группа файлов с выбранным префиксом:

Скачать макрос (TXT)