Определение пересечения двух тел

Метод

MbResultType InterferenceSolids(MbSolid &                   solid1, 
                                MbSolid &                   solid2,
                                std::vector<MbCurveEdge*> * edges,
                                std::vector<ptrdiff_t> (*faceNumbers)[4])

выполняет оценку пересечения двух тел.

Входными параметрами метода являются:

  • solid1 – первое тело;

  • solid2 – второе тело;

  • edges – ребра пересечения тел (может быть 0);

  • (*faceNumbers)[4] – контейнер номеров граней (может быть 0).

Выходными параметрами метода являются:

  • ребра пересечения edges граней тел solid1 и solid2;

  • номера пересекшихся граней (*faceNumbers)[4].

Метод возвращает rt_Intersect, если тела пересекаются, или rt_NoIntersect, если тела не пересекаются.

Метод объявлен в файле cdet_bool.h.

Метод модифицирует ребра тел solid1 и solid2, поэтому если требуется сохранить тела неизменными, необходимо передавать в метод копии, сделанные с помощью MbSolid::Duplicate(). Модифицирование заключается в резке ребер тел ребрами пересечения.

Возвращаемое значение rt_Intersect означает, что пара тел имеет некоторый объем пересечения или некоторую площадь соприкосновения. Функция вернет rt_NoIntersect, если тела не имеют объема пересечения. Касание в одной точке не считается пересечением, так как имеет нулевой объем пересечения.

Если указатель на контейнер рёбер edges не равен NULL, то в edges будут помещены ребра пересечения тел solid1 и solid2.

Если указатель на контейнер номеров граней faceNumbers не равен NULL, то в faceNumbers[0] и faceNumbers[1] будут помещены номера пересекшихся граней соответственно первого и второго тела, кроме того, в faceNumbers[2] и faceNumbers[3] будут помещены номера соприкасающихся граней соответственно первого и второго тела.