Problème EventTrigger et rule

Problème EventTrigger et rule

MKE_Howard
Collaborator Collaborator
1 706 Visites
15 Réponses
Message 1 sur 16

Problème EventTrigger et rule

MKE_Howard
Collaborator
Collaborator

Bonjour, désolé d'avance si certains termes sont en anglais (mon IV n'est pas en français). Voici la situation :

 

J'ai un assemblage avec une règle "Update" qui me permet d'ajuster et de mettre à jour les dimensions de toutes mes pièces. J'ai placé cette règle dans l'Event Trigger "Any Model/User Parameter Change". Le problème est que le changement de paramètre se fait dans cette même règle, ce qui empêche l'Event Trigger de fonctionner correctement (je crois).

 

Pour résoudre cela, j'ai créé une autre règle qui contient un code permettant de lancer ma règle "Update". Ensuite, j'ai placé cette nouvelle règle dans mon Event Trigger et tout fonctionne. Ce workflow me semble un peu étrange, et je me demandais s'il n'existait pas une solution plus logique. Merci.

 

 

0 J'aime
Solutions acceptées (2)
1 707 Visites
15 Réponses
Replies (15)
Message 2 sur 16

Fabian_perree
Advisor
Advisor

Bonjour @MKE_Howard,

 

Sans la régle ni le modéle c'est difficile de répondre.

 

Par contre tu n'as pas vraiment besoin de mettre ta régle Update dans un trigger.

En effet elle va se lancer seule à chaque changemetn de paramétre si elle n'est pas configurée différement, mais une nouvelle fois sans plus d'information c'est difficile de répondre précisément.

Fabian Perrée
Giùp.fr | LinkedIn

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Cliquez ici pour accéder à toutes mes formations en ligne
Inventor 2022 : Modélisation et documentation de systèmes mécaniques
0 J'aime
Message 3 sur 16

MKE_Howard
Collaborator
Collaborator

Bonjour, oui désolé je ne peux rien partager 3D ou image, mais mon code je peux.

Parameter("LDP1200 PARAM:1", "LG_BANDE") = BT
Parameter("LDP1200 PARAM:1", "ANGLE_ST") = Angle
Parameter("LDP1200 PARAM:1", "LARG_FRAME_EXT") = Frame_Larg_Ext
Parameter("LDP1200 PARAM:1", "LARG_FRAME_INT") = Frame_Larg_Int
If Frame_Type = ("Channel") Then
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Channel") = True
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_FerAngle") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_FerAngle") = False
	
ElseIf Frame_Type = ("Inv_Channel") Then
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_Channel") = True
	Feature.IsActive("LDP1200 PARAM:1", "Ex_FerAngle") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_FerAngle") = False
	
ElseIf Frame_Type = ("Ferangle") Then
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_FerAngle") = True
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_FerAngle") = False
	
Else
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_Channel") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_FerAngle") = False
	Feature.IsActive("LDP1200 PARAM:1", "Ex_Inv_FerAngle") = True

End If

En gros LDP1200 PARAM:1 est une pièce dans mon assemblage qui agit de réference. Je viens modifier les dimensions de cette pièce directement de mon assemblage et tout fonctionne. Mon problème réside dans le 3D. J'ai des contraintes qui sont liés à ces paramètres et ils ne sont pas mis à jour. Je suis obligé de "Re Run" la règle pour que toutes mes pièces se replace au bon endroit. En gros, mon bouton update, c'est ma rule. J'espère avoir été clair. Merci   

0 J'aime
Message 4 sur 16

Fabian_perree
Advisor
Advisor

Malheureusement sans modèle pour tester on ne peut pas faire beaucoup mieux, essaye de nous envoyer un modèle simplifier.

 

Essaye de mettre

 

ThisApplication.ActiveDocument.Update()

 

A la fin de ta règle 

 

Jette un œil au select case aussi ça peut faciliter tes codes à l'avenir

Fabian Perrée
Giùp.fr | LinkedIn

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Cliquez ici pour accéder à toutes mes formations en ligne
Inventor 2022 : Modélisation et documentation de systèmes mécaniques
0 J'aime
Message 5 sur 16

MKE_Howard
Collaborator
Collaborator

Salut, ouin j'ai essayé de reproduire la situation avec un modèle simplifié, mais j'y arrive pas... J'ai aussi essayé "ThisApplication.ActiveDocument.Update()" sans succès, mais pour l'instant, mon workaround fonctionne donc pas de stress. J'ai une petite demi heure cette après midi je vais essayer de reproduire un petit modèle encore, mais sinon merci quand même.

0 J'aime
Message 6 sur 16

vpeuvion
Advocate
Advocate

Bonjour, est-ce que tu as essayé :

ilogicvb.UpdateWhenDone = True

 Vincent.

0 J'aime
Message 7 sur 16

MKE_Howard
Collaborator
Collaborator

Bonjour, oui j'ai essayer sans succès, mais merci.

 

Je crois avoir trouvé une partie du problème donc voici un peu plus de détail pour mieux comprendre : 

 

J'ai un sketch avec des dimensions références dans ma sous-pièce "LDP1200 PARAM". Lorsque je change certaines informations comme "Angle", les dimensions références de mes sketchs changent, passe de 10 à 20 par exemple. Cette mesure "10" est utilisé comme contrainte (Mate: 10 in).

