private Face FindClosestFace(GeoPoint toPoint) { Face[] near = faceOcttree.GetObjectsFromBox(new BoundingCube(toPoint, precision)); double minDist = double.MaxValue; Face found = null; for (int i = 0; i < near.Length; i++) { GeoPoint2D uv = near[i].Surface.PositionOf(toPoint); GeoPoint p = near[i].Surface.PointAt(uv); double d = p | toPoint; if (d < minDist) { if (near[i].Area.Contains(uv, true)) { minDist = d; found = near[i]; } } } return(found); }