49 lines
4.4 KiB
Markdown
49 lines
4.4 KiB
Markdown
# Part ruled surface gap completion
|
|
|
|
Date: 2026-09-17 (Asia/Shanghai)
|
|
Requirement: `Part:desktop:Part_RuledSurface`
|
|
|
|
## Implementation
|
|
|
|
- Desktop reference: `freecad-source/src/Mod/Part/Gui/Command.cpp`, `CmdPartRuledSurface::activated`, and `src/Mod/Part/App/PartFeatures.cpp`.
|
|
- The current-document route creates and edits actual `Part::RuledSurface` objects. Native `Curve1`, `Curve2`, and `Orientation` properties retain dependencies and recompute with source edits.
|
|
- Supports whole edges/wires, two subedges of one object, separate object subelements, and transformed native links. Automatic, Forward, and Reversed orientations use the desktop implementation.
|
|
- Rejects missing/noncurve/foreign sources, duplicate curves, invalid orientation, replacement of unrelated objects, active tasks, and direct/indirect dependency cycles. Failed mutations abort the native transaction.
|
|
- `readRuledSurface` returns renderable geometry without recomputing pending document edits. Cancel also preserves pending state and history.
|
|
- Mounted controls provide curve/subelement selection, curve swapping, feature editing, undo/redo, FCStd save/open, OPFS persistence, and native Three.js geometry. Undo/redo refreshes the feature's editable values.
|
|
|
|
Files: `PartRuledSurfaceDocument.h`, integration in `DocumentProbe.cpp`, `part-document-facade.ts`, `part-desktop-adapter.ts`, `part-ruled-surface-task.tsx`, and `workbench-shell.tsx`.
|
|
|
|
## First Acceptance
|
|
|
|
Command: `python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_RuledSurface --reuse`
|
|
|
|
Result: **1 requirement passed, 31 scenario records**, 21.930 seconds.
|
|
|
|
Evidence: [formal report](business-evidence/b6b00fa3032c20089cba49ff-20260916T234359669392.json).
|
|
Cases: `tools/part-ruled-surface-business-cases.mjs`, included in the Part acceptance contract and selected-case dispatcher.
|
|
|
|
Assertions cover analytic areas and topology, native link resolution, source recompute, all orientations, preservation of other objects/documents, transaction rollback, history, dirty read/cancel, native FCStd restoration, mounted browser controls, and browser storage restoration.
|
|
|
|
The first attempt exposed an inappropriate reuse of the inspection-only read path, which omits face meshes. The dedicated nonrecomputing read action corrected this before the passing run. The failed attempt remains in the evidence history.
|
|
|
|
Only the DocumentProbe target was rebuilt; existing OCCT/Import libraries were reused. TypeScript checking and production Vite build passed. Each acceptance attempt loaded one native kernel for all native scenarios, then one browser workflow; old requirement suites were not run.
|
|
|
|
## Visual Inspection
|
|
|
|
The formal test scene includes an auxiliary box that occludes the ruled surfaces. A focused visual inspection used only two spatial curves and the resulting surface; this was a continuation of this new feature's visual inspection, not a repeat of the historical acceptance suites.
|
|
|
|
- [Desktop surface](part-ruled-surface-business/2026-09-16T23-43-38-004Z/unoccluded-desktop.png)
|
|
- [Mobile task and surface](part-ruled-surface-business/2026-09-16T23-43-38-004Z/unoccluded-mobile-task.png)
|
|
- [Pixel and rotation checks](part-ruled-surface-business/2026-09-16T23-43-38-004Z/visual-inspection.json)
|
|
|
|
Viewports: 1440x900 and 390x844. Selected-surface pixels were measured independently from the background (18,090 desktop, 11,827 mobile); rotation changed the rendered image. The task had no horizontal overflow, and the controls remained separate from the canvas. Screenshots were visually inspected.
|
|
|
|
## Queue Handoff
|
|
|
|
Snapshot: **195/1508 requirements declare executable coverage; 1313 remain uncovered**. This is coverage, not a claim of 195 currently fresh acceptances. The requirement universe remains 1508 and no out-of-scope IDs were counted.
|
|
|
|
During this work the existing scheduler also recorded first passing evidence for `PartDesign_MultiTransform` and `Sketcher_MapSketch`. The service was temporarily frozen to serialize shared changes and evidence writes, then thawed. Cycle 9276 hit its idle timeout after the pause; the scheduler advanced autonomously to cycle 9277 with a live child process (370298). Service state was verified as active/running and unfrozen. Keep `prioritizeCoverageGaps` and `deferPreviouslyPassedValidation` enabled. Do not rerun this requirement, old IFC cases, or other historical passes merely to refresh fingerprints.
|
|
|
|
No claim of complete Part parity or completion of the overall 1508-item task is made.
|