Quand je vais changer "Angle", mon sketch affiche une dimensions de 20, mais la contrainte dans mon assemblage reste à 10. C'est la que je suis obligé de ReRun ma règle. Quelqu'un aurait une idée de comment régler ca?

 

Merci bien

0 J'aime
Message 8 sur 16

MKE_Howard
Collaborator
Collaborator

Fabian, Voici une vidéo dans laquelle jai reproduis le problème.

On voit 2 blocs contraint avec un User Parameter "Test" ainsi qu'une pièce avec un sketch réference ayant 2 dimensions: 7in qui est Driven et 8in. Dans ma règle:

Test = Parameter("REF:1", "d7")
Parameter("REF:1", "d8") = BT

iLogicVb.UpdateWhenDone = True

d7 est lié à "11" 

d8 est lié à "12"

Quand je modifie d8, d7 bouge aussi, car c'est Driven. Du même coup, la contrainte entre mes 2 blocs devrait donc suivre d7 ce qui n'arrive pas. Je dois donc ReRun ma rule. J'espère que c'est plus clair. Merci

(afficher dans Mes vidéos)

 

0 J'aime
Message 9 sur 16

Fabian_perree
Advisor
Advisor

Tu peux transmettre les fichiers stp ?

Fabian Perrée
Giùp.fr | LinkedIn

Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Cliquez ici pour accéder à toutes mes formations en ligne
Inventor 2022 : Modélisation et documentation de systèmes mécaniques
0 J'aime
Message 10 sur 16

MKE_Howard
Collaborator
Collaborator

Voila

0 J'aime
Message 11 sur 16

vpeuvion
Advocate
Advocate
Solution acceptée

Bonjour, j'ai manipulé tes fichiers et pour moi le comportement que tu as est normal.

Dans la règle, tu modifies le paramètre Test de l'assemblage qui devient égal à d7 de la pièce.

Ensuite, tu modifies le paramètre d8 de la pièce qui devient égal au paramètre BT de l'assemblage.

Le paramètre d7 est lié à d8.

Tu modifies un paramètre de l'assemblage par rapport à celui d'une pièce, ensuite tu modifies un paramètre de la pièce par rapport à celui de l'assemblage, les deux paramètres de la pièce étant dépendants et tout ça déclenché par la modification d'un paramètre de l'assemblage.

Je ne sais pas si c'est lié à l'exemple, mais ça me parait très compliqué.

Essaye de remplacer la règle par celle-ci et tu verras mieux ce qui se passe pour les paramètres quand tu executes la règle manuellement une deuxième fois.

MessageBox.Show("Test :" & Test)
Test = Parameter("REF:1", "d7")
MessageBox.Show("Test :" & Test)
MessageBox.Show("d8 :" & Parameter("REF:1", "d8"))
Parameter("REF:1", "d8") = BT
MessageBox.Show("d8 :" & Parameter("REF:1", "d8"))

J'espère avoir pu t'aider.

Vincent. 

Message 12 sur 16

manon_puel
Community Manager
Community Manager

Bonjour @MKE_Howard 

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?
Cela facilitera la navigation de nos utilisateurs qui pourront directement atteindre la solution

Sachez qui si vous avez marqué une réponse comme solution par erreur, vous pouvez annuler ce marquage en cliquant sur le menu du fil (les trois points verticaux) et choisir "pas la solution"
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Manon Puel animatrice de la communauté francophone
0 J'aime
Message 13 sur 16

manon_puel
Community Manager
Community Manager

Bonjour @MKE_Howard, votre problème est-il toujours d'actualité ? N'hésitez pas à nous tenir au courant! Merci et bonnes fêtes


Manon Puel animatrice de la communauté francophone
0 J'aime
Message 14 sur 16

MKE_Howard
Collaborator
Collaborator

Bonjour, désolé du délais c'était noel (j'ai gagné 6 livres hahaha)

 

Pour revenir à mon problème, oui la règle fonctionne, mais c'est la contrainte (Mate:1) entre les 2 blocs qui ne s'update pas... 

0 J'aime
Message 15 sur 16

ThomasB44
Mentor
Mentor
Solution acceptée

Salut @MKE_Howard 

Je rejoins l'avis de @vpeuvion ce que tu as écris n'est pas logique.

Cette ligne pose problème pour moi :

Test = Parameter("REF:1", "d7")

Avec iLogic, lorsque l'on saisi le nom d'un paramètre, il apparait en bleu.

Ce paramètre bleu est équivalent à la commande Parameter("Test")

SAUF que, lors du changement de valeur de ce paramètre, la règle se déclenche automatiquement.

Cette ligne de commande au-dessus n'est donc pas logique, et tu aurais du écrire à la place : Parameter("Test") = Parameter("REF:1", "d7")

Et ne garder qu'un seul paramètre en bleu, qui doit déclencher ta règle.

 

De plus, il faut respecter un ordre, tu pilotes le paramètre BT, puis tu changes ton paramètre piloté (driven)

Ta règle devient tout simplement :

Parameter("REF:1", "d8") = BT
ThisDoc.Document.Update()
Parameter("Test") = Parameter("REF:1", "d7")

 


Thomas
Mechanical Designer / Inventor Professional 2025
Inventor Professional EESignature

Message 16 sur 16

MKE_Howard
Collaborator
Collaborator

Haaaaaaaaaa ok je crois que hier j'étais fatigué j'avais pas du tout compris @vpeuvion 🤣 Bah ca marche merci beaucoup à vous 2. Une chose est sur, je suis toujours aussi nul avec Ilogic.