Refactor into specs scads
This commit is contained in:
parent
4d0931df73
commit
ebde72fab1
@ -20,10 +20,8 @@ MODEL_HARNESS_SLIDER_BACK=107;
|
|||||||
MODEL_HARNESS_BUTTONS=108;
|
MODEL_HARNESS_BUTTONS=108;
|
||||||
|
|
||||||
// Platform
|
// Platform
|
||||||
MODEL_STRAP_PLATFORM_BASE=210;
|
MODEL_PLATFORM_HARNESS=201;
|
||||||
MODEL_STRAP_PLATFORM_RIB=211;
|
MODEL_PLATFORM_STRAP=202;
|
||||||
MODEL_STRAP_PLATFORM_RIB_BRACE=212;
|
|
||||||
MODEL_STRAP_SECONDARY=213;
|
|
||||||
|
|
||||||
// Strap
|
// Strap
|
||||||
MODEL_LINKS=301;
|
MODEL_LINKS=301;
|
||||||
|
@ -7,6 +7,10 @@ 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;
|
||||||
@ -14,7 +18,6 @@ XRAY_BACKPLANE=2;
|
|||||||
XRAY_BOTTOM=3;
|
XRAY_BOTTOM=3;
|
||||||
//xray = 2;
|
//xray = 2;
|
||||||
|
|
||||||
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;
|
||||||
@ -398,7 +401,7 @@ module phone_harness() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module model() {
|
module model() {
|
||||||
phone_harness();
|
up(get_platform_size().z + get_harness_size().z/2) phone_harness();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_undef(validation)) {
|
if (!is_undef(validation)) {
|
||||||
|
@ -3,4 +3,4 @@ include <export.scad>
|
|||||||
|
|
||||||
include <harness.scad>
|
include <harness.scad>
|
||||||
include <platform.scad>
|
include <platform.scad>
|
||||||
include <strap.scad>
|
//include <strap.scad>
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
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>
|
||||||
@ -5,13 +7,17 @@ use <BOSL/shapes.scad>
|
|||||||
use <BOSL/masks.scad>
|
use <BOSL/masks.scad>
|
||||||
use <BOSL/sliders.scad>
|
use <BOSL/sliders.scad>
|
||||||
|
|
||||||
|
use <specs_platform.scad>
|
||||||
|
use <specs_strap.scad>
|
||||||
|
|
||||||
|
use <strap_common.scad>
|
||||||
|
|
||||||
// DEBUG:
|
// DEBUG:
|
||||||
//validation = 1;
|
//validation = 1;
|
||||||
//xray = 1;
|
//xray = 1;
|
||||||
|
|
||||||
function get_phone_size() = [160, 76.7, 10];
|
// PROP >>
|
||||||
|
module prop_arm() {
|
||||||
module arm() {
|
|
||||||
$fn=$preview ? 10 : 30;
|
$fn=$preview ? 10 : 30;
|
||||||
arm_size=[200, 55, 40];
|
arm_size=[200, 55, 40];
|
||||||
color("gray")
|
color("gray")
|
||||||
@ -20,104 +26,45 @@ down(arm_size.z/2) {
|
|||||||
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);
|
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();
|
||||||
|
}
|
||||||
|
// <<<
|
||||||
|
|
||||||
module strap_platform() {
|
// Blocks:
|
||||||
base_size=[40, 70, 2];
|
module platform(base) {
|
||||||
rib_thickness=5;
|
size=get_platform_size();
|
||||||
rib_height=20;
|
top=!base;
|
||||||
rib_pos=[base_size.x/2 - rib_thickness, 0, -1.3];
|
up(top?size.z:0)
|
||||||
brace_size=[base_size.x, 3.6, 4.8];
|
color(top?"Olive":"YellowGreen")
|
||||||
brace_pos=[0, base_size.y/2 - 4, -1.3];
|
cube(size, center=true);
|
||||||
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) {
|
module strap_connectors() {
|
||||||
rib_size=[rib_thickness, base_size.y - 2, rib_height];
|
down(size.z/2) {
|
||||||
difference() {
|
for (i=[0:3]) {
|
||||||
union() {
|
left((i%2*(-2)+1) * (size.x/2 - get_link_segment_size().y/2))
|
||||||
difference() {
|
fwd((round(i/2)%2*(-2)+1) * size.y/2)
|
||||||
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);
|
down(get_link_segment_size().z/2)
|
||||||
arm();
|
zrot(90 + (round(i/2)%2*180)) link_connector_pin();
|
||||||
}
|
|
||||||
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) {
|
if (base) {
|
||||||
down(rib_height - 1.2 - brace_size.z/2) scale(socket ? 1.02 : 1) cuboid(brace_size, fillet=1, edges=EDGES_X_ALL);
|
strap_connectors();
|
||||||
}
|
|
||||||
|
|
||||||
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() {
|
// Models:
|
||||||
size=[40, 15, 10];
|
module model_platform_harness() {
|
||||||
size_base=[size.x, size.y];
|
platform(base=false);
|
||||||
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() {
|
module model_platform_strap() {
|
||||||
strap_platform();
|
platform(base=true);
|
||||||
}
|
|
||||||
module model_strap_secondary() {
|
|
||||||
strap_secondary();
|
|
||||||
}
|
|
||||||
module model_arm() {
|
|
||||||
if (is_not_export()) down(3) arm();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
model_strap_platform();
|
// Export:
|
||||||
model_strap_secondary();
|
if (is_model(MODEL_PLATFORM_HARNESS)) model_platform_harness();
|
||||||
model_arm();
|
if (is_model(MODEL_PLATFORM_STRAP)) model_platform_strap();
|
||||||
|
if (is_model(MODEL_DEMO)) model_prop_arm();
|
||||||
|
9
src/specs_harness.scad
Normal file
9
src/specs_harness.scad
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
use <specs_phone.scad>
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
function get_harness_size() = [
|
||||||
|
get_phone_size().x + 10,
|
||||||
|
get_phone_size().y + 10,
|
||||||
|
get_phone_size().z + 10,
|
||||||
|
];
|
||||||
|
|
2
src/specs_phone.scad
Normal file
2
src/specs_phone.scad
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
function get_phone_size() = [161.2, 77.2, 10];
|
||||||
|
|
8
src/specs_platform.scad
Normal file
8
src/specs_platform.scad
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
use <specs_phone.scad>
|
||||||
|
|
||||||
|
function get_platform_size() = [
|
||||||
|
get_phone_size().x - 5,
|
||||||
|
get_phone_size().y - 5,
|
||||||
|
5
|
||||||
|
];
|
||||||
|
|
11
src/specs_strap.scad
Normal file
11
src/specs_strap.scad
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
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;
|
||||||
|
|
207
src/strap.scad
207
src/strap.scad
@ -2,93 +2,26 @@ links_count=3; // [1..20]
|
|||||||
include_terminal=true; // [true,false]
|
include_terminal=true; // [true,false]
|
||||||
|
|
||||||
include <export.scad>
|
include <export.scad>
|
||||||
|
|
||||||
//validation=1;
|
|
||||||
VALIDATE_INTERSECTION=1;
|
|
||||||
|
|
||||||
//xray=1;
|
|
||||||
|
|
||||||
use <BOSL/transforms.scad>
|
use <BOSL/transforms.scad>
|
||||||
use <BOSL/shapes.scad>
|
use <BOSL/shapes.scad>
|
||||||
include <BOSL/constants.scad>
|
include <BOSL/constants.scad>
|
||||||
|
|
||||||
function get_link_segment_size() = [15, 30, 5];
|
use <strap_common.scad>
|
||||||
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, 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];
|
if (is_model_strict(MODEL_LINKS)) {
|
||||||
function get_link_socket_roundgap() = 2;
|
echo("===============================");
|
||||||
|
echo(str("Strap length: ", (links_count * get_link_segment_size().x), " mm"));
|
||||||
echo("===============================");
|
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().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.");
|
assert(get_link_segment_size().z >= (get_link_pin_diameter() + get_link_socket_slack().z + 1), "Link segment is too thin.");
|
||||||
|
|
||||||
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() {
|
|
||||||
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();
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
module link(terminal=false) {
|
module link(terminal=false) {
|
||||||
|
$fn=$preview?4:20;
|
||||||
module link_joiner() {
|
module link_joiner() {
|
||||||
gap=get_link_socket_roundgap();
|
gap=get_link_socket_roundgap();
|
||||||
|
segment_size=get_link_segment_size();
|
||||||
arm_size=get_link_joiner_arm_size();
|
arm_size=get_link_joiner_arm_size();
|
||||||
|
|
||||||
module pin_to_socket_joiner() {
|
module pin_to_socket_joiner() {
|
||||||
@ -106,14 +39,22 @@ module link(terminal=false) {
|
|||||||
|
|
||||||
link_connector_pin();
|
link_connector_pin();
|
||||||
if (terminal) {
|
if (terminal) {
|
||||||
right(segment_size.x + 2) zrot(180) link_connector_pin();
|
right(get_link_segment_size().x + 2) zrot(180) link_connector_pin();
|
||||||
} else {
|
} else {
|
||||||
link_joiner();
|
link_joiner();
|
||||||
right(segment_size.x) link_connector_socket();
|
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() {
|
module clip() {
|
||||||
|
$fn=$preview?4:20;
|
||||||
socket_size=get_link_socket_size();
|
socket_size=get_link_socket_size();
|
||||||
clip_size=get_link_clip_size();
|
clip_size=get_link_clip_size();
|
||||||
pin_diam=get_link_pin_diameter();
|
pin_diam=get_link_pin_diameter();
|
||||||
@ -153,25 +94,29 @@ module clip() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
right(clip_size.x/2)
|
left(socket_size.x/2)
|
||||||
if (is_model(MODEL_CLIP_A)) {
|
{
|
||||||
difference() {
|
if (is_model(MODEL_CLIP_A)) {
|
||||||
model();
|
difference() {
|
||||||
cover();
|
|
||||||
}
|
|
||||||
joiner(groove=false);
|
|
||||||
} else if (is_model(MODEL_CLIP_B)) {
|
|
||||||
difference() {
|
|
||||||
intersection() {
|
|
||||||
model();
|
model();
|
||||||
cover();
|
cover();
|
||||||
}
|
}
|
||||||
joiner(groove=true);
|
joiner(groove=false);
|
||||||
|
}
|
||||||
|
if (is_model(MODEL_CLIP_B)) {
|
||||||
|
difference() {
|
||||||
|
intersection() {
|
||||||
|
model();
|
||||||
|
cover();
|
||||||
|
}
|
||||||
|
joiner(groove=true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module clip_ratcheting(ratchet_length=28) {
|
module clip_ratcheting(ratchet_length=28) {
|
||||||
|
$fn=$preview?4:20;
|
||||||
socket_size=get_link_socket_size();
|
socket_size=get_link_socket_size();
|
||||||
clip_size=get_link_clip_size();
|
clip_size=get_link_clip_size();
|
||||||
pin_diam=get_link_pin_diameter();
|
pin_diam=get_link_pin_diameter();
|
||||||
@ -179,22 +124,12 @@ module clip_ratcheting(ratchet_length=28) {
|
|||||||
size=[clip_size.x+socket_size.x, clip_size.y, clip_size.z];
|
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];
|
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];
|
entry_size=[slot_size.x-5, clip_size.y+1, clip_size.z];
|
||||||
//right(clip_size.x/2)
|
connector_size=[25, 0, 0];
|
||||||
module hook() {
|
|
||||||
intersection() {
|
|
||||||
difference() {
|
|
||||||
cuboid(size, fillet=1);
|
|
||||||
cuboid(slot_size, fillet=1);
|
|
||||||
up(entry_size.z/2) cube(entry_size, center=true);
|
|
||||||
}
|
|
||||||
translate([0, -50, -50]) cube([100, 100, 100]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
module hookRight() {
|
module hookRight() {
|
||||||
right(12.5) zrot(180) link_connector_pin();
|
right(connector_size.x/2) zrot(180) link_connector_pin();
|
||||||
}
|
}
|
||||||
module hookLeft() {
|
module hookLeft() {
|
||||||
left(12.5) link_connector_pin();
|
left(connector_size.x/2) link_connector_pin();
|
||||||
}
|
}
|
||||||
wall=2;
|
wall=2;
|
||||||
tooth_size=[4, 3, 3];
|
tooth_size=[4, 3, 3];
|
||||||
@ -292,52 +227,44 @@ module clip_ratcheting(ratchet_length=28) {
|
|||||||
railBack();
|
railBack();
|
||||||
}
|
}
|
||||||
|
|
||||||
left(2) if (is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING)) {
|
right(size.x + connector_size.x - 2) {
|
||||||
left(ratchet_length + wall + 1) {
|
left(2)
|
||||||
hookLeft();
|
if (is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING)) {
|
||||||
left(0.1) {
|
left(ratchet_length + wall + 1) {
|
||||||
ratchetLeft();
|
hookLeft();
|
||||||
slideRailLeft();
|
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)) {
|
if (is_model(MODEL_CLIP_RATCHETING_B) || is_model(MODEL_CLIP_RATCHETING)) {
|
||||||
ratchetRight();
|
ratchetRight();
|
||||||
hookRight();
|
hookRight();
|
||||||
slideRailRight();
|
slideRailRight();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export / Demo / Validation:
|
// === Export ===
|
||||||
segment_size=get_link_segment_size();
|
if (is_model(MODEL_DEMO)) {
|
||||||
if (!is_undef(validation)) {
|
translate([-20, -40, -10]) zrot(-90) {
|
||||||
if (validation==VALIDATE_INTERSECTION) {
|
link_chain(links_count, include_terminal=include_terminal);
|
||||||
intersection() {
|
right(links_count * get_link_segment_size().x + get_link_clip_size().x) {
|
||||||
right(0*segment_size.x) link();
|
clip();
|
||||||
right(1*segment_size.x) link();
|
right(get_link_clip_size().x) clip_ratcheting();
|
||||||
}
|
|
||||||
intersection() {
|
|
||||||
right(1*segment_size.x) link();
|
|
||||||
right(2*segment_size.x) link();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
intersection () {
|
if (is_model(MODEL_CLIP_A) || is_model(MODEL_CLIP_B)) {
|
||||||
if (!is_undef(xray)) {
|
left(get_link_clip_size().x) clip();
|
||||||
down(50) cube([100, 100, 100], center=true);
|
}
|
||||||
}
|
if (is_model(MODEL_CLIP_RATCHETING) || is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING_B)) {
|
||||||
union() {
|
left(get_link_clip_size().x * 2 + 3) clip_ratcheting();
|
||||||
if (is_model(MODEL_CLIP_A) || is_model(MODEL_CLIP_B)) {
|
}
|
||||||
left(get_link_clip_size().x) clip();
|
if (is_model(MODEL_LINKS)) for (i = [0:links_count-1]) {
|
||||||
}
|
terminal=(i==links_count-1) && include_terminal;
|
||||||
if (is_model(MODEL_CLIP_RATCHETING) || is_model(MODEL_CLIP_RATCHETING_A) || is_model(MODEL_CLIP_RATCHETING_B)) {
|
right(i*get_link_segment_size().x) link(terminal=terminal);
|
||||||
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*segment_size.x) link(terminal=terminal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
65
src/strap_common.scad
Normal file
65
src/strap_common.scad
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user