Well, like I said, it doesn't work well. Here it is.
On 7/3/07, Michael George <[EMAIL PROTECTED]> wrote:
I'd love to take a look at it. After the amount of time I've been banging my head on this I find it surprising that you put something together so quickly, but maybe it's the minkowski sum code that's been so much effort... --Mike Ian Mallett wrote: > I hardcoded one. It took me less than an hour. It wasn't pro, but it > worked well enough. I'll give it to you if you like. > > On 7/3/07, *Michael George * <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> wrote: > > Hi, > > I was wondering if anyone can suggest a good 2D computational geometry > library for use with pygame. I'm currently planning to use CGAL > for my > game, because it seems to have the features I need, but > > a) it's in C++ so it will make distributing my game much more of a > pain > b) it's hugely complex > c) it's kind of a pain to download > > Anyway, I would like to be able to at minimum compute intersections > between circles and polygons. Ideally I would also be able to compute > minkowski sums of these objects. Any ideas? > > --Mike > >
#GSP 2.0.2 import pygame from pygame.locals import * import pygame.key import pygame.time import pygame.mouse import math import pygame.image import sys import pygame.mixer pygame.display.set_mode( (640, 480), pygame.RESIZABLE ) fullscreenmode = 0 surface = pygame.display.get_surface() clicking = 0 circles = [] linesegments = [] mousepress = [] oldmousepos = [] mousepos = [] screenshotnumber = 1 loadscreenshotnumber = 1 tool = 0 #1 = circle, 2 = line segment, 3 = line, etc. class circle: def __init__(self): global oldmousepos, mousepos self.color = (0,0,0) self.x1 = oldmousepos[0] self.y1 = oldmousepos[1] self.x2 = mousepos[0] self.y2 = mousepos[1] self.radius = math.sqrt( ((oldmousepos[0] - mousepos[0])**2) + ((oldmousepos[1] - mousepos[1])**2) ) self.width = 2 class linesegment: def __init__(self): global oldmousepos, mousepos self.color = (0,0,0) self.x1 = oldmousepos[0] self.y1 = oldmousepos[1] self.x2 = mousepos[0] self.y2 = mousepos[1] self.width = 2 def messagebar(write): if write == 0: #nothing going on pygame.display.set_caption("GSP Version 2.0.2") elif write == 1: #drawing circle pygame.display.set_caption("GSP Version 2.0.2: Drawing Circle...") elif write == 2: #drawing line segment pygame.display.set_caption("GSP Version 2.0.2: Drawing Line Segment...") elif write == 3: #drawing line pygame.display.set_caption("GSP Version 2.0.2: Drawing Line...") elif write == 10: #tool = select pygame.display.set_caption("GSP Version 2.0.2: Select Tool") elif write == 10.1: #Circle selected pygame.display.set_caption("GSP Version 2.0.2: Circle selected...") elif write == 10.2: #Line Segment selected pygame.display.set_caption("GSP Version 2.0.2: Line Segment selected...") elif write == 10.3: #Line selected pygame.display.set_caption("GSP Version 2.0.2: Line selected...") elif write == 11: #tool = circle pygame.display.set_caption("GSP Version 2.0.2: Circle Tool") elif write == 12: #tool = line segment pygame.display.set_caption("GSP Version 2.0.2: Line Segment Tool") elif write == 21: #Saving image pygame.display.set_caption("GSP Version 2.0.2: Saving Image...") elif write == 22: #Image saved pygame.display.set_caption("GSP Version 2.0.2: Image Saved!") elif write == 23: #Screen cleared pygame.display.set_caption("GSP Version 2.0.2: Screen Cleared!") def handlekeys(): global tool global fullscreenmode global circles, linesegments keystate = pygame.key.get_pressed() #(quit) if keystate[K_ESCAPE]: sys.exit() #Toggle fullscreen/windowed mode if keystate[K_F12]: if fullscreenmode == 0: pygame.display.set_mode( (1440, 900), pygame.FULLSCREEN ) fullscreenmode = 1 else: pygame.display.set_mode( (640, 480), pygame.RESIZABLE ) fullscreenmode = 0 pygame.time.wait(500) #clear screen if keystate[K_DELETE]: circles = [] linesegments = [] draw(1) messagebar(23) pygame.time.wait(1000) #take screenshot if keystate[K_F4]: global screenshotnumber strscreenshotnumber = str(screenshotnumber) messagebar(21) surface = pygame.display.get_surface() pygame.image.save(surface, "Screenshots/" + strscreenshotnumber + ".bmp") screenshotnumber += 1 messagebar(22) pygame.time.wait(1000) #change tool if keystate[K_t]: toolchange = pygame.mixer.Sound('Sounds/Tool Change.wav') toolchange.play(0) tool += 1 if tool == 3: tool = 0 while 1: pygame.event.get() keystate = pygame.key.get_pressed() messagebar((tool+10)) if keystate[K_t] == 0: break pygame.time.wait(250) def drawpoint(x,y): pygame.draw.circle(surface, (0,0,255), (x,y), 5, 0) pygame.draw.circle(surface, (255,0,0), (x,y), 2, 0) def collisiondetect(typeofcollision): global oldmousepos, mousepos if typeofcollision == 1: #x1,y1 for i in circles: if (math.fabs(oldmousepos[0] - i.x1) < 5 and math.fabs(oldmousepos[1] - i.y1) < 5): if mousepress[0]: oldmousepos = [i.x1, i.y1] if (math.fabs(oldmousepos[0] - i.x2) < 5and math.fabs(oldmousepos[1] - i.y2) < 5): if mousepress[0]: oldmousepos = [i.x2, i.y2] for i in linesegments: if (math.fabs(oldmousepos[0] - i.x1) < 5 and math.fabs(oldmousepos[1] - i.y1) < 5): if mousepress[0]: oldmousepos = [i.x1, i.y1] if (math.fabs(oldmousepos[0] - i.x2) < 5and math.fabs(oldmousepos[1] - i.y2) < 5): if mousepress[0]: oldmousepos = [i.x2, i.y2] if typeofcollision == 2: #x2,y2 for i in circles: if (math.fabs(oldmousepos[0] - i.x1) < 5 and math.fabs(oldmousepos[1] - i.y1) < 5): if mousepress[0]: pygame.mouse.set_pos(i.x1, i.y1) if (math.fabs(oldmousepos[0] - i.x2) < 5and math.fabs(oldmousepos[1] - i.y2) < 5): if mousepress[0]: pygame.mouse.set_pos(i.x2, i.y2) for i in linesegments: if (math.fabs(oldmousepos[0] - i.x1) < 5 and math.fabs(oldmousepos[1] - i.y1) < 5): if mousepress[0]: pygame.mouse.set_pos(i.x1, i.y1) if (math.fabs(oldmousepos[0] - i.x2) < 5and math.fabs(oldmousepos[1] - i.y2) < 5): if mousepress[0]: pygame.mouse.set_pos(i.x2, i.y2) def handlemouse(): global clicking global circles, linesegments global mousepress, oldmousepos, mousepos mousepress = pygame.mouse.get_pressed() if mousepress[0] == 0: clicking = 0 if mousepress[0] and clicking == 0: #if click clicking = 1 #collision detect/translate oldmousepos = pygame.mouse.get_pos() collisiondetect(1) if tool == 0: #select while clicking == 1: pygame.event.get() mousepos = pygame.mouse.get_pos() mousepress = pygame.mouse.get_pressed() #circle collision detect for i in circles: if (math.fabs(mousepos[0] - i.x1) < 3 and math.fabs(mousepos[1] - i.y1) < 3) or (math.fabs(mousepos[0] - i.x2) < 3 and math.fabs(mousepos[1] - i.y2) < 3): messagebar(10.1) #linesegment collision detect for i in linesegments: if (math.fabs(mousepos[0] - i.x1) < 3 and math.fabs(mousepos[1] - i.y1) < 3) or (math.fabs(mousepos[0] - i.x2) < 3 and math.fabs(mousepos[1] - i.y2) < 3): messagebar(10.2) if mousepress[0] == 0: clicking = 0 if tool == 1: #if circle while clicking == 1: messagebar(1) pygame.event.get() mousepos = pygame.mouse.get_pos() mousepress = pygame.mouse.get_pressed() radius = math.sqrt( ((oldmousepos[0] - mousepos[0])**2) + ((oldmousepos[1] - mousepos[1])**2) ) if radius > 4: #Draw background surface.fill((255,255,255)) #draw circle being drawn pygame.draw.circle(surface, (0,170,0), (oldmousepos[0],oldmousepos[1]), radius, 2) #draw center and radial point drawpoint(oldmousepos[0],oldmousepos[1]) drawpoint(mousepos[0],mousepos[1]) draw(0) if mousepress[0] == 0: clicking = 0 collisiondetect(2) circles.append(circle()) if tool == 2: #if line segment while clicking == 1: messagebar(2) pygame.event.get() mousepos = pygame.mouse.get_pos() mousepress = pygame.mouse.get_pressed() #Draw background surface.fill((255,255,255)) #draw line being drawn pygame.draw.line(surface, (0,170,0), (oldmousepos[0],oldmousepos[1]), (mousepos[0],mousepos[1]), 2) #draw endpoints drawpoint(oldmousepos[0],oldmousepos[1]) drawpoint(mousepos[0],mousepos[1]) draw(0) if mousepress[0] == 0: clicking = 0 collisiondetect(2) linesegments.append(linesegment()) def draw(fill): if fill == 1: #Draw background surface.fill((255,255,255)) for i in circles: pygame.draw.circle(surface, i.color, (i.x1,i.y1), i.radius, i.width) drawpoint(i.x1,i.y1) drawpoint(i.x2,i.y2) for i in linesegments: pygame.draw.line(surface, i.color, (i.x1,i.y1), (i.x2,i.y2), i.width) drawpoint(i.x1,i.y1) drawpoint(i.x2,i.y2) pygame.display.flip() def main(): pygame.init() while 1: #get event list pygame.event.get() #handle keys handlekeys() #handle mouse/mouse clicks handlemouse() #update messagebar messagebar(0) #draw draw(1) if __name__ == '__main__': main()