From 468dae10e22550554e55f9d80fa9e98380246c37 Mon Sep 17 00:00:00 2001 From: Fabien Servant Date: Thu, 13 Feb 2025 12:02:28 +0100 Subject: [PATCH] fix sfmMerge --- src/software/utils/main_sfmMerge.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/software/utils/main_sfmMerge.cpp b/src/software/utils/main_sfmMerge.cpp index f195230762..9a02c9c497 100644 --- a/src/software/utils/main_sfmMerge.cpp +++ b/src/software/utils/main_sfmMerge.cpp @@ -126,9 +126,12 @@ bool simpleMerge(sfmData::SfMData & sfmData1, const sfmData::SfMData & sfmData2) if (!(obj1 == obj2)) { ALICEVISION_LOG_ERROR("Unhandled error: common intrinsic ID with different parameters between both SfMData"); + return false; } } } + + intrinsics1.insert(intrinsics2.begin(), intrinsics2.end()); } { @@ -136,12 +139,25 @@ bool simpleMerge(sfmData::SfMData & sfmData1, const sfmData::SfMData & sfmData2) auto& rigs2 = sfmData2.getRigs(); const size_t totalSize = rigs1.size() + rigs2.size(); - rigs1.insert(rigs2.begin(), rigs2.end()); - if (rigs1.size() < totalSize) + //If both sfm share a common rigid + //Make sure there is no ambiguity and the content is the same + for (const auto & [key, rig] : rigs1) { - ALICEVISION_LOG_ERROR("Unhandled error: common rigs ID between both SfMData"); - return false; + const auto & itRigOther = rigs2.find(key); + if (itRigOther != rigs2.end()) + { + const auto & obj1 = rig; + const auto & obj2 = itRigOther->second; + + if (!(obj1 == obj2)) + { + ALICEVISION_LOG_ERROR("Unhandled error: common rig ID with different parameters between both SfMData"); + return false; + } + } } + + rigs1.insert(rigs2.begin(), rigs2.end()); } {