fix: make rear strap brackets side-feed
CI/CD / lint-and-typecheck (pull_request) Successful in 8s
CI/CD / test (pull_request) Successful in 7s
CI/CD / build (pull_request) Failing after 9s
CI/CD / deploy (pull_request) Has been skipped

This commit is contained in:
2026-05-23 14:15:04 +00:00
parent daeea9f2c9
commit d89f9dc20b
7 changed files with 38433 additions and 17600 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+26 -25
View File
@@ -1,7 +1,7 @@
// RemoteRig camera node case v4
// Upright appliance-style OpenSCAD prototype for a strap-mounted camera node.
// Units: millimeters. Coordinate system: X=width, Y=depth/front-back, Z=height.
// Front/service lid is on the -Y face. Rear zip-tie pass-through loops are on the +Y face.
// Front/service lid is on the -Y face. Rear side-feed zip-tie brackets are on the +Y face.
//
// v4 visual direction: tall/upright appliance/control box matching the original
// reference image, replacing the rejected wide, low generic electronics box.
@@ -50,10 +50,10 @@ rocker_h = 19.0;
front_slot_w = 34.0; // two long rounded horizontal slots near lower front
front_slot_h = 3.2;
// Rear reusable cloth zip-tie / Velcro pass-through loops.
// Two visibly vertical external belt-loop brackets sit left/right of center.
// The strap path is the real non-solid tunnel between rear wall and raised bridge;
// it stays outside the electronics cavity and is open at the top/bottom for feeding.
// Rear reusable cloth zip-tie / Velcro pass-through brackets.
// Two visibly vertical external brackets sit left/right of center.
// The strap path is a lateral X-direction tunnel between the sealed rear wall
// and raised bridge face; long side windows stay open for feeding from either side.
rear_loop_x = 13.0;
rear_loop_w = 8.5; // outside bracket width in X
rear_loop_h = 50.0; // outside bracket height in Z
@@ -61,8 +61,8 @@ rear_loop_z = case_h/2;
rear_loop_gap_y = 3.8; // usable strap-thickness clearance behind raised bridge
rear_loop_face_t = 1.4; // low-profile outer bridge skin
rear_loop_y = rear_loop_gap_y + rear_loop_face_t;
rear_loop_usable_w = 6.4; // usable strap width through each vertical loop
rear_loop_side_pad = (rear_loop_w - rear_loop_usable_w) / 2;
rear_loop_anchor_h = 5.0; // top/bottom weld pads; side window remains long vertically
rear_loop_side_window_h = rear_loop_h - 2*rear_loop_anchor_h;
// USB power connector placeholder cutouts
usb_c_cutout_w = 10.5; // bottom USB-C female inlet visible opening, X width
@@ -114,26 +114,27 @@ module screw_boss(x, z) {
module rear_zip_tie_loop(xc) {
// Vertical external belt-loop bracket for reusable cloth zip ties/Velcro.
// The central void is a real strap tunnel: rear wall -> air gap -> raised
// outer bridge face. Side pads weld the bridge to the shell while keeping
// the electronics cavity sealed; the tunnel is open at top and bottom.
// The bracket silhouette remains vertical, but the real strap tunnel runs
// laterally in X through the long side windows, behind the raised bridge face.
// Top/bottom pads weld the bridge to the shell; no cut reaches the rear wall.
loop_overlap_y = 0.75;
tunnel_extra_y = 0.35;
tunnel_clear_z = rear_loop_h + 0.8;
pad_r = 1.15;
bridge_y_center = case_d/2 + rear_loop_gap_y + rear_loop_face_t/2;
pad_y_center = case_d/2 + rear_loop_y/2 - loop_overlap_y;
pad_z_offset = rear_loop_h/2 - rear_loop_anchor_h/2;
translate([xc, case_d/2 + rear_loop_y/2 - loop_overlap_y, rear_loop_z])
difference() {
xz_rounded_prism(rear_loop_w, rear_loop_y, rear_loop_h, r=1.6);
union() {
// Raised vertical bridge face: visually preserves the requested vertical
// rear brackets while spanning the side-feed tunnel externally.
translate([xc, bridge_y_center, rear_loop_z])
xz_rounded_prism(rear_loop_w, rear_loop_face_t, rear_loop_h, r=1.6);
// Real vertical feed-through gap behind the raised bridge. Starts
// just outside the rear wall, so it cannot cut into the enclosure.
translate([0,
-rear_loop_y/2 + loop_overlap_y + rear_loop_gap_y/2 + 0.08,
0])
cube([rear_loop_usable_w,
rear_loop_gap_y + tunnel_extra_y,
tunnel_clear_z], center=true);
}
// Top and bottom anchor pads close the old top-to-bottom feed direction
// and tie the raised face back into the rear wall without opening the case.
for (zoff = [-pad_z_offset, pad_z_offset])
translate([xc, pad_y_center, rear_loop_z + zoff])
xz_rounded_prism(rear_loop_w, rear_loop_y, rear_loop_anchor_h, r=pad_r);
}
}
// ----- Printable body -----
@@ -145,7 +146,7 @@ module camera_node_body_v4() {
// Upright outer shell with softened appliance-like corners.
rounded_box([case_w, case_d, case_h], r=corner_r);
// Rear cloth zip-tie / Velcro pass-through loops kept flat/quiet.
// Rear cloth zip-tie / Velcro side-feed brackets kept flat/quiet.
rear_zip_tie_loop(-rear_loop_x);
rear_zip_tie_loop( rear_loop_x);
}