commit 618cee124f89b2475c926a2c84c63cc278d76810 Author: Sébastien Dante Ursini Date: Sat Dec 28 16:11:49 2024 -0300 Initial commit diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..dd9573a --- /dev/null +++ b/Readme.md @@ -0,0 +1,6 @@ +# Metalib + +Libraries for Metal makers + + + diff --git a/metalib.scad b/metalib.scad new file mode 100644 index 0000000..28357b2 --- /dev/null +++ b/metalib.scad @@ -0,0 +1,149 @@ + +include ; + +section=20; +height=800; +depth=560; +width=563; + + +side_length = 20; // Length of each side of the square +thickness = 3; // Thickness of the material + +$fn=32; + +module miter_profile(length=200,height=30,depth=20) { + delta=1; + difference() { + cuboid([length,depth,height],anchor=CENTER,rounding=1); + miter(); // Right Miter + xflip() miter(); // Left Miter + } + module miter() { + translate([length/2, 0, -height/2]) + yrot(-45) + color([0.5,0.5,0,0.5]) + cube([height, depth+2*delta, height*sqrt(2)+2],anchor=CENTER+LEFT+BOT); + } + +} + +module miter_tube(length=200,height=30,depth=20,rounding=2,wall=1.5) { + delta=1; + + translate([length,0,0]) + //union() { + difference() { + left(length/2) + yrot(90) + rect_tube(size=[height,depth], wall=wall, h=length,rounding=rounding + //,anchor=F + ,anchor=[1,0,0] + ); + miter(-45); // Right Miter + //xflip() miter(); // Left Miter + translate([-length,0,0]) zrot(180) miter(-45); // Left Miter + } + module miter(rot) { + //translate([ length/2, 0, -height/2 ]) + translate([0,0,0]) + yrot(rot) + color([0.5,0.5,0,0.5]) + cube([height, depth+2*delta, height*sqrt(2)+2],anchor=CENTER+LEFT+BOT); + } + +} + +// Visualize one piece +if (false )miter_profile(); + +if (false) { +// ydistribute(50) + translate([0,depth/2,0]) + xrot(90) miter_tube(length=width,height=section,depth=section); + + translate([0,-depth/2,0]) + xrot(-90) miter_tube(length=width,height=section,depth=section); + +} + +/** + * Miter Tubes + * + */ +module miter_tubes(sections,height,depth,unfold=false){ + echo(sections); + cumul=cumsum(sections); + moves=rotSlide(sections,unfold); + echo("moves",moves); + //assert(moves[0] ==[0,0,0,0,0,0], concat("Move 0 is wrong",moves[0])); + //assert(moves[1] ==[400,0,0,90,1,0], concat("Move 1 is wrong",moves[1])); + //assert(moves[2] ==[400,0,500,180,0,1], concat("Move 2 is wrong",moves[2])); + + //assert(moves[1] ==[400,0,500,180,0], concat("Move 1 is wrong",moves[1])); + + + for (index = [0:len(sections)-1]) { + + //if (index< 1) { + length = sections[index]; // Access the value at index i + slide = index == 0 ? 0: cumsum(sections)[index-1]; + //m = index==0 ? [0,0,0,0] : moves[index-1]; + m = moves[index]; + x=m[0]; + y=m[1]; + z=m[2]; + r=m[3]; + echo("------------"); + echo(concat("- tube",length," -")); + echo("------------"); + echo("x",x,"y",y,"z",z,"r",r,"length",length); + translate([x,y, z]) + yrot(-r) + //translate([0,40*index,0]) + miter_tube(length=length,height=height,depth=depth); + //} + } +} + + + +function rotSlide(v,unfold=false) = + v==[] ? [] : assert(is_consistent(v), "The input is not consistent." ) + [ + for ( + //x = v[0], + x = 0, + y = 0, + z = 0, + r = 0, + + xFactor = 0, + zFactor = 0, + idx = 0; + + + idx < len(v); + + + xFactor = r == 0 ? 1 : (r == 180 ? -1 : 0), + zFactor = r == 90 ? 1 : (r == 270 ? -1 : 0), + //echo("test"), + //x = i 0 && idx < len(v) ? z+v[idx]*zFactor: z , + r = r+(unfold ? 0 : 90), + idx = idx+1 + ) + [x,y,z,r,xFactor,zFactor]]; + + + +miter_tubes([400,500,600,700,800],30,20); +//echo ("rotSlide",rotSlide([400,500,600,500])); +