rescale space so cross size is 1
This commit is contained in:
		
							
								
								
									
										44
									
								
								cross.py
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								cross.py
									
									
									
									
									
								
							| @@ -20,35 +20,35 @@ class Cross(): | ||||
|  | ||||
|     def draw(self): | ||||
|         Color(*(self.color)) | ||||
|         Rectangle(pos=(self.pos.x-self.size*1.5,self.pos.y-self.size*0.5),size=(3*self.size,self.size)) | ||||
|         Rectangle(pos=(self.pos.x-self.size*0.5,self.pos.y-self.size*1.5),size=(self.size,3*self.size)) | ||||
|         Rectangle(pos=((self.pos.x-1.5)*self.size,(self.pos.y-0.5)*self.size),size=(3*self.size,self.size)) | ||||
|         Rectangle(pos=((self.pos.x-0.5)*self.size,(self.pos.y-1.5)*self.size),size=(self.size,3*self.size)) | ||||
|  | ||||
|         # stroke | ||||
|         Color(1,1,1) | ||||
|         Line(points=( | ||||
|         *(self.pos.x-self.size*0.5,self.pos.y-self.size*0.5), | ||||
|         *(self.pos.x-self.size*0.5,self.pos.y-self.size*1.5), | ||||
|         *(self.pos.x+self.size*0.5,self.pos.y-self.size*1.5), | ||||
|         *(self.pos.x+self.size*0.5,self.pos.y-self.size*0.5), | ||||
|         *(self.pos.x+self.size*1.5,self.pos.y-self.size*0.5), | ||||
|         *(self.pos.x+self.size*1.5,self.pos.y+self.size*0.5), | ||||
|         *(self.pos.x+self.size*0.5,self.pos.y+self.size*0.5), | ||||
|         *(self.pos.x+self.size*0.5,self.pos.y+self.size*1.5), | ||||
|         *(self.pos.x-self.size*0.5,self.pos.y+self.size*1.5), | ||||
|         *(self.pos.x-self.size*0.5,self.pos.y+self.size*0.5), | ||||
|         *(self.pos.x-self.size*1.5,self.pos.y+self.size*0.5), | ||||
|         *(self.pos.x-self.size*1.5,self.pos.y-self.size*0.5), | ||||
|         *(self.pos.x-self.size*0.5,self.pos.y-self.size*0.5), | ||||
|         *((self.pos.x-0.5)*self.size,(self.pos.y-0.5)*self.size), | ||||
|         *((self.pos.x-0.5)*self.size,(self.pos.y-1.5)*self.size), | ||||
|         *((self.pos.x+0.5)*self.size,(self.pos.y-1.5)*self.size), | ||||
|         *((self.pos.x+0.5)*self.size,(self.pos.y-0.5)*self.size), | ||||
|         *((self.pos.x+1.5)*self.size,(self.pos.y-0.5)*self.size), | ||||
|         *((self.pos.x+1.5)*self.size,(self.pos.y+0.5)*self.size), | ||||
|         *((self.pos.x+0.5)*self.size,(self.pos.y+0.5)*self.size), | ||||
|         *((self.pos.x+0.5)*self.size,(self.pos.y+1.5)*self.size), | ||||
|         *((self.pos.x-0.5)*self.size,(self.pos.y+1.5)*self.size), | ||||
|         *((self.pos.x-0.5)*self.size,(self.pos.y+0.5)*self.size), | ||||
|         *((self.pos.x-1.5)*self.size,(self.pos.y+0.5)*self.size), | ||||
|         *((self.pos.x-1.5)*self.size,(self.pos.y-0.5)*self.size), | ||||
|         *((self.pos.x-0.5)*self.size,(self.pos.y-0.5)*self.size), | ||||
|         )) | ||||
|  | ||||
|     # check whether a cross at pos interacts with cross | ||||
|     def check_interaction(self,pos): | ||||
|         return ((pos-self.pos)/self.size).int()**2>=5 | ||||
|         return (pos-self.pos).int()**2>=5 | ||||
|  | ||||
|     # find position along a line that comes in contact with the line going through pos in direction v | ||||
|     def move_on_line_to_stick(self,pos,v): | ||||
|         # relative to cross | ||||
|         return self.move_on_line_to_stick_relative((pos-self.pos)/self.size,v/self.size)*self.size+self.pos | ||||
|         return self.move_on_line_to_stick_relative(pos-self.pos,v)+self.pos | ||||
|     def move_on_line_to_stick_relative(self,x,v): | ||||
|  | ||||
|         # if x is in the right quadrant | ||||
| @@ -136,8 +136,8 @@ class Cross_painter(Widget): | ||||
|     def on_touch_down(self,touch): | ||||
|         # create new cross | ||||
|         if touch.button=="right": | ||||
|             if self.check_add(Point(touch.x,touch.y)): | ||||
|                 new=Cross(touch.x,touch.y) | ||||
|             if self.check_add(Point(touch.x/Cross.size,touch.y/Cross.size)): | ||||
|                 new=Cross(touch.x/Cross.size,touch.y/Cross.size) | ||||
|                 with self.canvas: | ||||
|                     new.draw() | ||||
|                 # add to list | ||||
| @@ -150,7 +150,7 @@ class Cross_painter(Widget): | ||||
|                 self.selected.selected=False | ||||
|  | ||||
|             # find cross under touch | ||||
|             self.selected=self.find_cross(Point(touch.x,touch.y)) | ||||
|             self.selected=self.find_cross(Point(touch.x/Cross.size,touch.y/Cross.size)) | ||||
|             # select | ||||
|             if self.selected!=None: | ||||
|                 self.selected.selected=True | ||||
| @@ -160,7 +160,7 @@ class Cross_painter(Widget): | ||||
|     def on_touch_move(self,touch): | ||||
|         # only move on left click | ||||
|         if touch.button=="left" and self.selected!=None: | ||||
|             self.selected.pos=self.check_move(Point(touch.x,touch.y),self.selected) | ||||
|             self.selected.pos=self.check_move(Point(touch.x/Cross.size,touch.y/Cross.size),self.selected) | ||||
|             # redraw | ||||
|             self.canvas.clear() | ||||
|             self.draw() | ||||
| @@ -169,7 +169,7 @@ class Cross_painter(Widget): | ||||
|     # find the cross at position pos | ||||
|     def find_cross(self,pos): | ||||
|         for cross in self.crosses: | ||||
|             if cross_distx(pos,cross.pos)<=cross.size/2 or cross_disty(pos,cross.pos)<=cross.size/2: | ||||
|             if cross_distx(pos,cross.pos)<=0.5 or cross_disty(pos,cross.pos)<=0.5: | ||||
|                 return cross | ||||
|         # none found | ||||
|         return None | ||||
|   | ||||
		Reference in New Issue
	
	Block a user