Jump to content

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


Recommended Posts

dommast
1 час назад, Kelny сказал:

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

Вот в двух архивах. Не знаю как отправлять больше 1 мб, поэтому разбил.

Сборка.zip Чертеж.zip

Link to post
Share on other sites


Snake 60

@dommast

Цитата

' ******************************************************************************
' C:\Users\Aleksandr\AppData\Local\Temp\swx5968\Macro1.swb - macro recorded on 04/11/24 by Aleksandr
' ******************************************************************************
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim swActiveView As Object
Set swActiveView = Part.ActiveDrawingView
Dim swBOMTable As Object
Set swBOMTable = swActiveView.InsertBomTable4(False, 0.2, -0.02, swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, swBomType_e.swBomType_TopLevelOnly, "0", "C:\SW_Настройки\Шаблоны спецификаций\!А_Таблица Сборка.sldbomtbt", False, 0, False)
    If Not swBOMTable Is Nothing Then
       swBOMTable.BorderLineWeight = 0
       swBOMTable.GridLineWeight = 0
    End If

boolstatus = Part.EditRebuild3()
End Sub

Не благодарите :)

  • Нравится 2
Link to post
Share on other sites
dommast
17 часов назад, Snake 60 сказал:

@dommast

Не благодарите :)

Тогда пусть это будет не благодарность, а простое человеческое спасибо.

Спасибо за уделенное время для решения моего вопроса.  

Link to post
Share on other sites
Srgwell
11.04.2024 в 15:39, Maik812 сказал:

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

В результате хотелось получить так.

При запуске макроса после указания детали в дереве построения сборки выполняется команда- создать чертеж на эту деталь. То есть не надо открывать эту деталь отдельно и запускать- создать чертеж.

А если через начать запись макроса делать, то получается какая то ерунда, Все равно надо выходить в среду детали при записи, иначе ни как. И при этом имя файла детали всегда одно

Link to post
Share on other sites
DmitriySD
02.04.2024 в 09:35, Docuk1 сказал:

Доброго дня! Если Вы автор этого макроса, то не могли бы убрать показ сообщения о пустых строках (В таблице спецификации пропущены следующие позиции:) и выложить сюда. Спасибо!

Нет, я не автор, я только пользуюсь.

Link to post
Share on other sites
kkk

А нет ли в природе макроса, переименовывающем элементы в дереве проектирования по порядку, в соответствии с расположением в дереве? В смысле нагородили какую-то модель, элементы какие-то удаляли, какие-то перемещали в дереве, в итоге запустить макрос и иметь Эскиз 1 (2-3-4), Бобышка 1 (2-3-4) и т.д.

 

Не то, чтобы архиважная ситуация, но что-то подумалось. :smile:

Link to post
Share on other sites
Kelny
3 минуты назад, kkk сказал:

В смысле нагородили какую-то модель, элементы какие-то удаляли, какие-то перемещали в дереве, в итоге запустить макрос и иметь Эскиз 1 (2-3-4), Бобышка 1 (2-3-4) и т.д.

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

https://kelnyproject.ucoz.ru/load/renamed_features_in_featuremanager/7-1-0-21

 

 

Link to post
Share on other sites
kkk
9 минут назад, Kelny сказал:

т.к. некоторые эскизы прячутся в других элементах

А как это мешает эскизам называться по порядку? 

10 минут назад, Kelny сказал:

то можете написать себе такой макрос

Если бы мог, то скорее мое сообщение выглядело бы так: написал макрос, переименовывающий элементы в дереве... :smile:

Link to post
Share on other sites
Snake 60

@kkk Так есть такой у Артема (см.через ВПН): https://www.codestack.net/solidworks-api/document/features-manager/rename-features-sequentially/

На всякий пожарный код с сайта:

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

 


'**********************
'Copyright(C) 2024 Xarial Pty Limited
'Reference: https://www.codestack.net/solidworks-api/document/features-manager/rename-features-sequentially/
'License: https://www.codestack.net/license/
'**********************

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main()

    Set swApp = Application.SldWorks
    
    Set swModel = swApp.ActiveDoc

