public void Copy(BoundingBox2D src) { MinX = src.MinX; MaxX = src.MaxX; MinY = src.MinY; MaxY = src.MaxY; IsntEmpty = src.IsntEmpty; }
public bool IsIntersect(BoundingBox2D bb, double clearance) { if (bb.MinX > MaxX + clearance || bb.MaxX < MinX - clearance) { return(false); } if (bb.MinY > MaxY + clearance || bb.MaxY < MinY - clearance) { return(false); } return(true); }
public static BoundingBox2D operator +(BoundingBox2D bb1, BoundingBox2D bb2) { BoundingBox2D result; if (!bb2.IsntEmpty) { result = new BoundingBox2D(bb1); return(result); } if (!bb1.IsntEmpty) { result = new BoundingBox2D(bb2); return(result); } double xMax = (bb1.MaxX > bb2.MaxX) ? bb1.MaxX : bb2.MaxX; double xMin = (bb1.MinX < bb2.MinX) ? bb1.MinX : bb2.MinX; double yMax = (bb1.MaxY > bb2.MaxY) ? bb1.MaxY : bb2.MaxY; double yMin = (bb1.MinY < bb2.MinY) ? bb1.MinY : bb2.MinY; result = new BoundingBox2D(xMin, xMax, yMin, yMax); return(result); }
public static int CheckEdgeIntersection(IList <Edge2D> edges) { uint edgeCnt = (uint)edges.Count; for (int iedge = 0; iedge < edgeCnt; iedge++) { Edge2D iE = edges[iedge]; if (iE.IsCrossEdgeSelf()) { return(1); } uint iPt0 = iE.GetVertexId(true); uint iPt1 = iE.GetVertexId(false); BoundingBox2D iBB = iE.GetBoundingBox(); for (int jedge = iedge + 1; jedge < edgeCnt; jedge++) { Edge2D jE = edges[jedge]; uint jPt0 = jE.GetVertexId(true); uint jPt1 = jE.GetVertexId(false); if ((iPt0 - jPt0) * (iPt0 - jPt1) * (iPt1 - jPt0) * (iPt1 - jPt1) != 0) { BoundingBox2D jBB = jE.GetBoundingBox(); if (jBB.MinX > iBB.MaxX || jBB.MaxX < iBB.MinX) { continue; } if (jBB.MinY > iBB.MaxY || jBB.MaxY < iBB.MinY) { continue; } if (!iE.IsCrossEdge(jE)) { continue; } return(1); } if (iPt0 == jPt0 && iPt1 == jPt1) { if (iE.IsCrossEdgeShareBothPoints(jE, true)) { return(1); } } else if (iPt0 == jPt1 && iPt1 == jPt0) { if (iE.IsCrossEdgeShareBothPoints(jE, false)) { return(1); } } else if (iPt0 == jPt0) { if (iE.IsCrossEdgeShareOnePoint(jE, true, true)) { return(1); } } else if (iPt0 == jPt1) { if (iE.IsCrossEdgeShareOnePoint(jE, true, false)) { return(1); } } else if (iPt1 == jPt0) { if (iE.IsCrossEdgeShareOnePoint(jE, false, true)) { return(1); } } else if (iPt1 == jPt1) { if (iE.IsCrossEdgeShareOnePoint(jE, false, false)) { return(1); } } continue; } } return(0); }