From 3e8bf7caeeeb1ba8d7d299f1e1d5f831ea18e434 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Wed, 15 May 2024 13:19:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Line3D=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/en/api.md | 2 +- Documentation~/zh/api.md | 2 +- .../Component/Animation/AnimationStyleHelper.cs | 16 ++++++++++++---- Runtime/Serie/Line/LineHelper.cs | 7 ++++--- Runtime/Serie/SerieContext.cs | 4 +++- Runtime/Serie/SerieHandler.cs | 2 +- 6 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Documentation~/en/api.md b/Documentation~/en/api.md index b82960a8..d2d5d46f 100644 --- a/Documentation~/en/api.md +++ b/Documentation~/en/api.md @@ -401,7 +401,7 @@ the animation of serie. support animation type: fadeIn, fadeOut, change, additio |public method|since|description| |--|--|--| |CheckDataAnimation()||public static float CheckDataAnimation(BaseChart chart, Serie serie, int dataIndex, float destProgress, float startPorgress = 0)| -|GetAnimationPosition()||public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip)| +|GetAnimationPosition()||public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip, ref float rate)| |UpdateAnimationType()||public static void UpdateAnimationType(AnimationStyle animation, AnimationType defaultType, bool enableSerieDataAnimation)| |UpdateSerieAnimation()||public static void UpdateSerieAnimation(Serie serie)| diff --git a/Documentation~/zh/api.md b/Documentation~/zh/api.md index bb453b2a..378015c0 100644 --- a/Documentation~/zh/api.md +++ b/Documentation~/zh/api.md @@ -401,7 +401,7 @@ slug: /api |API|版本|描述| |--|--|--| |CheckDataAnimation()||public static float CheckDataAnimation(BaseChart chart, Serie serie, int dataIndex, float destProgress, float startPorgress = 0)| -|GetAnimationPosition()||public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip)| +|GetAnimationPosition()||public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip, ref float rate)| |UpdateAnimationType()||public static void UpdateAnimationType(AnimationStyle animation, AnimationType defaultType, bool enableSerieDataAnimation)| |UpdateSerieAnimation()||public static void UpdateSerieAnimation(Serie serie)| diff --git a/Runtime/Component/Animation/AnimationStyleHelper.cs b/Runtime/Component/Animation/AnimationStyleHelper.cs index bc8a5bf5..568ab86a 100644 --- a/Runtime/Component/Animation/AnimationStyleHelper.cs +++ b/Runtime/Component/Animation/AnimationStyleHelper.cs @@ -37,7 +37,7 @@ namespace XCharts.Runtime animationType = attribute.type; enableSerieDataAnimation = attribute.enableSerieDataAddedAnimation; } - UpdateAnimationType(serie.animation, animationType,enableSerieDataAnimation); + UpdateAnimationType(serie.animation, animationType, enableSerieDataAnimation); } public static void UpdateAnimationType(AnimationStyle animation, AnimationType defaultType, bool enableSerieDataAnimation) @@ -48,12 +48,12 @@ namespace XCharts.Runtime animation.context.enableSerieDataAddedAnimation = enableSerieDataAnimation; } - public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip) + public static bool GetAnimationPosition(AnimationStyle animation, bool isY, Vector3 lp, Vector3 cp, float progress, ref Vector3 ip, ref float rate) { if (animation.context.type == AnimationType.AlongPath) { var dist = Vector3.Distance(lp, cp); - var rate = (dist - animation.context.currentPathDistance + animation.GetCurrDetail()) / dist; + rate = (dist - animation.context.currentPathDistance + animation.GetCurrDetail()) / dist; ip = Vector3.Lerp(lp, cp, rate); return true; } @@ -62,7 +62,15 @@ namespace XCharts.Runtime var startPos = isY ? new Vector3(-10000, progress) : new Vector3(progress, -10000); var endPos = isY ? new Vector3(10000, progress) : new Vector3(progress, 10000); - return UGLHelper.GetIntersection(lp, cp, startPos, endPos, ref ip); + if (UGLHelper.GetIntersection(lp, cp, startPos, endPos, ref ip)) + { + rate = Vector3.Distance(lp, ip) / Vector3.Distance(lp, cp); + return true; + } + else + { + return false; + } } } } diff --git a/Runtime/Serie/Line/LineHelper.cs b/Runtime/Serie/Line/LineHelper.cs index 9ade9211..25cd03ea 100644 --- a/Runtime/Serie/Line/LineHelper.cs +++ b/Runtime/Serie/Line/LineHelper.cs @@ -302,11 +302,12 @@ namespace XCharts.Runtime isBreak = true; var ip = Vector3.zero; var progress = serie.animation.GetCurrDetail(); - if (AnimationStyleHelper.GetAnimationPosition(serie.animation, isY, lp, cp, progress, ref ip)) + var rate = 0f; + if (AnimationStyleHelper.GetAnimationPosition(serie.animation, isY, lp, cp, progress, ref ip, ref rate)) cp = np = ip; } serie.context.lineEndPostion = cp; - serie.context.lineEndValue = AxisHelper.GetAxisPositionValue(grid, relativedAxis, cp); + serie.context.lineEndValueY = AxisHelper.GetAxisPositionValue(grid, relativedAxis, cp); var handled = false; var isClip = false; if (serie.clip) @@ -382,7 +383,7 @@ namespace XCharts.Runtime AddLineVertToVertexHelper(vh, clp, crp, lineColor, isVisualMapGradient, isLineStyleGradient, visualMap, serie.lineStyle, grid, axis, relativedAxis, true, lastDataIsIgnore, isIgnore); serie.context.lineEndPostion = cp; - serie.context.lineEndValue = AxisHelper.GetAxisPositionValue(grid, relativedAxis, cp); + serie.context.lineEndValueY = AxisHelper.GetAxisPositionValue(grid, relativedAxis, cp); break; } } diff --git a/Runtime/Serie/SerieContext.cs b/Runtime/Serie/SerieContext.cs index e7ff4551..cf67a6c6 100644 --- a/Runtime/Serie/SerieContext.cs +++ b/Runtime/Serie/SerieContext.cs @@ -57,7 +57,9 @@ namespace XCharts.Runtime /// 线段终点 /// public Vector3 lineEndPostion; - public double lineEndValue; + public double lineEndValueX; + public double lineEndValueY; + public double lineEndValueZ; /// /// 内半径 /// diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index fd232af3..fa08c07a 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -557,7 +557,7 @@ namespace XCharts.Runtime m_EndLabel.SetActive(active); if (active) { - var value = serie.context.lineEndValue; + var value = serie.context.lineEndValueY; var content = SerieLabelHelper.GetFormatterContent(serie, null, value, 0, endLabelStyle, Color.clear); m_EndLabel.SetText(content);