try_:
    
    On Error GoTo catch_
    
    If Not swModel Is Nothing Then
        
        swModel.FeatureManager.EnableFeatureTree = False
        swModel.FeatureManager.EnableFeatureTreeWindow = False
        
        Dim vComps As Variant
        
        vComps = GetSelectedComponents(swModel.SelectionManager)
        
        If Not IsEmpty(vComps) Then
            
            Dim i As Integer
            
            For i = 0 To UBound(vComps)
                
                Dim swComp As SldWorks.Component2
                Set swComp = vComps(i)
                ProcessFeatureTree swComp.FirstFeature, swComp
                
            Next
        
        Else
            ProcessFeatureTree swModel.FirstFeature, swModel
        End If
        
    Else
        Err.Raise vbError, "", "Please open model"
    End If
    
    GoTo finally_
    
catch_:
    swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk
finally_:
    
    If Not swModel Is Nothing Then
        swModel.FeatureManager.EnableFeatureTree = True
        swModel.FeatureManager.EnableFeatureTreeWindow = True
    End If

End Sub

Sub ProcessFeatureTree(firstFeat As SldWorks.Feature, owner As Object)
    
    Dim passedOrigin As Boolean
    passedOrigin = False

    Dim featNamesTable As Object
    Dim processedFeats() As SldWorks.Feature
    
    Set featNamesTable = CreateObject("Scripting.Dictionary")
        
    featNamesTable.CompareMode = vbTextCompare 'case insensitive
    
    Dim swFeat As SldWorks.Feature
    Set swFeat = firstFeat
    
    While Not swFeat Is Nothing
        
        If passedOrigin Then
        
            If Not Contains(processedFeats, swFeat) Then
                
                If (Not processedFeats) = -1 Then
                    ReDim processedFeats(0)
                Else
                    ReDim Preserve processedFeats(UBound(processedFeats) + 1)
                End If
                
                Set processedFeats(UBound(processedFeats)) = swFeat
        
                RenameFeature swFeat, featNamesTable, owner
            End If
            
            Dim swSubFeat As SldWorks.Feature
            Set swSubFeat = swFeat.GetFirstSubFeature
            
            While Not swSubFeat Is Nothing
                
                If Not Contains(processedFeats, swSubFeat) Then
                    If (Not processedFeats) = -1 Then
                        ReDim processedFeats(0)
                    Else
                        ReDim Preserve processedFeats(UBound(processedFeats) + 1)
                    End If
                    
                    Set processedFeats(UBound(processedFeats)) = swSubFeat
                    RenameFeature swSubFeat, featNamesTable, owner
                End If
                
                Set swSubFeat = swSubFeat.GetNextSubFeature
                
            Wend
        
        End If
        
        If swFeat.GetTypeName2() = "OriginProfileFeature" Then
            passedOrigin = True
        End If
        
        Set swFeat = swFeat.GetNextFeature
    Wend
    
End Sub

Sub RenameFeature(feat As SldWorks.Feature, featNamesTable As Object, owner As Object)

    If feat.GetTypeName2() <> "Reference" Then
    
        Dim baseFeatName As String
        
        If TryGetBaseName(feat.name, baseFeatName) Then
            
            Dim nextIndex As Integer
                
            If featNamesTable.Exists(baseFeatName) Then
                nextIndex = featNamesTable.item(baseFeatName) + 1
                featNamesTable.item(baseFeatName) = nextIndex
            Else
                nextIndex = 1
                featNamesTable.Add baseFeatName, nextIndex
            End If
            
            Dim newName As String
            newName = baseFeatName & nextIndex
            
            If LCase(feat.name) <> LCase(newName) Then
            
                ResolveFeatureNameConflict owner, newName
            
                feat.name = newName
            
            End If
            
        End If
        
    End If

End Sub

Function TryGetBaseName(name As String, ByRef baseName As String)
    
    TryGetBaseName = False
    baseName = ""
    
    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    
    regEx.Global = True
    regEx.IgnoreCase = True
    regEx.Pattern = "(.+?)(\d+)$"
    
    Dim regExMatches As Object
    Set regExMatches = regEx.Execute(name)
    
    If regExMatches.Count = 1 Then
        
        If regExMatches(0).SubMatches.Count = 2 Then
            
            baseName = regExMatches(0).SubMatches(0)
            TryGetBaseName = True
            
        End If
        
    End If
    
End Function

