public void Interpolate(List <Vector2> segmentPoints, float curvatureScale)
        {
            ControlPoints.Clear();

            if (segmentPoints.Count == 0)
            {
                segmentPoints.Add(Vector2.zero);
            }

            if (segmentPoints.Count == 1)
            {
                segmentPoints.Add(segmentPoints[0]);
            }

            Vector3 p0;
            Vector3 p1;
            Vector3 p2;
            Vector3 q0;
            Vector3 q1;
            Vector3 tangent;

            for (int i = 0; i < segmentPoints.Count; i++)
            {
                if (i == 0)
                {
                    p1      = segmentPoints[i];
                    p2      = segmentPoints[i + 1];
                    tangent = (p2 - p1);
                    q1      = p1 + curvatureScale * tangent;

                    ControlPoints.Add(p1);
                    ControlPoints.Add(q1);
                }
                else if (i == segmentPoints.Count - 1)
                {
                    p0      = segmentPoints[i - 1];
                    p1      = segmentPoints[i];
                    tangent = (p1 - p0);
                    q0      = p1 - curvatureScale * tangent;

                    ControlPoints.Add(q0);
                    ControlPoints.Add(p1);
                }
                else
                {
                    p0      = segmentPoints[i - 1];
                    p1      = segmentPoints[i];
                    p2      = segmentPoints[i + 1];
                    tangent = (p2 - p0).normalized;
                    q0      = p1 - curvatureScale * tangent * (p1 - p0).magnitude;
                    q1      = p1 + curvatureScale * tangent * (p2 - p1).magnitude;

                    ControlPoints.Add(q0);
                    ControlPoints.Add(p1);
                    ControlPoints.Add(q1);
                }
            }

            CurveCount = (ControlPoints.Count - 1) / 3;
        }
Example #2
0
        private void LoadButton_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();

            dialog.Filter = "XML file | *.xml";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                var serializer = new XmlSerializer(typeof(List <Point>));
                using (var stream = File.OpenRead(dialog.FileName))
                {
                    var points = (List <Point>)(serializer.Deserialize(stream));
                    ControlPoints.Clear();
                    foreach (Point p in points)
                    {
                        ControlPoints.Add(new Vertex(p.X, p.Y));
                    }

                    Start       = ControlPoints[0];
                    End         = ControlPoints[ControlPoints.Count - 1];
                    Start.Size  = 11;
                    End.Size    = 11;
                    Start.Color = Color.DarkRed;
                    End.Color   = Color.DarkRed;
                    RefreshCanvas();
                }
            }
        }
Example #3
0
 public void FromX(XElement xe)
 {
     Closed = bool.Parse(xe.Attribute("Closed").Value);
     Degree = 3;
     ControlPoints.Clear();
     foreach (var pt in xe.Element("ControlPoints").Elements())
     {
         ControlPoints.Add(XParser.Parse <Point2D>(pt));
     }
     Knots.FromX(xe.Element("Knots"));
 }
        /// <summary>
        /// Places the shape into the editing mode where the user can adjust the individual data points
        /// that define the shape.
        /// </summary>
        public override void StartEditing()
        {
            base.StartEditing();

            // Add the required control points
            ControlPoints.Clear();
            for (int n = 0; n < Points.Count; ++n)
            {
                AddHandlesForPoint(n, Points[n]);
            }
        }
Example #5
0
        /// <summary>
        /// Re-creates the control points of the scene view and references their
        /// drag point data.
        /// </summary>
        private void RebuildControlPoints()
        {
            ControlPoints.Clear();

            for (var i = 0; i < DragPointEditable.GetDragPoints().Length; ++i)
            {
                var cp = new ControlPoint(
                    DragPointEditable.GetDragPoints()[i],
                    GUIUtility.GetControlID(FocusType.Passive),
                    i,
                    DragPointEditable.GetDragPoints().Length >= 2 ? (float)i / (DragPointEditable.GetDragPoints().Length - 1) : 0.0f
                    );
                ControlPoints.Add(cp);
            }

            CurveTravellerControlId = GUIUtility.GetControlID(FocusType.Passive);
        }
        /// <summary>
        /// Places the shape into the editing mode where the user can adjust the individual data points
        /// that define the shape.
        /// </summary>
        public override void StartEditing()
        {
            base.StartEditing();

            // Add the required control points
            ControlPoints.Clear();
            for (int n = 0; n < Points.Count; ++n)
            {
                var point  = Points[n];
                var handle = new KimonoHandle(point.X - KimonoHandle.DrawOffset, point.Y - KimonoHandle.DrawOffset);
                handle.Index  = n;
                handle.Moved += (pt) =>
                {
                    // Move attached point
                    Points[handle.Index] = pt;
                };
                ControlPoints.Add(handle);
            }
        }
Example #7
0
        /*! \cond UNITY */

        void OnDestroy()
        {
            bool realDestroy = true;

#if UNITY_EDITOR
            if (EditorApplication.isPlayingOrWillChangePlaymode && !EditorApplication.isPlaying)
            {
                realDestroy = false;
            }
#endif
            if (realDestroy)
            {
                foreach (var cp in ControlPoints)
                {
                    cp.Connection = null;
                    cp.Disconnect();
                }
                ControlPoints.Clear();
            }
        }
