kopia lustrzana https://github.com/villares/sketch-a-day
				
				
				
			day 69
							rodzic
							
								
									43fa7feb96
								
							
						
					
					
						commit
						91b285143d
					
				|  | @ -0,0 +1,65 @@ | ||||||
|  | """ | ||||||
|  | sketch 69 180310 - Alexandre B A Villares | ||||||
|  | https://abav.lugaralgum.com/sketch-a-day | ||||||
|  | """ | ||||||
|  | from __future__ import division | ||||||
|  | from slider import Slider | ||||||
|  | 
 | ||||||
|  | # slider_object = Slider(lowest, highest, initial value) | ||||||
|  | i = Slider(PI / 6, TWO_PI / 3, QUARTER_PI) # angle, changes number of sides | ||||||
|  | j = Slider(1, 4, 2) # depth, changes number of recursions (fiddled afterwards) | ||||||
|  | k = Slider(10, 50, 25) # offset, changes scale | ||||||
|  | l = Slider(0, TWO_PI, 0) # offset, changes scale | ||||||
|  | 
 | ||||||
|  | I, J, K, L = 1, 1, 1, 1 # dummy initial slider global values | ||||||
|  | # ^ I need these globals because I want to read/draw sliders  | ||||||
|  | #   at the end of the draw loop so they draw on top | ||||||
|  | #   I should 'decouple' reading and drawing the sliders...  | ||||||
|  | 
 | ||||||
|  | def setup(): | ||||||
|  |     size(600, 600) | ||||||
|  |     colorMode(HSB) # makes it easy to cycle colors through Hues... | ||||||
|  |     noFill() | ||||||
|  |     # Position Sliders (x, y) | ||||||
|  |     i.position(20, 20) | ||||||
|  |     j.position(20, 60) | ||||||
|  |     k.position(20, 100) | ||||||
|  |     l.position(20, 140) | ||||||
|  | 
 | ||||||
|  | def draw(): | ||||||
|  |     global I, J, K, L | ||||||
|  |     background(0) | ||||||
|  |     poly_shape(width / 2, height/2, I, J, K, L) | ||||||
|  |     # Read and update sliders | ||||||
|  |     I = i.value()  # from PI/6 to TWO_PI/3 | ||||||
|  |     j.high = 3 + I * 1.5 # change J's upper limit... | ||||||
|  |     J = j.value()  # 1 to 3 + I * 1.5  | ||||||
|  |     K = k.value()  # 10 to 50 | ||||||
|  |     L = l.value()  # 0 to TWO_PI | ||||||
|  |     # uncomment the next line to save frames! | ||||||
|  |     #if not frameCount % 100: saveFrame("s####.tga")  | ||||||
|  | 
 | ||||||
|  | def poly_shape(x, y, angle, D, offset, rotation): | ||||||
|  |     stroke((frameCount / 2 * D) % 256, 255, 255, 255) | ||||||
|  |     strokeWeight(D) | ||||||
|  |     with pushMatrix(): | ||||||
|  |         translate(x, y) | ||||||
|  |         rotate(rotation)  | ||||||
|  |         radius = D * offset | ||||||
|  |         # create a polygon on a ps PShape object | ||||||
|  |         ps = createShape() | ||||||
|  |         ps.beginShape() | ||||||
|  |         a = 0 | ||||||
|  |         while a < TWO_PI: | ||||||
|  |             sx = cos(a) * radius | ||||||
|  |             sy = sin(a) * radius | ||||||
|  |             ps.vertex(sx, sy) | ||||||
|  |             a += angle | ||||||
|  |         ps.endShape(CLOSE)  # end of PShape creation | ||||||
|  |         shape(ps, 0, 0) # Draw the PShape | ||||||
|  |         if D > 1:  # if the recursion 'distance'/'depth' allows... | ||||||
|  |             for i in range(ps.getVertexCount()): | ||||||
|  |                 # for each vertex | ||||||
|  |                 pv = ps.getVertex(i)  # gets vertex as a PVector | ||||||
|  |                 # recusively call poly_shape with a smaller D | ||||||
|  |                 poly_shape(pv.x, pv.y, angle, D - 1, offset, rotation) | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | mode=Python | ||||||
|  | mode.id=jycessing.mode.PythonMode | ||||||
										
											Plik binarny nie jest wyświetlany.
										
									
								
							|  | @ -0,0 +1,53 @@ | ||||||
|  | """ | ||||||
|  | Slider code based on Peter Farell's htts://twitter.com/hackingmath | ||||||
|  | https://github.com/hackingmath/python-sliders http://farrellpolymath.com/ | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | class Slider: | ||||||
|  | 
 | ||||||
|  |     def __init__(self, low, high, default): | ||||||
|  |         '''slider has range from low to high | ||||||
|  |         and is set to default''' | ||||||
|  |         self.low = low | ||||||
|  |         self.high = high | ||||||
|  |         self.val = default | ||||||
|  |         self.clicked = False | ||||||
|  | 
 | ||||||
|  |     def position(self, x, y): | ||||||
|  |         '''slider's position on screen''' | ||||||
|  |         self.x = x | ||||||
|  |         self.y = y | ||||||
|  |         # the position of the rect you slide: | ||||||
|  |         self.rectx = self.x + map(self.val, self.low, self.high, 0, 120) | ||||||
|  |         self.recty = self.y - 10 | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  |     def value(self): | ||||||
|  |         '''updates the slider and returns value''' | ||||||
|  |         pushStyle() | ||||||
|  |         rectMode(CENTER) | ||||||
|  |         # black translucid rect behind slider | ||||||
|  |         fill(0, 100) | ||||||
|  |         stroke(0) | ||||||
|  |         rect(self.x + 60, self.y, 130, 20) | ||||||
|  |         # gray line behind slider | ||||||
|  |         strokeWeight(4) | ||||||
|  |         stroke(200) | ||||||
|  |         line(self.x, self.y, self.x + 120, self.y) | ||||||
|  |         # press mouse to move slider | ||||||
|  |         if dist(mouseX, mouseY, self.rectx + 5, self.recty + 10) < 20: | ||||||
|  |             fill(200) | ||||||
|  |             textSize(10) | ||||||
|  |             text(str(self.val), self.rectx, self.recty + 35) | ||||||
|  |             if mousePressed: | ||||||
|  |                 self.rectx = mouseX | ||||||
|  |         # constrain rectangle | ||||||
|  |         self.rectx = constrain(self.rectx, self.x, self.x + 120) | ||||||
|  |         # draw rectangle | ||||||
|  |         strokeWeight(1) | ||||||
|  |         fill(255) | ||||||
|  |         rect(self.rectx, self.recty + 10, 10, 20) | ||||||
|  |         self.val = map(self.rectx, self.x, self.x + 120, self.low, self.high) | ||||||
|  |         # draw label | ||||||
|  |         popStyle() | ||||||
|  |         return self.val | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Alexandre B A Villares
						Alexandre B A Villares