Files
FreeCADWasmDev/docs/current/PART_BOX_SELECTION_PROGRESS.md

3.9 KiB

Part Face Box Selection

2026-09-16. Part:desktop:Part_BoxSelection now passes executable native and browser business acceptance. The scope remains 1508 total requirements.

Reused Implementation

This continuation reuses the prior Part adapter, the existing native Std_BoxElementSelection handler, the mounted WebViewTask, native Part geometry and its Three.js display. It completes the earlier partial tests; there is no new selection engine or frontend substitute for native geometry. The desktop source at src/Mod/Part/Gui/BoxSelection.cpp supplies face-selection and hidden-object behavior. Web crossing/containment and add/remove modes use the already implemented document-view projection path.

Fixed Defects

  • Hidden objects were omitted from rendering but still considered for native rectangle hits. Picking now skips them as well.
  • getSubObject did not reliably reject an out-of-range shape reference such as Edge999. The native view handler validates Face/Edge/Vertex indices against actual topology counts before accepting a selection.
  • The mounted task lacked a show-all recovery action. It now restores hidden objects, and hiding selected faces targets their owning objects correctly.
  • Loading a document no longer supplies an empty frontend selection over the persisted native selection. View selection and visibility restore from FCStd.
  • Escape cancels an in-progress drag without a native request. Mode controls remain disabled while the native operation is active. Selection output wraps on narrow screens and controls have explicit accessible labels.
  • The earlier fixture positioned BoxB without creating it. Both independent documents now contain actual native boxes before selection is tested.

Evidence And Efficiency

business-evidence/adef41dba5a768e0d8863f94-20260916T065640854628.json contains 22 passing scenarios and 28 assertions. The runner closed the attributable issue runtime:a7dd841dda85b24919a2; status was not edited manually.

Native cases cover real face identity, translated objects, crossing versus containment, reverse drags, add/remove while preserving existing edge/whole object selections, hidden/show recovery, perspective projection, behind-camera rejection, invalid inputs, independent documents and FCStd view-state restore. Eleven existing adapter protocol checks are retained alongside the native dimension-variant cases.

Twelve browser scenarios use actual pointer drags and the mounted controls. They verify native request/response and callback state, selection modes, visibility, cancellation, resizing, nonblank geometry, OPFS saving, page reload, FCStd restoration and another real drag. Screenshots at 1440x900 and 390x844 are hashed in the evidence and were visually inspected. Native geometry remains visible without panel overflow. part-box-selection-owners.json separately confirms the shared repair in DocumentProbe and PartBox.

The existing adapter and native selection cases now share one adapter compile and one Node WASM instance. Browser persistence still intentionally reloads the page to prove restoration. Full selected acceptance took 30.683 seconds; an unchanged --reuse request took 0.147 seconds, read one report and executed zero cases. No IFC tests were run.

Only the two existing Part runtimes using the changed handler were incrementally built. TypeScript, geometry ownership checks, production Vite build and 47 business automation tests passed. Older failed evidence and browser diagnostics remain retained. A browser observation error was corrected by attaching to the actual versioned router module loaded by Vite, not a second module instance.

Continue

Builder, Chamfer and BoxSelection now each have their own passing evidence. Continue remaining uncovered workflows without repeating those unchanged requirements. Runtime revalidation is not new business delivery. Current counts come from the generated reconciliation; missing coverage is still substantial.