mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
Boundary画线算法,精度导致的问题修复
This commit is contained in:
@@ -53,12 +53,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
var p0 = GetFirstSegment(source, sourceOrientation, gridCellSize, gridMargin);
|
||||
var p1 = GetFirstSegment(sink, sinkOrientation, gridCellSize, gridMargin);
|
||||
|
||||
if (p0 == p1)
|
||||
if (p0.Equals(p1))
|
||||
return points;
|
||||
|
||||
var p2 = new PointBase(GetNearestCross(p0.X, p1.X, gridCellSize.Width, gridMargin.Width), GetNearestCross(p0.Y, p1.Y, gridCellSize.Height, gridMargin.Height));
|
||||
var p3 = new PointBase(GetNearestCross(p1.X, p0.X, gridCellSize.Width, gridMargin.Width), GetNearestCross(p1.Y, p0.Y, gridCellSize.Height, gridMargin.Height));
|
||||
if (p2 == p3)
|
||||
if (p2.Equals(p3))
|
||||
{
|
||||
points.Add(p0);
|
||||
points.Add(p2);
|
||||
@@ -93,12 +93,12 @@ namespace AIStudio.Wpf.DiagramDesigner
|
||||
|
||||
public static double GetNearestCross(double a, double b, double cellSize, double margin)
|
||||
{
|
||||
if (Math.Abs(a - b) < 0.0001 && (int)((a - margin)/ cellSize) == ((a - margin) / cellSize))
|
||||
if (Math.Abs(a - b) < 0.0001 && (int)(Math.Round((a - margin)/ cellSize, 3)) == (Math.Round((a - margin) / cellSize,3)))
|
||||
return a;
|
||||
else if (a < b)
|
||||
return Math.Ceiling((a - margin) / cellSize) * cellSize + margin;
|
||||
return Math.Ceiling(Math.Round((a - margin) / cellSize, 3)) * cellSize + margin;
|
||||
else
|
||||
return Math.Floor((a - margin) / cellSize) * cellSize + margin;
|
||||
return Math.Floor(Math.Round((a - margin) / cellSize, 3)) * cellSize + margin;
|
||||
}
|
||||
|
||||
public static PointBase SegmentMiddlePoint(PointBase p1, PointBase p2)
|
||||
|
||||
Reference in New Issue
Block a user