3#ifndef MR_PARSING_FOR_ANY_BINDINGS
18#define MR_FORMAT_REGISTRY_EXTERNAL_DECL( API_ATTR, ProcName ) \
19API_ATTR ProcName MR_CONCAT( get, ProcName )( const IOFilter& filter ); \
20API_ATTR ProcName MR_CONCAT( get, ProcName )( const std::string& extension ); \
21API_ATTR void MR_CONCAT( set, ProcName )( const IOFilter& filter, ProcName proc, int8_t priorityScore = 0 ); \
22API_ATTR const IOFilters& getFilters();
24#define MR_FORMAT_REGISTRY_DECL( ProcName ) MR_FORMAT_REGISTRY_EXTERNAL_DECL( MRMESH_API, ProcName )
26#define MR_FORMAT_REGISTRY_IMPL( ProcName ) \
27ProcName MR_CONCAT( get, ProcName )( const IOFilter& filter ) \
29 return FormatRegistry<ProcName>::getProcessor( filter ); \
31ProcName MR_CONCAT( get, ProcName )( const std::string& extension ) \
33 return FormatRegistry<ProcName>::getProcessor( extension ); \
35void MR_CONCAT( set, ProcName )( const IOFilter& filter, ProcName processor, int8_t priorityScore ) \
37 FormatRegistry<ProcName>::setProcessor( filter, processor, priorityScore ); \
39const IOFilters& getFilters() \
41 return FormatRegistry<ProcName>::getFilters(); \
52template <
typename Processor>
59 return get_().filters_;
65 const auto& processors = get_().processors_;
66 auto it = processors.find( filter );
67 if ( it != processors.end() )
76 const auto& processors = get_().processors_;
78 auto it = std::find_if( processors.begin(), processors.end(), [&extension] (
auto&& item )
80 const auto& [filter, _] = item;
81 return filter.isSupportedExtension( extension );
83 if ( it != processors.end() )
92 auto& processors = get_().processors_;
93 auto it = processors.find( filter );
94 if ( it != processors.end() )
96 it->second = processor;
100 processors.emplace( filter, processor );
102 auto& filters = get_().filterPriorityQueue_;
103 filters.emplace( priorityScore, filter );
104 get_().updateFilterList_();
118 void updateFilterList_()
121 filters_.reserve( filterPriorityQueue_.size() );
122 for (
const auto& [_, filter] : filterPriorityQueue_ )
123 filters_.emplace_back( filter );
126 std::map<IOFilter, Processor> processors_;
127 std::multimap<int8_t, IOFilter> filterPriorityQueue_;
128 std::vector<IOFilter> filters_;
155#define MR_ADD_MESH_LOADER( filter, loader ) \
156MR_ON_INIT { using namespace MR::MeshLoad; setMeshLoader( filter, { static_cast<MeshFileLoader>( loader ), static_cast<MeshStreamLoader>( loader ) } ); };
158#define MR_ADD_MESH_LOADER_WITH_PRIORITY( filter, loader, priority ) \
159MR_ON_INIT { using namespace MR::MeshLoad; setMeshLoader( filter, { static_cast<MeshFileLoader>( loader ), static_cast<MeshStreamLoader>( loader ) }, priority ); };
168using MeshFileSaver = Expected<void>( * )(
const Mesh&,
const std::filesystem::path&,
const SaveSettings& );
169using MeshStreamSaver = Expected<void>( * )(
const Mesh&, std::ostream&,
const SaveSettings& );
191#define MR_ADD_MESH_SAVER( filter, saver, caps ) \
192MR_ON_INIT { using namespace MR::MeshSave; setMeshSaver( filter, { static_cast<MeshFileSaver>( saver ), static_cast<MeshStreamSaver>( saver ), caps } ); };
194#define MR_ADD_MESH_SAVER_WITH_PRIORITY( filter, saver, caps, priority ) \
195MR_ON_INIT { using namespace MR::MeshSave; setMeshSaver( filter, { static_cast<MeshFileSaver>( saver ), static_cast<MeshStreamSaver>( saver ), caps }, priority ); };
202using LinesFileLoader = Expected<Polyline3>( * )(
const std::filesystem::path&,
const LinesLoadSettings& );
203using LinesStreamLoader = Expected<Polyline3>( * )( std::istream&,
const LinesLoadSettings& );
213#define MR_ADD_LINES_LOADER( filter, loader ) \
214MR_ON_INIT { using namespace MR::LinesLoad; setLinesLoader( filter, { static_cast<LinesFileLoader>( loader ), static_cast<LinesStreamLoader>( loader ) } ); };
216#define MR_ADD_LINES_LOADER_WITH_PRIORITY( filter, loader, priority ) \
217MR_ON_INIT { using namespace MR::LinesLoad; setLinesLoader( filter, { static_cast<LinesFileLoader>( loader ), static_cast<LinesStreamLoader>( loader ) }, priority ); };
224using LinesFileSaver = Expected<void>( * )(
const Polyline3&,
const std::filesystem::path&,
const SaveSettings& );
235#define MR_ADD_LINES_SAVER( filter, saver ) \
236MR_ON_INIT { using namespace MR::LinesSave; setLinesSaver( filter, { static_cast<LinesFileSaver>( saver ), static_cast<LinesStreamSaver>( saver ) } ); };
238#define MR_ADD_LINES_SAVER_WITH_PRIORITY( filter, saver, priority ) \
239MR_ON_INIT { using namespace MR::LinesSave; setLinesSaver( filter, { static_cast<LinesFileSaver>( saver ), static_cast<LinesStreamSaver>( saver ) }, priority ); };
246using PointsFileLoader = Expected<PointCloud>( * )(
const std::filesystem::path&,
const PointsLoadSettings& );
247using PointsStreamLoader = Expected<PointCloud>( * )( std::istream&,
const PointsLoadSettings& );
257#define MR_ADD_POINTS_LOADER( filter, loader ) \
258MR_ON_INIT { using namespace MR::PointsLoad; setPointsLoader( filter, { static_cast<PointsFileLoader>( loader ), static_cast<PointsStreamLoader>( loader ) } ); };
265using PointsFileSaver = Expected<void>( * )(
const PointCloud&,
const std::filesystem::path&,
const SaveSettings& );
266using PointsStreamSaver = Expected<void>( * )(
const PointCloud&, std::ostream&,
const SaveSettings& );
276#define MR_ADD_POINTS_SAVER( filter, saver ) \
277MR_ON_INIT { using namespace MR::PointsSave; setPointsSaver( filter, { static_cast<PointsFileSaver>( saver ), static_cast<PointsStreamSaver>( saver ) } ); };
284using ImageLoader = Expected<Image>( * )(
const std::filesystem::path& );
288#define MR_ADD_IMAGE_LOADER( filter, loader ) \
289MR_ON_INIT { using namespace MR::ImageLoad; setImageLoader( filter, loader ); };
291#define MR_ADD_IMAGE_LOADER_WITH_PRIORITY( filter, loader, priority ) \
292MR_ON_INIT { using namespace MR::ImageLoad; setImageLoader( filter, loader, priority ); };
299using ImageSaver = Expected<void>( * )(
const Image&,
const std::filesystem::path& );
303#define MR_ADD_IMAGE_SAVER( filter, saver ) \
304MR_ON_INIT { using namespace MR::ImageSave; setImageSaver( filter, saver ); };
306#define MR_ADD_IMAGE_SAVER_WITH_PRIORITY( filter, saver, priority ) \
307MR_ON_INIT { using namespace MR::ImageSave; setImageSaver( filter, saver, priority ); };
314using ObjectLoader = Expected<LoadedObjects>( * )(
const std::filesystem::path&,
const ProgressCallback& );
318#define MR_ADD_OBJECT_LOADER( filter, loader ) \
319MR_ON_INIT { using namespace MR::ObjectLoad; setObjectLoader( filter, loader ); };
326using ObjectSaver = Expected<void>( * )(
const Object&,
const std::filesystem::path&,
const Settings& );
330#define MR_ADD_OBJECT_SAVER( filter, saver ) \
331MR_ON_INIT { using namespace MR::ObjectSave; setObjectSaver( filter, saver ); };
335namespace AsyncObjectLoad
348using SceneLoader = Expected<LoadedObject>( * )(
const std::filesystem::path&,
const ProgressCallback& );
352#define MR_ADD_SCENE_LOADER( filter, loader ) \
353MR_ON_INIT { using namespace MR::SceneLoad; setSceneLoader( filter, loader ); };
355#define MR_ADD_SCENE_LOADER_WITH_PRIORITY( filter, loader, priority ) \
356MR_ON_INIT { using namespace MR::SceneLoad; setSceneLoader( filter, loader, priority ); };
367#define MR_ADD_SCENE_SAVER( filter, saver ) \
368MR_ON_INIT { using namespace MR::SceneSave; setSceneSaver( filter, saver ); };
370#define MR_ADD_SCENE_SAVER_WITH_PRIORITY( filter, saver, priority ) \
371MR_ON_INIT { using namespace MR::SceneSave; setSceneSaver( filter, saver, priority ); };
375namespace DistanceMapLoad
378using DistanceMapLoader = Expected<DistanceMap>( * )(
const std::filesystem::path& path,
const DistanceMapLoadSettings& settings );
382#define MR_ADD_DISTANCE_MAP_LOADER( filter, loader ) \
383MR_ON_INIT { using namespace MR::DistanceMapLoad; setDistanceMapLoader( filter, loader ); };
385#define MR_ADD_DISTANCE_MAP_LOADER_WITH_PRIORITY( filter, loader, priority ) \
386MR_ON_INIT { using namespace MR::DistanceMapLoad; setDistanceMapLoader( filter, loader, priority ); };
390namespace DistanceMapSave
393using DistanceMapSaver = Expected<void>( * )(
const DistanceMap& distanceMap,
const std::filesystem::path& path,
const DistanceMapSaveSettings& settings );
397#define MR_ADD_DISTANCE_MAP_SAVER( filter, saver ) \
398MR_ON_INIT { using namespace MR::DistanceMapSave; setDistanceMapSaver( filter, saver ); };
400#define MR_ADD_DISTANCE_MAP_SAVER_WITH_PRIORITY( filter, saver, priority ) \
401MR_ON_INIT { using namespace MR::DistanceMapSave; setDistanceMapSaver( filter, saver, priority ); };
#define MRMESH_API
Definition MRMeshFwd.h:80
Definition MRIOFilters.h:17
Definition MRLinesLoadSettings.h:10
Definition MRMeshLoadSettings.h:11
Definition MRObjectSaveSettings.h:11
Definition MRSaveSettings.h:17
MRVIEWER_API void Image(const MR::ImGuiImage &image, const ImVec2 &size, const MR::Color &multColor)
draw image with Y-direction inversed up-down
std::function< void(Expected< LoadedObjects >)> PostLoadCallback
Definition MRIOFormatsRegistry.h:338
void(*)(const std::filesystem::path &, PostLoadCallback, const ProgressCallback &) ObjectLoader
Definition MRIOFormatsRegistry.h:339
Expected< LoadedObjects >(*)(const std::filesystem::path &, const ProgressCallback &) ObjectLoader
Definition MRIOFormatsRegistry.h:314
Expected< void >(*)(const Object &, const std::filesystem::path &, const ObjectSave::Settings &) SceneSaver
Definition MRIOFormatsRegistry.h:363
Definition MRCameraOrientationPlugin.h:8
Definition MRIOFormatsRegistry.h:206
LinesFileLoader fileLoad
Definition MRIOFormatsRegistry.h:207
LinesStreamLoader streamLoad
Definition MRIOFormatsRegistry.h:208
Definition MRIOFormatsRegistry.h:228
LinesStreamSaver streamSave
Definition MRIOFormatsRegistry.h:230
LinesFileSaver fileSave
Definition MRIOFormatsRegistry.h:229
Definition MRIOFormatsRegistry.h:142
MeshFileLoader fileLoad
Definition MRIOFormatsRegistry.h:143
MeshStreamLoader streamLoad
Definition MRIOFormatsRegistry.h:144
describes optional abilities of a MeshSaver
Definition MRIOFormatsRegistry.h:173
bool storesVertexColors
true if the saver serializes per-vertex mesh colors, false if per-vertex colors are not saved
Definition MRIOFormatsRegistry.h:175
Definition MRIOFormatsRegistry.h:179
MeshStreamSaver streamSave
saver in a std::ostream
Definition MRIOFormatsRegistry.h:184
MeshFileSaver fileSave
saver in a file given by its path
Definition MRIOFormatsRegistry.h:181
MeshSaverCapabilities capabilities
Definition MRIOFormatsRegistry.h:186
Definition MRIOFormatsRegistry.h:250
PointsFileLoader fileLoad
Definition MRIOFormatsRegistry.h:251
PointsStreamLoader streamLoad
Definition MRIOFormatsRegistry.h:252
Definition MRIOFormatsRegistry.h:269
PointsFileSaver fileSave
Definition MRIOFormatsRegistry.h:270
PointsStreamSaver streamSave
Definition MRIOFormatsRegistry.h:271