14 #include <mrpt/opengl/CSetOfLines.h>
15 #include <mrpt/opengl/CSetOfObjects.h>
16 #include <mrpt/opengl/CTexturedPlane.h>
17 #include <mrpt/serialization/CArchive.h>
18 #include <mrpt/serialization/stl_serialization.h>
38 const auto readVersion = in.ReadAs<uint8_t>();
47 mrpt::serialization::CArchive&
out,
const Pairings& obj)
54 mrpt::serialization::CArchive& in,
Pairings& obj)
63 using mrpt::math::TPoint3D;
72 const double wcPoints = 1.0 / (nPt2Pt - outliers.
point2point.size());
76 TPoint3D ct_local(0, 0, 0), ct_global(0, 0, 0);
79 auto it_next_outlier = outliers.
point2point.begin();
83 if (it_next_outlier != outliers.
point2point.end() && i == *it_next_outlier)
90 ct_global += pair.global;
91 ct_local += pair.local;
95 ASSERT_EQUAL_(cnt, nPt2Pt - outliers.
point2point.size());
98 ct_global *= wcPoints;
101 return {ct_local, ct_global};
104 template <
typename T>
107 me.insert(me.end(), o.begin(), o.end());
109 template <
typename T>
112 me.insert(me.end(), std::make_move_iterator(o.begin()), std::make_move_iterator(o.end()));
141 template <
typename CONTAINER>
144 using namespace std::string_literals;
146 if (c.empty())
return;
147 if (!ret.empty()) ret +=
", "s;
148 ret += std::to_string(c.size()) +
" "s + name;
153 using namespace std::string_literals;
155 if (
empty())
return {
"none"s};
170 -> std::shared_ptr<mrpt::opengl::CSetOfObjects>
173 auto o = mrpt::opengl::CSetOfObjects::Create();
184 mrpt::opengl::CSetOfObjects& o,
const mrpt::poses::CPose3D& localWrtGlobal,
189 auto lns = mrpt::opengl::CSetOfLines::Create();
190 lns->setColor_u8(p.
color);
195 const auto ptLocalTf = localWrtGlobal.composePoint(pair.local);
196 lns->appendLine(ptLocalTf, pair.global);
203 mrpt::opengl::CSetOfObjects& o,
const mrpt::poses::CPose3D& localWrtGlobal,
208 auto lns = mrpt::opengl::CSetOfLines::Create();
215 const auto globalPlanePose = mrpt::poses::CPose3D(
216 pair.pl_global.plane.getAsPose3DForcingOrigin(pair.pl_global.centroid));
218 const auto ptLocal = pair.pt_local;
219 const auto ptLocalTf = localWrtGlobal.composePoint(ptLocal);
222 lns->appendLine(ptLocalTf, globalPlanePose.translation());
225 auto glPlane = mrpt::opengl::CTexturedPlane::Create();
226 glPlane->setPlaneCorners(-L, L, -L, L);
229 glPlane->setPose(globalPlanePose);
238 mrpt::opengl::CSetOfObjects& o,
const mrpt::poses::CPose3D& localWrtGlobal,
243 auto pairingLines = mrpt::opengl::CSetOfLines::Create();
246 auto globalLines = mrpt::opengl::CSetOfLines::Create();
253 const auto& globalLine = pair.ln_global;
255 const auto ptLocal = pair.pt_local;
256 const auto ptLocalTf = localWrtGlobal.composePoint(ptLocal);
259 pairingLines->appendLine(ptLocalTf, globalLine.pBase);
262 globalLines->appendLine(
263 globalLine.pBase - globalLine.director * L, globalLine.pBase + globalLine.director * L);
266 o.insert(pairingLines);
267 o.insert(globalLines);
274 out.WriteAs<uint8_t>(0);
283 in.ReadAs<uint8_t>();
291 out.WriteAs<uint8_t>(0);
298 in.ReadAs<uint8_t>();
306 out.WriteAs<uint8_t>(0);
313 in.ReadAs<uint8_t>();
321 out.WriteAs<uint8_t>(0);
328 in.ReadAs<uint8_t>();