MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / loadObjectFromFile

Function loadObjectFromFile

source/MRMesh/MRObjectLoad.cpp:370–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

368}
369
370Expected<LoadedObjects> loadObjectFromFile( const std::filesystem::path& filename, const ProgressCallback& callback )
371{
372 if ( callback && !callback( 0.f ) )
373 return unexpectedOperationCanceled();
374
375 Expected<LoadedObjects> result = unexpectedUnsupportedFileExtension();
376 auto tryOtherLoaders = [&result]()
377 {
378 if ( result.has_value() )
379 return false; // already loaded
380 // true if previous load attempt failed in the very beginning on extension or format check
381 return result.error() == stringUnsupportedFileExtension()
382 || result.error().starts_with( stringUnsupportedFileFormat() );
383 };
384
385 bool loadedFromSceneFile = false;
386
387 auto ext = std::string( "*" ) + utf8string( filename.extension().u8string() );
388 for ( auto& c : ext )
389 c = ( char )tolower( c );
390
391 if ( findFilter( SceneLoad::getFilters(), ext ) )
392 {
393 const auto objTree = loadSceneFromAnySupportedFormat( filename, callback );
394 if ( !objTree.has_value() )
395 return unexpected( std::move( objTree.error() ) );
396
397 objTree->obj->setName( utf8string( filename.stem() ) );
398 result = LoadedObjects{ .objs = { objTree->obj }, .warnings = std::move( objTree->warnings ), .lengthUnit = objTree->lengthUnit };
399 loadedFromSceneFile = true;
400 }
401 else for ( const auto& filter : ObjectLoad::getFilters() )
402 {
403 if ( filter.isSupportedExtension( ext ) )
404 {
405 const auto loader = ObjectLoad::getObjectLoader( filter );
406 result = loader( filename, callback );
407 if ( result.has_value() || result.error() == stringOperationCanceled() )
408 break;
409 }
410 }
411 // no else to support same extensions in object and mesh loaders
412 if ( tryOtherLoaders() )
413 {
414 auto maybe = makeObjectFromMeshFile( filename, callback );
415 if ( maybe )
416 {
417 maybe->obj->select( true );
418 result = LoadedObjects{ .objs = { maybe->obj }, .warnings = std::move( maybe->warnings ) };
419 }
420 else if ( !maybe.error().starts_with( stringUnsupportedFileExtension() ) )
421 result = unexpected( std::move( maybe.error() ) );
422 }
423
424 if ( tryOtherLoaders() )
425 {
426 auto objectLines = makeObjectLinesFromFile( filename, callback );
427 if ( objectLines.has_value() )

Callers 5

mcpSceneAddObjectFunction · 0.85
makeObjectTreeFromFolderFunction · 0.85
sLoadPathFunction · 0.85
fromSceneMisonFunction · 0.85
mainInternalFunction · 0.85

Calls 15

utf8stringFunction · 0.85
findFilterFunction · 0.85
makeObjectFromMeshFileFunction · 0.85
makeObjectLinesFromFileFunction · 0.85
makeObjectPointsFromFileFunction · 0.85
makeObjectGcodeFromFileFunction · 0.85
postImportObjectFunction · 0.85
errorMethod · 0.80

Tested by

no test coverage detected