|
- 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 platform(base) {
- size=get_platform_size();
- base_size=size;
- wall=get_platform_wall();
- top_size=get_platform_top_size();
- top=!base;
-
- module platform_screwholes() {
- module screwhole_one() {
- fwd(base_size.y/2) xrot(90) down(get_platform_screwhole_h()) screwhole(d=get_platform_screwhole_d(), h=get_platform_screwhole_h());
- }
- module screwhole_sided() {
- offset=16;
- left(offset) screwhole_one();
- right(offset) screwhole_one();
- }
- up(top_size.z/5) {
- screwhole_sided();
- scale([1,-1,1]) screwhole_sided();
- }
- }
- module base_platform_cutout_for_top() {
- base_top_diff=[base_size.x-top_size.x, base_size.y-top_size.y];
- guiding=1;
- top_slack=[0.2, 0.2, 0];
- translate(get_platform_top_pos()) {
- cube(vec_sum(top_size, top_slack), center=true);
- down(top_size.z/2 - 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);
- }
- }
- 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();
- base_platform_cutout_for_top();
- platform_screwholes();
- }
- }
- module top_platform() {
- difference() {
- up((base_size.z-top_size.z)/2)
- up(top_size.z/2) intersection() {
- scale([1,1,4]) braced_thinning_wall(h=top_size.y, l=top_size.x, thick=top_size.z, wall=0, strut=wall/4, orient=ORIENT_X_90);
- down(top_size.z/2) scale([2,2,1]) cube(top_size, center=true);
- }
- platform_screwholes();
- }
- }
-
- module strap_connectors() {
- //down(size.z/2)
- difference() {
- foreach_platform_strap_connector() {
- link_connector_pin();
- }
- base_platform_cutout_for_top();
- }
- }
-
- color(top?"Olive":"YellowGreen")
- if (base) {
- base_platform();
- strap_connectors();
- } else {
- top_platform();
- }
- }
-
- // Models:
- module model_platform_harness() {
- platform(base=false);
- }
-
- module model_platform_strap() {
- platform(base=true);
- }
-
- // Validation:
- /*intersection() {
- model_platform_harness();
- model_platform_strap();
- }*/
- // 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);
- }
|