CATIA V5 | 3DEXPERIENCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Jeux, jouets et Lego : le deuxième à -50% (large sélection)
Voir le deal

Fonction Rotation Macro Catia V5R21

2 participants

Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Fonction Rotation Macro Catia V5R21

Message par Fabien2709 Jeu 21 Avr 2016 - 14:25

Bonjour,

Etant parfaitement debutant en macros, j'ai besoin de votre aide.
Voici ce que je veux faire:
J'ai une piece de révolution (un anneau de diametre 1700mm environ). Dans cette piéce, je dois inserer des eprouvettes dans des zones précises de cet anneau. Ces eprouvettes fonctionnent trois par trois, réparties a 120°.

J'ai bricolé ma premiére macro, qui fait ceci, apres que l'une de mes eprouvettes soit placée:
- Copier/Coller de l'eprouvette (2x)
- Rotation +120° de la copie 1 (par rapport a l'axe de revolution de ma piece)
- Rotation -120° de la copie 2
- Renommage Copie 1
- Renommage copie 2
- Renommage eprouvette d'orignine.

Le probléme est que ma rotation est obtenue par un changement de coordonnées (type rotation grace à la boussole), donc, quand je veux utiliser ma macro sur une piéce de diametre différent, je dois aller dans ma macro pour modifier ce changement de coordonnées pour que ce la fonctionne.

Je voudrais a la place faire une fonction "Rotation autour de l'axe selectionné". j'ai reussi a faire la fonction de selection de l'axe, mais pas la fonction rotation...

Pouvez vous me dire comment réaliser une fonction rotation svp? (si c'est possible).
JE suis preneur si vous connaissez des moyens de faire plus efficace!

Merci d'avance de votre aide!

Fabien2709
timide
timide

Messages : 5
Date d'inscription : 21/04/2016
Localisation : Toulouse

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par lumpazepfel Ven 22 Avr 2016 - 22:29

Bonjour Fabien,

As tu vraiment besoins d'une macro? Ne peux tu pas utiliser des répétitions circulaires ?

Peux tu nous donner un peu plus de détails:

-S'agit il d'une part ou d'un CATProduct (assemblage de ton anneau et de tes x éprouvettes ?
-Peux tu poster une capture d'écran de ton 3D?
-Peux tu poster le code?
-Faut il faire varier le nombre d'éprouvette, leur position...?
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par Fabien2709 Lun 25 Avr 2016 - 9:08

Bonjour Marc, et merci pour ta réponse.

Il s'agit d'un cat product, il contient mon anneau "usiné", mon anneau "brut" (seulement pour representation), et un product contenant les éprouvettes.

Les répétitions circulaires, c'est la solution que j'ai proposé actuellement, mais cela apporte pas mal de contraintes (il est fréquent de devoir déplacer quelques éprouvettes de quelques degrés). Donc pour l'instant je fais avec ca, mais le but de la macro est justement de ne plus faire comme cela.

Malheureusement je ne peux pas poser de capture d'écran de mon 3D, c'est une piéce pour un client de mon entreprise, les conditions de confidentialité ne me le permettent pas, désolé. Comme je suis débutant, il est possible que la facon dont elle est construite te paraisse étrange, j'espere que cela sera quand même clair.

Tu trouveras le code en fin de ma réponse! C'est celui que j'utilise actuellement qui fonctionne avec un changement de coordonnées. (la partie "selection de l'axe" n'y est pas). Tant que j'y suis, la boucle ne fonctionne pas, je n'arrive pas à savoir pourquoi... Je pense que c'est tout bête donc si jamais....

Pour ce qui concerne le nombre d'eprouvettes et leur position, les insérer par 3 à 120° couvrira déja 90% des cas, donc il ne sera pas necessaire de faire varier ces paramétres. Faire varier leur position se fait à la fin quand on ajuste, le faire manuellement grâce à la boussole ne pose pas de probléme.

Merci de ton aide!
Fabien

PS: Le code:

Language="VBSCRIPT"

Sub CATMain()

'Do'

X = Empty

Y = Empty

Z = Empty

O = Empty

product5 = Empty

product6 = Empty

product1 = Empty

product2 = Empty

product3 = Empty

product4 = Empty

Set productDocument1 = CATIA.ActiveDocument

Set selection1 = productDocument1.Selection

selection1.Clear

Set product1 = productDocument1.Product

Set products1 = product1.Products

Set product2 = products1.Item("EPROUVETTES.4")

Set products2 = product2.Products

X = Inputbox("Nom Eprouvette")

Set product3 = products2.Item(X)

selection1.Add product3

selection1.Copy

Set productDocument1 = CATIA.ActiveDocument

Set selection2 = productDocument1.Selection

selection2.Clear

selection2.Add product2

selection2.Paste

Set productDocument1 = CATIA.ActiveDocument

Set selection3 = productDocument1.Selection

selection3.Clear

selection3.Add product2

selection3.Paste

Set documents1 = CATIA.Documents

Set productDocument2 = documents1.Item("EPROUVETTES.CATProduct")

Set product4 = productDocument2.Product

Set products3 = product4.Products

Set product5 = products3.Item(X&".1")

Y = Inputbox("Nom copie 1?")

Z = Inputbox("Nom copie 2?")

product5.Name = Y

Set product6 = products3.Item(X&".2")

product6.Name = Z

Set move1 = product5.Move

Set move1 = move1.MovableObject

Dim arrayOfVariantOfDouble1(11)
arrayOfVariantOfDouble1(0) = 1.000000
arrayOfVariantOfDouble1(1) = 0.000000
arrayOfVariantOfDouble1(2) = 0.000000
arrayOfVariantOfDouble1(3) = 0.000000
arrayOfVariantOfDouble1(4) = 1.000000
arrayOfVariantOfDouble1(5) = 0.000000
arrayOfVariantOfDouble1(6) = 0.000000
arrayOfVariantOfDouble1(7) = 0.000000
arrayOfVariantOfDouble1(Cool = 1.000000
arrayOfVariantOfDouble1(9) = 0.000000
arrayOfVariantOfDouble1(10) = 0.000000
arrayOfVariantOfDouble1(11) = 0.000000
move1.Apply arrayOfVariantOfDouble1

Set move1 = product5.Move

Set move1 = move1.MovableObject

Dim arrayOfVariantOfDouble2(11)
arrayOfVariantOfDouble2(0) = -0.500000
arrayOfVariantOfDouble2(1) = -0.866025
arrayOfVariantOfDouble2(2) = 0.000000
arrayOfVariantOfDouble2(3) = 0.866025
arrayOfVariantOfDouble2(4) = -0.500000
arrayOfVariantOfDouble2(5) = 0.000000
arrayOfVariantOfDouble2(6) = 0.000000
arrayOfVariantOfDouble2(7) = 0.000000
arrayOfVariantOfDouble2(Cool = 1.000000
arrayOfVariantOfDouble2(9) = -516.246639
arrayOfVariantOfDouble2(10) = 1011.944864
arrayOfVariantOfDouble2(11) = 0.000000
move1.Apply arrayOfVariantOfDouble2
Set move2 = product6.Move

Set move2 = move2.MovableObject

Dim arrayOfVariantOfDouble3(11)
arrayOfVariantOfDouble3(0) = 1.000000
arrayOfVariantOfDouble3(1) = 0.000000
arrayOfVariantOfDouble3(2) = 0.000000
arrayOfVariantOfDouble3(3) = 0.000000
arrayOfVariantOfDouble3(4) = 1.000000
arrayOfVariantOfDouble3(5) = 0.000000
arrayOfVariantOfDouble3(6) = 0.000000
arrayOfVariantOfDouble3(7) = 0.000000
arrayOfVariantOfDouble3(Cool = 1.000000
arrayOfVariantOfDouble3(9) = 0.000000
arrayOfVariantOfDouble3(10) = 0.000000
arrayOfVariantOfDouble3(11) = 0.000000
move2.Apply arrayOfVariantOfDouble3

Set move2 = product6.Move

Set move2 = move2.MovableObject

Dim arrayOfVariantOfDouble4(11)
arrayOfVariantOfDouble4(0) = -0.500000
arrayOfVariantOfDouble4(1) = 0.866025
arrayOfVariantOfDouble4(2) = 0.000000
arrayOfVariantOfDouble4(3) = -0.866025
arrayOfVariantOfDouble4(4) = -0.500000
arrayOfVariantOfDouble4(5) = 0.000000
arrayOfVariantOfDouble4(6) = 0.000000
arrayOfVariantOfDouble4(7) = 0.000000
arrayOfVariantOfDouble4(Cool = 1.000000
arrayOfVariantOfDouble4(9) = 618.246639
arrayOfVariantOfDouble4(10) = 953.055136
arrayOfVariantOfDouble4(11) = 0.000000
move2.Apply arrayOfVariantOfDouble4

Set documents1 = CATIA.Documents

Set productDocument1 = documents1.Item("EPROUVETTES.CATProduct")

Set product1 = productDocument1.Product

Set products1 = product1.Products

O = Inputbox("Nom Eprouvette Originale")

Set product2 = products1.Item(X)

product2.Name = O

'Loop While Msgbox("On Recommence?", VbYesNO,"Restart") = VbYes'

Fabien2709
timide
timide

Messages : 5
Date d'inscription : 21/04/2016
Localisation : Toulouse

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par lumpazepfel Lun 25 Avr 2016 - 22:31

Bonsoir Fabien,

Pour la boucle, il faut inverser la position du While et du Loop, ça peut donner :

Code:

Again = True
Do While Again = True

' ici ton code

If Msgbox("On Recommence?", VbYesNO,"Restart") = VbYes'
Then
Again = True
Else
Again = False
End If
Loop

Pour le reste je n'ai trouvé que cette partie de code qui devrait permettre de faire une rotation autour de l'axe X de la valeur "xrot"( attention à l'unité d'angle). Mais je n'ai rien testé:

Code:

'In X positive rotation
Set move1 = product2.Move
Set move1 = move1.MovableObject
arrayx(0) = 1
arrayx(1) = 0
arrayx(2) = 0
arrayx(3) = 0
arrayx(4) = Xrot
arrayx(5) = Xrot
arrayx(6) = 0
arrayx(7) = - Xrot
arrayx(8) = Xrot
arrayx(9) = 0.000000
arrayx(10) = 0.000000
arrayx(11) = 0.000000
move1.Apply arrayx

lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par Fabien2709 Mar 26 Avr 2016 - 14:53

Bonjour Marc,

Merci pour ton aide.

La boucle marche tres bien.

En ce qui concerne la rotation, ce n'est pas encore tout à fait ca (j'ai du mal à transposer cela pour un mouvement autour de Z, et je ne comprends pas quelle valeur donner pour une rotation à 120°...), mais j'y travaille, tu m'as donné une très bonne base de travail, merci!

Je posterai le code si j'arrive à faire fonctionner le tout!

Merci,

Fabien

Fabien2709
timide
timide

Messages : 5
Date d'inscription : 21/04/2016
Localisation : Toulouse

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par lumpazepfel Mar 26 Avr 2016 - 18:32

Bonjour Fabien,

J'ai regardé le code de plus près. Voilà les modif à apporter pour tourner autour de Z:

Dans le code la valeur de rotation est saisie dans l'Inputbox mais tu peux la figer à 120°


Code:
Sub CATMain()

Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set products1 = product1.Products
Set product2 = products1.Item("EPROUVETTES.1")

Dim degrad
Dim Zrot

Zrot = InputBox("angle de rotation autour de Z","Z Rotation","0" )
'Conversion de deg en rad
degrad = 0.017453293 '(PI/180)
Zrot = Zrot * degrad

Dim arrayz(11)  'matrice de déplacement

Set move3 = product2.Move
Set move3 = move3.MovableObject

'vecteur X
arrayz(0) = cos(Zrot)
arrayz(1) = sin(Zrot)
arrayz(2) = 0
'vecteur Y
arrayz(3) = -sin(Zrot)
arrayz(4) = cos(Zrot)
arrayz(5) = 0
'vecteur Z
arrayz(6) = 0
arrayz(7) = 0
arrayz(8) = 1
'translation
arrayz(9) = 0.000000
arrayz(10) = 0.000000
arrayz(11) = 0.000000

move3.Apply arrayz

End Sub
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par Fabien2709 Mer 27 Avr 2016 - 9:42

Bonjour Marc,

Parfait cela fonctionne! Merci beaucoup pour ton aide, je pense que ca va aider beaucoup de gens ici!

Je n'avais pas compris que les coordonnées étaient celles des vecteurs sur XYZ, je pouvais chercher longtemps!

Il reste juste une petite erreur mineure: quand je reboucle, j'ai un message d'erreur et ca ne marche pas (ce n'est pas grave en soi).

Voici comme promis le code complet:
Code:

Language="VBSCRIPT"

Sub CATMain()

Again = True

Do While Again = True

X = Empty

Y = Empty

W = Empty

O = Empty

product5 = Empty

product6 = Empty

product1 = Empty

product2 = Empty

product3 = Empty

product4 = Empty

Set productDocument1 = CATIA.ActiveDocument

Set selection1 = productDocument1.Selection

selection1.Clear

Set product1 = productDocument1.Product

Set products1 = product1.Products

Set product2 = products1.Item("EPROUVETTES.4")

Set products2 = product2.Products

X = Inputbox("Nom Eprouvette")

Set product3 = products2.Item(X)

selection1.Add product3

selection1.Copy

Set productDocument1 = CATIA.ActiveDocument

Set selection2 = productDocument1.Selection

selection2.Clear

selection2.Add product2

selection2.Paste

Set productDocument1 = CATIA.ActiveDocument

Set selection3 = productDocument1.Selection

selection3.Clear

selection3.Add product2

selection3.Paste

Set documents1 = CATIA.Documents

Set productDocument2 = documents1.Item("EPROUVETTES.CATProduct")

Set product4 = productDocument2.Product

Set products3 = product4.Products

Set product5 = products3.Item(X&".1")

Y = Inputbox("Nom copie 1?")

W = Inputbox("Nom copie 2?")

product5.Name = Y

Set product6 = products3.Item(X&".2")

product6.Name = W

'Set Selection = CATIA.ActiveDocument.Selection'

'ReDim InputObjectType(1) : InputObjectType(0)="AxisSystem" : InputObjectType(1)="Line2D"'

'MsgBox("Cliquez sur Ok, puis selectionnez l'axe de rotation")'

'RotationAxis=Selection.SelectElement2(InputObjectType,"Choix de l'axe",true)'

'if (Status = "Cancel") then Exit Sub'

Set move1 = product5.Move

Set move1 = move1.MovableObject

'In Z positive rotation

Dim degrad
Dim Zrot

Zrot = 120
degrad = 0.017453293 '(PI/180)

Zrot = Zrot * degrad

Dim arrayz(11)  
arrayz(0) = cos(Zrot)
arrayz(1) = sin(Zrot)
arrayz(2) = 0
arrayz(3) = -sin(Zrot)
arrayz(4) = cos(Zrot)
arrayz(5) = 0
arrayz(6) = 0
arrayz(7) = 0
arrayz(8) = 1
arrayz(9) = 0.000000
arrayz(10) = 0.000000
arrayz(11) = 0.000000
move1.Apply arrayz

Set move2 = product6.Move

Set move2 = move2.MovableObject

'In Z negative rotation

Dim arrayz2(11)
arrayz2(0) = cos(Zrot)
arrayz2(1) = -sin(Zrot)
arrayz2(2) = 0
arrayz2(3) = sin(Zrot)
arrayz2(4) = cos(Zrot)
arrayz2(5) = 0
arrayz2(6) = 0
arrayz2(7) = 0
arrayz2(8) = 1
arrayz2(9) = 0.000000
arrayz2(10) = 0.000000
arrayz2(11) = 0.000000
move2.Apply arrayz2

Set documents1 = CATIA.Documents

Set productDocument1 = documents1.Item("EPROUVETTES.CATProduct")

Set product1 = productDocument1.Product

Set products1 = product1.Products

O = Inputbox("Nom Eprouvette Originale")

Set product2 = products1.Item(X)

product2.Name = O

If Msgbox("On Recommence?", VbYesNO,"Restart") = VbYes Then'
Again = True
Else Again = False

End If
Loop

End Sub

Et voila le message d'erreur qui apparait:
Fonction Rotation Macro Catia V5R21 Captur10

Je vais travailler à resoudre ce probléme cet après midi.

Je te remercie de ton aide en tout cas, je pense pas que j'aurai trouvé tout ca tout seul. J'ai aussi fait une demande auprés de mon entreprise pour être formé au VBA/VBScript, et c'est en cours.

Merci,

Fabien

Fabien2709
timide
timide

Messages : 5
Date d'inscription : 21/04/2016
Localisation : Toulouse

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par lumpazepfel Mer 27 Avr 2016 - 13:10

Bonjour Fabien,

Pour t'aider dans l'écriture de macro (si tu ne connais pas), il y a le fichier d'aide de Catia "V5Automation.chm" qui se trouve sous "C:\catiaV5\r22sp3\win_b64\code\bin\V5Automation.chm" (le chemin peut varier suivant ton installation)

et un ensemble d'exemples et cours (le "CATIA_Portable_Script_Center_v2.0.chm")que tu peux télécharger ici : http://www.plm-forum.ru/forum/viewtopic.php?f=8&t=1512

Bon courage
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

Fonction Rotation Macro Catia V5R21 Empty Re: Fonction Rotation Macro Catia V5R21

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum