UNPKG

craft-puzzle

Version:

craft parameterized puzzle pieces

166 lines (142 loc) 6.88 kB
<craft> <parameter name="side1" type="string" default="none"/> <parameter name="side2" type="string" default="none"/> <parameter name="side3" type="string" default="none"/> <parameter name="side4" type="string" default="none"/> <script type="text/openjscad"> function main(params) { // to do: deal with minus sign // if minus -> difference // if plus -> union // to do: deal with no sideN parameter e.g.) only side1, side2? var connectors = []; //for connector addtion var holes = []; //for connector hole if (params.side1 != 'none') { //bottom var direction = params.side1[0] console.log(direction) var shape = params.side1.substring(1,params.side1.length) if(shape === 'triangle'){ var connector1 = cylinder({r:5,fn:3}) .rotateZ(60) }else if(shape === 'rectangle'){ var connector1 = cylinder({r:4,fn:4}) .rotateZ(45) }else if(shape === 'circle'){ var connector1 = cylinder({r:4,fn:50}) }else if(shape === 'pentagon'){ var connector1 = cylinder({r:4,fn:5}) }else if(shape === 'hexagon'){ var connector1 = cylinder({r:4,fn:6}) }else if(shape === 'heptagon'){ var connector1 = cylinder({r:4,fn:7}) }else if(shape === 'octagon'){ var connector1 = cylinder({r:4,fn:10}) } if(direction === '+') connectors.push(connector1.translate([10,0,0])); else if(direction === '-') holes.push(connector1.translate([10,0,0])) else console.log("You need to specify the direction of connector at the bottom.\nconvex: + \nconcave: -") } if (params.side2 != 'none') { //left var direction = params.side2[0] var shape = params.side2.substring(1,params.side2.length) if(shape === 'triangle'){ var connector2 = cylinder({r:5,fn:3}).rotateZ(180) }else if(shape === 'rectangle'){ var connector2 = cylinder({r:4,fn:4}) .rotateZ(45) }else if(shape === 'circle'){ var connector2 = cylinder({r:4,fn:50}) }else if(shape === 'pentagon'){ var connector2 = cylinder({r:4,fn:5}) }else if(shape === 'hexagon'){ var connector2 = cylinder({r:4,fn:6}) }else if(shape === 'heptagon'){ var connector2 = cylinder({r:4,fn:7}) }else if(shape === 'octagon'){ var connector2 = cylinder({r:4,fn:10}) } if(direction === '+') connectors.push(connector2.translate([0,10,0])); else if(direction === '-') holes.push(connector2.translate([0,10,0])); else console.log("You need to specify the direction of connector at the left.\nconvex: + \nconcave: -") } if (params.side3 != 'none') { //top var direction = params.side3[0] var shape = params.side3.substring(1,params.side3.length) if(shape === 'triangle'){ var connector3 = cylinder({r:5,fn:3}).rotateZ(180) }else if(shape === 'rectangle'){ var connector3 = cylinder({r:4,fn:4}) .rotateZ(45) }else if(shape === 'circle'){ var connector3 = cylinder({r:4,fn:50}) }else if(shape === 'pentagon'){ var connector3 = cylinder({r:4,fn:5}) }else if(shape === 'hexagon'){ var connector3 = cylinder({r:4,fn:6}) }else if(shape === 'heptagon'){ var connector3 = cylinder({r:4,fn:7}) }else if(shape === 'octagon'){ var connector3 = cylinder({r:4,fn:10}) } if(direction === '+') connectors.push(connector3.translate([10,20,0])); else if(direction === '-') holes.push(connector3.translate([10,20,0])); else console.log("You need to specify the direction of connector at the top of \nconvex: + \nconcave: -") } if (params.side4 != 'none') { //top var direction = params.side4[0] var shape = params.side4.substring(1,params.side4.length) if(shape === 'triangle'){ var connector4 = cylinder({r:5,fn:3}).rotateZ(180) }else if(shape === 'rectangle'){ var connector4 = cylinder({r:4,fn:4}) .rotateZ(45) }else if(shape === 'circle'){ var connector4 = cylinder({r:4,fn:50}) }else if(shape === 'pentagon'){ var connector4 = cylinder({r:4,fn:5}) }else if(shape === 'hexagon'){ var connector4 = cylinder({r:4,fn:6}) }else if(shape === 'heptagon'){ var connector4 = cylinder({r:4,fn:7}) }else if(shape === 'octagon'){ var connector4 = cylinder({r:4,fn:10}) } if(direction === '+') connectors.push(connector4.translate([20,10,0])); else if(direction === '-') holes.push(connector4.translate([20,10,0])); else console.log("You need to specify the direction of connector at the right.\nconvex: + \nconcave: -") } var piece = cube([20,20,1]) connectors.forEach(function(c){ console.log("now adding side") piece = union(piece, c) return piece; }) holes.forEach(function(h){ console.log("now subtracting side") piece = difference(piece, h) return piece; }) return piece; /* return union( cube([20, 20, 1]) //flat canvas ,connector1 //should deal with case withough sideN param ,connector2 ,connector3 ,connector4 );*/ } // end of main </script> </craft>