Exporter la "Référence du composant"

Bonjour à tous,

Je souhaite récupérer la référence du composant pour l’utiliser en tant que propriété personnalisée lors d’un export en IFC. Est-ce possible ?

Merci.

Bonjour sdevauchelle,

Voici ce que je viens de trouver sur le web à ce sujet=>Welcome to the SOLIDWORKS Web Help
et ça aussi=>Guide Complet pour Importer et Exporter des Fichiers .IFC dans SolidWorks - S3D Engineering
Bon courage.
@+.
AR.

Bonjour;

Par Macro :

Via Nomenclature:
https://my.solidworks.com/reader/onlinehelp/2021%252Fenglish%252Fsolidworks%252Fsldworks%252Fc_component_references.htm/component-references

On peut donc raisonnablement penser que la propriété est: « Component Reference » ou bien « ComponentReference »
(A tester, ce n’est pas une propriété ni une information que nous utilisons dans notre BE=> Pas de composants virtuels chez nous…)

Mais techniquement je trouve étrange le fait d’utiliser les « Réferences de Composants » sur des composants possédant une « Famille de pièce »:
entre « Designation », le « Nom de la configuration » et « Description » cela ne fait-il déjà pas assez de possibilités de nommage ? (Risque de confusion ?)

2 « J'aime »

Merci pour vos réponses.
Je vais préciser ce que je cherche à faire.
Je travaille sur des réseaux avec le module de routage, et je dois les exporter en IFC pour les transmettre au BIM manager.
Voici comment je procède:
1 - enregistrement de mon assemblage en IFC, avec export et mappage des propriétés personnalisées.
2 - J’ouvre mon IFC sous SIMPLEBIM, afin de le géoréférencer.
3 - sous SIMPLEBIM, on est capable de renseigner manuellement des nouvelles propriétés, voir d’automatiser cette tâche.

Problème, Solidworks n’est pas capable de générer des Global ID (ou GUID) différentes pour chaque élément de l’assemblage.
On avait trouvé une parade en combinant les « container name » et "name’’ (en gros, le nom de l’assemblage parent et celui de la pièce) dans le but de créer une nouvelle référence différenciant tous les composants et exploitable dans le BIM. Mais cette parade n’est pas viable car, lors d’un nouvel export IFC (nouvel indice), Solidworks va attribuer aléatoirement le suffixe différenciant les pièces identiques (par exemple deux robinets identiques). Il est donc impossible de créer un export robuste.

C’est pourquoi je cherche à créer une nouvelle propriété exportable en IFC, renseignée une bonne fois pour toutes au niveau de l’assemblage. La case « référence du composant » me semblait idéale car je pouvais y renseigner manuellement le TAG PID de chaque élément de tuyauterie.
Malheureusement, je ne trouve pas de manière de l’exporter vers un IFC.
Il est bien possible de le récupérer facilement en BOM sur une mise en plan, ce qui est intéressant pour d’autres usages, mais pas pour un export vers le BIM…

Dans ce cas, la macro avec une concaténation automatisée me semble la solution la plus pertinente…
Attention au « Niveau » du nom de l’assemblage à récupérer (Assemblage de tête ou sous-Assemblage ?)

1 « J'aime »

Alors là, je suis largué…
J’ai exécuté la macro (en affichant la fenêtre d’éxécution), mais je ne vois vraiment pas à quoi ça sert…

De quelle macro parle-tu ?

S’il s’agit de celle de « codestack.net » il faut la modifier :
« Cette Macro a une option pour traiter uniquement les composants virtuels en définissant l’option VIRTUAL_ONLY sur True. »
pour traiter tous les composants il faut basculer l’option VIRTUAL_ONLY* sur False

Il faut modifier la macro:
Actuellement elle fait l’inverse de ce que tu souhaite obtenir:
=> Elle sert à copiez le nom du composant dans la référence du composant.
Je l’ai proposées pour l’exemple puisqu’elle utilise la propriété "
ComponentRéférence" il s’agit donc d’une propriété « native » sous Solidworks qui doit être utilisable dans ta liste de propriété (je n’ai pas trouvé son intitulé exact pour l’instant).

La macro ci-dessous sera sans doutes un peu plus parlante:

1 « J'aime »

Non, je parle de celle de ton message précédent :

