|
- include <export.scad>
- //export=MODEL_PLATFORM_HARNESS;
- //export=MODEL_PLATFORM_STRAP;
-
- // dependency: https://github.com/revarbat/BOSL
- include <BOSL/constants.scad>
- use <BOSL/transforms.scad>
- use <BOSL/shapes.scad>
- use <BOSL/masks.scad>
- use <BOSL/sliders.scad>
-
- use <specs_platform.scad>
- use <specs_strap.scad>
-
- use <common.scad>
- use <strap_common.scad>
- use <platform_common.scad>
-
- // DEBUG:
- //validation = 1;
- //xray = 1;
-
- // PROP >>
- module prop_arm() {
- $fn=$preview ? 10 : 30;
- arm_size=[200, 55, 40];
- color("gray")
- down(arm_size.z/2) {
- cuboid(arm_size, fillet=16, edges=EDGES_X_ALL);
- left(arm_size.x*0.6) scale([1, 1, 0.8]) yrot(90) cylinder(d1=arm_size.y*1.4, d2=arm_size.y*0.95, h=arm_size.x/2);
- }
- }
- module model_prop_arm() {
- if (is_not_export()) down(3) prop_arm();
- }
- // <<<
-
- // Blocks:
- module lock_pin(groove) {
- slack=groove
- ?[1, 0.5, 0.3]
- :[0, 0, 0];
- pin_size=get_platform_lock_pin_size();
- size=vec_sum(pin_size, slack);
- down(size.z/2)
- translate([slack.x/2, slack.y/2, slack.z/2])
- xrot(-4) zrot(-90) right_triangle([size.y, size.x, size.z]);
- }
- module lock_arm() {
- size=get_platform_lock_arm_size();
- down(get_platform_top_size().z) back(size.y/2) right(size.x/2) cube(size, center=true);
- joiner_size=[get_platform_lock_pin_size().x, size.y, get_platform_top_size().z];
- 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);
- }
- module lock_buttons_cutout() {
- module cutout_side(groove) {
- translate(get_platform_lock_pin_pos()) lock_mechanism_button(groove=true);
- }
- cutout_side();
- scale([1, -1, 1]) cutout_side();
- }
- module lock_mechanism() {
- lock_pin(groove=false);
- lock_arm();
- lock_mechanism_button();
- }
- module lock_socket() {
- pin_size=get_platform_lock_pin_size();
- size=[pin_size.x, pin_size.y, pin_size.z];
- module socket_connector() {
- conn_size=[pin_size.x+4, get_platform_wall()*3, get_platform_top_size().z];
- up(pin_size.z/2) fwd(pin_size.y+conn_size.y/2) right(pin_size.x/2) {
- prismoid(size1=[conn_size.x, conn_size.y], size2=[conn_size.x, conn_size.y-2], shift=[0, -1], h=conn_size.z/2);
- down(conn_size.z/4) cube([conn_size.x, conn_size.y, conn_size.z/2], center=true);
- }
- }
- down(pin_size.z)
- translate(get_platform_lock_pin_pos()) {
- fwd(pin_size.y) scale([1, -1, -1]) lock_pin();
- socket_connector();
- }
- }
- module platform_locks_pins() {
- platform_size=get_platform_size();
- lock_pin_size=get_platform_lock_pin_size();
- module lock_side(groove) {
- translate(get_platform_lock_pin_pos()) lock_mechanism();
- }
- lock_side();
- scale([1, -1, 1]) lock_side();
- }
- module platform_locks_sockets() {
- lock_socket();
- scale([1, -1, 1]) lock_socket();
- }
- module platform(base) {
- size=get_platform_size();
- base_size=size;
- wall=get_platform_wall();
- top_size=get_platform_top_size();
- top=!base;
-
- 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);
- }
-
- 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();
- }
- }
- module top_platform() {
- up((base_size.z-top_size.z)/2)
- braced_thinning_wall(h=top_size.y, l=top_size.x, thick=top_size.z, wall=0, strut=wall/4, orient=ORIENT_X_90);
- }
-
- module strap_connectors() {
- //down(size.z/2)
- foreach_platform_strap_connector() {
- link_connector_pin();
- }
- }
-
- color(top?"Olive":"YellowGreen")
- if (base) {
- base_platform();
- platform_locks_pins();
- strap_connectors();
- } else {
- top_platform();
- platform_locks_sockets();
- }
- }
-
- // Models:
- module model_platform_harness() {
- platform(base=false);
- }
-
- module model_platform_strap() {
- platform(base=true);
- }
-
- // Export:
- difference() {
- union() {
- if (is_model(MODEL_PLATFORM_HARNESS)) model_platform_harness();
- if (is_model(MODEL_PLATFORM_STRAP)) model_platform_strap();
- //if (is_model(MODEL_DEMO)) model_prop_arm();
- }
- // xray:
- //left(500+5) cube([1000, 1000, 1000], center=true);
- }
|