Skip to content

[family-assembly] Add straub_grip_axial_restraint_pipe_coupling (components contract) - #228

Merged
BenchCAD merged 9 commits into
mainfrom
fix/straub-grip-components
Oct 12, 2026
Merged

BenchCAD merged 9 commits into
mainfrom
fix/straub-grip-components

Conversation

@BenchCAD

@BenchCAD BenchCAD commented Oct 3, 2026 •

Copy link
Copy Markdown
Collaborator

Supersedes #208, keeping its author: this branch is #208's commits by @jiashunwu1030 plus two maintainer commits. The contributor's fork does not accept maintainer pushes, so the fix lands here.

What changed: build() returned the eight bodies as one cq.Compound with only "solids": 8 in family.json, which the task4 pipeline cannot use. Now family.json declares components (casing 1, sleeve 1, anchoring_ring 2, d_bar_left 1, d_bar_right 1, lock_bolt 2) and build() returns a named cq.Assembly, with repeats named <component>_NN. The geometry and placement of every body are unchanged. preview_parts.png is regenerated for the named components. The two D bars are a left/right mirror pair (the bolt bores run along Y, oblique to each bar's ±105° cant; reflection in XZ matches exactly, no rotation does), so they are two components. bench2 validate: PASS (5 component types summing to solids=8; all 12 seeds build).


Family

  • Family: straub_grip_axial_restraint_pipe_coupling - family-assembly
  • Closes [family-assembly] straub_grip_axial_restraint_pipe_coupling #207
  • An eight-body Dixon / STRAUB GRIP-L axial-restraint pipe coupling with a hollow rolled casing, EPDM sealing sleeve, two anchoring rings, two hollow D-section closure bars, and two transverse lock bolts.

Reference - official manufacturer images (from Family Issue #207)

Official product photograph Official orthographic / section drawing
Official STRAUB GRIP-L product photograph Official STRAUB GRIP-L orthographic and section drawing

Generated - benchmark views (what the model sees)

preview_views.png

Generated - easy / medium / hard samples

Easy samples are the top row, medium samples the middle row, and hard samples the bottom row.

preview.png

Extremes - smallest & largest sampled instances

preview_extremes.png

Modeled component instances - medium seed 0

catalog_index 1 - STR20900. The panel separates all eight actual CadQuery bodies: casing, EPDM sleeve, left/right anchoring rings, left/right D-section closure bars, and two transverse lock bolts.

preview_parts.png

Schematic exploded view

straub_grip_exploded_assembly

Schematic exploded view of the eight modeled bodies; not an authoritative manufacturer assembly procedure.

How it is parameterized

  • catalog_index maps strictly to one complete Dixon catalog row (0-3); dimensions are not freely recombined.
  • fitted_pipe_od is refined within the selected row's published min/max pipe O.D. range.
  • Every sampled instance contains the same eight non-degenerate solids.

Verification (every sampled instance - eight non-degenerate solids)

catalog_index designation nominal size pipe O.D. published O.D. range working pressure B C DV R solids
0 STR20650 3 in 3.50 in 3.46-3.54 in 377 PSI 3.9 in 1.5 in 4.4 in 0.2 in 8
1 STR20900 4 in 4.50 in 4.46-4.54 in 319 PSI 3.9 in 1.5 in 5.5 in 0.4 in 8
2 STR21350 6 in 6.63 in 6.56-6.69 in 232 PSI 4.5 in 2.1 in 7.6 in 0.4 in 8
3 STR21400 8 in 8.63 in 8.54-8.71 in 232 PSI 5.6 in 3.1 in 9.8 in 0.4 in 8

bench2 validate straub_grip_axial_restraint_pipe_coupling ? PASS.

  • Catalog coverage: 4/4
  • Unique sampled shapes: 12/12
  • Solid count: 8 for every sampled instance

Modeling simplifications and constraints

  • Published B, C, DV, R, pipe O.D. values and min/max ranges are mapped directly from Dixon DPL424 p.965.
  • Individual sheet thicknesses, seal-lip profile, stamped-tooth pitch, D-bar cross-section, bolt-head detail, local pressed bolt-clearance windows, and thread forms are honest proportion-based simplifications because the sources do not dimension them.
  • The casing, sleeve and two anchoring rings retain a genuine continuous central bore; connected pipes are not product bodies and are omitted.
  • The optional strip insert and hidden internal details are not modeled.

Checklist

  • Local validation passes.
  • preview.png, preview_views.png, and preview_extremes.png were generated and manually checked.
  • family.json declares solids: 8; every body is non-degenerate.
  • The four catalog rows remain complete sourced combinations.
  • PR touches only designs/straub_grip_axial_restraint_pipe_coupling/ and contains the seven required assembly files.
  • Extra component and exploded images are GitHub user attachments, not repository files.
  • Commit is DCO-signed.
  • AI-assisted; contributor manually reviewed the model, constraints, and previews.

Sources used

jiashunwu1030 and others added 6 commits August 11, 2026 19:11
Signed-off-by: jiashunwu1030 <311667253+jiashunwu1030@users.noreply.github.com>
Signed-off-by: jiashunwu1030 <311667253+jiashunwu1030@users.noreply.github.com>
Signed-off-by: jiashunwu1030 <311667253+jiashunwu1030@users.noreply.github.com>
Signed-off-by: jiashunwu1030 <311667253+jiashunwu1030@users.noreply.github.com>
…urn a named cq.Assembly

The bodies were returned as one cq.Compound with only "solids" in family.json, which
the task4 pipeline rejects. Each body now becomes a named assembly leaf (repeats as
<component>_NN) and family.json lists the components. Geometry and placement unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mt5jAj6n1jL7VZjJtBtQSP
…ng for the named components

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mt5jAj6n1jL7VZjJtBtQSP
@github-actions

github-actions Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

bench2 validate

clevis_fork_head

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(10 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 10 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: d1 reaches all 8 declared values (standard table fully covered)
  ✓ coverage: is_long reaches all 2 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 9/12 unique shapes (25% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/clevis_fork_head

gn866_pneumatic_power_clamp

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 3 component type(s), quantities sum to solids=3
  ✓ pieces: build(29 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 29 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: size reaches all 3 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 8/12 unique shapes (33% duplicate)
  ✓ solids: every instance non-degenerate, 3 solid(s) each (declares solids=3)
PASS — designs/gn866_pneumatic_power_clamp

metric_plastic_cable_gland

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(10 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 10 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: size_index reaches all 8 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 8/12 unique shapes (33% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/metric_plastic_cable_gland

minifix_cam_housing

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(9 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 12 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: variant reaches all 8 declared values (standard table fully covered)
  ✓ coverage: min_wood_thickness reaches all 8 declared values (standard table fully covered)
  ✓ coverage: housing_height reaches all 8 declared values (standard table fully covered)
  ✓ coverage: bolt_axis_height reaches all 8 declared values (standard table fully covered)
  ✓ coverage: has_rim reaches all 2 declared values (standard table fully covered)
  ✓ coverage: has_markings reaches all 2 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/minifix_cam_housing

set_screw_shaft_collar

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(6 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 6 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: bore_d reaches all 15 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 7/12 unique shapes (42% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/set_screw_shaft_collar

single_friction_bearing_universal_joint

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 5 component type(s), quantities sum to solids=5
  ✓ pieces: build(11 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 11 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 9/12 unique shapes (25% duplicate)
  ✓ solids: every instance non-degenerate, 5 solid(s) each (declares solids=5)
PASS — designs/single_friction_bearing_universal_joint

single_row_deep_groove_ball_bearing

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 5 component type(s), param-valued quantities (ball_count) resolve per instance
  ✓ pieces: build(10 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 10 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: designation reaches all 6 declared values (standard table fully covered)
  ✓ coverage: bore_d reaches all 6 declared values (standard table fully covered)
  ✓ coverage: outer_d reaches all 6 declared values (standard table fully covered)
  ✓ coverage: width_B reaches all 4 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, [11, 12, 13] solid(s) each (components quantities resolved per instance)
PASS — designs/single_row_deep_groove_ball_bearing

slotted_din_rail

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(10 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 11 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 6/12 unique shapes (50% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/slotted_din_rail

speaker_pole_mount_socket

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(8 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 8 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: bore_d reaches all 2 declared values (standard table fully covered)
  ✓ coverage: flange_od reaches all 2 declared values (standard table fully covered)
  ✓ coverage: flange_t reaches all 2 declared values (standard table fully covered)
  ✓ coverage: depth reaches all 6 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 9/12 unique shapes (25% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/speaker_pole_mount_socket

stop_bar_tailpiece

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(11 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 11 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, 1 solid(s) each
PASS — designs/stop_bar_tailpiece

straub_grip_axial_restraint_pipe_coupling

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 6 component type(s), quantities sum to solids=8
  ✓ pieces: build(2 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 2 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: catalog_index reaches all 4 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, 8 solid(s) each (declares solids=8)
PASS — designs/straub_grip_axial_restraint_pipe_coupling

t_handle_ball_lock_pin

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 4 component type(s), quantities sum to solids=5
  ✓ pieces: build(9 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 9 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: catalog_index reaches all 30 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 6/12 unique shapes (50% duplicate)
  ✓ solids: every instance non-degenerate, 5 solid(s) each (declares solids=5)
PASS — designs/t_handle_ball_lock_pin

three_jaw_scroll_chuck

  ✓ family.json: keys + base_plane valid
  ✓ family.json components: 7 component type(s), quantities sum to solids=9
  ✓ pieces: build(24 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 24 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: catalog_index reaches all 12 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, 9 solid(s) each (declares solids=9)
PASS — designs/three_jaw_scroll_chuck

Previews: the previews artifact on this run.

HaozheZhang6 and others added 3 commits October 3, 2026 00:35
…r pair, two components

The bolt bores run along Y, oblique to each bar's +/-105 deg cant, so d_bar_02 is the mirror
image of d_bar_01 (symmetric difference 0 mm^3 after an XZ reflection; no proper rotation
registers them). Named d_bar_left / d_bar_right, quantity 1 each. Geometry unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mt5jAj6n1jL7VZjJtBtQSP
…ng (d_bar_left / d_bar_right)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mt5jAj6n1jL7VZjJtBtQSP
@BenchCAD
BenchCAD merged commit 035f467 into main Oct 12, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[family-assembly] straub_grip_axial_restraint_pipe_coupling

3 participants