Compare commits

..

No commits in common. "ebde72fab1c7c49549b85838b7b9124c057e7b58" and "fd03cb0b30242510f1851d251f43955198d1d08a" have entirely different histories.

21 changed files with 129951 additions and 480 deletions

View File

@ -1,5 +1,3 @@
include <export.scad>
// dependency: https://github.com/revarbat/BOSL // dependency: https://github.com/revarbat/BOSL
include <BOSL/constants.scad> include <BOSL/constants.scad>
use <BOSL/transforms.scad> use <BOSL/transforms.scad>
@ -7,10 +5,6 @@ use <BOSL/shapes.scad>
use <BOSL/masks.scad> use <BOSL/masks.scad>
use <BOSL/sliders.scad> use <BOSL/sliders.scad>
use <specs_phone.scad>
use <specs_harness.scad>
use <specs_platform.scad>
// DEBUG: // DEBUG:
//validation = 1; //validation = 1;
XRAY_POSITIVE=1; XRAY_POSITIVE=1;
@ -18,6 +12,22 @@ XRAY_BACKPLANE=2;
XRAY_BOTTOM=3; XRAY_BOTTOM=3;
//xray = 2; //xray = 2;
// EXPORT:
MODEL_HARNESS_LEFT=1;
MODEL_HARNESS_RIGHT=2;
MODEL_HARNESS_BOTTOM=3;
MODEL_HARNESS_BOTTOM_PIP=4;
MODEL_HARNESS_TOP=5;
MODEL_HARNESS_SLIDER_FRONT=6;
MODEL_HARNESS_SLIDER_BACK=7;
MODEL_HARNESS_BUTTONS=8;
export=0; // [0:8]
function is_not_export() = is_undef(export) || export == 0;
function is_export() = !is_not_export();
function is_model_strict(m) = is_export() && export == m;
function is_model(m) = is_not_export() || export == m;
function get_phone_size() = [161.2, 77.2, 10];
function use_slideout_backplane() = is_model_strict(MODEL_HARNESS_BOTTOM_PIP) || is_model_strict(MODEL_HARNESS_LEFT) || is_model_strict(MODEL_HARNESS_RIGHT); function use_slideout_backplane() = is_model_strict(MODEL_HARNESS_BOTTOM_PIP) || is_model_strict(MODEL_HARNESS_LEFT) || is_model_strict(MODEL_HARNESS_RIGHT);
backplane_pip_slideout=10; backplane_pip_slideout=10;
@ -401,7 +411,7 @@ module phone_harness() {
} }
module model() { module model() {
up(get_platform_size().z + get_harness_size().z/2) phone_harness(); phone_harness();
} }
if (!is_undef(validation)) { if (!is_undef(validation)) {

55302
model_bottom.stl Normal file

File diff suppressed because it is too large Load Diff

31866
model_bottom_pip.stl Normal file

File diff suppressed because it is too large Load Diff

2746
model_buttons.stl Normal file

File diff suppressed because it is too large Load Diff

1934
model_slider_back.stl Normal file

File diff suppressed because it is too large Load Diff

1934
model_slider_front.stl Normal file

File diff suppressed because it is too large Load Diff

1346
model_strap_base.stl Normal file

File diff suppressed because it is too large Load Diff

198
model_strap_brace.stl Normal file
View File

@ -0,0 +1,198 @@
solid OpenSCAD_Model
facet normal 0 1 -0
outer loop
vertex 20 -29.2 -19.5142
vertex -20 -29.2 -15.8858
vertex 20 -29.2 -15.8858
endloop
endfacet
facet normal 0 1 0
outer loop
vertex -20 -29.2 -15.8858
vertex 20 -29.2 -19.5142
vertex -20 -29.2 -19.5142
endloop
endfacet
facet normal 0 0.707107 0.707107
outer loop
vertex 20 -29.2 -15.8858
vertex -20 -29.7858 -15.3
vertex 20 -29.7858 -15.3
endloop
endfacet
facet normal 0 0.707107 0.707107
outer loop
vertex -20 -29.7858 -15.3
vertex 20 -29.2 -15.8858
vertex -20 -29.2 -15.8858
endloop
endfacet
facet normal -0 0 1
outer loop
vertex -20 -29.7858 -15.3
vertex 20 -32.2142 -15.3
vertex 20 -29.7858 -15.3
endloop
endfacet
facet normal 0 0 1
outer loop
vertex 20 -32.2142 -15.3
vertex -20 -29.7858 -15.3
vertex -20 -32.2142 -15.3
endloop
endfacet
facet normal 0 -0.707107 0.707107
outer loop
vertex -20 -32.8 -15.8858
vertex 20 -32.2142 -15.3
vertex -20 -32.2142 -15.3
endloop
endfacet
facet normal 0 -0.707107 0.707107
outer loop
vertex 20 -32.2142 -15.3
vertex -20 -32.8 -15.8858
vertex 20 -32.8 -15.8858
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex -20 -32.8 -19.5142
vertex 20 -32.8 -15.8858
vertex -20 -32.8 -15.8858
endloop
endfacet
facet normal 0 -1 -0
outer loop
vertex 20 -32.8 -15.8858
vertex -20 -32.8 -19.5142
vertex 20 -32.8 -19.5142
endloop
endfacet
facet normal 0 -0.707107 -0.707107
outer loop
vertex -20 -32.2142 -20.1
vertex 20 -32.8 -19.5142
vertex -20 -32.8 -19.5142
endloop
endfacet
facet normal 0 -0.707107 -0.707107
outer loop
vertex 20 -32.8 -19.5142
vertex -20 -32.2142 -20.1
vertex 20 -32.2142 -20.1
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -20 -32.2142 -20.1
vertex 20 -29.7858 -20.1
vertex 20 -32.2142 -20.1
endloop
endfacet
facet normal -0 0 -1
outer loop
vertex 20 -29.7858 -20.1
vertex -20 -32.2142 -20.1
vertex -20 -29.7858 -20.1
endloop
endfacet
facet normal 0 0.707107 -0.707107
outer loop
vertex 20 -29.7858 -20.1
vertex -20 -29.2 -19.5142
vertex 20 -29.2 -19.5142
endloop
endfacet
facet normal 0 0.707107 -0.707107
outer loop
vertex -20 -29.2 -19.5142
vertex 20 -29.7858 -20.1
vertex -20 -29.7858 -20.1
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -32.8 -15.8858
vertex 20 -29.2 -15.8858
vertex 20 -29.7858 -15.3
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -29.2 -15.8858
vertex 20 -32.8 -15.8858
vertex 20 -29.2 -19.5142
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -32.8 -15.8858
vertex 20 -29.7858 -15.3
vertex 20 -32.2142 -15.3
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -32.8 -19.5142
vertex 20 -29.2 -19.5142
vertex 20 -32.8 -15.8858
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -29.2 -19.5142
vertex 20 -32.8 -19.5142
vertex 20 -29.7858 -20.1
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 20 -29.7858 -20.1
vertex 20 -32.8 -19.5142
vertex 20 -32.2142 -20.1
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -20 -32.8 -19.5142
vertex -20 -29.2 -19.5142
vertex -20 -29.7858 -20.1
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -20 -29.2 -19.5142
vertex -20 -32.8 -19.5142
vertex -20 -29.2 -15.8858
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -20 -32.8 -19.5142
vertex -20 -29.7858 -20.1
vertex -20 -32.2142 -20.1
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -20 -32.8 -15.8858
vertex -20 -29.2 -15.8858
vertex -20 -32.8 -19.5142
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -20 -29.2 -15.8858
vertex -20 -32.8 -15.8858
vertex -20 -29.7858 -15.3
endloop
endfacet
facet normal -1 -0 0
outer loop
vertex -20 -29.7858 -15.3
vertex -20 -32.8 -15.8858
vertex -20 -32.2142 -15.3
endloop
endfacet
endsolid OpenSCAD_Model

4342
model_strap_rib.stl Normal file

File diff suppressed because it is too large Load Diff

842
model_strap_secondary.stl Normal file
View File

@ -0,0 +1,842 @@
solid OpenSCAD_Model
facet normal 0.281677 0.866858 -0.411358
outer loop
vertex -43.2366 -27.5725 -9.991
vertex -45 -26.9995 -9.991
vertex -43.0866 -22.8806 -0.000999451
endloop
endfacet
facet normal 0.195091 0.980785 -0
outer loop
vertex -43.0866 -22.8806 -0.000999451
vertex -45 -22.5 0
vertex -43.0866 -22.8806 0
endloop
endfacet
facet normal 0.195091 0.980785 0
outer loop
vertex -45 -22.5 0
vertex -43.0866 -22.8806 -0.000999451
vertex -45 -22.5 -0.000999451
endloop
endfacet
facet normal 0.831458 -0.555587 0
outer loop
vertex -41.4645 -36.0355 0
vertex -40.3806 -34.4134 -0.000999451
vertex -40.3806 -34.4134 0
endloop
endfacet
facet normal 0.831458 -0.555587 0
outer loop
vertex -40.3806 -34.4134 -0.000999451
vertex -41.4645 -36.0355 0
vertex -41.4645 -36.0355 -0.000999451
endloop
endfacet
facet normal -0.831458 -0.555587 0
outer loop
vertex -78.5355 -36.0355 -0.000999451
vertex -79.6194 -34.4134 0
vertex -79.6194 -34.4134 -0.000999451
endloop
endfacet
facet normal -0.831458 -0.555587 0
outer loop
vertex -79.6194 -34.4134 0
vertex -78.5355 -36.0355 -0.000999451
vertex -78.5355 -36.0355 0
endloop
endfacet
facet normal 0.413355 -0.811201 -0.413631
outer loop
vertex -43.0866 -37.1194 -0.000999451
vertex -45 -33.0005 -9.991
vertex -42.573 -31.7638 -9.991
endloop
endfacet
facet normal -0.842298 -0.429166 -0.326114
outer loop
vertex -76.7634 -32.4275 -9.991
vertex -79.6194 -34.4134 -0.000999451
vertex -78 -30.0005 -9.991
endloop
endfacet
facet normal -0.785232 -0.524698 -0.328791
outer loop
vertex -78.5355 -36.0355 -0.000999451
vertex -79.6194 -34.4134 -0.000999451
vertex -76.7634 -32.4275 -9.991
endloop
endfacet
facet normal -0.516055 -0.772297 -0.370465
outer loop
vertex -76.9134 -37.1194 -0.000999451
vertex -78.5355 -36.0355 -0.000999451
vertex -76.7634 -32.4275 -9.991
endloop
endfacet
facet normal 0.516055 0.772297 -0.370465
outer loop
vertex -41.4645 -23.9645 -0.000999451
vertex -43.2366 -27.5725 -9.991
vertex -43.0866 -22.8806 -0.000999451
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -42.573 -31.7638 -9.991
vertex -42 -29.9995 -9.991
vertex -42 -30.0005 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -42.573 -31.7638 -9.991
vertex -43.2366 -27.5725 -9.991
vertex -42 -29.9995 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -45 -33.0005 -9.991
vertex -43.2366 -27.5725 -9.991
vertex -42.573 -31.7638 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -45 -33.0005 -9.991
vertex -45 -26.9995 -9.991
vertex -43.2366 -27.5725 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -75 -33.0005 -9.991
vertex -45 -26.9995 -9.991
vertex -45 -33.0005 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -75 -33.0005 -9.991
vertex -75 -26.9995 -9.991
vertex -45 -26.9995 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -76.7634 -32.4275 -9.991
vertex -75 -26.9995 -9.991
vertex -75 -33.0005 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -76.7634 -32.4275 -9.991
vertex -77.427 -28.2362 -9.991
vertex -75 -26.9995 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -78 -30.0005 -9.991
vertex -77.427 -28.2362 -9.991
vertex -76.7634 -32.4275 -9.991
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -77.427 -28.2362 -9.991
vertex -78 -30.0005 -9.991
vertex -78 -29.9995 -9.991
endloop
endfacet
facet normal 0 0.911793 -0.41065
outer loop
vertex -45 -26.9995 -9.991
vertex -75 -26.1028 -8
vertex -45 -26.1028 -8
endloop
endfacet
facet normal 0 0.911793 -0.41065
outer loop
vertex -75 -26.1028 -8
vertex -45 -26.9995 -9.991
vertex -75 -26.9995 -9.991
endloop
endfacet
facet normal 0 0.911776 -0.410687
outer loop
vertex -45 -23.4004 -2
vertex -75 -22.5 -0.000999451
vertex -45 -22.5 -0.000999451
endloop
endfacet
facet normal 0 0.911776 -0.410687
outer loop
vertex -75 -22.5 -0.000999451
vertex -45 -23.4004 -2
vertex -75 -23.4004 -2
endloop
endfacet
facet normal -0.178453 0.897141 -0.404095
outer loop
vertex -75 -23.4004 -2
vertex -76.9134 -22.8806 -0.000999451
vertex -75 -22.5 -0.000999451
endloop
endfacet
facet normal -0.178432 0.897153 -0.404078
outer loop
vertex -75 -26.1028 -8
vertex -76.9134 -22.8806 -0.000999451
vertex -75 -23.4004 -2
endloop
endfacet
facet normal -0.178349 0.897174 -0.404066
outer loop
vertex -76.9134 -22.8806 -0.000999451
vertex -75 -26.1028 -8
vertex -75 -26.9995 -9.991
endloop
endfacet
facet normal 0.785232 0.524698 -0.328791
outer loop
vertex -40.3806 -25.5866 -0.000999451
vertex -43.2366 -27.5725 -9.991
vertex -41.4645 -23.9645 -0.000999451
endloop
endfacet
facet normal 0.178453 0.897141 -0.404095
outer loop
vertex -43.0866 -22.8806 -0.000999451
vertex -45 -23.4004 -2
vertex -45 -22.5 -0.000999451
endloop
endfacet
facet normal 0.178432 0.897153 -0.404078
outer loop
vertex -43.0866 -22.8806 -0.000999451
vertex -45 -26.1028 -8
vertex -45 -23.4004 -2
endloop
endfacet
facet normal 0.178349 0.897174 -0.404066
outer loop
vertex -45 -26.1028 -8
vertex -43.0866 -22.8806 -0.000999451
vertex -45 -26.9995 -9.991
endloop
endfacet
facet normal 0.980785 -0.195091 0
outer loop
vertex -40.3806 -34.4134 0
vertex -40 -32.5 -0.000999451
vertex -40 -32.5 0
endloop
endfacet
facet normal 0.980785 -0.195091 0
outer loop
vertex -40 -32.5 -0.000999451
vertex -40.3806 -34.4134 0
vertex -40.3806 -34.4134 -0.000999451
endloop
endfacet
facet normal 0.512756 -0.767361 -0.385017
outer loop
vertex -41.4645 -36.0355 -0.000999451
vertex -43.0866 -37.1194 -0.000999451
vertex -42.573 -31.7638 -9.991
endloop
endfacet
facet normal 0.831458 0.555587 0
outer loop
vertex -40.3806 -25.5866 0
vertex -41.4645 -23.9645 -0.000999451
vertex -41.4645 -23.9645 0
endloop
endfacet
facet normal 0.831458 0.555587 0
outer loop
vertex -41.4645 -23.9645 -0.000999451
vertex -40.3806 -25.5866 0
vertex -40.3806 -25.5866 -0.000999451
endloop
endfacet
facet normal -0.555587 0.831458 0
outer loop
vertex -76.9134 -22.8806 -0.000999451
vertex -78.5355 -23.9645 0
vertex -76.9134 -22.8806 0
endloop
endfacet
facet normal -0.555587 0.831458 0
outer loop
vertex -78.5355 -23.9645 0
vertex -76.9134 -22.8806 -0.000999451
vertex -78.5355 -23.9645 -0.000999451
endloop
endfacet
facet normal -0.413355 0.811201 -0.413631
outer loop
vertex -75 -26.9995 -9.991
vertex -77.427 -28.2362 -9.991
vertex -76.9134 -22.8806 -0.000999451
endloop
endfacet
facet normal -0.195091 -0.980785 0
outer loop
vertex -76.9134 -37.1194 -0.000999451
vertex -75 -37.5 0
vertex -76.9134 -37.1194 0
endloop
endfacet
facet normal -0.195091 -0.980785 -0
outer loop
vertex -75 -37.5 0
vertex -76.9134 -37.1194 -0.000999451
vertex -75 -37.5 -0.000999451
endloop
endfacet
facet normal 0 1 -0
outer loop
vertex -45 -22.5 -0.000999451
vertex -75 -22.5 0
vertex -45 -22.5 0
endloop
endfacet
facet normal 0 1 0
outer loop
vertex -75 -22.5 0
vertex -45 -22.5 -0.000999451
vertex -75 -22.5 -0.000999451
endloop
endfacet
facet normal -0.980785 0.195091 0
outer loop
vertex -80 -27.5 -0.000999451
vertex -79.6194 -25.5866 0
vertex -79.6194 -25.5866 -0.000999451
endloop
endfacet
facet normal -0.980785 0.195091 0
outer loop
vertex -79.6194 -25.5866 0
vertex -80 -27.5 -0.000999451
vertex -80 -27.5 0
endloop
endfacet
facet normal 0.952575 -0.18948 -0.238114
outer loop
vertex -40.3806 -34.4134 -0.000999451
vertex -42 -30.0005 -9.991
vertex -40 -32.5 -0.000999451
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -80 -32.5 -0.000999451
vertex -80 -27.5 0
vertex -80 -27.5 -0.000999451
endloop
endfacet
facet normal -1 -0 0
outer loop
vertex -80 -27.5 0
vertex -80 -32.5 -0.000999451
vertex -80 -32.5 0
endloop
endfacet
facet normal 0.178453 -0.897141 -0.404095
outer loop
vertex -45 -36.5996 -2
vertex -43.0866 -37.1194 -0.000999451
vertex -45 -37.5 -0.000999451
endloop
endfacet
facet normal 0.178432 -0.897153 -0.404078
outer loop
vertex -45 -33.8972 -8
vertex -43.0866 -37.1194 -0.000999451
vertex -45 -36.5996 -2
endloop
endfacet
facet normal 0.178349 -0.897174 -0.404066
outer loop
vertex -43.0866 -37.1194 -0.000999451
vertex -45 -33.8972 -8
vertex -45 -33.0005 -9.991
endloop
endfacet
facet normal 0.789617 -0.527629 -0.313229
outer loop
vertex -41.4645 -36.0355 -0.000999451
vertex -42.573 -31.7638 -9.991
vertex -40.3806 -34.4134 -0.000999451
endloop
endfacet
facet normal -0.980785 -0.195091 0
outer loop
vertex -79.6194 -34.4134 -0.000999451
vertex -80 -32.5 0
vertex -80 -32.5 -0.000999451
endloop
endfacet
facet normal -0.980785 -0.195091 0
outer loop
vertex -80 -32.5 0
vertex -79.6194 -34.4134 -0.000999451
vertex -79.6194 -34.4134 0
endloop
endfacet
facet normal -0.178453 -0.897141 -0.404095
outer loop
vertex -76.9134 -37.1194 -0.000999451
vertex -75 -36.5996 -2
vertex -75 -37.5 -0.000999451
endloop
endfacet
facet normal -0.178432 -0.897153 -0.404078
outer loop
vertex -76.9134 -37.1194 -0.000999451
vertex -75 -33.8972 -8
vertex -75 -36.5996 -2
endloop
endfacet
facet normal -0.178349 -0.897174 -0.404066
outer loop
vertex -75 -33.8972 -8
vertex -76.9134 -37.1194 -0.000999451
vertex -75 -33.0005 -9.991
endloop
endfacet
facet normal 0 -0.911776 -0.410687
outer loop
vertex -75 -36.5996 -2
vertex -45 -37.5 -0.000999451
vertex -75 -37.5 -0.000999451
endloop
endfacet
facet normal 0 -0.911776 -0.410687
outer loop
vertex -45 -37.5 -0.000999451
vertex -75 -36.5996 -2
vertex -45 -36.5996 -2
endloop
endfacet
facet normal 0 -0.911793 -0.41065
outer loop
vertex -75 -33.0005 -9.991
vertex -45 -33.8972 -8
vertex -75 -33.8972 -8
endloop
endfacet
facet normal 0 -0.911793 -0.41065
outer loop
vertex -45 -33.8972 -8
vertex -75 -33.0005 -9.991
vertex -45 -33.0005 -9.991
endloop
endfacet
facet normal -0.195091 0.980785 0
outer loop
vertex -75 -22.5 -0.000999451
vertex -76.9134 -22.8806 0
vertex -75 -22.5 0
endloop
endfacet
facet normal -0.195091 0.980785 0
outer loop
vertex -76.9134 -22.8806 0
vertex -75 -22.5 -0.000999451
vertex -76.9134 -22.8806 -0.000999451
endloop
endfacet
facet normal -0.512756 0.767361 -0.385017
outer loop
vertex -77.427 -28.2362 -9.991
vertex -78.5355 -23.9645 -0.000999451
vertex -76.9134 -22.8806 -0.000999451
endloop
endfacet
facet normal 0.842298 0.429166 -0.326114
outer loop
vertex -42 -29.9995 -9.991
vertex -43.2366 -27.5725 -9.991
vertex -40.3806 -25.5866 -0.000999451
endloop
endfacet
facet normal -0.913245 0.296767 -0.27913
outer loop
vertex -78 -29.9995 -9.991
vertex -79.6194 -25.5866 -0.000999451
vertex -77.427 -28.2362 -9.991
endloop
endfacet
facet normal 0.555587 0.831458 -0
outer loop
vertex -41.4645 -23.9645 -0.000999451
vertex -43.0866 -22.8806 0
vertex -41.4645 -23.9645 0
endloop
endfacet
facet normal 0.555587 0.831458 0
outer loop
vertex -43.0866 -22.8806 0
vertex -41.4645 -23.9645 -0.000999451
vertex -43.0866 -22.8806 -0.000999451
endloop
endfacet
facet normal -0.952575 -0.18948 -0.238114
outer loop
vertex -79.6194 -34.4134 -0.000999451
vertex -80 -32.5 -0.000999451
vertex -78 -30.0005 -9.991
endloop
endfacet
facet normal -0.952575 0.18948 -0.238114
outer loop
vertex -78 -29.9995 -9.991
vertex -80 -27.5 -0.000999451
vertex -79.6194 -25.5866 -0.000999451
endloop
endfacet
facet normal 0.555587 -0.831458 0
outer loop
vertex -43.0866 -37.1194 -0.000999451
vertex -41.4645 -36.0355 0
vertex -43.0866 -37.1194 0
endloop
endfacet
facet normal 0.555587 -0.831458 0
outer loop
vertex -41.4645 -36.0355 0
vertex -43.0866 -37.1194 -0.000999451
vertex -41.4645 -36.0355 -0.000999451
endloop
endfacet
facet normal 0.195091 -0.980785 0
outer loop
vertex -45 -37.5 -0.000999451
vertex -43.0866 -37.1194 0
vertex -45 -37.5 0
endloop
endfacet
facet normal 0.195091 -0.980785 0
outer loop
vertex -43.0866 -37.1194 0
vertex -45 -37.5 -0.000999451
vertex -43.0866 -37.1194 -0.000999451
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex -75 -37.5 -0.000999451
vertex -45 -37.5 0
vertex -75 -37.5 0
endloop
endfacet
facet normal 0 -1 -0
outer loop
vertex -45 -37.5 0
vertex -75 -37.5 -0.000999451
vertex -45 -37.5 -0.000999451
endloop
endfacet
facet normal -0.281677 -0.866858 -0.411358
outer loop
vertex -75 -33.0005 -9.991
vertex -76.9134 -37.1194 -0.000999451
vertex -76.7634 -32.4275 -9.991
endloop
endfacet
facet normal 0.980785 0.195091 0
outer loop
vertex -40 -27.5 0
vertex -40.3806 -25.5866 -0.000999451
vertex -40.3806 -25.5866 0
endloop
endfacet
facet normal 0.980785 0.195091 0
outer loop
vertex -40.3806 -25.5866 -0.000999451
vertex -40 -27.5 0
vertex -40 -27.5 -0.000999451
endloop
endfacet
facet normal 0.952575 0.18948 -0.238114
outer loop
vertex -40 -27.5 -0.000999451
vertex -42 -29.9995 -9.991
vertex -40.3806 -25.5866 -0.000999451
endloop
endfacet
facet normal 0.913245 -0.296767 -0.27913
outer loop
vertex -40.3806 -34.4134 -0.000999451
vertex -42.573 -31.7638 -9.991
vertex -42 -30.0005 -9.991
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -45 -22.5 0
vertex -40 -27.5 0
vertex -40.3806 -25.5866 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -40 -27.5 0
vertex -45 -22.5 0
vertex -40 -32.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -45 -22.5 0
vertex -40.3806 -25.5866 0
vertex -41.4645 -23.9645 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -45 -37.5 0
vertex -40 -32.5 0
vertex -45 -22.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -45 -22.5 0
vertex -41.4645 -23.9645 0
vertex -43.0866 -22.8806 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -40 -32.5 0
vertex -45 -37.5 0
vertex -40.3806 -34.4134 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -40.3806 -34.4134 0
vertex -45 -37.5 0
vertex -41.4645 -36.0355 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -41.4645 -36.0355 0
vertex -45 -37.5 0
vertex -43.0866 -37.1194 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex -75 -22.5 0
vertex -45 -37.5 0
vertex -45 -22.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -75 -22.5 0
vertex -75 -37.5 0
vertex -45 -37.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -80 -27.5 0
vertex -75 -22.5 0
vertex -76.9134 -22.8806 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -75 -22.5 0
vertex -80 -27.5 0
vertex -75 -37.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -80 -27.5 0
vertex -76.9134 -22.8806 0
vertex -78.5355 -23.9645 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex -80 -32.5 0
vertex -75 -37.5 0
vertex -80 -27.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -80 -27.5 0
vertex -78.5355 -23.9645 0
vertex -79.6194 -25.5866 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -75 -37.5 0
vertex -80 -32.5 0
vertex -76.9134 -37.1194 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -76.9134 -37.1194 0
vertex -80 -32.5 0
vertex -78.5355 -36.0355 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -78.5355 -36.0355 0
vertex -80 -32.5 0
vertex -79.6194 -34.4134 0
endloop
endfacet
facet normal -0.555587 -0.831458 0
outer loop
vertex -78.5355 -36.0355 -0.000999451
vertex -76.9134 -37.1194 0
vertex -78.5355 -36.0355 0
endloop
endfacet
facet normal -0.555587 -0.831458 -0
outer loop
vertex -76.9134 -37.1194 0
vertex -78.5355 -36.0355 -0.000999451
vertex -76.9134 -37.1194 -0.000999451
endloop
endfacet
facet normal -0.789617 0.527629 -0.313229
outer loop
vertex -77.427 -28.2362 -9.991
vertex -79.6194 -25.5866 -0.000999451
vertex -78.5355 -23.9645 -0.000999451
endloop
endfacet
facet normal -0.831458 0.555587 0
outer loop
vertex -79.6194 -25.5866 -0.000999451
vertex -78.5355 -23.9645 0
vertex -78.5355 -23.9645 -0.000999451
endloop
endfacet
facet normal -0.831458 0.555587 0
outer loop
vertex -78.5355 -23.9645 0
vertex -79.6194 -25.5866 -0.000999451
vertex -79.6194 -25.5866 0
endloop
endfacet
facet normal 1 -0 0
outer loop
vertex -40 -32.5 0
vertex -40 -27.5 -0.000999451
vertex -40 -27.5 0
endloop
endfacet
facet normal 1 0 0
outer loop
vertex -40 -27.5 -0.000999451
vertex -40 -32.5 0
vertex -40 -32.5 -0.000999451
endloop
endfacet
facet normal 0.980543 0 -0.196305
outer loop
vertex -40 -27.5 -0.000999451
vertex -42 -30.0005 -9.991
vertex -42 -29.9995 -9.991
endloop
endfacet
facet normal 0.980543 0 -0.196305
outer loop
vertex -42 -30.0005 -9.991
vertex -40 -27.5 -0.000999451
vertex -40 -32.5 -0.000999451
endloop
endfacet
facet normal -0.980543 0 -0.196305
outer loop
vertex -78 -30.0005 -9.991
vertex -80 -27.5 -0.000999451
vertex -78 -29.9995 -9.991
endloop
endfacet
facet normal -0.980543 -0 -0.196305
outer loop
vertex -80 -27.5 -0.000999451
vertex -78 -30.0005 -9.991
vertex -80 -32.5 -0.000999451
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -45 -33.8972 -8
vertex -45 -23.4004 -2
vertex -45 -26.1028 -8
endloop
endfacet
facet normal -1 -0 0
outer loop
vertex -45 -23.4004 -2
vertex -45 -33.8972 -8
vertex -45 -36.5996 -2
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -75 -36.5996 -2
vertex -45 -23.4004 -2
vertex -45 -36.5996 -2
endloop
endfacet
facet normal -0 0 -1
outer loop
vertex -45 -23.4004 -2
vertex -75 -36.5996 -2
vertex -75 -23.4004 -2
endloop
endfacet
facet normal -0 0 1
outer loop
vertex -75 -26.1028 -8
vertex -45 -33.8972 -8
vertex -45 -26.1028 -8
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -45 -33.8972 -8
vertex -75 -26.1028 -8
vertex -75 -33.8972 -8
endloop
endfacet
facet normal 1 0 0
outer loop
vertex -75 -23.4004 -2
vertex -75 -33.8972 -8
vertex -75 -26.1028 -8
endloop
endfacet
facet normal 1 0 -0
outer loop
vertex -75 -33.8972 -8
vertex -75 -23.4004 -2
vertex -75 -36.5996 -2
endloop
endfacet
endsolid OpenSCAD_Model

29290
model_top.stl Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
/*
export=0; // <-- prepend to the main file to activate the export
*/
function is_not_export() = is_undef(export) || export == 0;
function is_export() = !is_not_export();
function is_model_strict(m) = is_export() && export == m;
function is_model(m) = is_not_export() || export == m;
MODEL_DEMO=0;
// Harness
MODEL_HARNESS_LEFT=101;
MODEL_HARNESS_RIGHT=102;
MODEL_HARNESS_BOTTOM=103;
MODEL_HARNESS_BOTTOM_PIP=104;
MODEL_HARNESS_TOP=105;
MODEL_HARNESS_SLIDER_FRONT=106;
MODEL_HARNESS_SLIDER_BACK=107;
MODEL_HARNESS_BUTTONS=108;
// Platform
MODEL_PLATFORM_HARNESS=201;
MODEL_PLATFORM_STRAP=202;
// Strap
MODEL_LINKS=301;
MODEL_CLIP_A=302;
MODEL_CLIP_B=303;
MODEL_CLIP_RATCHETING=304;
MODEL_CLIP_RATCHETING_A=305;
MODEL_CLIP_RATCHETING_B=306;

View File

@ -1,6 +0,0 @@
export=0;
include <export.scad>
include <harness.scad>
include <platform.scad>
//include <strap.scad>

View File

@ -1,70 +0,0 @@
include <export.scad>
// 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 <strap_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();
top=!base;
up(top?size.z:0)
color(top?"Olive":"YellowGreen")
cube(size, center=true);
module strap_connectors() {
down(size.z/2) {
for (i=[0:3]) {
left((i%2*(-2)+1) * (size.x/2 - get_link_segment_size().y/2))
fwd((round(i/2)%2*(-2)+1) * size.y/2)
down(get_link_segment_size().z/2)
zrot(90 + (round(i/2)%2*180)) link_connector_pin();
}
}
}
if (base) {
strap_connectors();
}
}
// Models:
module model_platform_harness() {
platform(base=false);
}
module model_platform_strap() {
platform(base=true);
}
// Export:
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();

View File

@ -1,9 +0,0 @@
use <specs_phone.scad>
// TODO
function get_harness_size() = [
get_phone_size().x + 10,
get_phone_size().y + 10,
get_phone_size().z + 10,
];

View File

@ -1,2 +0,0 @@
function get_phone_size() = [161.2, 77.2, 10];

View File

@ -1,8 +0,0 @@
use <specs_phone.scad>
function get_platform_size() = [
get_phone_size().x - 5,
get_phone_size().y - 5,
5
];

View File

@ -1,11 +0,0 @@
function get_link_segment_size() = [15, 30, 5];
function get_link_pin_diameter() = 2;
function get_link_socket_slack() = [1, 4, 1];
function get_link_joiner_arm_size() = [get_link_segment_size().x - 2, 3, get_link_segment_size().z];
function get_link_socket_size() = [get_link_segment_size().z,
get_link_segment_size().y - get_link_joiner_arm_size().y*2,
get_link_segment_size().z];
function get_link_clip_size() = [get_link_pin_diameter()*5, get_link_segment_size().y - 5, get_link_segment_size().z];
function get_link_socket_roundgap() = 2;

View File

@ -1,270 +0,0 @@
links_count=3; // [1..20]
include_terminal=true; // [true,false]
include <export.scad>
use <BOSL/transforms.scad>
use <BOSL/shapes.scad>
include <BOSL/constants.scad>
use <strap_common.scad>
if (is_model_strict(MODEL_LINKS)) {
echo("===============================");
echo(str("Strap length: ", (links_count * get_link_segment_size().x), " mm"));
echo("===============================");
}
assert(get_link_segment_size().x >= 10, "Link segment is too short.");
assert(get_link_segment_size().z >= (get_link_pin_diameter() + get_link_socket_slack().z + 1), "Link segment is too thin.");
module link(terminal=false) {
$fn=$preview?4:20;
module link_joiner() {
gap=get_link_socket_roundgap();
segment_size=get_link_segment_size();
arm_size=get_link_joiner_arm_size();
module pin_to_socket_joiner() {
joiner_size=[segment_size.x-get_link_socket_size().x+get_link_socket_size().x*0.2,
segment_size.y-4,
segment_size.z];
difference() {
right(joiner_size.x/2 + 4.5) cuboid(joiner_size, fillet=1, edges=EDGES_Z_ALL + EDGES_BOTTOM);
right(segment_size.x) scale([1, 2, 1]) pin_socket_area();
}
}
pin_to_socket_joiner();
}
link_connector_pin();
if (terminal) {
right(get_link_segment_size().x + 2) zrot(180) link_connector_pin();
} else {
link_joiner();
right(get_link_segment_size().x) link_connector_socket();
}
}
module link_chain(links_count, include_terminal=true) {
for (i = [0:links_count-1]) {
terminal=(i==links_count-1) && include_terminal;
right(i*get_link_segment_size().x) link(terminal=terminal);
}
}
module clip() {
$fn=$preview?4:20;
socket_size=get_link_socket_size();
clip_size=get_link_clip_size();
pin_diam=get_link_pin_diameter();
slot_slack=get_link_socket_slack();
size=[clip_size.x+socket_size.x, clip_size.y, clip_size.z];
slot_size=[clip_size.x+slot_slack.x, size.y+1, pin_diam+slot_slack.z];
entry_size=[slot_size.x, clip_size.y+1, clip_size.z];
entry_pos=[0, 0, 1.5];
module socket_area() {
$fn=$preview? 10 : 20;
xrot(90) down(size.y/2) cylinder(d=size.z, h=size.y);
}
module socket_cutout() {
$fn=$preview? 10 : 20;
xrot(90) down(slot_size.y/2) cylinder(d=slot_size.z, h=slot_size.y);
}
module cover() {
translate(entry_pos) cube(entry_size, center=true);
}
module joiner(groove) {
slack=groove?0.2:0;
joiner_size=[entry_size.x-6+slack, entry_size.y-6+slack, entry_size.z-3+slack];
joiner_pos=[entry_pos.x, entry_pos.y, entry_pos.z - entry_size.z/2 + joiner_size.z/2];
translate(joiner_pos) cube(joiner_size, center=true);
}
module model() {
difference() {
union() {
right(clip_size.x/2) socket_area();
left(clip_size.x/2) socket_area();
cube(clip_size, center=true);
}
right(clip_size.x/2) socket_cutout();
left(clip_size.x/2) socket_cutout();
}
}
left(socket_size.x/2)
{
if (is_model(MODEL_CLIP_A)) {
difference() {
model();
cover();
}
joiner(groove=false);
}
if (is_model(MODEL_CLIP_B)) {
difference() {
intersection() {
model();
cover();
}
joiner(groove=true);
}
}
}
}
module clip_ratcheting(ratchet_length=28) {
$fn=$preview?4:20;
socket_size=get_link_socket_size();
clip_size=get_link_clip_size();
pin_diam=get_link_pin_diameter();
slot_slack=get_link_socket_slack();
size=[clip_size.x+socket_size.x, clip_size.y, clip_size.z];
slot_size=[clip_size.x+slot_slack.x + 0.2, size.y+1, pin_diam+slot_slack.z];
entry_size=[slot_size.x-5, clip_size.y+1, clip_size.z];
connector_size=[25, 0, 0];
module hookRight() {
right(connector_size.x/2) zrot(180) link_connector_pin();
}
module hookLeft() {
left(connector_size.x/2) link_connector_pin();
}
wall=2;
tooth_size=[4, 3, 3];
module tooth() {
s=[tooth_size.x, tooth_size.z, tooth_size.y];
up(tooth_size.z/2) xrot(-90) right_triangle(s);
}
module teethFwd() {
tooth_count = ratchet_length/tooth_size.x;
fwd((clip_size.y-wall*2)/2)
right(ratchet_length/2) {
for (i=[1:tooth_count]) {
left(i*tooth_size.x) tooth();
}
cap_size=[ratchet_length, tooth_size.y, 1];
up(tooth_size.z/2 + cap_size.z/2) left(cap_size.x/2) back(tooth_size.y/2) {
difference() {
cube(cap_size, center=true);
translate([0.1, 0.1, 0]) back(tooth_size.y/2) right(ratchet_length/2) zrot(180) tooth();
}
}
}
}
module teethBack() {
scale([1, -1, 1]) teethFwd();
}
module ratchetLeft() {
right(ratchet_length/2) {
difference() {
cube([ratchet_length, clip_size.y, clip_size.z], center=true);
up(wall/2) cube([ratchet_length, clip_size.y-wall*2, clip_size.z], center=true);
right(ratchet_length/2+1) {
slideRailGuide(groove=true);
scale([1,-1,1]) slideRailGuide(groove=true);
}
}
teethFwd();
teethBack();
}
}
ratchet_tooth_count=2;
ratchet_wall=2.5;
ratchet_slack=0.3;
rail_slack=0.2;
ratchet_tooth_scale_z=0.8;
module ratchetTeethFront() {
module ratchetButton() {
size=[8,wall*4,4];
up(size.z+1) fwd(wall*2 - ratchet_wall) cuboid(size, fillet=1, edges=EDGES_FRONT);
up(2) back(ratchet_wall/2) cube([size.x, ratchet_wall, tooth_size.z*ratchet_tooth_scale_z + size.z], center=true);
}
fwd((clip_size.y-wall*2)/2 - tooth_size.y - ratchet_slack)
left(ratchet_length) {
for (i=[0:ratchet_tooth_count-1]) {
right(i*tooth_size.x) scale([-1,-1*(1-i/5),ratchet_tooth_scale_z]) tooth();
}
ratchetButton();
}
module ratchetWall() {
up(tooth_size.z/2) left(ratchet_length/2 + wall - wall/2) fwd(clip_size.y/2-wall-tooth_size.y-ratchet_wall/2 - ratchet_slack)
down(wall/2+0.5) cube([ratchet_length + wall, ratchet_wall, tooth_size.z*ratchet_tooth_scale_z], center=true);
}
ratchetWall();
}
module ratchetTeethBack() {
scale([1,-1,1]) ratchetTeethFront();
}
module ratchetRight() {
left(wall) cube([wall*2, clip_size.y + rail_slack*2, clip_size.z], center=true);
ratchetTeethFront();
ratchetTeethBack();
}
module slideRailGuide(groove) {
size=[ratchet_length, wall, wall];
fwd(clip_size.y/2 + rail_slack)
left(size.x/2) scale(groove?1.5:1) cuboid(size, fillet=0.5);
}
module slideRailLeft() {
size=[ratchet_length, clip_size.y/2 - ratchet_wall*2 - wall/2 - ratchet_slack - tooth_size.y, clip_size.z];
right(size.x/2) cube(size, center=true);
}
module slideRailRight() {
size=[ratchet_length + 3, wall*1.5, clip_size.z];
module railFront() {
fwd(clip_size.y/2 + size.y/2 + rail_slack) left(size.x/2)
cuboid(size, fillet=1, edges=EDGES_FRONT);
slideRailGuide(groove=false);
}
module railBack() {
scale([1, -1, 1]) railFront();
}
railFront();
railBack();
}
right(size.x + connector_size.x - 2) {
left(2)
if (is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING)) {
left(ratchet_length + wall + 1) {
hookLeft();
left(0.1) {
ratchetLeft();
slideRailLeft();
}
}
}
right(is_model(MODEL_DEMO) ? ratchet_length + 5 : 0)
if (is_model(MODEL_CLIP_RATCHETING_B) || is_model(MODEL_CLIP_RATCHETING)) {
ratchetRight();
hookRight();
slideRailRight();
}
}
}
// === Export ===
if (is_model(MODEL_DEMO)) {
translate([-20, -40, -10]) zrot(-90) {
link_chain(links_count, include_terminal=include_terminal);
right(links_count * get_link_segment_size().x + get_link_clip_size().x) {
clip();
right(get_link_clip_size().x) clip_ratcheting();
}
}
} else {
if (is_model(MODEL_CLIP_A) || is_model(MODEL_CLIP_B)) {
left(get_link_clip_size().x) clip();
}
if (is_model(MODEL_CLIP_RATCHETING) || is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING_B)) {
left(get_link_clip_size().x * 2 + 3) clip_ratcheting();
}
if (is_model(MODEL_LINKS)) for (i = [0:links_count-1]) {
terminal=(i==links_count-1) && include_terminal;
right(i*get_link_segment_size().x) link(terminal=terminal);
}
}

