|
@@ -60,7 +60,8 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
|
|
toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
|
|
toolbar.StrokeColor = colorsVM.PrimaryColor.ToColor();
|
|
}
|
|
}
|
|
|
|
|
|
- document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect.Inflate(1)), false);
|
|
|
|
|
|
+ document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect.Inflate(1)),
|
|
|
|
+ false);
|
|
document.TransformHandler.ShowHandles = false;
|
|
document.TransformHandler.ShowHandles = false;
|
|
document.TransformHandler.IsSizeBoxEnabled = true;
|
|
document.TransformHandler.IsSizeBoxEnabled = true;
|
|
return ExecutionState.Success;
|
|
return ExecutionState.Success;
|
|
@@ -207,7 +208,19 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
|
|
|
|
|
|
protected override void PrecisePositionChangeDrawingMode(VecD pos)
|
|
protected override void PrecisePositionChangeDrawingMode(VecD pos)
|
|
{
|
|
{
|
|
- var snapped = Snap(pos, startDrawingPos, true);
|
|
|
|
|
|
+ VecI adjustedPos = (VecI)pos.Floor();
|
|
|
|
+
|
|
|
|
+ VecD snapped = adjustedPos;
|
|
|
|
+ if (toolViewModel.DrawEven)
|
|
|
|
+ {
|
|
|
|
+ adjustedPos = GetSquaredPosition((VecI)startDrawingPos, adjustedPos);
|
|
|
|
+ VecD dir = (adjustedPos - startDrawingPos).Normalize();
|
|
|
|
+ snapped = Snap(adjustedPos, startDrawingPos, dir, true);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ snapped = Snap(adjustedPos, startDrawingPos, true);
|
|
|
|
+ }
|
|
|
|
|
|
noMovement = false;
|
|
noMovement = false;
|
|
|
|
|
|
@@ -244,6 +257,33 @@ internal abstract class ComplexShapeToolExecutor<T> : SimpleShapeToolExecutor wh
|
|
return snapped;
|
|
return snapped;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ protected VecD Snap(VecD pos, VecD adjustPos, VecD dir, bool highlight = false)
|
|
|
|
+ {
|
|
|
|
+ VecD snapped =
|
|
|
|
+ document.SnappingHandler.SnappingController.GetSnapPoint(pos, dir, out string snapXAxis,
|
|
|
|
+ out string snapYAxis);
|
|
|
|
+
|
|
|
|
+ if (highlight)
|
|
|
|
+ {
|
|
|
|
+ HighlightSnapAxis(snapXAxis, snapYAxis);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (snapped != VecI.Zero)
|
|
|
|
+ {
|
|
|
|
+ if (adjustPos.X < pos.X)
|
|
|
|
+ {
|
|
|
|
+ snapped -= new VecI(1, 0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (adjustPos.Y < pos.Y)
|
|
|
|
+ {
|
|
|
|
+ snapped -= new VecI(0, 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return snapped;
|
|
|
|
+ }
|
|
|
|
+
|
|
private void HighlightSnapAxis(string snapXAxis, string snapYAxis)
|
|
private void HighlightSnapAxis(string snapXAxis, string snapYAxis)
|
|
{
|
|
{
|
|
document.SnappingHandler.SnappingController.HighlightedXAxis = snapXAxis;
|
|
document.SnappingHandler.SnappingController.HighlightedXAxis = snapXAxis;
|