Bonjour à vous !
Dans le cadre d'un projet tuteuré, je dois créer divers instruments de géométrie à l'aide de Qt, règle, équerre, crayon et compas. Chaque instruments possède divers options réglable comme la rotation translation, transparence... J'utilise donc un QPainter pour pouvoir les dessiner, et tout s'est bien passé avec la règle, équerre et crayon.
Je suis donc arrivé au compas, et il est venu la question de la représentation de l'écartement des branches. Après avoir pensé la chose en long et en large j'en suis venu à ce code (je passe les initialisations des variables) :
Avec ce code et un écartement de 100 j'arrive à ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 //Rotation principale dessin.translate(x,y); dessin.rotate(rotation); dessin.translate(-x,-y); //Dessin de la tige avec pointe double teta = angleEcartement(ecartement, hauteurBranche+hauteurPointe); //Angle entre la droite coupant le compas en deux et la branche dessin.save(); //Rotation de la tige dessin.translate(x,y); dessin.rotate(-teta); dessin.translate(-x,-y); //Dessin dessin.setPen(Qt::black); QPointF pointe[3] = {QPointF(x,y), QPointF(x, y+hauteurPointe), QPointF(x-largeurBranche, y+hauteurPointe)}; //Points de la pointe dessin.drawConvexPolygon(pointe, 3); //Dessin de la pointe dessin.setBrush(Qt::gray); dessin.drawRect(x-largeurBranche, y+hauteurPointe, largeurBranche, hauteurBranche); //Branche avec pointe dessin.restore(); //Dessin de la tige avec mine dessin.save(); //Rotation de la tige dessin.translate(x,y); dessin.rotate(teta); dessin.translate(-x,-y); //Dessin dessin.setBrush(Qt::black); QPointF mine[3] = {QPointF(x+ecartement,y), QPointF(x+ecartement, y+hauteurPointe), QPointF(x+largeurBranche+ecartement, y+hauteurPointe)}; //Points de la mine dessin.drawConvexPolygon(mine, 3); //Dessin de la mine dessin.setBrush(Qt::gray); dessin.drawRect(x+ecartement, y+hauteurPointe, largeurBranche, hauteurBranche); //Branche avec mine dessin.restore();
http://tinyurl.com/pvalmvw
le compas n'est pas terminé, c'est pour ca qu'il est pas beau
Comme vous pouvez le voir, la deuxième branche s'en vas, plus l'écartement est grand. Après avoir passer un bon bout de temps dessus, je pense que cela vient du fait que je fais une première rotation pour la première branche, puis une pour la deuxième pour la seconde du coup ca me l'applique aussi sur la première déjà dessinée.
Quelqu'un aurait-il des pistes pour m'orienter ou alors est-il possible de faire des rotations "indépendantes" pour chaque partie d'un dessin ?
Merci à vous et bonne fin de journée !
Partager