From 9b668948cd7610f63da1a20fe1419bef5c09d556 Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Sat, 18 Jan 2014 10:54:53 +0100 Subject: [PATCH] poging om autmatisch betere onderdelen voor frame te laten genereren --- Frame_vertex_huxley/vertex_foot.scad | 160 +++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 Frame_vertex_huxley/vertex_foot.scad diff --git a/Frame_vertex_huxley/vertex_foot.scad b/Frame_vertex_huxley/vertex_foot.scad new file mode 100644 index 0000000..75a80c2 --- /dev/null +++ b/Frame_vertex_huxley/vertex_foot.scad @@ -0,0 +1,160 @@ +//------------------------------------------------------------ +// Huxley vertex feet for higher z and more clearance +// +// http://www.thingiverse.com/wardwouts +// +// +//------------------------------------------------------------ +// Inspired by: +// http://www.thingiverse.com/thing:19160 -- eMaker Huxley Higher Z (burtyb) +// http://www.thingiverse.com/thing:28045 -- eMaker Huxley Extended Vertex Parts (Snille) + +// Length measured between the bottom feet (207 is default for emaker huxley) +baserodlength=207; +// Length measure between top vertex and feet (207 is default for emaker huxley) +siderodlength=280; + +partstyle = "top"; // [top,bottom] + +// size of the M6 holes +M6 = 6.5; +// thickness of the part +thickness = 14; +// distance between tear and hole +teardist = 2; +// 80 for pretty curves; 16 for quick ones +FN=80; + +zaxisliftrod = sqrt(pow(siderodlength,2) - pow((baserodlength/2),2)); + +echo ("==========================================="); +echo ("Lengths measured between the parts"); +echo (str("Base rod length: ", baserodlength)); +echo (str("Side rod length: ", siderodlength)); +echo ("==========================================="); +echo ("Shopping list (approximate size):"); +echo (str("2 x ", baserodlength + 50 ,"mm M6 threaded bar for the base rods")); +echo (str("4 x ", siderodlength + 50 ,"mm M6 threaded bar for the side rods")); +echo (str("2 x ", round(zaxisliftrod + 72) ,"mm x 6mm smooth bar for the z-axis")); +echo (str("2 x ", round(zaxisliftrod + 22) ,"mm M5 threaded bar smooth bar for the z-axis")); +echo ("==========================================="); + +toprodangle = asin( (baserodlength/2) / siderodlength ) ; +//echo ("Top rod angle: ", toprodangle); +bottomrodangle = acos((baserodlength/2) / siderodlength ) ; +//echo ("Bottom rod angle: ", bottomrodangle); + +distance = 38; // distance between the original holes + +// http://www.hhofstede.nl/modules/soscastoa.htm + +barlength = (distance / 2) / cos(30) ; +//echo("Length of a single bar piece: ", barlength); + +module bar(){ + // bar is een balkje met afgeronde uiteinden en 2 gaten + // + een tear op teardist van een van de gaten + difference(){ + union(){ + cylinder(h=thickness, r=thickness/2, $fn=FN); + translate([0,-thickness/2,0]){ + cube([barlength,thickness,thickness]); + } + translate([barlength,0,0]){ + cylinder(h=thickness, r=thickness/2, $fn=FN); + } + } + union(){ + translate([0,0,-thickness/2]){ + cylinder(h=thickness*2, r=M6/2, $fn=FN); + } + translate([barlength,0,0]){ + translate([0,0,-thickness/2]){ + cylinder(h=thickness*2, r=M6/2, $fn=FN); + } + } + translate([teardist+M6,-thickness,thickness/2]){ + rotate([0,0,90]){ + tear(thickness*2, M6/2); + } + } + } + } +} + +module foot(){ + // draw a foot which is just a bunch of cubes + // side 1 + translate([-14,3,0]){ cube([16,2,thickness]); } + // side 2 + translate([-14,-5,0]){ cube([16,2,thickness]); } + // bottom + translate([-16,-6,0]){ cube([2,12,thickness]); } + //top + translate([-8,-4,0]){ cube([4,8,thickness]); } +} + +module mainbody(){ + // in dit deel is de standaard hoek van het onderdeel altijd 120 graden + // dit omdat het standaard frame altijd hoeken van 60 graden heeft + // omdat de afstand tussen de 2 standaard gaten altijd de contante + // 'distance' afstand is roteer ik 30 graden (90 - 60) + // en wandel ik 'distance' die richting in vervolgens teken ik een bar + // 90 + 120 - 60 = 150 + // (30 + 150 = 180 dus zo wordt ie omgekeerd) + // dit allemaal niet erg parametrisch, want het moet gewoon + // in het basis frame passen + bar(); + footextend(); + rotate([0,0,-30]){ + translate([distance, 0,0 ]){ + rotate([0,0,150]){ + bar(); + extend(); + } + } + } +} + +module extend(){ + // we staan al goed voor de hoek van 60, dus alleen verschil + // verder roteren + if ( partstyle == "bottom" ){ + rotate([0,0,60-bottomrodangle]){ + translate([-barlength,0,0]){ + bar(); + } + } + } + if ( partstyle == "top") { + rotate([0,0,30-toprodangle]){ + translate([-barlength,0,0]){ + bar(); + } + } + } +} + +module footextend(){ + if ( partstyle == "top") { + rotate([0,0,-30+toprodangle]){ + translate([-barlength,0,0]){ + bar(); + } + } + } + if ( partstyle == "bottom" ){ + foot(); + } +} + +module tear(height,radius){ + rotate([90,0,90]){ + cylinder(h=height,r=radius,$fn=FN); + rotate([0,0,45]){ + cube([radius, radius, height]); + } + } +} + +mainbody();