Witam
Utworzyłem makro w Solidworks, które pozwala na pobranie listy złożeń, zmianę ich położenia i zapisanie ich jako złożeń sldw i IFC.
Jednak program działa w wygenerowanych IFC, widoczne są wszystkie elementy celowo wyszarzone w złożeniach.
Kiedy ręcznie zapisuję IFC, pojawia się komunikat z pytaniem, czy chcę rozwiązać ukryte/usunięte elementy, zaznaczam nie i otrzymuję pożądany rezultat.

Czy wiesz, jak automatycznie zaznaczyć to pole w VBA ?
Dziękuję
1 polubienie
Może gdybyś postępował zgodnie z kodem, byłoby łatwiej.
Zamówienie użyło co najmniej i/lub pełnego kodu kodu, aby znaleźć się na górze.
Wtedy łatwiej będzie Ci odpowiedzieć.
1 polubienie
Witam;
Sbadenis ma rację, bez twojego kodu lub użytego polecenia nie jest łatwo odpowiedzieć poprawnie... I tak próbuję...
Zazwyczaj te opcje są zawarte w "Saveas..." "
Opcje, ExportData, AdvancedSaveAsOptions, Błędy, Ostrzeżenia)
Użyj swSaveAsOptions_Silent (w opcjach), aby wyciszyć komunikaty solidworks
Źródło: https://help.solidworks.com/2020/...swSaveAsOptions_e.html
Pozdrowienia
Witam
Dziękuję za pomoc.
Oto część kodu, o której mowa:
If False = swModel.Extension.SaveAs(AssIFC & ".IFC", swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_AvoidRebuildOnSave, Nothing, errors, warnings) Then
Err.Raise vbError, "", "Impossible d'exporter l'IFC. Erreur n°: " & errors
End If
Żonglując opcjami, nie dostaję tego, czego szukam.
Tym razem jest to @Maclane prawda, funkcja saveAs jest przestarzała:
https://help.solidworks.com/2020/english/api/draftsightapi/interop.dsautomation~interop.dsautomation.idocument~saveas.html
Musisz więc zwrócić się do saveAs3:
https://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDocExtension~SaveAs3.html
Próbowałem z SaveAs3, ale nie ma opcji, która odpowiadałaby temu, czego szukam:

Po szybkim teście ten kod działa dla mnie:
Enum IfcFormat_e
Ifc2x3 = 23
Ifc4 = 4
End Enum
Const OUT_FILE_PATH As String = "C:\Test.ifc"
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
If Not swModel Is Nothing Then
ExportIfc swModel, OUT_FILE_PATH, IfcFormat_e.Ifc4
Else
MsgBox "Please open the model"
End If
End Sub
Sub ExportIfc(model As SldWorks.ModelDoc2, path As String, format As IfcFormat_e)
Dim curIfcFormat As Integer
curIfcFormat = swApp.GetUserPreferenceIntegerValue(swUserPreferenceIntegerValue_e.swSaveIFCFormat)
swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swSaveIFCFormat, format
Dim errors As Long
Dim warnings As Long
If False = model.Extension.SaveAs3(path, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, Nothing, errors, warnings) Then
Err.Raise vbError, "", "Failed to export file. Error code: " & errors
End If
swApp.SetUserPreferenceIntegerValue swUserPreferenceIntegerValue_e.swSaveIFCFormat, curIfcFormat
End Sub
Źródło:
https://www.codestack.net/solidworks-api/import-export/export-ifc/
Przystosowany do Saveas3
Dziękuję sbadenis
Problem nie polega na tym, że eksport nie działa, kod jest poprawny, tylko nie mam tego, czego chcę jako dane wyjściowe.
Wyjaśnienie:
Mam zespół składający się z dwóch części:

Żądana konfiguracja z wyszarzoną kulą:

Co otrzymuję po uruchomieniu programu:

I wygenerowany plik IFC:

Program nie bierze pod uwagę mojej konfiguracji solidworks.
Witam;
Cóż, z drugiej strony, zarządzanie konfiguracjami nie było częścią zadanego pytania....
Aby sprawdzić ilość konfiguracji:
Dim swModel As ModelDoc2
Dim ConfigCount as string
ConfigCount = swModel.GetConfigurationCount
....
Następnie, aby pobrać nazwy wszystkich konfiguracji:
Dim swModel As ModelDoc2
Dim AllConfNames as variant
AllConfNames = swModel.GetConfigurationNames()
...
Aby uzyskać aktywną nazwę konfiguracji:
Dim swModel As ModelDoc2
Dim ConfActName as string
ConfActName = swModel.GetActiveConfiguration.Name
... Wszystko, co musisz zrobić, to zbudować pętlę w makrze dostarczonym przez sbadenis i gotowe.
Pozdrowienia.
Witam
Ten komunikat nie jest przechwytywany przez funkcję saveAs. SW reaktywuje usunięty komponent i nagle eksport jest "niezgodny" z tym, czego chce Ka.Couff .
Nie jest to problem z konfiguracją, więc odpowiedź nie jest adekwatna ;)
Powinniśmy przyjrzeć się zdarzeniom SW, jeśli możemy wychwycić tę wiadomość i przeprowadzić leczenie.
2 polubienia
@Cyril.F
Tak, to wszystko
Próbowałem nagrać makro, uruchamiając manipulację ręcznie, ale nie ma nic, co wyświetlałoby komunikat:
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
' Save As
longstatus = Part.SaveAs3("XXX.IFC", 0, 0)
End Sub
Witam
W tej chwili nie mam zbyt wiele czasu, aby się temu przyjrzeć, ale jeśli nie możesz przechwycić wiadomości, zawsze istnieje możliwość usunięcia komponentu w stanie usuniętym, przeprowadzenia eksportu i zamknięcia bez zapisywania.
Interfejs API może w tej chwili nie zezwalać na dostęp do tej wiadomości (oprogramowanie dodaje dostęp do funkcji w miarę zwalniania oprogramowania).
1 polubienie
Witam
Aby to zrobić, musiałbyś być w stanie wybrać usunięte elementy, ale tak samo, nie mogłem znaleźć do tego żadnego kodu :/
Spójrz na ten kod, który wydaje się działać dla mnie (użyj polecenia systemu Windows:
https://www.codestack.net/solidworks-api/document/assembly/components/select-suppressed/
Lub za pomocą poleceń solidworks można sprawdzić komponenty w stanie usuniętym za pomocą tego polecenia:
http://help.solidworks.com/2020/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icomponent2~issuppressed.html?verRedirect=1
Witam
Dzięki @sbadenis, to działa!