Определение пересечения двух тел
Метод
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] будут помещены номера соприкасающихся граней соответственно первого и второго тела.