MeshLib C++ Docs
Loading...
Searching...
No Matches
MRMesh/MRMeshFwd.h
Go to the documentation of this file.
1#pragma once
2
3#include "config.h"
4
6#include "MRPch/MRBindingMacros.h"
7
8// Not-zero _ITERATOR_DEBUG_LEVEL in Microsoft STL greatly reduces the performance of STL containers.
9//
10// Pre-build binaries from MeshLib distribution are prepared with _ITERATOR_DEBUG_LEVEL=0,
11// and if you build MeshLib by yourself then _ITERATOR_DEBUG_LEVEL=0 is also selected see
12// 1) vcpkg/triplets/x64-windows-meshlib.cmake and
13// 2) MeshLib/source/common.props
14// Please note that all other modules (.exe, .dll, .lib) with MS STL calls in your application also need
15// to define exactly the same value of _ITERATOR_DEBUG_LEVEL to be operational after linking.
16//
17// If you deliberately would like to work with not zero _ITERATOR_DEBUG_LEVEL, then please define
18// additionally MR_ITERATOR_DEBUG_LEVEL with the same value to indicate that it is done intentionally
19// (and you are ok with up to 100x slowdown).
20//
21#if defined _MSC_VER
22 #if !defined _ITERATOR_DEBUG_LEVEL
23 #define _ITERATOR_DEBUG_LEVEL 0
24 #endif
25 #if !defined MR_ITERATOR_DEBUG_LEVEL
26 #define MR_ITERATOR_DEBUG_LEVEL 0
27 #endif
28 #if _ITERATOR_DEBUG_LEVEL != MR_ITERATOR_DEBUG_LEVEL
29 #error _ITERATOR_DEBUG_LEVEL is inconsistent with MeshLib
30 #endif
31#endif
32
33// Check C++ version.
34#ifdef _MSC_VER
35#define MR_CPP_STANDARD_DATE _MSVC_LANG
36#else
37#define MR_CPP_STANDARD_DATE __cplusplus
38#endif
39// Note `201709`. C++20 usually sets `202002`, while C++17 sets `201703`.
40// This `201709` is what GCC 10 sets on `-std=c++20` (presumably to indicate incomplete implementation?).
41// Other compilers we use don't have this issue.
42// Also note `__CUDACC__` - currently our Cuda code is compiled as C++17 (compiler doesn't support C++20?),
43// and we carefully avoid headers incomaptible with C++17.
44#if MR_CPP_STANDARD_DATE < 201709 && !defined(__CUDACC__)
45#error Must enable C++20 or newer!
46#endif
47// -- Curently we have no macros that don't work with the old preprocessor. Leaving the check here to possibly be enabled later.
48// Reject old MSVC preprocessor.
49// Note that we exclude Cuda here. Not 100% sure if it has a good preprocessor, or we just avoid including the headers sensitive to it in Cuda.
50// #if defined(_MSC_VER) && !defined(__clang__) && (!defined(_MSVC_TRADITIONAL) || _MSVC_TRADITIONAL == 1) && !defined(__CUDACC__)
51// #error MSVC users must enable the new standard-conformant preprocessor using `/Zc:preprocessor`!
52// #endif
53
54
55#if defined(__GNUC__) && (__GNUC__ >= 13 && __GNUC__ <= 15)
56 #pragma GCC diagnostic push
57 #pragma GCC diagnostic ignored "-Warray-bounds"
58 #pragma GCC diagnostic ignored "-Wstringop-overflow"
59#endif
60
61#include <array>
62
63#if defined(__GNUC__) && (__GNUC__ >= 13 && __GNUC__ <= 15)
64 #pragma GCC diagnostic pop
65#endif
66
67#include <vector>
68#include <string>
69#include <parallel_hashmap/phmap_fwd_decl.h>
70#include <functional>
71
72#ifdef _WIN32
73# ifdef MRMesh_EXPORTS
74# define MRMESH_API __declspec(dllexport)
75# else
76# define MRMESH_API __declspec(dllimport)
77# endif
78# define MRMESH_CLASS
79#else
80# define MRMESH_API __attribute__((visibility("default")))
81// to fix undefined reference to `typeinfo/vtable`
82// Also it's important to use this on any type for which `typeid` is used in multiple shared libraries, and then passed across library boundaries.
83// Otherwise on Mac the resulting typeids will incorrectly compare not equal.
84# define MRMESH_CLASS __attribute__((visibility("default")))
85#endif
86
87namespace MR
88{
89
90struct NoInit {};
91inline constexpr NoInit noInit;
92template <typename T> struct MRMESH_CLASS NoDefInit;
93
106
107MR_CANONICAL_TYPEDEFS( (template <typename T> class MRMESH_CLASS), Id,
108 ( EdgeId, Id<EdgeTag> )
109 ( UndirectedEdgeId, Id<UndirectedEdgeTag> )
110 ( FaceId, Id<FaceTag> )
111 ( VertId, Id<VertTag> )
112 ( PixelId, Id<PixelTag> )
113 ( VoxelId, Id<VoxelTag> )
114 ( RegionId, Id<RegionTag> )
115 ( NodeId, Id<NodeTag> )
116 ( ObjId, Id<ObjTag> )
117 ( TextureId, Id<TextureTag> )
118 ( GraphVertId, Id<GraphVertTag> )
119 ( GraphEdgeId, Id<GraphEdgeTag> )
120)
121// Those are full specializations in `MRId.h`, so `MR_CANONICAL_TYPEDEFS` doesn't work on them.
122// Have to add this too.
123template <> class MR_BIND_PREFERRED_NAME(MR::EdgeId) Id<EdgeTag>;
124template <> class MR_BIND_PREFERRED_NAME(MR::VoxelId) Id<VoxelTag>;
125
126MR_CANONICAL_TYPEDEFS( (template <typename T> class MRMESH_CLASS), NoInitId,
127 ( NoInitNodeId, NoInitId<NodeTag> )
128)
129
130template <typename T, typename I = size_t> class MRMESH_CLASS Buffer;
131struct PackMapping;
132
133class ViewportId;
134class ViewportMask;
135
136struct UnorientedTriangle;
139
140using EdgePath = std::vector<EdgeId>;
141using EdgeLoop = std::vector<EdgeId>;
142using EdgeLoops = std::vector<EdgeLoop>;
143
145
146MR_CANONICAL_TYPEDEFS( (template <typename I> class MRMESH_CLASS), TypedBitSet,
147 ( FaceBitSet, TypedBitSet<FaceId> )
148 ( VertBitSet, TypedBitSet<VertId> )
149 ( EdgeBitSet, TypedBitSet<EdgeId> )
150 ( UndirectedEdgeBitSet, TypedBitSet<UndirectedEdgeId> )
151 ( PixelBitSet, TypedBitSet<PixelId> )
152 ( VoxelBitSet, TypedBitSet<VoxelId> )
153 ( RegionBitSet, TypedBitSet<RegionId> )
154 ( NodeBitSet, TypedBitSet<NodeId> )
155 ( ObjBitSet, TypedBitSet<ObjId> )
156 ( TextureBitSet, TypedBitSet<TextureId> )
157 ( GraphVertBitSet, TypedBitSet<GraphVertId> )
158 ( GraphEdgeBitSet, TypedBitSet<GraphEdgeId> )
159)
160
161template<typename T>
162using TaggedBitSet = TypedBitSet<Id<T>>;
163
164MR_CANONICAL_TYPEDEFS( (template <typename T> class MRMESH_CLASS), SetBitIteratorT,
165 ( SetBitIterator, SetBitIteratorT<BitSet> )
166 ( FaceSetBitIterator, SetBitIteratorT<FaceBitSet> )
167 ( VertSetBitIterator, SetBitIteratorT<VertBitSet> )
168 ( EdgeSetBitIterator, SetBitIteratorT<EdgeBitSet> )
169 ( UndirectedEdgeSetBitIterator, SetBitIteratorT<UndirectedEdgeBitSet> )
170)
171
172struct Color;
173
174// Must use our `Int64` and `Uint64` everywhere in the public API instead of `long`, `long long`, `int64_t`, `uint64_t`, etc.
175// But `size_t` and `ptrdiff_t` are allowed as is.
176// This is required to generate consistent C bindings on all platforms, and this is checked during binding generation.
177//
178// Those standard typedefs are a mess across platforms. On Windows, they all expand to `long long`, because `long` is not wide enough.
179// On Linux, they all expand to `long`, which again makes sense, because it's wide enough, and it's natural to use it instead of `long long` if it's wide enough.
180// This difference alone causes issues, but what's worse is that on Mac, the typedefs use both `long` and `long long`, despite them having
181// the same size (anything with digits in the name is `long long`, everything else is `long`, for some reason).
182// The only way around that is to only use `long` or `long long` in the interface per platform, but not both. Then during binding generation,
183// replace that type with `int64_t`, and complain if we got another one. This only makes sense on 64-bit platforms, but we only generate bindings on those.
184// Since `size_t` and `ptrdiff_t` are so important, we allow those, and anything that expands to the same type. Sadly `[u]int64_t` doesn't on Mac,
185// so we can't use it directly, and have to instead use our own typedefs defined below. The untypedefed `long` and `long long` can't be used either,
186// for the same reasons (whether they match `size_t` depends on the platform, and we can't allow that).
187#ifdef __APPLE__
188using Int64 = std::ptrdiff_t;
189using Uint64 = std::size_t;
190static_assert(sizeof(Int64) == 8);
191static_assert(sizeof(Uint64) == 8);
192#else
193using Int64 = std::int64_t;
194using Uint64 = std::uint64_t;
195#endif
196
197MR_CANONICAL_TYPEDEFS( (template <typename T> struct), MRMESH_CLASS Vector2,
198 ( Vector2b, Vector2<bool> )
199 ( Vector2i, Vector2<int> )
200 ( Vector2i64, Vector2<Int64> )
201 ( Vector2f, Vector2<float> )
202 ( Vector2d, Vector2<double> )
203)
204// See `Int64` above for why this is deprecated.
205// This is behind an `#ifdef` to avoid instantiating `Vector2<T>` with `T == long long`, which happens even if the typedef has `MR_BIND_IGNORE`,
206// which is a bug.
207#if !MR_PARSING_FOR_ANY_BINDINGS
208using Vector2ll [[deprecated("Use `Vector2i64` instead.")]] = Vector2<long long>;
209#endif
210
211MR_CANONICAL_TYPEDEFS( (template <typename T> struct), MRMESH_CLASS Vector3,
212 ( Vector3b, Vector3<bool> )
213 ( Vector3i, Vector3<int> )
214 ( Vector3i64, Vector3<Int64> )
215 ( Vector3f, Vector3<float> )
216 ( Vector3d, Vector3<double> )
217)
218#if !MR_PARSING_FOR_ANY_BINDINGS
219using Vector3ll [[deprecated("Use `Vector3i64` instead.")]] = Vector3<long long>;
220#endif
221
222MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Vector4,
223 ( Vector4b, Vector4<bool> )
224 ( Vector4i, Vector4<int> )
225 ( Vector4i64, Vector4<Int64> )
226 ( Vector4f, Vector4<float> )
227 ( Vector4d, Vector4<double> )
228)
229#if !MR_PARSING_FOR_ANY_BINDINGS
230using Vector4ll [[deprecated("Use `Vector4i64` instead.")]] = Vector4<long long>;
231#endif
232
233MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Matrix2,
234 ( Matrix2b, Matrix2<bool> )
235 ( Matrix2i, Matrix2<int> )
236 ( Matrix2i64, Matrix2<Int64> )
237 ( Matrix2f, Matrix2<float> )
238 ( Matrix2d, Matrix2<double> )
239)
240#if !MR_PARSING_FOR_ANY_BINDINGS
241using Matrix2ll [[deprecated("Use `Matrix2i64` instead.")]] = Matrix2<long long>;
242#endif
243
244MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Matrix3,
245 ( Matrix3b, Matrix3<bool> )
246 ( Matrix3i, Matrix3<int> )
247 ( Matrix3i64, Matrix3<Int64> )
248 ( Matrix3f, Matrix3<float> )
249 ( Matrix3d, Matrix3<double> )
250)
251#if !MR_PARSING_FOR_ANY_BINDINGS
252using Matrix3ll [[deprecated("Use `Matrix3i64` instead.")]] = Matrix3<long long>;
253#endif
254
255MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Matrix4,
256 ( Matrix4b, Matrix4<bool> )
257 ( Matrix4i, Matrix4<int> )
258 ( Matrix4i64, Matrix4<Int64> )
259 ( Matrix4f, Matrix4<float> )
260 ( Matrix4d, Matrix4<double> )
261)
262#if !MR_PARSING_FOR_ANY_BINDINGS
263using Matrix4ll [[deprecated("Use `Matrix4i64` instead.")]] = Matrix4<long long>;
264#endif
265
266MR_CANONICAL_TYPEDEFS( (template <typename T> struct), SymMatrix2,
267 ( SymMatrix2b, SymMatrix2<bool> )
268 ( SymMatrix2i, SymMatrix2<int> )
269 ( SymMatrix2i64, SymMatrix2<Int64> )
270 ( SymMatrix2f, SymMatrix2<float> )
271 ( SymMatrix2d, SymMatrix2<double> )
272)
273#if !MR_PARSING_FOR_ANY_BINDINGS
274using SymMatrix2ll [[deprecated("Use `SymMatrix2i64` instead.")]] = SymMatrix2<long long>;
275#endif
276
277MR_CANONICAL_TYPEDEFS( (template <typename T> struct), SymMatrix3,
278 ( SymMatrix3b, SymMatrix3<bool> )
279 ( SymMatrix3i, SymMatrix3<int> )
280 ( SymMatrix3i64, SymMatrix3<Int64> )
281 ( SymMatrix3f, SymMatrix3<float> )
282 ( SymMatrix3d, SymMatrix3<double> )
283)
284#if !MR_PARSING_FOR_ANY_BINDINGS
285using SymMatrix3ll [[deprecated("Use `SymMatrix3i64` instead.")]] = SymMatrix3<long long>;
286#endif
287
288MR_CANONICAL_TYPEDEFS( (template <typename T> struct), SymMatrix4,
289 ( SymMatrix4b, SymMatrix4<bool> )
290 ( SymMatrix4i, SymMatrix4<int> )
291 ( SymMatrix4i64, SymMatrix4<Int64> )
292 ( SymMatrix4f, SymMatrix4<float> )
293 ( SymMatrix4d, SymMatrix4<double> )
294)
295#if !MR_PARSING_FOR_ANY_BINDINGS
296using SymMatrix4ll [[deprecated("Use `SymMatrix4i64` instead.")]] = SymMatrix4<long long>;
297#endif
298
299MR_CANONICAL_TYPEDEFS( (template <typename V> struct), AffineXf,
300 ( AffineXf2f, AffineXf<Vector2<float>> )
301 ( AffineXf2d, AffineXf<Vector2<double>> )
302 ( AffineXf3f, AffineXf<Vector3<float>> )
303 ( AffineXf3d, AffineXf<Vector3<double>> )
304)
305template <typename T> using AffineXf2 = AffineXf<Vector2<T>>;
306template <typename T> using AffineXf3 = AffineXf<Vector3<T>>;
307
308MR_CANONICAL_TYPEDEFS( (template <typename T> struct), RigidXf3,
309 ( RigidXf3f, RigidXf3<float> )
310 ( RigidXf3d, RigidXf3<double> )
311)
312
313MR_CANONICAL_TYPEDEFS( (template <typename T> struct), RigidScaleXf3,
314 ( RigidScaleXf3f, RigidScaleXf3<float> )
315 ( RigidScaleXf3d, RigidScaleXf3<double> )
316)
317
320
321MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Sphere,
322 ( Sphere2f, Sphere<Vector2<float>> )
323 ( Sphere2d, Sphere<Vector2<double>> )
324 ( Sphere3f, Sphere<Vector3<float>> )
325 ( Sphere3d, Sphere<Vector3<double>> )
326)
327template <typename T> using Sphere2 = Sphere<Vector2<T>>;
328template <typename T> using Sphere3 = Sphere<Vector3<T>>;
329
330MR_CANONICAL_TYPEDEFS( (template <typename V> struct), Line,
331 ( Line2f, Line<Vector2<float>> )
332 ( Line2d, Line<Vector2<double>> )
333 ( Line3f, Line<Vector3<float>> )
334 ( Line3d, Line<Vector3<double>> )
335)
336template <typename T> using Line2 = Line<Vector2<T>>;
337template <typename T> using Line3 = Line<Vector3<T>>;
338
339MR_CANONICAL_TYPEDEFS( (template <typename V> struct), LineSegm,
340 ( LineSegm2f, LineSegm<Vector2<float>> )
341 ( LineSegm2d, LineSegm<Vector2<double>> )
342 ( LineSegm3f, LineSegm<Vector3<float>> )
343 ( LineSegm3d, LineSegm<Vector3<double>> )
344)
345template <typename T> using LineSegm2 = LineSegm<Vector2<T>>;
346template <typename T> using LineSegm3 = LineSegm<Vector3<T>>;
347
348MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Parabola,
349 ( Parabolaf, Parabola<float> )
350 ( Parabolad, Parabola<double> )
351)
352
353MR_CANONICAL_TYPEDEFS( (template <typename T> class), BestFitParabola,
354 ( BestFitParabolaf, BestFitParabola<float> )
355 ( BestFitParabolad, BestFitParabola<double> )
356)
357
358MR_CANONICAL_TYPEDEFS( (template <typename T> class), Cylinder3,
359 ( Cylinder3f, Cylinder3<float> )
360 ( Cylinder3d, Cylinder3<double> )
361)
362
363MR_CANONICAL_TYPEDEFS( (template <typename T> class), Cone3,
364 ( Cone3f, Cone3<float> )
365 ( Cone3d, Cone3<double> )
366)
367
368// No canonical typedefs here, because those ultimately boil to `std::vector`, which isn't under our control.
369template <typename V> using Contour = std::vector<V>;
370template <typename T> using Contour2 = Contour<Vector2<T>>;
371template <typename T> using Contour3 = Contour<Vector3<T>>;
372using Contour2d = Contour2<double>;
373using Contour2f = Contour2<float>;
374using Contour3d = Contour3<double>;
375using Contour3f = Contour3<float>;
376
377template <typename V> using Contours = std::vector<Contour<V>>;
378template <typename T> using Contours2 = Contours<Vector2<T>>;
379template <typename T> using Contours3 = Contours<Vector3<T>>;
380using Contours2d = Contours2<double>;
381using Contours2f = Contours2<float>;
382using Contours3d = Contours3<double>;
383using Contours3f = Contours3<float>;
384
385MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Plane3,
386 ( Plane3f, Plane3<float> )
387 ( Plane3d, Plane3<double> )
388)
389
390MR_CANONICAL_TYPEDEFS( (template <typename V> struct MRMESH_CLASS), Box,
391 ( Box1i, Box<int> )
392 ( Box1i64, Box<Int64> )
393 ( Box1f, Box<float> )
394 ( Box1d, Box<double> )
395 ( Box2i, Box<Vector2<int>> )
396 ( Box2i64, Box<Vector2<Int64>> )
397 ( Box2f, Box<Vector2<float>> )
398 ( Box2d, Box<Vector2<double>> )
399 ( Box3i, Box<Vector3<int>> )
400 ( Box3i64, Box<Vector3<Int64>> )
401 ( Box3f, Box<Vector3<float>> )
402 ( Box3d, Box<Vector3<double>> )
403)
404#if !MR_PARSING_FOR_ANY_BINDINGS
405using Box1ll [[deprecated("Use `Box1i64` instead.")]] = Box<long long>;
406using Box2ll [[deprecated("Use `Box2i64` instead.")]] = Box<Vector2<long long>>;
407using Box3ll [[deprecated("Use `Box3i64` instead.")]] = Box<Vector3<long long>>;
408#endif
409
410template <typename T> using MinMax = Box<T>;
411using MinMaxf = MinMax<float>;
412using MinMaxd = MinMax<double>;
413using MinMaxi = MinMax<int>;
414
415template <typename T> using Box1 = Box<T>;
416template <typename T> using Box2 = Box<Vector2<T>>;
417template <typename T> using Box3 = Box<Vector3<T>>;
418
419template<typename T, typename I> struct MinArg;
420template<typename T, typename I> struct MaxArg;
421template<typename T, typename I> struct MinMaxArg;
422
423MR_CANONICAL_TYPEDEFS( (template <typename V> struct MRMESH_CLASS), Ball,
424 ( Ball1f, Ball<float> )
425 ( Ball1d, Ball<double> )
426 ( Ball2f, Ball<Vector2<float>> )
427 ( Ball2d, Ball<Vector2<double>> )
428 ( Ball3f, Ball<Vector3<float>> )
429 ( Ball3d, Ball<Vector3<double>> )
430)
431template <typename T> using Ball1 = Ball<T>;
432template <typename T> using Ball2 = Ball<Vector2<T>>;
433template <typename T> using Ball3 = Ball<Vector3<T>>;
434
435MR_CANONICAL_TYPEDEFS( (template <typename V> struct MRMESH_CLASS), CubicBezierCurve,
436 ( CubicBezierCurve2f, CubicBezierCurve<Vector2<float>> )
437 ( CubicBezierCurve2d, CubicBezierCurve<Vector2<double>> )
438 ( CubicBezierCurve3f, CubicBezierCurve<Vector3<float>> )
439 ( CubicBezierCurve3d, CubicBezierCurve<Vector3<double>> )
440)
441template <typename T> using CubicBezierCurve2 = CubicBezierCurve<Vector2<T>>;
442template <typename T> using CubicBezierCurve3 = CubicBezierCurve<Vector3<T>>;
443
444MR_CANONICAL_TYPEDEFS( (template <typename V> struct), QuadraticForm,
445 ( QuadraticForm2f, QuadraticForm<Vector2<float>> )
446 ( QuadraticForm2d, QuadraticForm<Vector2<double>> )
447 ( QuadraticForm3f, QuadraticForm<Vector3<float>> )
448 ( QuadraticForm3d, QuadraticForm<Vector3<double>> )
449)
450template <typename T> using QuadraticForm2 = QuadraticForm<Vector2<T>>;
451template <typename T> using QuadraticForm3 = QuadraticForm<Vector3<T>>;
452
453MR_CANONICAL_TYPEDEFS( (template <typename T> struct), Quaternion,
454 ( Quaternionf, Quaternion<float> )
455 ( Quaterniond, Quaternion<double> )
456)
457
458// No canonical typedefs because `std::array` is not under our control.
459template <typename T> using Triangle3 = std::array<Vector3<T>, 3>;
460using Triangle3i = Triangle3<int>;
461using Triangle3f = Triangle3<float>;
462using Triangle3d = Triangle3<double>;
463
464class PointAccumulator;
465
466MR_CANONICAL_TYPEDEFS( (template <typename T> struct), SegmPoint,
467 ( SegmPointf, SegmPoint<float> )
468 ( SegmPointd, SegmPoint<double> )
469)
470
471struct EdgePoint;
472struct EdgeSegment;
474using SurfacePath = std::vector<MeshEdgePoint>;
475using SurfacePaths = std::vector<SurfacePath>;
480struct EdgePointPair;
481class Laplacian;
482
483using VertPair = std::pair<VertId, VertId>;
484using FacePair = std::pair<FaceId, FaceId>;
485using EdgePair = std::pair<EdgeId, EdgeId>;
486using UndirectedEdgePair = std::pair<UndirectedEdgeId, UndirectedEdgeId>;
487
488MR_CANONICAL_TYPEDEFS( (template <typename T> struct), TriPoint,
489 ( TriPointf, TriPoint<float> )
490 ( TriPointd, TriPoint<double> )
491)
492
493struct PointOnFace;
494struct PointOnObject;
495struct MeshTriPoint;
499template <typename T> struct IntersectionPrecomputes;
500
501template <typename I> struct IteratorRange;
502
505using UVCoord = Vector2f;
506
508using TwoVertIds = std::array<VertId, 2>;
509
511using ThreeVertIds = std::array<VertId, 3>;
512
514
515MR_CANONICAL_TYPEDEFS( (template <typename T, typename I> class MRMESH_CLASS), Vector,
517 ( Edges, Vector<TwoVertIds, UndirectedEdgeId> )
518
520 ( Triangulation, Vector<ThreeVertIds, FaceId> )
521
522 ( Dipoles, Vector<Dipole, NodeId> )
523
524 ( FaceMap, Vector<FaceId, FaceId> )
525 ( VertMap, Vector<VertId, VertId> )
526 ( EdgeMap, Vector<EdgeId, EdgeId> )
527 ( UndirectedEdgeMap, Vector<UndirectedEdgeId, UndirectedEdgeId> )
528 ( ObjMap, Vector<ObjId, ObjId> )
529
531 ( WholeEdgeMap, Vector<EdgeId, UndirectedEdgeId> )
532 ( UndirectedEdge2RegionMap, Vector<RegionId, UndirectedEdgeId> )
533 ( Face2RegionMap, Vector<RegionId, FaceId> )
534 ( Vert2RegionMap, Vector<RegionId, VertId> )
535
536 ( VertCoords, Vector<Vector3f, VertId> )
537 ( VertCoords2, Vector<Vector2f, VertId> )
538 ( VertNormals, Vector<Vector3f, VertId> )
539 ( VertUVCoords, Vector<UVCoord, VertId> )
540 ( FaceNormals, Vector<Vector3f, FaceId> )
541
542 ( TexturePerFace, Vector<TextureId, FaceId> )
543 ( VertColors, Vector<Color, VertId> )
544 ( FaceColors, Vector<Color, FaceId> )
545 ( EdgeColors, Vector<Color, EdgeId> )
546 ( UndirectedEdgeColors, Vector<Color, UndirectedEdgeId> )
547
548 ( VertScalars, Vector<float, VertId> )
549 ( FaceScalars, Vector<float, FaceId> )
550 ( EdgeScalars, Vector<float, EdgeId> )
551 ( UndirectedEdgeScalars, Vector<float, UndirectedEdgeId> )
552)
553
554using VertPredicate = std::function<bool( VertId )>;
555using FacePredicate = std::function<bool( FaceId )>;
556using EdgePredicate = std::function<bool( EdgeId )>;
557using UndirectedEdgePredicate = std::function<bool( UndirectedEdgeId )>;
558
559using PreCollapseCallback = std::function<bool( EdgeId edgeToCollapse, const Vector3f& newEdgeOrgPos )>;
560using OnEdgeSplit = std::function<void( EdgeId e1, EdgeId e )>;
561
562template <typename T>
563[[nodiscard]] inline bool contains( const std::function<bool( Id<T> )> & pred, Id<T> id )
564{
565 return id.valid() && ( !pred || pred( id ) );
566}
567
568using VertMetric = std::function<float( VertId )>;
569using FaceMetric = std::function<float( FaceId )>;
570using EdgeMetric = std::function<float( EdgeId )>;
571using UndirectedEdgeMetric = std::function<float( UndirectedEdgeId )>;
572
573MR_CANONICAL_TYPEDEFS( (template <typename T, typename I> struct MRMESH_CLASS), BMap,
574 ( FaceBMap, BMap<FaceId, FaceId> )
575 ( VertBMap, BMap<VertId, VertId> )
576 ( EdgeBMap, BMap<EdgeId, EdgeId> )
577 ( UndirectedEdgeBMap, BMap<UndirectedEdgeId, UndirectedEdgeId> )
578 ( WholeEdgeBMap, BMap<EdgeId, UndirectedEdgeId> )
579)
580
581template <typename T, typename Hash = phmap::priv::hash_default_hash<T>, typename Eq = phmap::priv::hash_default_eq<T>>
582using HashSet = phmap::flat_hash_set<T, Hash, Eq>;
583template <typename T, typename Hash = phmap::priv::hash_default_hash<T>, typename Eq = phmap::priv::hash_default_eq<T>>
584using ParallelHashSet = phmap::parallel_flat_hash_set<T, Hash, Eq>;
585
586// No canonical typedefs because `phmap::...` is not under our control.
587using FaceHashSet = HashSet<FaceId>;
588using VertHashSet = HashSet<VertId>;
589using EdgeHashSet = HashSet<EdgeId>;
590
591template <typename K, typename V, typename Hash = phmap::priv::hash_default_hash<K>, typename Eq = phmap::priv::hash_default_eq<K>>
592using HashMap = phmap::flat_hash_map<K, V, Hash, Eq>;
593template <typename K, typename V, typename Hash = phmap::priv::hash_default_hash<K>, typename Eq = phmap::priv::hash_default_eq<K>>
594using ParallelHashMap = phmap::parallel_flat_hash_map<K, V, Hash, Eq>;
595
596using FaceHashMap = HashMap<FaceId, FaceId>;
597using VertHashMap = HashMap<VertId, VertId>;
598using EdgeHashMap = HashMap<EdgeId, EdgeId>;
599using UndirectedEdgeHashMap = HashMap<UndirectedEdgeId, UndirectedEdgeId>;
601using WholeEdgeHashMap = HashMap<UndirectedEdgeId, EdgeId>;
602
603template <typename K, typename V>
605
606using FaceMapOrHashMap = MapOrHashMap<FaceId, FaceId>;
607using VertMapOrHashMap = MapOrHashMap<VertId, VertId>;
608using EdgeMapOrHashMap = MapOrHashMap<EdgeId, EdgeId>;
609using UndirectedEdgeMapOrHashMap = MapOrHashMap<UndirectedEdgeId, UndirectedEdgeId>;
611using WholeEdgeMapOrHashMap = MapOrHashMap<UndirectedEdgeId, EdgeId>;
612
613template <typename I> class UnionFind;
614template <typename T, typename I, typename P> class Heap;
615
627struct MeshOrPointsXf;
628struct MeshTexture;
629struct GridSettings;
630struct TriMesh;
631
632MR_CANONICAL_TYPEDEFS( ( template <typename T> struct ), MRMESH_CLASS MeshRegion,
633 ( MeshPart, MeshRegion<FaceTag> )
634 ( MeshVertPart, MeshRegion<VertTag> )
635)
636
637template<typename T> class UniqueThreadSafeOwner;
638template<typename T> class SharedThreadSafeOwner;
639
640class PolylineTopology;
641
642MR_CANONICAL_TYPEDEFS( (template<typename V> struct), Polyline,
643 ( Polyline2, Polyline<Vector2f> )
644 ( Polyline3, Polyline<Vector3f> )
645)
646
649 ( AABBTreePolyline3, AABBTreePolyline<Vector3f> )
650)
651
652template<typename T> struct IntersectionPrecomputes;
653template<typename T> struct IntersectionPrecomputes2;
654
655MR_CANONICAL_TYPEDEFS( (template<typename V> struct [[nodiscard]]), PolylineProjectionResult,
656 ( PolylineProjectionResult2, PolylineProjectionResult<Vector2f> )
657 ( PolylineProjectionResult3, PolylineProjectionResult<Vector3f> )
658)
659
660MR_CANONICAL_TYPEDEFS( (template<typename V> struct [[nodiscard]]), PolylineProjectionWithOffsetResult,
662 ( PolylineProjectionWithOffsetResult3, PolylineProjectionWithOffsetResult<Vector3f> )
663)
664
665class DistanceMap;
668
669using GcodeSource = std::vector<std::string>;
670
671class Object;
672class SceneRootObject;
673class VisualObject;
674class ObjectMeshHolder;
675class ObjectMesh;
676struct ObjectMeshData;
678class ObjectPoints;
680class ObjectLines;
682class ObjectLabel;
683class ObjectGcode;
684class PointObject;
685class LineObject;
686class CircleObject;
687class PlaneObject;
688class SphereObject;
689class CylinderObject;
690class ConeObject;
691
692struct LoadedObjects;
693
694struct Image;
696
697class HistoryAction;
704class ChangeMeshAction;
707class ChangeXfAction;
709class SwapRootAction;
710
711MR_CANONICAL_TYPEDEFS( (template <typename Tag> class MRMESH_CLASS), ColorMapAggregator,
712 ( VertColorMapAggregator, ColorMapAggregator<VertTag> )
713 ( UndirEdgeColorMapAggregator, ColorMapAggregator<UndirectedEdgeTag> )
714 ( FaceColorMapAggregator, ColorMapAggregator<FaceTag> )
715)
716
717template<typename T>
718class FewSmallest;
719
720class Graph;
721class WatershedGraph;
722
724
728typedef std::function<bool( float )> ProgressCallback;
729
730enum class FilterType : char
731{
732 Linear,
734};
735
736enum class WrapType : char
737{
738 Repeat,
739 Mirror,
740 Clamp
741};
742
744enum class Reorder : char
745{
746 None,
748 AABBTree
749};
750
752template <typename T>
753constexpr inline T sqr( T x ) noexcept { return x * x; }
754
756template <typename T>
757constexpr inline int sgn( T x ) noexcept { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); }
758
760template <typename T>
761constexpr inline T distance( T x, T y ) noexcept { return x >= y ? x - y : y - x; }
762
764template <typename T>
765constexpr inline T distanceSq( T x, T y ) noexcept { return sqr( x - y ); }
766
768template <typename V, typename T>
769constexpr inline auto lerp( V v0, V v1, T t ) noexcept { return ( 1 - t ) * v0 + t * v1; }
770
771template<typename...>
772inline constexpr bool dependent_false = false;
773
774template<class... Ts>
775struct overloaded : Ts... { using Ts::operator()...; };
776
777// explicit deduction guide (not needed as of C++20, but still needed in Clang)
778template<class... Ts>
779overloaded(Ts...) -> overloaded<Ts...>;
780
783class IPointsProjector;
784
785namespace MeshBuilder
786{
787
788struct BuildSettings;
789struct Triangle;
790struct VertDuplication;
791
792} //namespace MeshBuilder
793
794} //namespace MR
795
796#ifdef __cpp_lib_unreachable
797# define MR_UNREACHABLE std::unreachable();
798# define MR_UNREACHABLE_NO_RETURN std::unreachable();
799#else
800# ifdef __GNUC__
801# define MR_UNREACHABLE __builtin_unreachable();
802# define MR_UNREACHABLE_NO_RETURN __builtin_unreachable();
803# else
804# include <cassert>
805# define MR_UNREACHABLE { assert( false ); return {}; }
806# define MR_UNREACHABLE_NO_RETURN assert( false );
807# endif
808#endif
#define MR_CANONICAL_TYPEDEFS(type_, name_, aliases_)
Definition MRCanonicalTypedefs.h:23
#define MRMESH_CLASS
Definition MRMesh/MRMeshFwd.h:84
Contour
Definition MRObjectLabel.h:16
Definition MRAABBTreeObjects.h:19
bounding volume hierarchy for point cloud structure
Definition MRAABBTreePoints.h:16
bounding volume hierarchy for line segments
Definition MRAABBTreePolyline.h:30
Definition MRAABBTree.h:16
Definition MRVisualObject.h:57
Definition MRMesh/MRBitSet.h:28
std::vector<V>-like container that is 1) resized without initialization of its elements,...
Definition MRBuffer.h:54
Undo action for ObjectMesh mesh change.
Definition MRChangeMeshAction.h:16
Undo action for ObjectMesh creases.
Definition MRChangeSelectionAction.h:122
Undo action for ObjectMesh edge selection.
Definition MRChangeSelectionAction.h:68
Undo action for ObjectMesh face selection.
Definition MRChangeSelectionAction.h:14
Undo action for ObjectMesh points only (not topology) change.
Definition MRChangeMeshAction.h:190
Undo action for ObjectMesh topology only (not points) change.
Definition MRChangeMeshAction.h:254
Definition MRChangeObjectAction.h:14
Undo action for ObjectPoints point selection.
Definition MRChangeSelectionAction.h:176
Definition MRChangeSceneAction.h:13
Definition MRChangeXfAction.h:13
Definition MRCircleObject.h:17
Class for aggregate several color map in one Color maps are aggregated according order.
Definition MRColorMapAggregator.h:17
Definition MRCombinedHistoryAction.h:12
Definition MRConeObject.h:19
Definition MRCylinderObject.h:18
Definition MRDistanceMap.h:24
the class stores some number of smallest elements from a larger number of candidates
Definition MRFewSmallest.h:14
mathematical graph consisting from vertices and undirected edges
Definition MRGraph.h:14
stores map from element id in[0, size) to T;
Definition MRMesh/MRMeshFwd.h:614
Definition MRHistoryAction.h:12
Abstract class for fast approximate computation of generalized winding number for a mesh (using its A...
Definition MRFastWindingNumber.h:12
abstract class for computing the closest points of point clouds
Definition MRPointsProject.h:93
Abstract class, computes the closest point on mesh to each of given points. Pure virtual functions mu...
Definition MRMesh/MRPointsToMeshProjector.h:13
Definition MRMesh/MRId.h:15
Definition MRMesh/MRLaplacian.h:34
Definition MRLineObject.h:13
Definition MRMesh/MRMeshOrPoints.h:18
Definition MRMesh/MRMeshTopology.h:19
Definition MRObjectDistanceMap.h:13
Definition MRObjectGcode.h:14
Definition MRObjectLabel.h:25
Definition MRObjectLinesHolder.h:19
Definition MRObjectLines.h:11
Definition MRObjectMeshHolder.h:32
Definition MRObjectMesh.h:11
Definition MRObjectPointsHolder.h:21
Definition MRObjectPoints.h:11
named object in the data model
Definition MRObject.h:62
Definition MRPlaneObject.h:12
Class to accumulate points and make best line / plane approximation.
Definition MRBestFit.h:20
Definition MRPointObject.h:13
Definition MRPointToPlaneAligningTransform.h:20
Definition MRPointToPointAligningTransform.h:16
Definition MRPolylineTopology.h:15
Object that is parent of all scene.
Definition MRSceneRoot.h:11
Definition MRSharedThreadSafeOwner.h:19
Definition MRSphereObject.h:15
Definition MRSwapRootAction.h:13
Definition MRMesh/MRBitSet.h:141
Union-find data structure for representing disjoin sets of elements with few very quick operations: 1...
Definition MRUnionFind.h:20
Definition MRUniqueThreadSafeOwner.h:18
Definition MRViewportId.h:16
stores mask of viewport unique identifiers
Definition MRViewportId.h:42
Visual Object.
Definition MRVisualObject.h:122
graphs representing rain basins on the mesh
Definition MRWatershedGraph.h:12
bool contains(const TypedBitSet< I > *bitset, I id)
Definition MRMesh/MRBitSet.h:254
std::function< bool(float)> ProgressCallback
Definition MRMesh/MRMeshFwd.h:728
std::optional< T > distanceSq(const Plane3< T > &plane1, const Plane3< T > &plane2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
Definition MRIntersection.h:90
std::optional< T > distance(const Plane3< T > &plane1, const Plane3< T > &plane2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
Definition MRIntersection.h:104
@ None
special value not to limit path in one slice
Definition MRVoxelPath.h:33
Definition MRCameraOrientationPlugin.h:8
std::function< float(VertId)> VertMetric
Definition MRMesh/MRMeshFwd.h:568
phmap::parallel_flat_hash_map< K, V, Hash, Eq > ParallelHashMap
Definition MRMesh/MRMeshFwd.h:594
std::vector< EdgeId > EdgeLoop
Definition MRMesh/MRMeshFwd.h:141
std::vector< std::string > GcodeSource
Definition MRMesh/MRMeshFwd.h:669
WrapType
Definition MRMesh/MRMeshFwd.h:737
std::array< VertId, 2 > TwoVertIds
two vertex ids describing an edge with the ends in vertices given by their ids
Definition MRMesh/MRMeshFwd.h:508
std::vector< SurfacePath > SurfacePaths
Definition MRMesh/MRMeshFwd.h:475
std::vector< EdgeLoop > EdgeLoops
Definition MRMesh/MRMeshFwd.h:142
Contour3< float > Contour3f
Definition MRMesh/MRMeshFwd.h:375
class MRMESH_CLASS UndirectedEdgeTag
Definition MRMesh/MRMeshFwd.h:95
constexpr T sqr(T x) noexcept
squared value
Definition MRMesh/MRMeshFwd.h:753
MR_CANONICAL_TYPEDEFS((template< typename T > class MRMESH_CLASS), Id,(EdgeId, Id< EdgeTag >)(UndirectedEdgeId, Id< UndirectedEdgeTag >)(FaceId, Id< FaceTag >)(VertId, Id< VertTag >)(PixelId, Id< PixelTag >)(VoxelId, Id< VoxelTag >)(RegionId, Id< RegionTag >)(NodeId, Id< NodeTag >)(ObjId, Id< ObjTag >)(TextureId, Id< TextureTag >)(GraphVertId, Id< GraphVertTag >)(GraphEdgeId, Id< GraphEdgeTag >)) template<> class MR_BIND_PREFERRED_NAME(MR class MR_BIND_PREFERRED_NAME(MR::VoxelId) Id< VoxelTag >
AABBTreePolyline2
Definition MRMesh/MRMeshFwd.h:648
class MRMESH_CLASS ObjTag
Definition MRMesh/MRMeshFwd.h:102
Eq
Definition MRMesh/MRMeshFwd.h:581
std::function< bool(FaceId)> FacePredicate
Definition MRMesh/MRMeshFwd.h:555
Contour2< double > Contour2d
Definition MRMesh/MRMeshFwd.h:372
class MRMESH_CLASS NodeTag
Definition MRMesh/MRMeshFwd.h:101
HashSet< VertId > VertHashSet
Definition MRMesh/MRMeshFwd.h:588
std::function< bool(EdgeId)> EdgePredicate
Definition MRMesh/MRMeshFwd.h:556
Hash
Definition MRMesh/MRMeshFwd.h:581
Contour2< float > Contour2f
Definition MRMesh/MRMeshFwd.h:373
Contours2< double > Contours2d
Definition MRMesh/MRMeshFwd.h:380
Contours3< float > Contours3f
Definition MRMesh/MRMeshFwd.h:383
std::uint64_t Uint64
Definition MRMesh/MRMeshFwd.h:194
std::function< bool(UndirectedEdgeId)> UndirectedEdgePredicate
Definition MRMesh/MRMeshFwd.h:557
Contours3< double > Contours3d
Definition MRMesh/MRMeshFwd.h:382
SurfacePaths PlaneSections
Definition MRMesh/MRMeshFwd.h:479
HashMap< VertId, VertId > VertHashMap
Definition MRMesh/MRMeshFwd.h:597
class MRMESH_CLASS VoxelTag
Definition MRMesh/MRMeshFwd.h:99
FilterType
Definition MRMesh/MRMeshFwd.h:731
SurfacePath IsoLine
Definition MRMesh/MRMeshFwd.h:476
Vector2f UVCoord
Definition MRMesh/MRMeshFwd.h:505
Triangle3< int > Triangle3i
Definition MRMesh/MRMeshFwd.h:460
std::vector< MeshEdgePoint > SurfacePath
Definition MRMesh/MRMeshFwd.h:474
HashMap< UndirectedEdgeId, EdgeId > WholeEdgeHashMap
mapping of whole edges: map[e]->f, map[e.sym()]->f.sym(), where only map[e] for even edges is stored
Definition MRMesh/MRMeshFwd.h:601
class MRMESH_CLASS FaceTag
Definition MRMesh/MRMeshFwd.h:96
class MRMESH_CLASS TextureTag
Definition MRMesh/MRMeshFwd.h:103
class MRMESH_CLASS PixelTag
Definition MRMesh/MRMeshFwd.h:98
Contours< Vector2< T > > Contours2
Definition MRMesh/MRMeshFwd.h:378
overloaded(Ts...) -> overloaded< Ts... >
constexpr int sgn(T x) noexcept
sign of given value in { -1, 0, 1 }
Definition MRMesh/MRMeshFwd.h:757
Contours2< float > Contours2f
Definition MRMesh/MRMeshFwd.h:381
std::function< float(EdgeId)> EdgeMetric
Definition MRMesh/MRMeshFwd.h:570
std::function< bool(EdgeId edgeToCollapse, const Vector3f &newEdgeOrgPos)> PreCollapseCallback
Definition MRMesh/MRMeshFwd.h:559
Contour< Vector2< T > > Contour2
Definition MRMesh/MRMeshFwd.h:370
Contour3< double > Contour3d
Definition MRMesh/MRMeshFwd.h:374
SurfacePath PlaneSection
Definition MRMesh/MRMeshFwd.h:478
HashMap< FaceId, FaceId > FaceHashMap
Definition MRMesh/MRMeshFwd.h:596
std::function< float(FaceId)> FaceMetric
Definition MRMesh/MRMeshFwd.h:569
Triangle3< double > Triangle3d
Definition MRMesh/MRMeshFwd.h:462
Contour< Vector3< T > > Contour3
Definition MRMesh/MRMeshFwd.h:371
HashSet< FaceId > FaceHashSet
Definition MRMesh/MRMeshFwd.h:587
std::vector< EdgeId > EdgePath
Definition MRMesh/MRMeshFwd.h:140
std::array< VertId, 3 > ThreeVertIds
three vertex ids describing a triangle with the corners in vertices given by their ids
Definition MRMesh/MRMeshFwd.h:511
class MRMESH_CLASS VertTag
Definition MRMesh/MRMeshFwd.h:97
std::pair< FaceId, FaceId > FacePair
Definition MRMesh/MRMeshFwd.h:484
constexpr NoInit noInit
Definition MRMesh/MRMeshFwd.h:91
HashSet< EdgeId > EdgeHashSet
Definition MRMesh/MRMeshFwd.h:589
std::pair< UndirectedEdgeId, UndirectedEdgeId > UndirectedEdgePair
Definition MRMesh/MRMeshFwd.h:486
I
Definition MRMesh/MRMeshFwd.h:130
std::pair< EdgeId, EdgeId > EdgePair
Definition MRMesh/MRMeshFwd.h:485
std::int64_t Int64
Definition MRMesh/MRMeshFwd.h:193
std::function< void(EdgeId e1, EdgeId e)> OnEdgeSplit
Definition MRMesh/MRMeshFwd.h:560
std::function< float(UndirectedEdgeId)> UndirectedEdgeMetric
Definition MRMesh/MRMeshFwd.h:571
constexpr auto lerp(V v0, V v1, T t) noexcept
Linear interpolation: returns v0 when t==0 and v1 when t==1.
Definition MRMesh/MRMeshFwd.h:769
constexpr bool dependent_false
Definition MRMesh/MRMeshFwd.h:772
Triangle3< float > Triangle3f
Definition MRMesh/MRMeshFwd.h:461
SurfacePaths IsoLines
Definition MRMesh/MRMeshFwd.h:477
class MRMESH_CLASS EdgeTag
Definition MRMesh/MRMeshFwd.h:94
std::vector< Contour< V > > Contours
Definition MRMesh/MRMeshFwd.h:377
Polyline2ProjectionWithOffsetResult
Definition MRMesh/MRMeshFwd.h:661
HashMap< EdgeId, EdgeId > EdgeHashMap
Definition MRMesh/MRMeshFwd.h:598
phmap::parallel_flat_hash_set< T, Hash, Eq > ParallelHashSet
Definition MRMesh/MRMeshFwd.h:584
std::pair< VertId, VertId > VertPair
Definition MRMesh/MRMeshFwd.h:483
HashMap< UndirectedEdgeId, UndirectedEdgeId > UndirectedEdgeHashMap
Definition MRMesh/MRMeshFwd.h:599
Contours< Vector3< T > > Contours3
Definition MRMesh/MRMeshFwd.h:379
class MRMESH_CLASS RegionTag
Definition MRMesh/MRMeshFwd.h:100
class MRMESH_CLASS GraphVertTag
Definition MRMesh/MRMeshFwd.h:104
phmap::flat_hash_map< K, V, Hash, Eq > HashMap
Definition MRMesh/MRMeshFwd.h:592
class MRMESH_CLASS GraphEdgeTag
Definition MRMesh/MRMeshFwd.h:105
Reorder
determines how points to be ordered
Definition MRMesh/MRMeshFwd.h:745
@ Lexicographically
the order is determined by lexicographical sorting by coordinates (optimal for uniform sampling)
Definition MRMesh/MRAffineXf.h:21
triangulations for all points, with easy access by VertId
Definition MRLocalTriangulations.h:48
flat map: I -> T
Definition MRBuffer.h:143
a ball = points surrounded by a sphere in arbitrary space with vector type V
Definition MRBall.h:12
Box given by its min- and max- corners.
Definition MRMesh/MRBox.h:26
Definition MRCloudPartMapping.h:10
Definition MRMesh/MRColor.h:9
Cubic Bezier curve.
Definition MRBezier.h:13
Definition MRDipole.h:11
options determining computation of distance from a point to a mesh
Definition MRDistanceToMeshOptions.h:11
Definition MREdgeLengthMesh.h:13
two edge-points (e.g. representing collision point of two edges)
Definition MREdgePoint.h:50
encodes a point on an edge of mesh or of polyline
Definition MREdgePoint.h:11
Represents a segment on one edge.
Definition MREdgePoint.h:61
settings defining regular grid, where each quadrangular cell is split on two triangles in one of two ...
Definition MRGridSettings.h:11
Definition MRImage.h:15
Definition MRMesh/MRMeshFwd.h:653
Definition MRMesh/MRMeshFwd.h:499
Definition MRMesh/MRMeshFwd.h:501
Definition MRLineSegm.h:11
Definition MRLine.h:12
result of loading (e.g. from a file) as a number of objects
Definition MRLoadedObjects.h:28
Definition MRMesh/MRMeshFwd.h:604
Definition MRMatrix2.h:19
Definition MRMesh/MRMatrix3.h:19
Definition MRMatrix4.h:20
Definition MRMinMaxArg.h:46
Definition MRMeshIntersect.h:18
an object and its transformation to global space with other objects
Definition MRMesh/MRMeshOrPoints.h:101
Definition MRMesh/MRMeshProject.h:18
Definition MRMesh/MRMeshPart.h:12
Definition MRMeshTexture.h:13
Definition MRMesh/MRMeshTriPoint.h:23
Definition MRMesh/MRMesh.h:23
Definition MRMinMaxArg.h:13
Definition MRMinMaxArg.h:79
Definition MRNoDefInit.h:11
Definition MRMesh/MRMeshFwd.h:90
mesh and its per-element attributes for ObjectMeshHolder
Definition MRObjectMeshData.h:14
Definition MRBuffer.h:151
mapping among elements of source mesh, from which a part is taken, and target mesh
Definition MRPartMapping.h:11
represents full point cloud (if region is nullptr) or some portion of point cloud (if region pointer ...
Definition MRPointCloudPart.h:10
Definition MRMesh/MRPointCloud.h:17
a point located on some mesh's face
Definition MRMesh/MRPointOnFace.h:11
Definition MRPointOnObject.h:18
Definition MRPointsProject.h:15
Definition MRPolylineProject.h:15
Definition MRPolylineProject.h:73
Definition MRPolyline.h:18
Definition MRQuadraticForm.h:13
options determining computation of signed distance from a point to a mesh
Definition MRDistanceToMeshOptions.h:37
describes a number of local triangulations of some points (e.g. assigned to a thread)
Definition MRLocalTriangulations.h:40
Definition MRSphere.h:11
Definition MRSymMatrix2.h:14
Definition MRSymMatrix3.h:15
Definition MRSymMatrix4.h:13
Definition MRTbbTaskArenaAndGroup.h:13
Definition MRTriMesh.h:13
Definition MRUnorientedTriangle.h:13
Definition MRVector2.h:27
Definition MRMesh/MRVector3.h:28
Definition MRVector4.h:22
Definition MRMesh/MRMeshFwd.h:775