Jump to content

Допилить макрос Что бы выгружал по папка - толщинам металл Так как идет вся солянка в сборе


Operator 1945

Recommended Posts

Operator 1945

 

Private Sub UserForm_Activate()
    CheckBox1.Value = True
    CheckBox2.Value = False
End Sub

 

 

Private Sub CommandButton3_Click()
    Dim selectedFolder As String
    
    selectedFolder = BrowseForFolder(PathOfLocks)
    If (selectedFolder <> "") And (Left(selectedFolder, 1) <> ":") Then
        selectedFolder = Replace(selectedFolder, PathOfLocks, "")
    Else
        selectedFolder = ""
    End If
    Debug.Print Left(selectedFolder, 1)
    TextBox1.Text = selectedFolder
End Sub

 

 

Function BrowseForFolder(Optional OpenAt As Variant) As Variant             - возврощает полный путь до папки выбранный пользователем 
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, "Выбрать папку :", 0, OpenAt)
    If (Not objFolder Is Nothing) Then
        Set objFolderItem = objFolder.Self
        BrowseForFolder = objFolderItem.path
    End If
    If PathOfDirectory = BrowseForFolder & "\" Then
        BrowseForFolder = ""
    End If
End Function

 

 

Private Sub CommandButton1_Click()
    
    Dim bRet                    As Boolean
    Dim path                    As String
    Dim filename                As String
    Dim i                       As Integer
    Dim nStart                  As Single
    Dim subdir_name             As String
    Dim vComps                  As Variant
    Dim swComp                  As SldWorks.Component2
    Dim swAssy                  As SldWorks.AssemblyDoc
    Dim swBody                  As SldWorks.Body2
    Dim Bodies                  As Variant
    
    ' Set start time
    nStart = Timer
    
    ' папка с  dxf
    subdir_name = TextBox1.Text
     If subdir_name <> "" Then
        On Error Resume Next
        MkDir PathOfDirectory & subdir_name
        On Error GoTo 0
        subdir_name = subdir_name + "\"
    End If
    
    If swModel.GetType = swDocASSEMBLY Then
        Set swAssy = swModel
        vComps = swAssy.GetComponents(False)
        For i = 0 To UBound(vComps)
            Set swComp = vComps(i)
            Set swModel = swComp.GetModelDoc2
            If swComp.GetSuppression <> 0 Then
                'Debug.Print "swModel.NameView: " & swModel.GetPathName & ", CheckBox1.Value:" & CheckBox1.Value & ", swComp.IsHidden: " & swComp.IsHidden(True)
                If swModel.GetType = swDocPART And Not (swComp.IsHidden(True) And CheckBox1.Value) Then
                    Bodies = swModel.GetBodies2(swBodyType_e.swAllBodies, True)
                    Set swBody = Bodies(0)
                    If Not (swBody.IsSheetMetal = 0 And CheckBox2.Value = 0) Then
                        path = swModel.GetPathName
                        filename = Right(path, Len(path) - InStrRev(path, "\"))      ' With extension
                        filename = Left$(filename, InStrRev(filename, ".") - 1)         ' Remove extension
                        bRet = swModel.ExportFlatPatternView(PathOfDirectory & subdir_name & filename & ".DXF", 1)
                        If bRet Then
                            Debug.Print "Successful export " & filename & " to DXF extensioin."
                        Else
                            Debug.Print "UnSuccessful export " & filename & " to DXF extensioin."
                            MsgBox "UnSuccessful export " & filename & " to DXF extensioin."
                        End If
                    Else
                        path = swModel.GetPathName
                        filename = Right(path, Len(path) - InStrRev(path, "\"))      ' With extension
                        filename = Left$(filename, InStrRev(filename, ".") - 1)         ' Remove extension
                        Debug.Print filename & " is not sheet metal."
                    End If
                End If
            End If
        Next i
    ElseIf swModel.GetType = swDocPART Then
        ' geting part name
        path = swModel.GetPathName                                  ' полный_путь+имя_файла+расширение
        filename = Right(path, Len(path) - InStrRev(path, "\"))     ' With extension
        filename = Left$(filename, InStrRev(filename, ".") - 1)     ' Remove extension
        ' ïóòü áåç èìåíè ôàéëà è ðàñøèðåíèÿ
        PathOfDirectory = Strings.Left(path, Strings.Len(path) - Strings.Len(filename) - 7)
        ' Export Flat Pattern without bend (1)
        bRet = swModel.ExportFlatPatternView(PathOfDirectory & subdir_name & filename & ".DXF", 1)
        If bRet Then
            Debug.Print "Successful export " & filename & " to DXF extensioin."
        Else
            Debug.Print "UnSuccessful export " & filename & " to DXF extensioin."
            MsgBox "UnSuccessful export " & filename & " to DXF extensioin."
        End If
    ElseIf swModel.GetType = swDocDRAWING Then
        ' geting part name
        path = swModel.GetPathName                                  ' полный_путь+имя_файла+расширение
        filename = Right(path, Len(path) - InStrRev(path, "\"))     ' With extension
        filename = Left$(filename, InStrRev(filename, ".") - 1)     ' Remove extension
        ' ïóòü áåç èìåíè ôàéëà è ðàñøèðåíèÿ
        PathOfDirectory = Strings.Left(path, Strings.Len(path) - Strings.Len(filename) - 7)
        ' Export dxf
        swModel.SaveAs2 PathOfDirectory & subdir_name & filename & ".DXF", 0, True, False     ' Сохранить файл перезаписав если существует 
    Else
        MsgBox "Not assemble or part or draw."
        End
    End If
    
    ' Calculate total time
    Beep
    MsgBox "Successful export assemble/part/draw to DXF for " & Timer - nStart & " sec"
    'Dim oShell As Object
    'Set oShell = CreateObject("Shell.Application")
    'oShell.Explore (PathOfDirectory)
    
    Debug.Print vbNewLine
    UserForm1.Hide
    
End Sub

Private Sub CommandButton2_Click()
    Unload UserForm1
End Sub

 

Link to post
Share on other sites


UnPinned posts
Kelny

Так вроде уже задавали вопрос:

https://cccp3d.ru/topic/134959-помогите-пожалуйста-в-дороботки-solidworks-макроса-по-выгрузке-dxf-формата/?tab=comments#comment-1306092

 

Там же было сказано, что нужно выковырять толщину из файла, например, из глобальной переменной, если это листовой металл (или из другого места) и в зависимости от результата выбирать подпапку для сохранения, например, в путь папки добавить значение толщины (нужно найти подходящии функции в API, ниже показан принцип, а не готовое решение):

...

ЗНАЧЕНИЕ_ТОЛЩИНЫ = ФУНКЦИЯ.ВЗЯТЬ_ТОЛЩИНУ_ИЗ_МОДЕЛИ

 ' Export dxf

swModel.SaveAs2 PathOfDirectory & subdir_name & ЗНАЧЕНИЕ_ТОЛЩИНЫ & "\" & filename & ".DXF", 0, True, False     ' Сохранить файл перезаписав если существует 

...

Edited by Kelny
Link to post
Share on other sites
  • 2 years later...
clavr

не реклама. попросил на работе, без проблем купили  DXF-auto для солида. Окупается за неделю, если в пересчете на часы работы конструктора.

Работает все как часы, и очень удобно, удобная настройка вывода и проверка результата с отчетами

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

Здравствуйте. Как вариант из ведомости материалов макросом excell формировать папки материалов (dxf, pdf и перечень на этот материал). При этом еще и отчет писать чтобы увидеть на какие детали чертеж пропустил. 

Link to post
Share on other sites
Maik812
20.01.2025 в 22:40, Snake 60 сказал:

Некропостинг, но вдруг пригодится

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

Link to post
Share on other sites
  • 1 month later...
Sturmann
20.01.2025 в 22:40, Snake 60 сказал:

@Operator 1945 Некропостинг, но вдруг пригодится :)

 

Вы все это на VBA написали?

Link to post
Share on other sites
Snake 60
5 часов назад, Sturmann сказал:

Вы все это на VBA написали?

Да, мне всё никак не пересесть на VisualStudio :)

Link to post
Share on other sites
Sturmann
21.03.2025 в 14:19, Snake 60 сказал:

Да, мне всё никак не пересесть на VisualStudio :)

Сильно конечно. 

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Сообщения

    • Viktor2004
      Не знаю. Но это не опция и работает на всех чпу где есть такое окно
    • frei
      https://consulo.io/ Сам не юзал.  
    • gudstartup
      так его вроде как сама система генерирует даже пустой   Следующие данные могут быть выведены из ЧПУ до того, как вас попросят выключить питание. Если есть несколько путей, файл для пути 2 будет иметь расширение P-2, путь 3 будет P-3 и т. д.    
    • Guhl
      Мысли тут простые: 1я мысль: проверить предохранители 2я мысль: изучение мануалов, благо они имеются в достатке 3я мысль: изучить иностранные форумы типа cnczone, благо это ЧПУ нередкая в их краях вещь Также надо снять бэкап пока еще батарейка не села (если она там есть)   Вы уверены, что у станка питание 380В, а не 200В?
    • morfeantyri1
      Доброго дня, пытаемся восстановить работу старенького Matsuura MC1000 с управление Yasnac j300. Имеем ошибку 3100 servo alarm, Питание на сервопаках есть, кабель плоский связи между сервопаками проверили, видимых повреждений на плате ПК не видать. вопрос если это не блок связи в ПК то.  Возможна ли общая ошибка servo alarm из за проблем на какой-то конкретной оси? Правильно ли я понимаю что контактор питания осей (380 вольт) включается непосредственно перед запуском осей и не должен приводить к нарушению связи серво->ПК?  полный список ошибок таков: 3000 servo off (питание серв включается повторным нажитие кнопки питания по инструкции, сейчас этого не происходит в виду как я думаю ошибки servo alarm) 3100 servo alarm 2190 machine unready (думается следствие предыдущих двух ошибок) иногда появляется и исчезает ошибка 1093 memory error (OFS) но думаю это дело будущего. Может есть к кого какие мысли?!
    • mannul
      Можно, но не на этом старом синумерике. И по DXF нельзя задать вектора, потому что DXF плоский. А в скринах автора в каждом кадре векторы направления стоят, причем всегда вдоль оси Z. Поэтому могу с уверенностью сказать, что это выведено через пост, который эти вектора выводит всегда.
    • maxx2000
      @mannul на стойке нельзя по DXF файлу составить программу ? На стойке нельзя задать нумерацию кадров с любым шагом?
    • mannul
      Вряд ли кто-то будет сам считать векторы A3, B3, C3 и дуги в произвольной плоскости - CIP. Да и нумерация кадров с шагом 5 говорит о том что скорее всего программа выведена через пост.
    • brigval
      На линии разреза можно накладывать ограничения. Это не подойдет хотя бы в некоторых сложных случаях?
    • brigval
      Брагин Коммандер 3 v1.11     В версии 1.11  Добавлено: Добавлены настройки копирования проектов.  Добавлено: Добавлен пример организации Папки проектов.  Изменено: Исключен поиск ссылок в шаблонах КОМПАС-3D.  Изменено: При загрузке программа подключается к КОМПАС-3D не сразу, а только если это станет необходимым.  Исправлено: Программа завершала работу при долгом считывании ссылок.  Исправлено: Исправлены замеченные ошибки и неточности кода.  
×
×
  • Create New...