Vis Automations · In-app tool, Automation Scripts menu
Fastener Stacks
Finds every fastener in an assembly, groups touching fasteners into stacks, groups identical stacks into families, and shows each family as a colored Vis group you can select.
Verification passing on Vis 2606.0 build 26134 + 2606.2610 · 2026-10-29 · repo tc-vis-automation 9f1b0af · Goals 1 to 6 verified from inside Vis and headless (16/16); the bonus goals are not started.
Two runs. From inside Vis: the panel launched from Menu › Automation Scripts and clicked through all four buttons, each outcome read back from Vis. And headless: tools/test_fastener_stacks.py owns its own Vis (it refuses to run while one is open), runs every command and checks group membership, materials, the selected-node list and the pixels of zoomed captures. tools/test_fastener_stacks.py: 16 of 16 checks pass.
The model: A wing flap assembly: 3,615 part nodes, 1,390 root children; 3,570 fastener instances in 11 part-number families plus 45 structural parts (vis_census.py).
- Vis
- 2606.0 build 26134 + 2606.2610
- Run
- 2026-10-29 · EXERCISED
- Checks
- 8 of 8 hold
- Overall
- All checks hold
- Source
- tc-vis-automation README.md (Fastener Stacks section) at commit 9f1b0af, inapp/fastener_stacks.py, inapp/fastener_stacks_panel.py, tools/test_fastener_stacks.py; model census from commit 22aee3a
| Result | Check |
|---|---|
| Holds | Identify fasteners1,352 fastener instances by part-number rules; 45 structural parts excluded. |
| Holds | Fasteners in the same stack1,063 stacks by bounding-box contact: 965 single, 16 of 2, 61 of 4, 19 of 5, 2 of 8. |
| Holds | Similar stacks grouped27 families: same part numbers in the same order along the axis, either direction. One Vis group per family, each group's count read back. |
| Holds | Select a stack in VisPanel Select stack from one picked rivet: 4 of 4 selected. |
| Holds | Select a group of stacksPanel Select group: 204 of 204 instances, 51 stacks. |
| Holds | One color per familyPer-instance material; the 6 largest families render within 0.015 of their hue, checked zoomed. |
| Holds | ClearPanel Clear: 27 groups removed and 1,352 materials restored. |
| Holds | Headless end-to-end testtools/test_fastener_stacks.py: 16 of 16. |
In the Vis window
The panel driven by hand in a live session on 2026-10-29. File name and local path masked.
Corrected
An earlier run on the same day recorded two failures: a fasteners-only whole-model capture that rendered blank, and a test that overran its watchdog at the clear step. Both are resolved. The blank capture was Vis not drawing sub-pixel parts in a whole-assembly view (1 to 2 px rivets over the full flap), so color is now checked zoomed per stack. Coloring moved from group material to per-instance material, which also made Clear restore each instance.