修复PieChart在设置Space参数后动画绘制异常的问题

This commit is contained in:
monitor1394
2020-04-16 09:36:03 +08:00
parent 753b1d5b2b
commit 6290b9ae91

View File

@@ -655,17 +655,24 @@ namespace XCharts
realCenter += borderDiff * middleDire; realCenter += borderDiff * middleDire;
borderAngle = 2 * Mathf.Asin(borderWidth / (2 * radius)); borderAngle = 2 * Mathf.Asin(borderWidth / (2 * radius));
realStartAngle = realStartAngle + borderAngle; realStartAngle = realStartAngle + borderAngle;
realToAngle = realToAngle - borderAngle;
if (realToAngle < realStartAngle)
{
realToAngle = realStartAngle;
p2 = GetPos(p, radius, realStartAngle);
}
else
{
var borderX1 = GetPos(p, radius, realStartAngle); var borderX1 = GetPos(p, radius, realStartAngle);
DrawPolygon(vh, realCenter, spaceCenter, p2, borderX1, borderColor); DrawPolygon(vh, realCenter, spaceCenter, p2, borderX1, borderColor);
p2 = borderX1; p2 = borderX1;
realToAngle = realToAngle - borderAngle;
if (realToAngle < realStartAngle) realToAngle = realStartAngle;
var borderX2 = GetPos(p, radius, realToAngle); var borderX2 = GetPos(p, radius, realToAngle);
var pEnd = GetPos(p, radius, toAngle - spaceAngle); var pEnd = GetPos(p, radius, toAngle - spaceAngle);
DrawPolygon(vh, realCenter, borderX2, pEnd, spaceCenter, borderColor); DrawPolygon(vh, realCenter, borderX2, pEnd, spaceCenter, borderColor);
} }
} }
}
float segmentAngle = (realToAngle - realStartAngle) / segments; float segmentAngle = (realToAngle - realStartAngle) / segments;
for (int i = 0; i <= segments; i++) for (int i = 0; i <= segments; i++)
{ {
@@ -675,6 +682,8 @@ namespace XCharts
p2 = p3; p2 = p3;
} }
if (needBorder || needSpace) if (needBorder || needSpace)
{
if (realToAngle > realStartAngle)
{ {
var borderX2 = p + radius * GetDire(realToAngle); var borderX2 = p + radius * GetDire(realToAngle);
DrawTriangle(vh, realCenter, p2, borderX2, toColor, color, color); DrawTriangle(vh, realCenter, p2, borderX2, toColor, color, color);
@@ -687,6 +696,7 @@ namespace XCharts
} }
} }
} }
}
private static Vector3 GetPos(Vector3 center, float radius, float angle, bool isDegree = false) private static Vector3 GetPos(Vector3 center, float radius, float angle, bool isDegree = false)
{ {