拼ui 一些业务逻辑x实现
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
|
||||
namespace EasyChart.Layers
|
||||
{
|
||||
internal static class DashedLineUtils
|
||||
{
|
||||
public static void DrawDashedLine(Painter2D painter, Vector2 start, Vector2 end, float dashLength, float gapLength, float offset)
|
||||
{
|
||||
if (painter == null) return;
|
||||
|
||||
Vector2 delta = end - start;
|
||||
float len = delta.magnitude;
|
||||
if (len <= 0.0001f) return;
|
||||
|
||||
float period = dashLength + gapLength;
|
||||
if (dashLength <= 0f || gapLength < 0f || period <= 0f)
|
||||
{
|
||||
painter.BeginPath();
|
||||
painter.MoveTo(start);
|
||||
painter.LineTo(end);
|
||||
painter.Stroke();
|
||||
return;
|
||||
}
|
||||
|
||||
Vector2 dir = delta / len;
|
||||
float normalizedOffset = offset;
|
||||
if (!Mathf.Approximately(period, 0f))
|
||||
{
|
||||
normalizedOffset = offset % period;
|
||||
if (normalizedOffset < 0f) normalizedOffset += period;
|
||||
}
|
||||
|
||||
float pos = -normalizedOffset;
|
||||
while (pos < len)
|
||||
{
|
||||
float segStart = Mathf.Max(pos, 0f);
|
||||
float segEnd = Mathf.Min(pos + dashLength, len);
|
||||
|
||||
if (segEnd > segStart)
|
||||
{
|
||||
Vector2 a = start + dir * segStart;
|
||||
Vector2 b = start + dir * segEnd;
|
||||
painter.BeginPath();
|
||||
painter.MoveTo(a);
|
||||
painter.LineTo(b);
|
||||
painter.Stroke();
|
||||
}
|
||||
|
||||
pos += period;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user