public void Split(Vector3 P0, Vector3 n, NewPointsGetter newPoints, Shape2 shapeAbove, Shape2 shapeBelow) { if (Point2.PointsBridgePlane(EdgeP1, EdgeP2)) { Vector3 x; Utils.LinePlaneIntersect(n, P0, EdgeP1.Point, EdgeP2.Point, out x); SplitInHalf(x, newPoints, shapeAbove, shapeBelow); } else if (Point2.BothAbove(EdgeP1, EdgeP2)) { shapeAbove.Edges.Add(this); } else if (Point2.BothBelow(EdgeP1, EdgeP2)) { shapeBelow.Edges.Add(this); } else if (Point2.BothInside(EdgeP1, EdgeP2)) { // do nothing - new edges for each shape will be created by the face split } else { SplitAtEnd(newPoints, shapeAbove, shapeBelow); } }