Всем привет. Столкнулся с забавным случаем
Задача - имеется 3Д тело (Solid) и мне его нужно разрезать плоскостью (Plane). У солида на этот случай есть метод
Solid3d.Slice. Однако, если подать ему плоскость, которая не пересекает солид, то генерируется Exception.
Решил я предварительно проверить пересечение и нашел метод, который подходит идеально -
Solid3d.GetSectionСмотрим в описание и видим:
If the solid has no ShapeManager object, or the plane doesn’t intersect the solid, or the intersection is not a valid region (for example, it intersects at a point, along a bounding face of the solid, and so on), then the return is NULL
По описанию прям вот оно! Но на деле имеем странное поведение. Вот кусок кода:
var plane = new Plane(pt, Vector3d.XAxis);
var s = solid3d.GetSection(plane);
if (s != null)
{
var newSideSolid = solid3d.Slice(plane, true);
btr.AppendEntity(newSideSolid);
tr.AddNewlyCreatedDBObject(newSideSolid, true);
}
В случае, когда плоскость не пересекает солид, метод GetSection не возвращает NULL, а возвращает всегда экземпляр Region. НО! При попытке обратится к любому полю экземпляра генерируется NullReferenceException! Что не соответствует описанию в справке.
Это ошибка в API или я что-то не понял?