/// <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); }
/// <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(); } }