Lynkoa

Export IFC VBA et éléments supprimés
  • Topic:
    • SOLIDWORKS

  • 13 answers
  • 289 views

By Ka.Couff The 11 January 2022

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

Answers

sbadenis | 21836 point(s)

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.

Maclane | 5498 point(s)

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

Ka.Couff | 593 point(s)

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.

Ka.Couff | 593 point(s)

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

 

sbadenis | 21836 point(s)

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

Ka.Couff | 593 point(s)

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.

Maclane | 5498 point(s)

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.

Cyril.f | 14382 point(s)

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. 

Ka.Couff | 593 point(s)

@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