Example #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="pt1"></param>
 /// <param name="pt2"></param>
 public void Create(GPathPoint pt1, GPathPoint pt2)
 {
     helperList.Clear();
     helperList.Add(pt1);
     helperList.Add(pt2);
     Create(helperList);
 }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="points"></param>
        public void Create(IEnumerable <GPathPoint> points)
        {
            _segments.Clear();
            _points.Clear();
            splinePoints.Clear();
            _fullLength = 0;

            var et = points.GetEnumerator();

            if (!et.MoveNext())
            {
                return;
            }

            GPathPoint prev = et.Current;

            if (prev.curveType == GPathPoint.CurveType.CRSpline)
            {
                splinePoints.Add(prev.pos);
            }

            while (et.MoveNext())
            {
                GPathPoint current = et.Current;

                if (prev.curveType != GPathPoint.CurveType.CRSpline)
                {
                    Segment seg = new Segment();
                    seg.type    = prev.curveType;
                    seg.ptStart = _points.Count;
                    if (prev.curveType == GPathPoint.CurveType.Straight)
                    {
                        seg.ptCount = 2;
                        _points.Add(prev.pos);
                        _points.Add(current.pos);
                    }
                    else if (prev.curveType == GPathPoint.CurveType.Bezier)
                    {
                        seg.ptCount = 3;
                        _points.Add(prev.pos);
                        _points.Add(current.pos);
                        _points.Add(prev.control1);
                    }
                    else if (prev.curveType == GPathPoint.CurveType.CubicBezier)
                    {
                        seg.ptCount = 4;
                        _points.Add(prev.pos);
                        _points.Add(current.pos);
                        _points.Add(prev.control1);
                        _points.Add(prev.control2);
                    }
                    seg.length   = Vector3.Distance(prev.pos, current.pos);
                    _fullLength += seg.length;
                    _segments.Add(seg);
                }

                if (current.curveType != GPathPoint.CurveType.CRSpline)
                {
                    if (splinePoints.Count > 0)
                    {
                        splinePoints.Add(current.pos);
                        CreateSplineSegment();
                    }
                }
                else
                {
                    splinePoints.Add(current.pos);
                }

                prev = current;
            }

            if (splinePoints.Count > 1)
            {
                CreateSplineSegment();
            }
        }