Gestion des d'affichages des pieces et assemblages

Gestion des d'affichages des pieces et assemblages

julien.avril
Enthusiast Enthusiast
1 308 Visites
21 Réponses
Message 1 sur 22

Gestion des d'affichages des pieces et assemblages

julien.avril
Enthusiast
Enthusiast

Bonjour

 

Dans mon entreprise , nous avons un assemblage qui contient beaucoup d'assemblages et de Pieces.

 

Il est très compliqué de sélectionner les pièces car trop nombreuses.

 

J'aimerais afficher un ensemble de pièces et pas d'autre.

 

Exemple:

 

J'ai un ensemble de 5 modules qui porte un noms différent module1, module2 ....

julienavril_0-1633691066516.png

Dans chaque module, il y a des pièces que je souhaite afficher comme luminaire et poteau qui ne sont pas unique.

 

julienavril_1-1633691101540.png

Je n'arrive pas à a faire afficher la pièce qui contient le nom "luminaire" et "Poteau".

 

Peux-être je devrais mettre une ipropriété dans chaque pièces et afficher la pièce si l'ipropriéré est présente

Mais je ne sais pas comment réaliser cette fonction car il y a un gestion d'affichage par le nom.

 

Merci pour vos idée

 

0 J'aime
Solutions acceptées (2)
1 309 Visites
21 Réponses
Replies (21)
Message 2 sur 22

ThomasB44
Mentor
Mentor

Salut @julien.avril 

Sélectionne une pièce ou plusieurs (exemple : un luminaire et un poteau) puis clic droit, sélectionner toutes les occurrences :

Capture.PNG

Et enfin clic droit, isoler :

ThomasB44_0-1633692838068.png


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 3 sur 22

julien.avril
Enthusiast
Enthusiast

est-ce que l'on peut traduire ca en ilogic?

0 J'aime
Message 4 sur 22

ThomasB44
Mentor
Mentor

Oui, il suffit de boucler sur l'ensemble des occurrences de l'assemblage.

Si le nom de la pièce ou de l'ensemble = "poteau" alors : visible

Sinon : Invisible

Et ainsi de suite.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 5 sur 22

julien.avril
Enthusiast
Enthusiast

oui j'y ai bien pensé mais le problème est que Inventor crée des pièces unique donc le poteau , il le nomme "poteau1" , "poteau 2" ... et je n'arrive pas a rechercher un nom qui contient "poteau)

0 J'aime
Message 6 sur 22

ThomasB44
Mentor
Mentor

Non il créé :

Poteau:1

Poteau:2

Il suffit de faire un split pour retirer le ":" et ce qui se trouve derrière.

Ou d'aller chercher le nom de fichier, qui est toujours le même quel que soit l'occurrence.

 

Sinon il y a aussi les vues de représentations, qui sont très utiles dans ce genre de cas.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 7 sur 22

julien.avril
Enthusiast
Enthusiast

Peux-tu me donner le code pour remplacer ca avec la

fonction split que je ne connais pas

 

 

julienavril_0-1633695441142.png

 

0 J'aime
Message 8 sur 22

ThomasB44
Mentor
Mentor

Voici le principe de la fonction Split :

Dim NomOccurrence, NomUnique As String
NomOccurrence = "Poteau:1865446546"
Words = Split(NomOccurrence, ":")
NomUnique = Words(0)
MessageBox.Show(NomUnique, "Title")

Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 9 sur 22

julien.avril
Enthusiast
Enthusiast

Comment je peux avoir la liste de toutes les occurrences de poteau

0 J'aime
Message 10 sur 22

ThomasB44
Mentor
Mentor

En voici un exemple :

 

 

Sub Main TraverseAssemblySample()
'Get the active assembly.
Dim oAsmDoc As AssemblyDocument
oAsmDoc = ThisApplication.ActiveDocument

Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences)

End Sub

Private Sub TraverseAssembly(ByVal Occurrences As ComponentOccurrences)
'Iterate through all of the occurrence in this collection. This
'represents the occurrences at the top level of an assembly.
For Each oOcc As ComponentOccurrence In Occurrences

'Get the document file for this occurrence
Dim oDoc As Document
oDoc = oOcc.Definition.Document
*******************
'Do some stuff here
*******************

'Check to see if this occurrence represents a subassembly
'and recursively call this function to traverse through it.
If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
Call TraverseAssembly(oOcc.SubOccurrences)
End If
Next
End Sub

 

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 11 sur 22

julien.avril
Enthusiast
Enthusiast

désolé mais la ca dépasse mes compétences et je ne comprend pas ce code.

Je ne vois pas ou indiquer "poteau" dans ce code

 

