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!