public bool Intersect(sCurve c, double tol, out List <sXYZ> intPts, out List <sCurve> intCrvs) { bool doesIntersect = false; List <sXYZ> ips = new List <sXYZ>(); List <sCurve> ics = new List <sCurve>(); if (this.curveType == eCurveType.LINE && c.curveType == eCurveType.LINE) { sLine l1 = this as sLine; sLine l2 = c as sLine; sGeometryBase igeo; doesIntersect = l1.GetIntersection(l2, tol, out igeo); if (igeo is sLine) { ics.Add(igeo as sCurve); } else if (igeo is sXYZ) { ips.Add(igeo as sXYZ); } } else if (this.curveType == eCurveType.LINE && c.curveType == eCurveType.POLYLINE) { sPolyLine pl = c as sPolyLine; pl.GetIntersection(this, tol, out ips, out ics); } else if (this.curveType == eCurveType.POLYLINE && c.curveType == eCurveType.LINE) { sPolyLine pl = this as sPolyLine; pl.GetIntersection(c, tol, out ips, out ics); } else if (this.curveType == eCurveType.POLYLINE && c.curveType == eCurveType.POLYLINE) { sPolyLine pl = this as sPolyLine; pl.GetIntersection(c, tol, out ips, out ics); } intCrvs = ics; intPts = ips; return(doesIntersect); }
public bool GetIntersection(sCurve pl, double tolerance, out List <sXYZ> intPoints, out List <sCurve> intCurves) { bool doesIntersect = false; List <sXYZ> intPts = new List <sXYZ>(); List <sCurve> intCrvs = new List <sCurve>(); if (pl.curveType == eCurveType.LINE) { for (int i = 0; i < this.segments.Count; ++i) { sGeometryBase igeo; if (this.segments[i].GetIntersection(pl as sLine, tolerance, out igeo)) { if (igeo is sLine) { intCrvs.Add(igeo as sCurve); } if (igeo is sXYZ) { intPts.Add(igeo as sXYZ); } } } } else if (pl.curveType == eCurveType.POLYLINE) { sPolyLine pln = pl as sPolyLine; for (int i = 0; i < this.segments.Count; ++i) { List <sXYZ> tempIntPts = new List <sXYZ>(); for (int j = 0; j < pln.segments.Count; ++j) { sGeometryBase igeo; if (this.segments[i].GetIntersection(pln.segments[j], tolerance, out igeo)) { if (igeo is sLine) { intCrvs.Add(igeo as sCurve); } if (igeo is sXYZ) { tempIntPts.Add(igeo as sXYZ); } } } foreach (sXYZ ip in tempIntPts.OrderBy(p => p.ParameterOn(this.segments[i]))) { intPts.Add(ip); } } } else if (pl.curveType == eCurveType.NURBSCURVE) { } //cull if intpoint is on intcurve? intPoints = intPts; intCurves = intCrvs; return(doesIntersect); }