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

Сделай свою работу в Solidworks эффективнее


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

Доброе время суток уважаемые форумчане
Обращаюсь к Вам с советом по поводу следующей ситуации, опишу алгоритм действий, чтобы было понятнее, в солидворкс занимаюсь проектированием мебели,
есть уже заготовки стандартных элементов (тумбочек и антресолей), если разместить сборку с такой заготовкой в Design Library при создании общего сборника скажем кухни, при перетаскивании этой заготовленной сборки с Design Library есть ли макрос который позволял бы указывать папку куда нужно сделать копию, и изменять название (добавлять какой-то префикс или суффикс)
Сейчас работаю копируя заготовленную сборку с изменением имени сборки и всех элементов входящих в нее через Pack and Go

Буду благодарен за любой совет

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


05.11.2022 в 15:24, Sagrado911 сказал:

Сейчас работаю копируя заготовленную сборку с изменением имени сборки и всех элементов входящих в нее через Pack and Go

Буду благодарен за любой совет

SaveAsCopyReplace :

https://cccp3d.ru/topic/6071-сделай-свою-работу-в-solidworks-эффективнее/?do=findComment&comment=1392001

 

05.11.2022 в 15:24, Sagrado911 сказал:

есть уже заготовки стандартных элементов (тумбочек и антресолей)

Возможно стоит глянуть инструмент DriveWorks:

https://help.solidworks.com/2021/russian/SolidWorks/driveworksxpress/c_welcome_driveworkxpress.htm

https://sapr.ru/article/24486

Ссылка на сообщение
Поделиться на других сайтах
16 hours ago, Kelny said:

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

 

16 hours ago, Kelny said:

Способ хороший, но также как и метод с использованием Pack and Go занимает много времени, нужно сгенерировать модель, а уже тогда вставлять ее в сборку.

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

ПеКо версия 3.2.6.3   (SaveAsCopyReplace)

- поправил запоминание крыжика 'Удалить' при переключении опций замены (сбрасывался на изначально загруженное состояние), как следствие: если он погашен (отключено "заменить модель в сборке") - не удалять;

- исчезновение главного окна после запуска процесса копирования/переименования (оставался как бы фриз его причём иногда с предыдущими значениями, что пугало меня )) всё ли верно выбрал/ввёл);

- добавил автозакрытие открывшейся модели для переименования при нажатии 'Отмена' (иной раз собрался переименовать и в последний момент передумал, а модель-жертва/донор открытой осталась).

 

ПеКо3263(SaveAsCopyReplace).zip

 

решил переименовать макрос. наименование файла макроса и файла настроек пока прежние, но в дальнейшем изменятся.

 

по поводу переименования за один раз нескольких - сам хочу )) пока думаю иногда что-то пробую, когда появляются время, настроение и желание.

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

 

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

по поводу переименования за один раз нескольких - сам хочу ))

насчет группового переименования: у меня возникла мысль что это можно сделать по аналогии с редактором тэгов в аудиоплеере АИМП.

Снимок экрана 2022-11-14 100625.jpg

То есть как принято у нас обычно разделение обозначение происходит точками, на пример:
ИМС066.200.000
Номер проекта.Номерузла.Номерчертежа. 

Макрос вполне мог бы опираться на точки или пользовател создает свой шаблон. А дальше автонумерование. И обязательно сделать превью имен файлов.
 

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

Посоветуйте пожалуйста.

 

У меня есть сборка, в сборке несколько деталей, несколько сборок.

Мне нужно пройтись по всей сборке, взять все детали и сохранить их в STEP

 

Макрос писать я уже почти начал, но потом подумал - вдруг есть уже готовый ?

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

Макрос писать я уже почти начал, но потом подумал - вдруг есть уже готовый ?

Такого нет, надо будет сделать :) Есть макрос у Артёма Татуревича который сохраняет открытую деталь/сборку в разные форматы одновременно, в том чисте и STEP может. Вот ссылка: https://www.codestack.net/solidworks-api/import-export/export-multi-formats/

А вот немного подправленный код для сохранения в STEP и 3D-PDF одновременно:

'**********************
'Copyright(C) 2022 Xarial Pty Limited
'Reference: https://www.codestack.net/solidworks-api/import-export/export-multi-formats/
'License: https://www.codestack.net/license/
'**********************

Const ALL_CONFIGS As Boolean = False
Const OUT_FOLDER As String = ""
Const STEP_VERSION As Long = 214 '203 or 214
Const PDF_3D As Boolean = True 'True to export 3D PDF

