if (!solid.Check()) return false; // первая обязательная проверка - иначе ФАТАЛ!
using (Solid3d test = surface.Thicken(-0.00001, false)) // А вот тут танцуйте с бубном. "Минус чуть чуть" сработает только в моем коде, но НЕ ВСЕГДА
using (Solid3d clone = solid.Clone() as Solid3d)
{
clone.BooleanOperation(BooleanOperationType.BoolIntersect, test);
if (clone.IsNull) return false; // вторая проверка. если не пересеклись (и даже если просто касались) - будет ФАТАЛ!
}
Solid3d sloy = solid.Slice(surface, true); // Крайне опасный вызов. Избегать всеми способами!