View File

@ -1,65 +0,0 @@
include <export.scad>
use <BOSL/transforms.scad>
use <BOSL/shapes.scad>
include <BOSL/constants.scad>
use <specs_strap.scad>
module pin() {
segment_size=get_link_segment_size();
h=segment_size.y;
d=get_link_pin_diameter();
back(h/2) xrot(90) cylinder(h=h, d=d, $fn=$preview ? 10 : 30);
}
module pin_socket_area() {
segment_size=get_link_segment_size();
h=segment_size.y-get_link_socket_slack().y;
d=segment_size.z;
back(h/2) xrot(90) cylinder(h=h, d=d, $fn=$preview ? 10 : 30);
}
module pin_socket() {
difference() {
pin_socket_area();
scaleup = [
((get_link_pin_diameter() + get_link_socket_slack().x) / get_link_pin_diameter()),
((get_link_pin_diameter() + get_link_socket_slack().y) / get_link_pin_diameter()),
((get_link_pin_diameter() + get_link_socket_slack().z) / get_link_pin_diameter())
];
scale(scaleup) pin();
}
}
module arm() {
segment_size=get_link_segment_size();
arm_size=get_link_joiner_arm_size();
fwd(segment_size.y/2 + arm_size.y/2 - 1) right(arm_size.x/2 - 1) cuboid(arm_size, fillet=1, edges=EDGES_FRONT + EDGES_Y_ALL);
}
module armFront() {
arm();
}
module armBack() {
scale([1, -1, 1]) arm();
}
module armJoiner() {
gap=get_link_socket_roundgap();
arm_size=get_link_joiner_arm_size();
segment_size=get_link_segment_size();
joiner_size=[arm_size.x-get_link_socket_size().x, segment_size.y, segment_size.z];
right(joiner_size.x/2 + get_link_socket_size().x/2 + gap) cuboid(joiner_size, fillet=1, edges=EDGES_Z_ALL + EDGES_BOTTOM);
}
module link_arms() {
armFront();
armBack();
armJoiner();
}
module link_connector_pin() {
pin();
link_arms();
}
module link_connector_socket() {
pin_socket();
}