Dim OUT_NAME_TEMPLATES As Variant

Dim swApp As SldWorks.SldWorks

Sub main()
        
    Dim origStepVersion As Long
        
    OUT_NAME_TEMPLATES = Array("PDFs\<_FileName_>_<_ConfName_>_<PartNo>.pdf", "STPs\<_FileName_>_<_ConfName_>_<PartNo>.step")
    
    Set swApp = Application.SldWorks
    
try_:
    On Error GoTo catch_
    
    Dim swModel As SldWorks.ModelDoc2
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        Err.Raise vbError, "", "Please open document"
    End If
    
    If swModel.GetPathName() = "" Then
        Err.Raise vbError, "", "Please save the model"
    End If
    
    Dim outFolder As String
    
    If Not TryGetOutDirFromArguments(outFolder) Then
        outFolder = OUT_FOLDER
    End If
    
    ReadOptions origStepVersion
    SetupOptions STEP_VERSION
    
    ExportFile swModel, OUT_NAME_TEMPLATES, ALL_CONFIGS, outFolder
    
    GoTo finally_
    
catch_:
    swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk
finally_:

    SetupOptions origStepVersion

End Sub

Sub ReadOptions(ByRef stepVersion As Long)

    stepVersion = swApp.GetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swStepAP)
    
End Sub

Sub SetupOptions(stepVersion As Long)
    
    If False = swApp.SetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swStepAP, stepVersion) Then
        Err.Raise vbError, "", "Failed to set Step Export version to " & stepVersion
    End If
    
End Sub

