MeshLib C++ Docs
Loading...
Searching...
No Matches
MR Namespace Reference

only for bindings generation More...

Namespaces

namespace  AsyncObjectLoad
namespace  BitSetParallel
namespace  Cuda
namespace  detail
namespace  DistanceMapLoad
namespace  DistanceMapSave
namespace  Features
namespace  FileDialog
namespace  FillingSurface
namespace  FixUndercuts
namespace  FloatGridComponents
namespace  GcodeLoad
namespace  ImageLoad
namespace  ImageSave
namespace  ImageTransform
namespace  ImGuiMath
 Utilities.
namespace  ImGuiMeasurementIndicators
namespace  ImGuiMV
 namespace for easy access to functions related to ImGui MultiViewport
namespace  LinesLoad
namespace  LinesSave
namespace  Locale
namespace  MeshBuilder
 Building topologies by triangles.
namespace  MeshComponents
namespace  MeshLoad
 compatibility names
namespace  MeshSave
namespace  Meta
 Metaprogramming helpers.
namespace  Nesting
namespace  ObjectLoad
namespace  ObjectSave
namespace  Parallel
namespace  PlanarTriangulation
namespace  PointCloudComponents
namespace  PointsLoad
namespace  PointsSave
namespace  PolylineComponents
namespace  ProgressBar
 Utilities to show application progress bar for long operations.
namespace  QualityControl
 Specialized UI for quality-control things.
namespace  RenderDimensions
namespace  RenderFeatures
namespace  RenderWrapObject
namespace  SceneLoad
namespace  SceneSave
namespace  SelfIntersections
namespace  SpaceMouse
namespace  StyleConsts
namespace  TriangulationHelpers
namespace  UI
namespace  UnitSettings
 This abstracts away the UI measurement unit configuration. Internally this uses setDefaultUnitParams().
namespace  Unsigned
 Additional support for unsigned types.
namespace  VoxelsLoad
namespace  VoxelsSave
namespace  WeightedShell

Classes

class  AABBTree
class  AABBTreeBase
 base class for most AABB-trees (except for AABBTreePoints) More...
struct  AABBTreeNode
class  AABBTreeObjects
class  AABBTreePoints
 bounding volume hierarchy for point cloud structure More...
class  AABBTreePolyline
 bounding volume hierarchy for line segments More...
struct  AABBTreeTraits
class  AddCustomThemePlugin
class  AddVisualProperties
struct  AffineXf
struct  AllLocalTriangulations
 triangulations for all points, with easy access by VertId More...
class  AlphaSortGL
class  AncillaryImGuiLabel
 Helper class that draws ImGui label. More...
struct  AncillaryLabel
 Helper class to manage ancillary labels used by plugins. More...
struct  AncillaryLines
 Helper class to manage ancillary visual lines used by plugins. More...
struct  AncillaryMesh
 Helper class to manage ancillary visual mesh used by plugins. More...
struct  AncillaryPlane
 small struct to simplify creating and clearing ancillary plane object in tools More...
struct  AncillaryPoints
 Helper class to manage ancillary visual points used by plugins. More...
class  AngleMeasurementObject
 Represents an angle measurement. More...
class  AnyVisualizeMaskEnum
struct  ArcInterpolationParams
class  AsyncRequest
class  AsyncTimer
 the object to set timer from any thread and wait for alert time from another thread More...
struct  Ball
 a ball = points surrounded by a sphere in arbitrary space with vector type V More...
struct  BaseFitParams
struct  BaseRenderParams
 Common rendering parameters for meshes and UI. More...
struct  BaseShellParameters
struct  BaseTiffParameters
class  BasicClickableRectUiRenderTask
struct  BasicUiRenderTask
 IRenderObject::renderUi() can emit zero or more or more of those tasks. They are sorted by depth every frame. More...
class  BasinVolumeCalculator
struct  BendContoursAlongCurveParams
 Parameters for aligning 2d contours along given curve. More...
struct  BendTextAlongCurveParams
class  BestFitParabola
 accumulates a number of (x,y) points to find the best-least-squares parabola approximating them More...
class  BestFitPolynomial
class  BinaryOperations
struct  BindVertexAttribArraySettings
class  BitSet
struct  BMap
 flat map: I -> T More...
struct  BooleanInternalParameters
 Parameters will be useful if specified. More...
struct  BooleanParameters
struct  BooleanPreCutResult
struct  BooleanResult
 Structure contain boolean result. More...
struct  BooleanResultMapper
 Structure to map old mesh BitSets to new. More...
struct  BooleanResultPoints
 vertices and points representing mesh intersection result More...
class  BoundarySelectionWidget
struct  Box
 Box given by its min- and max- corners. More...
struct  BoxedLeaf
class  Buffer
 std::vector<V>-like container that is 1) resized without initialization of its elements, 2) much simplified: no push_back and many other methods More...
class  CameraOrientation
class  CaptureScreenshotMenuItem
class  CaptureScreenshotToClipBoardMenuItem
class  CaptureUIScreenshotMenuItem
class  ChangeActiveBoxAction
 Undo action for ObjectVoxels active bounds change. More...
class  ChangeBoundarySelectionHistoryAction
class  ChangeColoringType
class  ChangeDualMarchingCubesAction
 Undo action for ObjectVoxels dual/standard marching cubes change. More...
class  ChangeFacesColorMapAction
class  ChangeGridAction
 Undo action for ObjectVoxels all data change (need for faster undo redo) More...
class  ChangeIsoAction
 Undo action for ObjectVoxels iso-value change. More...
class  ChangeLabelAction
class  ChangeLinesColorMapAction
class  ChangeMeshAction
 Undo action for ObjectMesh mesh change. More...
class  ChangeMeshCreasesAction
 Undo action for ObjectMesh creases. More...
class  ChangeMeshDataAction
 Undo action for ObjectMeshData change. More...
class  ChangeMeshEdgeSelectionAction
 Undo action for ObjectMesh edge selection. More...
class  ChangeMeshFaceSelectionAction
 Undo action for ObjectMesh face selection. More...
class  ChangeMeshPointsAction
 Undo action for ObjectMesh points only (not topology) change. More...
class  ChangeMeshTexturePerFaceAction
 Undo action for ObjectMeshHolder texturePerFace change. More...
class  ChangeMeshTopologyAction
 Undo action for ObjectMesh topology only (not points) change. More...
class  ChangeMeshUVCoordsAction
 Undo action for ObjectMeshHolder uvCoords change. More...
class  ChangeNameAction
class  ChangeObjectAction
class  ChangeObjectColorAction
class  ChangeObjectSelectedAction
class  ChangeObjectVisibilityAction
class  ChangeOneNormalInCloudAction
class  ChangeOnePointInCloudAction
class  ChangeOnePointInPolylineAction
class  ChangePointCloudAction
class  ChangePointCloudNormalsAction
class  ChangePointCloudPointsAction
class  ChangePointPointSelectionAction
 Undo action for ObjectPoints point selection. More...
class  ChangePolylineAction
 Undo action for ObjectLines polyline change. More...
class  ChangePolylinePointsAction
 Undo action for ObjectLines points only (not topology) change. More...
class  ChangePolylineTopologyAction
 Undo action for ObjectLines topology only (not points) change. More...
class  ChangeScaleAction
class  ChangeSceneAction
class  ChangeSceneObjectsOrder
class  ChangeSurfaceAction
 Undo action for ObjectVoxels surface change (need for faster undo redo) More...
class  ChangeTextureAction
class  ChangeValue
class  ChangeVertsColorMapAction
class  ChangeVisualizePropertyAction
class  ChangeXfAction
class  ChangVoxelSelectionAction
 Undo action for ObjectVoxels face selection. More...
struct  CharPressedListener
struct  Chunk
 array chunk representation More...
struct  ChunkIterator
 iterator class for array chunks More...
class  CircleObject
struct  CloseToMeshVolumeParams
struct  CloudPartMapping
 mapping among elements of source point cloud, from which a part is taken, and target (this) point cloud More...
struct  CmpOld
 argument of this type indicates that the object is already in new state, and the following argument is old state More...
class  CNCMachineSettings
 class with CNC machine emulation settings More...
struct  Color
class  ColorMapAggregator
 Class for aggregate several color map in one Color maps are aggregated according order. More...
class  ColorTheme
class  CombinedHistoryAction
class  CommandLoop
 Additional command loop for external app control. More...
struct  CompensateRadiusParams
 structure with parameters for compensateRadius function More...
struct  CompressZipSettings
struct  ComputeSteepestDescentPathSettings
struct  ComputeSweptVolumeParameters
 Parameters for computeSweptVolume* functions. More...
class  Cone3
 Base class for cone parameterization. More...
class  Cone3Approximation
struct  Cone3ApproximationParams
struct  ConeFittingFunctor
class  ConeObject
class  Config
struct  ConnectionHolder
struct  ConstantCuspParams
struct  ContoursDistanceMapOffset
 Structure with parameters for optional offset in distanceMapFromContours function. More...
struct  ContoursDistanceMapOptions
struct  ContoursMeshAlignParams
 Parameters for aligning 2d contours onto mesh surface. More...
struct  ContourToDistanceMapParams
 Structure with parameters to generate DistanceMap by Contours. More...
struct  CoordinateConverters
 this struct contains coordinate converters float-int-float More...
struct  CoordinateConverters2
 this struct contains coordinate converters float-int-float More...
class  CornerControllerObject
 class that holds and manages corner controller object More...
struct  CubicBezierCurve
 Cubic Bezier curve. More...
class  CudaAccessor
 The purpose of this class is to access CUDA algorithms without explicit dependency on MRCuda. More...
struct  CursorEntranceListener
 class to subscribe on CursorEntranceSingal More...
struct  CurveFunc
struct  CurvePoint
struct  CustomButtonParameters
struct  CutByProjectionSettings
 Settings structurer for cutMeshByProjection function. More...
struct  CutMeshParameters
 Parameters of MR::cutMesh. More...
struct  CutMeshResult
class  Cylinder3
class  Cylinder3Approximation
class  CylinderObject
struct  DecimatePolylineResult
 Results of MR::decimateContour. More...
struct  DecimatePolylineSettings
 Parameters structure for MR::decimatePolyline. More...
struct  DecimateResult
 Results of MR::decimateMesh. More...
struct  DecimateSettings
 Parameters structure for MR::decimateMesh. More...
class  DefaultSplashWindow
struct  DeloneSettings
class  DemoPlugin
struct  DenoiseViaNormalsSettings
struct  DenseBox
class  DentalId
 This class represents tooth id. More...
class  DepthPeelingGL
 class to encapsulate depth peeling rendering passes as fall back if alpha sort is not available More...
struct  DetectTunnelSettings
struct  Dipole
class  DirectionWidget
 Widget for visualizing the direction. More...
struct  Directory
struct  DirectoryIterator
 iterator of directory items that will save any errors in (ec) instead of throwing exceptions More...
struct  DirectoryRecursive
struct  DirectoryRecursiveIterator
 recursive iterator of directory items that will save any errors in (ec) instead of throwing exceptions More...
struct  Dirty
struct  DistanceFromWeightedPointsComputeParams
struct  DistanceFromWeightedPointsParams
class  DistanceMap
struct  DistanceMapLoadSettings
 settings for loading distance maps from external formats More...
struct  DistanceMapSaveSettings
 determines how to save distance maps More...
struct  DistanceMapToWorld
 This structure store data to transform distance map to world coordinates. More...
class  DistanceMeasurementObject
 Represents a distance measurement. More...
struct  DistanceToMeshOptions
 options determining computation of distance from a point to a mesh More...
struct  DistanceVolumeParams
struct  DivideMeshWithPlaneParams
struct  DividePointCloudOptionalOutput
struct  DividePolylineParameters
struct  DoubleOffsetSettings
struct  DragDropListener
struct  DragEndListener
struct  DragEntranceListener
struct  DragListener
struct  DragOverListener
struct  DragStartListener
struct  DrawButtonParams
struct  DrawListener
struct  DrawSceneUiListener
 A helper base class to subscribe to ImGuiMenu::drawSceneUiSignal. More...
class  DrawViewportWidgetsItem
 This sits in the background and renders various per-viewport buttons. More...
struct  EdgeLengthMesh
class  EdgePathsAStarBuilder
class  EdgePathsBuilderT
 the class is responsible for finding smallest metric edge paths on a mesh More...
struct  EdgePoint
 encodes a point on an edge of mesh or of polyline More...
struct  EdgePointPair
 two edge-points (e.g. representing collision point of two edges) More...
struct  EdgeSegment
 Represents a segment on one edge. More...
struct  EdgeTri
 edge from one mesh and triangle from another mesh More...
class  EmbeddedPython
struct  EmbeddedStructureParameters
 Parameters of structure embedding in terrain. More...
struct  EndMillCutter
 end mill cutter specifications More...
struct  EndMillTool
 end mill tool specifications More...
class  EnumNeihbourFaces
class  EnumNeihbourVertices
struct  FaceDistancesSettings
struct  FaceFace
 a pair of faces More...
struct  FaceFaceFace
 a triple of faces More...
struct  FanRecord
 describes one fan of triangles around a point excluding the point More...
struct  FanRecordWithCenter
 describes one fan of triangles around a point including the point More...
class  FastWindingNumber
class  FeatureObject
 An interface class which allows feature objects to share setters and getters on their main properties, for convenient presentation in the UI. More...
struct  FeatureObjectProjectPointResult
struct  FeatureObjectSharedProperty
class  FewSmallest
 the class stores some number of smallest elements from a larger number of candidates More...
class  File
 the class to open C FILE handle and automatically close it in the destructor More...
struct  FileDialogSignals
 This structure contains global signals for file dialogs, that are called on valid selection of file or folder. More...
struct  FileLoadOptions
struct  FileParameters
struct  FillHoleItem
struct  FillHoleMetric
 Holds metrics for fillHole and stitchHoles triangulation
. More...
struct  FillHoleNicelySettings
struct  FillHoleParams
 Parameters structure for MR::fillHole
Structure has some options to control MR::fillHole. More...
struct  FillHolesWithExtraPointsParams
struct  FindDisorientationParams
 Parameters for findDisorientedFaces function. More...
struct  FindInnerShellSettings
struct  FindOutliersParams
 Outlier point search parameters. More...
struct  FindOverhangsSettings
 parameters for MR::findOverhangs More...
struct  FindOverlappingSettings
struct  FindProjectionOnPointsSettings
 settings for IPointsProjector::findProjections More...
struct  FitBoxParams
class  FitDataMenuItem
struct  FitDataParams
class  FitSelectedObjectsMenuItem
class  FitSelectedPrimitivesMenuItem
struct  FixCreasesParams
 Parameters structure for fixMeshCreases function. More...
struct  FixMeshDegeneraciesParams
struct  FlatTree
class  FloatGrid
 wrapper class that helps mrbind to avoid excess MRVDBFloatGrid.h includes More...
class  FlowAggregator
 this class can track multiple flows and find in each mesh vertex the amount of water reached it More...
struct  FlowOrigin
class  FormatRegistry
class  FramebufferData
 class for easier rendering in framebuffer texture More...
class  FrameCounter
class  FrameRedrawRequest
 class for requesting frame redraw in some time More...
class  FreeFormBestFit
class  FreeFormDeformer
 Class for deforming mesh using Bernstein interpolation. More...
class  FunctionRef
class  FunctionRef< R(Args...)>
 Simplified implementation of std::function_ref from C++26. More...
class  GcodeProcessor
 class to process g-code source and generate toolpath More...
class  GcodeToolsLibrary
 class for storing CNC tools More...
struct  GCommand
struct  GeneralOffsetParameters
 allows the user to select in the parameters which offset algorithm to call More...
struct  GeodesicPath
class  GlBuffer
 represents OpenGL buffer owner, and allows uploading data in it remembering buffer size More...
class  GLStaticHolder
class  GlTexture
 represents OpenGL texture owner, and allows uploading data in it remembering texture size More...
class  GlTexture2
 represents OpenGL 2D texture owner, and allows uploading data in it remembering texture size More...
class  GlTexture2DArray
 represents OpenGL array texture 2D owner, and allows uploading data in it remembering texture size More...
class  GlTexture3
 represents OpenGL 3D texture owner, and allows uploading data in it remembering texture size More...
class  Graph
 mathematical graph consisting from vertices and undirected edges More...
struct  GridSettings
 settings defining regular grid, where each quadrangular cell is split on two triangles in one of two ways More...
struct  GridToMeshSettings
 parameters of OpenVDB Grid to Mesh conversion using Dual Marching Cubes algorithm More...
class  Heap
 stores map from element id in[0, size) to T; More...
class  Histogram
class  Historian
class  HistoryAction
class  HistoryStore
 This class stores history stack for undo/redo. More...
struct  HoleEdgePoint
struct  HoleFillPlan
 concise representation of proposed hole triangulation More...
class  IComputeToolDistance
 Interface for custom tool distance computation implementations. More...
struct  IConnectable
class  ICP
struct  ICPGroupPair
struct  ICPGroupPairs
struct  ICPPairData
struct  ICPProperties
 parameters of ICP algorithm More...
class  Id
 stores index of some element, it is made as template class to avoid mixing faces, edges and vertices More...
class  Id< EdgeTag >
class  Id< VoxelTag >
class  IDragDropHandler
 this class is needed to emit detailed Drag & Drop events to Viewer on different platforms More...
struct  IdRange
 range of indices [beg, end) More...
class  IFastWindingNumber
 Abstract class for fast approximate computation of generalized winding number for a mesh (using its AABB tree) More...
class  IFastWindingNumberByParts
 Abstract class that complements IFastWindingNumber with chunked processing variants of its methods. More...
class  IICPTreeIndexer
 structure to find leafs and groups of each in cascade mode More...
struct  Image
class  ImGuiImage
class  ImGuiMenu
struct  ImproveSamplingSettings
struct  InflateSettings
class  InplaceStack
 Container class implementing in-place static sized stack. More...
struct  InSphere
 found maximal inscribed sphere touching input point with center along given direction More...
struct  InSphereSearchSettings
 controls the finding of maximal inscribed sphere in mesh More...
struct  InterruptCloseListener
struct  IntersectionPrecomputes
struct  IntersectionPrecomputes2
class  InTreePathBuilder
struct  IntrinsicDeloneSettings
struct  IOFilter
class  IPluginUpdate
 Interface for automatically update StatePlugins internal data. More...
struct  IPointPairs
 Simple interface for pairs holder. More...
class  IPointsProjector
 abstract class for computing the closest points of point clouds More...
class  IPointsToMeshProjector
 Abstract class, computes the closest point on mesh to each of given points. Pure virtual functions must be implemented. More...
class  IRenderObject
class  ISceneSelectionChange
 Interface for processing scene state change in RibbonItems. More...
class  ISceneStateCheck
 Interface for checking scene state, to determine availability, also can return string with requirements. More...
struct  IsVisualizeMaskEnum
struct  IsVisualizeMaskEnum< DimensionsVisualizePropertyType >
struct  IsVisualizeMaskEnum< FeatureVisualizePropertyType >
struct  IsVisualizeMaskEnum< LabelVisualizePropertyType >
struct  IsVisualizeMaskEnum< LinesVisualizePropertyType >
struct  IsVisualizeMaskEnum< MeshVisualizePropertyType >
struct  IsVisualizeMaskEnum< PointMeasurementVisualizePropertyType >
struct  IsVisualizeMaskEnum< PointsVisualizePropertyType >
struct  IsVisualizeMaskEnum< VisualizeMaskType >
class  ItemEnabledPerViewport
struct  IteratorRange
class  ITransformControls
 Interface class for ObjectTransformWidget custom visualization. More...
class  IViewerSettingsManager
struct  KeyDownListener
struct  KeyRepeatListener
struct  KeyUpListener
class  LambdaRibbonItem
 Simple ribbon item acting given lambda. More...
class  Laplacian
struct  LaunchParams
 This struct contains rules for viewer launch. More...
struct  Line
struct  Line3Mesh
struct  LineInterpolationParams
class  LineObject
struct  LineSegm
 a segment of straight dimensional line More...
struct  LinesLoadSettings
 setting for polyline loading from external format, and locations of optional output data More...
struct  LoadedMeshData
 ObjectMeshData and additional information from mesh importer. More...
struct  LoadedObjects
 result of loading (e.g. from a file) as a number of objects More...
struct  LoadedObjectT
 result of loading (e.g. from a file) as one object (with possible subobjects) More...
class  Logger
 Make default spd logger. More...
class  LoggingStreambuf
 A custom streambuf that outputs things directly to the default spdlog logger. More...
struct  MakeBridgeResult
struct  MakeDegenerateBandAroundRegionParams
 holds together settings for makeDegenerateBandAroundRegion More...
struct  MakeSignedByWindingNumberSettings
struct  MapOrHashMap
class  MarchingCubesByParts
struct  MarchingCubesParams
struct  MarkedContour3f
class  MarkedVoxelSlice
 ImGui visualization of a slice from voxel object and seed marks on it. More...
struct  Matrix
struct  Matrix2
struct  Matrix3
struct  Matrix4
struct  MaxArg
class  MeasurementObject
struct  MenuItemCaptionSize
struct  MenuItemInfo
struct  MergeVolumePartSettings
 Parameters' structure for MR::mergeVolumePart. More...
struct  Mesh
struct  MeshApproxRelaxParams
struct  MeshAttributesToUpdate
 the attribute data of the mesh that needs to be updated More...
class  MeshDiff
struct  MeshEqualizeTriAreasParams
struct  MeshIntersectionResult
struct  MeshLoadSettings
 setting for mesh loading from external format, and locations of optional output data More...
struct  MeshMeshConverter
struct  MeshMeshDistanceResult
struct  MeshMeshSignedDistanceResult
class  MeshModifier
struct  MeshNormals
class  MeshOnVoxelsT
class  MeshOrPoints
class  MeshOrPointsObject
struct  MeshOrPointsXf
 an object and its transformation to global space with other objects More...
struct  MeshPoint
 describes the point of measurement on mesh More...
struct  MeshPointAndDistance
struct  MeshProjectionParameters
struct  MeshProjectionResult
struct  MeshProjectionTransforms
struct  MeshRegion
struct  MeshRelaxParams
struct  MeshTexture
struct  MeshToDirectionVolumeParams
struct  MeshToDistanceMapParams
struct  MeshToDistanceVolumeParams
class  MeshTopology
class  MeshTopologyDiff
struct  MeshToVolumeParams
 Parameters structure for meshToVolume function. More...
struct  MeshTriPoint
struct  MeshVoxelsConverter
 converter of meshes in or from signed distance volumetric representation More...
struct  MetricToAStarPenalty
struct  MinArg
struct  MinMaxArg
class  ModalDialog
 Helper class to display modal dialogs. ModalDialogSettings. More...
struct  ModalDialogSettings
 Settings for ModalDialog. More...
struct  ModelBaseRenderParams
struct  ModelPointsData
 structure to contain pointers to model data More...
struct  ModelRenderParams
 Mesh rendering parameters for primary rendering (as opposed to the picker). More...
struct  MouseClickListener
class  MouseController
struct  MouseDownListener
struct  MouseMoveListener
struct  MouseScrollListener
struct  MouseUpListener
struct  MovementBuildBodyParams
struct  MoveMeshToVoxelMaxDerivSettings
class  MoveObjectByMouse
class  MoveObjectByMouseImpl
struct  MruFormatParameters
 Parameters of mesh / point / voxel object storage formats inside an .mru file. More...
struct  MultiListener
struct  MultiMeshIntersectionResult
struct  MultiRayMeshIntersectResult
class  MultiwayAligningTransform
class  MultiwayICP
struct  MultiwayICPSamplingParameters
 Parameters that are used for sampling of the MultiwayICP objects. More...
struct  MutexOwner
struct  NameTagClickListener
 A helper base class to subscribe to ImGuiMenu::manuallySelectObjectSignal. More...
struct  NewEdgesMap
class  NextEdgeSameLeft
class  NextEdgeSameOrigin
struct  NoCtor
struct  NoCtor< T >
 for trivial types, return the type itself More...
struct  NoDefInit
 this class is similar to T, but does not make default initialization of the fields for best performance More...
struct  NodeNode
struct  NoInit
class  NoInitId
 Variant of Id<T> with omitted initialization by default. Useful for containers. More...
struct  NoiseSettings
struct  NoModelCheck
 special struct for disabling model check More...
class  NormalsToPoints
struct  NotificationTags
struct  NoVisualRepresentationCheck
 special struct for disabling visual representation check More...
struct  NumSum
class  Object
 named object in the data model More...
class  ObjectChildrenHolder
class  ObjectComparableWithReference
 A base class for a data-model object that is a feature/measurement that can be compared between two models. More...
class  ObjectDistanceMap
class  ObjectFactory
class  ObjectFactoryBase
class  ObjectGcode
class  ObjectImGuiLabel
class  ObjectLabel
class  ObjectLines
class  ObjectLinesHolder
class  ObjectMesh
struct  ObjectMeshData
 mesh and its per-element attributes for ObjectMeshHolder More...
class  ObjectMeshHolder
struct  ObjectMeshMergeOptions
 options to better control MR::merge function More...
class  ObjectPoints
class  ObjectPointsHolder
class  ObjectTagEventDispatcher
 class for dispatching object tag addition/removal events More...
class  ObjectTransformWidget
class  ObjectVoxels
struct  ObjKindTraits
 Various information about different types of objects. More...
struct  ObjKindTraits< FeaturesObjectKind::Circle >
struct  ObjKindTraits< FeaturesObjectKind::Cone >
struct  ObjKindTraits< FeaturesObjectKind::Cylinder >
struct  ObjKindTraits< FeaturesObjectKind::Line >
struct  ObjKindTraits< FeaturesObjectKind::Plane >
struct  ObjKindTraits< FeaturesObjectKind::Point >
struct  ObjKindTraits< FeaturesObjectKind::Sphere >
struct  ObjTreeTraits
struct  ObjVertId
struct  OffsetContourIndex
struct  OffsetContoursOrigins
struct  OffsetContoursParams
struct  OffsetContoursRestoreZParams
 Parameters of restoring Z coordinate of XY offset 3d contours. More...
struct  OffsetParameters
struct  OneMeshContour
 One contour on mesh. More...
struct  OneMeshIntersection
 Simple point on mesh, represented by primitive id and coordinate in mesh space. More...
class  OpenDICOMsMenuItem
class  OpenDirectoryMenuItem
class  OpenFilesMenuItem
class  OpenRawVoxelsPlugin
struct  OpenVdbFloatGrid
 this class just hides very complex type of typedef openvdb::FloatGrid More...
struct  OriginAndDimensions
 shift of zero voxel in 3D space and dimensions of voxel-grid More...
struct  OutAttributesFillingSettings
struct  OutlierParams
 Parameters of various criteria for detecting outlier points. More...
class  OutliersDetector
struct  OutputFlows
struct  overloaded
struct  PackMapping
class  Palette
 Class to hold one dimension texture with value to UV mapping. More...
class  PalettePresets
 Class to save and load user palette presets. More...
struct  Parabola
 Represents quadratic function f(x) = a*x*x + b*x + c. More...
class  ParallelProgressReporter
class  PartialChangeMeshAction
 Undo action for efficiently storage of partial change in mesh (e.g. a modification of small region) More...
class  PartialChangeMeshDataAction
 Undo action for ObjectMeshData change partially. More...
class  PartialChangeMeshPointsAction
 Undo action for efficiently storage of partial change in mesh points (e.g. a modification of small region) More...
class  PartialChangeMeshTopologyAction
 Undo action for efficiently storage of partial change in mesh topology (e.g. a modification of small region) More...
struct  PartMapping
 mapping among elements of source mesh, from which a part is taken, and target mesh More...
class  Pdf
struct  PdfParameters
 Parameters of document style. More...
class  PickPointManager
struct  Plane3
class  PlaneAccumulator
 Class to accumulate planes to find then their crossing point. More...
class  PlaneObject
class  PlaneWidget
class  PluginCloseOnChangeMesh
class  PluginCloseOnChangePointCloud
class  PluginCloseOnEscPressed
 Helper class to close a dialog-less plugin when the Esc key is pressed. More...
class  PluginCloseOnSelectedObjectRemove
class  PluginUpdateOnChangeMeshPart
class  PluginUpdateOr
struct  PlyLoadParams
 optional load artifacts and other setting for PLY file loading More...
class  PointAccumulator
 Class to accumulate points and make best line / plane approximation. More...
struct  PointAndDistance
struct  PointCloud
struct  PointCloudApproxRelaxParams
struct  PointCloudPart
 represents full point cloud (if region is nullptr) or some portion of point cloud (if region pointer is valid) More...
struct  PointCloudRelaxParams
struct  PointInAllSpaces
class  PointMeasurementObject
class  PointObject
struct  PointOnFace
 a point located on some mesh's face More...
struct  PointOnObject
struct  PointPair
 Stores a pair of points: one samples on the source and the closest to it on the target. More...
struct  PointPairs
struct  PointsLoadSettings
 structure with settings and side output parameters for loading point cloud More...
struct  PointsProjectionResult
class  PointsProjector
 default implementation of IPointsProjector More...
struct  PointsToDistanceVolumeParams
struct  PointsToMeshParameters
class  PointsToMeshProjector
 Computes the closest point on mesh to each of given points on CPU. More...
class  PointToPlaneAligningTransform
class  PointToPointAligningTransform
struct  Polyline
struct  PolylineIntersectionResult2
struct  PolylineMaker
 simplifies construction of connected polyline in the topology More...
struct  PolylineProjectionResult
struct  PolylineProjectionResult3Arg
struct  PolylineProjectionWithOffsetResult
struct  PolylineSubdivideSettings
struct  PolylineToDistanceVolumeParams
class  PolylineTopology
struct  PolylineToVolumeParams
 Settings to conversion polyline to volume. More...
struct  PolylineTraits
struct  PolylineTraits< Vector2f >
struct  PolylineTraits< Vector3f >
class  PolylineUndirectedEdgeIterator
struct  Polynomial
struct  PolynomialWrapper
 This is a unifying interface for a polynomial of some degree, known only in runtime. More...
struct  PositionedText
struct  PositionVertsSmoothlyParams
struct  PostDrawListener
struct  PostFocusListener
 class to subscribe on PostFocusSingal More...
struct  PostRescaleListener
struct  PostResizeListener
class  PrecipitationSimulator
 the class models water increase in the terrain under the rain with constant precipitation More...
struct  PreciseVertCoord
struct  PreciseVertCoords
struct  PreciseVertCoords2
struct  PreDrawListener
struct  PreSetupViewListener
class  PriorityQueue
 similar to std::priority_queue, but with ability to access underlying vector to custom modify its elements More...
struct  ProgressInterrupter
 This class implements OpenVdb interrupter interface and provides ability to use MR::ProgressCallback in some OpenVdb operations. More...
struct  ProjectAttributeParams
 this structure contains transformation for projection from one mesh to another and progress callback More...
class  ProvidesViewportWidget
 Inherit your plugin from this to draw viewport widgets from there. More...
class  PythonExport
struct  PythonFunctionAdder
struct  QuadraticForm
class  QuadricApprox
class  QuadTextureVertexObject
 class for rendering simple texture More...
struct  Quaternion
class  RadiusMeasurementObject
 Represents a radius measurement. More...
class  RangeCounter
 functor to calculate tile and leaf valid nodes count More...
class  RangeProcessor
 Class to use in tbb::parallel_reduce for openvdb::tree transformation. More...
class  RangeProcessorSingle
 Class to use in tbb::parallel_reduce for tree operations that do not require an output tree. More...
class  RangeProgress
struct  RangeSize
struct  RawTiffOutput
struct  RayOrigin
struct  RebuildMeshSettings
class  RecentFilesStore
class  RectIndexer
 a class for converting 2D integer coordinates into 1D linear coordinates and backward More...
class  RedoMenuItem
struct  RefineParameters
 Optional parameters for refineFeatureObject. More...
class  RegisterRenderObjectConstructor
class  RegularMapMesher
 Class for making mesh from regular distance map. More...
struct  RelaxParams
struct  RemeshSettings
class  RenderAngleObject
class  RenderBufferRef
 provides access to shared buffer with type casting More...
class  RenderDistanceObject
class  RenderImGuiLabelObject
 The implementation of IRenderObject used by ObjectImGuiLabel. Draws an label using ImGui. More...
class  RenderLabelObject
class  RenderLinesObject
class  RenderMeshObject
class  RenderNameObject
class  RenderObjectBuffer
 provides shared buffer for loading different types of data to GL memory More...
class  RenderObjectCombinator
 Combines several different IRenderObjects into one in a meaningful way. More...
class  RenderPointObject
class  RenderPointsObject
class  RenderRadiusObject
class  RenderResetDirtyComponent
 Simple render object to clear dirty flags in render objects combinations. More...
class  RenderVolumeObject
class  ResetSceneMenuItem
struct  ResolveMeshDegenSettings
class  RestoringStreamsSink
class  RibbonButtonDrawer
 class for drawing ribbon menu buttons More...
struct  RibbonConfig
class  RibbonFontHolder
 class for convenient use of ImGui::PushFont / ImGui::PopFont with ribbon fonts More...
class  RibbonFontManager
class  RibbonIcons
 this class holds icons for ribbon items More...
class  RibbonMenu
class  RibbonMenuItem
class  RibbonMenuItemAdder
class  RibbonMenuItemAdderT
class  RibbonMenuItemCall
class  RibbonMenuSearch
 separate class for search in ribbon menu More...
struct  RibbonMenuUIConfig
struct  RibbonNotification
class  RibbonNotifier
 class to hold and operate with notifications More...
class  RibbonSceneHideAll
class  RibbonSceneObjectsListDrawer
 class for drawing a list of scene objects in RibbonMenu style More...
class  RibbonSceneRemoveSelected
class  RibbonSceneRename
class  RibbonSceneSelectAll
class  RibbonSceneShowAll
class  RibbonSceneShowOnlyNext
class  RibbonSceneShowOnlyPrev
class  RibbonSceneSortByName
class  RibbonSceneUnselectAll
struct  RibbonSchema
 This structure describes UI schema of ribbon menu. More...
class  RibbonSchemaHolder
class  RibbonSchemaLoader
 Class for loading ribbon schema from structure files (basically called from RibbonMenu, but can be called separately) More...
class  RibbonSchemaLoadListener
struct  RibbonTab
struct  RigidScaleXf3
struct  RigidXf3
class  RingIterator
 The iterator to find all edges in a ring of edges (e.g. all edges with same origin or all edges with same left face) More...
class  SaveObjectMenuItem
struct  SaveObjectSettings
class  SaveOnClosePlugin
 this plugin will show a message to the user if she closes the application when something is modified More...
class  SaveSceneAsMenuItem
class  SaveSceneMenuItem
class  SaveSelectedMenuItem
struct  SaveSettings
 determines how to save points/lines/mesh More...
class  SceneCache
 class to cached scene objects data More...
struct  SceneColors
class  SceneObjectsListDrawer
 class for drawing a list of scene objects (and handling interaction with it) More...
struct  SceneReorder
class  SceneRoot
class  SceneRootObject
 Object that is parent of all scene. More...
class  SceneSelectionChangeClose
 close on state change More...
class  SceneSelectionChangeRestart
 restart on state change More...
class  SceneSettings
class  SceneStateAndCheck
 checks that all of argument checks are true More...
class  SceneStateAtLeastCheck
 checks that given vector has at least N objects if type ObjectT More...
class  SceneStateAtLeastCheck< N, ObjectT, NoModelCheck >
class  SceneStateAtLeastCheck< N, ObjectT, NoVisualRepresentationCheck >
class  SceneStateExactCheck
 check that given vector has exactly N objects if type ObjectT More...
class  SceneStateExactCheck< N, ObjectT, NoModelCheck >
class  SceneStateExactCheck< N, ObjectT, NoVisualRepresentationCheck >
class  SceneStateOrCheck
 checks that at least one of argument checks is true More...
class  SceneTextureGL
 Class for rendering 3d scene into texture. More...
class  ScopeHistory
 The purpose of this class is to combine all actions appended to global history store in one big action to undo/redo them all at once. More...
struct  SearchPathSettings
 Geo path search settings. More...
struct  SegmEndColors
 colors of segment ends More...
struct  SegmentSegmentIntersectResult
struct  SegmPoint
 encodes a point inside a line segment using relative distance in [0,1] More...
class  SelectObjectByClick
class  SeparationPointStorage
 storage for points on voxel edges used in Marching Cubes algorithms More...
class  SetBitIteratorT
 iterator to enumerate all indices with set bits in BitSet class or its derivatives More...
struct  SetNew
 argument of this type indicates that the object is in old state, and the following argument is new state to be set More...
class  SetViewportConfigPresetMenuItem
class  SetViewPresetMenuItem
struct  ShaderWarning
class  ShadowsGL
class  SharedThreadSafeOwner
struct  SharpenMarchingCubesMeshSettings
struct  SharpOffsetParameters
struct  ShellVertexInfo
 information about shell vertex More...
class  ShiftTransformer
 functor for shifting voxels More...
struct  ShortcutKey
class  ShortcutManager
struct  Signal
struct  SignedDistanceToMeshOptions
 options determining computation of signed distance from a point to a mesh More...
struct  SignedDistanceToMeshResult
struct  SimpleTimeRecord
struct  SkyPatch
 this class represents a portion of the sky, and its radiation More...
struct  SliceInfo
struct  SliceInfoBase
struct  SmoothFillingSettings
struct  SomeLocalTriangulations
 describes a number of local triangulations of some points (e.g. assigned to a thread) More...
struct  SortIntersectionsData
 Special data to sort intersections more accurate. More...
struct  SpaceMouseDownListener
 class to subscribe on SpaceMouseDownSgnal More...
struct  SpaceMouseMoveListener
 class to subscribe on SpaceMouseMoveSignal More...
struct  SpaceMouseUpListener
 class to subscribe on SpaceMouseUpSignal More...
struct  SpacingSettings
class  SparsePolynomial
struct  Sphere
class  SphereObject
struct  SphereParams
class  SplashWindow
struct  SplineSettings
class  Src2TgtMaps
 use this adapter to call functions expecting PartMapping parameter to receive src2tgt dense maps More...
class  StateBasePlugin
class  StateListenerPlugin
struct  StitchHolesNicelySettings
struct  StitchHolesParams
 Parameters structure for MR::stitchHoles
Structure has some options to control MR::stitchHoles. More...
struct  StopOnTrueCombiner
 Pass this as a second template argument to boost::signals2::signal<...> to stop the execution of handlers when one of them returns true. More...
struct  SubdivideFillingSettings
struct  SubdivideSettings
class  SurfaceDistanceBuilder
 this class is responsible for iterative construction of distance map along the surface More...
class  SurfaceManipulationWidget
 widget for surface modifying @detail available 3 modes: add (move surface region in direction of normal) remove (move surface region in opposite direction to normal) relax (relax surface region) More...
class  SurfacePointWidget
 Widget for controlling point on surface with mouse. More...
class  SwapRootAction
struct  SymbolMeshParams
struct  SymMatrix2
struct  SymMatrix3
struct  SymMatrix4
struct  SystemMemory
class  SystemPath
 system directory path manager More...
struct  TbbTaskArenaAndGroup
class  TbbThreadMutex
class  TeethMaskToDirectionVolumeConvertor
struct  TerminalVertex
struct  TextMeshAlignParams
class  Tgt2SrcMaps
 use this adapter to call functions expecting PartMapping parameter to receive tgt2src dense maps More...
struct  ThickenParams
struct  ThreadRootTimeRecord
struct  TiffParameters
class  Timer
struct  TimeRecord
class  Toolbar
 class to draw toolbar and toolbar customize windows More...
struct  ToolPathParams
struct  ToolPathResult
struct  TouchEndListener
class  TouchesController
struct  TouchMoveListener
class  TouchpadController
struct  TouchpadParameters
struct  TouchpadRotateGestureBeginListener
 class to subscribe on TouchpadRotateGestureBeginEvent More...
struct  TouchpadRotateGestureEndListener
 class to subscribe on TouchpadRotateGestureEndEvent More...
struct  TouchpadRotateGestureUpdateListener
 class to subscribe on TouchpadRotateGestureUpdateEvent More...
struct  TouchpadSwipeGestureBeginListener
 class to subscribe on TouchpadSwipeGestureBeginEvent More...
struct  TouchpadSwipeGestureEndListener
 class to subscribe on TouchpadSwipeGestureEndEvent More...
struct  TouchpadSwipeGestureUpdateListener
 class to subscribe on TouchpadSwipeGestureUpdateEvent More...
struct  TouchpadZoomGestureBeginListener
 class to subscribe on TouchpadZoomGestureBeginEvent More...
struct  TouchpadZoomGestureEndListener
 class to subscribe on TouchpadZoomGestureEndEvent More...
struct  TouchpadZoomGestureUpdateListener
 class to subscribe on TouchpadZoomGestureUpdateEvent More...
struct  TouchStartListener
class  TransformControls
 Basic implementation of ITransformControls. More...
struct  TransformedMesh
 just stores a mesh and its transformation to some fixed reference frame More...
struct  TransformVdbVolumeResult
struct  TransparencyMode
 struct to determine transparent rendering mode More...
struct  TriangleSegmentIntersectResult
struct  TriangulationParameters
 Parameters of point cloud triangulation. More...
struct  TriIntersectResult
struct  TriMesh
struct  TrimOptionalOutput
 stores optional output params for trimWithPlane function More...
struct  TrimWithPlaneParams
 stores basic params for trimWithPlane function More...
struct  TriPoint
 encodes a point inside a triangle using barycentric coordinates More...
struct  TriTriDistanceParams
struct  TriTriDistanceResult
struct  TrivialMetricToPenalty
 the vertices in the queue are ordered by their metric from a start location More...
struct  TwoLineSegmClosestPoints
class  TypedBitSet
struct  TypedFlatTree
struct  UiRenderManager
struct  UiRenderParams
class  UndirectedEdgeIterator
 The iterator to find all not-lone undirected edges in the mesh. More...
struct  UndirectedEdgeUndirectedEdge
 a pair of undirected edges More...
class  UndoMenuItem
class  UnifiedPythonStream
struct  UniformSamplingSettings
class  UnionFind
 Union-find data structure for representing disjoin sets of elements with few very quick operations: 1) union of two sets in one, 2) checking whether two elements pertain to the same set, 3) finding representative element (root) of each set by any set's element. More...
struct  UniquePtr
class  UniqueTemporaryFolder
 helper class to create a temporary folder; the folder will be removed on the object's destruction More...
class  UniqueThreadSafeOwner
struct  UniteManyMeshesParams
 Parameters structure for uniteManyMeshes function. More...
struct  UnitInfo
 Information about a single measurement unit. More...
struct  UnitToStringParams
 Controls how a value with a unit is converted to a string. More...
struct  UnorientedTriangle
struct  VarEdgeTri
class  Vector
 std::vector<T>-like container that requires specific indexing type, More...
struct  Vector2
struct  Vector3
struct  Vector4
struct  VectorTraits
 Common traits for (mathematical) vectors. More...
struct  VectorTraits< ImVec2 >
struct  VectorTraits< ImVec4 >
struct  VectorTraits< Vector2< T > >
struct  VectorTraits< Vector3< T > >
struct  VectorTraits< Vector4< T > >
class  VersatileChangeMeshPointsAction
class  VertCoordsDiff
struct  VertDistance
struct  VertPathInfo
 information associated with each vertex by the paths builder More...
class  VertRenumber
 maps valid points to packed sequential indices More...
class  Viewer
 GLFW-based mesh viewer. More...
class  ViewerEventQueue
 queue to ignore multiple mouse moves in one frame More...
class  ViewerPlugin
class  ViewerSettingsManager
class  ViewerSettingsPlugin
class  ViewerSetup
struct  ViewerSignals
class  ViewerTitle
class  Viewport
class  ViewportGL
 This class holds data needed to render viewport primitives and accumulative picker via OpenGL. More...
class  ViewportGlobalBasis
 Class to unify Global Basis control. More...
class  ViewportId
class  ViewportIterator
 iterates over all ViewportIds in given ViewportMask More...
class  ViewportMask
 stores mask of viewport unique identifiers More...
class  ViewportParametersAction
struct  ViewportPointsWithColors
 stores points and corresponding colors (sizes of vectors should be the same) More...
class  ViewportProperty
class  VisualObject
 Visual Object. More...
struct  VisualObjectTag
 modified color set for visual objects More...
class  VisualObjectTagManager
 class for storing and changing visual object properties based on the object tags More...
class  VolumeIndexer
struct  VolumeSegmentationParameters
 Parameters for volume segmentation. More...
class  VolumeSegmenter
 Class for voxels segmentation. More...
struct  VolumeToMeshByPartsSettings
 Parameters' structure for MR::volumeToMeshByParts. More...
struct  VoxelLocation
 contains both linear Id and 3D coordinates of the same voxel More...
struct  VoxelMetricParameters
 Parameters for building metric function. More...
struct  VoxelsVolume
 represents a box in 3D space subdivided on voxels stored in T More...
class  VoxelsVolumeAccessor
 helper class for generalized voxel volume data access More...
class  VoxelsVolumeAccessor< VdbVolume >
 VoxelsVolumeAccessor specialization for VDB volume. More...
class  VoxelsVolumeAccessor< VoxelsVolume< Vector< T, VoxelId > > >
 VoxelsVolumeAccessor specialization for simple volumes.
class  VoxelsVolumeAccessor< VoxelsVolume< VoxelValueGetter< T > > >
 VoxelsVolumeAccessor specialization for value getters. More...
class  VoxelsVolumeAccessor< VoxelsVolumeMinMax< Vector< T, VoxelId > > >
 VoxelsVolumeAccessor specialization for simple volumes with min/max. More...
class  VoxelsVolumeCachingAccessor
class  VoxelsVolumeInterpolatedAccessor
struct  VoxelsVolumeMinMax
struct  VoxelTraits
struct  VoxelTraits< FloatGrid >
struct  VoxelTraits< Vector< T, VoxelId > >
struct  VoxelTraits< VoxelBitSet >
struct  VoxelTraits< VoxelValueGetter< T > >
class  WatershedGraph
 graphs representing rain basins on the mesh More...
class  WebRequest
 this class is needed to unify cpp and wasm requests More...
struct  WeightedVertex
struct  Writer
 the purpose of this struct is to invalidate object cache in its destructor More...
struct  WriteRawTiffParams
class  XfBasedCache
struct  ZCompensateParams
struct  ZeroOnMove

Concepts

concept  Trivial
concept  HasGetNormalMethod
concept  HasGetDirectionMethod
concept  UnitEnum
 Whether E is one of the unit enums: NoUnit, LengthUnit, AngleUnit, ...
concept  AnyVisualizeMaskEnumType
 Wraps IsVisualizeMaskEnum and adds some sanity checks.

Typedefs

using FileNamesStack = std::vector<std::filesystem::path>
using PdfGeneralFont = std::variant<PdfBuildinFont, std::filesystem::path>
using FaceTreeTraits3 = AABBTreeTraits<FaceTag, Box3f>
template<typename V>
using LineTreeTraits = AABBTreeTraits<UndirectedEdgeTag, Box<V>>
using LineTreeTraits2 = LineTreeTraits<Vector2f>
using LineTreeTraits3 = LineTreeTraits<Vector3f>
template<typename T>
using AABBTreeNodeVec = Vector<AABBTreeNode<T>, NodeId>
template<size_t degree>
using Polynomialf = Polynomial<float, degree>
template<size_t degree>
using Polynomiald = Polynomial<double, degree>
template<typename T>
using Polynomialx
using PolynomialWrapperf = PolynomialWrapper<float>
using PolynomialWrapperd = PolynomialWrapper<double>
template<size_t degree>
using BestFitPolynomialf = BestFitPolynomial<float, degree>
template<size_t degree>
using BestFitPolynomiald = BestFitPolynomial<double, degree>
using PathMeshEdgePointCallback = std::function<void( const MeshEdgePoint& mep )>
 Callback for each MeshEdgePoint in path.
using CurvePoints = std::vector<CurvePoint>
 curve given as a number of points on it samples at arbitrary steps
template<class T, class E = std::string>
using Expected = tl::expected<T, E>
template<class E = std::string>
using Unexpected = tl::unexpected<E>
using FastInt128 = __int128_t
using FeaturesPropertyTypesVariant = std::variant<float, Vector3f>
using MultiObjsSamples = std::vector<ObjVertId>
using Int128 = boost::multiprecision::int128_t
using Int256 = boost::multiprecision::int256_t
using Vector2i128 = Vector2<Int128>
using Vector3i128 = Vector3<Int128>
using Vector2i128fast = Vector2<FastInt128>
 no bindings since no operator << and no sqrt for FastInt128
using Vector3i128fast = Vector3<FastInt128>
using Vector2i256 = Vector3<Int256>
using Vector3i256 = Vector3<Int256>
using HistoryStackFilter = std::function<bool( const std::shared_ptr<HistoryAction>& )>
using HistoryActionsVector = std::vector<std::shared_ptr<HistoryAction>>
using OneMeshContours = std::vector<OneMeshContour>
 Special data type for MR::cutMesh.
using ContinuousContour = std::vector<VarEdgeTri>
using ContinuousContours = std::vector<ContinuousContour>
using IOFilters = std::vector<IOFilter>
using IRenderObjectConstructorLambda = std::function<std::unique_ptr<IRenderObject>( const VisualObject& )>
using ObjectPtr = std::shared_ptr<Object>
using LoadedObject = LoadedObjectT<Object>
using LoadedObjectMesh = LoadedObjectT<ObjectMesh>
using LoadedObjectPoints = LoadedObjectT<ObjectPoints>
using LoadedObjectLines = LoadedObjectT<ObjectLines>
using LoadedObjectVoxels = LoadedObjectT<ObjectVoxels>
using TrianglesRepetitions = std::array<int, 4>
using MR_BIND_IGNORE = std::array<Vector3f, 3>
using PreciseCollisionResult = std::vector<VarEdgeTri>
using TriangleCallback = std::function<ProcessOneResult( const Vector3f & p, FaceId f, const Vector3f & q, float distSq )>
using MultipleEdge = VertPair
 finds multiple edges in the mesh
using EdgePath = std::vector<EdgeId>
using EdgeLoop = std::vector<EdgeId>
using EdgeLoops = std::vector<EdgeLoop>
template<typename T>
using TaggedBitSet = TypedBitSet<Id<T>>
using Int64 = std::int64_t
using Uint64 = std::uint64_t
template<typename T>
using AffineXf3 = AffineXf<Vector3<T>>
template<typename T>
using Sphere3 = Sphere<Vector3<T>>
template<typename T>
using Line3 = Line<Vector3<T>>
template<typename T>
using LineSegm3 = LineSegm<Vector3<T>>
template<typename T>
using Contour2 = Contour<Vector2<T>>
template<typename T>
using Contour3 = Contour<Vector3<T>>
using Contour2d = Contour2<double>
using Contour2f = Contour2<float>
using Contour3d = Contour3<double>
using Contour3f = Contour3<float>
template<typename V>
using Contours = std::vector<Contour<V>>
template<typename T>
using Contours2 = Contours<Vector2<T>>
template<typename T>
using Contours3 = Contours<Vector3<T>>
using Contours2d = Contours2<double>
using Contours2f = Contours2<float>
using Contours3d = Contours3<double>
using Contours3f = Contours3<float>
template<typename T>
using MinMax = Box<T>
using MinMaxf = MinMax<float>
using MinMaxd = MinMax<double>
using MinMaxi = MinMax<int>
template<typename T>
using Box1 = Box<T>
template<typename T>
using Box2 = Box<Vector2<T>>
template<typename T>
using Box3 = Box<Vector3<T>>
template<typename T>
using Ball1 = Ball<T>
template<typename T>
using Ball2 = Ball<Vector2<T>>
template<typename T>
using Ball3 = Ball<Vector3<T>>
template<typename T>
using CubicBezierCurve2 = CubicBezierCurve<Vector2<T>>
template<typename T>
using CubicBezierCurve3 = CubicBezierCurve<Vector3<T>>
template<typename T>
using QuadraticForm3 = QuadraticForm<Vector3<T>>
using Triangle3i = Triangle3<int>
using Triangle3f = Triangle3<float>
using Triangle3d = Triangle3<double>
using MeshEdgePoint = EdgePoint
using SurfacePath = std::vector<MeshEdgePoint>
using SurfacePaths = std::vector<SurfacePath>
using IsoLine = SurfacePath
using IsoLines = SurfacePaths
using PlaneSection = SurfacePath
using PlaneSections = SurfacePaths
using VertPair = std::pair<VertId, VertId>
using FacePair = std::pair<FaceId, FaceId>
using EdgePair = std::pair<EdgeId, EdgeId>
using UndirectedEdgePair = std::pair<UndirectedEdgeId, UndirectedEdgeId>
using UVCoord = Vector2f
using TwoVertIds = std::array<VertId, 2>
 two vertex ids describing an edge with the ends in vertices given by their ids
using ThreeVertIds = std::array<VertId, 3>
 three vertex ids describing a triangle with the corners in vertices given by their ids
using ThreeUVCoords = std::array<UVCoord, 3>
 three UV-coordinates describing texturing of a triangle
using FacePredicate = std::function<bool( FaceId )>
using EdgePredicate = std::function<bool( EdgeId )>
using UndirectedEdgePredicate = std::function<bool( UndirectedEdgeId )>
using PreCollapseCallback = std::function<bool( EdgeId edgeToCollapse, const Vector3f& newEdgeOrgPos )>
using OnEdgeSplit = std::function<void( EdgeId e1, EdgeId e )>
using VertMetric = std::function<float( VertId )>
using FaceMetric = std::function<float( FaceId )>
using EdgeMetric = std::function<float( EdgeId )>
using UndirectedEdgeMetric = std::function<float( UndirectedEdgeId )>
template<typename T, typename Hash = phmap::priv::hash_default_hash<T>, typename Eq = phmap::priv::hash_default_eq<T>>
using ParallelHashSet = phmap::parallel_flat_hash_set<T, Hash, Eq>
using FaceHashSet = HashSet<FaceId>
 No canonical typedefs because phmap::... is not under our control.
using VertHashSet = HashSet<VertId>
using EdgeHashSet = HashSet<EdgeId>
template<typename K, typename V, typename Hash = phmap::priv::hash_default_hash<K>, typename Eq = phmap::priv::hash_default_eq<K>>
using HashMap = phmap::flat_hash_map<K, V, Hash, Eq>
template<typename K, typename V, typename Hash = phmap::priv::hash_default_hash<K>, typename Eq = phmap::priv::hash_default_eq<K>>
using ParallelHashMap = phmap::parallel_flat_hash_map<K, V, Hash, Eq>
using FaceHashMap = HashMap<FaceId, FaceId>
using VertHashMap = HashMap<VertId, VertId>
using EdgeHashMap = HashMap<EdgeId, EdgeId>
using UndirectedEdgeHashMap = HashMap<UndirectedEdgeId, UndirectedEdgeId>
using WholeEdgeHashMap = HashMap<UndirectedEdgeId, EdgeId>
 mapping of whole edges: map[e]->f, map[e.sym()]->f.sym(), where only map[e] for even edges is stored
using FaceMapOrHashMap = MapOrHashMap<FaceId, FaceId>
using VertMapOrHashMap = MapOrHashMap<VertId, VertId>
using EdgeMapOrHashMap = MapOrHashMap<EdgeId, EdgeId>
using UndirectedEdgeMapOrHashMap = MapOrHashMap<UndirectedEdgeId, UndirectedEdgeId>
using WholeEdgeMapOrHashMap = MapOrHashMap<UndirectedEdgeId, EdgeId>
 mapping of whole edges: map[e]->f, map[e.sym()]->f.sym(), where only map[e] for even edges is stored
using GcodeSource = std::vector<std::string>
typedef std::function< bool(float)> ProgressCallback
using Line3fMesh = Line3Mesh<float>
using Line3dMesh = Line3Mesh<double>
using MeshIntersectionCallback = std::function<bool(const MeshIntersectionResult &)>
using FillTriangleMetric = std::function<double( VertId a, VertId b, VertId c )>
 args: three vertices of candidate triangle
using FillEdgeMetric = std::function<double( VertId a, VertId b, VertId l, VertId r )>
using FillCombineMetric = std::function<double( double, double )>
 args: two metric weights to combine (usualy it is simple sum of them)
using TriangleCornerNormals = std::array<Vector3f, 3>
 normals in three corner of a triangle
using ProjectOnAllCallback = std::function<void( ObjId, MeshOrPoints::ProjectionResult )>
 to receive object id + projection result on it
using FoundBoxedTriCallback = std::function<Processing( FaceId found, Ball3f & ball )>
using FoundTriCallback = std::function<Processing( const MeshProjectionResult & found, Ball3f & ball )>
 this callback is invoked on every triangle at least partially in the ball, and allows changing (shrinking only) the ball
using ICPObjects = Vector<MeshOrPointsXf, ObjId>
using ICPLayer = int
using ICPElementId = Id<ICPElemtTag>
using ICPElementBitSet = TaggedBitSet<ICPElemtTag>
using ICPGroupProjector = std::function<void( const Vector3f& p, MeshOrPoints::ProjectionResult& res, ObjId& resId )>
using ICPPairsGrid = Vector<Vector<ICPGroupPairs, ICPElementId>, ICPElementId>
using DashPattern = Vector4<uint8_t>
using OffsetContoursVertMap = std::vector<OffsetContoursOrigins>
using OffsetContoursVertMaps = std::vector<OffsetContoursVertMap>
using ContoursVariableOffset = std::function<float( int, int )>
using MeshTriPointsConnector = std::function<Expected<SurfacePath>( const MeshTriPoint& start, const MeshTriPoint& end, int startIndex, int endIndex )>
using PickedPoint = std::variant<std::monostate, MeshTriPoint, EdgePoint, VertId>
using FoundPointCallback = std::function<void( VertId, const Vector3f& )>
using OnPointInBallFound = std::function<Processing( const PointsProjectionResult & found, const Vector3f & foundXfPos, Ball3f & ball )>
 this callback is invoked on every point located within the ball, and allows changing the ball for search continuation
template<typename T>
using PolylineIntersectionCallback2 = std::function<Processing(const EdgePoint & polylinePoint, T rayPos, T & rayStart, T & rayEnd)>
using PolylineIntersectionCallback2f = PolylineIntersectionCallback2<float>
using PolylineIntersectionCallback2d = PolylineIntersectionCallback2<double>
using DecimatePolylineSettings2 = DecimatePolylineSettings<Vector2f>
using DecimatePolylineSettings3 = DecimatePolylineSettings<Vector3f>
template<typename V>
using FoundEdgeCallback = std::function<void( UndirectedEdgeId, const V& closestPt, float distSq )>
using FoundEdgeCallback2 = FoundEdgeCallback<Vector2f>
using FoundEdgeCallback3 = FoundEdgeCallback<Vector3f>
using RegularGridLatticeValidator = std::function<bool( size_t x, size_t y )>
 Lambda for validating grid lattice.
using RegularGridLatticePositioner = std::function<Vector3f( size_t x, size_t y )>
 Lambda for getting lattice position.
using RegularGridMeshFaceValidator
 Lambda for validating mesh face.
using OrgRingIterator = RingIterator<NextEdgeSameOrigin>
using LeftRingIterator = RingIterator<NextEdgeSameLeft>
using SeparationPointSet = std::array<VertId, size_t( NeighborDir::Count )>
using SeparationPointMap = HashMap<size_t, SeparationPointSet>
using TriTriDistanceResultf = TriTriDistanceResult<float>
using TriTriDistanceResultd = TriTriDistanceResult<double>
using TriTriDistanceParamsf = TriTriDistanceParams<float>
using TriTriDistanceParamsd = TriTriDistanceParams<double>
using TwoLineSegmClosestPointsf = TwoLineSegmClosestPoints<float>
using TwoLineSegmClosestPointsd = TwoLineSegmClosestPoints<double>
using FolderCallback = std::function<void( const std::filesystem::path& tempFolderName )>
 this callback will be called before compression on serialization and after decompression on deserialization
using AllVisualizeProperties = std::vector<ViewportMask>
using Time = std::chrono::time_point<std::chrono::system_clock>
using DisabledWarnings = std::vector<ShaderWarning>
using FilesLoadedCallback = std::function<void( const std::vector<std::shared_ptr<Object>>& objs, const std::string& errors, const std::string& warnings )>
using TransformModesValidator = std::function<ControlBit( const Vector3f& center, const AffineXf3f& xf, ViewportId )>
using RenderDefaultUiObject = RenderObjectCombinator<RenderNameObject>
 Combines all the default UI IRenderObjects.
using RenderDimensionObject = RenderObjectCombinator<RenderDefaultUiObject, RenderResetDirtyComponent>
using MenuItemsList = std::vector<std::string>
using NotificationTagMask = unsigned
using SplitCaptionInfo = std::vector<std::pair<size_t, float>>
 needed for big buttons text aligning
using ItemMap = HashMap<std::string, MenuItemInfo>
using TabsGroupsMap = HashMap<std::string, std::vector<std::string>>
using GroupsItemsMap = TabsGroupsMap
using MenuItemsListMigration = std::function<void ( MenuItemsList& )>
using MenuItemsListMigrations = std::map<int, MenuItemsListMigration>
using VarUnitToStringParams
 The std::variant of UnitToStringParams<E> for all known Es (unit kinds).
using ViewportRectangle = Box2f
 Viewport size.
using StatePlugin = StateListenerPlugin<>
using ViewerEventCallback = std::function<void()>
using ObjAndPick = std::pair<std::shared_ptr<MR::VisualObject>, MR::PointOnObject>
using ConstObjAndPick = std::pair<std::shared_ptr<const MR::VisualObject>, MR::PointOnObject>
using RequirementsFunction = std::function<std::string( const std::shared_ptr<RibbonMenuItem>& )>
using FontAndSize = std::pair<ImFont*, float>
using WebResponseCallback = std::function<void( const Json::Value& response )>
using VoxelPointPositioner = std::function<Vector3f( const Vector3f&, const Vector3f&, float, float, float )>
using VoxelsMetric = std::function<float( size_t from, size_t to )>
template<typename Volume>
using VolumePartBuilder = std::function<Expected<Volume> ( int begin, int end, std::optional<Vector3i>& offset )>
using VdbVolumes = std::vector<VdbVolume>
template<typename T>
using VoxelValueGetter = std::function<T ( const Vector3i& )>
using VertPathInfoMap = HashMap<VertId, VertPathInfo>
using EdgePathsBuilder = EdgePathsBuilderT<TrivialMetricToPenalty>

Enumerations

enum class  PdfBuildinFont {
  PdfBuildinFont::Courier , PdfBuildinFont::CourierBold , PdfBuildinFont::CourierOblique , PdfBuildinFont::CourierBoldOblique ,
  PdfBuildinFont::Helvetica , PdfBuildinFont::HelveticaBold , PdfBuildinFont::HelveticaOblique , PdfBuildinFont::HelveticaBoldOblique ,
  PdfBuildinFont::TimesRoman , PdfBuildinFont::TimesBold , PdfBuildinFont::TimesItalic , PdfBuildinFont::TimesBoldItalic ,
  PdfBuildinFont::Symbol , PdfBuildinFont::ZapfDingbats , PdfBuildinFont::Count
}
enum class  Axis { Axis::X , Axis::Y , Axis::Z , Axis::Count }
enum class  BooleanOperation {
  BooleanOperation::InsideA , BooleanOperation::InsideB , BooleanOperation::OutsideA , BooleanOperation::OutsideB ,
  BooleanOperation::Union , BooleanOperation::Intersection , BooleanOperation::DifferenceBA , BooleanOperation::DifferenceAB ,
  BooleanOperation::Count
}
enum class  ConeFitterType { ConeFitterType::ApproximationPCM , ConeFitterType::HemisphereSearchFit , ConeFitterType::SpecificAxisFit }
enum class  FilterType : char { FilterType::Linear , FilterType::Discrete }
enum class  WrapType : char { WrapType::Repeat , WrapType::Mirror , WrapType::Clamp }
enum class  Reorder : char { Reorder::None , Reorder::Lexicographically , Reorder::AABBTree }
 determines how points to be ordered More...
enum class  VertexMass { VertexMass::Unit = 0 , VertexMass::NeiArea }
 determines the weight or mass of each vertex in applications like Laplacian More...
enum class  EdgeWeights { EdgeWeights::Unit = 0 , EdgeWeights::Cotan }
 determines the weight of each edge in applications like Laplacian More...
enum class  RememberShape { RememberShape::Yes , RememberShape::No }
enum class  Processing : bool { Processing::Continue , Processing::Stop }
 typically returned from callbacks to control the behavior of main algorithm More...
enum class  OrientNormals { OrientNormals::TowardOrigin , OrientNormals::AwayFromOrigin , OrientNormals::Smart }
 the method how to choose between two opposite normal orientations More...
enum class  OffsetMode : int { OffsetMode::Smooth , OffsetMode::Standard , OffsetMode::Sharpening }
enum class  ColoringType {
  ColoringType::SolidColor , ColoringType::PrimitivesColorMap , ColoringType::FacesColorMap = PrimitivesColorMap , ColoringType::LinesColorMap = PrimitivesColorMap ,
  ColoringType::VertsColorMap
}
enum class  UseAABBTree : char { UseAABBTree::No , UseAABBTree::Yes , UseAABBTree::YesIfAlreadyConstructed }
enum class  GeodesicPathApprox : char { GeodesicPathApprox::DijkstraBiDir , GeodesicPathApprox::DijkstraAStar , GeodesicPathApprox::FastMarching }
 the algorithm to compute approximately geodesic path More...
enum class  Turn : bool { Turn::Leftmost , Turn::Rightmost }
 what way a path can follow in case of several alternatives More...
enum class  FeaturesObjectKind {
  FeaturesObjectKind::Point , FeaturesObjectKind::Line , FeaturesObjectKind::Plane , FeaturesObjectKind::Circle ,
  FeaturesObjectKind::Sphere , FeaturesObjectKind::Cylinder , FeaturesObjectKind::Cone , FeaturesObjectKind::_count
}
enum class  FeaturePropertyKind {
  FeaturePropertyKind::position , FeaturePropertyKind::linearDimension , FeaturePropertyKind::direction , FeaturePropertyKind::angle ,
  FeaturePropertyKind::other
}
 Classifies FeatureObjectSharedProperty, mostly for informational purposes. More...
enum class  ICPMethod { ICPMethod::Combined = 0 , ICPMethod::PointToPoint = 1 , ICPMethod::PointToPlane = 2 }
 The method how to update transformation from point pairs. More...
enum class  ICPMode {
  ICPMode::RigidScale , ICPMode::AnyRigidXf , ICPMode::OrthogonalAxis , ICPMode::FixedAxis ,
  ICPMode::TranslationOnly
}
 The group of transformations, each with its own degrees of freedom. More...
enum class  ICPExitType {
  ICPExitType::NotStarted , ICPExitType::NotFoundSolution , ICPExitType::MaxIterations , ICPExitType::MaxBadIterations ,
  ICPExitType::StopMsdReached
}
 types of exit conditions in calculation More...
enum class  Side { Side::Negative , Side::Positive }
enum class  DepthFunction {
  DepthFunction::Never = 0 , DepthFunction::Less = 1 , DepthFunction::Equal = 2 , DepthFunction::Greater = 4 ,
  DepthFunction::LessOrEqual = Less | Equal , DepthFunction::GreaterOrEqual = Greater | Equal , DepthFunction::NotEqual = Less | Greater , DepthFunction::Always = Less | Equal | Greater ,
  DepthFunction::Default = 8
}
enum  DecimateStrategy { MinimizeError , ShortestEdgeFirst }
 Defines the order of edge collapses inside Decimate algorithm. More...
enum class  FlipEdge : int { FlipEdge::Can , FlipEdge::Cannot , FlipEdge::Must }
enum class  ProcessOneResult : bool { ProcessOneResult::StopProcessing = false , ProcessOneResult::ContinueProcessing = true }
enum class  MeshMeshCollisionStatus {
  MeshMeshCollisionStatus::BothOutside , MeshMeshCollisionStatus::BothInside , MeshMeshCollisionStatus::AInside , MeshMeshCollisionStatus::BInside ,
  MeshMeshCollisionStatus::Colliding , MeshMeshCollisionStatus::Touching
}
enum class  OutlierTypeMask {
  OutlierTypeMask::SmallComponents = 1 << 0 , OutlierTypeMask::WeaklyConnected = 1 << 1 , OutlierTypeMask::FarSurface = 1 << 2 , OutlierTypeMask::AwayNormal = 1 << 3 ,
  OutlierTypeMask::All = SmallComponents | WeaklyConnected | FarSurface | AwayNormal
}
 Types of outlier points. More...
enum class  OutEdge2 : signed char {
  OutEdge2::Invalid = -1 , OutEdge2::PlusY , OutEdge2::MinusY , OutEdge2::PlusX ,
  OutEdge2::MinusX , OutEdge2::Count
}
enum class  RelaxApproxType { RelaxApproxType::Planar , RelaxApproxType::Quadric }
enum class  RenderModelPassMask {
  RenderModelPassMask::Opaque = 1 << 0 , RenderModelPassMask::Transparent = 1 << 1 , RenderModelPassMask::VolumeRendering = 1 << 2 , RenderModelPassMask::NoDepthTest = 1 << 3 ,
  RenderModelPassMask::All
}
 Various passes of the 3D rendering. More...
enum class  NeighborDir { NeighborDir::X , NeighborDir::Y , NeighborDir::Z , NeighborDir::Count }
enum class  SignDetectionMode {
  SignDetectionMode::Unsigned , SignDetectionMode::OpenVDB , SignDetectionMode::ProjectionNormal , SignDetectionMode::WindingRule ,
  SignDetectionMode::HoleWindingRule
}
 how to determine the sign of distances from a mesh More...
enum class  SignDetectionModeShort { SignDetectionModeShort::Auto , SignDetectionModeShort::HoleWindingNumber , SignDetectionModeShort::ProjectionNormal }
 how to determine the sign of distances from a mesh, short version including auto-detection More...
enum class  PathError { PathError::StartEndNotConnected , PathError::InternalError }
enum class  ExtremeEdgeType { ExtremeEdgeType::Ridge , ExtremeEdgeType::Gorge }
enum class  UpLimitCheck : bool { UpLimitCheck::GreaterOrEqual , UpLimitCheck::Greater }
enum class  NestedComponenetsMode { NestedComponenetsMode::Remove , NestedComponenetsMode::Merge , NestedComponenetsMode::Union }
 Mode of processing components. More...
enum class  NoUnit { NoUnit::_count }
 A stub measurement unit representing no unit. More...
enum class  LengthUnit {
  LengthUnit::microns , LengthUnit::millimeters , LengthUnit::centimeters , LengthUnit::meters ,
  LengthUnit::inches , LengthUnit::feet , LengthUnit::_count
}
 Measurement units of length. More...
enum class  AngleUnit { AngleUnit::radians , AngleUnit::degrees , AngleUnit::_count }
 Measurement units of angle. More...
enum class  PixelSizeUnit { PixelSizeUnit::pixels , PixelSizeUnit::_count }
 Measurement units of screen sizes. More...
enum class  RatioUnit { RatioUnit::factor , RatioUnit::percents , RatioUnit::_count }
 Measurement units for factors / ratios. More...
enum class  TimeUnit { TimeUnit::seconds , TimeUnit::milliseconds , TimeUnit::_count }
 Measurement units for time. More...
enum class  MovementSpeedUnit {
  MovementSpeedUnit::micronsPerSecond , MovementSpeedUnit::millimetersPerSecond , MovementSpeedUnit::centimetersPerSecond , MovementSpeedUnit::metersPerSecond ,
  MovementSpeedUnit::inchesPerSecond , MovementSpeedUnit::feetPerSecond , MovementSpeedUnit::_count
}
 Measurement units for movement speed. More...
enum class  AreaUnit {
  AreaUnit::microns2 , AreaUnit::millimeters2 , AreaUnit::centimeters2 , AreaUnit::meters2 ,
  AreaUnit::inches2 , AreaUnit::feet2 , AreaUnit::_count
}
 Measurement units for surface area. More...
enum class  VolumeUnit {
  VolumeUnit::microns3 , VolumeUnit::millimeters3 , VolumeUnit::centimeters3 , VolumeUnit::meters3 ,
  VolumeUnit::inches3 , VolumeUnit::feet3 , VolumeUnit::_count
}
 Measurement units for body volume. More...
enum class  InvLengthUnit {
  InvLengthUnit::inv_microns , InvLengthUnit::inv_millimeters , InvLengthUnit::inv_centimeters , InvLengthUnit::inv_meters ,
  InvLengthUnit::inv_inches , InvLengthUnit::inv_feet , InvLengthUnit::_count
}
 Measurement units for 1/length. More...
enum  DirtyFlags {
  DIRTY_NONE = 0x0000 , DIRTY_POSITION = 0x0001 , DIRTY_UV = 0x0002 , DIRTY_VERTS_RENDER_NORMAL = 0x0004 ,
  DIRTY_FACES_RENDER_NORMAL = 0x0008 , DIRTY_RENDER_NORMALS = DIRTY_VERTS_RENDER_NORMAL | DIRTY_FACES_RENDER_NORMAL , DIRTY_SELECTION = 0x0020 , DIRTY_TEXTURE = 0x0040 ,
  DIRTY_PRIMITIVES = 0x0080 , DIRTY_FACE = DIRTY_PRIMITIVES , DIRTY_VERTS_COLORMAP = 0x0100 , DIRTY_PRIMITIVE_COLORMAP = 0x0200 ,
  DIRTY_FACES_COLORMAP = DIRTY_PRIMITIVE_COLORMAP , DIRTY_TEXTURE_PER_FACE = 0x0400 , DIRTY_MESH = 0x07FF , DIRTY_BORDER_LINES = 0x1000 ,
  DIRTY_EDGES_SELECTION = 0x2000 , DIRTY_VOLUME = 0x4000 , DIRTY_ALL = 0x7FFF
}
enum class  OutEdge : signed char {
  OutEdge::Invalid = -1 , OutEdge::PlusZ = 0 , OutEdge::MinusZ , OutEdge::PlusY ,
  OutEdge::MinusY , OutEdge::PlusX , OutEdge::MinusX , OutEdge::Count
}
enum  AlignType { Left , Center , Right }
enum class  SelectedTypesMask {
  SelectedTypesMask::ObjectBit = 1 << 0 , SelectedTypesMask::ObjectPointsHolderBit = 1 << 1 , SelectedTypesMask::ObjectLinesHolderBit = 1 << 2 , SelectedTypesMask::ObjectMeshHolderBit = 1 << 3 ,
  SelectedTypesMask::ObjectLabelBit = 1 << 4 , SelectedTypesMask::ObjectMeshBit = 1 << 5 , SelectedTypesMask::ObjectFeatureBit = 1 << 6 , SelectedTypesMask::ObjectMeasurementBit = 1 << 7
}
enum class  FitMode {
  FitMode::Visible , FitMode::SelectedPrimitives , FitMode::SelectedObjects , FitMode::SelectableObjects ,
  FitMode::CustomObjectsList
}
 Fit mode ( types of objects for which the fit is applied ) More...
enum class  MouseButton {
  MouseButton::Left = 0 , MouseButton::Right = 1 , MouseButton::Middle = 2 , MouseButton::Count ,
  MouseButton::NoButton = Count
}
enum class  MouseMode {
  MouseMode::None , MouseMode::Rotation , MouseMode::Translation , MouseMode::Roll ,
  MouseMode::Count
}
 Standard mouse functions for camera control. More...
enum class  NotificationType {
  NotificationType::Error , NotificationType::Warning , NotificationType::Info , NotificationType::Time ,
  NotificationType::Count
}
enum class  ControlBit {
  ControlBit::None = 0 , ControlBit::RotX = 0x1 , ControlBit::RotY = 0x2 , ControlBit::RotZ = 0x4 ,
  ControlBit::RotMask = RotX | RotY | RotZ , ControlBit::MoveX = 0x8 , ControlBit::MoveY = 0x10 , ControlBit::MoveZ = 0x20 ,
  ControlBit::MoveMask = MoveX | MoveY | MoveZ , ControlBit::FullMask = RotMask | MoveMask
}
enum class  RibbonItemType { RibbonItemType::Button , RibbonItemType::ButtonWithDrop }
enum class  RibbonTopPanelLayoutMode { RibbonTopPanelLayoutMode::None , RibbonTopPanelLayoutMode::RibbonNoTabs , RibbonTopPanelLayoutMode::RibbonWithTabs }
enum class  RibbonNotificationCorner { RibbonNotificationCorner::LowerLeft , RibbonNotificationCorner::LowerRight }
 corner where notifications will appear More...
enum class  PathPreference { PathPreference::Geodesic , PathPreference::Convex , PathPreference::Concave }
enum class  ShaderTransparencyMode : char { ShaderTransparencyMode::None , ShaderTransparencyMode::AlphaSort , ShaderTransparencyMode::DepthPeel }
enum class  ShortcutCategory : char {
  ShortcutCategory::Info , ShortcutCategory::Edit , ShortcutCategory::View , ShortcutCategory::Scene ,
  ShortcutCategory::Objects , ShortcutCategory::Selection , ShortcutCategory::Count
}
enum class  StatePluginTabs {
  StatePluginTabs::Basic , StatePluginTabs::Mesh , StatePluginTabs::DistanceMap , StatePluginTabs::PointCloud ,
  StatePluginTabs::Selection , StatePluginTabs::Voxels , StatePluginTabs::Analysis , StatePluginTabs::Test ,
  StatePluginTabs::Other , StatePluginTabs::Count
}
enum class  NumberStyle { NumberStyle::normal , NumberStyle::distributePrecision , NumberStyle::exponential , NumberStyle::maybeExponential }
enum class  DegreesMode { DegreesMode::degrees , DegreesMode::degreesMinutes , DegreesMode::degreesMinutesSeconds , DegreesMode::_count }
 This controls how the degrees are printed. More...
enum class  ZeroMode { ZeroMode::asIs , ZeroMode::alwaysPositive , ZeroMode::alwaysNegative }
enum class  SideRegions { SideRegions::CCWArrow = 26 , SideRegions::CWArrow = 27 }
enum class  ScalarType {
  ScalarType::UInt8 , ScalarType::Int8 , ScalarType::UInt16 , ScalarType::Int16 ,
  ScalarType::UInt32 , ScalarType::Int32 , ScalarType::UInt64 , ScalarType::Int64 ,
  ScalarType::Float32 , ScalarType::Float64 , ScalarType::Float32_4 , ScalarType::Unknown ,
  ScalarType::Count
}
 scalar value's binary format type More...
enum class  BypassDirection { BypassDirection::Clockwise , BypassDirection::CounterClockwise }
enum class  MoveType {
  MoveType::None = -1 , MoveType::FastLinear = 0 , MoveType::Linear = 1 , MoveType::ArcCW = 2 ,
  MoveType::ArcCCW = 3
}
enum class  ArcPlane { ArcPlane::None = -1 , ArcPlane::XY = 17 , ArcPlane::XZ = 18 , ArcPlane::YZ = 19 }
enum class  VoxelFilterType : int { VoxelFilterType::Median , VoxelFilterType::Mean , VoxelFilterType::Gaussian }
enum class  QuarterBit : char {
  QuarterBit::LeftLeft = 0b1 , QuarterBit::LeftRight = 0b10 , QuarterBit::RightLeft = 0b100 , QuarterBit::RightRight = 0b1000 ,
  QuarterBit::All = 0b1111
}
enum  SlicePlane { YZ , ZX , XY , None }
 Plane of slice in which to find path. More...

Functions

Expected< LoadedObjectdeserializeObjectTreeFrom3mf (const std::filesystem::path &file, const ProgressCallback &callback={})
 loads scene from 3MF file in a new container object
Expected< LoadedObjectdeserializeObjectTreeFromModel (const std::filesystem::path &file, const ProgressCallback &callback={})
 loads scene from .model file in a new container object
Expected< std::shared_ptr< Object > > deserializeObjectTreeFromGltf (const std::filesystem::path &file, ProgressCallback callback={})
 loads scene from glTF file in a new container object
Expected< void > serializeObjectTreeToGltf (const Object &root, const std::filesystem::path &file, const SceneSave::Settings &settings)
 saves scene to a glTF file
void loadIOExtras ()
Expected< void > zlibCompressStream (std::istream &in, std::ostream &out, int level=-1)
 compress the input data using the Deflate algorithm
Expected< void > zlibDecompressStream (std::istream &in, std::ostream &out)
template<typename T>
Vector3< T > to3dim (const Vector2< T > &v)
template<typename T>
Vector2< T > to2dim (const Vector3< T > &v)
template<typename T>
Matrix3< T > to3dim (const Matrix2< T > &m)
template<typename T>
Matrix2< T > to2dim (const Matrix3< T > &m)
template<typename T>
AffineXf3< T > to3dim (const AffineXf2< T > &xf)
template<typename T>
AffineXf2< T > to2dim (const AffineXf3< T > &xf)
int getNumNodes (int numLeaves)
 returns the number of nodes in the binary tree with given number of leaves
template<typename T>
AABBTreeNodeVec< T > makeAABBTreeNodeVec (Buffer< BoxedLeaf< T > > boxedLeaves)
int getNumNodesPoints (int numPoints)
 returns the number of nodes in the binary tree with given number of points
Expected< void > addNoise (VertCoords &points, const VertBitSet &validVerts, NoiseSettings settings)
 Adds noise to the points, using a normal distribution.
Expected< void > addNoise (Mesh &mesh, const VertBitSet *region=nullptr, const NoiseSettings &settings={})
template<typename T>
AffineXf3< T > lookAt (const Vector3< T > &center, const Vector3< T > &eye, const Vector3< T > &up)
 computes rigid transformation xf
Expected< MeshalignContoursToMesh (const Mesh &mesh, const Contours2f &contours, const ContoursMeshAlignParams &params)
 Creates planar mesh out of given contour and aligns it to given surface.
Expected< MeshbendContoursAlongCurve (const Contours2f &contours, const CurveFunc &curve, const BendContoursAlongCurveParams &params)
 Converts contours in thick mesh, and deforms it along given path.
Expected< MeshbendContoursAlongSurfacePath (const Contours2f &contours, const Mesh &mesh, const GeodesicPath &path, const BendContoursAlongCurveParams &params)
 Converts contours in thick mesh, and deforms it along given surface path: start->path->end.
Expected< MeshbendContoursAlongSurfacePath (const Contours2f &contours, const Mesh &mesh, const SurfacePath &path, const BendContoursAlongCurveParams &params)
 Converts contours in thick mesh, and deforms it along given surface path.
Expected< std::vector< float > > findPartialLens (const CurvePoints &cp, float *outCurveLen=nullptr)
CurvePoint getCurvePoint (const CurvePoints &cp, const std::vector< float > &lens, float p)
Expected< CurveFunccurveFromPoints (const CurvePoints &cp, float *outCurveLen=nullptr)
Expected< CurveFunccurveFromPoints (CurvePoints &&cp, float *outCurveLen=nullptr)
CurvePoints meshPathCurvePoints (const Mesh &mesh, const GeodesicPath &path)
 converts polyline given as a number of MeshTriPoint/MeshEdgePoint into CurvePoints
CurvePoints meshPathCurvePoints (const Mesh &mesh, const SurfacePath &path)
void addBaseToPlanarMesh (Mesh &mesh, float zOffset)
Mesh makeArrow (const Vector3f &base, const Vector3f &vert, const float &thickness=0.05f, const float &coneRadius=0.1f, const float coneSize=0.2f, const int qual=32)
 creates hollow arrow from the 'base' to the 'vert'. Number of points on the circle 'qual' is between 3 and 256
Mesh makeBasisAxes (const float &size=1.0f, const float &thickness=0.05f, const float &coneRadius=0.1f, const float coneSize=0.2f, const int qual=32)
 creates the mesh with 3 axis arrows
std::string encode64 (const std::uint8_t *data, size_t size)
 encodes binary data into textual Base64 format
std::vector< std::uint8_t > decode64 (const std::string &val)
 decodes Base64 format into binary data
double computeBasinVolume (const Mesh &mesh, const FaceBitSet &faces, float level)
void accumulatePoints (PointAccumulator &accum, const std::vector< Vector3f > &points, const AffineXf3f *xf=nullptr)
 Adds in existing PointAccumulator all given points.
void accumulateWeighedPoints (PointAccumulator &accum, const std::vector< Vector3f > &points, const std::vector< float > &weights, const AffineXf3f *xf=nullptr)
 Adds in existing PointAccumulator all given weighed points.
void accumulateFaceCenters (PointAccumulator &accum, const MeshPart &mp, const AffineXf3f *xf=nullptr)
 Adds in existing PointAccumulator all mesh face centers with the weight equal to face area.
void accumulateLineCenters (PointAccumulator &accum, const Polyline3 &pl, const AffineXf3f *xf=nullptr)
 Adds in existing PointAccumulator all line centers with the weight equal to the length line.
void accumulatePoints (PointAccumulator &accum, const PointCloudPart &pcp, const AffineXf3f *xf=nullptr)
 Adds in existing PointAccumulator all points from the cloud (region) with weight 1.
constexpr bool canSolvePolynomial (auto degree)
constexpr bool canMinimizePolynomial (auto degree)
size_t heapBytes (const BitSet &bs)
 returns the amount of memory given BitSet occupies on heap
bool operator== (const BitSet &a, const BitSet &b)
 compare that two bit sets have the same set bits (they can be equal even if sizes are distinct but last bits are off)
template<typename I>
bool operator== (const TypedBitSet< I > &a, const TypedBitSet< I > &b)
template<typename T, typename U>
void operator== (const TypedBitSet< T > &a, const TypedBitSet< U > &b)=delete
 prohibit comparison of unrelated sets
template<typename I>
std::function< bool(I)> makePredicate (const TypedBitSet< I > *bitset)
template<typename I>
std::function< bool(I)> makePredicate (const TypedBitSet< I > &bitset)
template<typename I>
bool contains (const TypedBitSet< I > *bitset, I id)
template<typename I>
bool contains (const TypedBitSet< I > &bitset, I id)
template<typename I>
void fillVectorWithSeqNums (const TypedBitSet< I > &bs, Vector< int, I > &vec)
 for each set bit of input bitset, writes its sequential number starting from 0 in the given vector that shall have appropriate size
template<typename I>
Vector< int, ImakeVectorWithSeqNums (const TypedBitSet< I > &bs)
 creates a Vector where for each set bit of input bitset its sequential number starting from 0 is returned; and -1 for reset bits
template<typename I>
HashMap< I, int > makeHashMapWithSeqNums (const TypedBitSet< I > &bs)
 creates a HashMap where for each set bit of input bitset its sequential number starting from 0 is returned
BitSet operator& (const BitSet &a, const BitSet &b)
BitSet operator| (const BitSet &a, const BitSet &b)
BitSet operator^ (const BitSet &a, const BitSet &b)
BitSet operator- (const BitSet &a, const BitSet &b)
template<typename BS, typename ... F>
auto BitSetParallelForAllRanged (const BS &bs, F &&... f)
template<typename BS, typename L, typename ... F>
auto BitSetParallelForAllRanged (const BS &bs, tbb::enumerable_thread_specific< L > &e, F &&... f)
template<typename BS, typename F, typename ... Cb>
auto BitSetParallelForAll (const BS &bs, F &&f, Cb &&... cb)
template<typename BS, typename L, typename F, typename ... Cb>
auto BitSetParallelForAll (const BS &bs, tbb::enumerable_thread_specific< L > &e, F &&f, Cb &&... cb)
template<typename BS, typename F, typename ... Cb>
auto BitSetParallelFor (const BS &bs, F &&f, Cb &&... cb)
template<typename BS, typename L, typename F, typename ... Cb>
auto BitSetParallelFor (const BS &bs, tbb::enumerable_thread_specific< L > &e, F &&f, Cb &&... cb)
Expected< MeshdoBooleanOperation (Mesh &&meshACut, Mesh &&meshBCut, const std::vector< EdgePath > &cutEdgesA, const std::vector< EdgePath > &cutEdgesB, BooleanOperation operation, const AffineXf3f *rigidB2A=nullptr, BooleanResultMapper *mapper=nullptr, bool mergeAllNonIntersectingComponents=false, const BooleanInternalParameters &intParams={})
template<typename T>
std::array< Vector3< T >, 8 > getCorners (const Box< Vector3< T > > &box)
 returns all corners of given box
template<typename T>
std::array< Vector2< T >, 4 > getCorners (const Box< Vector2< T > > &box)
template<typename V>
MinMax< typename Box< V >::T > getTouchPlanes (const Box< V > &box, const V &n)
template<typename V>
Box< V > transformed (const Box< V > &box, const AffineXf< V > &xf)
 find the tightest box enclosing this one after transformation
template<typename V>
Box< V > transformed (const Box< V > &box, const AffineXf< V > *xf)
 this version returns input box as is if pointer to transformation is null
template<typename V>
auto width (const Box< V > &box)
 returns size along x axis
template<typename V>
auto height (const Box< V > &box)
 returns size along y axis
template<typename V>
auto depth (const Box< V > &box)
 returns size along z axis
template<typename V>
auto findSortedBoxDims (const Box< V > &box) -> typename VectorTraits< V >::template ChangeBaseType< int >
template<size_t I, typename V>
constexpr const V & get (const Box< V > &box) noexcept
 get<0> returns min, get<1> returns max
template<size_t I, typename V>
constexpr V & get (Box< V > &box) noexcept
template<typename T, typename I>
getAt (const Buffer< T, I > &bmap MR_LIFETIMEBOUND_NESTED, I key, T def={})
 given some buffer map and a key, returns the value associated with the key, or default value if key is invalid
template<typename T>
BMap< T, T > compose (const BMap< T, T > &a, const BMap< T, T > &b)
 computes the composition of two mappings x -> a(b(x))
MR_BIND_IGNORE std::optional< std::tm > Localtime (std::time_t time)
 A threadsafe equivalent for std::localtime(). Returns null on failure.
MR_BIND_IGNORE std::tm LocaltimeOrZero (std::time_t time)
 Same, but returns a struct full of zeroes on error.
size_t chunkCount (size_t totalSize, size_t chunkSize, size_t overlap=0)
 returns the amount of chunks of given size required to cover the full array
IteratorRange< ChunkIteratorsplitByChunks (size_t totalSize, size_t chunkSize, size_t overlap=0)
 returns a pair of iterators for chunks covering the array of given size
PointAndDistance findClosestWeightedPoint (const Vector3f &loc, const AABBTreePoints &tree, const DistanceFromWeightedPointsComputeParams &params)
MeshPointAndDistance findClosestWeightedMeshPoint (const Vector3f &loc, const Mesh &mesh, const DistanceFromWeightedPointsComputeParams &params)
std::optional< VertMap > findSmallestCloseVertices (const Mesh &mesh, float closeDist, const ProgressCallback &cb={})
std::optional< VertMap > findSmallestCloseVertices (const PointCloud &cloud, float closeDist, const ProgressCallback &cb={})
std::optional< VertMap > findSmallestCloseVertices (const VertCoords &points, float closeDist, const VertBitSet *valid=nullptr, const ProgressCallback &cb={})
std::optional< VertMap > findSmallestCloseVerticesUsingTree (const VertCoords &points, float closeDist, const AABBTreePoints &tree, const VertBitSet *valid, const ProgressCallback &cb={})
std::optional< VertBitSet > findCloseVertices (const Mesh &mesh, float closeDist, const ProgressCallback &cb={})
 finds all close vertices, where for each vertex there is another one located within given distance
std::optional< VertBitSet > findCloseVertices (const PointCloud &cloud, float closeDist, const ProgressCallback &cb={})
 finds all close vertices, where for each vertex there is another one located within given distance
std::optional< VertBitSet > findCloseVertices (const VertCoords &points, float closeDist, const VertBitSet *valid=nullptr, const ProgressCallback &cb={})
 finds all close vertices, where for each vertex there is another one located within given distance
VertBitSet findCloseVertices (const VertMap &smallestMap)
 finds all close vertices, where for each vertex there is another one located within given distance; smallestMap is the result of findSmallestCloseVertices function call
std::vector< EdgePairfindTwinEdgePairs (const Mesh &mesh, float closeDist)
 definition: if A,B and C,D are close vertices, then let us name AC and BD twin edges
EdgeBitSet findTwinEdges (const Mesh &mesh, float closeDist)
 finds all directed twin edges
EdgeBitSet findTwinEdges (const std::vector< EdgePair > &pairs)
UndirectedEdgeBitSet findTwinUndirectedEdges (const Mesh &mesh, float closeDist)
 finds all undirected twin edges
UndirectedEdgeBitSet findTwinUndirectedEdges (const std::vector< EdgePair > &pairs)
UndirectedEdgeHashMap findTwinUndirectedEdgeHashMap (const Mesh &mesh, float closeDist)
 provided that each edge has at most one twin, composes bidirectional mapping between twins
UndirectedEdgeHashMap findTwinUndirectedEdgeHashMap (const std::vector< EdgePair > &pairs)
bool operator== (const Color &a, const Color &b)
bool operator!= (const Color &a, const Color &b)
Color operator+ (const Color &a, const Color &b)
Color operator- (const Color &a, const Color &b)
Color operator* (float a, const Color &b)
Color operator* (const Color &b, float a)
Color operator/ (const Color &b, float a)
Color blend (const Color &front, const Color &back)
template<typename V>
Box< V > computeBoundingBox (const Vector< V, VertId > &points, VertId firstVert, VertId lastVert, const VertBitSet *region=nullptr, const AffineXf< V > *toWorld=nullptr)
template<typename V>
Box< V > computeBoundingBox (const Vector< V, VertId > &points, const VertBitSet *region=nullptr, const AffineXf< V > *toWorld=nullptr)
template<typename V>
Box< V > computeBoundingBox (const Vector< V, VertId > &points, const VertBitSet &region, const AffineXf< V > *toWorld=nullptr)
template<typename T, typename R = T>
calcOrientedArea (const Contour2< T > &contour)
template<typename T, typename R = T>
Vector3< R > calcOrientedArea (const Contour3< T > &contour)
template<typename V, typename R = typename V::ValueType>
calcLength (const Contour< V > &contour)
template<typename V, typename R = typename V::ValueType>
size_t findContourPointByLength (const Contour< V > &contour, R targetLen)
template<typename To, typename From>
MR_BIND_IGNORE To convertContour (const From &from)
template<typename To, typename From>
MR_BIND_IGNORE To convertContours (const From &from)
CutMeshResult cutMesh (Mesh &mesh, const OneMeshContours &contours, const CutMeshParameters &params={})
 Cuts mesh by given contours.
Expected< FaceBitSet > cutMeshByContour (Mesh &mesh, const Contour3f &contour, const AffineXf3f &xf={})
Expected< FaceBitSet > cutMeshByContours (Mesh &mesh, const Contours3f &contours, const AffineXf3f &xf={})
Expected< std::vector< EdgePath > > cutMeshByProjection (Mesh &mesh, const Contours3f &contours, const CutByProjectionSettings &settings)
 Performs orthographic projection with of given contours to mesh and cut result lines, fails if any point of contours has missed mesh on projection stage or cut contours contains self-intersections.
Expected< OneMeshContoursconvertMeshTriPointsSurfaceOffsetToMeshContours (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, float offset, SearchPathSettings searchSettings={})
 Makes continuous contour by iso-line from mesh tri points, if first and last meshTriPoint is the same, makes closed contour.
Expected< OneMeshContoursconvertMeshTriPointsSurfaceOffsetToMeshContours (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, const std::function< float(int)> &offsetAtPoint, SearchPathSettings searchSettings={})
 Makes continuous contour by iso-line from mesh tri points, if first and last meshTriPoint is the same, makes closed contour.
std::vector< FaceBitSet > separateClosedContour (const Mesh &mesh, const std::vector< Vector3f > &contour, const PathMeshEdgePointCallback &cb={})
void stitchContours (MeshTopology &topology, const EdgePath &c0, const EdgePath &c1)
EdgeLoop cutAlongEdgeLoop (MeshTopology &topology, const EdgeLoop &c0)
EdgeLoop cutAlongEdgeLoop (Mesh &mesh, const EdgeLoop &c0)
Mesh makeConvexHull (const VertCoords &points, const VertBitSet &validPoints)
 computes the mesh of convex hull from given input points
Mesh makeConvexHull (const Mesh &in)
Mesh makeConvexHull (const PointCloud &in)
Contour2f makeConvexHull (Contour2f points)
 computes the contour of convex hull from given input points
MeshTopology makeCubeTopology ()
Mesh makeCube (const Vector3f &size=Vector3f::diagonal(1.0f), const Vector3f &base=Vector3f::diagonal(-0.5f))
Mesh makeParallelepiped (const Vector3f side[3], const Vector3f &base)
 creates parallelepiped mesh with given min-corner base and given directional vectors size
Mesh makeBoxMesh (const Box3f &box)
 creates mesh visualizing a box
Mesh makeCylinder (float radius=0.1f, float length=1.0f, int resolution=16)
 Z-looking.
Mesh makeOpenCylinder (float radius=1, float z1=-1, float z2=1, int numCircleSegments=16)
 A hollow cylinder.
Mesh makeOpenCone (float radius=1, float zApex=0, float zBase=1, int numCircleSegments=16)
 A hollow cone.
Mesh makeCylinderAdvanced (float radius0=0.1f, float radius1=0.1f, float start_angle=0.0f, float arc_size=2.0f *PI_F, float length=1.0f, int resolution=16)
Mesh makeCone (float radius0=0.1f, float length=1.0f, int resolution=32)
 Makes cone mesh by calling makeCylinderAdvanced with the top radius 0.
void calcDipoles (Dipoles &dipoles, const AABBTree &tree, const Mesh &mesh)
 calculates dipoles for given mesh and AABB-tree
Dipoles calcDipoles (const AABBTree &tree, const Mesh &mesh)
float calcFastWindingNumber (const Dipoles &dipoles, const AABBTree &tree, const Mesh &mesh, const Vector3f &q, float beta, FaceId skipFace)
std::filesystem::path findPathWithExtension (const std::filesystem::path &pathWithoutExtension)
 given file name without final extension, finds in the same folder an existing file with same stem and any extension
bool operator!= (const DirectoryIterator &a, const std::filesystem::directory_iterator &b)
bool operator!= (const DirectoryRecursiveIterator &a, const std::filesystem::recursive_directory_iterator &b)
VertId findDirMax (const Vector3f &dir, const Mesh &m, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector3f &dir, const MeshPart &mp, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector3f &dir, const MeshVertPart &mp, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector3f &dir, const Polyline3 &polyline, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector2f &dir, const Polyline2 &polyline, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector3f &dir, const PointCloud &cloud, const VertBitSet *region=nullptr, UseAABBTree u=UseAABBTree::Yes)
VertId findDirMax (const Vector3f &dir, const AABBTreePoints &tree, const VertBitSet *region=nullptr)
VertId findDirMaxBruteForce (const Vector3f &dir, const VertCoords &points, const VertBitSet *region=nullptr)
 finds the point having the largest projection on given direction by traversing all region points
VertId findDirMaxBruteForce (const Vector2f &dir, const VertCoords2 &points, const VertBitSet *region=nullptr)
 finds the point having the largest projection on given direction by traversing all region points
VertId findDirMaxBruteForce (const Vector3f &dir, const PointCloud &cloud, const VertBitSet *region=nullptr)
 finds the point in the cloud having the largest projection on given direction by traversing all valid points
VertId findDirMaxBruteForce (const Vector3f &dir, const Polyline3 &polyline)
 finds the vertex in the polyline having the largest projection on given direction by traversing all valid vertices
VertId findDirMaxBruteForce (const Vector2f &dir, const Polyline2 &polyline)
 finds the vertex in the polyline having the largest projection on given direction by traversing all valid vertices
VertId findDirMaxBruteForce (const Vector3f &dir, const MeshPart &mp)
 finds the vertex in the mesh part having the largest projection on given direction by traversing all (region) faces
VertId findDirMaxBruteForce (const Vector3f &dir, const MeshVertPart &mp)
 finds the vertex in the mesh part having the largest projection on given direction by traversing all (region) vertices
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector3f &dir, const VertCoords &points, const VertBitSet *region=nullptr)
 finds the points having the smallest and the largest projections on given direction by traversing all region points
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector2f &dir, const VertCoords2 &points, const VertBitSet *region=nullptr)
 finds the points having the smallest and the largest projections on given direction by traversing all region points
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector3f &dir, const PointCloud &cloud, const VertBitSet *region=nullptr)
 finds the points in the cloud having the smallest and the largest projections on given direction by traversing all valid points
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector3f &dir, const Polyline3 &polyline)
 finds the vertex in the polyline having the smallest and the largest projections on given direction by traversing all valid vertices
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector2f &dir, const Polyline2 &polyline)
 finds the vertex in the polyline having the smallest and the largest projections on given direction by traversing all valid vertices
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector3f &dir, const MeshPart &mp)
 finds the vertices in the mesh part having the smallest and the largest projections on given direction by traversing all (region) faces
MinMaxArg< float, VertId > findDirMinMaxBruteForce (const Vector3f &dir, const MeshVertPart &mp)
 finds the vertices in the mesh part having the smallest and the largest projections on given direction by traversing all (region) vertices
DistanceMap combineXYderivativeMaps (std::pair< DistanceMap, DistanceMap > XYderivativeMaps)
 fill another distance map pair with gradients across X and Y axes of the argument map
DistanceMap computeDistanceMap (const MeshPart &mp, const MeshToDistanceMapParams &params, ProgressCallback cb={}, std::vector< MeshTriPoint > *outSamples=nullptr)
DistanceMap computeDistanceMapD (const MeshPart &mp, const MeshToDistanceMapParams &params, ProgressCallback cb={}, std::vector< MeshTriPoint > *outSamples=nullptr)
DistanceMap distanceMapFromContours (const Polyline2 &contours, const ContourToDistanceMapParams &params, const ContoursDistanceMapOptions &options={})
 Computes distance of 2d contours according ContourToDistanceMapParams.
void distanceMapFromContours (DistanceMap &distMap, const Polyline2 &polyline, const ContourToDistanceMapParams &params, const ContoursDistanceMapOptions &options={})
 Computes distance of 2d contours according ContourToDistanceMapParams.
std::vector< Vector3f > edgePointsFromContours (const Polyline2 &polyline, float pixelSize, float threshold)
Polyline2 distanceMapTo2DIsoPolyline (const DistanceMap &distMap, float isoValue)
Polyline2 distanceMapTo2DIsoPolyline (const DistanceMap &distMap, const ContourToDistanceMapParams &params, float isoValue)
 iso-lines are created in real space ( plane OXY with parameters according ContourToDistanceMapParams )
std::pair< Polyline2, AffineXf3f > distanceMapTo2DIsoPolyline (const DistanceMap &distMap, const AffineXf3f &xf, float isoValue, bool useDepth=false)
Polyline2 distanceMapTo2DIsoPolyline (const DistanceMap &distMap, float pixelSize, float isoValue)
Polyline2 polylineOffset (const Polyline2 &polyline, float pixelSize, float offset)
 constructs an offset contour for given polyline
Polyline2 contourUnion (const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams &params, float offsetInside=0)
 computes the union of the shapes bounded by input 2d contours
Polyline2 contourIntersection (const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams &params, float offsetInside=0.f)
 computes the intersection of the shapes bounded by input 2d contours
Polyline2 contourSubtract (const Polyline2 &contoursA, const Polyline2 &contoursB, const ContourToDistanceMapParams &params, float offsetInside=0.f)
 computes the difference between the shapes bounded by contoursA and the shapes bounded by contoursB
Expected< MeshdistanceMapToMesh (const DistanceMap &distMap, const AffineXf3f &toWorld, ProgressCallback cb={})
 converts distance map into mesh and applies a transformation to all points
Image convertDistanceMapToImage (const DistanceMap &distMap, float threshold=1.f/255)
Expected< DistanceMapconvertImageToDistanceMap (const Image &image, float threshold=1.f/255, bool invert=true)
template<class T>
divRound (T n, T d)
template<class T>
Vector2< T > divRound (const Vector2< T > &n, T d)
 computes division n/d with rounding of each components to the nearest integer, all signs of n and d are supported
template<class T>
Vector3< T > divRound (const Vector3< T > &n, T d)
 computes division n/d with rounding of each components to the nearest integer, all signs of n and d are supported
template<class T>
Vector4< T > divRound (const Vector4< T > &n, T d)
 computes division n/d with rounding of each components to the nearest integer, all signs of n and d are supported
bool operator== (const UndirectedEdgeIterator &a, const UndirectedEdgeIterator &b)
bool operator!= (const UndirectedEdgeIterator &a, const UndirectedEdgeIterator &b)
IteratorRange< UndirectedEdgeIteratorundirectedEdges (const MeshTopology &topology)
bool same (const MeshTopology &topology, const EdgePoint &lhs, const EdgePoint &rhs)
 returns true if two edge-points are equal considering different representations
Expected< MeshembedStructureToTerrain (const Mesh &terrain, const Mesh &structure, const EmbeddedStructureParameters &params)
void serializeToJson (const EndMillCutter &cutter, Json::Value &root)
void serializeToJson (const EndMillTool &tool, Json::Value &root)
Expected< void > deserializeFromJson (const Json::Value &root, EndMillCutter &cutter)
Expected< void > deserializeFromJson (const Json::Value &root, EndMillTool &tool)
VertScalars computeSpaceDistances (const Mesh &mesh, const PointOnFace &start, float range)
VertBitSet findNeighborVerts (const Mesh &mesh, const PointOnFace &start, float rangeSq)
const char * asString (ColoringType ct)
 returns string representation of enum values
void expand (const MeshTopology &topology, FaceBitSet &region, int hops=1)
 adds to the region all faces within given number of hops (stars) from the initial region boundary
FaceBitSet expand (const MeshTopology &topology, FaceId f, int hops)
 returns the region of all faces within given number of hops (stars) from the initial face
void expand (const MeshTopology &topology, VertBitSet &region, int hops=1)
 adds to the region all vertices within given number of hops (stars) from the initial region boundary
VertBitSet expand (const MeshTopology &topology, VertId v, int hops)
 returns the region of all vertices within given number of hops (stars) from the initial vertex
void shrink (const MeshTopology &topology, FaceBitSet &region, int hops=1)
 removes from the region all faces within given number of hops (stars) from the initial region boundary
void shrink (const MeshTopology &topology, VertBitSet &region, int hops=1)
 removes from the region all vertices within given number of hops (stars) from the initial region boundary
FaceBitSet expandFaces (const MeshTopology &topology, const FaceBitSet &region, const UndirectedEdgeBitSet *stopEdges=nullptr)
FaceBitSet shrinkFaces (const MeshTopology &topology, const FaceBitSet &region, const UndirectedEdgeBitSet *stopEdges=nullptr)
FaceBitSet getBoundaryFaces (const MeshTopology &topology, const FaceBitSet &region)
 returns faces from given region that have at least one neighbor face with shared edge not from the region
template<class E>
MR_BIND_IGNORE auto unexpected (E &&e)
MR_BIND_IGNORE std::string stringOperationCanceled ()
 common message about user termination of an operation
MR_BIND_IGNORE auto unexpectedOperationCanceled ()
 returns Expected error with stringOperationCanceled()
MR_BIND_IGNORE std::string stringUnsupportedFileExtension ()
 common message about unknown file extension
MR_BIND_IGNORE auto unexpectedUnsupportedFileExtension ()
 returns Expected error with stringUnsupportedFileExtension()
MR_BIND_IGNORE std::string stringUnsupportedFileFormat ()
 common message prefix about unsupported file format
MR_BIND_IGNORE auto unexpectedUnsupportedFileFormat ()
 returns Expected error with stringUnsupportedFileFormat()
IsoLines extractIsolines (const MeshTopology &topology, const VertMetric &vertValues, const FaceBitSet *region=nullptr)
 extracts all iso-lines from given scalar field and iso-value=0
bool hasAnyIsoline (const MeshTopology &topology, const VertMetric &vertValues, const FaceBitSet *region=nullptr)
 quickly returns true if extractIsolines produce not-empty set for the same arguments
IsoLines extractIsolines (const MeshTopology &topology, const VertScalars &vertValues, float isoValue, const FaceBitSet *region=nullptr)
 extracts all iso-lines from given scalar field and iso-value
bool hasAnyIsoline (const MeshTopology &topology, const VertScalars &vertValues, float isoValue, const FaceBitSet *region=nullptr)
 quickly returns true if extractIsolines produce not-empty set for the same arguments
PlaneSections extractPlaneSections (const MeshPart &mp, const Plane3f &plane, UseAABBTree u=UseAABBTree::Yes)
 extracts all plane sections of given mesh
bool hasAnyPlaneSection (const MeshPart &mp, const Plane3f &plane, UseAABBTree u=UseAABBTree::Yes)
 quickly returns true if extractPlaneSections produce not-empty set for the same arguments
PlaneSections extractXYPlaneSections (const MeshPart &mp, float zLevel, UseAABBTree u=UseAABBTree::Yes)
 extracts all sections of given mesh with the plane z=zLevel
bool hasAnyXYPlaneSection (const MeshPart &mp, float zLevel, UseAABBTree u=UseAABBTree::Yes)
 quickly returns true if extractXYPlaneSections produce not-empty set for the same arguments
std::vector< LineSegm3f > findTriangleSectionsByXYPlane (const MeshPart &mp, float zLevel, std::vector< FaceId > *faces=nullptr, UseAABBTree u=UseAABBTree::Yes)
PlaneSection trackSection (const MeshPart &mp, const MeshTriPoint &start, MeshTriPoint &end, const Vector3f &direction, float distance)
Expected< PlaneSectiontrackSection (const MeshPart &mp, const MeshTriPoint &start, const MeshTriPoint &end, const Vector3f &planePoint, bool ccw)
bool isConsistentlyOriented (const MeshTopology &topology, const IsoLine &isoline)
FaceBitSet getCrossedFaces (const MeshTopology &topology, const IsoLine &isoline)
 for a consistently oriented isoline, returns all faces it goes inside
Contour2f planeSectionToContour2f (const Mesh &mesh, const PlaneSection &section, const AffineXf3f &meshToPlane)
 converts PlaneSections in 2D contours by computing coordinate of each point, applying given xf to it, and retaining only x and y
Contours2f planeSectionsToContours2f (const Mesh &mesh, const PlaneSections &sections, const AffineXf3f &meshToPlane)
std::optional< FaceScalars > calcFaceDistances (const MeshTopology &topology, const EdgeMetric &metric, const FaceBitSet &starts, const FaceDistancesSettings &settings={})
template<typename F>
bool forEachObjectKind (F &&func)
 Calls func, which is ( auto kind ) -> bool, for each known object kind. If it returns true, stops immediately and also returns true.
template<typename ... P>
std::shared_ptr< VisualObjectmakeObjectFromEnum (FeaturesObjectKind kind, P &&... params)
 Allocates an object of type kind, passing params... to its constructor.
template<typename ... P>
std::shared_ptr< VisualObjectmakeObjectFromClassName (std::string className, P &&... params)
 Allocates an object of type kind, passing params... to its constructor.
std::optional< Vector3f > getFeatureNormal (FeatureObject *feature)
 Using forEachObjectKind the template collects a list of features for which the method ...->getNormal() is available.
std::optional< Vector3f > getFeatureDirection (FeatureObject *feature)
 Using forEachObjectKind the template collects a list of features for which the method ...->getDirection() is available.
std::unordered_set< std::string > getFeaturesTypeWithNormals ()
 Try to getNormal from specific feature using forEachObjectKind template. Returns nullopt is ...->getNormal() is not available for given feature type.
std::unordered_set< std::string > getFeaturesTypeWithDirections ()
 Try to getDirection from specific feature using forEachObjectKind template. Returns nullopt is ...->getDirection() is not available for given feature type.
Expected< AffineXf3f > refineFeatureObject (const FeatureObject &featObj, const Mesh &mesh, const RefineParameters &params={})
 Recalculate the feature object's position so it would better fit with the given mesh.
Expected< AffineXf3f > refineFeatureObject (const FeatureObject &featObj, const PointCloud &pointCloud, const RefineParameters &params={})
 Recalculate the feature object's position so it would better fit with the given point cloud.
MR_BIND_IGNORE FILE * fopen (const std::filesystem::path &filename, const char *mode)
 this version of fopen unlike std::fopen supports unicode file names on Windows
FaceBitSet fillContourLeft (const MeshTopology &topology, const EdgePath &contour)
FaceBitSet fillContourLeft (const MeshTopology &topology, const std::vector< EdgePath > &contours)
FaceBitSet fillContourLeftByGraphCut (const MeshTopology &topology, const EdgePath &contour, const EdgeMetric &metric, const ProgressCallback &progress={})
 Fills region located to the left from given contour, by minimizing the sum of metric over the boundary If the computations are terminated by progress, then returns the best approximation found by the moment of termination.
FaceBitSet fillContourLeftByGraphCut (const MeshTopology &topology, const std::vector< EdgePath > &contours, const EdgeMetric &metric, const ProgressCallback &progress={})
 Fills region located to the left from given contours, by minimizing the sum of metric over the boundary If the computations are terminated by progress, then returns the best approximation found by the moment of termination.
FaceBitSet segmentByGraphCut (const MeshTopology &topology, const FaceBitSet &source, const FaceBitSet &sink, const EdgeMetric &metric, const ProgressCallback &progress={})
 Finds segment that divide mesh on source and sink (source included, sink excluded), by minimizing the sum of metric over the boundary If the computations are terminated by progress, then returns the best approximation found by the moment of termination.
Expected< void > fillContours2D (Mesh &mesh, const std::vector< EdgeId > &holeRepresentativeEdges)
 fill holes with border in same plane (i.e. after cut by plane)
AffineXf3f getXfFromOxyPlane (const Contours3f &contours)
AffineXf3f getXfFromOxyPlane (const Mesh &mesh, const std::vector< EdgePath > &paths)
Expected< void > fillPlanarHole (ObjectMeshData &data, std::vector< EdgeLoop > &holeContours)
FaceBitSet fillHoleNicely (Mesh &mesh, EdgeId holeEdge, const FillHoleNicelySettings &settings)
 fills a hole in mesh specified by one of its edge, optionally subdivides new patch on smaller triangles, optionally make smooth connection with existing triangles outside the hole
FaceBitSet stitchHolesNicely (Mesh &mesh, EdgeId hole0Edge, EdgeId hole1Edge, const StitchHolesNicelySettings &settings)
void filterCreaseEdges (const Mesh &mesh, UndirectedEdgeBitSet &creaseEdges, float critLength, bool filterComponents=true, bool filterBranches=false)
std::vector< Vector3f > makeFreeFormOriginGrid (const Box3f &box, const Vector3i &resolution)
 Returns positions of grid points in given box with given resolution.
std::vector< Vector3f > findBestFreeformDeformation (const Box3f &box, const std::vector< Vector3f > &source, const std::vector< Vector3f > &target, const Vector3i &resolution=Vector3i::diagonal(2), const AffineXf3f *samplesToBox=nullptr)
template<typename R, typename... Args>
constexpr void swap (FunctionRef< R(Args...)> &lhs, FunctionRef< R(Args...)> &rhs) noexcept
std::optional< VertBitSet > verticesGridSampling (const MeshPart &mp, float voxelSize, const ProgressCallback &cb={})
std::optional< VertBitSet > pointGridSampling (const PointCloudPart &pcp, float voxelSize, const ProgressCallback &cb={})
std::optional< MultiObjsSamplesmultiModelGridSampling (const Vector< ModelPointsData, ObjId > &models, float voxelSize, const ProgressCallback &cb={})
template<typename T>
size_t heapBytes (const std::vector< T > &vec)
 returns the amount of memory given vector occupies on heap
template<typename T, typename U>
size_t heapBytes (const Vector< T, U > &vec)
template<typename T>
size_t heapBytes (const std::unique_ptr< T > &ptr)
 returns the amount of memory this smart pointer and its pointed object own together on heap
template<typename T>
size_t heapBytes (const std::shared_ptr< T > &ptr)
 returns the amount of memory this smart pointer and its pointed object own together on heap
template<typename T>
 MR_REQUIRES_IF_SUPPORTED (std::is_function_v< T >) inline size_t heapBytes(const std
template<typename ... Ts>
size_t heapBytes (const phmap::flat_hash_map< Ts... > &hashMap)
 returns the amount of memory given HashMap occupies on heap
std::pair< bool, int > filterHistoryActionsVector (HistoryActionsVector &historyVector, HistoryStackFilter filteringCondition, size_t firstRedoIndex=0, bool deepFiltering=true)
 Remove actions from history actions vector that match the condition.
size_t getNumSamples (const IPointPairs &pairs)
 returns the number of samples able to form pairs
size_t getNumActivePairs (const IPointPairs &pairs)
 computes the number of active pairs
NumSum getSumSqDistToPoint (const IPointPairs &pairs, std::optional< double > inaccuracy={})
NumSum getSumSqDistToPlane (const IPointPairs &pairs, std::optional< double > inaccuracy={})
float getMeanSqDistToPoint (const IPointPairs &pairs)
 computes root-mean-square deviation between points
float getMeanSqDistToPlane (const IPointPairs &pairs)
 computes root-mean-square deviation from points to target planes
std::string getICPStatusInfo (int iterations, ICPExitType exitType)
 returns status info string
AffineXf3d getAligningXf (const PointToPlaneAligningTransform &p2pl, ICPMode mode, float angleLimit, float scaleLimit, const Vector3f &fixedRotationAxis)
 given prepared (p2pl) object, finds the best transformation from it of given type with given limitations on rotation angle and global scale
size_t deactivateFarPairs (IPointPairs &pairs, float maxDistSq)
 reset active bit if pair distance is further than maxDistSq
void updatePointPairs (PointPairs &pairs, const MeshOrPointsXf &src, const MeshOrPointsXf &tgt, float cosThreshold, float distThresholdSq, bool mutualClosest)
 in each pair updates the target data and performs basic filtering (activation)
template<typename T>
constexpr Id< T > operator+ (Id< T > id, int a)
template<typename T>
constexpr Id< T > operator+ (Id< T > id, unsigned int a)
template<typename T>
constexpr Id< T > operator+ (Id< T > id, size_t a)
template<typename T>
constexpr Id< T > operator- (Id< T > id, int a)
template<typename T>
constexpr Id< T > operator- (Id< T > id, unsigned int a)
template<typename T>
constexpr Id< T > operator- (Id< T > id, size_t a)
constexpr FaceId operator""_f (unsigned long long i) noexcept
constexpr VertId operator""_v (unsigned long long i) noexcept
constexpr EdgeId operator""_e (unsigned long long i) noexcept
constexpr UndirectedEdgeId operator""_ue (unsigned long long i) noexcept
constexpr VoxelId operator""_vox (unsigned long long i) noexcept
bool improveSampling (const PointCloud &cloud, VertBitSet &samples, const ImproveSamplingSettings &settings)
ShellVertexInfo classifyShellVert (const MeshPart &mp, const Vector3f &shellPoint, const FindInnerShellSettings &settings={})
VertBitSet findInnerShellVerts (const MeshPart &mp, const Mesh &shell, const FindInnerShellSettings &settings={})
FaceBitSet findInnerShellFacesWithSplits (const MeshPart &mp, Mesh &shell, const FindInnerShellSettings &settings={})
template<typename T>
std::optional< Line3< T > > intersection (const Plane3< T > &plane1, const Plane3< T > &plane2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
template<typename T>
std::optional< Vector3< T > > intersection (const Plane3< T > &plane, const Line3< T > &line, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
template<typename T>
std::optional< Vector3< T > > intersection (const Line3< T > &line1, const Line3< T > &line2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
std::optional< Vector2f > intersection (const LineSegm2f &segm1, const LineSegm2f &segm2)
template<typename T>
std::optional< T > distanceSq (const Plane3< T > &plane1, const Plane3< T > &plane2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
template<typename T>
std::optional< T > distance (const Plane3< T > &plane1, const Plane3< T > &plane2, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
template<typename T>
std::optional< T > distance (const Plane3< T > &plane, const Line3< T > &line, T errorLimit=std::numeric_limits< T >::epsilon() *T(20))
template<typename T>
LineSegm3< T > closestPoints (const Line3< T > &line1, const Line3< T > &line2)
template<typename T>
LineSegm3< T > closestPoints (const Line3< T > &ln, const LineSegm3< T > &ls)
template<typename T>
LineSegm3< T > closestPoints (const Line3< T > &line, const Box3< T > &box)
 finds the closest points between a line and a box wireframe (not solid) in 3D
template<typename V>
auto intersection (const Line< V > &line, const Sphere< V > &sphere)
ContinuousContours orderIntersectionContours (const MeshTopology &topologyA, const MeshTopology &topologyB, const PreciseCollisionResult &intersections)
ContinuousContours orderSelfIntersectionContours (const MeshTopology &topology, const std::vector< EdgeTri > &intersections)
MR_BIND_IGNORE Contours3f extractIntersectionContours (const Mesh &meshA, const Mesh &meshB, const ContinuousContours &orientedContours, const CoordinateConverters &converters, const AffineXf3f *rigidB2A=nullptr)
 extracts coordinates from two meshes intersection contours
bool isClosed (const ContinuousContour &contour)
 returns true if contour is closed
std::vector< int > detectLoneContours (const ContinuousContours &contours, bool ignoreOpen=false)
void removeLoneDegeneratedContours (const MeshTopology &edgesTopology, OneMeshContours &faceContours, OneMeshContours &edgeContours)
void removeLoneContours (ContinuousContours &contours, bool ignoreOpen=false)
template<typename T>
void findMaxVectorDim (int &dimX, int &dimY, int &dimZ, const Vector3< T > &dir)
 finds index of maximum axis and stores it into dimZ
template<typename T>
void findMaxVectorDim (int &dimX, int &dimY, const Vector2< T > &dir)
 finds index of maximum axis and stores it into dimY
IOFilters operator| (const IOFilters &a, const IOFilters &b)
 returns union of input filters
std::optional< IOFilterfindFilter (const IOFilters &filters, const std::string &extension)
 find a corresponding filter for a given extension
std::vector< size_t > splitByLines (const char *data, size_t size)
 returns offsets for each new line in monolith char block
MR_BIND_IGNORE std::streamoff getStreamSize (std::istream &in)
MR_BIND_IGNORE Expected< std::string > readString (std::istream &in)
MR_BIND_IGNORE Expected< Buffer< char > > readCharBuffer (std::istream &in)
 reads input stream to monolith char block
template<typename T>
Expected< void > parseTextCoordinate (const std::string_view &str, Vector3< T > &v, Vector3< T > *n=nullptr, Color *c=nullptr)
 read coordinates to v separated by space
template<typename T>
Expected< void > parseObjCoordinate (const std::string_view &str, Vector3< T > &v, Vector3< T > *c=nullptr)
template<typename T>
Expected< void > parsePtsCoordinate (const std::string_view &str, Vector3< T > &v, Color *c=nullptr, Vector3< T > *n=nullptr)
template<typename T>
Expected< void > parsePtsCoordinate (const std::string_view &str, Vector3< T > &v, Color &c)
Expected< void > parseFirstNum (const std::string_view &str, int &num)
 reads the first integer number in the line
Expected< void > parsePolygon (const std::string_view &str, VertId *vertId, int *numPoints)
template<typename T>
Expected< void > parseAscCoordinate (const std::string_view &str, Vector3< T > &v, Vector3< T > *n=nullptr, Color *c=nullptr)
template<typename T>
Expected< void > parseSingleNumber (const std::string_view &str, T &num)
bool hasBom (const std::string_view &str)
 checks if the given string starts with the UTF-8 byte-order mark
MR_BIND_IGNORE std::unique_ptr< IRenderObjectcreateRenderObject (const VisualObject &visObj, const std::type_index &type)
template<typename ObjectType>
MR_BIND_IGNORE std::unique_ptr< IRenderObjectcreateRenderObject (const VisualObject &visObj)
template<typename RenderObjType>
MR_BIND_IGNORE IRenderObjectConstructorLambda makeRenderObjectConstructor ()
bool isNanFast (float f)
 quickly tests whether given float is not-a-number
std::optional< VertBitSet > pointIterativeSampling (const PointCloud &cloud, int numSamples, const ProgressCallback &cb={})
std::shared_ptr< ObjectmakeLevelOfDetails (Mesh &&mesh, int maxDepth)
template<typename V>
bool operator== (const LineSegm< V > &a, const LineSegm< V > &b)
template<typename V>
closestPointOnLineSegm (const V &pt, const LineSegm< V > &l)
template<typename V>
bool doSegmentsIntersect (const LineSegm< V > &x, const LineSegm< V > &y, typename V::ValueType *xPos=nullptr, typename V::ValueType *yPos=nullptr)
template<typename V>
bool doSegmentLineIntersect (const LineSegm< V > &x, const Line< V > &y, typename V::ValueType *xPos=nullptr, typename V::ValueType *yPos=nullptr)
std::optional< AllLocalTriangulationsuniteLocalTriangulations (const std::vector< SomeLocalTriangulations > &in, const ProgressCallback &progress={})
Vector3f computeNormal (const AllLocalTriangulations &triangs, const VertCoords &points, VertId v)
 compute normal at point by averaging neighbor triangle normals weighted by triangle's angle at the point
void orientLocalTriangulations (AllLocalTriangulations &triangs, const VertCoords &coords, const VertBitSet &region, const VertNormals &targetDir)
 orient neighbors around each point in
void orientLocalTriangulations (AllLocalTriangulations &triangs, const VertCoords &coords, const VertBitSet &region, const std::function< Vector3f(VertId)> &targetDir)
bool autoOrientLocalTriangulations (const PointCloud &pointCloud, AllLocalTriangulations &triangs, const VertBitSet &region, ProgressCallback progress={}, Triangulation *outRep3=nullptr, Triangulation *outRep2=nullptr)
 orient neighbors around each point in
TrianglesRepetitions computeTrianglesRepetitions (const AllLocalTriangulations &triangs)
 computes statistics about the number of triangle repetitions in local triangulations
std::vector< UnorientedTrianglefindRepeatedUnorientedTriangles (const AllLocalTriangulations &triangs, int repetitions)
 from local triangulations returns all unoriented triangles with given number of repetitions each in [1,3]
Triangulation findRepeatedOrientedTriangles (const AllLocalTriangulations &triangs, int repetitions)
 from local triangulations returns all oriented triangles with given number of repetitions each in [1,3]
void findRepeatedOrientedTriangles (const AllLocalTriangulations &triangs, Triangulation *outRep3, Triangulation *outRep2)
 optional output with all oriented triangles that appear in exactly two local triangulations
Mesh makePlane ()
 Makes square plane 1x1 size with center at (0,0,0) and (0,0,1) normal.
AffineXf3d makeRigidXf (const MeshPart &mp, const AffineXf3d &meshXf)
AffineXf3f makeRigidXf (const MeshPart &mp, const AffineXf3f &meshXf)
Mesh makeSphere (const SphereParams &params)
 creates a mesh of sphere with irregular triangulation
Mesh makeUVSphere (float radius=1.0, int horisontalResolution=16, int verticalResolution=16)
 creates a mesh of sphere with regular triangulation (parallels and meridians)
EdgeId mapEdge (const WholeEdgeMap &map, EdgeId src)
 given input edge (src), converts its id using given map
UndirectedEdgeId mapEdge (const WholeEdgeMap &map, UndirectedEdgeId src)
 given input edge (src), converts its id using given map
EdgeId mapEdge (const WholeEdgeHashMap &map, EdgeId src)
 given input edge (src), converts its id using given map
UndirectedEdgeId mapEdge (const WholeEdgeHashMap &map, UndirectedEdgeId src)
 given input edge (src), converts its id using given map
EdgeId mapEdge (const WholeEdgeMapOrHashMap &m, EdgeId src)
 given input edge (src), converts its id using given map
UndirectedEdgeId mapEdge (const WholeEdgeMapOrHashMap &m, UndirectedEdgeId src)
 given input edge (src), converts its id using given map
UndirectedEdgeId mapEdge (const UndirectedEdgeBMap &map, UndirectedEdgeId src)
 given input edge (src), converts its id using given map
UndirectedEdgeBitSet mapEdges (const WholeEdgeMap &map, const UndirectedEdgeBitSet &src)
 given input bit-set (src), converts each id corresponding to set bit using given map, and sets its bit in the resulting bit set
UndirectedEdgeBitSet mapEdges (const WholeEdgeHashMap &map, const UndirectedEdgeBitSet &src)
 given input bit-set (src), converts each id corresponding to set bit using given map, and sets its bit in the resulting bit set
UndirectedEdgeBitSet mapEdges (const UndirectedEdgeBMap &map, const UndirectedEdgeBitSet &src)
 given input bit-set (src), converts each id corresponding to set bit using given map, and sets its bit in the resulting bit set
template<typename K, typename V>
getAt (const MapOrHashMap< K, V > &m, K key, V def={})
template<typename K, typename V>
void setAt (MapOrHashMap< K, V > &m, K key, V val)
template<typename ValueT, typename IndexT>
void mapNewToOldVector (const Vector< ValueT, Id< IndexT > > &oldData, const Vector< Id< IndexT >, Id< IndexT > > &newToOld, Vector< ValueT, Id< IndexT > > &newData)
template<typename ValueT, typename IndexT>
void mapOldToNewVector (const Vector< ValueT, Id< IndexT > > &oldData, const Vector< Id< IndexT >, Id< IndexT > > &newToOld, Vector< ValueT, Id< IndexT > > &newData)
bool isClosed (const Contour3f &c)
MarkedContour3f markedContour (Contour3f in)
MarkedContour3f markedFirstLast (Contour3f in)
MarkedContour3f resample (const MarkedContour3f &in, float minStep, Contour3f *normals=nullptr)
MarkedContour3f makeSpline (MarkedContour3f in, float markStability=1, const Contour3f *normals=nullptr)
MarkedContour3f makeSpline (MarkedContour3f in, const Contour3f &normals, float markStability=1)
MarkedContour3f makeSpline (const Contour3f &controlPoints, const SplineSettings &settings)
template<typename T>
void decomposeMatrix3 (const Matrix3< T > &m, Matrix3< T > &rotation, Matrix3< T > &scaling)
 Decomposes matrix into rotation and scaling matrices.
template<typename T>
bool isRigid (const Matrix3< T > &m)
 Returns true if matrix scale is identity.
TransformedMeshoperator+= (TransformedMesh &a, const TransformedMesh &b)
 union operation on two meshes
TransformedMeshoperator-= (TransformedMesh &a, const TransformedMesh &b)
 difference operation on two meshes
TransformedMeshoperator*= (TransformedMesh &a, const TransformedMesh &b)
 intersection operation on two meshes
void straightenBoundary (Mesh &mesh, EdgeId bd, float minNeiNormalsDot, float maxTriAspectRatio, FaceBitSet *newFaces=nullptr)
std::vector< FaceFacefindCollidingTriangles (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr, bool firstIntersectionOnly=false)
 finds all pairs of colliding triangles from two meshes or two mesh regions
std::pair< FaceBitSet, FaceBitSet > findCollidingTriangleBitsets (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 the same as findCollidingTriangles, but returns one bite set per mesh with colliding triangles
Expected< bool > findSelfCollidingTriangles (const MeshPart &mp, std::vector< FaceFace > *outCollidingPairs, ProgressCallback cb={}, const Face2RegionMap *regionMap=nullptr, bool touchIsIntersection=false)
 finds all pairs (or the fact of any self-collision) of colliding triangles from one mesh or a region
Expected< std::vector< FaceFace > > findSelfCollidingTriangles (const MeshPart &mp, ProgressCallback cb={}, const Face2RegionMap *regionMap=nullptr, bool touchIsIntersection=false)
 finds all pairs of colliding triangles from one mesh or a region
Expected< FaceBitSet > findSelfCollidingTrianglesBS (const MeshPart &mp, ProgressCallback cb={}, const Face2RegionMap *regionMap=nullptr, bool touchIsIntersection=false)
 the same findSelfCollidingTriangles but returns the union of all self-intersecting faces
bool isInside (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 checks that arbitrary mesh part A is inside of closed mesh part B
bool isNonIntersectingInside (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 checks that arbitrary mesh part A is inside of closed mesh part B The version of isInside without collision check; it is user's responsibility to guarantee that the meshes don't collide
bool isNonIntersectingInside (const Mesh &a, FaceId partFace, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 checks that arbitrary mesh A part (whole part is represented by one face partFace) is inside of closed mesh part B The version of isInside without collision check; it is user's responsibility to guarantee that the meshes don't collide
bool operator== (const EdgeTri &a, const EdgeTri &b)
PreciseCollisionResult findCollidingEdgeTrisPrecise (const MeshPart &a, const MeshPart &b, ConvertToIntVector conv, const AffineXf3f *rigidB2A=nullptr, bool anyIntersection=false)
 finds all pairs of colliding edges from one mesh and triangle from another mesh
std::vector< EdgeTrifindSelfCollidingEdgeTrisPrecise (const MeshPart &mp, ConvertToIntVector conv, bool anyIntersection=false, const AffineXf3f *rigidB2A=nullptr, int aVertSizes=0)
 finds all pairs of colliding edges and triangle within one mesh
std::vector< EdgeTrifindCollidingEdgeTrisPrecise (const Mesh &a, const std::vector< EdgeId > &edgesA, const Mesh &b, const std::vector< FaceId > &facesB, ConvertToIntVector conv, const AffineXf3f *rigidB2A=nullptr)
 finds all intersections between every given edge from A and given triangles from B
std::vector< EdgeTrifindCollidingEdgeTrisPrecise (const Mesh &a, const std::vector< FaceId > &facesA, const Mesh &b, const std::vector< EdgeId > &edgesB, ConvertToIntVector conv, const AffineXf3f *rigidB2A=nullptr)
 finds all intersections between every given triangle from A and given edge from B
CoordinateConverters getVectorConverters (const MeshPart &a)
 creates simple converters from Vector3f to Vector3i and back in mesh part area range
CoordinateConverters getVectorConverters (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 creates simple converters from Vector3f to Vector3i and back in mesh parts area range
DecimateResult decimateMesh (Mesh &mesh, const DecimateSettings &settings={})
 Performs mesh simplification in mesh region according to the settings.
DecimateResult decimateObjectMeshData (ObjectMeshData &data, const DecimateSettings &settings)
std::optional< ObjectMeshDatamakeDecimatedObjectMeshData (const ObjectMesh &obj, const DecimateSettings &settings, DecimateResult *outRes=nullptr)
 returns the data of decimated mesh given ObjectMesh (which remains unchanged) and decimation parameters
QuadraticForm3f computeFormAtVertex (const MeshPart &mp, VertId v, float stabilizer, bool angleWeigted, const UndirectedEdgeBitSet *creases=nullptr)
 Computes quadratic form at given vertex of the initial surface before decimation.
Vector< QuadraticForm3f, VertId > computeFormsAtVertices (const MeshPart &mp, float stabilizer, bool angleWeigted, const UndirectedEdgeBitSet *creases=nullptr)
 Computes quadratic forms at every vertex of mesh part before decimation.
FaceBitSet getSubdividePart (const FaceBitSet &valids, size_t subdivideParts, size_t myPart)
 returns given subdivision part of all valid faces; parallel threads shall be able to safely modify these bits because they do not share any block with other parts
bool resolveMeshDegenerations (Mesh &mesh, const ResolveMeshDegenSettings &settings={})
 Removes degenerate triangles in a mesh by calling decimateMesh function with appropriate settings.
bool remesh (Mesh &mesh, const RemeshSettings &settings)
 Splits too long and eliminates too short edges from the mesh.
template<typename T>
auto preCollapseVertAttribute (const Mesh &mesh, Vector< T, VertId > &data)
PreCollapseCallback meshPreCollapseVertAttribute (const Mesh &mesh, const MeshAttributesToUpdate &params)
void deleteTargetFaces (Mesh &obj, const Vector3f &targetCenter)
 deletes object faces with normals pointed to the target geometry center
void deleteTargetFaces (Mesh &obj, const Mesh &target)
bool checkDeloneQuadrangle (const Vector3d &a, const Vector3d &b, const Vector3d &c, const Vector3d &d, double maxAngleChange=DBL_MAX)
bool checkDeloneQuadrangle (const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d, float maxAngleChange=FLT_MAX)
 converts arguments in double and calls above function
FlipEdge canFlipEdge (const MeshTopology &topology, EdgeId edge, const FaceBitSet *region=nullptr, const UndirectedEdgeBitSet *notFlippable=nullptr, const VertBitSet *vertRegion=nullptr)
 consider topology and constraints to decide about flip possibility
bool checkDeloneQuadrangleInMesh (const Mesh &mesh, EdgeId edge, const DeloneSettings &settings={}, float *deviationSqAfterFlip=nullptr)
 squared surface deviation after flip is written here (at least when the function returns false)
bool checkDeloneQuadrangleInMesh (const MeshTopology &topology, const VertCoords &points, EdgeId edge, const DeloneSettings &settings={}, float *deviationSqAfterFlip=nullptr)
 squared surface deviation after flip is written here (at least when the function returns false)
bool bestQuadrangleDiagonal (const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d)
void makeDeloneOriginRing (Mesh &mesh, EdgeId e, const DeloneSettings &settings={})
 improves mesh triangulation in a ring of vertices with common origin and represented by edge e
void makeDeloneOriginRing (MeshTopology &topology, const VertCoords &points, EdgeId e, const DeloneSettings &settings={})
int makeDeloneEdgeFlips (Mesh &mesh, const DeloneSettings &settings={}, int numIters=1, const ProgressCallback &progressCallback={})
int makeDeloneEdgeFlips (MeshTopology &topology, const VertCoords &points, const DeloneSettings &settings={}, int numIters=1, const ProgressCallback &progressCallback={})
int makeDeloneEdgeFlips (EdgeLengthMesh &mesh, const IntrinsicDeloneSettings &settings={}, int numIters=1, const ProgressCallback &progressCallback={})
void processCloseTriangles (const MeshPart &mp, const Triangle3f &t, float rangeSq, const TriangleCallback &call)
std::optional< float > signedDistanceToMesh (const MeshPart &mp, const Vector3f &p, const SignedDistanceToMeshOptions &op)
void divideMeshWithPlane (ObjectMeshData &data, const Plane3f &plane, const DivideMeshWithPlaneParams &divideParams={})
FaceBitSet findOuterLayer (const Mesh &mesh)
MR_BIND_IGNORE MeshTopology topologyFromEigen (const Eigen::MatrixXi &F)
 constructs mesh topology from N*3 matrix of vertex indices
MR_BIND_IGNORE Mesh meshFromEigen (const Eigen::MatrixXd &V, const Eigen::MatrixXi &F)
 constructs mesh from M*3 matrix of coordinates and N*3 matrix of vertex indices
MR_BIND_IGNORE void pointsFromEigen (const Eigen::MatrixXd &V, const VertBitSet &selection, VertCoords &points)
 replace selected points with the values from V
MR_BIND_IGNORE void topologyToEigen (const MeshTopology &topology, Eigen::MatrixXi &F)
 converts valid faces from mesh topology into N*3 matrix of vertex indices
MR_BIND_IGNORE void meshToEigen (const Mesh &mesh, Eigen::MatrixXd &V, Eigen::MatrixXi &F)
 converts mesh into M*3 matrix of coordinates and N*3 matrix of vertex indices
void makeDegenerateBandAroundRegion (Mesh &mesh, const FaceBitSet &region, const MakeDegenerateBandAroundRegionParams &params={})
 Create a band of degenerate faces along the border of the specified region and the rest of the mesh.
void stitchHoles (Mesh &mesh, EdgeId a, EdgeId b, const StitchHolesParams &params={})
 Stitches two holes in Mesh
.
void buildCylinderBetweenTwoHoles (Mesh &mesh, EdgeId a, EdgeId b, const StitchHolesParams &params={})
bool stitchHoles (Mesh &mesh, const StitchHolesParams &params={})
 this version finds holes in the mesh by itself and returns false if they are not found
bool buildCylinderBetweenTwoHoles (Mesh &mesh, const StitchHolesParams &params={})
void fillHole (Mesh &mesh, EdgeId a, const FillHoleParams &params={})
 Fills hole in mesh
.
void fillHoles (Mesh &mesh, const std::vector< EdgeId > &as, const FillHoleParams &params={})
 fill all holes given by their representative edges in
bool isHoleBd (const MeshTopology &topology, const EdgeLoop &loop)
HoleFillPlan getHoleFillPlan (const Mesh &mesh, EdgeId e, const FillHoleParams &params={})
std::vector< HoleFillPlangetHoleFillPlans (const Mesh &mesh, const std::vector< EdgeId > &holeRepresentativeEdges, const FillHoleParams &params={})
HoleFillPlan getPlanarHoleFillPlan (const Mesh &mesh, EdgeId e)
std::vector< HoleFillPlangetPlanarHoleFillPlans (const Mesh &mesh, const std::vector< EdgeId > &holeRepresentativeEdges)
void executeHoleFillPlan (Mesh &mesh, EdgeId a0, HoleFillPlan &plan, FaceBitSet *outNewFaces=nullptr)
 quickly triangulates the face or hole to the left of (e) given the plan (quickly compared to fillHole function)
VertId fillHoleTrivially (Mesh &mesh, EdgeId a, FaceBitSet *outNewFaces=nullptr)
 Triangulates face of hole in mesh trivially
.
EdgeId extendHole (Mesh &mesh, EdgeId a, const Plane3f &plane, FaceBitSet *outNewFaces=nullptr)
std::vector< EdgeId > extendAllHoles (Mesh &mesh, const Plane3f &plane, FaceBitSet *outNewFaces=nullptr)
EdgeId extendHole (Mesh &mesh, EdgeId a, std::function< Vector3f(const Vector3f &)> getVertPos, FaceBitSet *outNewFaces=nullptr)
EdgeId buildBottom (Mesh &mesh, EdgeId a, Vector3f dir, float holeExtension, FaceBitSet *outNewFaces=nullptr)
EdgeId makeDegenerateBandAroundHole (Mesh &mesh, EdgeId a, FaceBitSet *outNewFaces=nullptr)
MakeBridgeResult makeQuadBridge (MeshTopology &topology, EdgeId a, EdgeId b, FaceBitSet *outNewFaces=nullptr)
MakeBridgeResult makeBridge (MeshTopology &topology, EdgeId a, EdgeId b, FaceBitSet *outNewFaces=nullptr)
MakeBridgeResult makeSmoothBridge (Mesh &mesh, EdgeId a, EdgeId b, float samplingStep, FaceBitSet *outNewFaces=nullptr)
EdgeId makeBridgeEdge (MeshTopology &topology, EdgeId a, EdgeId b)
void splitQuad (MeshTopology &topology, EdgeId a, FaceBitSet *outNewFaces=nullptr)
 given quadrangle face to the left of a, splits it in two triangles with new diagonal edge via dest(a)
int duplicateMultiHoleVertices (Mesh &mesh)
 Duplicates all vertices having more than two boundary edges (and returns the number of duplications);.
Expected< std::vector< MultipleEdge > > findMultipleEdges (const MeshTopology &topology, ProgressCallback cb={})
bool hasMultipleEdges (const MeshTopology &topology)
void fixMultipleEdges (Mesh &mesh, const std::vector< MultipleEdge > &multipleEdges)
 resolves given multiple edges, but splitting all but one edge in each group
void fixMultipleEdges (Mesh &mesh)
 finds and resolves multiple edges
Expected< FaceBitSet > findDegenerateFaces (const MeshPart &mp, float criticalAspectRatio=FLT_MAX, ProgressCallback cb={})
 finds faces having aspect ratio >= criticalAspectRatio
Expected< FaceBitSet > findNotSmoothFaces (const MeshPart &mp, float minAngle=0.3f, ProgressCallback cb={})
Expected< UndirectedEdgeBitSet > findShortEdges (const MeshPart &mp, float criticalLength, ProgressCallback cb={})
 finds edges having length <= criticalLength
Expected< void > fixMeshDegeneracies (Mesh &mesh, const FixMeshDegeneraciesParams &params)
 Fixes degenerate faces and short edges in mesh (changes topology)
VertBitSet findNRingVerts (const MeshTopology &topology, int n, const VertBitSet *region=nullptr)
 finds vertices in region with complete ring of N edges
bool isEdgeBetweenDoubleTris (const MeshTopology &topology, EdgeId e)
 returns true if the edge e has both left and right triangular faces and the degree of dest( e ) is 2
EdgeId eliminateDoubleTris (MeshTopology &topology, EdgeId e, FaceBitSet *region=nullptr)
void eliminateDoubleTrisAround (MeshTopology &topology, VertId v, FaceBitSet *region=nullptr)
bool isDegree3Dest (const MeshTopology &topology, EdgeId e)
 returns true if the destination of given edge has degree 3 and 3 incident triangles
EdgeId eliminateDegree3Dest (MeshTopology &topology, EdgeId e, FaceBitSet *region=nullptr)
int eliminateDegree3Vertices (MeshTopology &topology, VertBitSet &region, FaceBitSet *fs=nullptr)
EdgeId isVertexRepeatedOnHoleBd (const MeshTopology &topology, VertId v)
VertBitSet findRepeatedVertsOnHoleBd (const MeshTopology &topology)
 returns set bits for all vertices present on the boundary of a hole several times;
FaceBitSet findHoleComplicatingFaces (const Mesh &mesh)
void fixMeshCreases (Mesh &mesh, const FixCreasesParams &params={})
 Finds creases edges and re-triangulates planar areas around them, useful to fix double faces.
Expected< FaceBitSet > findDisorientedFaces (const Mesh &mesh, const FindDisorientationParams &params={})
 returns all faces that are oriented inconsistently, based on number of ray intersections
template<typename T>
class MRMESH_CLASS Id (EdgeId, Id< EdgeTag >)(UndirectedEdgeId
class MRMESH_CLASS Id< UndirectedEdgeTag > (FaceId, Id< FaceTag >)(VertId
class MRMESH_CLASS Id< VertTag > (PixelId, Id< PixelTag >)(VoxelId
class MRMESH_CLASS Id< VoxelTag > (RegionId, Id< RegionTag >)(NodeId
class MRMESH_CLASS Id< NodeTag > (ObjId, Id< ObjTag >)(TextureId
class MRMESH_CLASS Id< TextureTag > (GraphVertId, Id< GraphVertTag >)(GraphEdgeId
template<typename T>
class MRMESH_CLASS NoInitId (NoInitNodeId, NoInitId< NodeTag >)) template< typename T
template<typename I>
class MRMESH_CLASS TypedBitSet (FaceBitSet, TypedBitSet< FaceId >)(VertBitSet
class MRMESH_CLASS TypedBitSet< VertId > (EdgeBitSet, TypedBitSet< EdgeId >)(UndirectedEdgeBitSet
class MRMESH_CLASS TypedBitSet< UndirectedEdgeId > (PixelBitSet, TypedBitSet< PixelId >)(VoxelBitSet
class MRMESH_CLASS TypedBitSet< VoxelId > (RegionBitSet, TypedBitSet< RegionId >)(NodeBitSet
class MRMESH_CLASS TypedBitSet< NodeId > (ObjBitSet, TypedBitSet< ObjId >)(TextureBitSet
class MRMESH_CLASS TypedBitSet< TextureId > (GraphVertBitSet, TypedBitSet< GraphVertId >)(GraphEdgeBitSet
template<typename T>
class MRMESH_CLASS SetBitIteratorT (SetBitIterator, SetBitIteratorT< BitSet >)(FaceSetBitIterator
class MRMESH_CLASS SetBitIteratorT< FaceBitSet > (VertSetBitIterator, SetBitIteratorT< VertBitSet >)(EdgeSetBitIterator
class MRMESH_CLASS SetBitIteratorT< EdgeBitSet > (UndirectedEdgeSetBitIterator, SetBitIteratorT< UndirectedEdgeBitSet >)) struct Color
MRMESH_CLASS Vector2< bool > (Vector2i, Vector2< int >)(Vector2i64
MRMESH_CLASS Vector2< Int64 > (Vector2f, Vector2< float >)(Vector2d
MRMESH_CLASS Vector3< bool > (Vector3i, Vector3< int >)(Vector3i64
MRMESH_CLASS Vector3< Int64 > (Vector3f, Vector3< float >)(Vector3d
 Vector4< bool > (Vector4i, Vector4< int >)(Vector4i64
 Vector4< Int64 > (Vector4f, Vector4< float >)(Vector4d
 Matrix2< bool > (Matrix2i, Matrix2< int >)(Matrix2i64
 Matrix2< Int64 > (Matrix2f, Matrix2< float >)(Matrix2d
 Matrix3< bool > (Matrix3i, Matrix3< int >)(Matrix3i64
 Matrix3< Int64 > (Matrix3f, Matrix3< float >)(Matrix3d
 Matrix4< bool > (Matrix4i, Matrix4< int >)(Matrix4i64
 Matrix4< Int64 > (Matrix4f, Matrix4< float >)(Matrix4d
 SymMatrix2< bool > (SymMatrix2i, SymMatrix2< int >)(SymMatrix2i64
 SymMatrix2< Int64 > (SymMatrix2f, SymMatrix2< float >)(SymMatrix2d
 SymMatrix3< bool > (SymMatrix3i, SymMatrix3< int >)(SymMatrix3i64
 SymMatrix3< Int64 > (SymMatrix3f, SymMatrix3< float >)(SymMatrix3d
 SymMatrix4< bool > (SymMatrix4i, SymMatrix4< int >)(SymMatrix4i64
 SymMatrix4< Int64 > (SymMatrix4f, SymMatrix4< float >)(SymMatrix4d
 AffineXf< Vector2< float > > (AffineXf2d, AffineXf< Vector2< double > >)(AffineXf3f
 AffineXf< Vector3< float > > (AffineXf3d, AffineXf< Vector3< double > >)) template< typename T > using AffineXf2
 RigidXf3< float > (RigidXf3d, RigidXf3< double >)) 1((template< typename T > struct)
 RigidScaleXf3< float > (RigidScaleXf3d, RigidScaleXf3< double >)) class PointToPointAligningTransform
 Sphere< Vector2< float > > (Sphere2d, Sphere< Vector2< double > >)(Sphere3f
 Sphere< Vector3< float > > (Sphere3d, Sphere< Vector3< double > >)) template< typename T > using Sphere2
 Line< Vector2< float > > (Line2d, Line< Vector2< double > >)(Line3f
 Line< Vector3< float > > (Line3d, Line< Vector3< double > >)) template< typename T > using Line2
 LineSegm< Vector2< float > > (LineSegm2d, LineSegm< Vector2< double > >)(LineSegm3f
 LineSegm< Vector3< float > > (LineSegm3d, LineSegm< Vector3< double > >)) template< typename T > using LineSegm2
 Parabola< float > (Parabolad, Parabola< double >)) 1((template< typename T > class)
 BestFitParabola< float > (BestFitParabolad, BestFitParabola< double >)) 1((template< typename T > class)
 Cylinder3< float > (Cylinder3d, Cylinder3< double >)) 1((template< typename T > class)
 Cone3< float > (Cone3d, Cone3< double >)) template< typename V > using Contour
 No canonical typedefs here, because those ultimately boil to std::vector, which isn't under our control.
 Plane3< float > (Plane3d, Plane3< double >)) 1((template< typename V > struct MRMESH_CLASS)
 Box< int > (Box1i64, Box< Int64 >)(Box1f
 Box< float > (Box1d, Box< double >)(Box2i
 Box< Vector2< int > > (Box2i64, Box< Vector2< Int64 > >)(Box2f
 Box< Vector2< float > > (Box2d, Box< Vector2< double > >)(Box3i
 Box< Vector3< int > > (Box3i64, Box< Vector3< Int64 > >)(Box3f
 Box< Vector3< float > > (Box3d, Box< Vector3< double > >)) using Box1ll
template<typename V>
struct MRMESH_CLASS Ball (Ball1f, Ball< float >)(Ball1d
struct MRMESH_CLASS Ball< double > (Ball2f, Ball< Vector2< float > >)(Ball2d
struct MRMESH_CLASS Ball< Vector2< double > > (Ball3f, Ball< Vector3< float > >)(Ball3d
template<typename V>
struct MRMESH_CLASS CubicBezierCurve (CubicBezierCurve2f, CubicBezierCurve< Vector2< float > >)(CubicBezierCurve2d
struct MRMESH_CLASS CubicBezierCurve< Vector2< double > > (CubicBezierCurve3f, CubicBezierCurve< Vector3< float > >)(CubicBezierCurve3d
 QuadraticForm< Vector2< float > > (QuadraticForm2d, QuadraticForm< Vector2< double > >)(QuadraticForm3f
 QuadraticForm< Vector3< float > > (QuadraticForm3d, QuadraticForm< Vector3< double > >)) template< typename T > using QuadraticForm2
 Quaternion< float > (Quaterniond, Quaternion< double >)) template< typename T > using Triangle3
 No canonical typedefs because std::array is not under our control.
 SegmPoint< float > (SegmPointd, SegmPoint< double >)) struct EdgePoint
 TriPoint< float > (TriPointd, TriPoint< double >)) struct PointOnFace
template<typename T, typename I>
class MRMESH_CLASS Vector (Edges, Vector< TwoVertIds, UndirectedEdgeId >)(Triangulation
 mapping from UndirectedEdgeId to its end vertices
class MRMESH_CLASS Vector< ThreeVertIds, FaceId > (TriCornerUVCoords, Vector< ThreeUVCoords, FaceId >)(Dipoles
 mapping from FaceId to a triple of UV-coordinates
class MRMESH_CLASS Vector< Dipole, NodeId > (FaceMap, Vector< FaceId, FaceId >)(VertMap
class MRMESH_CLASS Vector< VertId, VertId > (EdgeMap, Vector< EdgeId, EdgeId >)(UndirectedEdgeMap
class MRMESH_CLASS Vector< UndirectedEdgeId, UndirectedEdgeId > (ObjMap, Vector< ObjId, ObjId >)(WholeEdgeMap
 mapping of whole edges: map[e]->f, map[e.sym()]->f.sym(), where only map[e] for even edges is stored
class MRMESH_CLASS Vector< EdgeId, UndirectedEdgeId > (UndirectedEdge2RegionMap, Vector< RegionId, UndirectedEdgeId >)(Face2RegionMap
class MRMESH_CLASS Vector< RegionId, FaceId > (Vert2RegionMap, Vector< RegionId, VertId >)(VertCoords
class MRMESH_CLASS Vector< Vector3f, VertId > (VertCoords2, Vector< Vector2f, VertId >)(VertNormals
class MRMESH_CLASS Vector< Vector3f, VertId > (VertUVCoords, Vector< UVCoord, VertId >)(FaceNormals
class MRMESH_CLASS Vector< Vector3f, FaceId > (TexturePerFace, Vector< TextureId, FaceId >)(VertColors
class MRMESH_CLASS Vector< Color, VertId > (FaceColors, Vector< Color, FaceId >)(EdgeColors
class MRMESH_CLASS Vector< Color, EdgeId > (UndirectedEdgeColors, Vector< Color, UndirectedEdgeId >)(VertScalars
class MRMESH_CLASS Vector< float, VertId > (FaceScalars, Vector< float, FaceId >)(EdgeScalars
class MRMESH_CLASS Vector< float, EdgeId > (UndirectedEdgeScalars, Vector< float, UndirectedEdgeId >)) using VertPredicate
template<typename T>
bool contains (const std::function< bool(Id< T >)> &pred, Id< T > id)
template<typename T, typename I>
struct MRMESH_CLASS BMap (FaceBMap, BMap< FaceId, FaceId >)(VertBMap
struct MRMESH_CLASS BMap< VertId, VertId > (EdgeBMap, BMap< EdgeId, EdgeId >)(UndirectedEdgeBMap
struct MRMESH_CLASS BMap< UndirectedEdgeId, UndirectedEdgeId > (WholeEdgeBMap, BMap< EdgeId, UndirectedEdgeId >)) template< typename T
template<typename T>
struct MRMESH_CLASS MeshRegion (MeshPart, MeshRegion< FaceTag >)(MeshVertPart
 Polyline< Vector2f > (Polyline3, Polyline< Vector3f >)) 1((template< typename V > class MRMESH_CLASS)
 AABBTreePolyline< Vector2f > (AABBTreePolyline3, AABBTreePolyline< Vector3f >)) template< typename T > struct IntersectionPrecomputes
 PolylineProjectionResult< Vector2f > (PolylineProjectionResult3, PolylineProjectionResult< Vector3f >)) 1((template< typename V > struct)
 PolylineProjectionWithOffsetResult< Vector2f > (PolylineProjectionWithOffsetResult3, PolylineProjectionWithOffsetResult< Vector3f >)) class DistanceMap
template<typename Tag>
class MRMESH_CLASS ColorMapAggregator (VertColorMapAggregator, ColorMapAggregator< VertTag >)(UndirEdgeColorMapAggregator
class MRMESH_CLASS ColorMapAggregator< UndirectedEdgeTag > (FaceColorMapAggregator, ColorMapAggregator< FaceTag >)) template< typename T > class FewSmallest
template<typename T>
constexpr T sqr (T x) noexcept
 squared value
template<typename T>
constexpr int sgn (T x) noexcept
 sign of given value in { -1, 0, 1 }
template<typename T>
constexpr T distance (T x, T y) noexcept
 absolute difference between two value
template<typename T>
constexpr T distanceSq (T x, T y) noexcept
 squared difference between two value
template<typename V, typename T>
constexpr auto lerp (V v0, V v1, T t) noexcept
 Linear interpolation: returns v0 when t==0 and v1 when t==1.
template<class... Ts>
 overloaded (Ts...) -> overloaded< Ts... >
 explicit deduction guide (not needed as of C++20, but still needed in Clang)
MeshIntersectionResult rayMeshIntersect (const MeshPart &meshPart, const Line3f &line, float rayStart=0.0f, float rayEnd=FLT_MAX, const IntersectionPrecomputes< float > *prec=nullptr, bool closestIntersect=true, const FacePredicate &validFaces={})
MeshIntersectionResult rayMeshIntersect (const MeshPart &meshPart, const Line3d &line, double rayStart=0.0, double rayEnd=DBL_MAX, const IntersectionPrecomputes< double > *prec=nullptr, bool closestIntersect=true, const FacePredicate &validFaces={})
void multiRayMeshIntersect (const MeshPart &meshPart, const std::vector< Vector3f > &origins, const std::vector< Vector3f > &dirs, const MultiRayMeshIntersectResult &result, float rayStart=0.0f, float rayEnd=FLT_MAX, bool closestIntersect=true, const FacePredicate &validFaces={})
MultiMeshIntersectionResult rayMultiMeshAnyIntersect (const std::vector< Line3fMesh > &lineMeshes, float rayStart=0.0f, float rayEnd=FLT_MAX)
MultiMeshIntersectionResult rayMultiMeshAnyIntersect (const std::vector< Line3dMesh > &lineMeshes, double rayStart=0.0, double rayEnd=DBL_MAX)
 Same as rayMultiMeshAnyIntersectF, but use double precision.
void rayMeshIntersectAll (const MeshPart &meshPart, const Line3f &line, MeshIntersectionCallback callback, float rayStart=0.0f, float rayEnd=FLT_MAX, const IntersectionPrecomputes< float > *prec=nullptr)
void rayMeshIntersectAll (const MeshPart &meshPart, const Line3d &line, MeshIntersectionCallback callback, double rayStart=0.0, double rayEnd=DBL_MAX, const IntersectionPrecomputes< double > *prec=nullptr)
 Same as rayMeshIntersectAllF, but use double precision.
void planeMeshIntersect (const MeshPart &meshPart, const Plane3f &plane, FaceBitSet *fs, UndirectedEdgeBitSet *ues, VertBitSet *vs, std::vector< FaceId > *fsVec=nullptr)
void xyPlaneMeshIntersect (const MeshPart &meshPart, float zLevel, FaceBitSet *fs, UndirectedEdgeBitSet *ues, VertBitSet *vs, std::vector< FaceId > *fsVec=nullptr)
Expected< MeshloadMrmesh (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in internal MeshLib format
Expected< MeshloadMrmesh (std::istream &in, const MeshLoadSettings &settings={})
Expected< MeshloadOff (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in .OFF format
Expected< MeshloadOff (std::istream &in, const MeshLoadSettings &settings={})
 loads mesh from stream in .OFF format
Expected< MeshloadObj (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in .OBJ format
Expected< MeshloadObj (std::istream &in, const MeshLoadSettings &settings={})
Expected< MeshloadStl (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in any .STL format: both binary and ASCII
Expected< MeshloadStl (std::istream &in, const MeshLoadSettings &settings={})
Expected< MeshloadBinaryStl (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in binary .STL format
Expected< MeshloadBinaryStl (std::istream &in, const MeshLoadSettings &settings={})
Expected< MeshloadASCIIStl (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in textual .STL format
Expected< MeshloadASCIIStl (std::istream &in, const MeshLoadSettings &settings={})
 loads mesh from stream in textual .STL format
Expected< MeshloadPly (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in .PLY format;
Expected< MeshloadPly (std::istream &in, const MeshLoadSettings &settings={})
Expected< MeshloadDxf (const std::filesystem::path &path, const MeshLoadSettings &settings={})
 loads mesh from file in .DXF format;
Expected< MeshloadDxf (std::istream &in, const MeshLoadSettings &settings={})
 loads mesh from stream in .DXF format;
Expected< MeshloadMesh (const std::filesystem::path &file, const MeshLoadSettings &settings={})
 loads mesh from file in the format detected from file extension
Expected< MeshloadMesh (std::istream &in, const std::string &extension, const MeshLoadSettings &settings={})
Vector3f orgPnt (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 returns coordinates of the edge origin
Vector3f destPnt (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 returns coordinates of the edge destination
Vector3f edgeVector (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 returns vector equal to edge destination point minus edge origin point
LineSegm3f edgeSegment (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 returns line segment of given edge
Vector3f edgePoint (const MeshTopology &topology, const VertCoords &points, EdgeId e, float f)
 returns a point on the edge: origin point for f=0 and destination point for f=1
Vector3f edgePoint (const MeshTopology &topology, const VertCoords &points, const MeshEdgePoint &ep)
 computes coordinates of point given as edge and relative position on it
Vector3f edgeCenter (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
 computes the center of given edge
void getLeftTriPoints (const MeshTopology &topology, const VertCoords &points, EdgeId e, Vector3f &v0, Vector3f &v1, Vector3f &v2)
 returns three points of left face of e: v0 = orgPnt( e ), v1 = destPnt( e )
MR_BIND_IGNORE void getLeftTriPoints (const MeshTopology &topology, const VertCoords &points, EdgeId e, Vector3f(&v)[3])
Triangle3f getLeftTriPoints (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 returns three points of left face of e: res[0] = orgPnt( e ), res[1] = destPnt( e )
void getTriPoints (const MeshTopology &topology, const VertCoords &points, FaceId f, Vector3f &v0, Vector3f &v1, Vector3f &v2)
 returns three points of given face
MR_BIND_IGNORE void getTriPoints (const MeshTopology &topology, const VertCoords &points, FaceId f, Vector3f(&v)[3])
Triangle3f getTriPoints (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns three points of given face
Vector3f triPoint (const MeshTopology &topology, const VertCoords &points, const MeshTriPoint &p)
 computes coordinates of point given as face and barycentric representation
Vector3f triCenter (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns the centroid of given triangle
float triangleAspectRatio (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns aspect ratio of given mesh triangle equal to the ratio of the circum-radius to twice its in-radius
float circumcircleDiameterSq (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns squared circumcircle diameter of given mesh triangle
float circumcircleDiameter (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns circumcircle diameter of given mesh triangle
MeshTriPoint toTriPoint (const MeshTopology &topology, const VertCoords &points, FaceId f, const Vector3f &p)
 converts face id and 3d point into barycentric representation
MeshTriPoint toTriPoint (const MeshTopology &topology, const VertCoords &points, const PointOnFace &p)
 converts face id and 3d point into barycentric representation
MeshEdgePoint toEdgePoint (const MeshTopology &topology, const VertCoords &points, EdgeId e, const Vector3f &p)
 converts edge and 3d point into edge-point representation
VertId getClosestVertex (const MeshTopology &topology, const VertCoords &points, const PointOnFace &p)
 returns one of three face vertices, closest to given point
VertId getClosestVertex (const MeshTopology &topology, const VertCoords &points, const MeshTriPoint &p)
 returns one of three face vertices, closest to given point
UndirectedEdgeId getClosestEdge (const MeshTopology &topology, const VertCoords &points, const PointOnFace &p)
 returns one of three face edges, closest to given point
UndirectedEdgeId getClosestEdge (const MeshTopology &topology, const VertCoords &points, const MeshTriPoint &p)
 returns one of three face edges, closest to given point
float edgeLength (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
 returns Euclidean length of the edge
UndirectedEdgeScalars edgeLengths (const MeshTopology &topology, const VertCoords &points)
 computes and returns the lengths of all edges in the mesh
float edgeLengthSq (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
 returns squared Euclidean length of the edge (faster to compute than length)
Vector3f leftDirDblArea (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 computes directed double area of left triangular face of given edge
Vector3f dirDblArea (const MeshTopology &topology, const VertCoords &points, FaceId f)
 computes directed double area for a triangular face from its vertices
Vector< Vector3f, VertId > dirDblAreas (const MeshTopology &topology, const VertCoords &points, const VertBitSet *region=nullptr)
 computes and returns the directed double area for every (region) vertex in the mesh
float dblArea (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns twice the area of given face
float area (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns the area of given face
MR_BIND_IGNORE double area (const MeshTopology &topology, const VertCoords &points, const FaceBitSet &fs)
double area (const MeshTopology &topology, const VertCoords &points, const FaceBitSet *fs=nullptr)
 computes the area of given face-region (or whole mesh)
MR_BIND_IGNORE Vector3d dirArea (const MeshTopology &topology, const VertCoords &points, const FaceBitSet &fs)
Vector3d dirArea (const MeshTopology &topology, const VertCoords &points, const FaceBitSet *fs=nullptr)
 computes the sum of directed areas for faces from given region (or whole mesh)
MR_BIND_IGNORE double projArea (const MeshTopology &topology, const VertCoords &points, const Vector3f &dir, const FaceBitSet &fs)
double projArea (const MeshTopology &topology, const VertCoords &points, const Vector3f &dir, const FaceBitSet *fs=nullptr)
 computes the sum of absolute projected area of faces from given region (or whole mesh) as visible if look from given direction
double volume (const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region=nullptr)
double holePerimeter (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 computes the perimeter of the hole specified by one of its edges with no valid left face (left is hole)
Vector3d holeDirArea (const MeshTopology &topology, const VertCoords &points, EdgeId e)
Vector3f leftTangent (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 computes unit vector that is both orthogonal to given edge and to the normal of its left triangle, the vector is directed inside left triangle
Vector3f leftNormal (const MeshTopology &topology, const VertCoords &points, EdgeId e)
 computes triangular face normal from its vertices
Vector3f normal (const MeshTopology &topology, const VertCoords &points, FaceId f)
 computes triangular face normal from its vertices
Plane3f getPlane3f (const MeshTopology &topology, const VertCoords &points, FaceId f)
 returns the plane containing given triangular face with normal looking outwards
Plane3d getPlane3d (const MeshTopology &topology, const VertCoords &points, FaceId f)
Vector3f dirDblArea (const MeshTopology &topology, const VertCoords &points, VertId v)
 computes sum of directed double areas of all triangles around given vertex
float dblArea (const MeshTopology &topology, const VertCoords &points, VertId v)
 computes the length of summed directed double areas of all triangles around given vertex
Vector3f normal (const MeshTopology &topology, const VertCoords &points, VertId v)
 computes normal in a vertex using sum of directed areas of neighboring triangles
Vector3f normal (const MeshTopology &topology, const VertCoords &points, const MeshTriPoint &p)
Vector3f pseudonormal (const MeshTopology &topology, const VertCoords &points, VertId v, const FaceBitSet *region=nullptr)
Vector3f pseudonormal (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e, const FaceBitSet *region=nullptr)
 computes normalized half sum of face normals sharing given edge (only (region) faces will be considered);
Vector3f pseudonormal (const MeshTopology &topology, const VertCoords &points, const MeshTriPoint &p, const FaceBitSet *region=nullptr)
float sumAngles (const MeshTopology &topology, const VertCoords &points, VertId v, bool *outBoundaryVert=nullptr)
 computes the sum of triangle angles at given vertex; optionally returns whether the vertex is on boundary
Expected< VertBitSet > findSpikeVertices (const MeshTopology &topology, const VertCoords &points, float minSumAngle, const VertBitSet *region=nullptr, const ProgressCallback &cb={})
 returns vertices where the sum of triangle angles is below given threshold
float dihedralAngleSin (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
float dihedralAngleCos (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
float dihedralAngle (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
float discreteMeanCurvature (const MeshTopology &topology, const VertCoords &points, VertId v)
float discreteMeanCurvature (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId e)
float discreteGaussianCurvature (const MeshTopology &topology, const VertCoords &points, VertId v, bool *outBoundaryVert=nullptr)
UndirectedEdgeBitSet findCreaseEdges (const MeshTopology &topology, const VertCoords &points, float angleFromPlanar)
 finds all mesh edges where dihedral angle is distinct from planar PI angle on at least given value
float leftCotan (const MeshTopology &topology, const VertCoords &points, EdgeId e)
float cotan (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeId ue)
QuadraticForm3f quadraticForm (const MeshTopology &topology, const VertCoords &points, VertId v, bool angleWeigted, const FaceBitSet *region=nullptr, const UndirectedEdgeBitSet *creases=nullptr)
Box3f computeBoundingBox (const MeshTopology &topology, const VertCoords &points, const FaceBitSet *region, const AffineXf3f *toWorld=nullptr)
float averageEdgeLength (const MeshTopology &topology, const VertCoords &points)
 computes average length of an edge in the mesh given by (topology, points)
Vector3f findCenterFromPoints (const MeshTopology &topology, const VertCoords &points)
 computes average position of all valid mesh vertices
Vector3f findCenterFromFaces (const MeshTopology &topology, const VertCoords &points)
 computes center of mass considering that density of all triangles is the same
Vector3f findCenterFromBBox (const MeshTopology &topology, const VertCoords &points)
 computes bounding box and returns its center
MeshMeshDistanceResult findDistance (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr, float upDistLimitSq=FLT_MAX)
 computes minimal distance between two meshes or two mesh regions
MeshMeshSignedDistanceResult findSignedDistance (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr, float upDistLimitSq=FLT_MAX)
 computes minimal distance between two meshes
MeshMeshCollisionStatus findCollisionStatus (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr)
 finds if two meshes are touching, colliding or inside each other
MeshMeshCollisionStatus findCollisionStatus (const MeshPart &a, const MeshPart &b, const MeshMeshDistanceResult &distRes, const AffineXf3f *rigidB2A=nullptr, std::vector< FaceFace > *collisions=nullptr)
 finds if two meshes are touching, colliding or inside each other
float findMaxDistanceSqOneWay (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr, float maxDistanceSq=FLT_MAX)
 returns the maximum of the squared distances from each B-mesh vertex to A-mesh
float findMaxDistanceSq (const MeshPart &a, const MeshPart &b, const AffineXf3f *rigidB2A=nullptr, float maxDistanceSq=FLT_MAX)
 returns the squared Hausdorff distance between two meshes, that is the maximum of squared distances from each mesh vertex to the other mesh (in both directions)
double calcCombinedFillMetric (const Mesh &mesh, const FaceBitSet &filledRegion, const FillHoleMetric &metric)
 Computes combined metric after filling a hole.
FillHoleMetric getCircumscribedMetric (const Mesh &mesh)
FillHoleMetric getPlaneFillMetric (const Mesh &mesh, EdgeId e)
FillHoleMetric getPlaneNormalizedFillMetric (const Mesh &mesh, EdgeId e)
FillHoleMetric getComplexStitchMetric (const Mesh &mesh)
FillHoleMetric getEdgeLengthFillMetric (const Mesh &mesh)
 Simple metric minimizing the sum of all edge lengths.
FillHoleMetric getEdgeLengthStitchMetric (const Mesh &mesh)
FillHoleMetric getVerticalStitchMetric (const Mesh &mesh, const Vector3f &upDir)
FillHoleMetric getVerticalStitchMetricEdgeBased (const Mesh &mesh, const Vector3f &upDir)
FillHoleMetric getComplexFillMetric (const Mesh &mesh, EdgeId e)
FillHoleMetric getParallelPlaneFillMetric (const Mesh &mesh, EdgeId e, const Plane3f *plane=nullptr)
 This metric minimizes summary projection of new edges to plane normal, (try do produce edges parallel to plane)
FillHoleMetric getMaxDihedralAngleMetric (const Mesh &mesh)
FillHoleMetric getUniversalMetric (const Mesh &mesh)
FillHoleMetric getMinTriAngleMetric (const Mesh &mesh)
 This metric maximizes the minimal angle among all faces in the triangulation.
FillHoleMetric getMinAreaMetric (const Mesh &mesh)
FaceNormals computePerFaceNormals (const Mesh &mesh)
 returns a vector with face-normal in every element for valid mesh faces
void computePerFaceNormals4 (const Mesh &mesh, Vector4f *faceNormals, size_t size)
 fills buffer with face-normals as Vector4f for valid mesh faces
VertNormals computePerVertNormals (const Mesh &mesh)
 returns a vector with vertex normals in every element for valid mesh vertices
VertNormals computePerVertPseudoNormals (const Mesh &mesh)
MeshNormals computeMeshNormals (const Mesh &mesh)
 computes both per-face and per-vertex normals more efficiently then just calling both previous functions
Vector< TriangleCornerNormals, FaceId > computePerCornerNormals (const Mesh &mesh, const UndirectedEdgeBitSet *creases)
std::optional< MeshOrPointsgetMeshOrPoints (const Object *obj)
 constructs MeshOrPoints from ObjectMesh or ObjectPoints, otherwise returns nullopt
std::optional< MeshOrPointsXfgetMeshOrPointsXf (const Object *obj)
void projectOnAll (const Vector3f &pt, const AABBTreeObjects &tree, float upDistLimitSq, const ProjectOnAllCallback &callback, ObjId skipObjId={})
 finds closest point on every object within given distance
MeshOrPoints::ProjectionResult projectWorldPointOntoObject (const Vector3f &p, const Object &obj)
 Projects a point onto an object, in world space. Returns .valid() == false if this object type isn't projectable onto.
MeshOrPoints::ProjectionResult projectWorldPointOntoObjectsRecursive (const Vector3f &p, const Object *root=nullptr, std::function< bool(const Object &)> projectPred=nullptr, std::function< bool(const Object &)> recursePred=nullptr)
Expected< std::vector< FaceBitSet > > findOverhangs (const Mesh &mesh, const FindOverhangsSettings &settings)
 Find face regions that might create overhangs.
FaceBitSet patchMesh (Mesh &mesh, const FaceBitSet &patchBS, const FillHoleNicelySettings &settings={})
MeshProjectionTransforms createProjectionTransforms (AffineXf3f &storageXf, const AffineXf3f *pointXf, const AffineXf3f *treeXf)
 Creates structure with simplified transforms for projection functions, with rigidXfPoint applied to point, and nonRigidXfTree applied to tree.
MeshProjectionResult findProjection (const Vector3f &pt, const MeshPart &mp, float upDistLimitSq=FLT_MAX, const AffineXf3f *xf=nullptr, float loDistLimitSq=0, const FacePredicate &validFaces={}, const std::function< bool(const MeshProjectionResult &)> &validProjections={})
 computes the closest point on mesh (or its region) to given point
MeshProjectionResult findProjectionSubtree (const Vector3f &pt, const MeshPart &mp, const AABBTree &tree, float upDistLimitSq=FLT_MAX, const AffineXf3f *xf=nullptr, float loDistLimitSq=0, const FacePredicate &validFaces={}, const std::function< bool(const MeshProjectionResult &)> &validProjections={})
 computes the closest point on mesh (or its region) to given point
void findBoxedTrisInBall (const MeshPart &mp, Ball3f ball, const FoundBoxedTriCallback &foundCallback)
void findTrisInBall (const MeshPart &mp, const Ball3f &ball, const FoundTriCallback &foundCallback, const FacePredicate &validFaces={})
std::optional< SignedDistanceToMeshResultfindSignedDistance (const Vector3f &pt, const MeshPart &mp, float upDistLimitSq=FLT_MAX, float loDistLimitSq=0)
 computes the closest point on mesh (or its region) to given point, and finds the distance with sign to it (positive - outside, negative - inside the mesh)
bool relax (Mesh &mesh, const MeshRelaxParams &params={}, const ProgressCallback &cb={})
bool relax (const MeshTopology &topology, VertCoords &points, const MeshRelaxParams &params={}, const ProgressCallback &cb={})
Vector3f vertexPosEqualNeiAreas (const Mesh &mesh, VertId v, bool noShrinkage)
Vector3f vertexPosEqualNeiAreas (const MeshTopology &topology, const VertCoords &points, VertId v, bool noShrinkage)
bool equalizeTriAreas (Mesh &mesh, const MeshEqualizeTriAreasParams &params={}, const ProgressCallback &cb={})
bool equalizeTriAreas (const MeshTopology &topology, VertCoords &points, const MeshEqualizeTriAreasParams &params={}, const ProgressCallback &cb={})
bool relaxKeepVolume (Mesh &mesh, const MeshRelaxParams &params={}, const ProgressCallback &cb={})
bool relaxKeepVolume (const MeshTopology &topology, VertCoords &points, const MeshRelaxParams &params={}, const ProgressCallback &cb={})
bool relaxApprox (Mesh &mesh, const MeshApproxRelaxParams &params={}, const ProgressCallback &cb={})
bool relaxApprox (const MeshTopology &topology, VertCoords &points, const MeshApproxRelaxParams &params={}, const ProgressCallback &cb={})
void removeSpikes (Mesh &mesh, int maxIterations, float minSumAngle, const VertBitSet *region=nullptr)
 applies at most given number of relaxation iterations the spikes detected by given threshold
void removeSpikes (const MeshTopology &topology, VertCoords &points, int maxIterations, float minSumAngle, const VertBitSet *region=nullptr)
void smoothRegionBoundary (Mesh &mesh, const FaceBitSet &regionFaces, int numIters=4)
void hardSmoothTetrahedrons (Mesh &mesh, const VertBitSet *region=nullptr)
 move all region vertices with exactly three neighbor vertices in the center of the neighbors
void hardSmoothTetrahedrons (const MeshTopology &topology, VertCoords &points, const VertBitSet *region=nullptr)
void replicateZ (Mesh &m, const Mesh &target)
 adjusts z-coordinates of (m) vertices to make adjusted (m) similar to (target)
int subdivideMesh (Mesh &mesh, const SubdivideSettings &settings={})
int subdivideMesh (ObjectMeshData &data, const SubdivideSettings &settings)
Expected< MeshcopySubdividePackMesh (const MeshPart &mp, float voxelSize, const ProgressCallback &cb={})
ObjectMeshData makeSubdividedObjectMeshData (const ObjectMesh &obj, const SubdivideSettings &settings)
 returns the data of subdivided mesh given ObjectMesh (which remains unchanged) and subdivision parameters
template<typename T>
auto onEdgeSplitVertAttribute (const Mesh &mesh, Vector< T, VertId > &data)
template<typename T>
auto onEdgeSplitFaceAttribute (const Mesh &mesh, Vector< T, FaceId > &data)
OnEdgeSplit meshOnEdgeSplitAttribute (const Mesh &mesh, const MeshAttributesToUpdate &params)
OnEdgeSplit meshOnEdgeSplitVertAttribute (const Mesh &mesh, const MeshAttributesToUpdate &params)
OnEdgeSplit meshOnEdgeSplitFaceAttribute (const Mesh &mesh, const MeshAttributesToUpdate &params)
std::optional< VertScalars > computeRayThicknessAtVertices (const Mesh &mesh, const ProgressCallback &progress={})
 returns the distance from each vertex along minus normal to the nearest mesh intersection (or FLT_MAX if no intersection found)
MR_BIND_IGNORE VertScalars computeThicknessAtVertices (const Mesh &mesh)
MeshIntersectionResult rayInsideIntersect (const Mesh &mesh, const MeshPoint &m, float rayEnd=FLT_MAX)
 returns the nearest intersection between the mesh and the ray from given point along minus normal (inside the mesh)
MeshIntersectionResult rayInsideIntersect (const Mesh &mesh, VertId v, float rayEnd=FLT_MAX)
InSphere findInSphere (const Mesh &mesh, const MeshPoint &m, const InSphereSearchSettings &settings)
 finds maximal sphere inscribed in the mesh touching point (p) with center along the normal at (p)
InSphere findInSphere (const Mesh &mesh, VertId v, const InSphereSearchSettings &settings)
std::optional< VertScalars > computeInSphereThicknessAtVertices (const Mesh &mesh, const InSphereSearchSettings &settings, const ProgressCallback &progress={})
 returns the thickness at each vertex as the diameter of the maximal inscribed sphere
PointCloud meshToPointCloud (const Mesh &mesh, bool saveNormals=true, const VertBitSet *verts=nullptr)
template<typename T, typename I>
Vector< T, IrearrangeVectorByMap (const Vector< T, I > &oldVector, const BMap< I, I > &map)
 rearrange vector values by map (old.id -> new.id)
FaceBitSet subdivideWithPlane (Mesh &mesh, const Plane3f &plane, FaceHashMap *new2Old=nullptr, float eps=0, std::function< void(EdgeId, EdgeId, float)> onEdgeSplitCallback=nullptr)
MR_BIND_IGNORE void trimWithPlane (Mesh &mesh, const Plane3f &plane, UndirectedEdgeBitSet *outCutEdges=nullptr, FaceHashMap *new2Old=nullptr, float eps=0, std::function< void(EdgeId, EdgeId, float)> onEdgeSplitCallback=nullptr)
 trim mesh by plane
MR_BIND_IGNORE void trimWithPlane (Mesh &mesh, const Plane3f &plane, std::vector< EdgeLoop > *outCutContours, FaceHashMap *new2Old=nullptr, float eps=0, std::function< void(EdgeId, EdgeId, float)> onEdgeSplitCallback=nullptr)
 trim mesh by plane
void trimWithPlane (Mesh &mesh, const TrimWithPlaneParams &params, const TrimOptionalOutput &optOut={})
 trim mesh by plane
Expected< LoadedObjectfromSceneMison (const std::filesystem::path &path, const ProgressCallback &callback={})
Expected< LoadedObjectfromSceneMison (std::istream &in, const ProgressCallback &callback={})
Mesh makeMovementBuildBody (const Contours3f &body, const Contours3f &trajectory, const MovementBuildBodyParams &params={})
void updateGroupPairs (ICPGroupPairs &pairs, const ICPObjects &objs, ICPGroupProjector srcProjector, ICPGroupProjector tgtProjector, float cosThreshold, float distThresholdSq, bool mutualClosest)
 in each pair updates the target data and performs basic filtering (activation)
void denoiseNormals (const Mesh &mesh, FaceNormals &normals, const Vector< float, UndirectedEdgeId > &v, float gamma)
void updateIndicator (const Mesh &mesh, Vector< float, UndirectedEdgeId > &v, const FaceNormals &normals, float beta, float gamma)
void updateIndicatorFast (const MeshTopology &topology, Vector< float, UndirectedEdgeId > &v, const FaceNormals &normals, float beta, float gamma)
Expected< void > meshDenoiseViaNormals (Mesh &mesh, const DenoiseViaNormalsSettings &settings={})
std::string_view toString (DimensionsVisualizePropertyType value)
std::shared_ptr< ObjectLinesmerge (const std::vector< std::shared_ptr< ObjectLines > > &objsLines)
 constructs new ObjectLines containing the union of valid data from all input objects
std::shared_ptr< ObjectLinescloneRegion (const std::shared_ptr< ObjectLines > &objLines, const UndirectedEdgeBitSet &region)
 constructs new ObjectLines containing the region of data from input object
std::shared_ptr< ObjectMeshmerge (const std::vector< std::shared_ptr< ObjectMesh > > &objsMesh, const ObjectMeshMergeOptions &options={})
 constructs new ObjectMesh containing the union of valid data from all input objects
std::shared_ptr< ObjectMeshcloneRegion (const std::shared_ptr< ObjectMesh > &objMesh, const FaceBitSet &region, bool copyTexture=true)
UndirectedEdgeBitSet edgesBetweenDifferentColors (const MeshTopology &topology, const FaceColors &colors)
 return all edges separating faces with different colors
const std::string & defaultSerializeMeshFormat ()
void setDefaultSerializeMeshFormat (std::string newFormat)
std::shared_ptr< ObjectPointsmerge (const std::vector< std::shared_ptr< ObjectPoints > > &objsPoints)
 constructs new ObjectPoints containing the union of valid points from all input objects
std::shared_ptr< ObjectPointscloneRegion (const std::shared_ptr< ObjectPoints > &objPoints, const VertBitSet &region)
std::shared_ptr< ObjectPointspack (const ObjectPoints &pts, Reorder reorder, VertBitSet *newValidVerts=nullptr, const ProgressCallback &cb={})
const std::string & defaultSerializePointsFormat ()
void setDefaultSerializePointsFormat (std::string newFormat)
bool objectHasSelectableChildren (const MR::Object &object, bool recurse=false)
Expected< void > serializeObjectTree (const Object &object, const std::filesystem::path &path, FolderCallback preCompress, const SceneSave::Settings &settings={})
 saves object subtree in given scene file (zip/mru)
Expected< void > serializeObjectTree (const Object &object, const std::filesystem::path &path, const SceneSave::Settings &settings={})
Contours2f offsetContours (const Contours2f &contours, float offset, const OffsetContoursParams &params={})
 offsets 2d contours in plane
Contours2f offsetContours (const Contours2f &contours, ContoursVariableOffset offset, const OffsetContoursParams &params={})
 offsets 2d contours in plane
Contours3f offsetContours (const Contours3f &contours, float offset, const OffsetContoursParams &params={}, const OffsetContoursRestoreZParams &zParmas={})
 offsets 3d contours in XY plane
Contours3f offsetContours (const Contours3f &contours, ContoursVariableOffset offset, const OffsetContoursParams &params={}, const OffsetContoursRestoreZParams &zParmas={})
 offsets 3d contours in XY plane
bool offsetVerts (Mesh &mesh, const VertMetric &offset, const ProgressCallback &cb={})
Mesh makeThickMesh (const Mesh &m, const ThickenParams &params)
bool zCompensate (Mesh &mesh, const ZCompensateParams &params)
std::optional< VertScalars > findZcompensationShifts (const Mesh &mesh, const ZCompensateParams &params)
 finds the shift along z-axis for each vertex without modifying the mesh
std::optional< VertCoords > findZcompensatedPositions (const Mesh &mesh, const ZCompensateParams &params)
 finds vertices positions of the mesh after z-compensation without modifying the mesh
void subdivideLoneContours (Mesh &mesh, const OneMeshContours &contours, FaceHashMap *new2oldMap=nullptr)
void getOneMeshIntersectionContours (const Mesh &meshA, const Mesh &meshB, const ContinuousContours &contours, OneMeshContours *outA, OneMeshContours *outB, const CoordinateConverters &converters, const AffineXf3f *rigidB2A=nullptr, Contours3f *outPtsA=nullptr, bool addSelfyTerminalVerts=false)
 if true, then open self-intersection contours will be prolonged to terminal vertices
OneMeshContours getOneMeshSelfIntersectionContours (const Mesh &mesh, const ContinuousContours &contours, const CoordinateConverters &converters, const AffineXf3f *rigidB2A=nullptr)
Contours3f extractMeshContours (const OneMeshContours &meshContours)
 Converts OneMeshContours contours representation to Contours3f: set of coordinates.
MR_BIND_IGNORE Expected< OneMeshContourconvertMeshTriPointsToMeshContour (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, MeshTriPointsConnector connectorFn, std::vector< int > *pivotIndices=nullptr)
 Makes continuous contour by mesh tri points, if first and last meshTriPoint is the same, makes closed contour.
Expected< OneMeshContourconvertMeshTriPointsToMeshContour (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, SearchPathSettings searchSettings={}, std::vector< int > *pivotIndices=nullptr)
 Makes continuous contour by mesh tri points, if first and last meshTriPoint is the same, makes closed contour.
Expected< OneMeshContourconvertMeshTriPointsToClosedContour (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, SearchPathSettings searchSettings={}, std::vector< int > *pivotIndices=nullptr)
 Makes closed continuous contour by mesh tri points, note that first and last meshTriPoint should not be same.
OneMeshContour convertSurfacePathWithEndsToMeshContour (const Mesh &mesh, const MeshTriPoint &start, const SurfacePath &surfacePath, const MeshTriPoint &end)
 Converts SurfacePath to OneMeshContours.
OneMeshContours convertSurfacePathsToMeshContours (const Mesh &mesh, const std::vector< SurfacePath > &surfacePaths)
 Converts SurfacePaths to OneMeshContours.
FaceBMap getOptimalFaceOrdering (const Mesh &mesh)
VertBMap getVertexOrdering (const FaceBMap &faceMap, const MeshTopology &topology)
UndirectedEdgeBMap getEdgeOrdering (const FaceBMap &faceMap, const MeshTopology &topology)
Expected< VertBitSet > findOutliers (const PointCloud &pc, const FindOutliersParams &params)
 Finding outlier points.
Expected< FaceBitSet > findOverlappingTris (const MeshPart &mp, const FindOverlappingSettings &settings)
 finds all triangles that have oppositely oriented close triangle in the mesh
void parallelFor (size_t begin, size_t end, FunctionRef< void(size_t)> f)
void parallelFor (size_t begin, size_t end, FunctionRef< void(size_t, void *)> f, FunctionRef< void *()> ctx)
bool parallelFor (size_t begin, size_t end, FunctionRef< void(size_t, void *)> f, FunctionRef< void *()> ctx, ProgressCallback cb, size_t reportProgressEvery=1024)
template<typename I, typename F, typename ... Cb>
auto ParallelFor (I begin, I end, F &&f, Cb &&... cb)
template<typename I, typename L, typename F, typename ... Cb>
auto ParallelFor (I begin, I end, tbb::enumerable_thread_specific< L > &e, F &&f, Cb &&... cb)
template<typename T, typename ... F>
auto ParallelFor (const std::vector< T > &v, F &&... f)
template<typename T, typename I, typename ... F>
auto ParallelFor (const Vector< T, I > &v, F &&... f)
template<typename T, typename I, typename ... F>
auto ParallelFor (const Buffer< T, I > &buf, F &&... f)
template<typename T>
MinMaxArg< T, size_t > parallelMinMaxArg (const T *data, size_t size, const BitSet *region=nullptr, const T *topExcluding=nullptr)
template<typename T, typename Itag>
MinMaxArg< T, Id< Itag > > parallelMinMaxArg (const Vector< T, Id< Itag > > &vec, const TaggedBitSet< Itag > *region=nullptr, const T *topExcluding=nullptr)
template<typename T>
std::pair< T, T > parallelMinMax (const T *data, size_t size, const BitSet *region=nullptr, const T *topExcluding=nullptr)
template<typename T>
std::pair< T, T > parallelMinMax (const std::vector< T > &vec, const BitSet *region=nullptr, const T *topExcluding=nullptr)
template<typename T, typename Itag>
std::pair< T, T > parallelMinMax (const Vector< T, Id< Itag > > &vec, const TaggedBitSet< Itag > *region=nullptr, const T *topExcluding=nullptr)
Expected< VertCoords > loadPly (std::istream &in, const PlyLoadParams &params)
float findMaxDistanceSqOneWay (const PointCloud &a, const PointCloud &b, const AffineXf3f *rigidB2A=nullptr, float maxDistanceSq=FLT_MAX)
 returns the maximum of the squared distances from each B-point to A-cloud
float findMaxDistanceSq (const PointCloud &a, const PointCloud &b, const AffineXf3f *rigidB2A=nullptr, float maxDistanceSq=FLT_MAX)
 returns the squared Hausdorff distance between two point clouds, that is the maximum of squared distances from each point to the other cloud (in both directions)
VertBitSet findHalfSpacePoints (const PointCloud &pc, const Plane3f &plane)
PointCloud divideWithPlane (const PointCloud &points, const Plane3f &plane, const DividePointCloudOptionalOutput &optOut={})
std::optional< VertNormals > makeUnorientedNormals (const PointCloud &pointCloud, float radius, const ProgressCallback &progress={}, OrientNormals orient=OrientNormals::Smart)
 Makes normals for valid points of given point cloud by directing them along the normal of best plane through the neighbours.
std::optional< VertNormals > makeUnorientedNormals (const PointCloud &pointCloud, const AllLocalTriangulations &triangs, const ProgressCallback &progress={}, OrientNormals orient=OrientNormals::Smart)
 Makes normals for valid points of given point cloud by averaging neighbor triangle normals weighted by triangle's angle \triangs triangulation neighbours of each point.
std::optional< VertNormals > makeUnorientedNormals (const PointCloud &pointCloud, const Buffer< VertId > &closeVerts, int numNei, const ProgressCallback &progress={}, OrientNormals orient=OrientNormals::Smart)
 Makes normals for valid points of given point cloud by directing them along the normal of best plane through the neighbours.
bool orientNormals (const PointCloud &pointCloud, VertNormals &normals, float radius, const ProgressCallback &progress={})
 Select orientation of given normals to make directions of close points consistent;.
bool orientNormals (const PointCloud &pointCloud, VertNormals &normals, const AllLocalTriangulations &triangs, const ProgressCallback &progress={})
 Select orientation of given normals to make directions of close points consistent;.
bool orientNormals (const PointCloud &pointCloud, VertNormals &normals, const Buffer< VertId > &closeVerts, int numNei, const ProgressCallback &progress={})
 Select orientation of given normals to make directions of close points consistent;.
std::optional< VertNormals > makeOrientedNormals (const PointCloud &pointCloud, float radius, const ProgressCallback &progress={})
 Makes normals for valid points of given point cloud; directions of close points are selected to be consistent;.
std::optional< VertNormals > makeOrientedNormals (const PointCloud &pointCloud, AllLocalTriangulations &triangs, const ProgressCallback &progress={})
 Makes normals for valid points of given point cloud; directions of close points are selected to be consistent; \triangs triangulation neighbours of each point, which are oriented during the call as well.
VertNormals makeNormals (const PointCloud &pointCloud, int avgNeighborhoodSize=48)
 Makes consistent normals for valid points of given point cloud.
float findAvgPointsRadius (const PointCloud &pointCloud, int avgPoints, int samples=1024)
 Finds the radius of ball, so on average that ball contained avgPoints excluding the central point.
bool dilateRegion (const PointCloud &pointCloud, VertBitSet &region, float dilation, ProgressCallback cb={}, const AffineXf3f *xf=nullptr)
 expands the region on given euclidian distance. returns false if callback also returns false
bool erodeRegion (const PointCloud &pointCloud, VertBitSet &region, float erosion, ProgressCallback cb={}, const AffineXf3f *xf=nullptr)
 shrinks the region on given euclidian distance. returns false if callback also returns false
bool relax (PointCloud &pointCloud, const PointCloudRelaxParams &params={}, ProgressCallback cb={})
bool relaxKeepVolume (PointCloud &pointCloud, const PointCloudRelaxParams &params={}, ProgressCallback cb={})
bool relaxApprox (PointCloud &pointCloud, const PointCloudApproxRelaxParams &params={}, ProgressCallback cb={})
std::optional< MeshtriangulatePointCloud (const PointCloud &pointCloud, const TriangulationParameters &params={}, const ProgressCallback &progressCb={})
 Creates mesh from given point cloud according params Returns empty optional if was interrupted by progress bar.
bool fillHolesWithExtraPoints (Mesh &mesh, PointCloud &extraPoints, const FillHolesWithExtraPointsParams &params={}, const ProgressCallback &progressCb={})
PickedPoint pointOnObjectToPickedPoint (const VisualObject *object, const PointOnObject &pos)
 Converts PointOnObject coordinates depending on the object type to the PickedPoint variant.
std::optional< Vector3f > getPickedPointPosition (const VisualObject &object, const PickedPoint &point)
MR_BIND_IGNORE Vector3f pickedPointToVector3 (const VisualObject *object, const PickedPoint &point)
 Converts pickedPoint into local coordinates of its object.
MR_BIND_IGNORE bool isPickedPointValid (const VisualObject *object, const PickedPoint &point)
 Checks that the picked point presents in the object's topology.
std::optional< Vector3f > getPickedPointNormal (const VisualObject &object, const PickedPoint &point, bool interpolated=true)
void findPointsInBall (const PointCloud &pointCloud, const Ball3f &ball, const OnPointInBallFound &foundCallback, const AffineXf3f *xf=nullptr)
MR_BIND_IGNORE void findPointsInBall (const PointCloud &pointCloud, const Ball3f &ball, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
void findPointsInBall (const Mesh &mesh, const Ball3f &ball, const OnPointInBallFound &foundCallback, const AffineXf3f *xf=nullptr)
MR_BIND_IGNORE void findPointsInBall (const Mesh &mesh, const Ball3f &ball, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
void findPointsInBall (const AABBTreePoints &tree, Ball3f ball, const OnPointInBallFound &foundCallback, const AffineXf3f *xf=nullptr)
MR_BIND_IGNORE void findPointsInBall (const AABBTreePoints &tree, const Ball3f &ball, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
void findPointsInBox (const PointCloud &pointCloud, const Box3f &box, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
void findPointsInBox (const Mesh &mesh, const Box3f &box, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
void findPointsInBox (const AABBTreePoints &tree, const Box3f &box, const FoundPointCallback &foundCallback, const AffineXf3f *xf=nullptr)
PointsProjectionResult findProjectionOnPoints (const Vector3f &pt, const PointCloudPart &pcp, float upDistLimitSq=FLT_MAX, const AffineXf3f *xf=nullptr, float loDistLimitSq=0, VertPredicate skipCb={})
 computes the closest point on point cloud to given point
PointsProjectionResult findProjectionOnPoints (const Vector3f &pt, const AABBTreePoints &tree, float upDistLimitSq=FLT_MAX, const AffineXf3f *xf=nullptr, float loDistLimitSq=0, const VertBitSet *region=nullptr, VertPredicate skipCb={})
 computes the closest point on AABBTreePoints to given point
void findFewClosestPoints (const Vector3f &pt, const PointCloud &pc, FewSmallest< PointsProjectionResult > &res, float upDistLimitSq=FLT_MAX, const AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 finds a number of the closest points in the cloud (as configured in
Buffer< VertId > findNClosestPointsPerPoint (const PointCloud &pc, int numNei, const ProgressCallback &progress={})
 finds given number of closest points (excluding itself) to each valid point in the cloud;
VertPair findTwoClosestPoints (const PointCloud &pc, const ProgressCallback &progress={})
 finds two closest points (first id < second id) in whole point cloud
VertScalars findSignedDistances (const Mesh &refMesh, const VertCoords &testPoints, const VertBitSet *validTestPoints={}, const MeshProjectionParameters &params={}, IPointsToMeshProjector *projector={})
 if projector is not given then CPU's computations will be used
VertScalars findSignedDistances (const Mesh &refMesh, const Mesh &mesh, const MeshProjectionParameters &params={}, IPointsToMeshProjector *projector={})
 if projector is not given then CPU's computations will be used
std::vector< EdgePointPairfindCollidingEdgePairs (const Polyline2 &a, const Polyline2 &b, const AffineXf2f *rigidB2A=nullptr, bool firstIntersectionOnly=false)
 finds all pairs of colliding edges from two 2d polylines
std::vector< UndirectedEdgeUndirectedEdgefindCollidingEdges (const Polyline2 &a, const Polyline2 &b, const AffineXf2f *rigidB2A=nullptr, bool firstIntersectionOnly=false)
 finds all pairs of colliding edges from two 2d polylines
std::pair< UndirectedEdgeBitSet, UndirectedEdgeBitSet > findCollidingEdgesBitsets (const Polyline2 &a, const Polyline2 &b, const AffineXf2f *rigidB2A=nullptr)
 finds bitset per polyline with colliding edges
std::vector< EdgePointPairfindSelfCollidingEdgePairs (const Polyline2 &polyline)
 finds all pairs of colliding edges from 2d polyline
std::vector< UndirectedEdgeUndirectedEdgefindSelfCollidingEdges (const Polyline2 &polyline)
 finds all pairs of colliding edges from 2d polyline
UndirectedEdgeBitSet findSelfCollidingEdgesBS (const Polyline2 &polyline)
 finds the union of all self-intersecting edges
bool isInside (const Polyline2 &a, const Polyline2 &b, const AffineXf2f *rigidB2A=nullptr)
 checks that arbitrary 2d polyline A is inside of closed 2d polyline B
bool isPointInsidePolyline (const Polyline2 &polyline, const Vector2f &point)
 detect if given point is inside polyline, by counting ray intersections
std::optional< PolylineIntersectionResult2rayPolylineIntersect (const Polyline2 &polyline, const Line2f &line, float rayStart=0, float rayEnd=FLT_MAX, const IntersectionPrecomputes2< float > *prec=nullptr, bool closestIntersect=true)
std::optional< PolylineIntersectionResult2rayPolylineIntersect (const Polyline2 &polyline, const Line2d &line, double rayStart=0, double rayEnd=DBL_MAX, const IntersectionPrecomputes2< double > *prec=nullptr, bool closestIntersect=true)
void rayPolylineIntersectAll (const Polyline2 &polyline, const Line2f &line, const PolylineIntersectionCallback2f &callback, float rayStart=0.0f, float rayEnd=FLT_MAX, const IntersectionPrecomputes2< float > *prec=nullptr)
void rayPolylineIntersectAll (const Polyline2 &polyline, const Line2d &line, const PolylineIntersectionCallback2d &callback, double rayStart=0.0, double rayEnd=DBL_MAX, const IntersectionPrecomputes2< double > *prec=nullptr)
DecimatePolylineResult decimatePolyline (Polyline2 &polyline, const DecimatePolylineSettings2 &settings={})
 Collapse edges in the polyline according to the settings.
DecimatePolylineResult decimatePolyline (Polyline3 &polyline, const DecimatePolylineSettings3 &settings={})
DecimatePolylineResult decimateContour (Contour2f &contour, const DecimatePolylineSettings2 &settings={})
 Collapse edges in the contour according to the settings.
DecimatePolylineResult decimateContour (Contour3f &contour, const DecimatePolylineSettings3 &settings={})
PolylineProjectionResult2 findProjectionOnPolyline2 (const Vector2f &pt, const Polyline2 &polyline, float upDistLimitSq=FLT_MAX, AffineXf2f *xf=nullptr, float loDistLimitSq=0)
 computes the closest point on polyline to given point
PolylineProjectionResult3 findProjectionOnPolyline (const Vector3f &pt, const Polyline3 &polyline, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 computes the closest point on polyline to given point
PolylineProjectionResult3Arg findMaxProjectionOnPolyline (const VertCoords &points, const Polyline3 &polyline, const VertBitSet *pointsRegion=nullptr, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 for each of points (pointsRegion) computes the closest point on polyline and returns the point for which maximum distance is reached,
PolylineProjectionResult3 findProjectionOnPolyline (const Line3f &ln, const Polyline3 &polyline, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 computes the closest point on polyline to given straight line
Polyline2ProjectionWithOffsetResult findProjectionOnPolyline2WithOffset (const Vector2f &pt, const Polyline2 &polyline, const Vector< float, UndirectedEdgeId > &offsetPerEdge, float upDistLimit=FLT_MAX, AffineXf2f *xf=nullptr, float loDistLimit=0)
 computes the closest point on polyline to given point, respecting each edge offset
PolylineProjectionWithOffsetResult3 findProjectionOnPolylineWithOffset (const Vector3f &pt, const Polyline3 &polyline, const Vector< float, UndirectedEdgeId > &offsetPerEdge, float upDistLimit=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimit=0)
 computes the closest point on polyline to given point, respecting each edge offset
void findEdgesInBall (const Polyline2 &polyline, const Vector2f &center, float radius, const FoundEdgeCallback2 &foundCallback, AffineXf2f *xf=nullptr)
 Finds all edges of given polyline that cross or touch given ball (center, radius)
void findEdgesInBall (const Polyline3 &polyline, const Vector3f &center, float radius, const FoundEdgeCallback3 &foundCallback, AffineXf3f *xf=nullptr)
 Finds all edges of given polyline that cross or touch given ball (center, radius)
void findMeshEdgesInBall (const Mesh &mesh, const AABBTreePolyline3 &tree, const Vector3f &center, float radius, const FoundEdgeCallback3 &foundCallback, AffineXf3f *xf=nullptr)
 Finds all edges of given mesh edges (specified by the tree) that cross or touch given ball (center, radius)
PolylineProjectionResult3 findProjectionOnMeshEdges (const Vector3f &pt, const Mesh &mesh, const AABBTreePolyline3 &tree, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 computes the closest point on the mesh edges (specified by the tree) to given point
PolylineProjectionResult3 findProjectionOnMeshEdges (const Line3f &ln, const Mesh &mesh, const AABBTreePolyline3 &tree, float upDistLimitSq=FLT_MAX, AffineXf3f *xf=nullptr, float loDistLimitSq=0)
 computes the closest point on the mesh edges (specified by the tree) to given straight line
template<typename V>
bool relax (Polyline< V > &polyline, const RelaxParams &params={}, ProgressCallback cb={})
template<typename V>
bool relaxKeepArea (Polyline< V > &polyline, const RelaxParams &params={}, ProgressCallback cb={})
int subdividePolyline (Polyline2 &polyline, const PolylineSubdivideSettings &settings={})
int subdividePolyline (Polyline3 &polyline, const PolylineSubdivideSettings &settings={})
UndirectedEdgeBitSet subdivideWithPlane (Polyline3 &polyline, const Plane3f &plane, EdgeBitSet *newPositiveEdges={}, std::function< void(EdgeId, EdgeId, float)> onEdgeSplitCallback={})
MR_BIND_IGNORE UndirectedEdgeBitSet subdividePolylineWithPlane (Polyline3 &polyline, const Plane3f &plane, std::function< void(EdgeId, EdgeId, float)> onEdgeSplitCallback={})
void trimWithPlane (Polyline3 &polyline, const Plane3f &plane, const DividePolylineParameters &params={})
MR_BIND_IGNORE void dividePolylineWithPlane (Polyline3 &polyline, const Plane3f &plane, const DividePolylineParameters &params={})
std::vector< EdgeSegmentextractSectionsFromPolyline (const Polyline3 &polyline, const Plane3f &plane, float eps, UndirectedEdgeBitSet *positiveEdges={})
void positionVertsSmoothly (Mesh &mesh, const VertBitSet &verts, EdgeWeights edgeWeights=EdgeWeights::Cotan, VertexMass vmass=VertexMass::Unit, const VertBitSet *fixedSharpVertices=nullptr)
void positionVertsSmoothly (const MeshTopology &topology, VertCoords &points, const VertBitSet &verts, EdgeWeights edgeWeights=EdgeWeights::Cotan, VertexMass vmass=VertexMass::Unit, const VertBitSet *fixedSharpVertices=nullptr)
void positionVertsSmoothlySharpBd (Mesh &mesh, const PositionVertsSmoothlyParams &params)
 Puts given vertices in such positions to make smooth surface inside verts-region, but sharp on its boundary;.
void positionVertsSmoothlySharpBd (const MeshTopology &topology, VertCoords &points, const PositionVertsSmoothlyParams &params)
void positionVertsSmoothlySharpBd (Mesh &mesh, const VertBitSet &verts)
void positionVertsWithSpacing (Mesh &mesh, const SpacingSettings &settings)
 Moves given vertices to make the distances between them as specified.
void positionVertsWithSpacing (const MeshTopology &topology, VertCoords &points, const SpacingSettings &settings)
void inflate (Mesh &mesh, const VertBitSet &verts, const InflateSettings &settings)
void inflate (const MeshTopology &topology, VertCoords &points, const VertBitSet &verts, const InflateSettings &settings)
void inflate1 (const MeshTopology &topology, VertCoords &points, const VertBitSet &verts, float pressure)
void vertMapsComposition (VertMap &a2b, const VertMap &b2c)
 updates a2b map to a2c map using b2c map
VertMap vertMapsComposition (const VertMap &a2b, const VertMap &b2c)
 returns map a2c from a2b and b2c maps
void edgeMapsComposition (EdgeMap &a2b, const EdgeMap &b2c)
 updates a2b map to a2c map using b2c map
EdgeMap edgeMapsComposition (const EdgeMap &a2b, const EdgeMap &b2c)
 returns map a2c from a2b and b2c maps
void faceMapsComposition (FaceMap &a2b, const FaceMap &b2c)
 updates a2b map to a2c map using b2c map
FaceMap faceMapsComposition (const FaceMap &a2b, const FaceMap &b2c)
 returns map a2c from a2b and b2c maps
Mesh makePrism (float baseLength, float leftAngle, float rightAngle, float height=1.0f)
MR_BIND_IGNORE void processSelfSubtasks (const AABBTree &tree, std::vector< NodeNode > &subtasks, std::vector< NodeNode > &nextSubtasks, std::function< Processing(const NodeNode &)> processLeaf, std::function< Processing(const Box3f &lBox, const Box3f &rBox)> processNodes)
 This function process all subtasks in one tree
left/right == right/left in this case, so on same non-leaf nodes it only adds 3 next subtasks,
same leafs are skipped and different leafs area processed with processLeaf callback.
bool reportProgress (ProgressCallback cb, float v)
 safely invokes
bool reportProgress (ProgressCallback cb, float v, size_t counter, int divider)
template<typename F>
bool reportProgress (ProgressCallback cb, F &&f)
template<typename F>
bool reportProgress (ProgressCallback cb, F &&f, size_t counter, int divider)
ProgressCallback subprogress (ProgressCallback cb, float from, float to)
 returns a callback that maps [0,1] linearly into [from,to] in the call to
template<typename F>
ProgressCallback subprogress (ProgressCallback cb, F &&f)
 returns a callback that maps the value with given function
ProgressCallback subprogress (ProgressCallback cb, size_t index, size_t count)
 returns a callback that maps [0,1] linearly into [(index+0)/count,(index+1)/count] in the call to
bool writeByBlocks (std::ostream &out, const char *data, size_t dataSize, ProgressCallback callback={}, size_t blockSize=(size_t(1)<< 16))
 write dataSize bytes from data to out stream by blocks blockSize bytes
bool readByBlocks (std::istream &in, char *data, size_t dataSize, ProgressCallback callback={}, size_t blockSize=(size_t(1)<< 16))
 read dataSize bytes from in stream to data by blocks blockSize bytes
template<typename F>
bool projectVertAttribute (const MeshVertPart &mp, const Mesh &oldMesh, F &&func, const ProjectAttributeParams &params={})
template<typename F>
bool projectFaceAttribute (const MeshPart &mp, const Mesh &oldMesh, F &&func, const ProjectAttributeParams &params={})
Expected< void > projectObjectMeshData (const ObjectMeshData &oldMeshData, ObjectMeshData &newMeshData, const FaceBitSet *region=nullptr, const ProjectAttributeParams &params={})
 finds attributes of new mesh by projecting faces/vertices on old mesh
Expected< void > compensateRadius (Mesh &mesh, const CompensateRadiusParams &params)
template<typename T = float>
bool rayBoxIntersect (const Box3< T > &box, const RayOrigin< T > &rayOrigin, T &t0, T &t1, const IntersectionPrecomputes< T > &prec)
template<typename T = float>
bool rayBoxIntersect (const Box3< T > &box, const Line3< T > &line, T t0, T t1)
template<typename T>
bool rayBoxIntersect (const Box2< T > &box, const Vector2< T > &rayOrigin, T &t0, T &t1, const IntersectionPrecomputes2< T > &prec)
template<typename T = float>
bool rayBoxIntersect (const Box2< T > &box, const Line2< T > &line, T t0, T t1)
OutEdge2 opposite (OutEdge2 e)
void expandPixelMask (PixelBitSet &mask, const RectIndexer &indexer, int expansion=1)
 expands PixelBitSet with given number of steps
void shrinkPixelMask (PixelBitSet &mask, const RectIndexer &indexer, int shrinkage=1)
 shrinks PixelBitSet with given number of steps
template<typename T>
Vector2< T > unfoldOnPlane (const Vector3< T > &b, const Vector3< T > &c, const Vector2< T > &d, bool toLeftFrom0d)
template<typename T>
shortestPathInQuadrangle (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d)
template<typename T>
bool isUnfoldQuadrangleConvex (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d)
bool reducePathViaVertex (const Mesh &mesh, const MeshTriPoint &start, VertId v, const MeshTriPoint &end, SurfacePath &outPath, std::vector< Vector2f > &tmp, SurfacePath &cachePath)
int reducePath (const Mesh &mesh, const MeshTriPoint &start, SurfacePath &path, const MeshTriPoint &end, int maxIter=5)
EdgeLoop trackLeftBoundaryLoop (const MeshTopology &topology, EdgeId e0, const FaceBitSet *region=nullptr)
EdgeLoop trackLeftBoundaryLoop (const MeshTopology &topology, const FaceBitSet &region, EdgeId e0)
EdgeLoop trackRightBoundaryLoop (const MeshTopology &topology, EdgeId e0, const FaceBitSet *region=nullptr)
EdgeLoop trackRightBoundaryLoop (const MeshTopology &topology, const FaceBitSet &region, EdgeId e0)
EdgeId extractPath (const MeshTopology &topology, EdgeId e0, EdgeBitSet &edges, EdgePath *outPath, Turn turn)
std::vector< EdgeLoopextractAllLoops (const MeshTopology &topology, EdgeBitSet &edges, Turn turn)
std::vector< EdgeLoopfindLeftBoundary (const MeshTopology &topology, const FaceBitSet *region=nullptr)
MR_BIND_IGNORE std::vector< EdgeLoopfindLeftBoundary (const MeshTopology &topology, const FaceBitSet &region)
 This is skipped in the bindings because it conflicts with the overload taking a pointer in C#. Since that overload is strictly more useful, we're keeping that one.
std::vector< EdgeLoopfindRightBoundary (const MeshTopology &topology, const FaceBitSet *region=nullptr)
MR_BIND_IGNORE std::vector< EdgeLoopfindRightBoundary (const MeshTopology &topology, const FaceBitSet &region)
 This is skipped in the bindings because it conflicts with the overload taking a pointer in C#. Since that overload is strictly more useful, we're keeping that one.
EdgeBitSet findAllLeftBdEdges (const MeshTopology &topology, const FaceBitSet *region, bool innerMeshEdgesOnly=false)
std::vector< EdgeLoopdelRegionKeepBd (Mesh &mesh, const FaceBitSet *region=nullptr, bool keepLoneHoles=false)
MR_BIND_IGNORE std::vector< EdgeLoopdelRegionKeepBd (Mesh &mesh, const FaceBitSet &region, bool keepLoneHoles=false)
 This is skipped in the bindings because it conflicts with the overload taking a pointer in C#. Since that overload is strictly more useful, we're keeping that one.
std::vector< EdgePathfindLeftBoundaryInsideMesh (const MeshTopology &topology, const FaceBitSet &region)
UndirectedEdgeBitSet findRegionBoundaryUndirectedEdgesInsideMesh (const MeshTopology &topology, const FaceBitSet &region)
 returns all region boundary edges, where each edge has a region face on one side, and a valid not-region face on another side
FaceBitSet findRegionOuterFaces (const MeshTopology &topology, const FaceBitSet &region)
VertBitSet getIncidentVerts (const MeshTopology &topology, const FaceBitSet &faces)
 composes the set of all vertices incident to given faces
const VertBitSet & getIncidentVerts (const MeshTopology &topology, const FaceBitSet *faces, VertBitSet &store)
VertBitSet getInnerVerts (const MeshTopology &topology, const FaceBitSet *region=nullptr)
 composes the set of all vertices not on the boundary of a hole and with all their adjacent faces in given set
MR_BIND_IGNORE VertBitSet getInnerVerts (const MeshTopology &topology, const FaceBitSet &region)
VertBitSet getBoundaryVerts (const MeshTopology &topology, const FaceBitSet *region=nullptr)
 composes the set of all boundary vertices for given region (or whole mesh if !region)
VertBitSet getRegionBoundaryVerts (const MeshTopology &topology, const FaceBitSet &region)
FaceBitSet getIncidentFaces (const MeshTopology &topology, const VertBitSet &verts)
 composes the set of all faces incident to given vertices
FaceBitSet getInnerFaces (const MeshTopology &topology, const VertBitSet &verts)
 composes the set of all faces with all their vertices in given set
EdgeBitSet getRegionEdges (const MeshTopology &topology, const FaceBitSet &faces)
 composes the set of all edges, having a face from given set at the left
UndirectedEdgeBitSet getIncidentEdges (const MeshTopology &topology, const FaceBitSet &faces)
 composes the set of all undirected edges, having a face from given set from one of two sides
UndirectedEdgeBitSet getIncidentEdges (const MeshTopology &topology, const UndirectedEdgeBitSet &edges)
 composes the set of all undirected edges, having at least one common vertex with an edge from given set
VertBitSet getIncidentVerts (const MeshTopology &topology, const UndirectedEdgeBitSet &edges)
 composes the set of all vertices incident to given edges
FaceBitSet getIncidentFaces (const MeshTopology &topology, const UndirectedEdgeBitSet &edges)
 composes the set of all faces incident to given edges
FaceBitSet getNeighborFaces (const MeshTopology &topology, const UndirectedEdgeBitSet &edges)
 composes the set of all left and right faces of given edges
UndirectedEdgeBitSet getInnerEdges (const MeshTopology &topology, const VertBitSet &verts)
 composes the set of all edges with all their vertices in given set
UndirectedEdgeBitSet getInnerEdges (const MeshTopology &topology, const FaceBitSet &region)
 composes the set of all edges having both left and right in given region
const VertBitSet & getIncidentVerts (const MeshTopology &topology, const UndirectedEdgeBitSet *edges, VertBitSet &store)
VertBitSet getInnerVerts (const MeshTopology &topology, const UndirectedEdgeBitSet &edges)
 composes the set of all vertices with all their edges in given set
Expected< MeshmakeRegularGridMesh (size_t width, size_t height, const RegularGridLatticeValidator &validator, const RegularGridLatticePositioner &positioner, const RegularGridMeshFaceValidator &faceValidator={}, ProgressCallback cb={})
 Creates regular mesh with points in valid grid lattice.
Expected< MeshmakeRegularGridMesh (VertCoords pc, ProgressCallback cb={})
 Creates regular mesh from monotone (connects point with closed x, y neighbors) points.
template<typename V>
getLimitedPos (const V &pos, const V &guidePos, typename VectorTraits< V >::BaseType maxGuideDistSq)
template<typename T>
void resizeNoInit (std::vector< T > &vec, size_t targetSize) MR_REQUIRES_IF_SUPPORTED(sizeof(T) > 0 &&std
void redirectSTDStreamsToLogger ()
IteratorRange< OrgRingIteratororgRing (const MeshTopology &topology, EdgeId edge)
IteratorRange< OrgRingIteratororgRing (const MeshTopology &topology, VertId v)
IteratorRange< OrgRingIteratororgRing0 (const MeshTopology &topology, EdgeId edge)
IteratorRange< LeftRingIteratorleftRing (const MeshTopology &topology, EdgeId edge)
IteratorRange< LeftRingIteratorleftRing (const MeshTopology &topology, FaceId f)
IteratorRange< LeftRingIteratorleftRing0 (const MeshTopology &topology, EdgeId edge)
Vector3f applyFloat (const AffineXf3d *xf, const Vector3f &p)
 returns the point as is or after application of given transform to it in double precision
Vector3f applyFloat (const Matrix3d *m, const Vector3f &n)
 returns the normal as is or after application of given matrix to it in double precision
Vector3d applyDouble (const AffineXf3d *xf, const Vector3f &p)
 converts given point in double precision and applies given transformation to it
Vector3d applyDouble (const Matrix3d *m, const Vector3f &n)
 converts given normal in double precision and applies given matrix to it
const VertCoords & transformPoints (const VertCoords &verts, const VertBitSet &validVerts, const AffineXf3d *xf, VertCoords &buf, const VertRenumber *vertRenumber=nullptr)
const VertNormals & transformNormals (const VertNormals &normals, const VertBitSet &validVerts, const Matrix3d *m, VertNormals &buf)
std::shared_ptr< SceneRootObjectcreateRootFormObject (std::shared_ptr< Object > obj)
Expected< std::string > serializeJsonValue (const Json::Value &root)
Expected< void > serializeJsonValue (const Json::Value &root, std::ostream &out)
Expected< void > serializeJsonValue (const Json::Value &root, const std::filesystem::path &path)
 important on Windows: in stream must be open in binary mode
Expected< Json::Value > deserializeJsonValue (std::istream &in)
Expected< Json::Value > deserializeJsonValue (const char *data, size_t size)
 important on Windows: in stream must be open in binary mode
Expected< Json::Value > deserializeJsonValue (const std::string &str)
Expected< Json::Value > deserializeJsonValue (const std::filesystem::path &path)
Expected< void > serializeMesh (const Mesh &mesh, const std::filesystem::path &path, const FaceBitSet *selection=nullptr, const char *serializeFormat=".mrmesh")
void serializeToJson (const Vector2i &vec, Json::Value &root)
 saves an object into json value
void serializeToJson (const Vector2f &vec, Json::Value &root)
void serializeToJson (const Vector3i &vec, Json::Value &root)
void serializeToJson (const Vector3f &vec, Json::Value &root)
void serializeToJson (const Vector4f &vec, Json::Value &root)
void serializeToJson (const Box3i &box, Json::Value &root)
void serializeToJson (const Box3f &box, Json::Value &root)
void serializeToJson (const Color &col, Json::Value &root)
void serializeToJson (const Matrix2f &matrix, Json::Value &root, bool skipIdentity=true)
void serializeToJson (const Matrix3f &matrix, Json::Value &root, bool skipIdentity=true)
void serializeToJson (const AffineXf2f &xf, Json::Value &root, bool skipIdentity=true)
void serializeToJson (const AffineXf3f &xf, Json::Value &root, bool skipIdentity=true)
void serializeToJson (const BitSet &bitset, Json::Value &root)
Expected< void > serializeToJson (const Mesh &mesh, Json::Value &root)
void serializeToJson (const Plane3f &plane, Json::Value &root)
void serializeToJson (const TriPointf &tp, Json::Value &root)
void serializeToJson (const MeshTexture &texture, Json::Value &root)
void serializeToJson (const std::vector< TextureId > &texturePerFace, Json::Value &root)
void serializeToJson (const std::vector< UVCoord > &uvCoords, Json::Value &root)
void serializeToJson (const std::vector< Color > &colors, Json::Value &root)
void serializeToJson (const MeshTriPoint &mtp, const MeshTopology &topology, Json::Value &root)
void serializeToJson (const PointOnFace &pf, Json::Value &root)
void serializeViaVerticesToJson (const UndirectedEdgeBitSet &edges, const MeshTopology &topology, Json::Value &root)
void deserializeViaVerticesFromJson (const Json::Value &root, UndirectedEdgeBitSet &edges, const MeshTopology &topology)
void deserializeFromJson (const Json::Value &root, Vector2i &vec)
 loads an object from json value
void deserializeFromJson (const Json::Value &root, Vector2f &vec)
void deserializeFromJson (const Json::Value &root, Vector3i &vec)
void deserializeFromJson (const Json::Value &root, Vector3f &vec)
void deserializeFromJson (const Json::Value &root, Vector4f &vec)
void deserializeFromJson (const Json::Value &root, Color &col)
void deserializeFromJson (const Json::Value &root, Matrix2f &matrix)
void deserializeFromJson (const Json::Value &root, Matrix3f &matrix)
void deserializeFromJson (const Json::Value &root, AffineXf2f &xf)
void deserializeFromJson (const Json::Value &root, AffineXf3f &xf)
void deserializeFromJson (const Json::Value &root, BitSet &bitset)
Expected< MeshdeserializeFromJson (const Json::Value &root, VertColors *colors=nullptr)
void deserializeFromJson (const Json::Value &root, Plane3f &plane)
void deserializeFromJson (const Json::Value &root, TriPointf &tp)
void deserializeFromJson (const Json::Value &root, MeshTexture &texture)
void deserializeFromJson (const Json::Value &root, std::vector< TextureId > &texturePerFace)
void deserializeFromJson (const Json::Value &root, std::vector< UVCoord > &uvCoords)
void deserializeFromJson (const Json::Value &root, std::vector< Color > &colors)
void deserializeFromJson (const Json::Value &root, MeshTriPoint &mtp, const MeshTopology &topology)
void deserializeFromJson (const Json::Value &root, PointOnFace &pf)
void sharpenMarchingCubesMesh (const MeshPart &ref, Mesh &vox, Vector< VoxelId, FaceId > &face2voxel, const SharpenMarchingCubesMeshSettings &settings)
const char * asString (SignDetectionMode m)
 returns string representation of enum values
std::vector< Vector3f > sampleHalfSphere ()
 returns quasi-uniform 145 samples on unit half-sphere z>0
VertScalars computeSkyViewFactor (const Mesh &terrain, const VertCoords &samples, const VertBitSet &validSamples, const std::vector< SkyPatch > &skyPatches, BitSet *outSkyRays=nullptr, std::vector< MeshIntersectionResult > *outIntersections=nullptr)
BitSet findSkyRays (const Mesh &terrain, const VertCoords &samples, const VertBitSet &validSamples, const std::vector< SkyPatch > &skyPatches, std::vector< MeshIntersectionResult > *outIntersections=nullptr)
Mesh makeSolidOfRevolution (const Contour2f &profile, int resolution=16)
template<typename C, typename D, D M>
SparsePolynomial< C, D, Moperator* (const SparsePolynomial< C, D, M > &a, const SparsePolynomial< C, D, M > &b)
std::string getCurrentStacktraceInline ()
void printStacktraceOnCrash ()
 Print stacktrace on application crash.
size_t findSubstringCaseInsensitive (const std::string &string, const std::string &substring)
int calcDamerauLevenshteinDistance (const std::string &stringA, const std::string &stringB, bool caseSensitive=true, int *outLeftRightAddition=nullptr)
std::vector< std::string > split (const std::string &string, const std::string &delimiter)
template<typename F>
bool split (std::string_view str, std::string_view sep, F &&func)
std::string replace (std::string target, std::string_view from, std::string_view to)
 Returns.
void replaceInplace (std::string &target, std::string_view from, std::string_view to)
 Replaces.
std::string_view trim (std::string_view str)
 Removes all whitespace character (detected by std::isspace) at the beginning and the end of string view.
std::string_view trimLeft (std::string_view str)
 Removes all whitespace character (detected by std::isspace) at the beginning of string view.
std::string_view trimRight (std::string_view str)
 Removes all whitespace character (detected by std::isspace) at the end of string view.
bool hasFormatPlaceholders (std::string_view str)
 Returns true if str has at least one {...} formatting placeholder.
MR_BIND_IGNORE std::wstring utf8ToWide (const char *utf8)
 converts UTF8-encoded string into UTF16-encoded string
std::string systemToUtf8 (const std::string &system)
 converts system encoded string to UTF8-encoded string
std::string utf8ToSystem (const std::string &utf8)
MR_BIND_IGNORE std::string wideToUtf8 (const wchar_t *wide)
 converts wide null terminating string to UTF8-encoded string
MR_BIND_IGNORE const std::string & asString (const std::string &s)
 std::u8string is not defined
MR_BIND_IGNORE const std::string & asU8String (const std::string &s)
MR_BIND_IGNORE std::string asString (std::string &&s)
MR_BIND_IGNORE std::string asU8String (std::string &&s)
MR_BIND_IGNORE std::filesystem::path pathFromUtf8 (const std::string &s)
MR_BIND_IGNORE std::filesystem::path pathFromUtf8 (const char *s)
std::string utf8string (const std::filesystem::path &path)
 returns filename as UTF8-encoded string
std::string utf8string (const std::string &)=delete
 it is a mistake to call the function with implicit construction of path from string
std::string utf8substr (const char *s, size_t pos, size_t count)
std::string bytesString (size_t size)
bool isProhibitedChar (char c)
bool hasProhibitedChars (const std::string &line)
 returns true if line contains at least one character (c) for which isProhibitedChar(c)==true
std::string replaceProhibitedChars (const std::string &line, char replacement='_')
 replace all characters (c), where isProhibitedChar(c)==true, with replacement char
template<typename T>
Expected< T > addFileNameInError (Expected< T > v, const std::filesystem::path &file)
 if (v) contains an error, then appends given file name to that error
std::string commonFilesName (const std::vector< std::filesystem::path > &files)
MR_BIND_IGNORE char * formatNoTrailingZeros (char *fmt, double v, int digitsAfterPoint, int precision=6)
double roundToPrecision (double v, int precision)
 returns given value rounded to given number of decimal digits
float roundToPrecision (float v, int precision)
 returns given value rounded to given number of decimal digits
std::string getCancelMessage (const std::filesystem::path &path)
 Returns message showed when loading is canceled.
std::string toLower (std::string str)
 return a copy of the string with all alphabetic ASCII characters replaced with upper-case variants
VertScalars computeSurfaceDistances (const Mesh &mesh, const VertBitSet &startVertices, float maxDist=FLT_MAX, const VertBitSet *region=nullptr, int maxVertUpdates=3)
VertScalars computeSurfaceDistances (const Mesh &mesh, const VertBitSet &startVertices, const VertBitSet &targetVertices, float maxDist=FLT_MAX, const VertBitSet *region=nullptr, int maxVertUpdates=3)
VertScalars computeSurfaceDistances (const Mesh &mesh, const HashMap< VertId, float > &startVertices, float maxDist=FLT_MAX, const VertBitSet *region=nullptr, int maxVertUpdates=3)
VertScalars computeSurfaceDistances (const Mesh &mesh, const MeshTriPoint &start, const MeshTriPoint &end, const VertBitSet *region=nullptr, bool *endReached=nullptr, int maxVertUpdates=3)
VertScalars computeSurfaceDistances (const Mesh &mesh, const MeshTriPoint &start, float maxDist=FLT_MAX, const VertBitSet *region=nullptr, int maxVertUpdates=3)
VertScalars computeSurfaceDistances (const Mesh &mesh, const std::vector< MeshTriPoint > &starts, float maxDist=FLT_MAX, const VertBitSet *region=nullptr, int maxVertUpdates=3)
bool operator< (const VertDistance &a, const VertDistance &b)
 smaller distance to be the first
Expected< Contours3foffsetSurfaceLine (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, float offset)
 Returns contours in mesh space that are offset from surfaceLine on offset amount in all directions.
Expected< Contours3foffsetSurfaceLine (const Mesh &mesh, const std::vector< MeshTriPoint > &surfaceLine, const std::function< float(int)> &offsetAtPoint)
 Returns contours in mesh space that are offset from surfaceLine on offsetAtPoint amount in all directions.
std::string toString (PathError error)
Expected< SurfacePath, PathErrorcomputeSurfacePath (const MeshPart &mp, const MeshTriPoint &start, const MeshTriPoint &end, int maxGeodesicIters=5, const VertBitSet *vertRegion=nullptr, VertScalars *outSurfaceDistances=nullptr)
Expected< SurfacePath, PathErrorcomputeGeodesicPath (const Mesh &mesh, const MeshTriPoint &start, const MeshTriPoint &end, GeodesicPathApprox atype=GeodesicPathApprox::FastMarching, int maxGeodesicIters=100)
 the maximum number of iterations to reduce approximate path length and convert it in geodesic path
Expected< SurfacePath, PathErrorcomputeGeodesicPathApprox (const Mesh &mesh, const MeshTriPoint &start, const MeshTriPoint &end, GeodesicPathApprox atype)
Expected< SurfacePath, PathErrorcomputeFastMarchingPath (const MeshPart &mp, const MeshTriPoint &start, const MeshTriPoint &end, const VertBitSet *vertRegion=nullptr, VertScalars *outSurfaceDistances=nullptr)
SurfacePath computeSteepestDescentPath (const MeshPart &mp, const VertScalars &field, const MeshTriPoint &start, const ComputeSteepestDescentPathSettings &settings={})
void computeSteepestDescentPath (const MeshPart &mp, const VertScalars &field, const MeshTriPoint &start, SurfacePath *outPath, const ComputeSteepestDescentPathSettings &settings={})
MeshEdgePoint findSteepestDescentPoint (const MeshPart &mp, const VertScalars &field, VertId v)
 finds the point along minus maximal gradient on the boundary of first ring boundary around given vertex
MeshEdgePoint findSteepestDescentPoint (const MeshPart &mp, const VertScalars &field, const MeshEdgePoint &ep)
 finds the point along minus maximal gradient on the boundary of triangles around given point (the boundary of left and right edge triangles' union in case (ep) is inner edge point)
MeshEdgePoint findSteepestDescentPoint (const MeshPart &mp, const VertScalars &field, const MeshTriPoint &tp)
 finds the point along minus maximal gradient on the boundary of triangles around given point (the boundary of the triangle itself in case (tp) is inner triangle point)
UndirectedEdgeBitSet findExtremeEdges (const Mesh &mesh, const VertScalars &field, ExtremeEdgeType type)
 computes all edges in the mesh, where the field not-increases both in left and right triangles
HashMap< VertId, VertId > computeClosestSurfacePathTargets (const Mesh &mesh, const VertBitSet &starts, const VertBitSet &ends, const VertBitSet *vertRegion=nullptr, VertScalars *outSurfaceDistances=nullptr)
SurfacePaths getSurfacePathsViaVertices (const Mesh &mesh, const VertBitSet &vs)
float surfacePathLength (const Mesh &mesh, const SurfacePath &surfacePath)
 computes the length of the given surface path
float geodesicPathLength (const Mesh &mesh, const GeodesicPath &path)
 computes the length of the given geodesic path
Contour3f surfacePathToContour3f (const Mesh &mesh, const SurfacePath &line)
 converts lines on mesh in 3D contours by computing coordinate of each point
Contours3f surfacePathsToContours3f (const Mesh &mesh, const SurfacePaths &lines)
Contour3f geodesicPathToContour3f (const Mesh &mesh, const GeodesicPath &path)
 returns coordinates of all vertices of the given path
Expected< EdgeLoopsurroundingContour (const Mesh &mesh, std::vector< EdgeId > includeEdges, const EdgeMetric &edgeMetric, const Vector3f &dir)
 Find the best closed edge loop passing through given edges, which minimizes the sum of given edge metric. The algorithm assumes that input edges can be projected on the plane orthogonal to given direction, then the center point of all input edges is found, and each segment of the searched loop is within infinite pie sector with this center and the borders passing via two sorted input edges.
Expected< EdgeLoopsurroundingContour (const Mesh &mesh, std::vector< VertId > keyVertices, const EdgeMetric &edgeMetric, const Vector3f &dir)
 Find the best closed edge loop passing through given vertices, which minimizes the sum of given edge metric. The algorithm assumes that input vertices can be projected on the plane orthogonal to given direction, then the center point of all input vertices is found, and each segment of the searched loop is within infinite pie sector with this center and the borders passing via two sorted input vertices.
void SetCurrentThreadName (const char *name)
 sets debug name for the current thread
MR_BIND_IGNORE std::filesystem::path GetExeDirectory ()
 returns path of current exe directory
MR_BIND_IGNORE std::filesystem::path GetResourcesDirectory ()
MR_BIND_IGNORE std::filesystem::path GetFontsDirectory ()
MR_BIND_IGNORE std::filesystem::path GetLibsDirectory ()
MR_BIND_IGNORE std::filesystem::path GetEmbeddedPythonDirectory ()
std::filesystem::path getUserConfigDir ()
 return path to the folder with user config file(s)
std::filesystem::path getUserConfigFilePath ()
 returns path of config file in APPDATA
std::filesystem::path GetTempDirectory ()
 returns temp directory
std::filesystem::path GetHomeDirectory ()
 returns home directory
const char * GetMRVersionString ()
 _WIN32
void OpenLink (const std::string &url)
 Opens given link in default browser.
bool OpenDocument (const std::filesystem::path &path)
 Opens given file (or directory) in associated application.
std::string GetCpuId ()
 returns string identification of the CPU
std::string GetDetailedOSName ()
 returns string with OS name with details
std::string getOSNoSpaces ()
 returns string identification of the OS
void setNewHandlerIfNeeded ()
 sets new handler for operator new if needed for some platforms
std::string getCurrentStacktrace ()
 returns string representation of the current stacktrace
SystemMemory getSystemMemory ()
 return information about memory available in the system
void setupLoggerByDefault (const std::function< void()> &customLogSinkAdder={})
 _WIN32
int intLog2 (size_t n)
Expected< MeshterrainTriangulation (std::vector< Vector3f > points, ProgressCallback cb={})
std::optional< UVCoordfindVertexUV (const MeshTopology &topology, VertId v, const TriCornerUVCoords &triCornerUvCoords)
std::optional< VertUVCoords > findVertexUVs (const MeshTopology &topology, const TriCornerUVCoords &triCornerUvCoords)
Color sampleVertexColor (const Mesh &mesh, VertId v, const MeshTexture &tex, const TriCornerUVCoords &triCornerUvCoords)
VertColors sampleVertexColors (const Mesh &mesh, const MeshTexture &tex, const TriCornerUVCoords &triCornerUvCoords)
bool isTIFFFile (const std::filesystem::path &path)
 returns true if given file is tiff
Expected< TiffParametersreadTiffParameters (const std::filesystem::path &path)
 reads parameters of tiff file
Expected< void > readRawTiff (const std::filesystem::path &path, RawTiffOutput &output)
 load values from tiff to ouput.data
Expected< void > writeRawTiff (const uint8_t *bytes, const std::filesystem::path &path, const WriteRawTiffParams &params)
 writes bytes to tiff file
Expected< void > writeRawTiff (const uint8_t *bytes, const std::filesystem::path &path, const BaseTiffParameters &params, const AffineXf3f *xf)
void printTimingTreeAtEnd (bool on, double minTimeSec=0.1)
void printCurrentTimerBranch ()
 prints current timer branch
void printTimingTree (double minTimeSec=0.1)
MR_BIND_IGNORE void registerThreadRootTimeRecord (ThreadRootTimeRecord &root)
 installs given record in the current thread (no record must be installed before)
MR_BIND_IGNORE void unregisterThreadRootTimeRecord (ThreadRootTimeRecord &root)
 un-installs given record in the current thread
Mesh makeTorus (float primaryRadius=1.0f, float secondaryRadius=0.1f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
Mesh makeOuterHalfTorus (float primaryRadius=1.0f, float secondaryRadius=0.1f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
Mesh makeTorusWithUndercut (float primaryRadius=1.0f, float secondaryRadiusInner=0.1f, float secondaryRadiusOuter=0.2f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
Mesh makeTorusWithSpikes (float primaryRadius=1.0f, float secondaryRadiusInner=0.1f, float secondaryRadiusOuter=0.5f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
Mesh makeTorusWithComponents (float primaryRadius=1.0f, float secondaryRadius=0.1f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
Mesh makeTorusWithSelfIntersections (float primaryRadius=1.0f, float secondaryRadius=0.1f, int primaryResolution=16, int secondaryResolution=16, std::vector< Vector3f > *points=nullptr)
template<typename T>
void rotateToLongestEdge (Vector3< T > &a, Vector3< T > &b, Vector3< T > &c)
template<typename T>
bool doTrianglesIntersect (Vector3< T > a, Vector3< T > b, Vector3< T > c, Vector3< T > d, Vector3< T > e, Vector3< T > f)
template<typename T>
bool isPointInPlane (const Vector3< T > &p, const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
 returns true if ABC plane contains point P
template<typename T>
bool isPointInLine (const Vector3< T > &p, const Vector3< T > &a, const Vector3< T > &b)
 returns true if AB line contains point P
template<typename T>
bool isPointInLine (const Vector2< T > &p, const Vector2< T > &a, const Vector2< T > &b)
 returns true if AB line contains point P
template<typename T>
bool isPointInSegm (const Vector3< T > &p, const Vector3< T > &a, const Vector3< T > &b)
 returns true if AB segment contains point P
template<typename T>
bool isPointInSegm (const Vector2< T > &p, const Vector2< T > &a, const Vector2< T > &b)
 returns true if AB segment contains point P
template<typename T>
bool isPointInTriangle (const Vector3< T > &p, const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
 returns true if ABC triangle contains point P
template<typename T>
bool isPointInTriangle (const Vector2< T > &p, const Vector2< T > &a, const Vector2< T > &b, const Vector2< T > &c)
 returns true if ABC triangle contains point P
template<typename T>
bool doesEdgeXySeparate (const Vector3< T > &x, const Vector3< T > &y, const Vector3< T > &z, const Vector3< T > &u, const Vector3< T > &v, const Vector3< T > &w, Vector3< T > d)
 returns true if a plane containing edge XY separates point Z from triangle UVW
template<typename T>
bool doTrianglesIntersectExt (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d, const Vector3< T > &e, const Vector3< T > &f)
template<typename T>
bool doTriangleLineIntersect (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d, const Vector3< T > &e)
 checks whether triangle ABC and infinite line DE intersect
template<typename T>
bool doTriangleSegmentIntersect (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d, const Vector3< T > &e)
 checks whether triangle ABC and segment DE intersect
template<typename T>
Vector3< T > findTriangleSegmentIntersection (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d, const Vector3< T > &e)
 this function input should have intersection
template<typename T>
std::optional< Vector3< T > > findTriangleTriangleIntersection (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &d, const Vector3< T > &e, const Vector3< T > &f)
template<typename T>
std::optional< TriIntersectResultrayTriangleIntersect (const Vector3< T > &oriA, const Vector3< T > &oriB, const Vector3< T > &oriC, const IntersectionPrecomputes< T > &prec)
template<typename T>
std::optional< TriIntersectResultrayTriangleIntersect (const Vector3< T > &oriA, const Vector3< T > &oriB, const Vector3< T > &oriC, const Vector3< T > &dir)
template<typename T>
bool doTrianglesOverlap (const Vector2< T > &a, const Vector2< T > &b, const Vector2< T > &c, const Vector2< T > &d, const Vector2< T > &e, const Vector2< T > &f)
 returns true if ABC and DEF overlaps or touches
TriTriDistanceResultf findTriTriDistance (const Triangle3f &a, const Triangle3f &b, const TriTriDistanceParamsf &params={})
 computes the closest points on two triangles
TriTriDistanceResultd findTriTriDistance (const Triangle3d &a, const Triangle3d &b, const TriTriDistanceParamsd &params={})
MR_BIND_IGNORE float triDist (Vector3f &p, Vector3f &q, const Vector3f s[3], const Vector3f t[3])
 This version is not in the bindings, because the pointer parameters are assumed to point to single objects, which is wrong here.
float triDist (Vector3f &p, Vector3f &q, const std::array< Vector3f, 3 > &s, const std::array< Vector3f, 3 > &t)
void segPoints (Vector3f &VEC, Vector3f &X, Vector3f &Y, const Vector3f &P, const Vector3f &A, const Vector3f &Q, const Vector3f &B)
template<typename T>
circumcircleDiameterSq (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
template<typename T>
circumcircleDiameter (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
template<typename T>
Vector3< T > circumcircleCenter (const Vector3< T > &a, const Vector3< T > &b)
 Computes the center of the the triangle's 0AB circumcircle.
template<typename T>
Vector3< T > circumcircleCenter (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
 Computes the center of the the triangle's ABC circumcircle.
template<typename T>
bool circumballCenters (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, T radius, Vector3< T > &centerPos, Vector3< T > &centerNeg)
 ball's center from the negative side of triangle
template<typename T>
minTriangleAngleSin (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
template<typename T>
minTriangleAngle (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
template<typename T>
triangleAspectRatio (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c)
template<typename T>
Vector3< T > dirDblArea (const Triangle3< T > &t)
 computes directed double area of given triangle
template<typename T>
Vector3< T > dirDblArea (const Vector3< T > &q, const Vector3< T > &r)
 computes directed double area of triangle 0QR
template<typename T>
Vector3< T > dirDblArea (const Vector3< T > &p, const Vector3< T > &q, const Vector3< T > &r)
 computes directed double area of triangle PQR
template<typename T>
Vector3< T > normal (const Vector3< T > &q, const Vector3< T > &r)
 computes unit normal of triangle 0QR
template<typename T>
Vector3< T > normal (const Vector3< T > &p, const Vector3< T > &q, const Vector3< T > &r)
 computes unit normal of triangle PQR
template<typename T>
Vector3< T > normal (const Triangle3< T > &t)
 computes unit normal of the given triangle
template<typename T>
dblAreaSq (const Vector3< T > &p, const Vector3< T > &q, const Vector3< T > &r)
 computes the square of double area of given triangle
template<typename T>
dblArea (const Triangle3< T > &t)
 computes twice the area of given triangle
template<typename T>
dblArea (const Vector3< T > &p, const Vector3< T > &q, const Vector3< T > &r)
 computes twice the area of given triangle
template<typename T>
area (const Vector3< T > &p, const Vector3< T > &q, const Vector3< T > &r)
 computes twice the area of given triangle
template<typename T>
dblArea (const Vector2< T > &p, const Vector2< T > &q, const Vector2< T > &r)
 computes twice the area of given triangle
template<typename T>
area (const Vector2< T > &p, const Vector2< T > &q, const Vector2< T > &r)
 computes twice the area of given triangle
template<typename T>
Triangle3< T > makeDegenerate (const Triangle3< T > &t)
 make degenerate triangle (all 3 points on a line) that maximally resembles the input one and has the same centroid
template<typename T>
Triangle3< T > triangleWithNormal (const Triangle3< T > &t, const Vector3< T > &n)
template<typename T>
dihedralAngleSin (const Vector3< T > &leftNorm, const Vector3< T > &rightNorm, const Vector3< T > &edgeVec)
template<typename T>
dihedralAngleCos (const Vector3< T > &leftNorm, const Vector3< T > &rightNorm)
template<typename T>
dihedralAngle (const Vector3< T > &leftNorm, const Vector3< T > &rightNorm, const Vector3< T > &edgeVec)
template<typename T>
std::optional< Vector2< T > > posFromTriEdgeLengths (T a, T b, T c)
template<typename T>
std::optional< T > quadrangleOtherDiagonal (T a, T b, T c, T a1, T b1)
template<typename T>
tanSqOfHalfAngle (T a, T b, T c)
template<typename T>
cotan (const Triangle3< T > &t, T absMaxVal=std::numeric_limits< T >::max())
template<typename T>
cotan (T a, T b, T c)
template<typename T>
std::optional< Vector3< T > > gradientInTri (const Vector3< T > &b, const Vector3< T > &c, T vb, T vc)
template<typename T>
std::optional< Vector3< T > > gradientInTri (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, T va, T vb, T vc)
template<typename T>
std::optional< T > findTriExitPos (const Vector3< T > &b, const Vector3< T > &c, const Vector3< T > &grad)
template<typename T>
std::optional< Vector3< T > > tangentPlaneNormalToSpheres (const Vector3< T > &b, const Vector3< T > &c, T rb, T rc)
template<typename T>
std::optional< Plane3< T > > tangentPlaneToSpheres (const Vector3< T > &a, const Vector3< T > &b, const Vector3< T > &c, T ra, T rb, T rc)
std::vector< FaceFaceFacefindTripleFaceIntersections (const MeshTopology &topology, const ContinuousContours &selfContours)
Expected< std::vector< EdgeLoop > > detectBasisTunnels (const MeshPart &mp, EdgeMetric metric={}, ProgressCallback progressCallback={})
Expected< EdgeLoopfindSmallestMetricCoLoop (const MeshTopology &topology, const EdgeLoop &loop, const EdgeMetric &metric, const FaceBitSet *region=nullptr)
Expected< EdgeLoopfindShortestCoLoop (const MeshPart &mp, const EdgeLoop &loop)
 same as findMinimalCoLoop with euclidean edge length metric
std::vector< EdgeLoopfindSmallestMetricEquivalentLoops (const MeshTopology &topology, const EdgeLoop &loop, const EdgeMetric &metric, const FaceBitSet *region=nullptr)
std::vector< EdgeLoopfindShortestEquivalentLoops (const MeshPart &mp, const EdgeLoop &loop)
 same as findSmallestMetricEquivalentLoops with euclidean edge length metric
Expected< FaceBitSet > detectTunnelFaces (const MeshPart &mp, const DetectTunnelSettings &settings={})
Expected< void > eliminateTunnels (Mesh &mesh, const FaceBitSet *region={}, const DetectTunnelSettings &settings={})
Expected< void > eliminateTunnels (Mesh &mesh, const FillHoleParams &fillHoleParams, const FaceBitSet *region={}, const DetectTunnelSettings &settings={})
TwoLineSegmClosestPointsf findTwoLineSegmClosestPoints (const LineSegm3f &a, const LineSegm3f &b)
 computes the closest points on two line segments
TwoLineSegmClosestPointsd findTwoLineSegmClosestPoints (const LineSegm3d &a, const LineSegm3d &b)
std::optional< VertBitSet > pointUniformSampling (const PointCloud &pointCloud, const UniformSamplingSettings &settings)
std::optional< PointCloudmakeUniformSampledCloud (const PointCloud &pointCloud, const UniformSamplingSettings &settings)
template<typename I>
TypedBitSet< IfindRootsBitSet (const UnionFind< I > &uf, const TypedBitSet< I > *region=nullptr)
template<typename I>
TypedBitSet< IfindComponentBitSet (UnionFind< I > &uf, I a, const TypedBitSet< I > *region=nullptr)
Expected< MeshuniteManyMeshes (const std::vector< const Mesh * > &meshes, const UniteManyMeshesParams &params={})
template<UnitEnum E>
const UnitInfogetUnitInfo (E unit)=delete
 Returns information about a single measurement unit.
template<UnitEnum E>
bool unitsAreEquivalent (E a, E b)
 Returns true if converting a value between units a and b doesn't change its value.
template<UnitEnum E>
bool unitsAreEquivalent (const std::optional< E > &a, const std::optional< E > &b)
 This version also returns true if a or b is null.
template<UnitEnum E, typename T>
detail::Units::MakeFloatingPoint< T > convertUnits (E from, E to, const T &value)
template<UnitEnum E, typename T>
detail::Units::MakeFloatingPoint< T > convertUnits (const std::optional< E > &from, const std::optional< E > &to, const T &value)
 This version is a no-op if from or to is null.
template<typename T>
getAt (const std::vector< T > &a, size_t id, T def={})
 given some std::vector and a key, returns the value associated with the key, or default value if key is invalid or outside the std::vector
template<typename T, typename I>
getAt (const Vector< T, I > &a, I id, T def={})
 given some Vector and a key, returns the value associated with the key, or default value if key is invalid or outside the Vector
ViewportMask operator& (ViewportMask a, ViewportMask b)
ViewportMask operator| (ViewportMask a, ViewportMask b)
ViewportMask operator^ (ViewportMask a, ViewportMask b)
bool operator== (const ViewportIterator &a, const ViewportIterator &b)
auto begin (ViewportMask mask)
auto end (ViewportMask)
OutEdge opposite (OutEdge e)
void expandVoxelsMask (VoxelBitSet &mask, const VolumeIndexer &indexer, int expansion=1)
 expands VoxelBitSet with given number of steps
void shrinkVoxelsMask (VoxelBitSet &mask, const VolumeIndexer &indexer, int shrinkage=1)
 shrinks VoxelBitSet with given number of steps
Expected< void > decompressZip (const std::filesystem::path &zipFile, const std::filesystem::path &targetFolder, const char *password=nullptr)
 decompresses given zip-file into given folder
Expected< void > decompressZip (std::istream &zipStream, const std::filesystem::path &targetFolder, const char *password=nullptr)
 decompresses given binary stream (containing the data of a zip file only) into given folder
Expected< void > compressZip (const std::filesystem::path &zipFile, const std::filesystem::path &sourceFolder, const CompressZipSettings &settings={})
 compresses given folder in given zip-file
Expected< void > compressZip (const std::filesystem::path &zipFile, const std::filesystem::path &sourceFolder, const std::vector< std::filesystem::path > &excludeFiles, const char *password=nullptr, ProgressCallback cb={})
 compresses given folder in given zip-file
template<typename E>
void throwExceptionFromExpected (const E &err)
 overload toString functoion to throw exception from custom Expected::error type
template<typename T>
decltype(auto) expectedValueOrThrow (T &&e)
 Like e.value(), but throws using throwExceptionFromExpected (which is better, because it allows Python to see the proper error message), and also supports T == void.
template<typename R, typename E, typename... Args>
auto decorateExpected (std::function< Expected< R, E >(Args...)> &&f) -> std::function< R(Args...)>
template<typename F>
auto decorateExpected (F &&f)
template<typename R, typename T, typename... Args>
auto decorateExpected (R(T::*memFunction)(Args...))
Expected< MeshalignTextToMesh (const Mesh &mesh, const TextMeshAlignParams &params)
 Creates symbol mesh and aligns it to given surface.
Expected< MeshbendTextAlongCurve (const CurveFunc &curve, const BendTextAlongCurveParams &params)
Expected< MeshbendTextAlongCurve (const CurvePoints &curve, const BendTextAlongCurveParams &params)
 Creates symbol mesh and deforms it along given curve.
Expected< MeshbendTextAlongSurfacePath (const Mesh &mesh, const GeodesicPath &path, const BendTextAlongCurveParams &params)
 Creates symbol mesh and deforms it along given surface path: start->path->end.
Expected< MeshbendTextAlongSurfacePath (const Mesh &mesh, const SurfacePath &path, const BendTextAlongCurveParams &params)
 Creates symbol mesh and deforms it along given surface path.
Expected< Contours2fcreateSymbolContours (const SymbolMeshParams &params)
 converts text string into set of contours
Expected< MeshcreateSymbolsMesh (const SymbolMeshParams &params)
 converts text string into Z-facing symbol mesh
void reserveKeyEvent (ImGuiKey key)
 call if you want ImGui to take event if this key is pressed (to prevent scene reaction on key press)
void AppendHistory (std::shared_ptr< HistoryAction > action)
 Appends given history action to viewer's global history store.
template<class HistoryActionType, typename... Args>
void AppendHistory (Args &&... args)
 Constructs history action from given arguments, than appends it to viewer's global history store.
void FilterHistoryByCondition (HistoryStackFilter filteringCondition, bool deepFiltering=true)
Expected< std::string > GetClipboardText ()
 returns data in clipboard
Expected< void > SetClipboardText (const std::string &text)
 sets data in clipboard
void createShader (const std::string &shader_name, const std::string &vert_source, const std::string &frag_source, GLuint &prog_id, const DisabledWarnings &suppressedWarns={})
 This function creates shader and logs output.
void destroyShader (GLuint id)
 Destroys shader program.
std::unique_ptr< IDragDropHandlergetDragDropHandler (GLFWwindow *window)
std::filesystem::path openFileDialog (const FileParameters &params={})
void openFileDialogAsync (std::function< void(const std::filesystem::path &)> callback, const FileParameters &params={})
std::vector< std::filesystem::path > openFilesDialog (const FileParameters &params={})
void openFilesDialogAsync (std::function< void(const std::vector< std::filesystem::path > &)> callback, const FileParameters &params={})
std::filesystem::path openFolderDialog (std::filesystem::path baseFolder={})
void openFolderDialogAsync (std::function< void(const std::filesystem::path &)> callback, std::filesystem::path baseFolder={})
std::vector< std::filesystem::path > openFoldersDialog (std::filesystem::path baseFolder={})
std::filesystem::path saveFileDialog (const FileParameters &params={})
 returns empty path on cancel
void saveFileDialogAsync (std::function< void(const std::filesystem::path &)> callback, const FileParameters &params={})
Json::Value GetSystemInfoJson ()
 Accumulate system information in Json value.
void setTextureWrapType (WrapType wrapType, GLenum type=GL_TEXTURE_2D)
void setTextureFilterType (FilterType filterType, GLenum type=GL_TEXTURE_2D)
std::string getLinesVertexShader ()
std::string getLinesFragmentShader (ShaderTransparencyMode mode)
std::string getLinesJointVertexShader ()
std::string getLinesJointFragmentShader ()
std::string getLinesPickerVertexShader ()
std::string getLinesJointPickerVertexShader ()
std::string getMeshVerticesShader ()
std::string getMeshFragmentShader (bool gl4, ShaderTransparencyMode mode, bool msaaEnabled)
std::string getMeshFragmentShaderArgumetsBlock ()
std::string getMeshFragmentShaderColoringBlock ()
std::string getMouseModeString (MouseMode mode)
void excludeLoneEdgesWithHistory (const std::shared_ptr< ObjectMesh > &objMesh)
void excludeAllEdgesWithHistory (const std::shared_ptr< ObjectMesh > &objMesh)
void mapEdgesWithHistory (const std::shared_ptr< ObjectMesh > &objMesh, const WholeEdgeMap &emap)
void mapEdgesWithHistory (const std::shared_ptr< ObjectMesh > &objMesh, const WholeEdgeHashMap &emap)
void mapEdgesWithHistory (const std::shared_ptr< ObjectMesh > &objMesh, const UndirectedEdgeBMap &emap)
void packPointsWithHistory (const std::shared_ptr< ObjectPoints > &objPoints, Reorder reoder)
void packPointsWithHistory (const std::shared_ptr< ObjectPoints > &objPoints, Reorder reoder, VertBitSet newValidVerts)
Expected< LoadedObjectmakeObjectTreeFromFolder (const std::filesystem::path &folder, bool dicomOnly, const ProgressCallback &callback={})
 load all supported files from given folder in new container object
Expected< LoadedObjectmakeObjectTreeFromZip (const std::filesystem::path &zipPath, const ProgressCallback &callback={})
 load all supported files from given zip-archive in new container object
HoleEdgePoint findClosestToMouseHoleEdge (const Vector2i &mousePos, const std::shared_ptr< ObjectMeshHolder > &objMesh, const std::vector< EdgeId > &holeRepresentativeEdges, float accuracy=5.5f, bool attractToVert=false, float cornerAccuracy=10.5f)
HoleEdgePoint findClosestToMouseEdge (const Vector2i &mousePos, const std::vector< std::shared_ptr< ObjectLinesHolder > > &objsLines, float accuracy=5.5f)
HoleEdgePoint findClosestToMouseEdge (const Vector2i &mousePos, const std::vector< std::shared_ptr< ObjectLines > > &objsLines, float accuracy=5.5f)
std::string getPointsVertexShader ()
std::string getPointsFragmentShader (ShaderTransparencyMode mode)
template<typename F, typename... Args>
void pythonAppendOrRun (F func, Args &&... args)
template<typename R, typename... Args>
auto pythonRunFromGUIThread (std::function< R(Args...)> &&f) -> std::function< void(Args...)>
template<typename F>
auto pythonRunFromGUIThread (F &&f)
template<typename R, typename T, typename... Args>
auto pythonRunFromGUIThread (R(T::*memFunction)(Args...))
GLint bindVertexAttribArray (const BindVertexAttribArraySettings &settings)
template<typename T, template< typename, typename... > class C, typename... args>
GLint bindVertexAttribArray (const GLuint program_shader, const char *name, GlBuffer &buf, const C< T, args... > &V, int baseTypeElementsNumber, bool refresh, bool forceUse=false)
template<typename T, std::size_t N>
GLint bindVertexAttribArray (const GLuint program_shader, const char *name, GlBuffer &buf, const std::array< T, N > &V, int baseTypeElementsNumber, bool refresh, bool forceUse=false)
int getDepthFunctionLess (DepthFunction funcType)
int getDepthFunctionLEqual (DepthFunction funcType)
void bindDepthPeelingTextures (GLuint shaderId, const TransparencyMode &tMode, GLenum startGLTextureIndex)
 helper function to bind depth and color buffers to given shader program
void objectPreRenderSetup (const TransparencyMode &tMode, RenderModelPassMask desiredPass, bool deptTesting)
void objectPostRenderSetup (const TransparencyMode &tMode, RenderModelPassMask desiredPass, bool deptTesting)
Vector2i calcTextureRes (int bufferSize, int maxTextWidth)
 calc texture resolution, to fit MAX_TEXTURE_SIZE, and have minimal empty pixels
void renderImGui (const Vector2i &resolution, const std::function< void()> &configureFunc, const std::function< void()> &drawFunc)
const Vector2f & GetAvailableLineWidthRange ()
 Returns the range of line widths that are allowed by current renderer.
Image renderToImage (const Vector2i &resolution, const std::optional< Color > &backgroundColor, const std::function< void(FramebufferData *framebuffer)> &drawFunc)
RibbonConfig createRibbonConfigFromJson (const Json::Value &root)
 parse given json and setup RibbonConfig from it
void applyRibbonConfig (const RibbonConfig &config)
 apply given config to the application
void pushNotification (const RibbonNotification &notification)
 Checks if RibbonMenu is available, if it is - forwards notification to RibbonNotifier. Otherwise - calls showModal() function.
Expected< void > saveObjectToFile (const Object &obj, const std::filesystem::path &filename, const SaveObjectSettings &settings={})
 save visual object (mesh, lines, points or voxels) to file
std::vector< FlatTreegetFlatSubtrees (const std::vector< std::shared_ptr< Object > > &objs)
void mergeSubtree (TypedFlatTree subtree)
 merge objects of same type in the object tree
void mergeSubtree (std::shared_ptr< Object > rootObj)
bool sceneReorderWithUndo (const SceneReorder &task)
bool moveAllChildrenWithUndo (Object &oldParent, Object &newParent, const std::string &historyName="Move Children")
template<typename ObjectT>
std::string getNObjectsLine (unsigned n)
template<typename ObjectT, bool visualRepresentationCheck, bool modelCheck>
std::string sceneSelectedExactly (const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
template<typename ObjectT, bool visualRepresentationCheck, bool modelCheck>
std::string sceneSelectedAtLeast (const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
float SelectCurvaturePreference (PathPreference *pp)
BitSet calculateSelectedPixelsInsidePolygon (const Contour2f &screenPoints)
BitSet calculateSelectedPixelsNearPolygon (const Contour2f &screenPoints, float radiusPix)
FaceBitSet findIncidentFaces (const Viewport &viewport, const BitSet &pixBs, const ObjectMesh &obj, bool onlyVisible=false, bool includeBackfaces=true, const std::vector< ObjectMesh * > *occludingMeshes=nullptr)
void appendGPUVisibleFaces (const Viewport &viewport, const BitSet &pixBs, const std::vector< std::shared_ptr< ObjectMesh > > &objects, std::vector< FaceBitSet > &visibleFaces, bool includeBackfaces=true)
 these meshes can influence face visibility in onlyVisible=true mode
VertBitSet findVertsInViewportArea (const Viewport &viewport, const BitSet &bsVec, const ObjectPoints &obj, bool includeBackfaces=true, bool onlyVisible=false)
std::string getPickerFragmentShader (bool points, bool cornerMode=true)
std::string getFragmentShaderClippingBlock ()
std::string getFragmentShaderPointSizeBlock ()
std::string getFragmentShaderOnlyOddBlock (bool sampleMask)
std::string getFragmentShaderHeaderBlock (bool gl4, bool alphaSort)
std::string getFragmentShaderEndBlock (ShaderTransparencyMode transparencyMode)
std::string getShaderMainBeginBlock (bool addDepthPeelSamplers)
void showModal (const std::string &error, NotificationType type)
 Check if menu is available and if it is, shows modal window.
void showError (const std::string &error)
template<UnitEnum E>
const UnitToStringParams< E > & getDefaultUnitParams ()
template<UnitEnum E>
void setDefaultUnitParams (const UnitToStringParams< E > &newParams)
 Modifies the default parameters for converting a specific unit type to a string.
std::string_view toString (DegreesMode mode)
template<UnitEnum E, detail::Units::Scalar T>
std::string valueToString (T value, const UnitToStringParams< E > &params=getDefaultUnitParams< E >())
template<detail::Units::Scalar T>
std::string valueToString (T value, const VarUnitToStringParams &params)
 This overload lets you select the unit kind at runtime.
template<detail::Units::Scalar T>
int guessPrecision (T value)
 Same but for vectors.
template<detail::Units::Scalar T>
int guessPrecision (T min, T max)
template<typename T>
requires (VectorTraits<T>::size > 1 && detail::Units::Scalar<typename VectorTraits<T>::BaseType>)
int guessPrecision (T value)
 Same but for vectors.
template<typename T>
requires (VectorTraits<T>::size > 1 && detail::Units::Scalar<typename VectorTraits<T>::BaseType>)
int guessPrecision (T min, T max)
template<UnitEnum E, detail::Units::Scalar T>
std::string valueToImGuiFormatString (T value, const UnitToStringParams< E > &params=getDefaultUnitParams< E >())
template<detail::Units::Scalar T>
std::string valueToImGuiFormatString (T value, const VarUnitToStringParams &params)
 This overload lets you select the unit kind at runtime.
int launchDefaultViewer (const Viewer::LaunchParams &params, const ViewerSetup &setup)
 starts default viewer with given params and setup
ViewergetViewerInstance ()
 returns global instance of Viewer class
void incrementForceRedrawFrames (int i=1, bool swapOnLastOnly=false)
ImVec2 position (const ViewportRectangle &rect)
ImVec2 size (const ViewportRectangle &rect)
template<typename T>
Vector4< T > toVec4 (const ViewportRectangle &rect)
Mesh makeCornerControllerMesh (float size, float cornerRatio=0.2f)
 Makes cube mesh with specified face structure for each 3-rank corner, each 2-rank corner and each side:
.
Mesh makeCornerControllerRotationArrowMesh (float size, const Vector2f &shift, bool ccw)
 Makes planar arrow mesh that will be used for controlling in plane rotation in corner near cube controller.
VertUVCoords makeCornerControllerUVCoords (float cornerRatio=0.2f)
 Creates UV coordinates for makeCornerControllerMesh output mesh for texture like:
"Right"" Left "
" Top ""Bottom"
"Front"" Back ".
Vector< MeshTexture, TextureId > loadCornerControllerTextures ()
 Loads 3 textures for corner controller: default, side hovered, corner hovered.
const TexturePerFace & getCornerControllerTexureMap ()
RegionId getCornerControllerRegionByFace (FaceId face)
 returns region id of corner controller by its face
TexturePerFace getCornerControllerHoveredTextureMap (RegionId rId)
 returns textures map with region faces hovered
void updateCurrentViewByControllerRegion (CornerControllerObject::PickedIds pickedId)
 setup camera for selected viewport by corner controller region
bool operator== (const SegmEndColors &a, const SegmEndColors &b)
bool operator== (const ViewportPointsWithColors &a, const ViewportPointsWithColors &b)
void deserializeFromJson (const Json::Value &root, VisualObjectTagManager &manager)
void serializeToJson (const VisualObjectTagManager &manager, Json::Value &root)
std::string getTrivialVertexShader ()
 simple quad vertex shader
std::string getVolumeFragmentShader ()
 shader with raytracing over volume
std::string getVolumePickerFragmentShader ()
 shader with raytracing over volume
Expected< Json::Value > parseResponse (const Json::Value &response)
 returns json value of text or error if response failed
OriginAndDimensions calcOriginAndDimensions (const Box3f &box, float voxelSize)
 computes origin and dimensions of voxel-grid to cover given 3D box with given spacing (voxelSize)
float voxelizeAndComputeVolume (const std::vector< std::shared_ptr< Mesh > > &meshes, const AffineXf3f &xf, const Vector3f &voxelSize)
size_t heapBytes (const FloatGrid &grid)
 returns the amount of heap memory occupied by grid
FloatGrid resampled (const FloatGrid &grid, float voxelScale, ProgressCallback cb={})
 resample this grid to fit voxelScale
FloatGrid resampled (const FloatGrid &grid, const Vector3f &voxelScale, ProgressCallback cb={})
 resample this grid to fit voxelScale
FloatGrid cropped (const FloatGrid &grid, const Box3i &box, ProgressCallback cb={})
 returns cropped grid
size_t countVoxelsWithValuePred (const FloatGrid &grid, const std::function< bool(float)> &pred)
 returns number of velxes in the grid with pred(value) == true
size_t countVoxelsWithValueLess (const FloatGrid &grid, float value)
 returns number of voxels in the grid with value less than given
size_t countVoxelsWithValueGreater (const FloatGrid &grid, float value)
 returns number of voxels in the grid with value greater than given
void gaussianFilter (FloatGrid &grid, int width, int iters, ProgressCallback cb={})
 returns grid with gaussian filter applied
FloatGrid gaussianFiltered (const FloatGrid &grid, int width, int iters, ProgressCallback cb={})
float getValue (const FloatGrid &grid, const Vector3i &p)
 returns the value at given voxel
void setValue (FloatGrid &grid, const Vector3i &p, float value)
void setValue (FloatGrid &grid, const VoxelBitSet &region, float value)
Box3i findActiveBounds (const FloatGrid &grid)
void setValues (FloatGrid &grid, const VoxelBitSet &region, const std::vector< float > &values)
void setLevelSetType (FloatGrid &grid)
 sets type of this grid as LEVEL SET (for normal flipping)
FloatGrid operator+= (FloatGrid &a, FloatGrid &&b)
FloatGrid operator-= (FloatGrid &a, FloatGrid &&b)
FloatGrid operator*= (FloatGrid &a, FloatGrid &&b)
FloatGrid operator+ (const FloatGrid &a, const FloatGrid &b)
FloatGrid operator- (const FloatGrid &a, const FloatGrid &b)
FloatGrid operator* (const FloatGrid &a, const FloatGrid &b)
Expected< MeshmarchingCubes (const SimpleVolume &volume, const MarchingCubesParams &params={})
 makes Mesh from SimpleVolume with given settings using Marching Cubes algorithm
Expected< TriMeshmarchingCubesAsTriMesh (const SimpleVolume &volume, const MarchingCubesParams &params={})
Expected< MeshmarchingCubes (const SimpleVolumeMinMax &volume, const MarchingCubesParams &params={})
 makes Mesh from SimpleVolumeMinMax with given settings using Marching Cubes algorithm
Expected< TriMeshmarchingCubesAsTriMesh (const SimpleVolumeMinMax &volume, const MarchingCubesParams &params={})
Expected< MeshmarchingCubes (const VdbVolume &volume, const MarchingCubesParams &params={})
 makes Mesh from VdbVolume with given settings using Marching Cubes algorithm
Expected< TriMeshmarchingCubesAsTriMesh (const VdbVolume &volume, const MarchingCubesParams &params={})
Expected< MeshmarchingCubes (const FunctionVolume &volume, const MarchingCubesParams &params={})
 makes Mesh from FunctionVolume with given settings using Marching Cubes algorithm
Expected< TriMeshmarchingCubesAsTriMesh (const FunctionVolume &volume, const MarchingCubesParams &params={})
Expected< MeshmarchingCubes (const SimpleBinaryVolume &volume, const MarchingCubesParams &params={})
 makes Mesh from SimpleBinaryVolume with given settings using Marching Cubes algorithm
Expected< TriMeshmarchingCubesAsTriMesh (const SimpleBinaryVolume &volume, const MarchingCubesParams &params={})
Expected< SimpleVolumeMinMaxmeshToDistanceVolume (const MeshPart &mp, const MeshToDistanceVolumeParams &params)
 makes SimpleVolume filled with (signed or unsigned) distances from Mesh with given settings
FunctionVolume meshToDistanceFunctionVolume (const MeshPart &mp, const MeshToDistanceVolumeParams &params)
 makes FunctionVolume representing (signed or unsigned) distances from Mesh with given settings
Expected< SimpleBinaryVolume > makeCloseToMeshVolume (const MeshPart &mp, const CloseToMeshVolumeParams &params)
 makes a binary volume with close-to-surface predicate values according to the given parameters
Expected< SimpleVolumeMinMaxmeshRegionToIndicatorVolume (const Mesh &mesh, const FaceBitSet &region, float offset, const DistanceVolumeParams &params)
Expected< std::array< SimpleVolumeMinMax, 3 > > meshToDirectionVolume (const MeshToDirectionVolumeParams &params)
const std::string & defaultSerializeVoxelsFormat ()
void setDefaultSerializeVoxelsFormat (std::string newFormat)
float suggestVoxelSize (const MeshPart &mp, float approxNumVoxels)
 computes size of a cubical voxel to get approximately given number of voxels during rasterization
Expected< MeshoffsetMesh (const MeshPart &mp, float offset, const OffsetParameters &params={})
Expected< MeshdoubleOffsetMesh (const MeshPart &mp, float offsetA, float offsetB, const OffsetParameters &params={})
Expected< MeshmcOffsetMesh (const MeshPart &mp, float offset, const OffsetParameters &params={}, Vector< VoxelId, FaceId > *outMap=nullptr)
Expected< MeshmcShellMeshRegion (const Mesh &mesh, const FaceBitSet &region, float offset, const BaseShellParameters &params, Vector< VoxelId, FaceId > *outMap=nullptr)
Expected< MeshsharpOffsetMesh (const MeshPart &mp, float offset, const SharpOffsetParameters &params={})
Expected< MeshgeneralOffsetMesh (const MeshPart &mp, float offset, const GeneralOffsetParameters &params)
Expected< MeshthickenMesh (const Mesh &mesh, float offset, const GeneralOffsetParameters &params={}, const PartMapping &map={})
 mapping between original mesh and thicken result
Expected< MeshoffsetOneDirection (const MeshPart &mp, float offset, const GeneralOffsetParameters &params={})
Expected< MeshoffsetPolyline (const Polyline3 &polyline, float offset, const OffsetParameters &params={})
void translateToZero (openvdb::FloatGrid &grid)
template<typename GridT>
RangeSize calculateRangeSize (const GridT &grid)
Expected< MeshpartialOffsetMesh (const MeshPart &mp, float offset, const GeneralOffsetParameters &params={})
Expected< SimpleVolume > pointsToDistanceVolume (const PointCloud &cloud, const PointsToDistanceVolumeParams &params)
 makes SimpleVolume filled with signed distances to points with normals
FunctionVolume pointsToDistanceFunctionVolume (const PointCloud &cloud, const PointsToDistanceVolumeParams &params)
 makes FunctionVolume representing signed distances to points with normals
Expected< VertColors > calcAvgColors (const PointCloud &cloud, const VertColors &colors, const VertCoords &tgtPoints, const VertBitSet &tgtVerts, float sigma, const ProgressCallback &cb={})
Expected< MeshpointsToMeshFusion (const PointCloud &cloud, const PointsToMeshParameters &params)
Expected< FloatGridpolylineToDistanceField (const Polyline3 &polyline, const PolylineToDistanceVolumeParams &params)
 convert polyline to voxels distance field
Expected< VdbVolume > polylineToVdbVolume (const Polyline3 &polyline, const PolylineToDistanceVolumeParams &params)
 convert polyline to VDB volume
Expected< SimpleVolume > polylineToSimpleVolume (const Polyline3 &polyline, const PolylineToVolumeParams &params)
 convert polyline to simple volume
Expected< FunctionVolumepolylineToFunctionVolume (const Polyline3 &polyline, const PolylineToVolumeParams &params)
 convert polyline to function volume
Expected< MeshrebuildMesh (const MeshPart &mp, const RebuildMeshSettings &settings)
std::function< float(const char *)> getTypeConverter (ScalarType scalarType, Uint64 range, Int64 min)
template<typename F>
std::invoke_result_t< F, int > visitScalarType (F &&f, ScalarType scalarType, const char *c)
 More general template to pass a single value of specified format scalarType to a generic function f.
void sortScansByOrder (std::vector< std::filesystem::path > &scans, std::vector< SliceInfo > &zOrder)
 Sort scan files in given vector by given slice information.
void putScanFileNameInZ (const std::vector< std::filesystem::path > &scans, std::vector< SliceInfo > &zOrder)
 Read layer heights from given scan file names.
void sortScanFilesByName (std::vector< std::filesystem::path > &scans)
 Sort scan files in given vector by names (respect numbers in it)
Box3f computeWorkArea (const Polyline3 &toolpath, const MeshPart &tool)
 Compute bounding box for swept volume for given tool and toolpath.
Box3i computeGridBox (const Box3f &workArea, float voxelSize)
 Compute required voxel volume's dimensions for given work area.
Expected< MeshcomputeSweptVolumeWithMeshMovement (const ComputeSweptVolumeParameters &params)
Expected< MeshcomputeSweptVolumeWithDistanceVolume (const ComputeSweptVolumeParameters &params)
Expected< MeshcomputeSweptVolumeWithCustomToolDistance (IComputeToolDistance &comp, const ComputeSweptVolumeParameters &params)
Expected< std::array< SimpleVolumeMinMax, 3 > > teethMaskToDirectionVolume (const VdbVolume &volume, const std::vector< int > &additionalIds={})
 A shortcut for TeethMaskToDirectionVolumeConvertor::create and TeethMaskToDirectionVolumeConvertor::convertAll.
Expected< ToolPathResultconstantZToolPath (const MeshPart &mp, const ToolPathParams &params)
Expected< ToolPathResultlacingToolPath (const MeshPart &mp, const ToolPathParams &params, Axis cutDirection)
 Slices are built along the axis defined by cutDirection argument (can be Axis::X or Axis::Y)
Expected< ToolPathResultconstantCuspToolPath (const MeshPart &mp, const ConstantCuspParams &params)
std::shared_ptr< ObjectGcodeexportToolPathToGCode (const std::vector< GCommand > &commands)
 generates G-Code for milling tool
Expected< void > interpolateLines (std::vector< GCommand > &commands, const LineInterpolationParams &params, Axis axis)
 interpolates several points lying on the same straight line with one move
Expected< void > interpolateArcs (std::vector< GCommand > &commands, const ArcInterpolationParams &params, Axis axis)
 interpolates given path with arcs
FaceBitSet smoothSelection (Mesh &mesh, const FaceBitSet &region, float expandOffset, float shrinkOffset)
FloatGrid meshToLevelSet (const MeshPart &mp, const AffineXf3f &xf, const Vector3f &voxelSize, float surfaceOffset=3, ProgressCallback cb={})
FloatGrid meshToDistanceField (const MeshPart &mp, const AffineXf3f &xf, const Vector3f &voxelSize, float surfaceOffset=3, ProgressCallback cb={})
void evalGridMinMax (const FloatGrid &grid, float &min, float &max)
 eval min max value from FloatGrid
Expected< VdbVolume > meshToDistanceVdbVolume (const MeshPart &mp, const MeshToVolumeParams &params={})
Expected< VdbVolume > meshToVolume (const MeshPart &mp, const MeshToVolumeParams &params={})
VdbVolume floatGridToVdbVolume (FloatGrid grid)
 fills VdbVolume data from FloatGrid (does not fill voxels size, cause we expect it outside)
FloatGrid simpleVolumeToDenseGrid (const SimpleVolume &simpleVolume, float background=0.0f, ProgressCallback cb={})
VdbVolume simpleVolumeToVdbVolume (const SimpleVolumeMinMax &simpleVolume, ProgressCallback cb={})
 set the simpleVolume.min as the background value
VdbVolume functionVolumeToVdbVolume (const FunctionVolume &functoinVolume, ProgressCallback cb={})
template<typename AccessorOrGrid>
void putSimpleVolumeInDenseGrid (AccessorOrGrid &gridAccessor, const Vector3i &minCoord, const SimpleVolume &simpleVolume, ProgressCallback cb={})
 Copy given simpleVolume into the grid, starting at minCoord Instantiated for AccessorOrGrid in { openvdb::FloatGrid::Accessor, FloatGrid, openvdb::FloatGrid }. The template is used to not include openvdb's mess into this header (forward declaring classes in openvdb is also non-trivial). When used with a Grid, multithreaded implementation of copying is used (so the function is not thread safe). When used with an Accessor, this function could be called from different threads on the same volume (provided that accessors are different, of course).
Expected< SimpleVolumeMinMaxvdbVolumeToSimpleVolume (const VdbVolume &vdbVolume, const Box3i &activeBox=Box3i(), ProgressCallback cb={})
Expected< SimpleVolumeMinMaxvdbVolumeToSimpleVolumeNorm (const VdbVolume &vdbVolume, const Box3i &activeBox=Box3i(), std::optional< MinMaxf > sourceScale={}, ProgressCallback cb={})
Expected< SimpleVolumeMinMaxU16 > vdbVolumeToSimpleVolumeU16 (const VdbVolume &vdbVolume, const Box3i &activeBox=Box3i(), std::optional< MinMaxf > sourceScale={}, ProgressCallback cb={})
Expected< MeshgridToMesh (const FloatGrid &grid, const GridToMeshSettings &settings)
 converts OpenVDB Grid into mesh using Dual Marching Cubes algorithm
Expected< MeshgridToMesh (FloatGrid &&grid, const GridToMeshSettings &settings)
Expected< void > makeSignedByWindingNumber (FloatGrid &grid, const Vector3f &voxelSize, const Mesh &refMesh, const MakeSignedByWindingNumberSettings &settings)
 set signs for unsigned distance field grid using generalized winding number computed at voxel grid point from refMesh
Expected< MeshdoubleOffsetVdb (const MeshPart &mp, const DoubleOffsetSettings &settings)
MR_BIND_IGNORE openvdb::FloatGrid & ovdb (OpenVdbFloatGrid &v)
MR_BIND_IGNORE const openvdb::FloatGrid & ovdb (const OpenVdbFloatGrid &v)
MR_BIND_IGNORE FloatGrid MakeFloatGrid (const FloatGrid &)=delete
 prohibit unnecessary conversion
MR_BIND_IGNORE FloatGrid MakeFloatGrid (openvdb::FloatGrid::Ptr &&p)
 makes MR::FloatGrid shared pointer taking the contents of the input pointer
MR_BIND_IGNORE Vector3i fromVdb (const openvdb::Coord &v)
MR_BIND_IGNORE openvdb::Coord toVdb (const Vector3i &v)
MR_BIND_IGNORE Box3i fromVdbBox (const openvdb::CoordBBox &box)
MR_BIND_IGNORE openvdb::CoordBBox toVdbBox (const Box3i &box)
MR_BIND_IGNORE openvdb::CoordBBox toVdbBox (const Vector3i &dims)
template<typename Accessor>
SimpleVolumeMinMax resampleVolumeByInterpolation (const typename Accessor::VolumeType &volume, const Accessor &accessor, const Vector3f &newVoxelSize)
 sample function that resamples the voxel volume using interpolating accessor
Expected< MR::MeshmeshFromVoxelsMask (const VdbVolume &volume, const VoxelBitSet &mask)
 Creates mesh from voxels mask.
Expected< MR::MeshsegmentVolume (const VdbVolume &volume, const std::vector< std::pair< Vector3f, Vector3f > > &pairs, const VolumeSegmentationParameters &params=VolumeSegmentationParameters())
 Simple segment volume.
Expected< std::vector< Mesh > > segmentVoxelMaskToInstances (const VdbVolume &mask, size_t minSize=100, ProgressCallback cb={})
VdbVolume voxelFilter (const VdbVolume &volume, VoxelFilterType type, int width)
Expected< VoxelBitSet > segmentVolumeByGraphCut (const SimpleVolume &densityVolume, float k, const VoxelBitSet &sourceSeeds, const VoxelBitSet &sinkSeeds, ProgressCallback cb={})
 Segment voxels of given volume on two sets using graph-cut, returning source set.
VoxelsMetric voxelsExponentMetric (const VdbVolume &voxels, const VoxelMetricParameters &parameters, float modifier=-1.0f)
 e^(modifier*(dens1+dens2))
VoxelsMetric voxelsSumDiffsMetric (const VdbVolume &voxels, const VoxelMetricParameters &parameters)
 sum of dense differences with start and stop voxels
std::vector< size_t > buildSmallestMetricPath (const VdbVolume &voxels, const VoxelsMetric &metric, size_t start, size_t finish, ProgressCallback cb={})
 builds shortest path in given metric from start to finish voxels; if no path can be found then empty path is returned
TransformVdbVolumeResult transformVdbVolume (const VdbVolume &volume, const AffineXf3f &xf, bool fixBox=false, const Box3f &box={})
bool voxelsApplyTransform (ObjectVoxels &obj, const AffineXf3f &xf, bool fixBox)
template<typename Volume>
Expected< void > mergeVolumePart (Mesh &mesh, std::vector< EdgePath > &cutContours, Volume &&volume, float leftCutPosition, float rightCutPosition, const MergeVolumePartSettings &settings={})
 Merge one mesh with another generated from a voxel volume part.
template<typename Volume>
Expected< MeshvolumeToMeshByParts (const VolumePartBuilder< Volume > &builder, const Vector3i &dimensions, const Vector3f &voxelSize, const VolumeToMeshByPartsSettings &settings={}, const MergeVolumePartSettings &mergeSettings={})
 converts a voxel volume into a mesh without full memory loading
MRVOXELS_CLASS VoxelsVolumeMinMax< Vector< float, VoxelId > > (SimpleVolumeMinMaxU16, VoxelsVolumeMinMax< Vector< uint16_t, VoxelId > >)(VdbVolume
MRVOXELS_CLASS VoxelsVolume< VoxelValueGetter< float > > (FunctionVolumeU8, VoxelsVolume< VoxelValueGetter< uint8_t > >)(SimpleVolume
MRVOXELS_CLASS VoxelsVolume< Vector< float, VoxelId > > (SimpleVolumeU16, VoxelsVolume< Vector< uint16_t, VoxelId > >)(SimpleBinaryVolume
Expected< std::vector< std::shared_ptr< ObjectVoxels > > > makeObjectVoxelsFromFile (const std::filesystem::path &file, ProgressCallback callback={})
 loads voxels from given file in new object
Expected< LoadedObjectsmakeObjectFromVoxelsFile (const std::filesystem::path &file, const ProgressCallback &callback={})
Expected< void > saveObjectVoxelsToFile (const Object &object, const std::filesystem::path &path, const ObjectSave::Settings &settings)
Expected< SimpleVolumeMinMaxfunctionVolumeToSimpleVolume (const FunctionVolume &volume, const ProgressCallback &callback={})
 converts function volume into simple volume
bool fromSameTriangle (const MeshTopology &topology, EdgePoint &a, EdgePoint &b)
bool fromSameTriangle (const MeshTopology &topology, EdgePoint &&a, EdgePoint &&b)
template<typename V>
std::pair< QuadraticForm< V >, V > sum (const QuadraticForm< V > &q0, const V &x0, const QuadraticForm< V > &q1, const V &x1, bool minAmong01=false)
 if true then the minimum is selected only between points x0 and x1
template<typename V>
QuadraticForm< V > sumAt (const QuadraticForm< V > &q0, const V &x0, const QuadraticForm< V > &q1, const V &x1, const V &pos)
template<typename From>
Contour2f convertContourTo2f (const From &from)
 Instantiate the templates when generating bindings.
template<typename From>
Contour3f convertContourTo3f (const From &from)
template<typename From>
Contour2d convertContourTo2d (const From &from)
template<typename From>
Contour3d convertContourTo3d (const From &from)
template<typename From>
Contours2f convertContoursTo2f (const From &from)
template<typename From>
Contours3f convertContoursTo3f (const From &from)
template<typename From>
Contours2d convertContoursTo2d (const From &from)
template<typename From>
Contours3d convertContoursTo3d (const From &from)
EdgeMetric identityMetric ()
 metric returning 1 for every edge
EdgeMetric edgeLengthMetric (const Mesh &mesh)
EdgeMetric edgeLengthMetric (const MeshTopology &topology, const VertCoords &points)
EdgeMetric discreteAbsMeanCurvatureMetric (const Mesh &mesh)
EdgeMetric discreteAbsMeanCurvatureMetric (const MeshTopology &topology, const VertCoords &points)
EdgeMetric discreteMinusAbsMeanCurvatureMetric (const Mesh &mesh)
EdgeMetric discreteMinusAbsMeanCurvatureMetric (const MeshTopology &topology, const VertCoords &points)
EdgeMetric edgeCurvMetric (const Mesh &mesh, float angleSinFactor=2, float angleSinForBoundary=0)
EdgeMetric edgeCurvMetric (const MeshTopology &topology, const VertCoords &points, float angleSinFactor=2, float angleSinForBoundary=0)
EdgeMetric edgeAbsCurvMetric (const Mesh &mesh, float angleSinFactor=2, float angleSinForBoundary=0)
EdgeMetric edgeAbsCurvMetric (const MeshTopology &topology, const VertCoords &points, float angleSinFactor=2, float angleSinForBoundary=0)
EdgeMetric edgeTableSymMetric (const MeshTopology &topology, const EdgeMetric &metric)
bool isEdgePath (const MeshTopology &topology, const std::vector< EdgeId > &edges)
 returns true if every next edge starts where previous edge ends
bool isEdgeLoop (const MeshTopology &topology, const std::vector< EdgeId > &edges)
 returns true if every next edge starts where previous edge ends, and start vertex coincides with finish vertex
std::vector< EdgeLoopsplitOnSimpleLoops (const MeshTopology &topology, std::vector< EdgeLoop > &&loops)
 given a number of edge loops, splits every loop that passes via a vertex more than once on smaller loops without self-intersections
void reverse (EdgePath &path)
void reverse (std::vector< EdgePath > &paths)
 reverse every path in the vector
double calcPathMetric (const EdgePath &path, EdgeMetric metric)
 computes summed metric of all edges in the path
double calcPathLength (const EdgePath &path, const Mesh &mesh)
Vector3d calcOrientedArea (const EdgeLoop &loop, const Mesh &mesh)
void sortPathsByMetric (std::vector< EdgePath > &paths, EdgeMetric metric)
 sorts given paths in ascending order of their metrics
void sortPathsByLength (std::vector< EdgePath > &paths, const Mesh &mesh)
void addLeftBand (const MeshTopology &topology, const EdgeLoop &loop, FaceBitSet &addHere)
 adds all faces incident to loop vertices and located to the left from the loop to given FaceBitSet
EdgePath buildShortestPath (const Mesh &mesh, VertId start, VertId finish, float maxPathLen=FLT_MAX)
EdgePath buildShortestPathBiDir (const Mesh &mesh, VertId start, VertId finish, float maxPathLen=FLT_MAX)
EdgePath buildShortestPathBiDir (const Mesh &mesh, const MeshTriPoint &start, const MeshTriPoint &finish, VertId *outPathStart=nullptr, VertId *outPathFinish=nullptr, float maxPathLen=FLT_MAX)
EdgePath buildShortestPathAStar (const Mesh &mesh, VertId start, VertId finish, float maxPathLen=FLT_MAX)
EdgePath buildShortestPathAStar (const Mesh &mesh, const MeshTriPoint &start, const MeshTriPoint &finish, VertId *outPathStart=nullptr, VertId *outPathFinish=nullptr, float maxPathLen=FLT_MAX)
EdgePath buildShortestPath (const Mesh &mesh, VertId start, const VertBitSet &finish, float maxPathLen=FLT_MAX)
 builds shortest path in euclidean metric from start to finish vertices; if no path can be found then empty path is returned
EdgePath buildSmallestMetricPath (const MeshTopology &topology, const EdgeMetric &metric, VertId start, VertId finish, float maxPathMetric=FLT_MAX)
 builds shortest path in given metric from start to finish vertices; if no path can be found then empty path is returned
EdgePath buildSmallestMetricPathBiDir (const MeshTopology &topology, const EdgeMetric &metric, VertId start, VertId finish, float maxPathMetric=FLT_MAX)
EdgePath buildSmallestMetricPathBiDir (const MeshTopology &topology, const EdgeMetric &metric, const TerminalVertex *starts, int numStarts, const TerminalVertex *finishes, int numFinishes, VertId *outPathStart=nullptr, VertId *outPathFinish=nullptr, float maxPathMetric=FLT_MAX)
EdgePath buildSmallestMetricPath (const MeshTopology &topology, const EdgeMetric &metric, VertId start, const VertBitSet &finish, float maxPathMetric=FLT_MAX)
 builds shortest path in given metric from start to finish vertices; if no path can be found then empty path is returned
std::vector< VertId > getVertexOrdering (const MeshTopology &topology, VertBitSet region)
 returns all vertices from given region ordered in each connected component in breadth-first way
std::vector< EdgeLoopextractClosedLoops (const MeshTopology &topology, EdgeBitSet &edges)
 finds all closed loops from given edges and removes them from edges
std::vector< EdgeLoopextractClosedLoops (const MeshTopology &topology, const std::vector< EdgeId > &inEdges, EdgeBitSet *outNotLoopEdges=nullptr)
EdgeLoop extractLongestClosedLoop (const Mesh &mesh, const std::vector< EdgeId > &inEdges)
bool dilateRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, FaceBitSet &region, float dilation, ProgressCallback callback={})
 expands the region (of faces or vertices) on given metric value. returns false if callback also returns false
bool dilateRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, VertBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, FaceBitSet &region, float dilation, ProgressCallback callback={})
 shrinks the region (of faces or vertices) on given metric value. returns false if callback also returns false
bool erodeRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, VertBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegionByMetric (const MeshTopology &topology, const EdgeMetric &metric, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegion (const Mesh &mesh, FaceBitSet &region, float dilation, ProgressCallback callback={})
 expands the region (of faces or vertices) on given value (in meters). returns false if callback also returns false
bool dilateRegion (const Mesh &mesh, VertBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegion (const Mesh &mesh, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegion (const MeshTopology &topology, const VertCoords &points, FaceBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegion (const MeshTopology &topology, const VertCoords &points, VertBitSet &region, float dilation, ProgressCallback callback={})
bool dilateRegion (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegion (const Mesh &mesh, FaceBitSet &region, float dilation, ProgressCallback callback={})
 shrinks the region (of faces or vertices) on given value (in meters). returns false if callback also returns false
bool erodeRegion (const Mesh &mesh, VertBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegion (const Mesh &mesh, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegion (const MeshTopology &topology, const VertCoords &points, FaceBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegion (const MeshTopology &topology, const VertCoords &points, VertBitSet &region, float dilation, ProgressCallback callback={})
bool erodeRegion (const MeshTopology &topology, const VertCoords &points, UndirectedEdgeBitSet &region, float dilation, ProgressCallback callback={})
int getPathPlaneIntersections (const Mesh &mesh, const EdgePath &path, const Plane3f &plane, std::vector< MeshEdgePoint > *outIntersections=nullptr)
 finds all intersection points between given path and plane, adds them in outIntersections and returns their number
int getContourPlaneIntersections (const Contour3f &path, const Plane3f &plane, std::vector< Vector3f > *outIntersections=nullptr)
 finds all intersection points between given contour and plane, adds them in outIntersections and returns their number
int getPathEdgesInPlane (const Mesh &mesh, const EdgePath &path, const Plane3f &plane, float tolerance=0.0f, std::vector< EdgeId > *outInPlaneEdges=nullptr)
 finds all path edges located in given plane with given tolerance, adds them in outInPlaneEdges and returns their number
BooleanResult boolean (const Mesh &meshA, const Mesh &meshB, BooleanOperation operation, const AffineXf3f *rigidB2A, BooleanResultMapper *mapper=nullptr, ProgressCallback cb={})
 Performs CSG operation on two meshes.
BooleanResult boolean (Mesh &&meshA, Mesh &&meshB, BooleanOperation operation, const AffineXf3f *rigidB2A, BooleanResultMapper *mapper=nullptr, ProgressCallback cb={})
BooleanResult boolean (const Mesh &meshA, const Mesh &meshB, BooleanOperation operation, const BooleanParameters &params={})
BooleanResult boolean (Mesh &&meshA, Mesh &&meshB, BooleanOperation operation, const BooleanParameters &params={})
Expected< MeshselfBoolean (const Mesh &mesh)
Contours3f findIntersectionContours (const Mesh &meshA, const Mesh &meshB, const AffineXf3f *rigidB2A=nullptr)
 returns intersection contours of given meshes
Expected< BooleanResultPoints, std::string > getBooleanPoints (const Mesh &meshA, const Mesh &meshB, BooleanOperation operation, const AffineXf3f *rigidB2A=nullptr)
 Returns the points of mesh boolean's result mesh.
void convertIntFloatAllVerts (Mesh &mesh, const CoordinateConverters &conv)
Expected< LoadedObjectMeshmakeObjectMeshFromFile (const std::filesystem::path &file, const ProgressCallback &cb={})
 loads mesh from given file in new object
Expected< LoadedObjectmakeObjectFromMeshFile (const std::filesystem::path &file, const ProgressCallback &cb={}, bool returnOnlyMesh=false)
 loads data from given file and makes either ObjectMesh, ObjectLines or ObjectPoints (if the file has points or edges but not faces)
Expected< ObjectLinesmakeObjectLinesFromFile (const std::filesystem::path &file, ProgressCallback callback={})
 loads lines from given file in new object
Expected< ObjectPointsmakeObjectPointsFromFile (const std::filesystem::path &file, ProgressCallback callback={})
 loads points from given file in new object
Expected< ObjectDistanceMapmakeObjectDistanceMapFromFile (const std::filesystem::path &file, ProgressCallback callback={})
 loads distance map from given file in new object
Expected< ObjectGcodemakeObjectGcodeFromFile (const std::filesystem::path &file, ProgressCallback callback={})
 loads gcode from given file in new object
Expected< LoadedObjectsloadObjectFromFile (const std::filesystem::path &filename, const ProgressCallback &callback={})
 load all objects (or any type: mesh, lines, points, voxels or scene) from file
bool isSupportedFileInSubfolders (const std::filesystem::path &folder)
 checks if there are any supported files folder and subfolders
Expected< LoadedObjectloadSceneFromAnySupportedFormat (const std::filesystem::path &path, const ProgressCallback &callback={})
 tries to load scene from every format listed in SceneFormatFilters
LoadedObject makeObjectMesh (std::string objName, LoadedMeshData data)
 constructs new ObjectMesh from the given data
Expected< LoadedObjectdeserializeObjectTree (const std::filesystem::path &path, const FolderCallback &postDecompress={}, const ProgressCallback &progressCb={})
 loads objects tree from given scene file (zip/mru)
Expected< LoadedObjectdeserializeObjectTreeFromFolder (const std::filesystem::path &folder, const ProgressCallback &progressCb={})
 loads objects tree from given scene folder
IOFilters getAllFilters ()
 returns filters for all supported file formats for all types of objects
template<typename ObjectT = Object>
std::shared_ptr< ObjectT > asSelectivityType (std::shared_ptr< Object > obj, const ObjectSelectivityType &type)
 if input object is of given type then returns another pointer on it
template<typename ObjectT = Object>
std::vector< std::shared_ptr< ObjectT > > getAllObjectsInTree (Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
template<typename ObjectT = Object>
MR_BIND_IGNORE std::vector< std::shared_ptr< ObjectT > > getAllObjectsInTree (Object &root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
template<typename ObjectT = Object>
std::vector< std::shared_ptr< ObjectT > > getTopmostVisibleObjects (Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
 Returns all topmost visible objects of given type (if an object is returned, its children are not) excluding root.
template<typename ObjectT = Object>
MR_BIND_IGNORE std::vector< std::shared_ptr< ObjectT > > getTopmostVisibleObjects (Object &root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable)
template<typename ObjectT = Object>
std::vector< std::shared_ptr< ObjectT > > getTopmostObjects (Object *root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable, bool visibilityCheck=false)
 Returns all topmost objects of given type (if an object is returned, its children are not) excluding root.
template<typename ObjectT = Object>
MR_BIND_IGNORE std::vector< std::shared_ptr< ObjectT > > getTopmostObjects (Object &root, const ObjectSelectivityType &type=ObjectSelectivityType::Selectable, bool visibilityCheck=false)
template<typename ObjectT = Object>
std::shared_ptr< ObjectT > getDepthFirstObject (Object *root, const ObjectSelectivityType &type)
 return first object of given type in depth-first traverse order excluding root
template<typename ObjectT = Object>
MR_BIND_IGNORE std::shared_ptr< ObjectT > getDepthFirstObject (Object &root, const ObjectSelectivityType &type)
template<typename T>
Vector2< T > fromEigen (const Eigen::Matrix< T, 2, 1 > &ev)
template<typename T>
Eigen::Matrix< T, 2, 1 > toEigen (const Vector2< T > &v)
template<typename T>
Eigen::Matrix< T, 2, 2 > toEigen (const SymMatrix2< T > &m)
template<typename T>
Eigen::Matrix< T, 2, 2 > toEigen (const Matrix2< T > &m)
template<typename T>
Matrix2< T > fromEigen (const Eigen::Matrix< T, 2, 2 > &m)
template<typename T>
Vector3< T > fromEigen (const Eigen::Matrix< T, 3, 1 > &ev)
template<typename T>
Eigen::Matrix< T, 3, 1 > toEigen (const Vector3< T > &v)
template<typename T>
Eigen::Matrix< T, 3, 3 > toEigen (const SymMatrix3< T > &m)
template<typename T>
Eigen::Matrix< T, 3, 3 > toEigen (const Matrix3< T > &m)
template<typename T>
Matrix3< T > fromEigen (const Eigen::Matrix< T, 3, 3 > &m)
template<typename T>
Eigen::Matrix< T, 4, 4 > toEigen (const SymMatrix4< T > &m)
template<typename T>
Eigen::Matrix< T, 4, 4 > toEigen (const Matrix4< T > &m)
template<typename T>
Matrix4< T > fromEigen (const Eigen::Matrix< T, 4, 4 > &m)
template<typename T>
Vector4< T > fromEigen (const Eigen::Matrix< T, 4, 1 > &ev)
template<typename T>
Eigen::Matrix< T, 4, 1 > toEigen (const Vector4< T > &v)
template<typename T>
Eigen::Matrix< T, 4, 1 > toEigen (const Vector3< T > &v, T w)
template<typename T>
Quaternion< T > fromEigen (const Eigen::Quaternion< T > &eq)
template<typename T>
Eigen::Quaternion< T > toEigen (const Quaternion< T > &q)
template<size_t I, typename T>
constexpr const T & get (const Vector2< T > &v) noexcept
template<size_t I, typename T>
constexpr T & get (Vector2< T > &v) noexcept
template<size_t I, typename T>
constexpr const T & get (const Vector3< T > &v) noexcept
template<size_t I, typename T>
constexpr T & get (Vector3< T > &v) noexcept
template<size_t I, typename T>
constexpr const T & get (const Vector4< T > &v) noexcept
template<size_t I, typename T>
constexpr T & get (Vector4< T > &v) noexcept
template<size_t I, typename T>
constexpr const Matrix2< T >::VectorType & get (const Matrix2< T > &m) noexcept
template<size_t I, typename T>
constexpr Matrix2< T >::VectorType & get (Matrix2< T > &m) noexcept
template<size_t I, typename T>
constexpr const Matrix3< T >::VectorType & get (const Matrix3< T > &m) noexcept
template<size_t I, typename T>
constexpr Matrix3< T >::VectorType & get (Matrix3< T > &m) noexcept
template<size_t I, typename T>
constexpr const Matrix4< T >::VectorType & get (const Matrix4< T > &m) noexcept
template<size_t I, typename T>
constexpr Matrix4< T >::VectorType & get (Matrix4< T > &m) noexcept
template<size_t I, typename V>
constexpr const std::tuple_element< I, AffineXf< V > >::type & get (const AffineXf< V > &m) noexcept
template<size_t I, typename V>
constexpr std::tuple_element< I, AffineXf< V > >::type & get (AffineXf< V > &m) noexcept
template<size_t I, typename T>
constexpr int get (const MR::Id< T > &id) noexcept
template<size_t I, typename T>
constexpr int & get (MR::Id< T > &id) noexcept
template<size_t I>
constexpr const uint8_t & get (const Color &c) noexcept
template<size_t I>
constexpr uint8_t & get (Color &c) noexcept

Variables

const IOFilters AllFilter
constexpr float cQuietNan = std::numeric_limits<float>::quiet_NaN()
constexpr int cQuietNanBits = std::bit_cast< int >( cQuietNan )
constexpr NoInit noInit
template<typename T>
struct MRMESH_CLASS NoDefInit
class MRMESH_CLASS EdgeTag
class MRMESH_CLASS UndirectedEdgeTag
class MRMESH_CLASS FaceTag
class MRMESH_CLASS VertTag
class MRMESH_CLASS PixelTag
class MRMESH_CLASS VoxelTag
class MRMESH_CLASS RegionTag
class MRMESH_CLASS NodeTag
class MRMESH_CLASS ObjTag
class MRMESH_CLASS TextureTag
class MRMESH_CLASS GraphVertTag
class MRMESH_CLASS GraphEdgeTag
template<>
class MRMESH_CLASS Id< GraphEdgeTag > class MR::EdgeId Id< EdgeTag >
template<>
class MR::VoxelId Id< VoxelTag >
class MRMESH_CLASS I = size_t> class MRMESH_CLASS Buffer
class MRMESH_CLASS BitSet
template<typename T>
 struct
MRMESH_CLASS Vector2
MRMESH_CLASS Vector2b
MRMESH_CLASS Vector3
MRMESH_CLASS Vector3b
 Vector4
 Vector4b
 Matrix2
 Matrix2b
 Matrix3
 Matrix3b
 Matrix4
 Matrix4b
 SymMatrix2
 SymMatrix2b
 SymMatrix3
 SymMatrix3b
 SymMatrix4
 SymMatrix4b
 AffineXf
 AffineXf2f
 RigidXf3
 RigidXf3f
 RigidScaleXf3
 RigidScaleXf3f
 Sphere
 Sphere2f
 Line
 Line2f
 LineSegm
 LineSegm2f
 Parabola
 Parabolaf
 BestFitParabola
 BestFitParabolaf
 Cylinder3
 Cylinder3f
 Cone3
 Cone3f
 Plane3
 Plane3f
 Box
 Box1i
 QuadraticForm
 QuadraticForm2f
 Quaternion
 Quaternionf
 SegmPoint
 SegmPointf
 TriPoint
 TriPointf
struct MRMESH_CLASS Dipole
struct MRMESH_CLASS Hash = phmap::priv::hash_default_hash<T>
struct MRMESH_CLASS Eq
class MRMESH_CLASS MeshTopology
struct MRMESH_CLASS Mesh
struct MRMESH_CLASS EdgeLengthMesh
class MRMESH_CLASS MeshOrPoints
struct MRMESH_CLASS PointCloud
struct MRMESH_CLASS PointCloudPart
class MRMESH_CLASS AABBTree
class MRMESH_CLASS AABBTreePoints
class MRMESH_CLASS AABBTreeObjects
struct MRMESH_CLASS CloudPartMapping
struct MRMESH_CLASS PartMapping
 Polyline
 Polyline2
 AABBTreePolyline
 AABBTreePolyline2
 PolylineProjectionWithOffsetResult
 Polyline2ProjectionWithOffsetResult
class MRMESH_CLASS ChangeSceneAction
template<typename...>
constexpr bool dependent_false = false
const double BadTriangulationMetric
constexpr CmpOld cmpOld
constexpr SetNew setNew
Signal< void(const std::string &)> TelemetrySignal
 activate this signal if you want to add some string in telemetry
constexpr Vector3i neiPosDelta [OutEdgeCount]
DemoPlugin DemoPluginInstance
constexpr float cGradientButtonFramePadding = 7.5f
constexpr float cTabYOffset = 4.0f
constexpr float cTabsInterval = 8.0f
constexpr float cTabFrameRounding = 5.0f
constexpr float cTabMinimumWidth = 68.0f
constexpr float cTabHeight = 28.0f
constexpr float cTabLabelMinPadding = 12.0f
constexpr float cTopPanelScrollStep = 50.0f
constexpr float cTopPanelScrollBtnSize = 20.0f
constexpr float cTopPanelAditionalButtonSize = cTabHeight - cTabYOffset
constexpr float cSeparateBlocksSpacing = 12.0f
constexpr float cSeparatorIndentMultiplier = 0.67f
constexpr float cRibbonItemInterval = 4.0f
constexpr float cRibbonItemMinWidth = 86.0f
constexpr float cRibbonButtonWindowPaddingX = 6.0f
constexpr float cRibbonButtonWindowPaddingY = 4.0f
constexpr float cCheckboxPadding = 2.0f
constexpr float cButtonPadding = 8.0f
constexpr float cInputPadding = 9.0f
constexpr float cDefaultItemSpacing = 8.0f
constexpr float cDefaultInnerSpacing = 8.0f
constexpr float cDefaultWindowPaddingX = 8.0f
constexpr float cDefaultWindowPaddingY = 12.0f
constexpr float cItemInfoIndent = 16.0f
constexpr float cSmallItemDropSizeModifier = 0.5f
constexpr float cHeaderQuickAccessFrameRounding = 3.0f
constexpr float cHeaderQuickAccessXSpacing = 12.0f
constexpr float cHeaderQuickAccessIconSize = 14.0f
constexpr float cHeaderQuickAccessFrameSize = 24.0f
constexpr float cMiddleIconSize = 15.0f
constexpr float cSmallIconSize = 10.0f
constexpr float cQuickAccessBarHeight = 40.0f
constexpr float cScrollBarSize = 10.0f
constexpr float cBigIconSize = 20.0f
constexpr int cSmallFontSize = 11
constexpr int cMiddleFontSize = 12
constexpr int cDefaultFontSize = 13
constexpr int cBigFontSize = 15
constexpr int cHeadlineFontSize = 20
constexpr float cRadioButtonSize = 20.0f
constexpr float cModalWindowWidth = 368.0f
constexpr float cModalWindowPaddingX = 28.0f
constexpr float cModalWindowPaddingY = 20.0f
constexpr float cModalButtonWidth = 104.0f
const float cRadioInnerSpacingX = 12.f
constexpr int sDefaultGroupState = 0
const std::string cDefaultMultiViewportKey = "defaultMultiViewport"
 key for getting/satting default state for multi viewport from the config
class MRVIEWER_CLASS WebRequest
struct MRVOXELS_CLASS OpenVdbFloatGrid
MRVOXELS_CLASS VoxelsVolumeMinMax
MRVOXELS_CLASS SimpleVolumeMinMax
MRVOXELS_CLASS VoxelsVolume
MRVOXELS_CLASS FunctionVolume
using ObjectMakerFunc = std::shared_ptr<Object>()
std::shared_ptr< ObjectcreateObject (const std::string &className)
 the function to create new object instance by registered class name
using ConvertToIntVector2 = std::function<Vector2i( const Vector2f& )>
 float-to-int coordinate converter
using ConvertToFloatVector2 = std::function<Vector2f( const Vector2i& )>
 int-to-float coordinate converter
bool smaller (const PreciseVertCoord &l, const PreciseVertCoord &r)
bool ccw (const Vector2i &a, const Vector2i &b)
bool ccw (const Vector2i &a, const Vector2i &b, const Vector2i &c)
bool ccw (const std::array< PreciseVertCoords2, 3 > &vs)
bool ccw (const PreciseVertCoords2 *vs)
bool smaller2 (const std::array< PreciseVertCoords2, 4 > &vs)
bool orientParaboloid3d (const Vector2i &a, const Vector2i &b, const Vector2i &c)
bool orientParaboloid3d (const Vector2i &a, const Vector2i &b, const Vector2i &c, const Vector2i &d)
bool inCircle (const std::array< PreciseVertCoords2, 4 > &vs)
 return true if 4th point in array lays inside circumcircle of first 3 points based triangle
bool inCircle (const PreciseVertCoords2 *vs)
SegmentSegmentIntersectResult doSegmentSegmentIntersect (const std::array< PreciseVertCoords2, 4 > &vs)
bool segmentIntersectionOrder (const std::array< PreciseVertCoords2, 6 > &vs)
Vector2i findSegmentSegmentIntersectionPrecise (const Vector2i &a, const Vector2i &b, const Vector2i &c, const Vector2i &d)
Vector2f findSegmentSegmentIntersectionPrecise (const Vector2f &a, const Vector2f &b, const Vector2f &c, const Vector2f &d, CoordinateConverters2 converters)
using ConvertToIntVector = std::function<Vector3i( const Vector3f& )>
 float-to-int coordinate converter
using ConvertToFloatVector = std::function<Vector3f( const Vector3i& )>
 int-to-float coordinate converter
bool orient3d (const Vector3i &a, const Vector3i &b, const Vector3i &c)
bool orient3d (const Vector3i &a, const Vector3i &b, const Vector3i &c, const Vector3i &d)
bool orient3d (const std::array< PreciseVertCoords, 4 > &vs)
 first sorts the indices in ascending order, then calls the predicate for sorted points
bool orient3d (const PreciseVertCoords *vs)
TriangleSegmentIntersectResult doTriangleSegmentIntersect (const std::array< PreciseVertCoords, 5 > &vs)
bool segmentIntersectionOrder (const std::array< PreciseVertCoords, 8 > &vs)
ConvertToIntVector getToIntConverter (const Box3d &box)
 creates converter from Vector3f to Vector3i in Box range (int diapason is mapped to box range)
ConvertToFloatVector getToFloatConverter (const Box3d &box)
 creates converter from Vector3i to Vector3f in Box range (int diapason is mapped to box range)
std::optional< Vector3i > findTwoSegmentsIntersection (const Vector3i &ai, const Vector3i &bi, const Vector3i &ci, const Vector3i &di)
Vector3f findTriangleSegmentIntersectionPrecise (const Vector3f &a, const Vector3f &b, const Vector3f &c, const Vector3f &d, const Vector3f &e, CoordinateConverters converters)
using MeshOnVoxelsVdb = MeshOnVoxelsT<Mesh, VdbVolume>
using MeshOnVoxelsVdbC = MeshOnVoxelsT<const Mesh, VdbVolume>
using MeshOnVoxelsSimple = MeshOnVoxelsT<Mesh, SimpleVolumeMinMax>
using MeshOnVoxelsSimpleC = MeshOnVoxelsT<const Mesh, SimpleVolumeMinMax>
using MeshOnVoxelsFunction = MeshOnVoxelsT<Mesh, FunctionVolume>
using MeshOnVoxelsFunctionC = MeshOnVoxelsT<const Mesh, FunctionVolume>
template<typename VolumeType = VdbVolume>
Expected< VertBitSet > moveMeshToVoxelMaxDeriv (Mesh &mesh, const AffineXf3f &meshXf, const VolumeType &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback={})
template Expected< VertBitSet > moveMeshToVoxelMaxDeriv< VdbVolume > (Mesh &mesh, const AffineXf3f &meshXf, const VdbVolume &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)
template Expected< VertBitSet > moveMeshToVoxelMaxDeriv< SimpleVolumeMinMax > (Mesh &mesh, const AffineXf3f &meshXf, const SimpleVolumeMinMax &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)
template Expected< VertBitSet > moveMeshToVoxelMaxDeriv< FunctionVolume > (Mesh &mesh, const AffineXf3f &meshXf, const FunctionVolume &volume, const AffineXf3f &volumeXf, const MoveMeshToVoxelMaxDerivSettings &settings, ProgressCallback callback)

Detailed Description

only for bindings generation

this header includes the whole OpenVDB, so please include it from .cpp files only

this is a lightweight header unlike MRVDBFloatGrid.h

This is lightweight header, pleas include it instead of "MRViewer.h" whenever possible.

Read the manual at: docs/measurement_units.md.

TODO move it in MRRibbonFontManager.cpp.

const Contours3f& contours = {}

triangle-related mathematical functions are here

not _WIN32

To fix attribute declaration must precede definition on Sphere.

#pragma warning: there is no warning number

for template implementation:

distance queries involving two meshes, please see MRMeshDistance.h for queries to one mesh only

distance queries to one mesh only, please see MRMeshMeshDistance.h for queries involving two meshes

based on https:/// github.com/TartanLlama/function_ref

https:/// www.geometrictools.com/Documentation/LeastSquaresFitting.pdf

Color and DIRTY_VERTS_COLORMAP.

This file exists for testing some cuda features.

Only strictly necessary for the bindings (to make MR::MeshIntersectionResult a complete type).

======================================================================== /// Copyright 2009-2020 Intel Corporation /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http:/// www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// ======================================================================== ///

Main idea is here: https:/// www.geometrictools.com/Documentation/LeastSquaresFitting.pdf pages 45-51 Below we will write out the function and Jacobian for minimization by the Levenberg-Marquard method and use it to clarify the apex of the cone and the direction of its main axis.

_WIN32

TODO:

  • create plugins/skeleton.h
  • pass time in draw function
  • remove Preview3D from comments
  • clean comments

Typedef Documentation

◆ MeshOnVoxelsFunction

◆ MeshOnVoxelsFunctionC

◆ MeshOnVoxelsSimple

◆ MeshOnVoxelsSimpleC

◆ MeshOnVoxelsVdb

using MR::MeshOnVoxelsVdb = MeshOnVoxelsT<Mesh, VdbVolume>

◆ MeshOnVoxelsVdbC

using MR::MeshOnVoxelsVdbC = MeshOnVoxelsT<const Mesh, VdbVolume>

Function Documentation

◆ makeObjectFromVoxelsFile()

Expected< LoadedObjects > MR::makeObjectFromVoxelsFile ( const std::filesystem::path & file,
const ProgressCallback & callback = {} )

◆ makeObjectVoxelsFromFile()

Expected< std::vector< std::shared_ptr< ObjectVoxels > > > MR::makeObjectVoxelsFromFile ( const std::filesystem::path & file,
ProgressCallback callback = {} )

loads voxels from given file in new object

◆ moveMeshToVoxelMaxDeriv< FunctionVolume >()

template Expected< VertBitSet > MR::moveMeshToVoxelMaxDeriv< FunctionVolume > ( Mesh & mesh,
const AffineXf3f & meshXf,
const FunctionVolume & volume,
const AffineXf3f & volumeXf,
const MoveMeshToVoxelMaxDerivSettings & settings,
ProgressCallback callback )
extern

◆ moveMeshToVoxelMaxDeriv< SimpleVolumeMinMax >()

template Expected< VertBitSet > MR::moveMeshToVoxelMaxDeriv< SimpleVolumeMinMax > ( Mesh & mesh,
const AffineXf3f & meshXf,
const SimpleVolumeMinMax & volume,
const AffineXf3f & volumeXf,
const MoveMeshToVoxelMaxDerivSettings & settings,
ProgressCallback callback )
extern

◆ moveMeshToVoxelMaxDeriv< VdbVolume >()

template Expected< VertBitSet > MR::moveMeshToVoxelMaxDeriv< VdbVolume > ( Mesh & mesh,
const AffineXf3f & meshXf,
const VdbVolume & volume,
const AffineXf3f & volumeXf,
const MoveMeshToVoxelMaxDerivSettings & settings,
ProgressCallback callback )
extern

Variable Documentation

◆ AllFilter

const IOFilters MR::AllFilter
extern