Sub ResolveFeatureNameConflict(owner As Object, name As String)
    
    Const INDEX_OFFSET As Integer = 100
    Dim index As Integer
    
    Dim swFeatMgr As SldWorks.FeatureManager
    
    Dim swFeat As SldWorks.Feature
        
    If TypeOf owner Is SldWorks.Component2 Then
        
        Dim swComp As SldWorks.Component2
        Set swComp = owner
        
        Dim swRefModel As SldWorks.ModelDoc2
        Set swRefModel = swComp.GetModelDoc2
        
        If Not swRefModel Is Nothing Then
            Set swFeatMgr = swRefModel.FeatureManager
            Set swFeat = swComp.FeatureByName(name)
        Else
            Err.Raise vbError, "", "Component model is not loaded"
        End If
        
    ElseIf TypeOf owner Is SldWorks.ModelDoc2 Then
        
        Dim swModel As SldWorks.ModelDoc2
        Set swModel = owner
        Set swFeatMgr = swModel.FeatureManager
        Set swFeat = swModel.FeatureByName(name)
        
    Else
        Err.Raise vbError, "", "Not supported owner"
    End If
    
    If Not swFeat Is Nothing Then
        
        Dim baseName As String
        
        If TryGetBaseName(name, baseName) Then
            
            Dim newName As String
            newName = baseName & (INDEX_OFFSET + index)
            
            While False <> swFeatMgr.IsNameUsed(swNameType_e.swFeatureName, newName)
                index = index + 1
                newName = baseName & (INDEX_OFFSET + index)
            Wend
            
            swFeat.name = newName
            
        Else
            Exit Sub
        End If
    
    End If
    
End Sub

Function Contains(vArr As Variant, item As Object) As Boolean
    
    Dim i As Integer
    
    For i = 0 To UBound(vArr)
        If vArr(i) Is item Then
            Contains = True
            Exit Function
        End If
    Next
    
    Contains = False
    
End Function

Function GetSelectedComponents(selMgr As SldWorks.SelectionMgr) As Variant

    Dim isInit As Boolean
    isInit = False
    
    Dim swComps() As SldWorks.Component2

    Dim i As Integer
    
    For i = 1 To selMgr.GetSelectedObjectCount2(-1)
                
        Dim swComp As SldWorks.Component2
    
        Set swComp = selMgr.GetSelectedObjectsComponent4(i, -1)
        
        If Not swComp Is Nothing Then
            
            If Not isInit Then
                ReDim swComps(0)
                Set swComps(0) = swComp
                isInit = True
            Else
                If Not Contains(swComps, swComp) Then
                    ReDim Preserve swComps(UBound(swComps) + 1)
                    Set swComps(UBound(swComps)) = swComp
                End If
            End If
                        
        End If
    
    Next

    If isInit Then
        GetSelectedComponents = swComps
    Else
        GetSelectedComponents = Empty
    End If

End Function

 

Edited by Snake 60
  • Нравится 2
Link to post
Share on other sites
kkk
5 часов назад, Snake 60 сказал:

Так есть такой

Вот прям то, что нужно! Особенно приятно, что переименовывает только стандартные названия элементов, если сам переименовал элемент во что-то свое, то такие не трогает.

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

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

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

Edited by Srgwell
Link to post
Share on other sites
Павлуха
34 минуты назад, Srgwell сказал:

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

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

 

Недоопределённые детали видно.

Читайте справку.

  • Нравится 1
Link to post
Share on other sites
Snake 60
55 минут назад, Srgwell сказал:

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

Так они и так выделяются в дереве вот таким знаком (-) перед именем детали/сборки

  • Нравится 1
Link to post
Share on other sites
kkk
1 час назад, Srgwell сказал:

Есть такая штуковина в эскизах соливеркса. В эскизах если отрезки темные они определены.

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

Link to post
Share on other sites
Srgwell
12 минут назад, Snake 60 сказал:

Так они и так выделяются в дереве вот таким знаком (-) перед именем детали/сборки

век живи- век учись

Link to post
Share on other sites
nahaus

Подскажите пожалуйста как редактировать цвет и толщину таблицы параметров (вставка - таблицы - таблица параметров) детали на чертеже?

Так выглядит таблица сейчас.

image.png

Ее можно отредактировать в модели, но это очень не удобно.

Может есть макрос для удобного редактирования или создания таблиц. SW 2014.

Edited by nahaus
Link to post
Share on other sites
Srgwell
22.04.2022 в 11:51, tompsongun сказал:

С позволения уважаемого @alek77  внёс небольшое изменение в его макрос по подсчёту компонентов - добавил кнопку "выбрать все", может пригодится для наглядности, массовой замены/удаления, особенно где много одинаковых элементов (например в пневматике/электрике). после закрытия макроса выделение сохраняется.

 

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

 

