Created
October 25, 2016 15:42
-
-
Save nataliefreed/73ae7b113e4692fac13b12e14d0d470e to your computer and use it in GitHub Desktop.
bezier tinkering program OpenJSCAD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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