UnityEditor.NormalCurveRenderer.DrawPolyLine C# (CSharp) Method

DrawPolyLine() public static method

public static DrawPolyLine ( Matrix4x4 transform, float minDistance ) : void
transform UnityEngine.Matrix4x4
minDistance float
return void
        public static void DrawPolyLine(Matrix4x4 transform, float minDistance, params Vector3[] points)
        {
            if (Event.current.type == EventType.Repaint)
            {
                Color c = Handles.color * new Color(1f, 1f, 1f, 0.75f);
                HandleUtility.ApplyWireMaterial();
                GL.PushMatrix();
                GL.MultMatrix(Handles.matrix);
                GL.Begin(1);
                GL.Color(c);
                Vector3 v = transform.MultiplyPoint(points[0]);
                for (int i = 1; i < points.Length; i++)
                {
                    Vector3 vector2 = transform.MultiplyPoint(points[i]);
                    Vector3 vector3 = v - vector2;
                    if (vector3.magnitude > minDistance)
                    {
                        GL.Vertex(v);
                        GL.Vertex(vector2);
                        v = vector2;
                    }
                }
                GL.End();
                GL.PopMatrix();
            }
        }

Usage Example

        public static void DrawCurveWrapped(float minTime, float maxTime, float rangeStart, float rangeEnd, WrapMode preWrap, WrapMode postWrap, Color color, Matrix4x4 transform, Vector3[] points, Color wrapColor)
        {
            if (points.Length == 0)
            {
                return;
            }
            int num;
            int num2;

            if (rangeEnd - rangeStart != 0f)
            {
                num  = Mathf.FloorToInt((minTime - rangeStart) / (rangeEnd - rangeStart));
                num2 = Mathf.CeilToInt((maxTime - rangeEnd) / (rangeEnd - rangeStart));
            }
            else
            {
                preWrap  = WrapMode.Once;
                postWrap = WrapMode.Once;
                num      = ((minTime >= rangeStart) ? 0 : -1);
                num2     = ((maxTime <= rangeEnd) ? 0 : 1);
            }
            int num3 = points.Length - 1;

            Handles.color = color;
            List <Vector3> list = new List <Vector3>();

            if (num <= 0 && num2 >= 0)
            {
                NormalCurveRenderer.DrawPolyLine(transform, 2f, points);
            }
            else
            {
                Handles.DrawPolyLine(points);
            }
            Handles.color = new Color(wrapColor.r, wrapColor.g, wrapColor.b, wrapColor.a * color.a);
            if (preWrap == WrapMode.Loop)
            {
                list = new List <Vector3>();
                for (int i = num; i < 0; i++)
                {
                    for (int j = 0; j < points.Length; j++)
                    {
                        Vector3 vector = points[j];
                        vector.x += (float)i * (rangeEnd - rangeStart);
                        vector    = transform.MultiplyPoint(vector);
                        list.Add(vector);
                    }
                }
                list.Add(transform.MultiplyPoint(points[0]));
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (preWrap == WrapMode.PingPong)
            {
                list = new List <Vector3>();
                for (int k = num; k < 0; k++)
                {
                    for (int l = 0; l < points.Length; l++)
                    {
                        if ((float)(k / 2) == (float)k / 2f)
                        {
                            Vector3 vector2 = points[l];
                            vector2.x += (float)k * (rangeEnd - rangeStart);
                            vector2    = transform.MultiplyPoint(vector2);
                            list.Add(vector2);
                        }
                        else
                        {
                            Vector3 vector3 = points[num3 - l];
                            vector3.x = -vector3.x + (float)(k + 1) * (rangeEnd - rangeStart) + rangeStart * 2f;
                            vector3   = transform.MultiplyPoint(vector3);
                            list.Add(vector3);
                        }
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (num < 0)
            {
                Handles.DrawPolyLine(new Vector3[]
                {
                    transform.MultiplyPoint(new Vector3(minTime, points[0].y, 0f)),
                    transform.MultiplyPoint(new Vector3(Mathf.Min(maxTime, points[0].x), points[0].y, 0f))
                });
            }
            if (postWrap == WrapMode.Loop)
            {
                list = new List <Vector3>();
                list.Add(transform.MultiplyPoint(points[num3]));
                for (int m = 1; m <= num2; m++)
                {
                    for (int n = 0; n < points.Length; n++)
                    {
                        Vector3 vector4 = points[n];
                        vector4.x += (float)m * (rangeEnd - rangeStart);
                        vector4    = transform.MultiplyPoint(vector4);
                        list.Add(vector4);
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (postWrap == WrapMode.PingPong)
            {
                list = new List <Vector3>();
                for (int num4 = 1; num4 <= num2; num4++)
                {
                    for (int num5 = 0; num5 < points.Length; num5++)
                    {
                        if ((float)(num4 / 2) == (float)num4 / 2f)
                        {
                            Vector3 vector5 = points[num5];
                            vector5.x += (float)num4 * (rangeEnd - rangeStart);
                            vector5    = transform.MultiplyPoint(vector5);
                            list.Add(vector5);
                        }
                        else
                        {
                            Vector3 vector6 = points[num3 - num5];
                            vector6.x = -vector6.x + (float)(num4 + 1) * (rangeEnd - rangeStart) + rangeStart * 2f;
                            vector6   = transform.MultiplyPoint(vector6);
                            list.Add(vector6);
                        }
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (num2 > 0)
            {
                Handles.DrawPolyLine(new Vector3[]
                {
                    transform.MultiplyPoint(new Vector3(Mathf.Max(minTime, points[num3].x), points[num3].y, 0f)),
                    transform.MultiplyPoint(new Vector3(maxTime, points[num3].y, 0f))
                });
            }
        }
All Usage Examples Of UnityEditor.NormalCurveRenderer::DrawPolyLine