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

Function loadObjectFromObj

source/MRMesh/MRMeshLoadObj.cpp:1325–1417  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1323}
1324
1325Expected<LoadedObjects> loadObjectFromObj( const std::filesystem::path& file, const ProgressCallback& cb )
1326{
1327 return fromSceneObjFile( file, false, { .customXf = true, .countSkippedFaces = true, .callback = cb } )
1328 .transform( [&] ( std::vector<NamedMesh>&& results )
1329 {
1330 int totalSkippedFaceCount = 0;
1331 int totalDuplicatedVertexCount = 0;
1332 int holesCount = 0;
1333 LoadedObjects res;
1334 res.objs.resize( results.size() );
1335 for ( int i = 0; i < res.objs.size(); ++i )
1336 {
1337 auto& result = results[i];
1338 telemetryLogSize( result.mesh );
1339
1340 std::shared_ptr<ObjectMesh> objectMesh = std::make_shared<ObjectMesh>();
1341 if ( result.name.empty() )
1342 objectMesh->setName( utf8string( file.stem() ) );
1343 else
1344 objectMesh->setName( std::move( result.name ) );
1345 objectMesh->select( true );
1346 objectMesh->setMesh( std::make_shared<Mesh>( std::move( result.mesh ) ) );
1347 if ( result.diffuseColor )
1348 objectMesh->setFrontColor( *result.diffuseColor, false );
1349
1350 objectMesh->setUVCoords( std::move( result.uvCoords ) );
1351
1352 int numEmptyTexture = 0;
1353 for ( const auto& p : result.textureFiles )
1354 {
1355 if ( p.empty() )
1356 numEmptyTexture++;
1357 }
1358
1359 if ( numEmptyTexture != 0 && numEmptyTexture != result.textureFiles.size() )
1360 {
1361 res.warnings += "object has material with and without texture\n";
1362 }
1363 else if ( numEmptyTexture == 0 && result.textureFiles.size() != 0 )
1364 {
1365 bool crashTextureLoad = false;
1366 for ( const auto& p : result.textureFiles )
1367 {
1368 auto image = ImageLoad::fromAnySupportedFormat( p );
1369 if ( image.has_value() )
1370 {
1371 MeshTexture meshTexture;
1372 meshTexture.resolution = std::move( image.value().resolution );
1373 meshTexture.pixels = std::move( image.value().pixels );
1374 meshTexture.filter = FilterType::Linear;
1375 meshTexture.wrap = WrapType::Clamp;
1376 objectMesh->addTexture( std::move( meshTexture ) );
1377 }
1378 else
1379 {
1380 crashTextureLoad = true;
1381 objectMesh->setTextures( {} );
1382 res.warnings += image.error() + '\n';

Callers

nothing calls this directly

Calls 15

fromSceneObjFileFunction · 0.85
utf8stringFunction · 0.85
setMeshMethod · 0.80
errorMethod · 0.80
setVisualizePropertyMethod · 0.80
setColoringTypeMethod · 0.80
numHolesMethod · 0.80
telemetryLogSizeFunction · 0.70
fromAnySupportedFormatFunction · 0.70
transformMethod · 0.45
resizeMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected