From bf47ef3432e41e46b96b17a3e2a7ca73b31247b8 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Thu, 24 Oct 2024 15:08:29 -0700 Subject: [PATCH] Got rid of inheritance --- gtsam/sfm/TransferFactor.h | 17 ++++++++++------- gtsam/sfm/tests/testTransferFactor.cpp | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/gtsam/sfm/TransferFactor.h b/gtsam/sfm/TransferFactor.h index 0f9f95c13..5c46f9b9b 100644 --- a/gtsam/sfm/TransferFactor.h +++ b/gtsam/sfm/TransferFactor.h @@ -67,15 +67,18 @@ class TransferFactor : public NoiseModelFactorN { pk(pk) {} // Create Matrix3 objects based on EdgeKey configurations - std::pair getMatrices(const F& F1, const F& F2) const { + static std::pair getMatrices(const EdgeKey& key1, + const F& F1, + const EdgeKey& key2, + const F& F2) { // Fill Fki and Fkj based on EdgeKey configurations - if (key1_.i() == key2_.i()) { + if (key1.i() == key2.i()) { return {F1.matrix(), F2.matrix()}; - } else if (key1_.i() == key2_.j()) { + } else if (key1.i() == key2.j()) { return {F1.matrix(), F2.matrix().transpose()}; - } else if (key1_.j() == key2_.i()) { + } else if (key1.j() == key2.i()) { return {F1.matrix().transpose(), F2.matrix()}; - } else if (key1_.j() == key2_.j()) { + } else if (key1.j() == key2.j()) { return {F1.matrix().transpose(), F2.matrix().transpose()}; } else { throw std::runtime_error( @@ -88,8 +91,8 @@ class TransferFactor : public NoiseModelFactorN { OptionalMatrixType H1 = nullptr, OptionalMatrixType H2 = nullptr) const override { std::function transfer = [&](const F& F1, const F& F2) { - auto [Fki, Fkj] = getMatrices(F1, F2); - return F::transfer(Fki, pi, Fkj, pj); + auto [Fki, Fkj] = getMatrices(key1_, F1, key2_, F2); + return Transfer(Fki, pi, Fkj, pj); }; if (H1) *H1 = numericalDerivative21(transfer, F1, F2); if (H2) *H2 = numericalDerivative22(transfer, F1, F2); diff --git a/gtsam/sfm/tests/testTransferFactor.cpp b/gtsam/sfm/tests/testTransferFactor.cpp index 7bcd71b1f..d26bad960 100644 --- a/gtsam/sfm/tests/testTransferFactor.cpp +++ b/gtsam/sfm/tests/testTransferFactor.cpp @@ -71,7 +71,7 @@ TEST(TransferFactor, Jacobians) { factor2{key20, key12, p[0], p[1], p[2]}; // Check that getMatrices is correct - auto [Fki, Fkj] = factor2.getMatrices(triplet.Fca, triplet.Fbc); + auto [Fki, Fkj] = factor2.getMatrices(key20, triplet.Fca, key12, triplet.Fbc); EXPECT(assert_equal(triplet.Fca.matrix(), Fki)); EXPECT(assert_equal(triplet.Fbc.matrix().transpose(), Fkj));