13: Joels OpenScad

Tweetable Summary: Slice is a parametric #openScad tool for slicing and deforming models. @JoelSSimon.

I was incredibly excited to use openScad to parametrically deform figurative models.  The brain is particularly good at identifying other human faces and very interesting properties arise when deformations occur. Geometric deformations are nice in that they are a type of deformations orthogonal to those that lead into uncanny valley.  I wanted a very simple action that could have a wide range of utility and leave the elegance of the human form intact. Slices are very simple in nature but have many parameters which is why I thought they could be interesting to experiment with. With regarding criticism, I see this as the beginning of a much larger body of work so it feels premature to do so. So my criticism is that I didn’t try more things.

Also I want to touch on the fact that this is the second project using my own head. I don’t enjoy looking at my face any more than you do. I also find it pretentious and weird, but it is the only high quality head model that I own. It also gives me freedom to do ugly and bizarre things to it.

Parameters : [stl file, thickness of each slice as % width, transformation and rotation function to apply to each slice]

Thingverse

Github

/*
        Joel Simon. Jan 23, 2103. joelsimon.net.
*/
 
headWidth = 250; // y
headDepth = 250; // x
headHeight= 401; // z
 
//If unkown, Use this cube to measure the objects dimensions.
//centerCube(headDepth,headWidth, headHeight);
 
module centerCube(x,y, z) {
        color("Yellow",0.3) translate([-x/2,-y/2,-z/2]) cube([x,y,z]);
}
 
module faceSlice(a, b, tx,ty,tz, rx, ry, rz) {
        startY = (a * headWidth) - headWidth/2;
        endY = (b * headWidth) - headWidth/2;
 
        translate([tx,ty,tz])  rotate([-90+rx,ry,rz])  intersection() { 
                color("Yellow", .5) translate([-headDepth/2,startY,-headHeight/2]) cube([headDepth, endY-startY, headHeight]);
                rotate([90,0,0]) translate([50,-2,-200]) rotate([90,0,0]) import("/Users/joelsimon/Documents/3dModeling/JoelHead/midRes.stl");                
        }
}
 
module main(step, skip, tx, ty, tz, rx, ry, rz) {
        for (i = [0 : (1/step)] ){
                if (i%skip == 0) { 
                        faceSlice((i*step)-step, (i*step), 
                                                tx, ty, tz,
                                                (-rx/2) + (i*step)*(rx/2),
                                                (-ry/2) + (i*step)*(ry/2),
                                                (-rz/2) + (i*step)*(rz/2));
                }
        }
}
 
main(.05, 1, 0,0,0,0,0,180);