public bool Split(Vector3 collPointWs, Vector3 collNormalWs, Shape2 shapeAbove, Shape2 shapeBelow) { var P0 = transform.InverseTransformPoint(collPointWs); var collNormalLocal = transform.InverseTransformDirection(collNormalWs); var n = CalculateSplitPlaneNormal(P0, collNormalLocal); shapeAbove.Clear(); shapeBelow.Clear(); if (SplitPoints(P0, n, shapeAbove, shapeBelow)) { foreach (var e in Edges) { e.Split(P0, n, m_NewPointsGetter, shapeAbove, shapeBelow); } foreach (var f in Faces) { f.Split(m_NewPointsGetter, shapeAbove, shapeBelow); } InitNewShape(shapeAbove, -n); InitNewShape(shapeBelow, n); return(true); } return(false); }