23inline bool orient3d(
const Vector3i & a,
const Vector3i & b,
const Vector3i & c,
const Vector3i & d )
24 {
return orient3d( a - d, b - d, c - d ); }
47 const std::array<PreciseVertCoords, 5> & vs );
64 return (
int)std::round( v *
invRange );
68 [[nodiscard]] Vector3i
operator()(
const Vector3d& p )
const
75 [[nodiscard]] Vector3i
operator()(
const Vector3f& p )
const
88 [[nodiscard]] Vector3d
convert(
const Vector3i& v )
const
94 [[nodiscard]] Vector3f
operator()(
const Vector3i& v )
const
96 return Vector3f(
convert( v ) );
115 const VertCoords& points,
const VertBitSet* valid =
nullptr );
129 const Vector3f& a,
const Vector3f& b,
const Vector3f& c,
130 const Vector3f& d,
const Vector3f& e,
#define MRMESH_API
Definition MRMeshFwd.h:82
std::vector<T>-like container that requires specific indexing type,
Definition MRVector.h:23
Vector3d convert(const Vector3i &v) const
int-to-double coordinates converter
Definition MRPrecisePredicates3.h:88
Vector3i pt
integer coordinates of the vertex
Definition MRPrecisePredicates3.h:29
Vector3i operator()(const Vector3d &p) const
double-to-int coordinates converter
Definition MRPrecisePredicates3.h:68
int scaleOnly(double v) const
applies scaling only (without translation) with the following rounding to the nearest int
Definition MRPrecisePredicates3.h:62
Vector3f operator()(const Vector3i &v) const
int-to-float coordinates converter
Definition MRPrecisePredicates3.h:94
Vector3i operator()(const Vector3f &p) const
float-to-int coordinates converter
Definition MRPrecisePredicates3.h:75
double invRange
Definition MRPrecisePredicates3.h:59
Vector3d center
Definition MRPrecisePredicates3.h:85
bool doIntersect
whether triangle and segment intersect
Definition MRPrecisePredicates3.h:38
Vector3d center
Definition MRPrecisePredicates3.h:58
ConvertToFloatVector toFloat
Definition MRPrecisePredicates3.h:104
bool segmentIntersectionOrder(const std::array< PreciseVertCoords2, 6 > &vs)
bool dIsLeftFromABC
whether the plane with orientated triangle ABC has D point at the left
Definition MRPrecisePredicates3.h:39
double range
Definition MRPrecisePredicates3.h:84
VertId id
unique id of the vertex (in both meshes)
Definition MRPrecisePredicates3.h:28
ConvertToIntVector toInt
Definition MRPrecisePredicates3.h:103
ConvertToIntVector getToIntConverter(const Box3d &box)
creates converter from Vector3f to Vector3i in Box range (int diapason is mapped to box range)
bool orient3d(const Vector3i &a, const Vector3i &b, const Vector3i &c)
Vector< Vector3i, VertId > computeIntCoords(const ConvertToIntVector &conv, const VertCoords &points, const VertBitSet *valid=nullptr)
std::optional< Vector3i > findTwoSegmentsIntersection(const Vector3i &ai, const Vector3i &bi, const Vector3i &ci, const Vector3i &di)
TriangleSegmentIntersectResult doTriangleSegmentIntersect(const std::array< PreciseVertCoords, 5 > &vs)
ConvertToFloatVector getToFloatConverter(const Box3d &box)
creates converter from Vector3i to Vector3f in Box range (int diapason is mapped to box range)
Vector3f findTriangleSegmentIntersectionPrecise(const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d, const Vector3f &e, CoordinateConverters converters)
VertCoords computeFloatCoords(const ConvertToFloatVector &conv, const Vector< Vector3i, VertId > &intCoords, const VertBitSet *valid=nullptr)
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
scale then translate int-to-float coordinate converter
Definition MRPrecisePredicates3.h:83
translate then scale float-to-int coordinate converter
Definition MRPrecisePredicates3.h:57
this struct contains coordinate converters float-int-float
Definition MRPrecisePredicates3.h:102
Definition MRPrecisePredicates3.h:27
Definition MRPrecisePredicates3.h:37