0 J'aime
Message 12 sur 22

ThomasB44
Mentor
Mentor
Solution acceptée

Tu vas comprendre en lançant ce code dans un petit ensemble.

Ce n'est pas du purement du iLogic (les commandes qui apparaissent violet), mais du VB.NET, c'est presque comme du VBA, et beaucoup plus complet.

Sub Main
    'Get the active assembly.
    Dim oAsmDoc As AssemblyDocument
    oAsmDoc = ThisApplication.ActiveDocument

    Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences)

End Sub

Private Sub TraverseAssembly(ByVal Occurrences As ComponentOccurrences)
    'Iterate through all of the occurrence in this collection.  This
    'represents the occurrences at the top level of an assembly.
    For Each oOcc As ComponentOccurrence In Occurrences

        'Get the document file for this occurrence
        Dim oDoc As Document
        oDoc = oOcc.Definition.Document
		
		'************************************
		Dim oFileName, oOccName As String
		Words = Split(oOcc.Name, ":")
		oOccName = Words(0)
		Words = Split(oDoc.DisplayName, ".")
		oFileName = Words(0)
		MessageBox.Show("FileName : " & oFileName & _
		vbNewLine & "DisplayName : " & oOccName, "iLogic")
		'***********************************

        'Check to see if this occurrence represents a subassembly
        'and recursively call this function to traverse through it.
        If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
            Call TraverseAssembly(oOcc.SubOccurrences)
        End If
    Next
End Sub

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 13 sur 22

julien.avril
Enthusiast
Enthusiast

dans ton code , je ne comprend pas a quoi sert les boites de dialogue.

A la fin il ne m'affiche pas les éléments demandés

 

0 J'aime
Message 14 sur 22

ThomasB44
Mentor
Mentor

La boite de dialogue est juste un exemple qui te donne le nom du fichier et le nom d'affichage de l'occurrence.

Tu n'as plus qu'à faire tes conditions et changer l'état de visibilité du composant.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 15 sur 22

patrick.emin
Alumni
Alumni

Bonjour @julien.avril 

Si une des réponses résout votre problème ou vous a permis de mieux le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime
Message 16 sur 22

julien.avril
Enthusiast
Enthusiast

J'ai presque réussi mais il me reste juste une petite variable que je n'arrive pas à faire.

Avec le code ci dessous, j'arrive à masquer tout les poteaux qui se trouvent dans mon premier module , mais pas les autres, il faudrait  que le code recherche dans tous les assemblage

julienavril_0-1634561729507.png

 

julienavril_1-1634561747679.png

 

 

 

Sub Main
    'Get the active assembly.
    Dim oAsmDoc As AssemblyDocument
    oAsmDoc = ThisApplication.ActiveDocument

    Call TraverseAssembly(oAsmDoc.ComponentDefinition.Occurrences)

End Sub

Private Sub TraverseAssembly(ByVal Occurrences As ComponentOccurrences)
    'Iterate through all of the occurrence in this collection.  This
    'represents the occurrences at the top level of an assembly.
    For Each oOcc As ComponentOccurrence In Occurrences

        'Get the document file for this occurrence
        Dim oDoc As Document
        oDoc = oOcc.Definition.Document
		
		'************************************
		Dim oFileName, oOccName As String
		Words = Split(oOcc.Name, ":")
		oOccName = Words(0)
		Words = Split(oDoc.DisplayName, ".")
		oFileName = Words(0)
		'MessageBox.Show("FileName : " & oFileName & _
		'vbNewLine & "DisplayName : " & oOccName, "iLogic")
		If oFileName = "poteau"
			Component.Visible(oOcc.Name) = False
		End If

		'***********************************

        'Check to see if this occurrence represents a subassembly
        'and recursively call this function to traverse through it.
        If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
            Call TraverseAssembly(oOcc.SubOccurrences)
        End If
    Next
End Sub

 

0 J'aime
Message 17 sur 22

ThomasB44
Mentor
Mentor
Solution acceptée

Ce n'est pas la bonne commande...

oOcc.Visible = False

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime
Message 18 sur 22

julien.avril
Enthusiast
Enthusiast

super ca fonctionne

0 J'aime
Message 19 sur 22

julien.avril
Enthusiast
Enthusiast

Bonjour

As-tu un code pour afficher toutes les pièces et assemblage de l'environnement?

Je souhaiterais l'intégrer au début pour être sur que tout fonctionne bien.

Merci

 

Merci d'avance 

0 J'aime
Message 20 sur 22

ThomasB44
Mentor
Mentor

Salut,

Pas besoin de code pour cela.

Il suffit de revenir à la représentation de vue principale.


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

0 J'aime