IFC VBA Export und gelöschte Elemente

Hallo 

Ich habe ein Makro in Solidworks erstellt, mit dem Sie eine Liste von Baugruppen abrufen, neu positionieren und als sldw-Baugruppen und IFCs speichern können.

Das Programm arbeitet jedoch in den generierten IFCs, alle Elemente, die in den Baugruppen bewusst ausgegraut sind, sind sichtbar.

Wenn ich eine IFC manuell speichere, erhalte ich eine Meldung, ob ich die versteckten/gelöschten Elemente lösen möchte, ich setze ein Häkchen bei Nein und erhalte das gewünschte Ergebnis.

Wissen Sie, wie Sie dieses Kontrollkästchen in VBA automatisch aktivieren können?

Vielen Dank

1 „Gefällt mir“

Vielleicht wäre es einfacher, wenn Sie dem Code folgen.

Die Reihenfolge, in der mindestens verwendet wird, und/oder der vollständige Codecode, der oben stehen soll.

Dann wird es einfacher sein, Ihnen zu antworten.

1 „Gefällt mir“

Hallo;

Badenis  hat Recht, ohne Ihren Code oder den verwendeten Befehl ist es nicht einfach, richtig zu antworten... Ich versuche es trotzdem...

Normalerweise sind diese Optionen in der Option "Speichern unter..." "

Optionen, ExportData, AdvancedSaveAsOptions, Fehler, Warnungen)

Verwenden Sie die  swSaveAsOptions_Silent (in den Optionen), um SOLIDWORKS Nachrichten stummzuschalten

Quelle: https://help.solidworks.com/2020/...swSaveAsOptions_e.html

Herzliche Grüße

Hallo

Danke für Ihre Hilfe.


Hier ist der betreffende Teil des Codes:

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

 

Durch das Jonglieren mit Optionen bekomme ich nicht, wonach ich suche.

Diesmal ist es @Maclane richtig, die Funktion saveAs ist veraltet:

https://help.solidworks.com/2020/english/api/draftsightapi/interop.dsautomation~interop.dsautomation.idocument~saveas.html

Sie müssen sich also an die saveAs3 wenden:

https://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDocExtension~SaveAs3.html

Ich habe es mit SaveAs3 versucht, aber es gibt keine Option, die dem entspricht, wonach ich suche:

 

Nach einem kurzen Test funktioniert dieser Code für mich:

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

Quelle:

https://www.codestack.net/solidworks-api/import-export/export-ifc/

Angepasst an SAVEAs3

Danke sbadenis

Das Problem ist nicht, dass der Export nicht funktioniert, der Code ist korrekt, nur habe ich nicht das, was ich als Ausgabe haben möchte.

Eine Erklärung:

Ich habe eine Baugruppe mit zwei Teilen:

Die gewünschte Konfiguration mit der ausgegrauten Kugel:

Was ich nach dem Ausführen des Programms bekomme:

 

Und die generierte IFC-Datei:

 

Das Programm berücksichtigt meine SOLIDWORKS Konfiguration nicht.

Hallo;

Nun, auf der anderen Seite war die Verwaltung der Konfigurationen nicht Teil der gestellten Frage....
So ermitteln Sie die Konfigurationsmenge:

Dim swModel As ModelDoc2
Dim ConfigCount as string

ConfigCount = swModel.GetConfigurationCount

....
Um dann den Namen all Ihrer Konfigurationen abzurufen:

Dim swModel As ModelDoc2
Dim AllConfNames as variant

AllConfNames = swModel.GetConfigurationNames()

...
So rufen Sie den Namen der aktiven Konfiguration ab:

Dim swModel As ModelDoc2
Dim ConfActName as string

ConfActName = swModel.GetActiveConfiguration.Name


... Alles, was Sie tun müssen, ist, eine Schleife in dem von sbadenis bereitgestellten Makro zu erstellen, und schon sind Sie fertig.

Herzliche Grüße.

Hallo

Diese Nachricht wird von der saveAs-Funktion nicht abgefangen. SW reaktiviert die gelöschte Komponente und plötzlich ist der Export "nicht konform" mit dem, was Ka.Couff will .

Dies ist kein Konfigurationsproblem, daher ist die Antwort nicht angemessen ;)

Wir sollten uns SW-Ereignisse ansehen, wenn wir diese Botschaft aufgreifen und eine Behandlung durchführen können. 

2 „Gefällt mir“

@Cyril.F

Ja, das war's
Ich hatte versucht, das Makro aufzuzeichnen, indem ich die Manipulation manuell startete, aber es gibt nichts, was die Meldung anzeigt:

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

Hallo

Ich habe im Moment nicht viel Zeit, mir das anzusehen, aber wenn Sie die Nachricht nicht abfangen können, gibt es immer die Möglichkeit, die Komponente im gelöschten Zustand zu löschen, den Export durchzuführen und zu schließen, ohne sie zu speichern.

Die API lässt zu diesem Zeitpunkt möglicherweise keinen Zugriff auf diese Nachricht zu (SW fügt den Zugriff auf Funktionen hinzu, sobald SW veröffentlicht wird).

1 „Gefällt mir“

Hallo

Um dies zu tun, müssten Sie in der Lage sein, die gelöschten Elemente auszuwählen, aber ich konnte keinen Code dafür finden :/

Schauen Sie sich diesen Code an, der für mich zu funktionieren scheint (verwenden Sie einen Windows-Befehl:

https://www.codestack.net/solidworks-api/document/assembly/components/select-suppressed/

Oder Sie können über die SOLIDWORKS Befehle die Komponenten im gelöschten Zustand mit diesem Befehl überprüfen:

http://help.solidworks.com/2020/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icomponent2~issuppressed.html?verRedirect=1

Hallo 

Danke @sbadenis, es funktioniert!