[API Solidworks] Nom de l'assemblage parent comme dans nomenclature

Bonjour,

J'ai des notions de VBA mais je débute avec l'API Solidworks et je dois modifier la macro d'un collègue, lancée dans une mise en plan avec un composant sélectionné.

Voici ce qui me semble être l'endroit du code qui pose problème :

swEnt = swSelMgr.GetSelectedObject5(iSel)

swSelComp = swEnt.GetComponent

swSelModel = swSelComp.GetModelDoc

Nom = swSelModel.GetTitle

Nom contient alors le nom de la pièce sélectionnée, là où je voudrais retourner le nom de son assemblage parent, comme solid le fait très bien pour la nomenclature.

Je précise le code fonctionne quand les configurations de l'assemblages sont réglées ainsi :

affichage des composants enfants utilisés comme sous-assemblage : "montrer"

et que nous voulons le modifier pour qu'il fonctionne aussi quand on règle sur "cacher"

 

Merci pour toute aide que vous pourrez m'apporter ! 

Mauvaise réponse ...

Merci de mettre le code en entier c'est plus simple pour comprendre même si dans le texte tu ne parle ensuite que d'une partie.

Mais effectivement ce n'est pas la partie qui concerne ta demande. (Tu y récupèere le nom de la pièce sélectionné dans l'assemblege)

Le code complet fait plusieurs milliers de lignes, mais cette partie est indépendante, j'ai juste coupé quelques lignes précédentes qui traitent les sélections multiples. 

Juste après le passage copié, on compare la valeur de la variable nom avec chaque désignation de la nomenclature. Et bien sûr, comme dans la nomenclature ne figure que le nom de l'assemblage parent, tout s'arrête. 

Si je comprends bien ta réponse sbadenis, à partir du moment où les composants enfants sont cachés dans la configuration de mon assemblage, aucune méthode appliquée à swSelModel ne pourra "remonter" à des propriétés du parent ? 

Je cherchais une sorte de swSelModel."GetParent", qui me permettrait de retomber comme dans ma nomenclature aux propriétés de l'assemblage supérieur. 

Quand les enfants sont montrés dans les propriétés de la config, quand je clique sur la même pièce de la MEP, ça me retourne bien le nom de l'assemblage parent.

Je ne l'ai pas précisé, mais la propriété n'est pas directement cochée dans l'onglet propriété, on pilote la valeur de $JAMAIS_DEVELOPPER_DANS_NOMENCLATURE par la famille de pièce.  C'est O ou N d'après ce que je vois dans l'aide API; Il ne semble pas exister de valeur pour basculer en "promouvoir", ce que je n'ai pas testé du coup. 

 

 

 

 

Si tu souhaite un 'GetParent' :

 

http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IComponent2~GetParent.html

1 « J'aime »

Merci mandragore!  J'ai testé mais ça ne progresse pas. 

Set swParentComp = swSelComp.GetParent

Set swSelModel2 = swParentComp.GetModelDoc

 Nom = swSelModel2.GetTitle

Mais nom contient toujours le nom de la pièce, comme si le GetParent n'existait pas (il ne renvoie pourtant pas NULL) 

 

Et si tu passe directement sur du Nom = swParentComp.GetTitle  ?

 

Tu a toutes les info de composant/parent ici tu devrait pouvoir trouver ton bonheur il y a aussi la gestion des configurations.

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iconfiguration~getrootcomponent3.html

1 « J'aime »

Merci Mandragore, j'ai fini par faire fonctionner le GetParent, en une seule étape :

Nom = swSelComp.GetParent.GetModelDoc.GetTitle

La première partie seule, swSelComp.GetParent me posait problème, sans doute pour des questions de déclaration de type.

 

Parfait ! Personnellement j'évite d'utiliser la sélection avant une action. Le logiciel sais ou il en es en théorie ça évite des lignes inutile je trouve. 

 

Enfin j'ai pas fais énormément d'API sur solidworks je me contente surtout de faire des remontage ou quelques gestion de fichier. je ne fais pas de lecture ou écriture pour les nomenclatures.