Eksport makr rodziny części dxf

Witam koleżanki i koledzy,

Przychodzę do Was, bo jestem makro quiche i mam taki, który bardzo bym chciał poprawić. Działa idealnie, gdy go uruchamiam i tworzę wszystkie moje dxf z rodziny części, ale nie mogę go zmodyfikować tak, aby usuwał linie gięcia w prasie.   

Z góry dziękuję za pomoc :-)

Dim swApp As Object
Option Explicit
Sub main()
'Déclarations :
Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim config                  As SldWorks.Configuration
Dim vConfNameArr            As Variant
Dim sConfigName             As String
Dim i                       As Long
Dim bShowConfig             As Boolean
Dim bRebuild                As Boolean
Dim bRet                    As Boolean
Dim FilePath                As String
Dim PathSize                As Long
Dim PathNoExtension         As String
Dim NewFilePath             As String
Dim Value_                 As String
Dim ResolvedValOut          As String
Dim cusPropMgr              As SldWorks.CustomPropertyManager
Dim wasResolved             As Boolean
Dim Error As Long
Set swApp = CreateObject("SldWorks.Application") 'Lancement de SW
Set swModel = swApp.ActiveDoc 'Récuperation du modèle actif dans SW

vConfNameArr = swModel.GetConfigurationNames 'Création de la liste des configurations
For i = 0 To UBound(vConfNameArr) 'Boucle la liste : de l'élément 0 jusqu'au nombre d'élément dans la liste (Ubound)
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    sConfigName = vConfNameArr(i) 'Recupère l'élément N°i de la liste
    bShowConfig = swModel.ShowConfiguration2(sConfigName) 'Affiche la configuration
    Error = cusPropMgr.Get5("TYPE", True, Value_, ResolvedValOut, wasResolved) 'Récupère la valeur de la proriété "" dans la variable "Value_"
    bRebuild = swModel.ForceRebuild3(False) 'Reconstruction du modèle
    FilePath = swModel.GetPathName 'Récupère le chemin du fichier SW
    PathSize = Strings.Len(FilePath) 'Compte le nombre de caractères du chemin
    
        PathNoExtension = Strings.Left(FilePath, PathSize - 6) 'Récupère le nom de la pièce en enlevant .Sldrt
        NewFilePath = Left(FilePath, InStrRev(FilePath, "\")) & "" & (sConfigName) & ".DXF" 'Remplace le nom par Type + Lg + Nom de la config (sans Flat pattern).dxf
        bRet = swModel.ExportFlatPatternView(NewFilePath, 1) 'Exporte le déplié
    
Next i 'Passe à la prochaine config
End Sub

 


export_dxf_famille_de_piece_-_ac_cobra.swp

Dobry wieczór

O ile się nie mylę, opcja nie jest dostępna w tej starej metodzie.

 Musisz użyć metody ExportToDWG2 , niezoptymalizowany kod po prostu pobrany z pomocy jest następujący:

Dim swApp As Object
Option Explicit
Sub main()
'Déclarations :
Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim config                  As SldWorks.Configuration
Dim swPart                  As SldWorks.PartDoc
Dim vConfNameArr            As Variant
Dim sConfigName             As String
Dim i                       As Long
Dim bShowConfig             As Boolean
Dim bRebuild                As Boolean
Dim bRet                    As Boolean
Dim FilePath                As String
Dim PathSize                As Long
Dim PathNoExtension         As String
Dim NewFilePath             As String
Dim Value_                 As String
Dim ResolvedValOut          As String
Dim cusPropMgr              As SldWorks.CustomPropertyManager
Dim wasResolved             As Boolean
Dim Error As Long
Dim varAlignment As Variant
 Dim dataAlignment(11) As Double
 Dim varViews As Variant
 Dim dataViews(1) As String
Set swApp = CreateObject("SldWorks.Application") 'Lancement de SW
Set swModel = swApp.ActiveDoc 'Récuperation du modèle actif dans SW
Set swPart = swModel

vConfNameArr = swModel.GetConfigurationNames 'Création de la liste des configurations
For i = 0 To UBound(vConfNameArr) 'Boucle la liste : de l'élément 0 jusqu'au nombre d'élément dans la liste (Ubound)
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    sConfigName = vConfNameArr(i) 'Recupère l'élément N°i de la liste
    bShowConfig = swModel.ShowConfiguration2(sConfigName) 'Affiche la configuration
    Error = cusPropMgr.Get5("TYPE", True, Value_, ResolvedValOut, wasResolved) 'Récupère la valeur de la proriété "" dans la variable "Value_"
    bRebuild = swModel.ForceRebuild3(False) 'Reconstruction du modèle
    FilePath = swModel.GetPathName 'Récupère le chemin du fichier SW
    PathSize = Strings.Len(FilePath) 'Compte le nombre de caractères du chemin
    
        PathNoExtension = Strings.Left(FilePath, PathSize - 6) 'Récupère le nom de la pièce en enlevant .Sldrt
        NewFilePath = Left(FilePath, InStrRev(FilePath, "\")) & "" & (sConfigName) & ".DXF" 'Remplace le nom par Type + Lg + Nom de la config (sans Flat pattern).dxf
        'bRet = swModel.ExportFlatPatternView(NewFilePath, 1) 'Exporte le déplié
    dataAlignment(0) = 0#
    dataAlignment(1) = 0#
    dataAlignment(2) = 0#
    dataAlignment(3) = 1#
    dataAlignment(4) = 0#
    dataAlignment(5) = 0#
    dataAlignment(6) = 0#
    dataAlignment(7) = 1#
    dataAlignment(8) = 0#
    dataAlignment(9) = 0#
    dataAlignment(10) = 0#
    dataAlignment(11) = 1#
     

    varAlignment = dataAlignment
     

    dataViews(0) = "*Current"
    dataViews(1) = "*Front"
     

    varViews = dataViews

    swPart.ExportToDWG2 NewFilePath, FilePath, swExportToDWG_ExportSheetMetal, True, varAlignment, False, False, 13, varViews
    
Next i 'Passe à la prochaine config
End Sub

 

Z drugiej strony uważam, że zmienne filepath i pathsize powinny zostać usunięte z przetwarzania pętli, ponieważ to makro działa plik po pliku, jeśli dobrze rozumiem.

@Cyril.f . właściwie makro, którego używam, tworzy flatpathern w pomieszczeniu o kilku konfiguracjach zapisując go z nazwą konfiguracji, brakuje tylko linii zagięcia w DXF.

Właśnie przetestowałem makro, które działa, tworzy DXF z liniami zagięcia,  ale nie tworzy już rozwiniętych konfiguracji.  

Witam

Wczoraj wieczorem nie patrzyłem więcej, ale czy to nie jest raczej niż rozwinięte konfiguracje, które makro robi, a nie dxf konfiguracji składanych?

W rzeczywistości makro, które znalazłem, zrobiło się: tworzenie dxf w rozłożeniu bez linii zagięcia i konfiguracja rozwiniętego ze wszystkich konfiguracji części i tej, którą udostępniłeś, nie tworzyło już konfiguracji rozłożonego w konfiguracjach, ale sprawiło, że wszystkie rozłożone zostały za pomocą linii zagięcia 

Mogę mieć przykładowy plik, ponieważ nie mam go pod ręką. Właśnie miałem plik z rozwiniętym conf i domyślnym conf i dobrze się zapętlił na obu "konfiguracjach", ale wydaje mi się, że dwa dxfs były w rozwiniętej wizualizacji (połączone z linią eksportu kodu makra).

W załączeniu przykładowe pliki, ale jest to pod 2020 rokiem, jeden z rozłożonym gonfigiem, a drugi bez


lot_de_cornieres.sldprt
lot_de_cornieres_avec_deplie.sldprt

Dobry wieczór

Na załączonym kodzie powinien spełniać potrzebę.

Option Explicit

'Déclarations :
Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim config                  As SldWorks.Configuration
Dim cusPropMgr              As SldWorks.CustomPropertyManager
Dim swPart                  As SldWorks.PartDoc
Dim i                       As Long
Dim PathSize                As Long
Dim Error                   As Long
Dim bShowConfig             As Boolean
Dim bRebuild                As Boolean
Dim bRet                    As Boolean
Dim wasResolved             As Boolean
Dim FilePath                As String
Dim PathNoExtension         As String
Dim NewFilePath             As String
Dim Value_                  As String
Dim ResolvedValOut          As String
Dim sConfigName             As String
Dim varAlignment            As Variant
Dim vConfNameArr            As Variant
Dim dataAlignment(11)       As Double
Sub main()

Set swApp = CreateObject("SldWorks.Application") 'Lancement de SW
Set swModel = swApp.ActiveDoc 'Récuperation du modèle actif dans SW
Set swPart = swModel
FilePath = swModel.GetPathName 'Récupère le chemin du fichier SW
PathSize = Strings.Len(FilePath) 'Compte le nombre de caractères du chemin
PathNoExtension = Strings.Left(FilePath, PathSize - 6) 'Récupère le nom de la pièce en enlevant .Sldrt

vConfNameArr = swModel.GetConfigurationNames 'Création de la liste des configurations
For i = 0 To UBound(vConfNameArr) 'Boucle la liste : de l'élément 0 jusqu'au nombre d'élément dans la liste (Ubound)
    If InStr(UCase(vConfNameArr(i)), "SM-FLAT-PATTERN") = 0 Then 'Vérification si Flat Pattern est dans le nom de la configuration
        Set config = swModel.GetActiveConfiguration
        Set cusPropMgr = config.CustomPropertyManager
        sConfigName = vConfNameArr(i) 'Recupère l'élément N°i de la liste
        bShowConfig = swModel.ShowConfiguration2(sConfigName) 'Affiche la configuration
        Error = cusPropMgr.Get5("TYPE", True, Value_, ResolvedValOut, wasResolved) 'Récupère la valeur de la proriété "" dans la variable "Value_"
        bRebuild = swModel.ForceRebuild3(False) 'Reconstruction du modèle
        NewFilePath = Left(FilePath, InStrRev(FilePath, "\")) & "" & (sConfigName) & ".DXF" 'Remplace le nom par Type + Lg + Nom de la config (sans Flat pattern).dxf
        dataAlignment(0) = 0#
        dataAlignment(1) = 0#
        dataAlignment(2) = 0#
        dataAlignment(3) = 1#
        dataAlignment(4) = 0#
        dataAlignment(5) = 0#
        dataAlignment(6) = 0#
        dataAlignment(7) = 1#
        dataAlignment(8) = 0#
        dataAlignment(9) = 0#
        dataAlignment(10) = 0#
        dataAlignment(11) = 1#
        varAlignment = dataAlignment
        swPart.ExportToDWG2 NewFilePath, FilePath, swExportToDWG_ExportSheetMetal, True, varAlignment, False, False, 13, Null
    End If
Next i 'Passe à la prochaine config

End Sub

 

Przykro mi, ale makro nie generuje rozwiniętych konfiguracji, oto mój kawałek z moim makrem. Spójrz na konfiguracje przed uruchomieniem, a zrozumiesz; Chciałbym, aby ten dodał linię zagięcia w DXF


lot_de_cornieres.sldprt
export_dxf_famille_de_piece_-_ac_cobra.swp

Witam

Mam wrażenie, że się nie rozumiemy albo makro nie działa tak samo na moim komputerze i na Twoim.

Ten wiersz: swPart.ExportToDWG2 NewFilePath, FilePath, swExportToDWG_ExportSheetMetal, True, varAlignment, False, False, 13, Null

Eksportuje rozłożony, dodając linie zagięcia.

Poniżej znajdują się wyniki zgodnie z użytymi makrami.


1_-_30x30x2_lg_1825_x120-macro_ac_cobra.jpg
1_-_30x30x2_lg_1825_x120-macro_modifie.jpg

Owszem, te wywołane są ok, ale po uruchomieniu tej, której używam, rozłożone konfiguracje są automatycznie tworzone w pokoju, stąd mój poprzedni post. Jeśli spojrzysz na moje konfiguracje i uruchomisz moje makro, zobaczysz, że rozwinięte konfiguracje są tworzone, podczas gdy w tej, którą utworzyłeś, tak nie jest.

Witam

Ok, nie zrozumieliśmy się nawzajem, więc po prostu musimy przekazać argument 1 do 0 w wierszu bRet = swModel.ExportFlatPatternView(NewFilePath, 1).

Zmieniony kodeks poniżej:

Option Explicit

'Déclarations :
Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim config                  As SldWorks.Configuration
Dim cusPropMgr              As SldWorks.CustomPropertyManager
Dim i                       As Long
Dim PathSize                As Long
Dim Error                   As Long
Dim bShowConfig             As Boolean
Dim bRebuild                As Boolean
Dim bRet                    As Boolean
Dim wasResolved             As Boolean
Dim FilePath                As String
Dim PathNoExtension         As String
Dim NewFilePath             As String
Dim Value_                  As String
Dim ResolvedValOut          As String
Dim sConfigName             As String
Dim vConfNameArr            As Variant
Sub main()

Set swApp = CreateObject("SldWorks.Application") 'Lancement de SW
Set swModel = swApp.ActiveDoc 'Récuperation du modèle actif dans SW
FilePath = swModel.GetPathName 'Récupère le chemin du fichier SW
PathSize = Strings.Len(FilePath) 'Compte le nombre de caractères du chemin
PathNoExtension = Strings.Left(FilePath, PathSize - 6) 'Récupère le nom de la pièce en enlevant .Sldrt

vConfNameArr = swModel.GetConfigurationNames 'Création de la liste des configurations
For i = 0 To UBound(vConfNameArr) 'Boucle la liste : de l'élément 0 jusqu'au nombre d'élément dans la liste (Ubound)
    Set config = swModel.GetActiveConfiguration
    Set cusPropMgr = config.CustomPropertyManager
    sConfigName = vConfNameArr(i) 'Recupère l'élément N°i de la liste
    bShowConfig = swModel.ShowConfiguration2(sConfigName) 'Affiche la configuration
    Error = cusPropMgr.Get5("TYPE", True, Value_, ResolvedValOut, wasResolved) 'Récupère la valeur de la proriété "" dans la variable "Value_"
    bRebuild = swModel.ForceRebuild3(False) 'Reconstruction du modèle
    NewFilePath = Left(FilePath, InStrRev(FilePath, "\")) & "" & (sConfigName) & ".DXF" 'Remplace le nom par Type + Lg + Nom de la config (sans Flat pattern).dxf
    bRet = swModel.ExportFlatPatternView(NewFilePath, 0) 'Export le déplié
Next i 'Passe à la prochaine config

End Sub

 

1 polubienie

Witaj @Cyril.f,

 

przepraszam za opóźnienie, ale właśnie wróciłem z wakacji; Przetestowałem go i działa idealnie. Bardzo dziękuję za poświęcenie czasu :-) na mój problem.