134
strap.scad Normal file
View File

@ -0,0 +1,134 @@
// 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>
// DEBUG:
//validation = 1;
//xray = 1;
// EXPORT:
MODEL_STRAP_PLATFORM_BASE=10;
MODEL_STRAP_PLATFORM_RIB=11;
MODEL_STRAP_PLATFORM_RIB_BRACE=12;
MODEL_STRAP_SECONDARY=13;
export=0; // [0:20]
function is_not_export() = is_undef(export) || export == 0;
function is_export() = !is_not_export();
function is_model_strict(m) = is_export() && export == m;
function is_model(m) = is_not_export() || export == m;
function get_phone_size() = [160, 76.7, 10];
module 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 strap_platform() {
base_size=[40, 70, 2];
rib_thickness=5;
rib_height=20;
rib_pos=[base_size.x/2 - rib_thickness, 0, -1.3];
brace_size=[base_size.x, 3.6, 4.8];
brace_pos=[0, base_size.y/2 - 4, -1.3];
module platform_base() {
cutout_size=[(base_size.x-rib_thickness*2 - 2*(base_size.x/2-rib_pos.x)), (base_size.y - 5), 2*base_size.z];
difference() {
down(base_size.z/2) cuboid(base_size, fillet=2, edges=EDGES_Z_ALL);
down(base_size.z/2) cuboid(cutout_size, fillet=2, edges=EDGES_Z_ALL);
model_rib_left(socket=true);
model_rib_right(socket=true);
}
}
module platform_rib(socket=false) {
rib_size=[rib_thickness, base_size.y - 2, rib_height];
difference() {
union() {
difference() {
down(rib_size.z/2) scale(socket ? 1.01 : 1) sparse_strut(h=rib_size.z, l=rib_size.y, thick=rib_size.x, strut=1.2, maxang=40, max_bridge=4);
arm();
}
difference() {
intersection() {
down(rib_size.z/2) cube(rib_size, center=true);
scale(1.07) arm();
}
down(2) scale(1.0) arm();
}
}
fwd(brace_pos.y) platform_rib_brace(socket=true);
back(brace_pos.y) platform_rib_brace(socket=true);
}
}
module platform_rib_brace(socket=false) {
down(rib_height - 1.2 - brace_size.z/2) scale(socket ? 1.02 : 1) cuboid(brace_size, fillet=1, edges=EDGES_X_ALL);
}
module model_rib_left(socket=false) {
left(rib_pos.x) up(rib_pos.z) platform_rib(socket=socket);
}
module model_rib_right(socket=false) {
right(rib_pos.x) up(rib_pos.z) platform_rib(socket=socket);
}
module model_brace_front() {
fwd(brace_pos.y) up(brace_pos.z) platform_rib_brace();
}
module model_brace_back() {
back(brace_pos.y) up(brace_pos.z) platform_rib_brace();
}
if (is_model(MODEL_STRAP_PLATFORM_BASE)) platform_base();
if (is_model(MODEL_STRAP_PLATFORM_RIB)) model_rib_left();
if (is_model(MODEL_STRAP_PLATFORM_RIB_BRACE)) model_brace_front();
if (is_not_export()) {
model_rib_right();
model_brace_back();
}
}
module strap_secondary() {
size=[40, 15, 10];
size_base=[size.x, size.y];
size_top=[size.x * 0.9, size.y * 0.4];
cutout_size=[size.x - 10, size.y*10, size.z - 4];
module anchor() {
difference() {
xrot(180) rounded_prismoid(size1=size_base, size2=size_top, h=size.z, r=5);
down(size.z/2) cube(cutout_size, center=true);
}
}
anchor_pos=[60, 30, 0];
module anchor_front() {
left(anchor_pos.x) fwd(anchor_pos.y) anchor();
}
module anchor_back() {
left(anchor_pos.x) back(anchor_pos.y) anchor();
}
if (is_model(MODEL_STRAP_SECONDARY)) anchor_front();
if (is_not_export()) anchor_back();
}
module model_strap_platform() {
strap_platform();
}
module model_strap_secondary() {
strap_secondary();
}
module model_arm() {
if (is_not_export()) down(3) arm();
}
model_strap_platform();
model_strap_secondary();
model_arm();