Skip to content

[family-assembly] swivel_ball_joint_mount: JW Winco GN 784 mounting clamp - #70

Open
sunzhenchuan007 wants to merge 2 commits into
BenchCAD-org:mainfrom
sunzhenchuan007:codex/swivel-ball-joint-mount
Open

[family-assembly] swivel_ball_joint_mount: JW Winco GN 784 mounting clamp#70
sunzhenchuan007 wants to merge 2 commits into
BenchCAD-org:mainfrom
sunzhenchuan007:codex/swivel-ball-joint-mount

Conversation

@sunzhenchuan007

@sunzhenchuan007 sunzhenchuan007 commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Family

  • Family: swivel_ball_joint_mount - multi-body assembly
  • Closes [family-assembly] swivel_ball_joint_mount #60
  • A JW Winco GN 784 aluminum mounting clamp with a captured ball, Type A or B threaded interface, and selectable clamp actuator.

Reference (issue #60 - JW Winco GN 784)

Engineering drawing Product photo Catalog table
GN 784 engineering drawing GN 784 Type A identification 1 product GN 784 metric table

Generated - easy / medium / hard grid

preview

Generated - four benchmark views

preview_views

Extremes - minimum and maximum sampled instances

preview_extremes

Components and assembly

Each component panel keeps the complete assembly context: the active component
is colored and the other components are ghosted. The fifth panel numbers the
components and shows the ball, base, and actuator insertion directions. The
sixth panel shows the final assembly with a distinct color for every component.

preview_parts

How it is parameterized - multi-body

build_housing(), build_ball(), build_base(), and build_actuator()
construct the four physical components independently. build() returns a
cq.Assembly with stable child names housing, ball, base, and
clamp_actuator. Those names match family.json.components, whose quantities
sum to the declared "solids": 4.

catalog_row selects one complete line from the eight printed GN 784 rows.
refine() jointly selects only a nonblank Type A or Type B thread alternative
from that row. Common dimensions, thread fields, r1/r2, l1, and torque
metadata are never mixed between catalog rows.

ball_type selects Type A with a central internal-thread hole or Type B with a
solid external stud. clamp_actuator selects identification 1, an adjustable
lever, or identification 2, a hex-socket set screw. swivel_angle selects a
deterministic static pose from vertical at 0 degrees to horizontal at 90
degrees.

The ball stem has a lower thin neck, a thicker d7 middle collar, and a thin
upper threaded member. The 90-degree housing slot is slightly wider than the
lower neck but remains narrower than the middle collar. The lower neck extends
beyond the housing wall before the middle collar begins, so the collar remains
outside the housing throughout the supported sweep.

Difficulty tiers preserve the issue contract:

  • easy: metric Type A rows with identification 2 and a vertical pose;
  • medium: all metric Type A/B alternatives, both actuators, and 0/30-degree poses;
  • hard: all eight rows including inch alternatives, both actuators, and 0/30/90-degree poses.

Verification

bench2 validate swivel_ball_joint_mount -> PASS

  • 5 complete parameters
  • easy / medium / hard: 4/4 seeds sample, check, build, and execute clean
  • all 8 complete catalog rows covered
  • Type A/B, actuator 1/2, and 0/30/90-degree poses covered
  • difficulties produce distinct programs
  • 9/12 unique sampled shapes
  • every sampled instance has exactly four non-degenerate solids

Exhaustive component and motion audit:

  • 25 valid catalog variants
  • all 87 blank row/type/thread combinations rejected
  • 950 poses checked: 25 variants x 2 actuators x 19 angles from 0 to 90 degrees
  • minimum slot-to-middle-collar diameter margin: 4.45 mm
  • minimum lower-neck-to-wall length margin: 3.83 mm
  • maximum pairwise component intersection volume: 0.000000000 mm^3

bench2 preview swivel_ball_joint_mount rendered all nine tier/seed images and
both extremes. A human inspected the standard previews, all component panels,
the exploded assembly, and the 0/30/90-degree CQ-editor poses.

The current host does not expose a uv executable, including outside the
sandbox. Both commands were therefore run through the same synchronized
environment's bench2.exe; CI will rerun the repository command.

Checklist

  • bench2 validate swivel_ball_joint_mount passes locally
  • I ran bench2 preview swivel_ball_joint_mount, inspected every image, and committed preview.png, preview_views.png, preview_extremes.png, and assembly evidence in preview_parts.png
  • Multi-body: family.json declares "solids": 4 and four named components
  • Every PARAM_SPEC.source and every check() constraint cites a real catalog rule or honestly says "proportion"; nothing is fabricated
  • PR touches only designs/swivel_ball_joint_mount/; reference drawings, photos, PDFs, STEP files, and research helpers remain outside the family
  • Commits are DCO-signed
  • AI-assisted: I reviewed the implementation and stand behind the source mapping, proportions, and constraints

Sources used

  • JW Winco GN 784 official product page
  • JW Winco GN 784 official catalog PDF
  • GN 784 printed metric table: all eight rows, Type A d2/d3, Type B d4, and common d1-coupled dimensions
  • Catalog usable-thread-depth note: 1.5D for metric internal threads and 1.2D for inch internal threads
  • Explicitly documented proportion formulas for the hidden socket seat, running clearances, base seat, ball-neck segmentation, actuator bodies, and omitted edge treatments

NOTES.md records the complete row coupling, all proportion formulas,
engineering constraints, component assembly basis, and deliberate deviations.

Signed-off-by: Zane <sunzhenchuan@mail.ustc.edu.cn>
Signed-off-by: Zane <sunzhenchuan@mail.ustc.edu.cn>
@github-actions

Copy link
Copy Markdown

Welcome, and thanks for the family PR! Three things that answer most questions:

  • No checks running? A maintainer must click Approve workflows once for your first PR — pending, not ignored.
  • Red gate? The message tells you the fix: click Details, or read the bench2 validate report comment posted after each run. Reproduce locally with uv sync && uv run bench2 validate <family> (debug help).
  • Scope: designs/<family>/ holds only the package files (reference drawings/photos go in the family issue), and the PR checklist must be fully ticked. Not done yet? Mark the PR as a Draft.

中文:红 ✗ 点 Details 或看 validate 报告评论;本地 uv run bench2 validate <family> 复现;参考图放 issue 不放 PR;没做完用 Draft。入门 → GETTING_STARTED.zh

@github-actions

Copy link
Copy Markdown

bench2 validate

swivel_ball_joint_mount

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(5 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 5 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_row reaches all 8 declared values (standard table fully covered)
  ✓ coverage: ball_type reaches all 2 declared values (standard table fully covered)
  ✓ coverage: clamp_actuator reaches all 2 declared values (standard table fully covered)
  ✓ coverage: swivel_angle reaches all 3 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, 4 solid(s) each (declares solids=4)
PASS — designs/swivel_ball_joint_mount

Previews: the previews artifact on this run.

@sunzhenchuan007 sunzhenchuan007 changed the title [family] Add swivel_ball_joint_mount [family-assembly] swivel_ball_joint_mount: JW Winco GN 784 mounting clamp Jul 27, 2026
@sunzhenchuan007
sunzhenchuan007 marked this pull request as ready for review July 28, 2026 13:10
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] swivel_ball_joint_mount

2 participants