Bonjour à tous,
Le titre est assez explicite, je cherche à faire des rotations sur des triangles dans un Canvas.
J'ai réussi à trouver un algo qui me distingue de mes camarades, mais j'ai vraiment du mal à l'implementer dans mon code...
Ci joint l algo :
Dans mon code, j'appelle la fonction rotation à partir d'un menu...
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 def getangle(event): dx = c.canvasx(event.x) - center[0] dy = c.canvasy(event.y) - center[1] try: return complex(dx, dy) / abs(complex(dx, dy)) except ZeroDivisionError: return 0.0 # cannot determine angle def press(event): # calculate angle at start point global start start = getangle(event) def motion(event): # calculate current angle relative to initial angle global start angle = getangle(event) / start offset = complex(center[0], center[1]) newxy = [] for x, y in xy: v = angle * (complex(x, y) - offset) + offset newxy.append(v.real) newxy.append(v.imag) c.coords(polygon_item, *newxy) c.bind("<Button-1>", press) c.bind("<B1-Motion>", motion)
Maintenant, quand je lance le script, et que je clique sur le bouton pivoter , il me renvoie des erreurs du type :
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
34 def rotation(self, event): """Permet de rotation les figures dans le sens souhaite a l aide d un clic sur un des sommets""" self.canvas.bind("<Button-1>", self.press) self.canvas.bind("<B1-Motion>", self.motion) self.canvas.bind('<ButtonRelease-1>',self.mouseup) def press(self, event): self.x,self.y=event.x,event.y self.tag=(self.canvas.find_closest(self.x,self.y, halo=None))[0] #self.figure=self.select(self.tag) self.figure=self.tag self.center=self.figure.absCentre, self.figure.ordCentre self.start = self.getangle(event) self.xy=zip([x for i, x in enumerate(self.canvas.coords(self.ID)) if i%2 == 0],[y for i, y in enumerate(self.canvas.coords(self.ID)) if i%2 == 1]) def getangle(self, event): dx = self.canvas.canvasx(event.x) - self.center[0] dy = self.canvas.canvasy(event.y) - self.center[1] try: return complex(dx, dy) / abs(complex(dx, dy)) except ZeroDivisionError: return 0.0 # cannot determine angle def motion(self, event): angle = self.getangle(event) / self.start offset = complex(self.center[0], self.center[1]) newxy = [] for x, y in self.xy: v = angle * (complex(x, y) - offset) + offset newxy.append(v.real) newxy.append(v.imag) self.figure.rotation(self.canvas, *newxy)
Alors j'ai essayé de suivre le chemin, et je pense que ça bloque au niveau de la fonction press... mais bon je bloque .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ObjType=self.canvas.gettags(self.selObject)[0] IndexError: tuple index out of range
Merci d avance.
Partager