feat(block-editor): wire Rotation, Alignment and Flip parameter placement

Enable the existing palette rows and BPARAMETER choices. Rotation accepts a
center, picked or numeric radius, and picked or numeric default angle.
Alignment places a tangent direction from its base point. Flip places a
reflection line and state label, with native grip and state expressions.

Extend shared graph append/capacity checks for Flip's additional state node
while preserving existing subgraphs. Keep Polar/Rotation angle labels unique
in either placement order. Add editor graphics, extents and definition
reframing through the existing overlay/history/save paths.

This milestone implements native parameter placement and persistence.
Rotate/Flip action association, reference alignment/grip editing, parameter
property editing and parameter sets remain separate work.

Validation covers command and palette placement, cancellation, local/parent
undo, save/discard, native DWG/DXF objects, existing graph preservation and
the 17 research fixtures. Broader block/dock regressions and editor renders
are also checked.
This commit is contained in:
Karim Jerbi committed 2026-10-15 16:50:47 +01:00
1 parent 6dab5a7229
commit 72c762e944
19 files changed
+1483 -25

No files matched your search

+4
View File
@@ -1019,6 +1019,7 @@ pub(crate) fn selection_overlay<'a>(
pub(crate) struct AuthoringDimension {
pub lines: Vec<[Point; 2]>,
pub round_grips: Vec<Point>,
pub dimensions: Vec<[Point; 2]>,
pub labels: Vec<(Point, String)>,
pub grips: Vec<(Point, Option<Point>)>,
@@ -2410,6 +2411,9 @@ impl canvas::Program<Message> for SelectionCanvas {
..Default::default()
});
}
for point in &dimension.round_grips {
frame.fill(&canvas::Path::circle(*point, 3.5), color);
}
for (point, base) in &dimension.grips {
let marker = if let Some(base) = base {
let dx = point.x - base.x;