diff --git a/2019/sketch_190719a/2096.png b/2019/sketch_190719a/2096.png new file mode 100644 index 00000000..43c2743f Binary files /dev/null and b/2019/sketch_190719a/2096.png differ diff --git a/2019/sketch_190719a/3462.png b/2019/sketch_190719a/3462.png new file mode 100644 index 00000000..dd88b190 Binary files /dev/null and b/2019/sketch_190719a/3462.png differ diff --git a/2019/sketch_190719a/4067.png b/2019/sketch_190719a/4067.png new file mode 100644 index 00000000..d3e6ec52 Binary files /dev/null and b/2019/sketch_190719a/4067.png differ diff --git a/2019/sketch_190719a/6248.png b/2019/sketch_190719a/6248.png new file mode 100644 index 00000000..03c289de Binary files /dev/null and b/2019/sketch_190719a/6248.png differ diff --git a/2019/sketch_190719a/6594.png b/2019/sketch_190719a/6594.png new file mode 100644 index 00000000..719b008e Binary files /dev/null and b/2019/sketch_190719a/6594.png differ diff --git a/2019/sketch_190719a/7176.png b/2019/sketch_190719a/7176.png new file mode 100644 index 00000000..2a60d096 Binary files /dev/null and b/2019/sketch_190719a/7176.png differ diff --git a/2019/sketch_190719a/7673.png b/2019/sketch_190719a/7673.png new file mode 100644 index 00000000..c55a47a5 Binary files /dev/null and b/2019/sketch_190719a/7673.png differ diff --git a/2019/sketch_190719a/8509.png b/2019/sketch_190719a/8509.png new file mode 100644 index 00000000..e8ad5603 Binary files /dev/null and b/2019/sketch_190719a/8509.png differ diff --git a/2019/sketch_190719a/8783.png b/2019/sketch_190719a/8783.png new file mode 100644 index 00000000..7d107596 Binary files /dev/null and b/2019/sketch_190719a/8783.png differ diff --git a/2019/sketch_190719a/sketch_190719a.pyde b/2019/sketch_190719a/sketch_190719a.pyde new file mode 100644 index 00000000..db459da7 --- /dev/null +++ b/2019/sketch_190719a/sketch_190719a.pyde @@ -0,0 +1,118 @@ +# Alexandre B A Villares - https://abav.lugaralgum.com/sketch-a-day +# Using JCSG library prepared for Processing by George Profenza +# Work in progress... + +# You'll need to copy these libs into your Processing libraries folder: +add_library('VVecMath') +add_library('jcsg') + +from random import choice + +dim = (200, 300, 400, 500) + + +def setup(): + global pshape_result + size(600, 500, P3D) + hint(ENABLE_DEPTH_TEST) + hint(ENABLE_DEPTH_SORT) + # fill(100, 200, 200, 240) + pshape_result = calculate_stuff() + + +def draw(): + background(240) + lights() + translate(width * 0.5, height * 0.5, -height) + rotateY(map(mouseX, 0, width, -PI, PI)) + rotateX(map(mouseY, 0, height, PI, -PI)) + for ps in pshape_result: + shape(ps) + + +def calculate_stuff(): + solids, holes = [], [] + thick = 50 + for i, s in enumerate(range(2)): + w, h, d = choice(dim), choice(dim), choice(dim) + solid = Cube(w, h, d).toCSG() + if w / 100 % 2: + hole = Cube(w - thick, h, d - thick).toCSG() + else: + hole = Cube(w, h - thick, d - thick).toCSG() + move = choice(dim) + if move / 100 % 2: + hole = csgRot(hole, 15, 0, 0) + solid = csgRot(solid, 15, 0, 0) + solids.append(csgTranslate(solid, move - 250, 0, 0)) + holes.append(csgTranslate(hole, move - 250, 0, 0)) + + mass = solids[0].union(solids[1:]) + void = holes[0].union(holes[1:]) + sub_result = mass.difference(void) + results = [] + for s in solids: + results.append(sub_result.intersect(s)) + for i, r in enumerate(results): + results[i] = r.difference(solids[i - 1]) + results.append(solids[0].intersect(solids[1]).intersect(sub_result)) + + + colors = [lambda: color(255, 100, 100), + lambda: color(0, 255, 100), + lambda: color(0, 100, 255)] + return [CSGToPShape(r, 1, colors[i % len(results)]) + for i, r in enumerate(results)] + + +def csgTranslate(csg, x, y, z): + return csg.transformed(Transform.unity().translate(x, y, z)) + +def csgRot(csg, x, y, z): + return csg.transformed(Transform.unity().rot(x, y, z)) + +def CSGToPShape(mesh, scale, color_maker): + """ + Convert a CSG mesh to a Processing PShape + """ + result = createShape(GROUP) # allocate a PShape group + # for each polygon (Note: these can have 3,4 or more vertices) + for p in mesh.getPolygons(): + # make a child PShape + polyShape = createShape() + # begin setting vertices to it + polyShape.beginShape() + # for each vertex in the polygon + for v in p.vertices: + # add each (scaled) polygon vertex + polyShape.vertex(v.pos.x * scale, + v.pos.y * scale, + v.pos.z * scale) + + # finish this polygon + polyShape.endShape() + polyShape.setFill(color_maker()) + # append the child PShape to the parent + result.addChild(polyShape) + + return result + +def keyPressed(): + if key == "p": + saveFrame("###.png") + if key == " ": + global pshape_result + pshape_result = calculate_stuff() + +def settings(): + from os import path + global SKETCH_NAME + SKETCH_NAME = path.basename(sketchPath()) + OUTPUT = ".png" + println( + """ +![{0}]({2}/{0}/{0}{1}) + +[{0}](https://github.com/villares/sketch-a-day/tree/master/{2}/{0}) [[Py.Processing](https://villares.github.io/como-instalar-o-processing-modo-python/index-EN)] +""".format(SKETCH_NAME, OUTPUT, year()) + )