49 lines
4.5 KiB
Markdown
49 lines
4.5 KiB
Markdown
# Part simple cylinder gap completion
|
|
|
|
Date: 2026-09-17 (Asia/Shanghai)
|
|
Requirement: `Part:desktop:Part_SimpleCylinder`
|
|
|
|
## Implementation
|
|
|
|
Desktop references: `CmdPartSimpleCylinder` in `src/Mod/Part/Gui/CommandSimple.cpp`, `DlgPartCylinder.ui`, `DlgPartCylinderImp.cpp`, `Gui/InputVector.h`, and `Part.makeCylinder` in `AppPartPy.cpp`.
|
|
|
|
The new document action creates a static native `Part::Feature` using `BRepPrimAPI_MakeCylinder` with radius, height, origin and direction, matching the desktop command's geometry construction. Defaults are radius 10 mm, height 100 mm, origin (0,0,0), direction +Z. The direction is normalized by native `gp_Dir`, and arbitrary nonzero directions are supported.
|
|
|
|
Repeated creation uses native unique names and never overwrites an existing object. Creation commits one document transaction; invalid inputs abort without altering geometry or history. Lengths and coordinates follow the desktop numeric range, radius/height must be positive, and zero/nonfinite directions are rejected. Saved provenance describes the creation settings; the result is deliberately not a parametric Part::Cylinder.
|
|
|
|
Mounted controls provide lengths, position, axis presets, arbitrary direction components, read/cancel, undo/redo, FCStd save/open, OPFS persistence and interactive geometry. Read/cancel preserve pending document edits. The existing scene view fits the native result geometry.
|
|
|
|
Files: `PartSimpleCylinderDocument.h`, `DocumentProbe.cpp`, `part-document-facade.ts`, `part-desktop-adapter.ts`, `part-simple-cylinder-task.tsx`, and the workbench integration.
|
|
|
|
## First Acceptance
|
|
|
|
Command: `python3 tools/run_business_acceptance.py --module Part --ids Part:desktop:Part_SimpleCylinder --reuse`
|
|
|
|
Result: **1 requirement passed, 27 scenario records, 16.231 seconds**.
|
|
|
|
[Formal evidence](business-evidence/d8a6bf9b8bf7df4fd9a64cae-20260917T023927167006.json)
|
|
|
|
The suite shares one native document kernel and one browser workflow. It checks default, translated, reversed-axis, nonunit and oblique directions. Volume, surface area and center of mass are checked analytically; the symmetric geometric difference from desktop `Part.makeCylinder` is checked for zero volume. Cases also cover native type/topology, unique names, preserved sources, document isolation, history, invalid requests, direct native validation, pending read/cancel, FCStd restoration and further creation.
|
|
|
|
The first attempt exposed a comparison of nonpersisted point-sampling suggestions: the bounding-box cache can change when curved geometry is meshed. Those suggestions are excluded from cylinder history equality. Geometry, parameters, mesh, dependencies and undo/redo assertions remain strict. The earlier attempt remains in the evidence history.
|
|
|
|
Only DocumentProbe was rebuilt. An existing background build held the lock; it was allowed to finish before the foreground build acquired the lock, avoiding a frozen lock owner. Installed native libraries were reused. TypeScript checking, production Vite build and changed document-source whitespace checks passed. No previously passed requirement suite was executed.
|
|
|
|
## Visual Inspection
|
|
|
|
Playwright covered desktop 1440x900 and mobile 390x844 viewports, nonblank canvas pixels, changed render after rotation, mounted parameter controls and task overflow. Desktop and mobile screenshots were visually inspected.
|
|
|
|
- [Desktop geometry](part-simple-cylinder-business/2026-09-17T02-39-11-218Z/desktop-geometry.png)
|
|
- [Mobile task](part-simple-cylinder-business/2026-09-17T02-39-11-218Z/mobile-task.png)
|
|
- [Detailed cases](part-simple-cylinder-business/2026-09-17T02-39-11-218Z/result.json)
|
|
|
|
## Continuation
|
|
|
|
Snapshot: **207/1508 requirements declare executable coverage; 1301 remain uncovered**. This is coverage, not the count of currently fresh full-project acceptances. The full scope remains unchanged.
|
|
|
|
The existing background scheduler recently recorded first passes for PartDesign Duplicate Selection, Migrate, Move Feature and Move Feature in Tree. Projection work was present in shared files and was preserved.
|
|
|
|
The cylinder command does not cover all primitives or parametric cylinder editing. Keep prioritizing uncovered functionality and preserve `deferPreviouslyPassedValidation`. Do not rerun this requirement or historical IFC verification merely to refresh fingerprints. The full task remains unfinished.
|
|
|
|
After the handoff the service was thawed and verified active/unfrozen. Cycle 9294 started with a live child process (469520) and source-reading activity, selecting Join Features, Section Cut and Sweep.
|