ComponentInfo (mod1 tompsongun).swp 156 \u041a\u0431 · 41 скачивание

А нельзя ли как нибудь совместить этот макрос с волшебным макросом part_counter для внесении количества в свойство. Просто второй считает с ограничениями и с ошибкой, а первый считает идеально. Количество деталей в чертеж- это супер

Edited by Srgwell
Link to post
Share on other sites
malvi.dp
18.04.2024 в 12:45, nahaus сказал:

Подскажите пожалуйста как редактировать цвет и толщину таблицы параметров (вставка - таблицы - таблица параметров) детали на чертеже?

Визуальное отображение таблицы параметров (ТП) на чертеже зависит от того как она была сохранена в модели (ПКМ в дереве на ТП - Редактировать таблицу). Именно в окне модели солида!

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

TP1.jpg

 

Так будет выглядеть на чертеже

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

TP2.jpg

Ещё таблицу можно открыть в отдельном окне Эксель. Можно сохранить как отдельный файл Эксель, сделать в нем все необходимое форматирование и выбрать "из файла" , при создании ТП. При этом все-равно нужно ее визуально "поправить" в окне модели солида, чтобы она корректно отобразилась на чертеже.

Если же при вставке на чертеже ТП отображается неправильно, лучше ее удалить с чертежа, "поправить" в модели и снова вставить на чертеж.

18.04.2024 в 12:45, nahaus сказал:

Может есть макрос для удобного редактирования или создания таблиц. SW 2014.

Макрос не встречал. 

 

  • Нравится 1
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   1 member

    • zheka-8.196



  • Сообщения

    • Ветерок
      Ну, если массив по точкам, то там, естественно, нет количества.
    • Anat2015
      Возвращать устройство смены инструмента в исходное.
    • rrr11
      К сожалению сейчас нет такой возможности Сравнивал, параметры разнятся, знать бы какой именно параметр. Методом тыка, это не вариант... 
    • Пингвинчик
      Да, в 7.0 тоже есть в инфо эта строка. И при попытке добавить параметр "ptc_actual_pat_members" он пишет что тот зарезервирован.  Но на чертёж его вызвать невозможно, и в параметрах он не отображается (пытался через &ptc_actual_pat_members:FID_...)
    • kkk
      Благо в свойствах Солида появились уравнения, решил изменить записание Обозначения. Хотел сделать, чтобы при конфигурации 00 в обозначение шло бы только имя файла, при других конфигурациях - "имя файла"-"имя конфигурации".     Попробовал так: if ( $PRP:"SW-Имя конфигурации" = 00 , $PRP:"SW-File Name" , $PRP:"SW-File Name"-$PRP:"SW-Имя конфигурации"), пишет ошибка синтаксиса. Если во второй части подставить цифры, то работает, если буквы, то нет. Вот и думаю, это я что-то неправильно делаю, или функция IF работает только с цифрами?
    • zeppelin
      Только через инфо об элементе получилось узнать, но вытянуть через параметр, не нашел.
    • Пингвинчик
      Где? количества всех компонентов не вижу ни в одном массиве, только количество по параметрам (по 2 направлениям, по окружности и тд)   Выше массив по точкам, размеры вижу только позиционные для точек
    • 5axisCNC
      Такие радиуса я обычно делаю фрезой например ф10r0.5(с радиусом при основании 0,5 или 1) Zlevel  погружение по форме между уровнями, можно и Area mill
    • Black Rock
      Всем привет. Я не особо в теме, но когда то юзал учебную версию Тефлкс 2011. Теперь опять хочу вспомнить детство и для этого есть всё ещё живой Мак бук про 2015. Понимаю, что вопрос простой и поэтому может будет лучше послать меня туда где уже написано про мой случай. В общем хочу в торенте скачать Тефлекс 2011 учебный и установить на Макбук. Видимо для этого нужна будет винда 7 или симулятор 7й винды или что то, что бы Тефлекс можно было запустить на окаянном Макбуке. Пожалуйста подскажите пошагово, как мне снова стать счастливым.   
    • Ветерок
      Да ладно вам! Ещё в ПроЕ так делалось. Щелкаете на массив - отображаются его размеры: шаг и количество. Щелкаете на количестве - вот он. Можно посмотреть его имя, оно начинается с буквы p. И не надо искать ни по каким окнам.
×
×
  • Create New...