Cette macro " Traverse Assembly at Component and Feature Levels Using Recursion Example (VBA)"
Est juste une illustration de ce qui est possible de faire si on souhaite récupérer
le Nom d’un sous-assemblage plutôt de le Nom de l’assemblage de tête.
=> Rapport à la concatenation demandée (Tout dépende de ta définition

1 « J'aime »

je peux concaténer différentes propriétés sous SIMPLEBIM, mais il faut que je trouve une propriété qui soit différente pour deux éléments identiques même s’ils se trouvent dans le même assemblage.
Il y a bien le nom, mais Solidworks génère aléatoirement le suffixe, donc ce n’est pas stable.
« container name » revient au nom de l’assemblage parent dans l’IFC.
C’est pourquoi je trouvais idéal d’essayer de récupérer « référence du composant », que je peux nommer comme je le souhaite…
Il y aurait bien « identificateur d’occurrence » également, mais je ne parviens pas à le modifier (il est grisé)

Ce paramètre n’est pas modifiable ,il dépend, comme son nom l’indique, du nombre d’occurrence déposée de la pièce dans l’assemblage (supprimée ou non).

2 « J'aime »

Bonjour @sdevauchelle

Je suis exactement dans le même cas que toi et malheureusement j’en suis exactement arrivé à la même conclusion, sauf que pour moi le but était de produire une maquette naviswoks.
Alors si jamais tu trouves une solution d’exporter cette propriété « ref de composant » je suis preneur.

bon courage.

J’en suis arrivé à essayer de créer une macro qui crée des configuration pour les pièces pour lesquelles la « référence de composant » est renseignée. Afin de, à partir de cette nouvelle config, créer une propriété perso « Tag PID » en utilisant $PRP:« SW-Configuration Name ».
L’idée étant de faire tourner cette macro juste avant d’enregistrer en IFC, et ne ne pas enregistrer l’assemblage et ses sous-ensembles.

Voilà où j’en suis : la macro crée bien les configurations (dérivées), et intègre bien la valeur de la « référence de composant » dans les propriétés personnalisées.
Par contre, quand j’ouvre le .IFC, pour deux pièces identiques (configurations avant macro identiques ou non), les propriétés « Tag PID » sont les mêmes.

Voici la macro actuelle :

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swComp As SldWorks.Component2
Dim swPart As SldWorks.ModelDoc2
Dim swConfig As SldWorks.Configuration
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim vComponents As Variant
Dim i As Long
Dim compRef As String
Dim parentConfig As String

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then Exit Sub
    Set swAssy = swModel
    vComponents = swAssy.GetComponents(False)

    If Not IsEmpty(vComponents) Then
        For i = 0 To UBound(vComponents)
            Set swComp = vComponents(i)
            
            If swComp.GetSuppression = swComponentFullyResolved Then
                compRef = swComp.ComponentReference
                
                If compRef <> "" Then
                    Set swPart = swComp.GetModelDoc2
                    
                    If Not swPart Is Nothing Then
                        parentConfig = swComp.ReferencedConfiguration
                        
                        ' 1. Créer la config au nom du TAG (ex: "V-102")
                        ' On utilise le TAG pur comme nom de config
                        Set swConfig = swPart.ConfigurationManager.AddConfiguration(compRef, "", "", 256, parentConfig, "")
                        
                        ' 2. Basculer l'instance sur cette config
                        swComp.ReferencedConfiguration = compRef
                        
                        ' 3. Écrire dans l'onglet "PERSONNALISER" (Global) du document pièce
                        ' On pointe vers le nom de la config active
                        Set swCustPropMgr = swPart.Extension.CustomPropertyManager("")
                        
                        ' La valeur "$PRP..." force SW à lire le nom de la config en cours
                        swCustPropMgr.Add3 "Tag PID", swCustomInfoText, "$PRP:""SW-Configuration Name""", 1
                    End If
                End If
            End If
        Next i
    End If

    swModel.ForceRebuild3 True
    MsgBox "Propriété globale 'Tag PID' liée au nom de configuration." & vbCrLf & _
           "Prêt pour l'export IFC."
End Sub

Bonjour;

Depuis la version 2025 de Solidworks il semble être possible de modifier le fichier *.xml pour mapper les propriété à exporter :

Pour la macro, pourquoi ne pas se contenter d’un compteur à la place (ou en plus) de Tag PID?
En général la variable ‹ i › avec i=i+1 (pour éviter le Zéro) fait bien le Job…

Oui, je l’utilise déjà pour trier les propriétés dans un Pset donné.

J’ai pas saisi le compteur ?

Je te proposait d’ajouter un compteur sur :

swCustPropMgr.Add3 "Tag PID", swCustomInfoText, "$PRP:""SW-Configuration Name""", 1

du type :

swCustPropMgr.Add3 "Tag PID" , swCustomInfoText, "$PRP:""SW-Configuration Name""" & "_" i+1, 1

De manière à « Forcer » la différenciation de ta nouvelle propriété « Tag PID » en ajoutant ce compteur en bout de chaine de caractère:
ainsi « Tag PID » deviendrait :
Le Nom de la configuration_1
Le Nom de la configuration_2

Le Nom de la configuration_11

(selon le nombre de configuration), c’est une sécurité supplémentaire, facultatif , pour éviter les doublons…

j’avais pensée a une solution plus radical qui était rendre indépendant le composant à tagger en créant un dossier avec l’ensemble des éléments propre à l’affaire traitée.
Ce dossier regrouperait uniquement l’instru et la robinetterie si je me trompe.

J’ai essayé, mais il refuse l’ajout de & « _ » i+1