Communauté
Inventor - Français
Bienvenue sur les forums Inventor d’Autodesk. Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets Inventor populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

IV2020 Représentations positionnelles sans contraintes

4 RÉPONSES 4
RÉSOLU
Répondre
Message 1 sur 5
ThomasB44
437 Visites, 4 Réponses

IV2020 Représentations positionnelles sans contraintes

Bonjour,

Avec IV2019 et les versions plus anciennes, on peut créer des représentations positionnelles sans contraintes, bouger manuellement les composants et sauvegarder cette position. Par exemple pour un mannequin, on ne s'attardera pas à contraindre toutes les articulations, ce serait trop long et trop fastidieux.

Capture.JPG

Ceci fonctionne sans cocher la case "Décalage de position", et je ne savais pas à quoi pouvait bien servir cette option Smiley gêné

Capture.JPG

Maintenant, avec IV2020, il FAUT cocher cette case pour que cela fonctionne

Donc si j'ouvre un fichier de IV2019 avec IV2020, mes représentations positionnelles sont perdues, et je dois le réouvrir avec IV2019, et aller dans chaque composant de chaque position pour aller cocher cette option...et ça peut être vraiment long ! Smiley Frustrated

 

Y-a-t-il une solution pour réaliser cela rapidement ? Peut être par programmation ?

Y-a-t-il une solution pour retrouver ces positions directement depuis IV2020 ? Sont elles toujours stockées quelque part ?

 

Si je coche l'option et édite les positions avec Excel, je vois que les positions et rotations suivant les axes X, Y, et Z sont sauvegardées. Donc ça doit bien être enregistré quelque part.

image(1).png


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

4 RÉPONSES 4
Message 2 sur 5
ThomasB44
en réponse à: ThomasB44

Bon pas de réponse du côté américain. Ici le lien vers mon post en anglais, avec des vidéos explicatives.

Voici ce que je préconise :

 

Quelque soit votre version IV, soyez vigilant avec ces représentations positionnelles lorsque vous utilisez des décalages de position, il faut absolument cocher l'option. Sinon, lors du passage à IV2020, ces positions seront tout simplement perdues et irrécupérables sans une version d'IV plus ancienne. De plus, même manuellement, il est impossible de les récupérer, il faudra recommencer.

 

Après quelques recherches, j'ai conçu un code qui permet de rendre ces positions conformes au fonctionnement prévu par les développeurs, et donc de "récupérer" rapidement ces positions, mais toujours avec une version plus ancienne, pas le choix. Smiley Frustrated

Ce code n'a aucune gestion d'erreur volontairement, et pour l'instant il ne gère que les états de blocage des composants. Si vous avez entré des relations, il est probable qu'il produise une erreur qu'il faudra gérer.

 

Voici le code en iLogic :

'iLogic
Dim oApp As Inventor.Application
oApp = GetObject(, "Inventor.Application")
Dim oDoc As AssemblyDocument
oDoc = oApp.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition
oAsmCompDef = oDoc.ComponentDefinition
Dim oPos As PositionalRepresentation
Dim oMainPos As PositionalRepresentation
oMainPos = oAsmCompDef.RepresentationsManager.PositionalRepresentations.Item("Principal(e)")
Dim oOcc As ComponentOccurrence
Dim oTG As TransientGeometry
oTG = ThisApplication.TransientGeometry
Dim oMatrix As Matrix
Dim oMainMatrix As Matrix
oMatrix = oTG.CreateMatrix
oMainMatrix = oTG.CreateMatrix
Dim MatrixCollection As New Collection
Dim Count As Integer
Count = 0

'Record matrix of each occurrence
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            Count = Count + 1
            If oPos.IsTransformOverridden(oOcc, oMatrix) = False Then
            End If
            MatrixCollection.Add(oMatrix)
        Next
    End If
Next

'At this step, "Count" should be equal to number of position multiply by number of occurrences
Count = 0

'Clear grounded options
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            'If grounded is active, then remove it
            If oPos.IsGroundingOverridden(oOcc, True) = True Then oPos.RemoveGroundingOverride(oOcc)
            'If occurrence is grounded, then activate ungrounded position
            If oOcc.Grounded = True Then oPos.SetGroundingOverride(oOcc, False)
        Next
    End If
Next

