public static Vector3[] GetTessPoints(this ICurve curve, double chordTol, double lengthTol, RangeDouble?domain = null) { bool isPeriodic; double end; bool isClosed; double start; if (domain == null) { curve.GetEndParams(out start, out end, out isClosed, out isPeriodic); } else { start = domain.Value.Min; end = domain.Value.Max; } var startPt = (double[])curve.Evaluate2(start, 0); var midPt = (double[])curve.Evaluate2((start + end) / 2, 0); var endPt = (double[])curve.Evaluate2(end, 0); var set0 = GetTessPotsAsVector3(curve, chordTol, lengthTol, startPt, midPt) .ToArray(); var set1 = GetTessPotsAsVector3(curve, chordTol, lengthTol, midPt, endPt) .ToArray(); return(set0.Concat(set1.Skip(1)).ToArray()); }
/// <summary> /// Return the domain of the curve. ie the [startParam, endParam] /// </summary> /// <param name="curve"></param> /// <returns></returns> public static double[] Domain(this ICurve curve) { bool isPeriodic; double end; bool isClosed; double start; curve.GetEndParams(out start, out end, out isClosed, out isPeriodic); return(new[] { start, end }); }
/// <summary> /// Return the length of the curve between the start /// and end parameters. /// </summary> /// <param name="curve"></param> /// <returns></returns> public static double Length(this ICurve curve) { bool isPeriodic; double end; bool isClosed; double start; curve.GetEndParams(out start, out end, out isClosed, out isPeriodic); return(curve.GetLength3(start, end)); }