Eksport i elementy usunięte IFC VBA

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!