Files
OpenNest/docs/tabbed-cutouts.md
T
ajandClaude Opus 5.5 8c7dc41ce8 feat(planning): warn about tipping parts and retire legacy lead-in assignment
Plan Cutting is now the only automatic lead-in assignment, and parts the
support grid cannot hold level are reported wherever they lack a
steadying tab.

- Remove Assign Lead-ins (plate and nest), LeadInAssigner, the lead-in
  tool's Auto-Assign button and the Auto Tab size range; old settings
  with autoTab sizes still load
- Manual Place Lead-in tabs the clicked entry when support tabs are on
  and the grid cannot hold the part (SupportTabSettings)
- New PartSupport finding: Plan Cutting replay and best-effort plans
  warn when a drawing pin, a lead-in that does not fit or no single tab
  leaves a part unsteady; the pre-post review checks each placed
  program's outside tab gap. These warnings replace the advisory
  weak-tab notes; only the inside-corner tab note stays advisory, and
  never for a pin
- Pinned perimeters keep their pin but carry the support analysis
- Draw grid points as pixel-snapped squares without anti-aliasing
- Post fixtures build lead-ins through a test-only TestLeadIns helper
- Docs: support tabs, pre-post verification and planner notes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 23:54:40 -04:00

4.6 KiB

Tabbed cutouts

A tabbed cutout is a hole whose slug stays attached to the part by small uncut tabs, so it cannot drop or tip up while the sheet is cut and is knocked out afterwards. In the CAD Converter's Tabbed Cutouts panel, Add Tabbed Cutout, then click a circle or any line or arc of a closed hole. The clicked entity grows into the loop that continues as a single path and closes on itself (within 0.001); it must lie inside another closed outline drawn with it, so the part's perimeter is refused.

The dialog sets the tab count (at least 1) and tab width; tabs start evenly spaced, one centered on the middle of the hole's first edge, and can be dragged around the hole. Edit re-spaces the tabs only when the count or width changes. The view shades the slug, draws the cut pieces and tabs, and marks where each piece is pierced.

Geometry contract

TabbedCutoutBuilder (OpenNest.Core/TabbedCutouts) resolves each Drawing.TabbedCutouts entry against the entities being cut, after breakoffs:

  • The hole is chained into one loop with its joints made exact (a circle becomes two half arcs), oriented counterclockwise and started at its lowest-left vertex (smallest X, then Y). Tab centers are distances along that loop and wrap around it.
  • The loop is replaced, in contour order, by open pieces between tabs (keeping the hole's layer) and the tab spans themselves on the Tab layer (LayerType.Tab, SpecialLayers.Tab). Each tab follows the piece before it, so pieces and tabs close the hole exactly.
  • Tabs must not overlap and the loop must be longer than twice the total tab width.

Tabs are material, never cut

Tab spans bound material like Cut motions: SpecialLayers.IsMaterial keeps them, so area, material capture (LeadMaterialSnapshot) and the material-overlap check all see a closed hole. They are never cut. The plate view fills them but does not draw them as cuts.

Nesting is the exception: the slug stays attached while the sheet is cut, so nothing may be placed in the hole. Nesting and layout paths read material through NestingMaterial.ForNesting, which drops any closed contour with tab spans so the slug counts as part: part outlines and collision lines (PartGeometry, Part), the cutout router (JobPartGeometry, whose material area then includes the slug), fill expansion, best-fit, NestLayoutCheck and the GPU bitmaps. Programs without tab spans read exactly as before. A planned program has open pieces instead of a closed hole, so it bounds no hole either way.

Both Plan Cutting (PreparedContours) and the manual lead-in tool (ContourCuttingStrategy.Apply/ApplySingle) take a closed contour with tab spans out of the contour choices. Every full or prefix emission cuts its pieces after the break cuts and before the contours, never in single-contour probes:

  • Each piece is cut in the hole's own direction from the tab before it, entered from the slug with the internal lead-in; NoLeadIn pierces on the contour. There is no lead-out: the piece ends at a tab, which a run-out would cut into.
  • A lead-in that would reach back over the tab behind its piece is mirrored about the entry normal, so it approaches from the piece's side. On an arc, a lead ending in an arc would meet the cut tangentially, a contact verification cannot resolve, so the piece is pierced straight in from the same distance instead.

Verification

Plan Cutting certifies tabbed cutouts. Its contour accounting (ContourProgramVerifier) requires each piece to start exactly where a span between tabs starts and to cover that span whole, once; the ring counts as cut when every span is. Lead validation treats a piece's start like any contour joint. The released-contour check proves the open pieces retain their slug with the same open-cut proof pre-post review uses (see pre-post verification); planning still refuses its own tabs followed by a lead-out.

Pre-post review passes a planned tabbed cutout through that proof. A program that still has tab motions (the clean drawing program, never planned) is reported as incomplete, since a post may cut through them: Gravograph IS skips the Tab layer, while CI Fiber and Cincinnati cut any non-lead, non-scribe layer.

Persistence

Definitions persist on the drawing, as tabbedCutouts in the nest file, with the program already applied; tab motions are saved tagged :TAB. CadImporter.BuildDrawing applies them and copies them to the drawing; SourceEntities keep the original hole so a reopened drawing can be edited. Cutouts that do not resolve (hidden or missing hole, overlapping tabs) are listed with the reason and not applied, but stay on the drawing.