animation.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. import pygame
  2. import pygame.gfxdraw
  3. import math
  4. import random
  5. pg = pygame
  6. pygame.init()
  7. #window = pygame.display.set_mode((600, 300))#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  8. window = pygame.display.set_mode((600, 300),pg.RESIZABLE,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  9. #window = pygame.display.set_mode((600, 300),pg.NOFRAME,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  10. #window = pygame.display.set_mode((1600, 900),pg.NOFRAME,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  11. #window = pygame.display.set_mode((600, 300),pygame.FULLSCREEN) #x left->right ,y top-> bottom
  12. # pygame.display.set_mode((self.width, int(self.height+(self.height*0.15))) ,pygame.FULLSCREEN)
  13. pg.display.set_caption('LibreLight Animation')
  14. def event_read():
  15. inc = 1
  16. for event in pg.event.get():
  17. print("event",event)
  18. move_x = 0
  19. move_y = 0
  20. move_z = 0
  21. rot_x = 0
  22. rot_y = 0
  23. rot_z = 0
  24. if event.type== pg.QUIT:
  25. print("quit")
  26. pg.quit()
  27. quit()
  28. sys.exit()
  29. if "key" in dir(event):
  30. if event.key == 27: #ESC pg.KEYDOWN:
  31. print("quit")
  32. pg.quit()
  33. quit()
  34. sys.exit()
  35. class Grid():
  36. def __init__(self):
  37. pixA = []
  38. for c in range(10):
  39. row = []
  40. for r in range(10):
  41. color = [r,r,r]
  42. row.append(color)
  43. pixA.append(row)
  44. self.pixA = pixA
  45. self.red = 0
  46. self.green = 0
  47. self.blue = 0
  48. self.blue_dir = 1
  49. def draw(self):
  50. pixA = self.pixA
  51. #pixel_array = pygame.PixelArray(window)
  52. pixel_array = {} # pygame.PixelArray(window)
  53. #pixel_array.open()
  54. a_x_max = 600 #pixel_array[0])
  55. a_y_max = 300 #pixel_array)
  56. b_x_max = len(pixA[0])
  57. b_y_max = len(pixA)
  58. b_h = int(a_x_max / b_x_max)
  59. b_w = int(a_y_max / b_y_max)
  60. self.red = 0
  61. self.green = 0
  62. #blue = 255
  63. for r,row in enumerate(pixA):
  64. self.red += 30
  65. if self.red > 255:
  66. self.red = 255
  67. self.green = 0
  68. if self.blue > 255:
  69. self.blue = 255
  70. self.blue_dir = 0
  71. if self.blue <= 0:
  72. self.blue = 0
  73. self.blue_dir = 1
  74. for c,col in enumerate(row):
  75. self.green += 30
  76. if self.green > 255:
  77. self.green = 255
  78. color = pygame.Color(self.red,self.green,self.blue)
  79. #print("x:{:3} y:{:3} {:3} {:3} c:{}".format(x,y,x+bc,y+br,color))
  80. x = r*b_w
  81. y = c*b_h
  82. #pixel_array[r*b_w][c*b_h] = color
  83. #pixel_array[x:x+b_w-1,y:y+b_h-1] = color
  84. k = "{}:{},{}:{} {}".format(x,x+b_w-1,y,y+b_h-1,color) #x,x+10,y,y+10)
  85. pixel_array[k] = (x,x+b_w-1,y,y+b_h-1,color)
  86. #pixel_array.close()
  87. #one = 0
  88. if self.blue_dir:
  89. self.blue += 10
  90. else:
  91. self.blue -= 10
  92. return pixel_array
  93. class Planet():
  94. def __init__(self,x,y,ang=0):
  95. self._pos_center = (x,y)
  96. self._quadrant = 0
  97. if ang > 90:
  98. self._quadrant = ang//90
  99. ang -= self._quadrant * 90
  100. self._ang = ang
  101. self._ang_dir = 1
  102. self._r = 10 #
  103. self._orbit = 30 # orbit,umlaufbahn
  104. self._color = [255,255,0]
  105. self._x=0
  106. self._y=0
  107. self._ix = 0
  108. self._iy = 0
  109. def rotate(self):
  110. q = 0
  111. if self._ang_dir:
  112. self._ang += 5 # degree
  113. if self._ang > 90:
  114. self._ang = 0
  115. self._quadrant += 1
  116. # q = 1
  117. #if self._ang < 0:
  118. # self._ang = 0
  119. # q = 1
  120. else:
  121. self._ang -= 1 # degree
  122. if q:
  123. r1 = random.randint(0,255)
  124. r2 = random.randint(0,255)
  125. self._color = [255,r1,r2]
  126. self._ix = math.sin(math.radians(self._ang))*self._orbit
  127. #self._ix = math.sin(self._ang)*self._orbit
  128. #self._ix = math.sin(math.degrees(self._ang))*self._orbit
  129. self._iy = math.sqrt(self._orbit**2 - self._ix**2)
  130. y = self._iy
  131. x = self._ix
  132. if self._quadrant == 1:
  133. self._iy = -x
  134. self._ix = y
  135. elif self._quadrant == 2:
  136. self._iy = -y
  137. self._ix = -x
  138. elif self._quadrant == 3:
  139. self._iy = x
  140. self._ix = -y
  141. else:
  142. self._quadrant = 0
  143. def draw(self,x,y):
  144. self._pos_center = (x,y)
  145. self.rotate()
  146. self._x = int(self._pos_center[0] + self._ix)
  147. self._y = int(self._pos_center[1] + self._iy)
  148. print("ang {} {} {:3} {:3} {}".format( self._ang,self._quadrant,self._x,self._y,self._color))
  149. return (self._x,self._y,self._color)
  150. class Gobo1():
  151. def __init__(self,x=20,y=20,speed=1):
  152. self.pos_x=x
  153. self.pos_x_dir = 1
  154. self.pos_y=y
  155. self.pos_y_dir = 1
  156. self.r = 7
  157. self.r_dir = 1
  158. self.speed = speed
  159. self.ang = 0
  160. self.ix=0
  161. self.iy=0
  162. self.planetes = []
  163. p = Planet(self.pos_x,self.pos_y,ang=10)
  164. self.planetes.append(p)
  165. p = Planet(self.pos_x,self.pos_y,ang=240)
  166. self.planetes.append(p)
  167. p = Planet(self.pos_x,self.pos_y,ang=120)
  168. self.planetes.append(p)
  169. def rotate(self):
  170. self.ix = math.sin(math.radians(0))*self.r
  171. self.iy = math.sqrt(self.r**2 - self.ix**2)
  172. self.ang+=1
  173. if self.ang >= 360:
  174. self.ang = 0
  175. def draw(self,color=[255,255,255]):
  176. self.rotate()
  177. #pixel_array = pygame.PixelArray(window)
  178. pixel_array = {}
  179. self.color = pygame.Color(color[0],color[1],color[2])
  180. x=self.pos_x
  181. y=self.pos_y
  182. for i,planet in enumerate(self.planetes):
  183. px,py,pcolor = planet.draw(x,y)
  184. k = "{}.{}:{},{}:{}".format(i,px,px+10,py,py+10)
  185. pixel_array[k] = (px,px,py,py , pcolor )
  186. if self.pos_x > 300:
  187. self.pos_x_dir = 0
  188. if self.pos_x <= self.speed:
  189. self.pos_x_dir = 1
  190. if self.pos_x_dir:
  191. self.pos_x += self.speed
  192. else:
  193. self.pos_x -= self.speed
  194. if self.r > 20:
  195. self.r_dir = 0
  196. if self.r <=7:
  197. self.r_dir = 1
  198. if self.r_dir:
  199. self.r+=1
  200. else:
  201. self.r-=1
  202. return pixel_array
  203. run = True
  204. one = 1
  205. blue = 0
  206. blue_dir = 1
  207. pos_x_dir = 1
  208. #pixel_array = pygame.PixelArray(window)
  209. import time
  210. #time.sleep(1)
  211. grid = Grid()
  212. gobo1 = Gobo1(speed=5)
  213. gobo2 = Gobo1(200,150,speed=2)
  214. while run:
  215. event_read()
  216. if one:
  217. window.fill(0)
  218. d=grid.draw()
  219. d1=gobo1.draw()#20,10)
  220. d2=gobo2.draw()#20,10)
  221. pixel_array = pygame.PixelArray(window)
  222. for k in d:
  223. i = d[k]
  224. #rect = pygame.draw.circle(window,i[4] , (i[0]+10,i[2]) ,10)
  225. #rect = pygame.gfxdraw.aacircle(window, i[0]+10,i[2] ,10,i[4])
  226. #rect = pygame.Rect(window.get_rect().center, (0, 0)).inflate(*([min(window.get_size())//2]*2))
  227. #pygame.display.flip()
  228. for k in d1:
  229. i = d1[k]
  230. #print( k,"i",i)
  231. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  232. rect = pygame.draw.circle(window,i[4] , (i[0]+10,i[2]) ,10)
  233. rect = pygame.gfxdraw.aacircle(window, i[0]+10,i[2] ,10,i[4])
  234. for k in d2:
  235. i = d2[k]
  236. #print( k,"i",i)
  237. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  238. rect = pygame.draw.circle(window,i[4] , (i[0]+10,i[2]) ,10)
  239. rect = pygame.gfxdraw.aacircle(window, i[0]+10,i[2] ,10,i[4])
  240. pixel_array.close()
  241. #pygame.display.flip()
  242. #gobo2.draw(color=[255,0,0])
  243. #pygame.display.flip()
  244. pg.time.wait(10)
  245. pygame.display.flip()
  246. pg.time.wait(10)
  247. pygame.quit()
  248. exit()