52 Range(PxI32 start_, PxI32 end_)
58 PxI32 Length()
const {
return end - start; }
61 template<
typename T,
typename S>
66 for (PxU32 i = 0; i < mergeRanges.
size(); ++i)
68 const Range& r = mergeRanges[i];
69 PxI32 start = r.start;
70 for (PxI32 j = r.start + 1; j < r.end; ++j)
73 S delta =
PxAbs(points[indexer[j]][dimIndex] - points[indexer[j - 1]][dimIndex]);
77 newMergeRanges.
pushBack(Range(start, j));
81 if (r.end - start > 1)
82 newMergeRanges.
pushBack(Range(start, r.end));
86 for (PxU32 i = 0; i < newMergeRanges.
size(); ++i)
87 mergeRanges.
pushBack(newMergeRanges[i]);
94 const PxU32 dimension;
96 Comparer(
const PxArray<T>& points_,
const PxU32 dimension_) : points(points_), dimension(dimension_) {}
98 bool operator()(
const PxI32& a,
const PxI32& b)
const
100 return points[a][dimension] > points[b][dimension];
108 template<
typename T,
typename S>
109 static void mapDuplicatePoints(
const PxArray<T>& points,
PxArray<PxI32>& result, S duplicateDistanceManhattanMetric =
static_cast<S
>(1e-6))
114 for (PxU32 i = 0; i < points.
size(); ++i)
120 PxSort(indexer.
begin(), indexer.
size(), Comparer<T>(points, 0));
124 splitRanges<T>(mergeRanges, indexer, points, 0, duplicateDistanceManhattanMetric);
126 for (PxU32 i = 0; i < mergeRanges.
size(); ++i)
128 const Range& r = mergeRanges[i];
129 PxSort(indexer.
begin() + r.start, r.Length(), Comparer<T>(points, 1));
131 splitRanges<T>(mergeRanges, indexer, points, 1, duplicateDistanceManhattanMetric);
133 for (PxU32 i = 0; i < mergeRanges.
size(); ++i)
135 const Range& r = mergeRanges[i];
136 PxSort(indexer.
begin() + r.start, r.Length(), Comparer<T>(points, 2));
138 splitRanges<T>(mergeRanges, indexer, points, 2, duplicateDistanceManhattanMetric);
141 for (PxU32 i = 0; i < mergeRanges.
size(); ++i)
143 const Range& r = mergeRanges[i];
144 PxSort(indexer.
begin() + r.start, r.Length());
145 for (PxI32 j = r.start + 1; j < r.end; ++j)
146 result[indexer[j]] = result[indexer[r.start]];
152 PX_PHYSX_COMMON_API
static bool makeTriOrientationConsistent(
Triangle* tris, PxU32 numTriangles,
bool invertOrientation =
false);
153 PX_PHYSX_COMMON_API
static bool checkMeshWatertightness(
const Triangle* tris, PxU32 numTriangles);
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39