| 
									
										
										
										
											2018-08-01 02:24:56 +00:00
										 |  |  | # Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day | 
					
						
							| 
									
										
										
										
											2018-08-03 00:38:16 +00:00
										 |  |  | # s214 20180731 | 
					
						
							| 
									
										
										
										
											2018-08-01 02:24:56 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from gif_export_wrapper import * | 
					
						
							|  |  |  | add_library('gifAnimation') | 
					
						
							|  |  |  | add_library('peasycam') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GRID_SIZE = 16 | 
					
						
							|  |  |  | SKETCH_NAME = "s214" | 
					
						
							|  |  |  | OUTPUT = ".gif" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def setup(): | 
					
						
							|  |  |  |     print_text_for_readme(SKETCH_NAME, OUTPUT) | 
					
						
							|  |  |  |     size(700, 700, P3D) | 
					
						
							|  |  |  |     #hint(ENABLE_DEPTH_SORT) | 
					
						
							|  |  |  |     # optional PeasyCam setup to allow orbiting with a mouse drag | 
					
						
							|  |  |  |     cam = PeasyCam(this, 100) | 
					
						
							|  |  |  |     cam.setMinimumDistance(1000) | 
					
						
							|  |  |  |     cam.setMaximumDistance(1000) | 
					
						
							|  |  |  |     # sets border and grid spacing | 
					
						
							|  |  |  |     Node.border = 50 | 
					
						
							|  |  |  |     Node.spacing = (width - Node.border * 2) / GRID_SIZE | 
					
						
							|  |  |  |     # Node.nodes is a list of nodes in a 3D grid | 
					
						
							|  |  |  |     for x in range(GRID_SIZE): | 
					
						
							|  |  |  |         for y in range(GRID_SIZE): | 
					
						
							|  |  |  |             for z in range(GRID_SIZE): | 
					
						
							|  |  |  |                 Node.nodes.append(Node(x, y, z)) | 
					
						
							|  |  |  |     # Node.rooms is a list of spaced nodes inside the grid | 
					
						
							|  |  |  |     Node.rooms = [node for node in Node.nodes | 
					
						
							|  |  |  |                   if node.ix % 2 == 0 and | 
					
						
							|  |  |  |                      node.iy % 2 == 0 and | 
					
						
							|  |  |  |                      node.iz % 2 == 0] | 
					
						
							|  |  |  |     for node in Node.rooms: | 
					
						
							|  |  |  |         node.cor = color(0, 128, 255) | 
					
						
							|  |  |  |     # 3     | 
					
						
							|  |  |  |     Node.rooms = [node for node in Node.nodes | 
					
						
							|  |  |  |                   if node.ix % 3 == 0 and | 
					
						
							|  |  |  |                      node.iy % 3 == 0 and | 
					
						
							|  |  |  |                      node.iz % 3 == 0] | 
					
						
							|  |  |  |     for node in Node.rooms: | 
					
						
							|  |  |  |         node.cor = color(255, 128, 0) | 
					
						
							|  |  |  |     # Node.rooms is a list of spaced nodes inside the grid | 
					
						
							|  |  |  |     Node.rooms = [node for node in Node.nodes | 
					
						
							|  |  |  |                   if node.ix % 5 == 0 and | 
					
						
							|  |  |  |                      node.iy % 5 == 0 and | 
					
						
							|  |  |  |                      node.iz % 5 == 0] | 
					
						
							|  |  |  |     for node in Node.rooms: | 
					
						
							|  |  |  |         node.cor = color(128, 0, 255) | 
					
						
							|  |  |  |     # 7  | 
					
						
							|  |  |  |     Node.rooms = [node for node in Node.nodes | 
					
						
							|  |  |  |                   if node.ix % 7 == 0 and | 
					
						
							|  |  |  |                      node.iy % 7 == 0 and | 
					
						
							|  |  |  |                      node.iz % 7 == 0] | 
					
						
							|  |  |  |     for node in Node.rooms: | 
					
						
							|  |  |  |         node.cor = color(255, 0, 128) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  | def draw(): | 
					
						
							|  |  |  |     lights() | 
					
						
							|  |  |  |     # arbitray rotation | 
					
						
							|  |  |  |     rotate(-1, 1/2, 1, 1/2) | 
					
						
							|  |  |  |     background(100) | 
					
						
							|  |  |  |     # angle based on frameCount to animate box sizes | 
					
						
							|  |  |  |     ang = frameCount/10. | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     for node in Node.nodes: | 
					
						
							|  |  |  |             node.plot() | 
					
						
							|  |  |  |             node.update(ang) | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |     # stop after a full size animatiom cycle | 
					
						
							|  |  |  |     if ang < TWO_PI: | 
					
						
							|  |  |  |         gif_export(GifMaker, filename=SKETCH_NAME) | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         gif_export(GifMaker, finish=True) | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Node(): | 
					
						
							|  |  |  |     nodes = [] | 
					
						
							|  |  |  |     rooms = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, x, y, z): | 
					
						
							|  |  |  |         self.ix = x | 
					
						
							|  |  |  |         self.iy = y | 
					
						
							|  |  |  |         self.iz = z | 
					
						
							|  |  |  |         self.x = Node.border + Node.spacing / 2 + x * Node.spacing - width / 2 | 
					
						
							|  |  |  |         self.y = Node.border + Node.spacing / 2 + y * Node.spacing - width / 2 | 
					
						
							|  |  |  |         self.z = Node.border + Node.spacing / 2 + z * Node.spacing - width / 2 | 
					
						
							|  |  |  |         self.size_ = 1  | 
					
						
							|  |  |  |         self.cor = None | 
					
						
							|  |  |  |         self.update(0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def plot(self): | 
					
						
							|  |  |  |         """ draws box """ | 
					
						
							|  |  |  |         if self.cor: | 
					
						
							|  |  |  |             stroke(0) | 
					
						
							|  |  |  |             fill(self.cor) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             stroke(255, 50) | 
					
						
							|  |  |  |             fill(255, 10) | 
					
						
							|  |  |  |         with pushMatrix(): | 
					
						
							|  |  |  |                 translate(self.x, self.y, self.z) | 
					
						
							|  |  |  |                 box(Node.spacing * self.size_) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def update(self, ang): | 
					
						
							|  |  |  |         """ changing box size """ | 
					
						
							|  |  |  |         if self.cor == None: | 
					
						
							|  |  |  |             self.size_ = 1 | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             self.size_ = cos(ang) #self.x + self.y + self.z + ang) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def keyPressed(): | 
					
						
							|  |  |  |     """ press P to save an image """ | 
					
						
							|  |  |  |     if key in ['p', 'P']: | 
					
						
							|  |  |  |         saveFrame("####" + SKETCH_NAME + OUTPUT) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def print_text_for_readme(name, output): | 
					
						
							|  |  |  |     """ prints text in the console to add to project README.md """ | 
					
						
							|  |  |  |     println(""" | 
					
						
							|  |  |  |  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {1}: [code](https://github.com/villares/sketch-a-day/tree/master/{0}) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """.format(name, name[1:], output) | 
					
						
							|  |  |  |     ) |