module chuck() difference() { // Also from https://www.thingiverse.com/thing:2226446 hull() import("small-chuck.stl"); cube([1,50,50],center=true); } module holder(l=20, $fs=0.25) difference() { circle(d=6); offset(0.25) offset(-0.25) difference() { rotate([0,0,45]) union() { square([2,50],center=true); square([50,2],center=true); } circle(d=5); } } module holder2(h=20, w=2) translate(-h*[0,0,1]/2) difference() { rotate_extrude() { square([(6.25+(w*2))/2,h]); intersection() { circle(r=(6.25+(2*w))/2); mirror([0,1]) square([20,20]); } } // if(hollow) translate([0,0,2]) linear_extrude(h, convexity=3) holder(); } module pie(A) scale(100) polygon([ [0,0], [1,0], [sin(90-A),-cos(90-A)] ]); module arc2d(r=50, d=5, a0=0, a1=45, c1=true, c2=true) { module pie(r, a1=0, a2=90, msteps=36) { function a(n)=90-(a1+((a2-a1)*(n/msteps))); polygon(concat([[0,0]], [ for(n=[0:msteps]) r*[sin(a(n)),cos(a(n))] ])); } union() { intersection() { projection() rotate_extrude() translate([r,0,0]) circle(d=d); pie(r+d, a0, a1); } if(c1) rotate([0,0,a0]) translate([r,0]) circle(d=d); if(c2) rotate([0,0,a1]) translate([r,0]) circle(d=d); } } module oblique(A=0, R=25, flick=0) { module hollow(AA) { rotate([0,90,AA]) translate(-R*[0,0,1]) translate([0,0,10]) linear_extrude(25, convexity=3, center=true) circle(d=6); // holder(); } translate(R*[1,0]) difference() { union() { // Nib holder body rotate([0,90,A]) translate(-R*[0,0,1]) holder2(hollow=0); // Connecting arc linear_extrude(2, center=true) arc2d(R+10, 8, 180, 180+A, false, false); linear_extrude(6, center=true) arc2d(R+10, 2, 180, 180+A, false, false); //linear_extrude(4, center=true) arc2d(R-4, 2, 180, 180+A, false, false); } // Nib grooves hollow(A); } translate([R,0]) rotate([0,0,A]) translate([-R,0]) rotate([0,0,90]) translate([0,-5]) chuck(); } $fs=1; $fa=1; // Model from https://www.thingiverse.com/thing:2226446 // with much modification for a stable STL translate([0,130]) translate([34.5,0,-2.5]) rotate([1.3,0,0]) scale(100) import("portapluma_oblicua_anatomica_rev4.stl"); rotate([0,0,-90]) oblique(-45);