diff --git a/OpenNest/Forms/OptionsForm.Designer.cs b/OpenNest/Forms/OptionsForm.Designer.cs index 1a07e013..3e9d6832 100644 --- a/OpenNest/Forms/OptionsForm.Designer.cs +++ b/OpenNest/Forms/OptionsForm.Designer.cs @@ -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 // diff --git a/OpenNest/Forms/OptionsForm.cs b/OpenNest/Forms/OptionsForm.cs index bc9634e1..3884ad0e 100644 --- a/OpenNest/Forms/OptionsForm.cs +++ b/OpenNest/Forms/OptionsForm.cs @@ -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() diff --git a/docs/geometry/directional-slides.md b/docs/geometry/directional-slides.md index f5269a74..4c10f04e 100644 --- a/docs/geometry/directional-slides.md +++ b/docs/geometry/directional-slides.md @@ -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.