diff --git a/src/platform.scad b/src/platform.scad index cb368cc..b82c083 100644 --- a/src/platform.scad +++ b/src/platform.scad @@ -1,6 +1,6 @@ include //export=MODEL_PLATFORM_HARNESS; -//export=MODEL_PLATFORM_STRAP; +export=MODEL_PLATFORM_STRAP; // dependency: https://github.com/revarbat/BOSL include @@ -53,12 +53,14 @@ module lock_arm() { translate([joiner_size.x/2, joiner_size.y/2, -joiner_size.z/2 + size.z/2]) cube(joiner_size, center=true); } module lock_mechanism_button(groove=false) { - button_size=groove - ?[10,5] - :[7,4.5]; - size=[button_size.x, get_platform_wall()*7, button_size.y]; - translate([get_platform_lock_pin_size().x*1.5, -get_platform_size().y/2+size.y*1.3, -get_platform_size().z/2]) - cube(size, center=true); + button_size=get_platform_lock_button_profile(groove); + size=get_platform_lock_button_size(groove); + translate(get_platform_lock_button_pos()) + left(groove?1:0) + difference() { + cube(size, center=true); + up(size.z/2 + (groove?0.5:0)) back(3) cube(size, center=true); + } } module lock_buttons_cutout() { module cutout_side(groove) { @@ -108,6 +110,12 @@ module platform(base) { top_size=get_platform_top_size(); top=!base; + module base_platform_cutout_for_top() { + base_top_diff=[base_size.x-top_size.x, base_size.y-top_size.y]; + guiding=0.4; + translate(get_platform_top_pos()) down(top_size.z/2) prismoid(size1=[top_size.x,top_size.y], size2=[top_size.x+base_top_diff.x*guiding,top_size.y+base_top_diff.y*guiding], h=top_size.z); + lock_buttons_cutout(); + } module base_platform() { module base_platform_core() { braced_thinning_wall(h=size.y, l=size.x, thick=size.z, wall=0, strut=wall, orient=ORIENT_X_90); @@ -115,8 +123,7 @@ module platform(base) { difference() { base_platform_core(); - translate(get_platform_top_pos()) down(top_size.z/2) prismoid(size1=[top_size.x,top_size.y], size2=[base_size.x-2,base_size.y-2], h=top_size.z); - lock_buttons_cutout(); + base_platform_cutout_for_top(); } } module top_platform() { @@ -126,8 +133,11 @@ module platform(base) { module strap_connectors() { //down(size.z/2) - foreach_platform_strap_connector() { - link_connector_pin(); + difference() { + foreach_platform_strap_connector() { + link_connector_pin(); + } + base_platform_cutout_for_top(); } } @@ -151,6 +161,11 @@ module model_platform_strap() { platform(base=true); } +// Validation: +/*intersection() { + model_platform_harness(); + model_platform_strap(); +}*/ // Export: difference() { union() { diff --git a/src/specs_platform.scad b/src/specs_platform.scad index ea734de..b1205e8 100644 --- a/src/specs_platform.scad +++ b/src/specs_platform.scad @@ -19,5 +19,17 @@ function get_platform_strap_connector_offset() = [ ]; function get_platform_lock_pin_size() = [20, 4, 3]; -function get_platform_lock_arm_size() = [65, 2, 3]; -function get_platform_lock_pin_pos() = [-20, -get_platform_top_size().y/2 + get_platform_wall()*4 + 1, get_platform_top_size().z/2]; +function get_platform_lock_arm_size() = [46, 2, 3]; +function get_platform_lock_pin_pos() = [-get_platform_lock_pin_size().x/2, -get_platform_top_size().y/2 + get_platform_wall()*4 + 1, get_platform_top_size().z/2]; +function get_platform_lock_button_profile(groove) = groove ? [10, 5] : [7, 4.5]; +function get_platform_lock_button_size(groove) = [ + get_platform_lock_button_profile(groove).x, + get_platform_size().y * 0.25 + get_platform_lock_pin_size().y + 2, + get_platform_lock_button_profile(groove).y + ]; +function get_platform_lock_button_pos() = [ + get_platform_lock_pin_size().x/2 + 5, + -get_platform_lock_button_size(false).y/2, + -get_platform_size().z/2 + ]; +