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?
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
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.
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
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).