Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG .gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo...#35
Add T3-prism (3-strut tensegrity) parametric CAD with Bambu PETG .gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo...#35sgbaird-alt with Copilot wants to merge 44 commits into
.gcode.3mf slice + re-importable project .3mf (H2D-only, supports enabled, scale 1.5× / cable_d 4.5 mm) + PLA-cables and PLA-struts/TPU-cables MM variants (with modeled-in PLA scaffo...#35Conversation
Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/007b0795-e819-4fd3-ad35-3f33a1d54826 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
|
@copilot we want a bambu lab 3mf file, similar to what's described in vertical-cloud-lab/powder-doser#23 |
We've started this print. It's printing without supports.
|
We've taken the file produced and began to print it without supports. The 3mf file is uploaded in this branch. A picture of the finished print will be posted later. |
There was a problem hiding this comment.
Pull request overview
Adds a new cad/t3-prism/ subtree that provides a parametric OpenSCAD model of a canonical T3 tensegrity prism and a headless pipeline to render/check/slice it into Bambu-targeted PETG G-code, along with committed manufacturing artifacts (STL/PNG/G-code/3MF).
Changes:
- Added parametric T3-prism OpenSCAD source (
t3-prism.scad) with strut/cable connectivity and printable single-piece geometry. - Added a one-shot render/slice script (
render_print.sh) to produce STL, an isometric preview PNG, and two bed-size-specific G-code outputs. - Documented the CAD deliverable and wired it into the repo structure (
README.md,cad/t3-prism/README.md) and ignore rules (.gitignore), plus committed the generated artifacts.
Reviewed changes
Copilot reviewed 4 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | Adds cad/t3-prism/ to the repository structure overview. |
| cad/t3-prism/t3-prism.scad | Parametric OpenSCAD definition of the single-piece T3-prism geometry. |
| cad/t3-prism/render_print.sh | Headless pipeline: SCAD→STL, admesh check, PNG preview, PrusaSlicer CLI G-code export for two Bambu bed sizes. |
| cad/t3-prism/README.md | Build/slice instructions, geometry/parameter documentation, and artifact links. |
| cad/t3-prism/t3-prism.stl | Committed printable mesh artifact. |
| cad/t3-prism/t3-prism-iso.png | Committed isometric preview image artifact. |
| cad/t3-prism/slices/t3-prism.X1C-PETG.gcode | Committed G-code targeting 256×256 Bambu-class beds. |
| cad/t3-prism/slices/t3-prism.A1mini-PETG.gcode | Committed G-code targeting 180×180 Bambu A1 mini bed. |
| cad/t3-prism/t3-prism.3mf | Committed 3MF artifact present in the directory (currently not documented in the CAD README). |
| .gitignore | Adds an ignore rule intended for scratch outputs. |
| @@ -0,0 +1,107 @@ | |||
| # T3-prism (3-strut tensegrity) — Bambu PETG print | |||
|
|
|||
| Resolves the issue [_"Get a bambu sliced print for a T3-prism"_](../../README.md): | |||
| | File | What | | ||
| | ---- | ---- | | ||
| | [`t3-prism.scad`](t3-prism.scad) | parametric source | | ||
| | [`t3-prism.stl`](t3-prism.stl) | watertight binary STL (manifold, single part) | |
| ## References & related work | ||
|
|
||
| - Issue: ["Get a bambu sliced print for a T3-prism"](../../README.md) | ||
| - Programmatic-CAD pattern reused from | ||
| [`vertical-cloud-lab/powder-doser` PR #16](https://github.com/vertical-cloud-lab/powder-doser/pull/16) |
| echo "==> OpenSCAD render -> ${STL##*/}" | ||
| xvfb-run -a openscad -o "${STL}" --export-format=binstl "${SCAD}" | ||
|
|
||
| echo "==> admesh manifold check" | ||
| admesh -fundecvb "${SCRATCH}/t3-prism-clean.stl" "${STL}" \ |
…reserve Marcus's project 3mf Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/bfc1f8fe-27b9-40fe-8c9d-f46712cc281e Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Switched the pipeline to produce real Bambu
|
.gcode.3mf slices (H2D / X1C / A1 mini)
|
@copilot also, make a second version of this print such that it is a multi-material print. One material as PETG and one material as PLA. One material type for the struts and one for the "strings" (up to you which you make PETG vs. PLA, I'm not sure which would mimic more the tensegrity structure, but we'll be swapping one of these out with TPU eventually anyway) |
…n copilot-instructions.md Agent-Logs-Url: https://github.com/vertical-cloud-lab/tensegrity-optimization/sessions/2b0380fe-5fe2-417a-bcb8-ead0b3206e74 Co-authored-by: sgbaird-alt <71569943+sgbaird-alt@users.noreply.github.com>
Done in 08a139d: H2D-only: added a new "Hardware / target printer" section to Import error: confirmed the failing file is a sliced print job, not a project — Bambu Studio's drag/import deliberately rejects
Both regenerated by Edison ANALYSIS: submitted task |
.gcode.3mf slices (H2D / X1C / A1 mini).gcode.3mf slice + re-importable project .3mf (H2D-only)
|
@claude |
|
Claude finished @ctrhjk's task in 48s —— View job Accelerometer dimensions confirmed ✅Thanks @ctrhjk — the caliper measurement (6 × 6 × 5.94 mm L×W×H) matches what the accelerometer mount is already parameterized to, so no geometry change is needed. Those numbers are set directly in accel_l = 6.0; // accelerometer length (X: slide-in / cable-exit axis)
accel_w = 6.0; // accelerometer width (Y)
accel_h = 5.94; // accelerometer height (Z)A few notes so we stay on the same page about how those get used:
Since the caliper numbers already agree with the model, I haven't changed anything.
|
|
@claude please generate new .stls for the current regular T3 prism model at 76.92% the size you have been using in recent generations. Remember this sizing as S0 please. Even though the model has been scaled, make sure the accelerometer housing is the same dimensions as before, but add .3mm to the height dimension. Call this new set of accelerometer housing sizing A1 and the original sizing A0. Additionally, make sure there is housing at both the top and bottom of the prism for each vertex (a total of 6 housing sites). The bottom sites will need to be in the optimal position discovered in the results found here: #35 (comment). Please also reply with a link directly to each .stl used in the multimaterial print when you are done. Thanks! |
Regenerate T3-prism STLs — S0 size + A1 accel housing + 6 housing sites
Rendering STLs was the core deliverable and is done. Now regenerating the
|
|
@claude I added EDISON_API_KEY for you. See .github/copilot-instructions.md for how to use it |
|
Claude finished @sgbaird's task in 7m 34s —— View job Analysis of @sgbaird's request + statusThanks @sgbaird for wiring in Answering @ctrhjk's "analyze what @sgbaird asked and get back to us": @sgbaird's 2026-07-01 01:24 ask was: (1) remove the tweezer breakaways, (2) add sensor insets at the bottom vertices too — but flat (not domed igloos), below the lower vertices, with an extrusion running from the key-seat upper surface up to the underside of the vertices. Good news: all of that is already implemented and committed in
I re-rendered the struts STL from the committed SCAD and it reproduces exactly ( The one gap: the ready-to-import
|
…using sites - scale_factor -> S0 = 1.5 x 0.7692 (~1.154); recover old size with -D scale_factor=1.5. - accel_size selector: A0 (original) | A1 (default, = A0 + 0.3mm pocket height via accel_h_extra). - Housing dims stay absolute mm (not scaled), so the sensor pockets stay full-size on the smaller prism. - 6 housing sites confirmed (3 top igloo + 3 bottom flat), matched top+bottom per the placement analysis in PR #35 comment 4857717314. - render_print.sh now computes the bed-lift OFFSET_Z from the SCAD's MODEL_Z_LO echo instead of the hardcoded 18.29 (which only held at scale 1.5), so parts sit on the bed at any scale/housing config. - Re-rendered 4 STLs + iso. Verified: CGAL Simple:yes; 3 connected strut assemblies (component analysis, each spanning z=[0,115.41] to the bed); struts z=[-16.824,98.581] vs cables z=[-16.824,98.590] world-Z parity (sub-mm). Co-authored-by: Audrey Christiansen <achris0520@users.noreply.github.com>
|
@ctrhjk I think we'll be putting the single-axis accelerometer on the bottom, which has different dimensions. What are the dimensions? I think these were given somewhere in the repo.. EDIT: we have two tri-axis, so nvm, we'll leave it as-is. |
|
@copilot pick up from where claude left off, claude seems to keep timing out or erroring out for some reason (i.e., put the lower vertex key seats to the side and not touching the ground). Render/generate/commit all files. Include the direct hyperlinks in your comment reply |
Done — picked up from where Claude left off and moved the three lower-vertex accelerometer key-seats to the side of each bottom vertex (pushed radially outward past the joint sphere by Re-rendered/regenerated everything end-to-end ( Direct links (commit Multi-material print STLs:
Assembled/combined + slice:
|
|
This is looking so funky 😂 like some kind of three-legged alien |
@sgbaird It'll blend in with the Martians |
|
🤣 |
|
07/02/2026 07/04/2026 SGB EDIT: attaching images from the zip (they were too big when I converted from heic to png, so I chose the lazy route and did phone screenshots) |
|
This latest printing has a larger interior space within the key-seat housing. I secured the accelerometer with wax, but it kept falling off because the space caused the accelerometer to rotate (see #67 (comment))
|
|
Lame, sorry about that @claude see #35 (comment) and address. Look at the comments and scripts in vertical-cloud-lab/powder-doser#7 to figure out how to use OnShape and then upload the files we need to print to OnShape similar to that pull request and include the hyperlink directly in your comment reply so we can have a look to manually verify. |
|
I'll analyze this and get back to you. |
|
@claude I cancelled #35 (comment) because I forgot to edit claude.yml to give OnShape access. I did that, so start this again |
|
Claude finished @sgbaird's task in 10m 12s —— View job Restarting cancelled task: key-seat fit + OnShape upload for manual dimension verificationWorking on @sgbaird's request from the cancelled run (comment): address @ctrhjk's loose key-seat housing (comment 4895789291) and upload the print files to OnShape (per powder-doser PR #7) so dimensions can be verified manually before printing.
|
|
@claude looks like you got stuck or lazy - #35 (comment) |
|
Claude finished @sgbaird's task in 12m 17s —— View job Redoing the stuck task: key-seat fit (A2) + OnShape upload for manual dimension verificationThe previous run (comment 4896526168) got stuck during rendering and never committed anything — HEAD was still at
|
|
@claude looks like you got stuck and didn't finish again in #35 (comment). Please do a quick and easy fix for wherever you got caught and finish the to-do list. If you are spending a lot of time trying to figure it out, do a quick and easy fix and move on. Finally, when you have finished, please reply with a link to the new .stls you have generated. Thanks! |
|
Claude finished @achris0520's task in 11m 40s —— View job Finishing the stuck task: A2 key-seat fit + re-render + STL linksThe previous run (comment 4897755091) got stuck during the STL render and never committed — HEAD was still at
|
…cript A2 = A1 with clearances tightened so the walls register the Dytran 3133A4 instead of letting it yaw/tilt in the seat and shear the wax bead off (@ctrhjk loose-housing report, PR #35 comment 4895789291): lateral clearance 0.4 -> 0.2 mm/side, top Z gap 1.0 -> 0.2 mm. Pocket interior 6.8 x 6.8 x 7.44 mm -> 6.4 x 6.4 x 6.64 mm for the 6 x 6 x 5.94 mm sensor; A1's +0.3 mm print-shrink height allowance kept; dome / flat cap remains the only plate contact. onshape_upload_t3prism.py uploads the print STLs to a public Vertical Cloud Lab classroom document and reads back each Part Studio bounding box in mm to verify import units (PR #35 comment 4896509287, workflow per powder-doser PR #7). Co-authored-by: Audrey Christiansen <280533809+achris0520@users.noreply.github.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
@copilot carry on from where Claude left off |
Picked up from where Claude left off. Claude had committed the SCAD/README change for the A2 accelerometer housing (tighter fit to stop the sensor rotating/tilting in the seat and shearing the wax bead — @ctrhjk's loose-housing report, #4895789291) but hadn't re-rendered the geometry or regenerated the slices. I finished that end-to-end. A2 fit change (from A1): lateral clearance Re-rendered/regenerated everything ( Direct links (commit
One thing I couldn't do here: the OnShape upload for manual dimension verification. Claude's |
@ctrhjk got the TPU assist module up and running. The TPU got stuck when trying to feed in, but I fixed it by pulling out the PTFE tube and manually hand feeding it into the nozzle like we've been doing, then reattached the PTFE tube. Just to be sure, I also reloaded the TPU one more time and it looks like we're ready to go! Sending the new file Jinkwan fixed in Onshape through the printer now! |











T3-prism slicing fixes (PR #35 comment 4464399849)
Metadata/project_settings.confighadfilament_colour=['#00AE42']andfilament_map=['1'](length 1) butfilament_settings_id/filament_typehad length 2 — Bambu Studio uses the shorter array length to determine filament count, so it imported as single-material PLA.z=0but the lowest model point is the joint-sphere bottom at SCADz=-joint_d/2 = -5.25 mm(scale 1.5). When Bambu lifted the assembly so the lowest point sat on the bed, the pillars floated ~5.25 mm above it.patch_mm_extruder.pynow also patchesMetadata/project_settings.config— padsfilament_colourfrom a default extruder palette andfilament_mapwith ascending extruder IDs to matchfilament_settings_idlength, and switchesfilament_map_modetoManualso Bambu Studio honours the per-extruder routing.t3-prism.scadpillar_to(), drop pillar bases to SCADz=-joint_d/2so they reach the bed when the assembled model sits on it (matches the lowest point of the struts/joints).render_print.shend-to-end → all 3 MM project.3mfs now showfilament_colour=['#00AE42','#76D9F4'],filament_map=['1','2'],filament_map_mode=Manual; scaffold STL z-range now[-1.75, 113.74]matching the struts STL exactly.t3-prism.H2D-PETG-supports.pngverification render.T3-prism Sobol BO single-batch generator (PR #35 comment 4503109338)
bo/t3_prism_sobol_batch.py, a Honegumi/Ax-style adaptation of PR Scaffold Bayesian-optimization script with honegumi + customized tensegrity campaign #30bo/tensegrity_campaign.pythat generates a single batch of T3-prism-only Sobol specimens (no model fit, nocomplete_trial— human-in-the-loop, one iteration only).R_mm,H_mm,twist_deg,strut_d_mm,cable_d_mm.topology=t3_prism,tiling=1x1x1,build_orientation=vertical,tpu_shore=85A, PLA struts / TPU cables, supports = manual-painted (@achris0520 paints),joint_d=7 mm.bo/t3-prism-bo-batch.{csv,json,scad,stl}andbo/t3-prism-bo-batch-{plate,iso}.pngpreviews for spot-checking before importing to Bambu Studio.bo/README.mddocuments the swept vs. frozen variables and run instructions.BO batch multi-material project
.3mf(PR #35 comment 4503267471)bo/t3-prism-bo-batch.scadto expose per-specimenspecimen_NN_struts()/specimen_NN_cables()modules and a top-levelpart = "all" | "struts" | "cables"switch, mirroring thecad/t3-prism/t3-prism.scadpattern used by the workingt3-prism-separate-assembly.zipreference.bo/t3_prism_sobol_batch.pynow rendersbo/t3-prism-bo-batch-struts.stlandbo/t3-prism-bo-batch-cables.stlas separate STLs (one per material), in addition to the combined preview STL.--assemblepath into the BO script to producebo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfwith PLA struts on extruder 1 (Bambu PLA Basic @BBL H2D), TPU 85A cables on extruder 2 (Bambu TPU 85A @BBL H2D 0.4 nozzle), and no auto-supports (manual-painting workflow). A--skip-mm-3mfflag is available for SCAD/STL-only runs.filament_settings_id=['Bambu PLA Basic @BBL H2D','Bambu TPU 85A @BBL H2D 0.4 nozzle'],filament_type=['PLA','TPU'],filament_colour=['#00AE42','#76D9F4'],filament_map=['1','2'],filament_map_mode=Manual;Metadata/model_settings.configroutes the struts STL to extruder 1 and the cables STL to extruder 2 — Split to parts now exposes both as independently-assignable parts.bo/README.mdto document the new struts/cables STLs, the MM project.3mf, and the--skip-mm-3mfflag.BO batch tighter plate spacing (PR #35 comment 4503427854)
bo/t3_prism_sobol_batch.pyby dropping thestrut_dterm from the per-specimen footprint estimate and reducing the inter-cell air gap from 5 mm → 2 mm.bo/t3-prism-bo-batch.{scad,stl,json,csv},bo/t3-prism-bo-batch-{struts,cables}.stl,bo/t3-prism-bo-batch-{plate,iso}.png, andbo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfend-to-end.Captive TPU core inside PLA outer shell joints (PR #35 comment 4511036510)
joint_shell()incad/t3-prism/t3-prism.scad): hollow sphere with a teardrop hull blend toward the strut and one cylindrical exit bore per outgoing TPU cable (3 per joint).joint_core()incad/t3-prism/t3-prism.scad): solid sphere inside the cavity, continuous with the cable end-caps emerging through the bores.bore = cable_d + 0.8 mm,core_od ≥ bore + 3 mm(TPU mass cannot back out any single bore),shell_id = core_od + 1 mm,shell_od = shell_id + 3.2 mmPLA wall.use_captive_coretoggle int3-prism.scad(defaulttrue) preserves the legacy solid-joint path for direct comparison.bo/t3_prism_sobol_batch.pySPECIMEN_TEMPLATE) so every per-specimen joint is also captive-core, with per-specimencable_d-derived shell/core/bore sizing.render_print.shoffset_z(3.5 → 8.15 mm),pillar_to(), andbo/specimen_footprint()/z_liftso the now-lower PLA shell underside lands on the bed and the per-specimen plate-grid cell accommodates the (larger) shell OD.cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, andbo/t3-prism-bo-batch{.scad, .csv, .json, .stl, -struts.stl, -cables.stl, -plate.png, -iso.png}.use_captive_coretoggle incad/t3-prism/README.mdandbo/README.md.TPU misalignment with joints
cables.stllowest world-Z was-cable_d/2whilestruts.stllowest was-max(strut_d, joint_d)/2; Bambu Studio's per-part auto-bed-placement therefore dropped the cables vs. the struts by ~3 mm — exactly the reported "horizontal cables going to the wrong z-height on the top and bottom".cables.stlthe same world-Z bounding box asstruts.stl:±core_od/2.cables_z_anchor()int3-prism.scad, equivalent inline cube in the BOSPECIMEN_TEMPLATE) that pins the cables STL bbox to exactly the struts STL extents.t3-prism-struts.stlz=[0.017, 121.283] vst3-prism-cables.stlz=[0.000, 121.300] — sub-mm match. Verified for BO batch:struts.stlz=[0.068, 116.925] vscables.stlz=[-0.000, 117.072] — sub-mm match across all 9 specimens.BO batch plate spacing + prime tower reserve (PR #35 comments 4513164299 / 4513445377)
PRIME_TOWER_RESERVE_X), drawn as a thin slab marker in the preview SCAD only (not into the struts/cables STLs).N_SPECIMENSback to 9 in a 3×3 grid with a 6 mm inter-cell air gap and a 50 mm prime-tower reserve strip on +X, keeping the layout inside the 300×320 mm usable plate area while leaving room for the wipe tower.bo/t3-prism-bo-batch.{scad,stl,json,csv},bo/t3-prism-bo-batch-{struts,cables}.stl,bo/t3-prism-bo-batch-{plate,iso}.png, andbo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mfend-to-end.bo/__pycache__/to.gitignore.Bonded captive-core joints + per-specimen object grouping (PR #35 comment 4513722886)
Addressing three asks from @sgbaird:
captive_core_clear = 0so the TPU core touches the PLA inner wall (was a 0.5 mm radial print-in-place gap → now bonded).captive_bore_clear = 0so the PLA bore is exactlycable_dand the TPU cable fills it without an annular gap (was 0.4 mm/side).bo/t3_prism_sobol_batch.pySPECIMEN_TEMPLATE.bo/t3_prism_sobol_batch.pynow:spec=-1filter to the generated batch SCAD so individual specimens can be rendered (-D spec=N).bo/per-specimen-stls/t3-prism-bo-specNN-{struts,cables}.stl(one pair per specimen).--assembleand post-processes the resulting.3mfwith a new_split_assembled_into_objects()helper that splits the single composite into N composite objects, each containing one struts part (extruder 1 / PLA) and one cables part (extruder 2 / TPU). Objects are not grouped; each can be moved independently while its PLA + TPU parts move together.bo/slices/t3-prism-bo-batch.H2D-MM-PLAstruts-TPUcables.3mf: 9<object>entries, each with two<part>s (struts→ext1, cables→ext2); 9<model_instance>entries on the plate;filament_type=['PLA','TPU'],filament_map_mode=Manual,filament_map=['1','2'].cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+ iso PNG, re-assembledcad/t3-prism/slices/t3-prism.H2D{,-PETG,-PETG.gcode,-MM,-MM-PLAcables,-MM-PLAstruts-TPUcables}.3mf, re-renderedbo/t3-prism-bo-batch-{plate,iso}.png+bo/t3-prism-bo-batch{,-struts,-cables}.stl+ the 18 per-specimen STLs.cad/t3-prism/README.mdandbo/README.mdto document the bonded captive-core geometry and the per-specimen object grouping.Accelerometer "igloo" mount on top vertices (PR #35 comment 4794790065)
Addressing @sgbaird's request to extrude a block on top of the top vertices with a pocket to secure the 3-axis accelerometer:
cad/t3-prism/t3-prism.scad(accel_mount()/accel_mount_local(), plusaccel_*parameters and helper functions) fused onto each of the three top vertices:accel_clear= 0.4 mm/side clearance for the adhesive bead and slide-in fit. Because the accelerometer is a physical part, its dimensions are absolute mm and are not multiplied byscale_factor.accel_dome) over the pocket to reduce friction against the acrylic drop-test plate.t3_prism_struts(), so it routes to extruder 1 in the MM variant. Toggleable viaadd_accel_mount(defaulttrue).cables_z_anchor()byaccel_rise()so the cables STL bounding box still matches the now-taller struts STL (verified sub-mm parity).cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, and regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(BambuStudio CLI v02.06.00.51).cad/t3-prism/README.md.Accelerometer mount: flat seat above joint apex + 0.2 mm tolerances (PR #35 comment 4805516634)
Addressing @sgbaird's feedback that the joint underneath was poking through the pocket so the accelerometer could not sit flat, and the request to change the tolerances to 0.2 mm top / 0.2 mm bottom:
apex − 0.5 mm), so the rounded captive-core joint shell poked up into the pocket.accel_mount()now places the pocket floor a fullaccel_floor(1.5 mm) above the joint apexV[2] + joint_outer_r(), whileaccel_mount_local()extends the body underside to-(accel_floor + accel_sink)so the walls still sinkaccel_sink(2 mm) past the apex and stay fused to the joint. Because the seat height is derived fromjoint_outer_r()(which trackscable_d/scale_factor), the floor clears the joint apex for every design and scale by default (verified at scale 1.5×: top-vertex apex z=112.65 < pocket floor z=114.15; struts STL z=[0.52, 131.63] vs cables STL z=[0.50, 131.64] — sub-mm parity preserved).accel_clear_topandaccel_clear_bot(0.2 mm each) for the pocket depth (accel_pocket_z() = accel_h + accel_clear_top + accel_clear_bot); the 0.4 mm lateral (XY) slide-in fitaccel_clearis unchanged. Updatedaccel_rise()to drop theaccel_sinkterm accordingly.cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(BambuStudio CLI; single-material sliced jobreturn_code=0, 2.90 h / 34.87 g; MM projectfilament_type=['PLA','TPU'],filament_map_mode=Manual,filament_map=['1','2']), and re-renderedt3-prism.H2D-PETG-supports.png.cad/t3-prism/README.md.Accelerometer mount: fill the outer void / remove the overhanging lip (PR #35 comment 4813200802)
Addressing @sgbaird's feedback that there was an outer void under the igloo that should be filled by extruding from the surface below up to the underside of the igloo, removing the lip around the edge that could be a stress point:
accel_mount()that convex-hulls the body's underside footprint down onto the joint sphere, so PLA runs continuously from the joint surface up to the underside of the igloo (void filled, overhanging lip removed). Because it is derived fromjoint_outer_r(), this is correct for every design/scale by default.captive_shell_id) and cable-bore cuts — the bores are lengthened so they always punch through the thicker fillet wall — so the captive TPU core and the three cable exits stay open. Struts STL volume topology is unchanged (manifold) and struts/cables world-Z parity is preserved (struts z=[0.516, 131.631] vs cables z=[0.500, 131.640]).accel_mount()now takes the per-vertexcable_dirsso the call site passesvertex_cable_dirs_t(i).cad/t3-prism/{t3-prism, t3-prism-struts, t3-prism-cables, t3-prism-struts-scaffold}.stl+t3-prism-iso.png, regenerated allcad/t3-prism/slices/*.3mfend-to-end viarender_print.sh(MM projectfilament_type=['PLA','TPU'],filament_map=['1','2'],filament_map_mode=Manual), and re-renderedt3-prism.H2D-PETG-supports.png.cad/t3-prism/README.md.