fix(options): name clone push orders by axis, not direction

The labels said left and down, but every push follows the plate quadrant:
on quadrant 4 "Push left, then down" pushed left, then up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ajandClaude Opus 5.5 committed 2026-11-11 14:03:31 -05:00
1 parent cafb34b510
commit fa6781d8b1
3 files changed
+4 -4

No files matched your search

+1 -1
View File
@@ -254,7 +254,7 @@
this.clonePlacementCombo.Size = new System.Drawing.Size(130, 24);
this.clonePlacementCombo.TabIndex = 15;
this.toolTip1.SetToolTip(this.clonePlacementCombo, "Where Clone Parts pushes the copy on Shift+click (part geometry) "
+ "or Ctrl+click (bounding boxes). Left and down mirror for plates whose origin is in another corner.");
+ "or Ctrl+click (bounding boxes). Every push goes toward the plate's origin corner.");
//
// serverGroupBox
//
+2 -2
View File
@@ -20,8 +20,8 @@ namespace OpenNest.Forms
private static readonly (SettleOrder Order, string Text)[] ClonePlacements =
{
(SettleOrder.ClosestToCorner, "Closest to origin"),
(SettleOrder.HorizontalFirst, "Push left, then down"),
(SettleOrder.VerticalFirst, "Push down, then left"),
(SettleOrder.HorizontalFirst, "Push horizontally first"),
(SettleOrder.VerticalFirst, "Push vertically first"),
};
public OptionsForm()
+1 -1
View File
@@ -18,7 +18,7 @@ Open/incomplete chains and ambiguous contacts conservatively block. Loops are re
- Shift-click while cloning parts settles the copied group toward the plate quadrant. If its starting bounds overlap any placed part's bounds, it skips the coarse bounding-box pass and uses geometry directly; otherwise each axis order starts with a coarse box pass. Each candidate then alternates geometry pushes until movement is negligible (at most 20 iterations). The coarse pass remains useful for avoiding sawtooth/rung traps when the starting boxes do not overlap.
- Ctrl-click settles the same way on bounding boxes alone (`SettlePlacement(boundingBoxesOnly: true)`): every push stops at the part spacing from obstacles' boxes, so the copy never nests into a neighbor's shape. A group whose box already overlaps an obstacle's box does not move.
- Options > Clone push placement (`ClonePlacementOrder`, a `SettleOrder` name) picks the axis order for both: *Closest to origin* (default) tries horizontal-first and vertical-first and keeps the group nearest the quadrant's work-area corner; *Push left, then down* and *Push down, then left* run only that order. Left and down mirror with the plate quadrant.
- Options > Clone push placement (`ClonePlacementOrder`, a `SettleOrder` name) picks the axis order for both: *Closest to origin* (default) tries horizontal-first and vertical-first and keeps the group nearest the quadrant's work-area corner; *Push horizontally first* and *Push vertically first* run only that order. Every push goes toward the origin's side for the plate quadrant (quadrant 4 pushes left and up).
## Regression coverage
`SlideContactTests` exercises cardinal line, translated line, reused edge-array, arbitrary-vector, native-entity, and both CPU batch paths. Cases include winding reversal, nonzero origins, rotated hooks, holes, separating circles, positive-distance grazing followed by a blocker, full-circle arc seams, concave/straight junctions, thin rings, and circle/line interior contact.