Récupérer le DocumentId "réel" d'un Element

Tous sujets concernant le développement spécifique de TopSolid avec l'interface COM, le langage LIP, la programmation de l'API en VB...

Modérateurs : remi77, D@vid, Alexis GERARD

Répondre
La loutre
Lieutenant-colonel
Lieutenant-colonel
Messages : 1015
Enregistré le : 18 oct. 2020, 21:32
Réponses : 41
Version TopSolid : 7.13
Module TopSolid : TopSolid'Steel
Localisation : Valenciennes
Contact :

Récupérer le DocumentId "réel" d'un Element

Message non lu par La loutre »

@PierreChampeix
Bonjour, je bute sur un problème. J'essaye de créer une macro qui ouvre les fichiers listés par une nomenclature. Pour cela je parcours la nomenclature et récupère une liste d'ElementId pour chaque ligne via la méthode GetRowCountedEntities().
Ensuite pour chaque ElementId, je récupère le DocumentId associé.
Le problème c'est que le DocumentId retourné ne correspond pas au document de l'entité mais, dans le cas d'un profil, à l'assemblage le contenant.
Dans le cas suivant, j'ai une ligne dans ma nomenclature avec les tubes 100x20.
2021-12-30 12_16_26-2.3 Structure - Liste des profils - TopSolid 7.png
Et l'API me renvoie DocumentId de l'assemblage "2.3 Structure".
2021-12-30 12_14_32-2.3 Structure - Liste des profils_ - TopSolid 7.png
Et pourtant, quand je demande le FriendlyName de l'ElementId, j'ai bien le nom correct du document que je cherche à ouvrir.
Y a t-il un moyen d'ouvrir les fichiers associés à une ligne comme dans le menu contextuel de TS ?
2021-12-30 12_25_16-2.3 Structure - Liste des profils - TopSolid 7.png
Je ne sais pas si j'ai bien réussi à me faire comprendre.
par PierreChampeix » 03 janv. 2022, 09:32
Bonjour et bonne année @La loutre !
Du coup, pour juste récupérer le niveau n+1, il faut passer par la méthode GetOccurrenceDefinition. Et pour le niveau 0, c'est GetOccurrenceSource
A+
Pierre
Se rendre au message
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
PierreChampeix
Seconde Classe
Seconde Classe
Messages : 9
Enregistré le : 03 nov. 2021, 14:38
Réponses : 2
Version TopSolid : 7.13
Module TopSolid : TopSolid'Design

Re: Récupérer le DocumentId "réel" d'un Element

Message non lu par PierreChampeix »

Bonjour @La loutre
En effet, c'est normal que ça retourne le document assemblage puisqu'une ligne d'un document nomenclature retourne l'objet du document référencé, ici ton document assemblage.
L'ElementId que tu récupères correspond à l'ElementId de l'occurrence dans le document assemblage de ton profil. Ainsi, pour récupérer le bon ElementId, tu peux utiliser la méthode IEntities.GetOccurrenceSource en donnant l'ElementId que tu as déjà.
A+
Pierre
La loutre
Lieutenant-colonel
Lieutenant-colonel
Messages : 1015
Enregistré le : 18 oct. 2020, 21:32
Réponses : 41
Version TopSolid : 7.13
Module TopSolid : TopSolid'Steel
Localisation : Valenciennes
Contact :

Re: Récupérer le DocumentId "réel" d'un Element

Message non lu par La loutre »

@PierreChampeix
Ok merci. Effectivement, ça fonctionne mieux. Autre souci :? : Quand cette pièce est contenue dans une arborescence de sous-assemblage, IEntities.GetOccurrenceSource() me renvoie le N++ assemblage et non la pièce elle-même.
Dans l'exemple suivant, je suis à la ligne 4.1.1 et il me renvoie l'assemblage 4.
2021-12-30 17_09_13-2.3 Structure - Commande profil - TopSolid 7.png
Avec cette nomenclature multi-niveau, je pourrais retrouver la pièce en suivant l'arborescence mais quand je travaille sur une nomenclature râteau comme la suivante, je ne vois pas trop comment faire.
2021-12-30 17_19_53-2.3 Structure - Liste des profils - TopSolid 7.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
PierreChampeix
Seconde Classe
Seconde Classe
Messages : 9
Enregistré le : 03 nov. 2021, 14:38
Réponses : 2
Version TopSolid : 7.13
Module TopSolid : TopSolid'Design

Re: Récupérer le DocumentId "réel" d'un Element

Message non lu par PierreChampeix »

Bonjour et bonne année @La loutre !
Du coup, pour juste récupérer le niveau n+1, il faut passer par la méthode GetOccurrenceDefinition. Et pour le niveau 0, c'est GetOccurrenceSource
A+
Pierre
La loutre
Lieutenant-colonel
Lieutenant-colonel
Messages : 1015
Enregistré le : 18 oct. 2020, 21:32
Réponses : 41
Version TopSolid : 7.13
Module TopSolid : TopSolid'Steel
Localisation : Valenciennes
Contact :

Re: Récupérer le DocumentId "réel" d'un Element

Message non lu par La loutre »

Merci, meilleurs vœux également pour cette nouvelle année @PierreChampeix
C'est bon, avec la méthode GetOccurrenceDefinition, j'arrive à récupérer le document de l'élément et non son parent.
Sujet résolu :D
Répondre