Sub ExportFile(model As SldWorks.ModelDoc2, vOutNameTemplates As Variant, allConfigs As Boolean, outFolder As String)
    
    Dim i As Integer
    Dim j As Integer
    
    Dim curConf As String
    
    If model.GetType() = swDocumentTypes_e.swDocDRAWING Then
        Dim swDraw As SldWorks.DrawingDoc
        Set swDraw = model
        curConf = swDraw.GetCurrentSheet().GetName
    Else
        curConf = model.ConfigurationManager.ActiveConfiguration.Name
    End If
    
    Dim vConfs As Variant
    
    If allConfigs Then
        If model.GetType() = swDocumentTypes_e.swDocDRAWING Then
            vConfs = model.GetSheetNames()
        Else
            vConfs = model.GetConfigurationNames()
        End If
    Else
        Dim sConfs(0) As String
        sConfs(0) = curConf
        vConfs = sConfs
    End If
    
    For i = 0 To UBound(vConfs)
    
        If model.GetType() = swDocumentTypes_e.swDocDRAWING Then
            curConf = swDraw.ActivateSheet(CStr(vConfs(i)))
        Else
            model.ShowConfiguration2 CStr(vConfs(i))
        End If
                
        For j = 0 To UBound(vOutNameTemplates)
            
            Dim errs As Long
            Dim warns As Long
        
            Dim outNameTemplate As String
            outNameTemplate = vOutNameTemplates(j)
            
            Dim outFilePath As String
            outFilePath = ComposeOutFileName(outNameTemplate, model, outFolder)

            Dim outDir As String
            outDir = Left(outFilePath, InStrRev(outFilePath, "\"))
    
            CreateDirectories outDir
            
            Dim swExportData As Object
            
            If LCase(GetExtension(outFilePath)) = LCase("pdf") Then
                Dim swExportPdfData As SldWorks.ExportPdfData
                Set swExportPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
                swExportPdfData.ViewPdfAfterSaving = False
                swExportPdfData.ExportAs3D = PDF_3D
                Set swExportData = swExportPdfData
            Else
                Set swExportData = Nothing
            End If
            
            If False = model.Extension.SaveAs(outFilePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExportData, errs, warns) Then
                Err.Raise vberrror, "", "Failed to export to " & outFilePath
            End If
            
        Next
        
    Next
    
    If model.GetType() = swDocumentTypes_e.swDocDRAWING Then
        curConf = swDraw.ActivateSheet(curConf)
    Else
        model.ShowConfiguration2 curConf
    End If
    
End Sub

Function ComposeOutFileName(template As String, model As SldWorks.ModelDoc2, outFolder As String) As String

    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    
    regEx.Global = True
    regEx.IgnoreCase = True
    regEx.Pattern = "<[^>]*>"
    
    Dim regExMatches As Object
    Set regExMatches = regEx.Execute(template)
    
    Dim i As Integer
    
    Dim outFileName As String
    outFileName = template
    
    For i = regExMatches.Count - 1 To 0 Step -1
        
        Dim regExMatch As Object
        Set regExMatch = regExMatches.Item(i)
                    
        Dim tokenName As String
        tokenName = Mid(regExMatch.Value, 2, Len(regExMatch.Value) - 2)
        
        outFileName = Left(outFileName, regExMatch.FirstIndex) & ResolveToken(tokenName, model) & Right(outFileName, Len(outFileName) - (regExMatch.FirstIndex + regExMatch.Length))
    Next
    
    ComposeOutFileName = ReplaceInvalidPathSymbols(GetFullPath(model, outFileName, outFolder))
    
End Function

Function ReplaceInvalidPathSymbols(path As String) As String
    
    Const REPLACE_SYMB As String = "_"
    
    Dim res As String
    res = Right(path, Len(path) - Len("X:\"))
    
    Dim drive As String
    drive = Left(path, Len("X:\"))
    
    Dim invalidSymbols As Variant
    invalidSymbols = Array("/", ":", "*", "?", """", "<", ">", "|")
    
    Dim i As Integer
    For i = 0 To UBound(invalidSymbols)
        Dim invalidSymb As String
        invalidSymb = CStr(invalidSymbols(i))
        res = Replace(res, invalidSymb, REPLACE_SYMB)
    Next
    
    ReplaceInvalidPathSymbols = drive + res
    
End Function

Function ResolveToken(token As String, model As SldWorks.ModelDoc2) As String
    
    Const FILE_NAME_TOKEN As String = "_FileName_"
    Const CONF_NAME_TOKEN As String = "_ConfName_"
    
    Select Case LCase(token)
        Case LCase(FILE_NAME_TOKEN)
            ResolveToken = GetFileNameWithoutExtension(model.GetPathName)
        Case LCase(CONF_NAME_TOKEN)
            If model.GetType() = swDocumentTypes_e.swDocDRAWING Then
                Dim swDraw As SldWorks.DrawingDoc
                Set swDraw = model
                ResolveToken = swDraw.GetCurrentSheet().GetName
            Else
                ResolveToken = model.ConfigurationManager.ActiveConfiguration.Name
            End If
        Case Else
            
            Dim swCustPrpMgr As SldWorks.CustomPropertyManager
            Dim resVal As String
            resVal = ""
            
            If model.GetType() <> swDocumentTypes_e.swDocDRAWING Then
                Set swCustPrpMgr = model.Extension.CustomPropertyManager(model.ConfigurationManager.ActiveConfiguration.Name)
                swCustPrpMgr.Get2 token, "", resVal
            End If
            
            If resVal = "" Then
                Set swCustPrpMgr = model.Extension.CustomPropertyManager("")
                swCustPrpMgr.Get2 token, "", resVal
            End If
            
            ResolveToken = resVal
    End Select
    
End Function

Function GetFileNameWithoutExtension(path As String) As String
    GetFileNameWithoutExtension = Mid(path, InStrRev(path, "\") + 1, InStrRev(path, ".") - InStrRev(path, "\") - 1)
End Function

Function GetExtension(path As String) As String
    GetExtension = Right(path, Len(path) - InStrRev(path, "."))
End Function

Function FileExists(filePath As String) As Boolean
    FileExists = Dir(filePath) <> ""
End Function

Sub CreateDirectories(path As String)

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    If fso.FolderExists(path) Then
        Exit Sub
    End If

    CreateDirectories fso.GetParentFolderName(path)
    
    fso.CreateFolder path
    
End Sub

Function GetFullPath(model As SldWorks.ModelDoc2, path As String, outFolder As String)
    
    GetFullPath = path
        
    If IsPathRelative(path) Then
        
        If Left(path, 1) <> "\" Then
            path = "\" & path
        End If
        
        If outFolder = "" Then
        
            Dim modelPath As String
            Dim modelDir As String
            
            modelPath = model.GetPathName
            
            modelDir = Left(modelPath, InStrRev(modelPath, "\") - 1)
            
            outFolder = modelDir
        Else
            If Right(outFolder, 1) = "\" Then
                outFolder = Left(outFolder, Len(outFolder) - 1)
            End If
        End If
        
        GetFullPath = outFolder & path
        
    End If
    
End Function

Function IsPathRelative(path As String)
    IsPathRelative = Mid(path, 2, 1) <> ":" And Not IsPathUnc(path)
End Function

Function IsPathUnc(path As String)
    IsPathUnc = Left(path, 2) = "\\"
End Function

Function TryGetOutDirFromArguments(ByRef outDir As String) As Boolean

try_:

    On Error GoTo catch_

    Dim macroRunner As Object
    Set macroRunner = CreateObject("CadPlus.MacroRunner.Sw")
    
    Dim param As Object
    Set param = macroRunner.PopParameter(swApp)
    
    Dim vArgs As Variant
    vArgs = param.Get("Args")
    
    outDir = CStr(vArgs(0))
    TryGetOutDirFromArguments = True
    GoTo finally_
    
catch_:
    TryGetOutDirFromArguments = False
finally_:

End Function

 

Ссылка на сообщение
Поделиться на других сайтах
2 hours ago, Snake 60 said:

Такого нет

Этот макрос я видел, но он к сожалению мне не подойдет :)

Завтра тогда напишу, сюда выложу

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

Мне нужно пройтись по всей сборке, взять все детали и сохранить их в STEP

 

Макрос писать я уже почти начал, но потом подумал - вдруг есть уже готовый ?

Можно конечно и макросом, а можно воспользоваться штатными средствами:

1. Скопировать весь проект в новую папку (Pack&GO, Копировать проект или Сохранить как...-Ссылки)

2. Упорядочить по типу и из папки удалить все сборки.

3. Через SolidWorks Task Scheduler назначить преобразование для папки настроить экспорт в другой формат ЭКСПОРТИРОВАТЬ ФАЙЛЫ:

https://help.solidworks.com/2010/russian/solidworks/sldworks/legacyhelp/sldworks/fundamentals/conversion_wizard.htm

 

 

Ссылка на сообщение
Поделиться на других сайтах
1 hour ago, Kelny said:

Pack&GO

У меня проблема возникла прямо на этом этапе :)

У меня сборка в которой компоненты я сделал виртуальными - она как была - так и осталась

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

Вот и макрос дописал :)
Требуется сборка - он выбирает все детали из сборки и сохраняет их в step

Вроде бы работает :)

https://docs.google.com/document/d/1YMbkHWxWen3a3ZOpMsLBKsy6ZrIIkcGN/edit?usp=sharing&ouid=102224464864891008489&rtpof=true&sd=true

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

У меня сборка в которой компоненты я сделал виртуальными - она как была - так и осталась

Опять же СОХРАНИТЬ КАК-ССЫЛКИ и выбрать сохранения виртуальных компонентов в файлы (галочка ВКЛЮЧИТЬ ВИРТУАЛЬНЫЕ КОМПОНЕНТЫ и возможно галочка СОХРАНИТЬ ВСЕ В КАЧЕСТВЕ КОПИЙ).

 

11 минут назад, g687 сказал:

Вот и макрос дописал :)

Много лишнего и не понятно что запускать.

main1 - сохраняет в STL, main - сохраняет в том числе и сборку в STEP.

Ссылка на сообщение
Поделиться на других сайтах
19 hours ago, Kelny said:

main1

main1 в своем макросе я так и не нашел :)

 

Во время тестирования обнаружилось что я неправильно сделал построение.

 

Сделал небольшое изменение - чтобы одна и та же деталь не сохранялась несколько раз

Вот новая ссылка с проверочной деталью.

Я посмотрел - вроде бы все работает как задумано - все детали из сборки перебираются и сохраняются в STEP

 

https://drive.google.com/file/d/1rFVtXT5Ky99kvkBPMihQs-dA_YEmgbUE/view?usp=sharing

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

main1 в своем макросе я так и не нашел :)

 

Во время тестирования обнаружилось что я неправильно сделал построение.

 

Сделал небольшое изменение - чтобы одна и та же деталь не сохранялась несколько раз

Вот новая ссылка с проверочной деталью.

Я посмотрел - вроде бы все работает как задумано - все детали из сборки перебираются и сохраняются в STEP

 

https://drive.google.com/file/d/1rFVtXT5Ky99kvkBPMihQs-dA_YEmgbUE/view?usp=sharing

Солид 2020 сп5 чет только последнюю деталь сохраняет.

Ссылка на сообщение
Поделиться на других сайтах
7 hours ago, ГЕЛА said:

последнюю

Сохранение идет в поддиректорию step

Если там файл есть - то он не перезаписывается.

1. Попробуйте удалить директорию step

2. попробуйте приложенную тестовую деталь

3. Обязательно надо подключить  Microsoft Scripting Runtime в  меню Tools/Reference (галку поставить)

 

последний пункт я наверно зря применил - но писал для себя :)

Ссылка на сообщение
Поделиться на других сайтах
16.11.2022 в 11:19, g687 сказал:

main1 в своем макросе я так и не нашел :)

В предыдущей (позавчерашней) версии было:

Скрытый текст

 

image.png

image.png

image.png

 

В текущей (вчерашней) действительно нет.

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

Если там файл есть - то он не перезаписывается.

Плохо, что не перезаписывается, т.к. это может привести к ошибкам.

Можно спрашивать по каждому файлу нужно ли его перезаписать (но для множества файлов это утомительно), так что возможно стоит добавить одобрение для всех совпадений уже на первом таком окне или в любом случае пытаться перезаписать и если не получается, то предупреждать какие файлы макрос не смог перезаписать. Или сначала собирать список всех возможных конфликтов уже на все файлы сразу, возможно с галочками для выбора какие заменять, а какие пропустить.

 

16 часов назад, g687 сказал:

2. попробуйте приложенную тестовую деталь

Что-то у макроса несварение от погашенных компонентов.

Так же похоже вы ещё не думали о конфигурациях, если конфигуараций несколько и набор деталей для каждой может быть разный.

А так же о скрытых компонентах (для них СТЭП создаётся) и вместе с этим состоянием отображения  (состояний отображения для каждой конфигурации тоже может быть несколько).

 

При встроенном экспорте в СТЭП всей сборки обычно не передаются скрытые и погашенные детали - в экспортируемый файл попадают только видимые компоненты/подсборки. Ваш макрос спотыкается на погашеных и сохраняет скрытые. Возможно вам так и надо, но для других пользователей возможно стоит дать выбор, что бы можно было выбрать что нужно для каждого пользователя (возможно кому-то надо в том числе и погашенные, а другому только видимые без скрытых и без погашенных).

 

 

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

похоже вы ещё не думали о конфигурациях

 

Писался максимально быстро (как смог) и только для себя :)

По крайней мере тут основная сложность - выбрать какие members и interface Solidworks использовать .
Видел что другой товарищ в соседней теме спрашивал про экспорт в IGS - Вы ему посоветовали заглянуть сюда.
Возможно форумчанину пригодится :)

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

ПеКо.png

ПеКо 3.3 (бывший SaveAsCopyReplace)

изменения:

 - название макроса на 'ПеКо', внутренние переменные,

-  имена сохраняемых текстовых настроек,

-  иконка,

-  компоновка на главном окне;

-  кнопка вызова 'блокнот';

-  проверка на задвоеные тире, пробелы и точки с выводом сообщений при сохранении (на это настроек нет - если это не нужно/мешает - в коде можно найти и удалить/исправить на другое);

-  когда в процессе копирования возникают вопросы по исправлению нового пути и имени - выводится гл. окно (ранее макрос завершался);

-  выбор вида ввода нового имени в два поля или в одно, как следствие, новые сохраняемые настройки (статус чека, история обозначений и наименований), на главном окне есть соответсвующий чек рядом с полем ввода нового имени;

-  в файле настроек ini появились комментарии;

-  некоторая оптимизация-рационализация кода (уменьшенно количество подпрограмм, строк кода, некоторые циклы for-next заменены на do while-loop, т.к. по завершению цикла не отрабатывался дальнейший код подпрограммы (в частности с записью списков).

- немного упорядочил переход между полями клавиатурой: поле путь - Tab/Enter - перешло в поле обозначение - Tab/Enter - поле наименование - Tab/Enter - переходит к кнопке "сохранить копию" -  Enter сохранит, а чтобы его проскочить и перейти к "отмена" - надо нажать Tab

 

ПеКо 3.3.zip

 

в архиве макрос, иконки (png, ico), ПеКо.ini (мои настройки), desktop.ini (чтобы распакованная папка была со значком макроса)

изображение.png

к сожалению, макрос придётся подключить к солиду заново, либо измените на старое имя сам макрос. Порядок настроек в ИНИ файле остался прежний. Для переноса настроек Вы можете его подправить - дописав в конце 2 строки с "True" и самая последняя - пустая строка, переименовать SaveAsCopyReplace.ini в Пеко.ini (макрос сам добавит комменты). а проще перенести настройки - заскринить/запомнить.

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

-  иконка,

В 2020 солиде иконка для макроса должна быть в BMP

Кнопку доп настроек я бы обозначил шестеренкой. И почему дополнительные настройки? А где основные?

 

В целом всё работает хорошо, правда протестировал поверхностно. 
Спасибо что развиваете макрос!

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

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

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

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

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

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

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

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

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

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

    • Виктор69



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