Export IFC VBA et éléments supprimés

Bonjour, 

J'ai créé une macro sur Solidworks permettant de récupérer une liste d'assemblages, de les repositionner et de les enregistrer en assemblage sldw et en IFC.

Le programme fonctionne cependant dans les IFC générés, tous les éléments volontairement grisés dans les assemblages sont visibles.

Lorsque j'enregistre manuellement un IFC j'ai bien un message qui me demande si je veux résoudre les éléments cachés/supprimés, je coche non et j'obtiens bien le résultat voulu.

Savez-vous comment cocher cette case automatiquement en VBA ?

Merci

1 « J'aime »

Peut-être que si tu fais suivre le code ce serait plus facile.

La commande utilisé au minimum et/ou le code code complet pour être au top.

Ensuite ce sera plus simple de te répondre.

1 « J'aime »

Bonjour;

sbadenis  a raison, sans votre code ou la commande utilisée il n'est pas facile de répondre correctement... je tente quand même...

En temps normal ces options sont incluses dans la commande "Saveas..."

value = instance.SaveAs3(Name, Version, Options, ExportData, AdvancedSaveAsOptions, Errors, Warnings)

Utilisez la  swSaveAsOptions_Silent (dans les options) pour inhiber les messages solidworks

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

Cordialement

Bonjour,

Merci pour votre aide.


Voici la partie du code concerné:

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

 

En jonglant avec les options, je n'obtiens pas ce que je cherche.

Cette fois c'est @Maclane qui a raison, la fonction saveAs est obsolète:

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

Il faut donc se tourner vers la saveAs3:

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

J'ai bien essayé avec SaveAs3 mais il n'y a aucune option qui correspond à ce que je cherche:

 

Après essai rapide, ce code fonctionne pour moi:

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

La source:

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

adapté en saveas3

Merci sbadenis

Le problème n'est pas que l'export ne fonctionne pas, le code est correct, seulement je n'ai pas ce que je souhaite en sortie.

Une explication:

J'ai un assemblage avec deux pièces:

La configuration souhaitée avec la sphère grisée:

Ce que j'obtiens après l'exécution du programme:

 

Et le fichier IFC généré:

 

Le programme ne prend pas en compte ma configuration solidworks.

Bonjour;

Ben d'un autre coté la gestion des Configurations ne faisait pas partie de la question posée....
Pour connaitre la Quantité de Configuration :

Dim swModel As ModelDoc2
Dim ConfigCount as string

ConfigCount = swModel.GetConfigurationCount

....
Ensuite pour recuperer le Nom de toutes vos Configurations:

Dim swModel As ModelDoc2
Dim AllConfNames as variant

AllConfNames = swModel.GetConfigurationNames()

...
Pour obtenir le Nom de la configuration Active:

Dim swModel As ModelDoc2
Dim ConfActName as string

ConfActName = swModel.GetActiveConfiguration.Name


... Ne vous reste plus qu'a construite une boucle dans la macro fournie par sbadenis et le tour est joué.

Cordialement.

Bonjour,

Ce message n'est pas intercepté par la fonction saveAs. SW réactive le composant supprimé et du coup l'export n'est "pas conforme" à ce que souhaite Ka.Couff.

Ce n'est pas un problème de configuration, la réponse n'est donc pas adéquate ;)

Faudrait regarder du côté des événements SW si on peut capter ce message et faire un traitement. 

2 « J'aime »

@Cyril.F

Oui c'est ça
J'avais essayé d'enregistrer la macro en lançant la manipulation manuellement mais il n'y a rien qui affiche le message:

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

Bonjour,

J'ai peu de temps en ce moment pour regarder ça mais à défaut d'intercepter le message il y a toujours la possibilité de supprimer le composant en état de suppression, faire l'export et fermer sans sauvegarder.

Il se peut que l'API ne permette pas d'accéder à ce message à l'heure actuelle (SW ajoute des accès aux fonctions au fur et à mesure des versions de SW).

1 « J'aime »

Bonjour

Pour faire ça il faudrait pouvoir sélectionner les éléments supprimés, mais pareil, je n'ai pas trouvé de code pour ça :/

Regarde ce code qui semble fonctionner pour moi (utilise une commande windows:

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

Ou sinon via les commandes solidworks tu peux vérifier les composants à l'état supprimé avec cette commande:

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

Bonjour, 

Merci @sbadenis, ça fonctionne!