23 #include <mp2p_icp/Matcher_Planes_Normals.h> 
   35     for (
const auto& pair : mpl)
 
   38         ASSERTDEB_(pair.this_idx < pcs1.planes.size());
 
   39         ASSERTDEB_(pair.other_idx < pcs2.planes.size());
 
   41         const auto& p1 = 
s.pc1.planes[pair.this_idx];
 
   42         const auto& p2 = 
s.pc2.planes[pair.other_idx];
 
   44         const mrpt::math::TVector3D n1 = p1.plane.getNormalVector();
 
   45         const mrpt::math::TVector3D n2 = p2.plane.getNormalVector();
 
   48         const double dp      = n1.x * n2.x + n1.y * n2.y + n1.z * n2.z;
 
   49         const double n2n_ang = std::acos(dp);
 
   52         if (n2n_ang < p.thresholdPlane2PlaneNormalAng)
 
   55             pairings.paired_pl2pl.emplace_back(p1, p2);
 
   63     if (!p.pt2pl_layer.empty())
 
   65         const auto &m1 = 
s.pc1.point_layers.at(
"plane_centroids"),
 
   66                    &m2 = 
s.pc2.point_layers.at(p.pt2pl_layer);
 
   70         auto& mp = 
s.mps.at(p.pt2pl_layer);
 
   72         mp.angularDistPivotPoint =
 
   73             mrpt::math::TPoint3D(
s.currentSolutionasTPose());
 
   76         mrpt::tfest::TMatchingPairList mpl;
 
   77         m1->determineMatching3D(
 
   78             m2.get(), 
s.currentSolution mpl, mp, 
s.mres[p.pt2pl_layer]);
 
   83         for (
const auto& pair : mpl)
 
   86             ASSERTDEB_(pair.this_idx < pcs1.planes.size());
 
   87             ASSERTDEB_(pair.other_idx < m2->size());
 
   89             const auto&           pl_this = 
s.pc1.planes[pair.this_idx];
 
   90             mrpt::math::TPoint3Df pt_other;
 
   91             m2->getPoint(pair.other_idx, pt_other.x, pt_other.y, pt_other.z);
 
   95             pairings.paired_pt2pl.emplace_back(pl_this, pt_other);
 
   98     out.potential_pairings += pcLocal.size() * maxPt2PtCorrespondences;