'Recall matrix positions and set the offset option
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            Count = Count + 1
            oMatrix = MatrixCollection(Count)
            oPos.SetTransformOverride(oOcc, oMatrix)
            'Activate Main position
            'oMainPos.Activate
            If oMainPos.IsTransformOverridden(oOcc, oMainMatrix) = True Then
                'Cannot be overriden but allow to read the matrix
            End If
            'Compare Matrix
            If oMatrix.IsEqualTo(oMainMatrix) = True Then
                oPos.RemoveTransformOverride(oOcc)
            End If
            'Recall current position
            'oPos.Activate
        Next
    End If
 oPos.Activate
Next

'Activate Main position
oMainPos.Activate

Voici le code en VBA, c'est plus facile pour débugger, il suffit d'ajouter les "Set" et les "Call" où c'est nécessaire.

'VBA code
Option Explicit
Sub Main()
Dim oApp As Inventor.Application
Set oApp = GetObject(, "Inventor.Application")
Dim oDoc As AssemblyDocument
Set oDoc = oApp.ActiveDocument
Dim oAsmCompDef As AssemblyComponentDefinition
Set oAsmCompDef = oDoc.ComponentDefinition
Dim oPos As PositionalRepresentation
Dim oMainPos As PositionalRepresentation
Set oMainPos = oAsmCompDef.RepresentationsManager.PositionalRepresentations.Item("Principal(e)")
Dim oOcc As ComponentOccurrence
Dim oTG As TransientGeometry
Set oTG = ThisApplication.TransientGeometry
Dim oMatrix As Matrix
Dim oMainMatrix As Matrix
Set oMatrix = oTG.CreateMatrix
Set oMainMatrix = oTG.CreateMatrix
Dim MatrixCollection As New Collection
Dim Count As Integer
Count = 0

'Record matrix of each occurrence
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            Count = Count + 1
            If oPos.IsTransformOverridden(oOcc, oMatrix) = False Then
            End If
            MatrixCollection.Add oMatrix
        Next
    End If
Next

'At this step, "Count" should be equal to number of position multiply by number of occurrences
Count = 0

'Clear grounded options
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            'If grounded is active, then remove it
            If oPos.IsGroundingOverridden(oOcc, True) = True Then Call oPos.RemoveGroundingOverride(oOcc)
            'If occurrence is grounded, then activate ungrounded position
            If oOcc.Grounded = True Then Call oPos.SetGroundingOverride(oOcc, False)
        Next
    End If
Next

'Recall matrix positions and set the offset option
For Each oPos In oAsmCompDef.RepresentationsManager.PositionalRepresentations
    oPos.Activate
    If oPos.Name = "Principal(e)" Then
        'This is the main position
    Else
        For Each oOcc In oAsmCompDef.Occurrences
            Count = Count + 1
            Set oMatrix = MatrixCollection(Count)
            Call oPos.SetTransformOverride(oOcc, oMatrix)
            'Activate Main position
            'oMainPos.Activate
            If oMainPos.IsTransformOverridden(oOcc, oMainMatrix) = True Then
                'Cannot be overriden but allow to read the matrix
            End If
            'Compare Matrix
            If oMatrix.IsEqualTo(oMainMatrix) = True Then
                Call oPos.RemoveTransformOverride(oOcc)
            End If
            'Recall current position
            'oPos.Activate
        Next
        
    End If
Next
'Activate Main position
oMainPos.Activate
End Sub

Et voici ce que cela donne :

 

 

 


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 3 sur 5
be9JQPB
en réponse à: ThomasB44

Bonjour Thomas,

 

Je suis entrain de m'arracher les cheveux avec les représentations!

Je rebondi sur ton sujet car je cherche comment accéder à la fenêtre "définir position de l'objet".

J'ai regarder quelques tutos en ligne dont celui-là: https://www.youtube.com/watch?v=D4m3395invA 

Et il me manque les fonctions "Override&co" dans le menu contextuel.

J'ai fait des aperçus du tuto et un aperçu de mon menu.

Comment fais-tu?

Merci.

 

Message 4 sur 5
ThomasB44
en réponse à: be9JQPB

Salut @be9JQPB 

Ces menus n'apparaissent que dans le contexte d'une représentation positionnelle active, autre que "Principal(e)".

Crée une représentation positionnelle, et clic droit sur un composant :

Capture.JPG


Thomas
Mechanical Designer / Inventor Professionnal 2023
Inventor Professional EESignature

Message 5 sur 5
be9JQPB
en réponse à: ThomasB44

Salut @ThomasB44,

 

Merci cela fonctionne! 😉

Je ne sais pas si c'est un bug ou une option à cocher, lorsque je vais d'une représentation à une autre rien ne se passe, je suis obligé d'aller dans la fenêtre graphique et bouger le modèle pour qu'il se positionne.

 

Cdlt,

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report