mirror of
https://github.com/ajisaacs/OpenNest.git
synced 2026-11-13 08:01:26 -05:00
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:
1 parent
cafb34b510
commit
fa6781d8b1
3 files changed
+4
-4
No files matched your search
Generated
+1
-1
@@ -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
|
||||
//
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in new issue
Block a user