IFC VBA-export en verwijderde items

Hallo 

Ik heb een macro gemaakt op Solidworks waarmee je een lijst met assemblages kunt ophalen, ze kunt verplaatsen en ze kunt opslaan als sldw-assemblages en IFC's.

Het programma werkt echter in de gegenereerde IFC's, alle elementen die opzettelijk grijs zijn gemaakt in de assemblages zijn zichtbaar.

Wanneer ik handmatig een IFC opsla krijg ik een bericht met de vraag of ik de verborgen/verwijderde elementen wil oplossen, ik vink nee aan en ik krijg het gewenste resultaat.

Weet u hoe u dit vakje automatisch kunt aanvinken in VBA ?

Bedankt

1 like

Misschien zou het gemakkelijker zijn als je de code volgt.

De gebruikte bestelling en/of de volledige codecode moet bovenaan staan.

Dan is het makkelijker om je te antwoorden.

1 like

Hallo;

Sbadenis  heeft gelijk, zonder uw code of het gebruikte commando is het niet eenvoudig om correct te antwoorden... Ik probeer het toch...

Normaal gesproken zijn deze opties opgenomen in de "Opslaan..." "

Opties, ExportData, AdvancedSaveAsOptions, Fouten, Waarschuwingen)

Gebruik de  swSaveAsOptions_Silent (in de opties) om solidworks-berichten te dempen

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

Vriendelijke groeten

Hallo

Dank u voor uw hulp.


Dit is het deel van de code waar het om gaat:

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

 

Door te jongleren met opties krijg ik niet wat ik zoek.

Deze keer is het @Maclane juist, de saveAs-functie is verouderd:

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

Dus je moet je wenden tot de saveAs3:

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

Ik heb het geprobeerd met SaveAs3, maar er is geen optie die overeenkomt met wat ik zoek:

 

Na een snelle test werkt deze code voor mij:

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

Bron:

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

Aangepast om te besparen3

Dank je wel sbadenis

Het probleem is niet dat de export niet werkt, de code is correct, alleen heb ik niet wat ik wil als uitvoer.

Een toelichting:

Ik heb een assemblage met twee delen:

De gewenste configuratie met de grijze bol:

Wat ik krijg na het uitvoeren van het programma:

 

En het gegenereerde IFC-bestand:

 

Het programma houdt geen rekening met mijn solidworks-configuratie.

Hallo;

Welnu, aan de andere kant maakte het beheer van configuraties geen deel uit van de gestelde vraag....
Om de configuratiehoeveelheid te achterhalen:

Dim swModel As ModelDoc2
Dim ConfigCount as string

ConfigCount = swModel.GetConfigurationCount

....
Ga vervolgens als volgt te werk om de naam van al uw configuraties op te halen:

Dim swModel As ModelDoc2
Dim AllConfNames as variant

AllConfNames = swModel.GetConfigurationNames()

...
Om de actieve configuratienaam op te halen:

Dim swModel As ModelDoc2
Dim ConfActName as string

ConfActName = swModel.GetActiveConfiguration.Name


... Het enige wat je hoeft te doen is een lus bouwen in de macro van sbadenis en je bent klaar.

Vriendelijke groeten.

Hallo

Dit bericht wordt niet opgevangen door de functie opslaan. SW activeert het verwijderde onderdeel opnieuw en plotseling is de export "niet compliant" met wat Ka.Couff wil .

Dit is geen configuratieprobleem, dus de respons is niet voldoende ;)

We moeten kijken naar SW-evenementen als we deze boodschap kunnen oppikken en een behandeling kunnen doen. 

2 likes

@Cyril.F

Ja, dat is het
Ik had geprobeerd de macro op te nemen door de manipulatie handmatig te starten, maar er is niets dat het bericht weergeeft:

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

Ik heb op dit moment niet veel tijd om hiernaar te kijken, maar als je het bericht niet kunt onderscheppen, is er altijd de mogelijkheid om het onderdeel in de verwijderde staat te verwijderen, de export uit te voeren en te sluiten zonder op te slaan.

Het is mogelijk dat de API op dit moment geen toegang tot dit bericht toestaat (SW voegt toegang tot functies toe wanneer SW wordt vrijgegeven).

1 like

Hallo

Om dat te doen, zou je de verwijderde items moeten kunnen selecteren, maar hetzelfde, ik kon daar geen code voor vinden :/

Kijk naar deze code die lijkt te werken voor mij (gebruik een windows commando:

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

Of anders kunt u via de solidworks-commando's de componenten in de verwijderde staat controleren met dit commando:

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

Hallo 

Bedankt @sbadenis, het werkt!