/** * Possibly RC5 quick release plate plate */ include ; $fs=1; $fa=1; //////////////////////////////////////////////////////////////////////////////// /* Position of holes */ D1=5; D2=10; P1=[0,34,0]-D1/2*[0,1,0]; P2=P1-[0,20,0]; P3=[0,39,0]+D2/2*[0,1,0]; //P4=[0,104,0]-D2/2*[0,1,0]; // Just short enough there's a little retainer tag thing P4=[0,104+12,0]; P5=[0,20,0]; // Apparently this is a "RC5 quick release plate". //L=119.5; //W=47+$OD_COMP; // ------> /------------\ //BEVEL=3.25; // H2 | | //H1=1.75; // ------> / \ //H2=5; // BEVEL / \ // ----> / \ // H1 | | // ----> ------------------ // ^ ^ // | W | // Easiest way to describe a polygon from measurements is delta-values module quick_plate(W=47, H1=1.75, H2=5, BEVEL=3.25) { POLY=integ([ [-W/2,0], [W,0], [0,H1], BEVEL*[-1,1], [0,H2], -[W-2*BEVEL,0], -[0,H2], BEVEL*[-1,-1], [0,0] ]); polygon(POLY); echo(POLY); } module RC5_plate(W=47, H1=1.75, H2=5, L=119.5, BEVEL=3.25) difference() { mirror([0,1,0]) rotate([90,0]) linear_extrude(L) quick_plate(W,H1,H2,BEVEL); translate([0,0,-1]) union() { // Notches linear_extrude(H1+H2+BEVEL+2, convexity=2) { hull() for(P=[P1,P2]) translate(P) circle(d=D1+$ID_COMP); hull() for(P=[P3,P4]) translate(P) circle(d=D2+$ID_COMP); } translate(P2) imperial() tsmthread(DMAJ=3/8+$ID_COMP, PITCH=1/16, L=1/2); // catches linear_extrude(1+3) offset(-0.5) offset(0.5) { SIZE=[35,79]; translate(P5) translate(-[SIZE[0],0]/2) square(SIZE); SCL=1.5*[1,1.25]; OFF=[0,0]; translate(OFF) scale(SCL) rotate([0,0,120-30]) circle($fn=3, d=50); mirror([0,1,0]) translate([0,-L]) translate(OFF) scale(SCL) rotate([0,0,120-30]) circle($fn=3, d=50); } } // Slide hull() for(P=[P3,P4]) translate(P+[0,0,3+2]) cylinder(d1=D2+4+$ID_COMP-3, d2=D2+4+$ID_COMP, h=3); } module slide() difference() { union() { hull() for(Y=[0,30]) translate([0,Y,2]) cylinder(d1=$OD_COMP+D2+4-3, d2=$OD_COMP+D2+4, h=3); hull() for(Y=[0,30]) translate([0,Y]) cylinder(d=D2+$OD_COMP, h=7); } for(Y=[0:15:30]) translate([0,Y,0]) imperial() { tsmthread(DMAJ=1/4+$ID_COMP, PITCH=1/20, L=7/20); taper(d=1/4, h=1/4+1/32, off=1/32, in=true); } } module print3(diagram=false) difference() { P1=[18,0]/2; P2=-P1; P3=[0,15]; P4=[0,-11]; P5=[0,30]; intersection() { rotate([90,0]) linear_extrude(75, center=true) quick_plate(43,1,3.5,5); linear_extrude(20,center=true, convexity=5) difference() { intersection_for(A=[45,90+45]) rotate([0,0,A]) square([67.5, 140],center=true); // holes hull() for(P=[P1,P2]) translate(P) imperial() circle(d=3/16); for(P=[P3,P4]) translate(P) imperial() circle(d=3/16); translate(P5) imperial() circle(d=3/16); } } // Bottom tracks translate([0,0,-1]) linear_extrude(1.5+(1/8)*25.4) { hull() for(P=[P1,P2]) translate(P) imperial() circle(d=1/2+3/32); hull() for(P=[P4,P5]) translate(P) imperial() circle(d=1/2+3/32); //translate(P5) imperial() circle(d=1/2+1/16); } // Top tracks translate([0,0,6]) { hull() for(P=[P1,P2]) translate(P) imperial() cylinder(d=(1/4)+(1/16), h=0.25); for(P=[P3,P4,P5]) translate(P) imperial() cylinder(d=(1/4)+(1/16), h=0.25); } // Screw holes if(!diagram) translate([0,0,-1]) { for(P=[P1,P3,P4,P5]) translate(P) imperial() tsmthread(DMAJ=1/4+$ID_COMP, PITCH=1/20, L=1/2); } } module views(size=[44,80,10], TOP=true, SIDE=true, FRONT=true, off=10, cut=false) { if(TOP) projection(cut=cut) children(); // Top view if(SIDE) translate([off+size[0]/2,0]) projection(cut=cut) rotate([0,90]) children(); if(FRONT) translate([0,off+size[1]/2]) projection(cut=cut) rotate([-90,0]) children(); } module label(pos=[0,0], l=20, w=50, h=0) { if(h) { txt=str(h); translate(pos-[-l, h/2]) { mirror((l<0) ? [0,0,0] : [1,0,0]) { translate([-2,0]) square([abs(l)+2,1]); translate([-2,0]) translate([0,h]) square([abs(l)+2,1]); square([1,h]); } translate([-2,2]+((l<0)?[0,0]:[10,0])) rotate([0,0,90]) text(txt,7); } } else if(w) { txt=str(w); translate(pos-[w/2, l]) { mirror((l<0) ? [0,1,0] : [0,0,0]) { translate([0,-2]) square([1,abs(l)+2]); translate([0,-2]) translate([w,0]) square([1,abs(l)+2]); square([w,1]); } translate([2,2]+((l<0)?[0,0]:[0,-10])) text(txt,7); } } } module show_plate(size=[44,80,10]) { views(size=size) children(); label([36.5,-5], l=10, w=10); label([-0.5,150], l=-5, w=40.5); label([-25,147], l=-5, h=5); label([-0.5,140], l=5, w=47); translate([90,0]) { views(SIDE=false, FRONT=false, cut=true) children(); label([17,122], l=-5, w=11); label([15,79+20-1+20/2], l=-10, h=20); label([15,-1+119.5/2], l=-10, h=79); label([17-35/2,80], l=10, w=35); label([23-47/2,-5], l=10, w=47); } } //show_plate(size=[44,260,10]) RC5_plate(); //translate([0,0,1.75+5+3.25]) rotate([180,0]) RC5_plate(); slide();