4.4 KiB
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, andsrc/Mod/Part/App/PartFeatures.cpp. - The current-document route creates and edits actual
Part::RuledSurfaceobjects. NativeCurve1,Curve2, andOrientationproperties 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.
readRuledSurfacereturns 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.
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.
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.