4.5 KiB
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.
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.
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.