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.sldprtlot_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.sldprtexport_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.jpg1_-_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.