CEB Press v16.09/SCAD Files/Parametric
work in progress moved on to CEB Press v17.08/SCAD Files/
creating an OpenSCAD replica of v16.09
CEB Press v16.09/SCAD Files/Parametric
Latest files on Google Drive for download: link
Contents
Default Variables
By making a SCAD file with the variables used throughout the CEB press, we can use the "include" command within each individual part's file to pull in the same dimensions. Read More
- vars.scad
brickW=6; brickL=12; brickCH=6; $fn=8; //defines resolution of circles. 8 is okay for review. 100 or greater should be used for for final dxf export. dZstandard=0.5; //thickness of steel to be cut for drawer parts fZstandard=0.5; aZstandard=0.5; //thickness of steel to be cut for arm parts fBOLTHOLEstandardD=1; //standard bolts used on frame sliderodholeOD=1.2; dGap=0.03125; //gap between a hole cut's edge and the part sitting within the hole. //D3 appears to use 0.3125, is this in error? //all parts set to standard thickness below //off standard preferences can be defined below //drawer drawergap=0.0283; //extra room for drawer to slide in the space between f1 and f4 drawerHgap=0.1884; //total extra space from drawer sides to frame walls. sum of both sides. d1z=dZstandard; d2z=dZstandard; d3z=dZstandard; d4z=dZstandard; d5z=dZstandard; d6z=dZstandard; d5z=dZstandard; d7z=dZstandard; d8z=dZstandard; d9z=dZstandard; //frame f1x=24.2; f1y=6; f1z=0.5; f2y=3.5; f2z=fZstandard; f3x=f1x; f3y=3.5; f3z=fZstandard; f4y=11; f4z=fZstandard; f5y=3.5; f5z=fZstandard; f6y=8; f6z=fZstandard; f8y=brickW; f8z=fZstandard; f8boltD=1; f9y=4.5; f9x=43.5; //set based on MAINcylinder f9z=fZstandard; f8x=f9x; f11x=1.25; f11z=fZstandard; f13z=fZstandard; //arms a1x=4; a1y=72; //calculate based on drawer cylinder a1z=aZstandard; a2x=6; a2y=72; //calculate based on drawer cylinder a2z=aZstandard; a4z=aZstandard; a6z=aZstandard; // //Input your main cylinder's dimenions here // cylinderMAINminC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully compressed. cylinderMAINmaxC2E=0; //main hydraulic cylinder's distance from center of mounting hole to the end of the shaft when fully extended. // //Input your drawer cylinder's dimenions here // cylinderDRAWERbodyH=3; //measured when in position, largest length from top to bottom of cylinder cylinderDRAWERminC2C=0; //drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully compressed. cylinderDRAWERmaxC2C=0; ///drawer's hydraulic cylinder's distance from the center of one mounting hole to the center of the other when fully extended. cylinderDRAWERrodclevisW=2.5; //width of cylinders' clevis on end of rod cylinderDRAWERrodclevisID=1; cylinderDRAWERrodclevisOD=2; cylinderDRAWERrearclevisW=2.5; //width of mounting clevis cylinder body cylinderDRAWERrearclevisID=1; cylinderDRAWERrearclevisOD=2; cylinderDRAWERrearclevisClearance=3; //usable space around rear clevis pin (in diameter). be aware of hyraulic fittings. //the following variables are calculated in order of dependence on preceding variables d3x=brickL+(d2z*2); d3y=brickCH-d1z; d4x=brickW+d3z+d3z; d4y=brickCH-d1z; d5x=brickL+(d2z*2); d5y=brickW; d6x=brickL+(d2z*2); d6y=brickCH; d7x=cylinderDRAWERrearclevisClearance; d7y=a4z+d8z+cylinderDRAWERbodyH; d9x=cylinderDRAWERbodyH+d6z; d9y=cylinderDRAWERbodyH+d8z; d8x=brickL+(d2z*2); d8y=max(5,(d9x-d6z)); //need to review fundamentals, 5 minimun unless d9 gets larger than d8 d1x=18.5; //need to come up with a formula d1y=18; //need to come up with a formula d2x=d8y+d6z+brickW+d3z+d5y+d3z; d2y=brickCH; f11y=f8y; f6x=brickL+(d2z*2)+(f9y*2)+drawerHgap; f8x=43.5; //need to define based on MAINcylinder inputs f2x=brickL+(d2z*2)+drawerHgap+(f9y*2)-(1.4*2); //distance between large cut outs in f9 f5x=brickL+(d2z*2)+drawerHgap+(f9y*2)+(a1x*2); //distance between outer edges of each A1 f4x=f5x-0.5; //same as f5 but minus 0.25 on each side to give a little overhang
Common Modules
Creating a file of modules will allow for them to be utilized in other files with the "use" command.
modus.scad
//Corner Joint - allows the sides of two parts to create inlayed corner. Aids with welding. //need to verify module math is the same throughout all parts. module cornerjoint(Z,L,H,EndGap,PadL,PadH,CJangle,CJcenter){ //change so that H = Z of inlayed part (usually 0.5) //add center and angle in degrees option, orgin far side of cut out area if((CJangle==0)&&(CJcenter==0)) { translate([0,0,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==90)&&(CJcenter==0)) { translate([H+PadH,0,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==180)&&(CJcenter==0)) { translate([L,H+PadH,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==270)&&(CJcenter==0)) { translate([0,L,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } //centered else if((CJangle==0)&&(CJcenter==1)) { translate([-L/2,0,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==90)&&(CJcenter==1)) { translate([0,-L/2,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==180)&&(CJcenter==1)) { translate([L/2,0,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } else if((CJangle==270)&&(CJcenter==1)) { translate([0,L/2,0]) rotate([0,0,CJangle]) difference(){ cube([L,H+PadH,Z]); translate([EndGap,H,0]) cube([PadL,PadH,Z]); translate([L-EndGap-PadL,H,0]) cube([PadL,PadH,Z]);} } } //end cornerjoint module //Tab Insert - used to cut a hole for an abutting part to insert into. Typically aids with welding the two parts. module tabinsert(X,Y,Z,dGap,cGap,c1,c2,c3,c4,c5,c6,c7,c8,center){ translate([-dGap-(center*(X/2)),-dGap-(center*(Y/2)),0]){ //main cut cube([X+(dGap*2),Y+(dGap*2),Z]); //corner c1c2 translate([-cGap,(Y+(dGap*2))-c1+cGap,0]) { cube([c2,c1,Z]);} //corner c3c4 translate([(X+(dGap*2))-c3+cGap,(Y+(dGap*2))-c4+cGap,0]){ cube([c3,c4,Z]); } //corner c5c6 translate([(X+(dGap*2))-c6+cGap,-cGap,0]) { cube([c6,c5,Z]); } //corner c7c8 translate([-cGap,-cGap,0]){ cube([c7,c8,Z]); } } //end center translate } //end tabinsert module
Frame
Frame Assembly
- F4 holes look slightly more narrow than the F9 holes.
- calculate F4 and F5 Z height from the top down. Let f9 length be adjusted by cylinder. try to avoid calculation again.
- Fp.scad
include <vars.scad>; use <modus.scad>; use <f1p.scad>; use <f2p.scad>; use <f3p.scad>; use <f4p.scad>; use <f5p.scad>; use <f6p.scad>; //use <f7p.scad>; use <f8p.scad>; use <f9p.scad>; //use <f10p.scad>; use <f11p.scad>; //use <f12p.scad>; translate([0,(f8y/2)+f1z,f9x]) rotate([90,180,0]) f1p(); translate([0,-(f8y/2),f9x]) rotate([90,180,0]) f1p(); translate([-f2x/2,(f8y/2),f9x-f1y]) rotate([0,0,0]) f2p(); //connected to F1 translate([f2x/2,-(f8y/2),f9x-f1y]) rotate([0,0,180]) f2p(); translate([0,(f8y/2),f9x]) rotate([0,180,0]) f3p(); //connected to F1 translate([0,-(f8y/2),f9x]) rotate([0,180,180]) f3p(); //connected to F1 translate([0,(f8y/2)+f6z,(f9x-f1y-brickCH-drawergap-f4y)]) rotate([90,0,0]) f4p(); //?group with f5? translate([0,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)]) rotate([90,0,0]) f4p(); translate([0,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+f4y]) rotate([0,180,0]) f5p(); //connected to F4 translate([0,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+f4y]) rotate([0,180,180]) f5p(); //connected to F4 translate([-f2x/2,(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)]) rotate([0,0,0]) f2p(); //connected to F1 translate([f2x/2,-(f8y/2),(f9x-f1y-brickCH-drawergap-f4y)+7.5-(f2z/2)]) rotate([0,0,180]) f2p(); translate([0,(f8y/2)+f6z,f6y]) rotate([90,180,0]) f6p(); translate([0,-(f8y/2),f6y]) rotate([90,180,0]) f6p(); translate([-f2x/2,(f8y/2),0]) rotate([0,0,0]) f2p(); //connected to F6 translate([f2x/2,-(f8y/2),0]) rotate([0,0,180]) f2p(); translate([f6x/2,0,0]) rotate([0,0,180]) f11p(); translate([f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5]) rotate([0,0,180]) f11p(); translate([f6x/2,0,f9x-0.5]) rotate([0,0,180]) f11p(); translate([-f6x/2,0,0]) rotate([0,0,0]) f11p(); translate([-f6x/2,0,f9x-f1y-d2y-f4y-drawergap-0.5]) rotate([0,0,0]) f11p(); translate([-f6x/2,0,f9x-0.5]) rotate([0,0,0]) f11p(); translate([1.9-8.5,0,0]){ //??? rotate([0,0,90]){ translate([(f8y/2),f8z,0]) rotate([90,-90,0]) f8p(); translate([(f8y/2)+(f9z/2)-(f8z/2),0,0]) rotate([0,-90,0]) f9p(); translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0]) rotate([0,-90,0]) f9p(); } //end rotate } //end translate translate([-1.9+8.5,0,0]){ rotate([0,0,-90]){ translate([(f8y/2),f8z,0]) rotate([90,-90,0]) f8p(); translate([(f8y/2)+(f9z/2)-(f8z/2),0,0]) rotate([0,-90,0]) f9p(); translate([-(f8y/2)+(f9z/2)+(f8z/2),0,0]) rotate([0,-90,0]) f9p(); } //end rotate } //end translate
F1
Welds to: F2, F3
Bolts to: F9
Abuts: A2
- need to tweak bolt translates?
- change to use cornerjoint module instead of insert module on outter ends of F3 connections
include <vars.scad>; use <modus.scad>; f1p(); module f1p(){ difference(){ translate([-(f1x/2),0,0]) cube([f1x,f1y,f1z]); translate([-(f1x/2),0,0]) cuts(); translate([(f1x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ tabinsert(1,f3z,f1z,0.0625,0.125,0,0,0.25,0.25,0.0,0,0,0,0); translate([0,f1y-0.25,0]) cube([0.4,0.25,f1z]); //appears to be intended to interface with A2, but not sure why translate([(f1x-f2x)/2,f1y-f2z,0]) tabinsert(1,f2z,f1z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); //f2 translate([(f1x/2)-1,0,0]) tabinsert(1,f3z,f1z,0.0625,0.125,0.25,0.25,0,0,0.0,0,0,0,0); translate([((f1x-d3x-drawerHgap)/2)-2,1.5,0]) //bolt center to inner edge of f9=2 cylinder(h = f1z, r = 0.375); translate([((f1x-d3x-drawerHgap)/2)-2,4.5,0]) cylinder(h = f1z, r = 0.375); translate([((f1x-d3x-drawerHgap)/2)+(sliderodholeOD/2)+drawerHgap,2.465,0]) //not sure what this is supposed to align with, drawer? cylinder(h = f1z, r = sliderodholeOD/2); } //end cuts module } //end f1p module
F2
Welds to: F1, F4, F6
include <vars.scad>; use <modus.scad>; f2p(); module f2p(){ difference(){ cube([f2x,f2y,f2z]); translate([1,0,0]) cornerjoint(f2z,f2x-2,f1z,0.125,f2x-2-0.25,0.125,0,0); } //end difference } //end f2p module
F3
Welds to: F1
Bolts to: F12
- F3 and F1 should probably be made the same length.
- going to set f3y=f1y. also some tweaks to insert holes
include <vars.scad>; use <modus.scad>; f3p(); module f3p(){ difference(){ translate([-(f3x/2),0,0]) cube([f3x,f3y,f3z]); translate([-(f3x/2),0,0]) cuts(); translate([(f3x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([1,0,0]) cornerjoint(f3z,(f3x-4)/2,f1z,1,1,0.125,0,0); translate([5.375,f3y/2,0]) cylinder(h = f3z, r = 0.5); } //end cuts module } //end f3p module
F4
Welds to: F2, F5
Bolts to: F9
- use cornerjoint module instead of insert for F5 connection
- bolt holes look like they're maybe slightly miss aligned?
- are they different sized?
include <vars.scad>; use <modus.scad>; f4p(); module f4p(){ difference(){ translate([-(((brickL+(d2z*2)+drawerHgap+(f9y*2)))/2),0,0]) union(){ cube([(brickL+(d2z*2)+drawerHgap+(f9y*2)),f4y,f4z]); translate([-((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2))))/2,f4y/2,0]) f4triangle(); translate([f4x-((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2),f4y/2,0]) mirror([1,0,0]) f4triangle(); } translate([-(f4x/2),0,0]) cuts(); translate([(f4x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ //f5 outer translate([(f4x/2)+((f5x/2)-2),f4y,0]) cornerjoint(f4z,4,f5z,0.125,1,0.125,180,1); //tabinsert(4,f5z*2,f4z,0.0625,0.125,0,0,0,0,0,0,0.25,0.25,1); //f5 center translate([(f4x/2),f4y,0]) tabinsert(2,f5z*2,f4z,0.0625,0.125,0,0,0,0,0.0,0,0.25,0.25,1); //f2 translate([(f4x-f2x+1)/2,7.5,0]) tabinsert(1,f2z,f6z,0.0625,0.125,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); //f9 bolts translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,2,0]) cylinder(h = f4z, r = 0.5025); //diameter 1.0? translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,6,0]) cylinder(h = f4z, r = 0.5025); translate([((f4x-brickL-(d2z*2)-drawerHgap)/2)-2,9,0]) cylinder(h = f4z, r = 0.5025); } //end module module f4triangle (){ difference(){ cube([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,f4y/2,f4z]); difference(){ cube([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,f4y/2,f4z]); translate([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,0,0]) rotate([0,0,atan(((f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2)/(f4y/2))]) cube([10,10,f4z]); translate([(f4x-(brickL+(d2z*2)+drawerHgap+(f9y*2)))/2,0,0]) cube([10,10,f4z]); } } } //end f4triangle module } //end f4p module
F5
Welds to: F4
Bolts to: A1
- f5p.scad
include <vars.scad>; use <modus.scad>; f5p(); module f5p(){ difference(){ translate([-(f5x/2),0,0]) cube([f5x,f5y,f5z]); translate([-(f5x/2),0,0]) cuts(); translate([(f5x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([4,0,0]) cornerjoint(f5z,(f5x-(4*2)-2)/2,f4z,1,1,0.125,0,0); //arm bolt hole translate([(a1x/2),f5y-1.5,0]) //aligns with hole in center of a1x cylinder(h = f5z, r = 0.5); //might add an insert for an A6 type of support } //end cuts module } //end f5p module
F6
some errors of symmetry in source dxf drawing. made some assumptions. need to check fit with interfacing parts.
Welds to: F2, F7
Bolts to: F9
- changed bolt hole distance to outer edge, the drawerHgap makes it goofy to have a round number from center.
- need to change translate to accomidate for drawerHgap
- need to use insert module for f2 holes
- need to use MAINcylinder specs to make cylinder pin hole
include <vars.scad>; use <modus.scad>; f6p(); module f6p(){ difference(){ translate([-(f6x/2),0,0]) cube([f6x,f6y,f6z]); translate([-(f6x/2),0,0]) cuts(); translate([(f6x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([(f6x-f2x)/2,f6y-f2z,0]) tabinsert(1,f2z,f6z,0.0625,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); //F2 //need to change this section to match MAINcylinder specs translate([(f6x/2)-1.125,f6y-3.22,0]) cube([2.25,3.22,f6z]); translate([f6x/2,f6y-3.22,0]) cylinder(h = f6z, r = 1.125); // bolt holes to f9 translate([((f6x-brickL-(d2z*2)-drawerHgap)/2)-2,2,0]) cylinder(h = f6z, r = 0.38); //diameter 0.76? translate([((f6x-brickL-(d2z*2)-drawerHgap)/2)-2,6,0]) cylinder(h = f6z, r = 0.38); } //end cuts module } //end f6p module
F8
Welds to: F9, F10
Bolts to: Rub Plate ?
- need to redo cornerjoint module inputs
- need to set standard bolt size
include <vars.scad>; use <modus.scad>; f8p(); module f8p(){ difference(){ cube([f8x,f8y,f8z]); translate([(1/12)*f8x,0,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1); translate([(5/12)*f8x,0,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1); translate([(9/12)*f8x,0,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,0,1); translate([(1/12)*f8x,f8y,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1); translate([(5/12)*f8x,f8y,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1); translate([(9/12)*f8x,f8y,0]) cornerjoint(f8z,(f8x/6),f9z,0.25,0.5,0.125,180,1); hull(){ translate([f8x-7-((f1y+d2y+drawergap+1)-(0.26/2)),f8y/2,0]) //?x interfaces with what? need to calculate center of F8 cylinder(h = f8z, r = f8boltD/2); translate([f8x-7-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0]) cylinder(h = f8z, r = f8boltD/2); } hull(){ translate([f8x-((f1y+d2y+drawergap+1)-(0.26/2)),f8y/2,0]) //?x interfaces with what? cylinder(h = f8z, r = f8boltD/2); translate([f8x-((f1y+d2y+drawergap+1)+(0.26/2)),f8y/2,0]) cylinder(h = f8z, r = f8boltD/2); } } } //end f8p module
F9
Welds to: F8, F11
Bolts to: F1, F4, F6
Abuts: A1 ?, A2 ?, F12
include <vars.scad>; use <modus.scad>; f9p(); module f9p(){ difference(){ cube([f9x,f9y,f9z]); translate([(3/12)*f9x,0,0]) cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1); translate([(7/12)*f9x,0,0]) cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1); translate([(11/12)*f9x,0,0]) cornerjoint(f9z,(f8x/6),f8z,0.25,0.5,0.125,0,1); translate([0,f9y-0.5,0]) tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0.25,0.25,0,0,0); translate([f9x-f1y-d2y-f4y-drawergap-0.5,f9y-0.5,0]) tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); translate([f9x-0.5,f9y-0.5,0]) tabinsert(0.5,0.5,f9z,0.03125,0.125,0,0,0,0,0,0,0.25,0.25,0); //big cutout translate([f9x-(f1y-0.2)-(a2x+0.4),f9y-1.4,0]) cube([a2x+0.4,1.4,f9z]); //?interfaces with a2? //bolt holes //f6 translate([2,2,0]) //?x interfaces with f6? //replacing translate y=1.9 with y=f9y-2.5 cylinder(h = f9z, r = 0.38); translate([6,2,0]) //?x interfaces with f6? cylinder(h = f9z, r = 0.38); //distance from center to edge of part is 1.5 //distance between center to center is 9.5283 //distance from center to edge of part is 2 //gap between parts is 6.0283 //drawer is 6.0 tall //leaves 0.0283 space //should this be 0.03125? (1/32) //should f4 be attached with 4 smaller bolts instead of 3 big ones. would prevent all movement? //f4 translate([f9x-f1y-d2y-drawergap-2,2,0]) //replacing translate y=1.9 with f9y-2.5 cylinder(h = f9z, r = 0.5025); translate([f9x-f1y-d2y-drawergap-5,2,0]) cylinder(h = f9z, r = 0.5025); translate([f9x-f1y-d2y-drawergap-9,2,0]) cylinder(h = f9z, r = 0.5025); //f1 translate([f9x-4.5,2,0]) //?x interfaces with f1? cylinder(h = f9z, r = 0.38); translate([f9x-1.5,2,0]) //?x interfaces with f1? cylinder(h = f9z, r = 0.38); } }
F10
Welds to: F8?
F10x=5.9; F10y=2; F10z=0.5; cube([F10x,F10y,F10y]);
F11
Welds to: F9
include <vars.scad>; use <modus.scad>; f11p(); module f11p(){ difference(){ translate([0,-(f11y/2),0]) cube([f11x,f11y,f11z]); translate([0,-(f11y/2),0]) cuts(); translate([0,(f11y/2),0]) mirror([0,1,0]) cuts(); } //end difference module cuts(){ translate([0.5,0,0]) cube([0.125,0.125+f9z,f11z]); translate([0.625,0,0]) cube([f11x-0.5-0.125,f9z,f11z]); } //end cuts module } //end f11p module
F12
Bolts to Hopper Seat
F13
Spacer betwwen F6 and F9 used to accomidate MAINcylinder with larger diameter than brickW
include <vars.scad>; use <modus.scad>; f13p(); module f13p(){ difference(){ cube([f6y,f9y,f13z]); translate([2,f9y-2.5,0]) //?x interfaces with f6? //replacing translate y=1.9 with y=f9y-2.5 cylinder(h = f9z, r = 0.38); translate([6,f9y-2.5,0]) //?x interfaces with f6? cylinder(h = f9z, r = 0.38); } } //end f13p module
Arms
A1
Welds to: A2, A6
Bolts to: A4, A5, F1, H7, H8
Abuts: F9
A1x=4; A1y=72; A1z=0.5; $fn=20; difference(){ cube([A1x,A1y,A1z]); translate([0,0.71875,0]) cube([0.6875,0.5625,A1z]); translate([0,44.8501,0]) //?y.8501? cube([0.6875,0.5625,A1z]); translate([0,70.9688,0]) //y 0.46875 from top cube([0.6875,0.5625,A1z]); translate([2,2,0]) cylinder(h = A1z, r = 0.4); translate([2,4,0]) cylinder(h = A1z, r = 0.4); translate([2,27,0]) cylinder(h = A1z, r = 0.4); translate([2,37,0]) cylinder(h = A1z, r = 0.4); hull(){ translate([2,39.67,0]) //small error on drawing cylinder(h = A1z, r = 0.4); translate([2,40.25,0]) //small error on drawing cylinder(h = A1z, r = 0.4); } hull(){ translate([2,50.25,0]) //small error cylinder(h = A1z, r = 0.4); translate([2,50.85,0]) //small error cylinder(h = A1z, r = 0.4); } translate([2,53.75,0]) cylinder(h = A1z, r = 0.4); translate([2,56.75,0]) cylinder(h = A1z, r = 0.4); translate([2,63.75,0]) cylinder(h = A1z, r = 0.4); translate([2,69,0]) cylinder(h = A1z, r = 0.4); //corner joints for(i=[0:5]) translate([4,i*11.9375,0]) rotate([0,0,90]) cornerjoint(6.0625,0.625,0.125,0.5,0.125); } module cornerjoint(L,H,EndGap,PadL,PadH){ difference(){ cube([L,H,A1z]); translate([EndGap,H-PadH,0]) cube([PadL,PadH,A1z]); translate([L-EndGap-PadL,H-PadH,0]) cube([PadL,PadH,A1z]); } } //end cornerjoint module
A2
Welds to: A1, A6
Bolts to: Guards, Hopper mounts
Abuts: F1 (?), F9
A2x=5.96603; //?just 6? A2y=72; A2z=0.5; $fn=20; difference(){ cube([A2x,A2y,A2z]); translate([A2x-0.6875,0.46875,0]) cube([0.6875,0.5625,A2z]); translate([A2x-0.6875,26.5874,0]) //?y.8501? cube([0.6875,0.5625,A2z]); translate([A2x-0.6875,A2y-0.71875,0]) //y 0.46875 from top cube([0.6875,0.5625,A2z]); hull(){ translate([A2x-1.75,21.2,0]) //?y? cylinder(h = A2z, r = 0.4); translate([A2x-1.75,22.765,0]) //?y? cylinder(h = A2z, r = 0.4); } hull(){ translate([A2x-1.75,47.56,0]) //?y? cylinder(h = A2z, r = 0.4); translate([A2x-1.75,49.0785,0]) //?y? cylinder(h = A2z, r = 0.4); } //corner joints for(i=[0:5]) translate([0,(i*12)+6,0]) rotate([0,0,270]) cornerjoint(6,0.625,0.125,0.5,0.125); } module cornerjoint(L,H,EndGap,PadL,PadH){ difference(){ cube([L,H,A2z]); translate([EndGap,H-PadH,0]) cube([PadL,PadH,A2z]); translate([L-EndGap-PadL,H-PadH,0]) cube([PadL,PadH,A2z]); } } //end cornerjoint module
A3
Welds to: A4, A5
a3x=4; a3y=72; a3z=0.5; $fn=20; difference(){ cube([a3x,a3y,a3z]); //corner joints for(i=[0:5]) translate([0,(i*12)+6,0]) rotate([0,0,270]) cornerjoint(6,0.625,0.125,0.5,0.125); } module cornerjoint(L,H,EndGap,PadL,PadH){ difference(){ cube([L,H,a3z]); translate([EndGap,H-PadH,0]) cube([PadL,PadH,a3z]); translate([L-EndGap-PadL,H-PadH,0]) cube([PadL,PadH,a3z]); } } //end cornerjoint module
A4
Welds to: A3
Bolts to: A1
- add insert holes for drawer part D7
- location will be determined by cylinder specifications.
- length of A1 and holes to attach to A4 will need to be go along with this.
a4x=6; a4y=72; a4z=0.5; $fn=20; difference(){ cube([a4x,a4y,a4z]); hull(){ translate([a4x-2,23.725,0]) //?y? cylinder(h = a4z, r = 0.4); translate([a4x-2,24.835,0]) //?y? cylinder(h = a4z, r = 0.4); } hull(){ translate([a4x-4,23.725,0]) //?y? cylinder(h = a4z, r = 0.4); translate([a4x-4,24.835,0]) //?y? cylinder(h = a4z, r = 0.4); } hull(){ translate([a4x-2,47.135,0]) cylinder(h = a4z, r = 0.4); translate([a4x-2,48.265,0]) cylinder(h = a4z, r = 0.4); } hull(){ translate([a4x-4,47.135,0]) cylinder(h = a4z, r = 0.4); translate([a4x-4,48.265,0]) cylinder(h = a4z, r = 0.4); } //corner joints for(i=[0:5]) translate([0,(i*11.9375)+6.0625,0]) rotate([0,0,270]) cornerjoint(6.0625,0.625,0.125,0.5,0.125); } module cornerjoint(L,H,EndGap,PadL,PadH){ difference(){ cube([L,H,a4z]); translate([EndGap,H-PadH,0]) cube([PadL,PadH,a4z]); translate([L-EndGap-PadL,H-PadH,0]) cube([PadL,PadH,a4z]); } } //end cornerjoint module
A5
Welds to: A3
Bolts to: A1
a5x=6; a5y=72; a5z=0.5; $fn=20; difference(){ cube([a5x,a5y,a5z]); hull(){ translate([3,23.795,0]) cylinder(h = a5z, r = 0.405); translate([3,24.805,0]) cylinder(h = a5z, r = 0.405); } hull(){ translate([3,47.2,0]) cylinder(h = a5z, r = 0.405); translate([3,48.2,0]) cylinder(h = a5z, r = 0.405); } //corner joints for(i=[0:5]) translate([6,(i*12)+5.9375,0]) rotate([0,0,90]) cornerjoint(6.125,0.625,0.125,0.5,0.125); } module cornerjoint(L,H,EndGap,PadL,PadH){ difference(){ cube([L,H,a5z]); translate([EndGap,H-PadH,0]) cube([PadL,PadH,a5z]); translate([L-EndGap-PadL,H-PadH,0]) cube([PadL,PadH,a5z]); } } //end cornerjoint module
A6
Welds to: A1, A2
include <vars.scad>; use <modus.scad>; a6p(); module a6p(){ X=a2x; Y=a1x; Zx=a2z; Zy=a1z; W=min(((1)/cos((atan((Y-1)/(X-1))))),((1)/sin((atan((Y-1)/(X-1)))))); //trying to make some overhang for insert to butt up against. not perfect but working //trying for 0.5, but not getting there exactly difference(){ union(){ translate([-1/tan(atan((Y-1)/(X-1))),0,0]) rotate([0,0,atan((Y-1)/(X-1))]) translate([0,-W,0]) #cube([50,W,a6z]); cube([0.625,Zx,a6z]); translate([X-Zy,Y-0.625,0]) cube([Zy,0.625,a6z]); } //end union - start difference translate([0.625,0,0]) cube([100,Zx,a6z]); translate([-100,-99,0]) cube([100,100,a6z]); translate([0,-100,0]) cube([100,100,a6z]); translate([0,Y,0]) cube([100,100,a6z]); translate([X,0,0]) cube([100,100,a6z]); translate([X-Zy,Y-0.625-100,0]) cube([Zy,100,a6z]); } //end difference } //end a6p module
Drawer
Drawer Assembly
- origin located at center of bottom of compression chamber
- X-axis oriented along movement of drawer
- Dp.scad
include <vars.scad>; use <modus.scad>; use<d1p.scad>; use<d2p.scad>; use<d3p.scad>; use<d4p.scad>; use<d5p.scad>; use<d6p.scad>; use<d8p.scad>; use<d9p.scad>; //main translate translate([-d8y-d6z-(brickW/2),-d2z-(brickL/2),0]){ translate([0,d2z,0]) rotate([90,0,0]) d2p(); translate([0,d2z+d2z+brickL,0]) rotate([90,0,0]) d2p(); translate([0,d8x/2,0]) rotate([0,0,270]) d8p(); translate([d8y+d6z,d6x/2,0]) rotate([90,0,270]) d6p(); translate([d8y+d6z+brickW,d3x/2,d3y]) rotate([270,0,270]) d3p(); translate([d8y+d6z+brickW+d3z,d5x/2,0]) rotate([0,0,270]) d5p(); translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))-(brickL/4),0]) rotate([90,0,0]) d4p(); translate([d8y+d6z+brickW+d3z+(d5y/2),(d5x/2)+(d5z/2),0]) rotate([90,0,0]) d4p(); translate([d8y+d6z+brickW+d3z+(d5y/2),((d5x/2)+(d5z/2))+(brickL/4),0]) rotate([90,0,0]) d4p(); translate([d8y+d6z+brickW+d5y+d3z,d3x/2,d3y]) rotate([270,0,270]) d3p(); translate([d8y+d6z,(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z)),0]) rotate([90,0,180]) d9p(); translate([d8y+d6z,(cylinderDRAWERrodclevisW+d9z)+((((d6x-cylinderDRAWERrodclevisW)/2)-(d9z))),0]) rotate([90,0,180]) d9p(); translate([(d8y+d6z+brickW),(brickL/2)+d2z,d3y]) rotate([0,0,270]) d1p(); // //add drawer cylinger rod half and rod clevis // } //end main translate
D1
- does not match freecad drawing from JuneGroup file
- need to review
- d1p.scad
include <vars.scad>; use <modus.scad>; d1p(); module d1p(){ difference(){ translate([-(d1x/2),0,0]) cube([d1x,d1y,d1z]); translate([-(d1x/2),0,0]) cuts(); translate([(d1x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ cube([(d1x-brickL-d2z-d2z)/2,16,d1z]); translate([(d1x-brickL-d2z-d2z)/2,1.5,0]) //1.5 could be better defined, but needs to match D2's cut out cube([0.6,5,d1z]); //June freecad model has larger cut out } //end module } //end d1p module
D2
- need to switch to "tabinsert" module
Welds to: D1, D3 (2), D5, D6, D8
include <vars.scad>; use <modus.scad>; echo(d8y+d6z+brickW+d3z+d5y+d3z); //total length of part d2p(); module d2p(){ difference(){ cube([d2x,d2y,d2z]); //cuts numbered clockwise from top left //1 - Not on FreeCad Model?? translate([0,d2y-0.43,0]) cube([2,0.43,d2z]); //2 - D6 translate([d8y,d2y-0.5,0]) tabinsert(d6z,0.5,d2z,dGap,0.125,0,0,0,0,0.25,0.25,0.25,0.25,0); //3 - D3, D1 translate([d8y+d6z+brickW,d2y-d1z-0.75,0]) tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0.375,0.25,0.25,0.375,0); translate([d8y+d6z+brickW+d3z,d2y-d1z,0]) tabinsert(1.5-d3z,d1z,d2z,dGap,0.125,0,0,0,0,0.25,0.625,0,0,0); //4 - D3, D1 translate([d2x-d3z,d2y-0.75-d1z,0]) //put in far corner tabinsert(d3z,d1z+0.75,d2z,dGap,0.125,0,0,0,0,0,0,0.25,0.5,0); //5 - D3, D5 translate([d8y+d6z+brickW+d3z+(d5y-0.5),0,0]) tabinsert(0.5,d5z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); translate([d8y+d6z+brickW+d3z+d5y,0,0]) tabinsert(d3z,0.75,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); //6 - D3, D5 translate([d8y+d6z+brickW,0,0]) tabinsert(d3z,0.75,d2z,dGap,0.125,0.5,0.25,0.25,0.25,0,0,0,0,0); translate([d8y+d6z+brickW+d3z,0,0]) tabinsert(0.5,d5z,d2z,dGap,0.125,0,0,0.25,0.375,0,0,0,0,0); //7 - D6, D8 translate([d8y-0.75,0,0]) tabinsert(0.75,d8z,d2z,dGap,0.125,0.25,0.25,0,0,0,0,0,0,0); translate([d8y,0,0]) tabinsert(d6z,1,d2z,dGap,0.125,0.25,0.25,0.25,0.625,0,0,0,0,0); //8 - D8 tabinsert(0.75,d8z,d2z,dGap,0.125,0,0,0.25,0.25,0,0,0,0,0); } //end difference } //end d2p module
D3
- need to fix corner joint module, then double check its use here
include <vars.scad>; use <modus.scad>; //this part is rendered upside down from placement d3p(); module d3p(){ difference(){ translate([-(d3x/2),0,0]) cube([d3x,d3y,d3z]); translate([-(d3x/2),0,0]) cuts(); translate([(d3x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([0,d3y/2,0]) cornerjoint(d3z,d3y-(0.75*2),d2z,0.125,0.25,0.125,270,1); //outer columns tab inserts translate([(brickL/4)+d2z,d3y-d5z-(0.75/2),0]) tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1); translate([(brickL/4)+d2z,((d4y-d5z)/2),0]) tabinsert(d4z,0.5,d3z,dGap,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); translate([(brickL/4)+d2z,0,0]) tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1); //center column tab inserts translate([d3x/2,d3y-d5z-(0.75/2),0]) tabinsert(d4z,0.75,d3z,dGap,0.09375,0.375,0.25,0.25,0.375,0.375,0.25,0.25,0.375,1); translate([d3x/2,((d4y-d5z)/2),0]) tabinsert(d4z,0.5,d3z,dGap,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); translate([d3x/2,0,0]) tabinsert(d4z,(0.75*2),d3z,dGap,0.09375,0.625,0.25,0.25,0.625,0,0,0,0,1); } //end cuts module } //end d3p module
D4
include <vars.scad>; use <modus.scad>; d4p(); module d4p(){ difference(){ translate([-(d4x/2),0,0]) cube([d4x,d4y,d4z]); translate([-(d4x/2),0,0]) cuts(); translate([(d4x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([0,d5z+0.75,0]) cornerjoint(d4z,(d4y-(0.75*2)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(0.125*2),0.125,270,0); translate([0,d4y-0.75-((d4y-(0.75*2)-0.5-d5z)/2),0]) cornerjoint(d4z,(d4y-(0.75*2)-0.5-d5z)/2,d3z,0.125,((d4y-(0.75*2)-0.5-d5z)/2)-(0.125*2),0.125,270,0); translate([-0.125,0,0]) cornerjoint(d4z,((d4x-0.5)/2)+(0.125),d5z,0.125,((d4x-0.5)/2)-0.125,0.125,0,0); } //end cut module } //end d4p module
D5
- d5p.scad
include <vars.scad>; use <modus.scad>; d5p(); module d5p(){ difference(){ translate([-(d5x/2),0,0]) cube([d5x,d5y,d5z]); translate([-(d5x/2),0,0]) cuts(); translate([(d5x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([0,d5y/2,0]) cornerjoint(d5z,d5y-(0.5*2),d2z,0.125,0.25,0.125,270,1); translate([1,0,0]) cube([(d5x-(1*3))/2,0.125,d5z]); translate([1,d5y-0.125,0]) cube([(d5x-(1*3))/2,0.125,d5z]); translate([(brickL/4)+d2z,d5y/2,0]) tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); translate([d5x/2,3,0]) tabinsert(0.5,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); } //end cuts module } //end d5p module
D6
include <vars.scad>; use <modus.scad>; d6p(); module d6p(){ difference(){ translate([-(d6x/2),0,0]) cube([d6x,d6y,d6z]); translate([-(d6x/2),0,0]) cuts(); translate([(d6x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([0,1,0]) cornerjoint(d6z,d6y-1-0.5,d2z,0.125,0.25,0.125,270,0); translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),((d9y-d8z)/2)+d8z,0]) tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); } //end cuts module } //end d6p module
D7
- Should this part be re-categorized as an Arm part?
- Welds to A4
- tweaking to add inserts to aid weld
- d7p.scad
include <vars.scad>; use <modus.scad>; //need to add holes to A4 for cornerjoint d7p(); module d7p(){ difference(){ cube([d7x,d7y,d7z]); //joint translate([d7x/2,0,0]) cornerjoint(d7z,(d7x-1),a4z,0.125,0.25,0.125,0,1); //pin hole translate([d7x/2,a4z+d8z+(cylinderDRAWERbodyH/2),0]) cylinder(h = d7z,r = (cylinderDRAWERrearclevisID/2)); } //end difference } //end d7p module
D8
- insert holes' position is wrong
include <vars.scad>; use <modus.scad>; d8p(); module d8p(){ difference(){ translate([-(d8x/2),0,0]) cube([d8x,d8y,d8z]); translate([-(d8x/2),0,0]) cuts(); translate([(d8x/2),0,0]) mirror([1,0,0]) cuts(); } //end difference module cuts(){ translate([0,d8y/2,0]) cornerjoint(d8z,d8y-(0.75*2),d2z,0.125,0.25,0.125,270,1); translate([1,d8y-0.125,0]) cube([(d8x-(1*3))/2,0.125,d8z]); translate([(((d6x-cylinderDRAWERrodclevisW)/2)-(d9z/2)),d8y-((d9x-d6z)/2),0]) tabinsert(d9z,0.5,d5z,0.03125,0.09375,0.25,0.25,0.25,0.25,0.25,0.25,0.25,0.25,1); } //end module } //end d8p module
D9
Welds to: D6, D8
- uses drawer cylinder height to determine clevis pin location
include <vars.scad>; use <modus.scad>; d9p(); module d9p(){ difference(){ cube([d9x,d9y,d9z]); //x translate([-0.125,0,0]) cornerjoint(d9z,0.125+(d6z+((d9x-d6z-0.5)/2)),d8z,0.125,(d6z+((d9x-d6z-0.5)/2))-0.125,0.125,0,0); translate([0.5+(d6z+((d9x-d6z-0.5)/2)),0,0]) cornerjoint(d9z,((d9x-d6z-0.5)/2)+0.125,d8z,0.125,((d9x-d6z-0.5)/2)-0.125,0.125,0,0); //y translate([0,-0.125,0]) cornerjoint(d9z,0.125+(d8z+((d9y-d8z-0.5)/2)),d6z,0.125,(d8z+((d9y-d8z-0.5)/2))-0.125,0.125,270,0); translate([0,0.5+(d8z+((d9y-d8z-0.5)/2)),0]) cornerjoint(d9z,((d9y-d8z-0.5)/2)+0.125,d6z,0.125,((d9y-d8z-0.5)/2)-0.125,0.125,270,0); //pin hole translate([(0.5/2)+(d6z+((d9x-d6z-0.5)/2)),(0.5/2)+(d8z+((d9y-d8z-0.5)/2)),0]) cylinder(h = d9z,r = (cylinderDRAWERrodclevisID/2)); } } //end d9p module
D10
d10x=18; d10y=3; d10z=dZstandard; $fn=20; difference(){ cube([d10x,d10y,d10z]); translate([1,d10y/2,0]) cylinder(h = d10z,r = 0.55); translate([4,d10y/2,0]) cylinder(h = d10z,r = 0.55); translate([9,d10y/2,0]) cylinder(h = d10z,r = 0.55); translate([14,d10y/2,0]) cylinder(h = d10z,r = 0.55); translate([17,d10y/2,0]) cylinder(h = d10z,r = 0.55); } //end difference
Grate
G1
g1x=23; g1y=2; g1z=0.5; $fn=20; difference(){ cube([g1x,g1y,g1z]); translate([7,g1y/2,0]) cylinder(h = g1z,r = 0.4065); translate([16,g1y/2,0]) cylinder(h = g1z,r = 0.4065); } //end difference
G2
g2x=56; g2y=2.3; g2z=0.5; $fn=20; union(){ difference(){ cube([g2x,g2y-0.1,g2z]); translate([4.375,1.6,0]) //goofy distance apart holes cylinder(h = g2z,r = 0.406); translate([20.125,1.6,0]) cylinder(h = g2z,r = 0.406); translate([35.875,1.6,0]) cylinder(h = g2z,r = 0.406); translate([51.625,1.6,0]) cylinder(h = g2z,r = 0.406); //first two cuts are goofy distance from begining, so is last one. for(i=[0:((g2x-3.4)/1.75)]) translate([(i*1.75)+3.4,0,0]) cube([0.3,0.5,g2z]); translate([1.6,0,0]) cube([0.3,0.5,g2z]); } //end difference //goofy distance from end translate([15.9475,g2y-0.1,0]) cube([0.3,0.1,g2z]); translate([g2x-15.9475-0.3,g2y-0.1,0]) cube([0.3,0.1,g2z]); }
G3
g3x=2; g3y=3; g3z=0.5; $fn=20; difference(){ cube([g3x,g3y,g3z]); translate([1,1,0]) cylinder(h = g3z,r = 0.40625); } //end difference
G4
g4x=5; g4y=2.5; g4z=0.5; $fn=20; difference(){ cube([g4x,g4y,g4z]); translate([1,1.25,0]) cylinder(h = g4z,r = 0.40625); } //end difference
Part Review Layout
- All parts layed out in sequence for review in DXF format
- might find a way to label parts below X axis
- review.scad
include <vars.scad>; use <modus.scad>; use<d1p.scad>; use<d2p.scad>; use<d3p.scad>; use<d4p.scad>; use<d5p.scad>; use<d6p.scad>; use<d8p.scad>; use<d9p.scad>; partspacing=1; //common distance between parts //d1 projection(cut = true) //use projection to create 2D DXF files translate([d1y,d1x/2,0]) rotate([0,0,90]) d1p(); projection(cut = true) translate([d1y+partspacing+d2y,0,0]) rotate([0,0,90]) d2p(); projection(cut = true) translate([d1y+partspacing+d2y+partspacing+d2y,0,0]) rotate([0,0,90]) d2p(); projection(cut = true) translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y,d3x/2,0]) rotate([0,0,90]) d3p(); projection(cut = true) translate([d1y+partspacing+d2y+partspacing+d2y+partspacing+d3y+partspacing+d3y,d3x/2,0]) rotate([0,0,90]) d3p();
To Do
- get SVnest to work for torch table layout