Example #8
0
        private void GeneratePoints(object sender, EventArgs e)
        {
            int   count = (int)PointCounter.Value;
            float hx    = (End.X - Start.X) / (float)(count - 1);
            float hy    = (End.Y - Start.Y) / (float)(count - 1);
            float X     = Start.X;
            float Y     = Start.Y;

            ControlPoints.Clear();
            ControlPoints.Add(Start);
            for (int i = 1; i < count - 1; i++)
            {
                X += hx;
                Y += hy;
                ControlPoints.Add(new Vertex((int)X, (int)Y));
            }
            ControlPoints.Add(End);
            CalculateBezier();
            RefreshCanvas();
        }
        /// <summary>
        /// Re-creates the control points of the scene view and references their
        /// drag point data.
        /// </summary>
        private void RebuildControlPoints()
        {
            ControlPoints.Clear();
            var dragPoints = DragPointInspector.DragPoints;

            for (var i = 0; i < dragPoints.Length; ++i)
            {
                var cp = new ControlPoint(
                    dragPoints[i],
                    GUIUtility.GetControlID(FocusType.Passive),
                    i,
                    dragPoints.Length > 1
                                                ? (float)i / (dragPoints.Length - 1)
                                                : 0.0f
                    );
                ControlPoints.Add(cp);
            }
            CurveTravellerControlId = GUIUtility.GetControlID(FocusType.Passive);

            // persist prefab changes
            EditorUtility.SetDirty(MainComponent.gameObject);
            PrefabUtility.RecordPrefabInstancePropertyModifications(MainComponent as Object);
        }
Example #10
0
 /// <summary>
 /// Ends the editing mode.
 /// </summary>
 public virtual void EndEditing()
 {
     // Exit the editing state
     ControlPoints.Clear();
     Select();
 }
Example #11
0
 /// <summary>
 /// Clears the control points.
 /// </summary>
 public void Clear()
 {
     ControlPoints.Clear();
 }
Example #12
0
 public void Clear()
 {
     ControlPoints.Clear();
     BezierPoints = null;
 }
Example #13
0
        public void SetPatternType(int size, Size count, int[] xList, bool keepCorners)
        {
            _patternSize  = size;
            _patternCount = count;

            var eckenVorher = ControlPoints.Where(c => c.ControlPointType == ControlPointType.IsEcke).ToArray();

            ControlPoints.Clear();
            BoundingControlPoints.Clear();
            Enumerable.Range(0, count.Width * count.Height).ToList().ForEach(p => ControlPoints.Add(new ControlPoint()));

            var dy = _resolution.Height / (count.Height - 1);
            var y  = 0;

            for (var i = 0; i < ControlPoints.Count; i++)
            {
                if (i > 0 && i % count.Width == 0)
                {
                    y += dy;
                    if (y >= _resolution.Height)
                    {
                        y = _resolution.Height - 1;
                    }
                }
                ControlPoints[i].Y = ControlPoints[i].V = y;
            }

            for (var iy = 0; iy < count.Height; iy++)
            {
                for (var ix = 0; ix < count.Width; ix++)
                {
                    var index = iy * count.Width + ix;
                    ControlPoints[index].X = ControlPoints[index].U = xList[ix];
                }
            }

            BoundingControlPoints.AddRange(ControlPoints.Take(count.Width));
            for (var iy = 1; iy < count.Height; iy++)
            {
                BoundingControlPoints.Add(ControlPoints[iy * count.Width + (count.Width - 1)]);
            }
            for (var ix = 1; ix < count.Width - 1; ix++)
            {
                BoundingControlPoints.Add(ControlPoints[count.Height * count.Width - ix - 1]);
            }
            for (var iy = count.Height - 1; iy > 0; iy--)
            {
                BoundingControlPoints.Add(ControlPoints[iy * count.Width]);
            }

            ControlPoints[0].ControlPointType = ControlPointType.IsEcke;
            ControlPoints[count.Width - 1].ControlPointType = ControlPointType.IsEcke;
            ControlPoints[count.Width * (count.Height - 1)].ControlPointType = ControlPointType.IsEcke;
            ControlPoints[count.Width * count.Height - 1].ControlPointType   = ControlPointType.IsEcke;

            foreach (var cp in BlacklevelControlPoints)
            {
                cp.X = cp.U;
                cp.Y = cp.V;
            }

            if (keepCorners && eckenVorher.Any())
            {
                var ecken = ControlPoints.Where(c => c.ControlPointType == ControlPointType.IsEcke).ToArray();
                for (var i = 0; i < eckenVorher.Length; i++)
                {
                    ecken[i].X = eckenVorher[i].X;
                    ecken[i].Y = eckenVorher[i].Y;
                }
            }
            Interpolate(ControlPoints);

            MakeTriangleStrip();
            DetermineControlPointDirections();
        }