X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=topeak-mtx-tortec-expeditionrack-adapter.scad;h=c751f787081e7e3baf778d42e8c49eed23ff140d;hb=refs%2Fheads%2Fmaster;hp=822ce832ea13def451c0c07737df036973af8706;hpb=1f0b17559499a32378624958a622f2db8e36089e;p=reprap-play.git diff --git a/topeak-mtx-tortec-expeditionrack-adapter.scad b/topeak-mtx-tortec-expeditionrack-adapter.scad index 822ce83..c751f78 100644 --- a/topeak-mtx-tortec-expeditionrack-adapter.scad +++ b/topeak-mtx-tortec-expeditionrack-adapter.scad @@ -7,7 +7,7 @@ include // strength factor, set to 1 for real prints -//$strf = 0.25; +//$strf = 0.33; $strf = 1; brk_recess_actual = 5.20; @@ -20,8 +20,12 @@ rear_elevation_nominal = 10.04; rear_to_front_distance = 230; // rack cross rail (fam) to very front end rear_to_cross_rail = 43.05; // bolt centre to rail centre, rail to rear rear_bolt_to_front_bolt = 155.4; +front_elevation_nominal = 0; // this parameter adjusts rear too somehow? + +cross_rail_distance = 232.09; general_gap_y = 1.0; +support_bridge_gap_z = 1.0; strap_w = 8.0 + 1.0; strap_th = 2.5; @@ -35,8 +39,11 @@ brk_bolt_dia = 5.0 + 0.5; brk_nearbolt_recess_dia = 8.86 + 1.5; brk_nearbolt_recess_depth = 1.09 + 0.25; +bolt_nut_around = 5; +bolt_nut_around_y_extra = 3; + brk_bolt_eff_len = 11.78; // inside of recess, to end of bolt -brk_bolt_len_slop = 0.0; +brk_bolt_len_slop = 0.5; brk_bolt_nut_th = 3.89; brk_bolt_nut_across_flats = 7.86 + 0.50; @@ -50,14 +57,18 @@ foreaftmaint_r_slop = 0.0; foreaftmaint_y_slop = -0.25; foreaftmaint_top_block_zs = [34.0, 39.0]; // rearwards from bolt hole -main_sz_y = $strf * 18; +main_sz_y = $strf * 12; grasp_sz = $strf * 6; grasp_thin_sz = $strf * 0.5; beside_strap_sz = $strf * 8; -main_sz_core_z = $strf * 18; +main_sz_core_z = $strf * 12; // "length" in for-aft direction of interaction with rack rail -min_on_rail_sz_z = $strf * 25; +min_on_rail_sz_z = $strf * 18; + +// when printer produces support +support_around = 1.7; // how far does the support extend around (in XY) +support_remnant = 0.75; // how much frass remains attached (Z height) $fa=10; $fs=1; @@ -66,6 +77,9 @@ $fs=1; bolt_z = -brk_block_z/2; +front_to_rear_elevation_change = + rear_elevation_nominal - front_elevation_nominal; + main_sz_rhs_z = max(min_on_rail_sz_z, beside_strap_sz*2 + strap_w); main_sz_lhs_z = min_on_rail_sz_z; @@ -88,7 +102,15 @@ block_y_min = adapt_main_top_y - main_sz_y; strap_barrel_x = rack_width_inner/2 + strap_barrel_dia/2; -rack_shear_ratio = -rear_elevation_nominal / rear_to_front_distance; +rack_shear_ratio = - front_to_rear_elevation_change / rear_to_front_distance; + +front_to_cross_rail = + cross_rail_distance * sqrt(1 - rack_shear_ratio * rack_shear_ratio) + - rear_bolt_to_front_bolt + - rear_to_cross_rail + - sqrt( pow( cross_rail_distance * rack_shear_ratio, 2 ) + - pow( front_to_rear_elevation_change, 2 ) ) + ; brk_bolt_nut_top_y = -brk_nearbolt_recess_depth - brk_bolt_eff_len + brk_bolt_nut_th + brk_bolt_len_slop; @@ -96,6 +118,7 @@ brk_bolt_nut_top_y = -brk_nearbolt_recess_depth brk_bolt_nut_r = brk_bolt_nut_across_flats/2 / cos(360/12); function elevation_of_bolt_for(z) = rear_elevation_nominal + + front_elevation_nominal + (z - brk_block_z/2) * rack_shear_ratio; function rack_rail_y_of_elevation(elevation_nominal) = @@ -144,7 +167,7 @@ module MainExtrude(z){ children(); } module RackShear(){ - s = rack_shear_ratio; + s = rack_shear_ratio * $reverse_sign; multmatrix([ [ 1, 0, 0, 0 ], [ 0, 1, s , 0 ], [ 0, 0, 1, 0 ], @@ -190,10 +213,18 @@ module StrapBarrelElevation(){ // Bracket support block, goes up inside bracket // Z origin is bolt hole module BrkBlock(){ - linextr( -brk_block_z/2, - +brk_block_z/2 ) { - rectfromto([ -brk_block_xw/2, adapt_main_top_y - 0.1 ], - [ +brk_block_xw/2, 0 ]); + difference(){ + linextr( -brk_block_z/2, + +brk_block_z/2 ) { + rectfromto([ -brk_block_xw/2, adapt_main_top_y - 0.1 ], + [ +brk_block_xw/2, 0 ]); + } + linextr_y_xz( -50, 10 ) { + translate([ 0, brk_block_z + bolt_z ]) + square(center=true, + [ main_sz_x_fam + support_around*2, + support_remnant *2 ]); + } } } @@ -206,9 +237,10 @@ module BoltHole(){ circle(brk_nearbolt_recess_dia/2); linextr_y_xz( -100, brk_bolt_nut_top_y ) { - circle( r= brk_bolt_nut_r, $fn = 6 ); - translate([ 0, brk_bolt_nut_across_flats/2 ]) - circle( r=brk_bolt_nut_r/2, $fn = 4); + hull() + for (dz = [0, support_bridge_gap_z]) + translate([0, dz]) + circle( r= brk_bolt_nut_r, $fn = 6 ); } } @@ -234,12 +266,29 @@ module FamGraspElevation(){ ybot, adapt_main_top_y - grasp_large_r ]) - for (dx= [-1,+1] * rack_rail_dia/2) + for (dx= [/*-1,*/ +1] * rack_rail_dia/2) translate([ -$foreaftmaint_rail_z + dx, y ]) circle(r= grasp_large_r); } - translate([0, adapt_main_top_y]) - rectfromto([-500, 0], [500, 500]); + if ($foreaftmaint_cutoff) { + translate([ -$foreaftmaint_rail_z, 0 ]) + rectfromto([-100, -100], + [0, 100]); + } + } +} + +module FamStemElevation(){ + hull(){ + rectfromto([ -$foreaftmaint_rail_z + , adapt_main_top_y ], + [ 0, block_y_min]); + translate([ + -$foreaftmaint_rail_z, + $rack_rail_y + + rack_shear_ratio * $foreaftmaint_rail_z * $reverse_sign, + ]) + square([0.1, rack_rail_dia * 0.5], center=true); } } @@ -256,6 +305,9 @@ module Principal(){ $foreaftmaint_rail_z = brk_block_z/2 + $foreaftmaint_dz - foreaftmaint_y_slop; + translate([0,0,brk_block_z/2]) + mirror([0,0, $reverse_sign > 0 ? 0 : 1]) + translate([0,0,-brk_block_z/2]) difference(){ union(){ MainExtrude(main_sz_lhs_z){ @@ -275,7 +327,7 @@ module Principal(){ } if ($strf<1) { MainExtrude(max(brk_block_z, main_sz_rhs_z)){ - rectfromto([-8, 0], + rectfromto([-8, adapt_main_top_y + 0.1], [+8, block_y_min]); rectfromto([-block_x -5, adapt_main_top_y], [-grasp_large_x, block_y_min]); @@ -293,15 +345,32 @@ module Principal(){ } FamLinextr(){ - rectfromto([ -$foreaftmaint_rail_z, adapt_main_top_y ], - [ 0, block_y_min]); - rectfromto([ -foreaftmaint_top_block_zs[0] + bolt_z, 0 ], - [ -foreaftmaint_top_block_zs[1] + bolt_z, block_y_min] ); + if ($foreaftmaint_top_block) { + rectfromto([ -foreaftmaint_top_block_zs[0] + bolt_z, 0 ], + [ -foreaftmaint_top_block_zs[1] + bolt_z, block_y_min] ); + } FamGraspElevation(); } - RackShear() - FamLinextr() - FamGraspElevation(); + intersection(){ + union(){ + RackShear() + FamLinextr() + FamGraspElevation(); + FamLinextr() + FamStemElevation(); + } + translate([ 0, + adapt_main_top_y - 50, + $foreaftmaint_rail_z ]) + cube(center=true, 100); + } + + linextr_y_xz( block_y_min - bolt_nut_around_y_extra , adapt_main_top_y ) + intersection(){ + translate([ 0, brk_block_z/2 ]) + circle(r = bolt_nut_around + brk_bolt_nut_r ); + rectfromto([-100, 0], [+100,+100]); + } } RackShear() linextr(-10, main_sz_lhs_z+main_sz_rhs_z) { @@ -346,32 +415,56 @@ module Principal(){ } } -module RackForDemo(){ ////toplevel +module ForRackForDemo(){ elevation = elevation_of_bolt_for(rear_to_cross_rail); rack_rail_y = rack_rail_y_of_elevation(elevation); - rotate([-atan(rack_shear_ratio), 0,0]) - translate([0, rack_rail_y, brk_block_z/2 + rack_rail_y*rack_shear_ratio]) { - for (m=[0]) mirror([m,0,0]) { - linextr(-50, 50 + rear_to_cross_rail) - translate([rack_rail_x, 0]) - circle(r= rack_rail_dia/2); - } - translate([0,0, rear_to_cross_rail]) - linextr_x_yz(rack_rail_x, -rack_rail_x) + rotate([atan( + front_to_rear_elevation_change / + cross_rail_distance + ), 0,0]) + translate([0, rack_rail_y, brk_block_z/2 + rack_rail_y*rack_shear_ratio]) + children(); +} + +module RackForDemoRails(){ + ForRackForDemo() { + for (m=[0]) mirror([m,0,0]) { + linextr(-(50 + cross_rail_distance), 50 + rear_to_cross_rail) + translate([rack_rail_x, 0]) circle(r= rack_rail_dia/2); } + } +} + +module RackForDemoCrosses(){ + ForRackForDemo() { + for (z = [ + rear_to_cross_rail, + rear_to_cross_rail - cross_rail_distance, + ]) { + translate([0,0,z]) + linextr_x_yz(rack_rail_x, -rack_rail_x) + circle(r= rack_rail_dia/2, $fn=8); + } + } } module Front(){ ////toplevel - // xxx elevation is wrong - Principal($elevation_nominal= + rotate([180,0,0]) + Principal($reverse_sign = -1, + $foreaftmaint_top_block = false, + $foreaftmaint_cutoff = true, + $elevation_nominal= elevation_of_bolt_for(rear_to_cross_rail + rear_bolt_to_front_bolt), - $foreaftmaint_dz= 0); + $foreaftmaint_dz= front_to_cross_rail); } module Rear(){ ////toplevel - Principal($elevation_nominal= + Principal($reverse_sign = +1, + $foreaftmaint_top_block = true, + $foreaftmaint_cutoff = false, + $elevation_nominal= elevation_of_bolt_for(rear_to_cross_rail), $foreaftmaint_dz= rear_to_cross_rail); } @@ -393,7 +486,7 @@ module SomeDemo(){ } module FrontDemo(){ ////toplevel - SomeDemo() Front(); + SomeDemo() rotate([180,0,0]) Front(); } module RearDemo(){ ////toplevel SomeDemo() Rear(); @@ -401,6 +494,9 @@ module RearDemo(){ ////toplevel module RearRackDemo(){ ////toplevel rotate([atan(rack_shear_ratio),0,0]) SomeDemo() { Rear(); - %RackForDemo(); + translate([0, 0, -rear_bolt_to_front_bolt]) + rotate([180,0,0]) Front(); + %RackForDemoRails(); + color("blue") RackForDemoCrosses(); } }