Skip to content

Instantly share code, notes, and snippets.

@nataliefreed
Created October 25, 2016 15:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nataliefreed/73ae7b113e4692fac13b12e14d0d470e to your computer and use it in GitHub Desktop.
Save nataliefreed/73ae7b113e4692fac13b12e14d0d470e to your computer and use it in GitHub Desktop.
bezier tinkering program OpenJSCAD
// title : OpenJSCAD Example
// author : Natalie Freed
function getParameterDefinitions() {
var parameters = [{ name: 'numCurves', type: 'int', initial: 2, caption: "num curves:" }];
parameters = parameters.concat(makeSliders(1));
return parameters;
}
function main(params) {
var shape = new CSG.Path2D([ [params.x1,params.y1] ], false);
shape = shape.appendBezier([ [params.ax1, params.ay1], [params.bx1, params.by1], [params.x2, params.y2] ]);
shape = shape.appendBezier([ [params.ax2, params.ay2], [params.bx2, params.by2], [params.x3, params.y3] ]);
shape = shape.close();
shape = shape.innerToCAG();
shape = shape.extrude({offset: [0,0,10]});
var pointSpheres = [];
var points = Object.keys(params).map(function(key) {
return params[key];
});
for(var i=1;i<points.length;i+=2) {
pointSpheres.push(CSG.cylinder({start: [points[i], points[i+1], 0], end: [points[i], points[i+1], 20], radius: 2}).setColor([50/255, 100/255, 220/255]));
}
pointSpheres = union(pointSpheres);
return [shape, pointSpheres];
}
function slider(name, initial) {
return { name: name, caption: name, type: 'slider', initial: initial, min: -200, max: 200 };
}
function makeSliders(num) {
return [slider('x1', 0),
slider('y1', -60),
slider('ax1', -93),
slider('ay1', -132),
slider('bx1', -114),
slider('by1', 34),
slider('x2', 2),
slider('y2', 63),
slider('ax2', 127),
slider('ay2', 14),
slider('bx2', 75),
slider('by2', -135),
slider('x3', 0),
slider('y3', -60)];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment