Skip to content

Commit 59fd8ed

Browse files
committed
New sanity check function: warn_on_field_padding_mismatch()
1 parent 8acbc10 commit 59fd8ed

12 files changed

Lines changed: 174 additions & 10 deletions

mp2p_icp_filters/src/FilterBoundingBox.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @date Sep 10, 2021
1919
*/
2020

21+
#include <mp2p_icp/pointcloud_field_utils.h>
2122
#include <mp2p_icp_filters/FilterBoundingBox.h>
2223
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2324
#include <mrpt/containers/yaml.h>
@@ -111,11 +112,13 @@ void FilterBoundingBox::filter(mp2p_icp::metric_map_t& inOut) const
111112
{
112113
insidePc->registerPointFieldsFrom(pc);
113114
ctxInside = insidePc->prepareForInsertPointsFrom(pc);
115+
mp2p_icp::warn_on_field_padding_mismatch(pc, *insidePc, *this);
114116
}
115117
if (outsidePc)
116118
{
117119
outsidePc->registerPointFieldsFrom(pc);
118120
ctxOutside = outsidePc->prepareForInsertPointsFrom(pc);
121+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outsidePc, *this);
119122
}
120123

121124
const auto& xs = pc.getPointsBufferRef_x();

mp2p_icp_filters/src/FilterByRange.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @date Nov 14, 2023
1919
*/
2020

21+
#include <mp2p_icp/pointcloud_field_utils.h>
2122
#include <mp2p_icp/pointcloud_sanity_check.h>
2223
#include <mp2p_icp_filters/FilterByRange.h>
2324
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
@@ -122,11 +123,13 @@ void FilterByRange::filter(mp2p_icp::metric_map_t& inOut) const
122123
{
123124
outBetween->registerPointFieldsFrom(pc);
124125
ctxBetween = outBetween->prepareForInsertPointsFrom(pc);
126+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outBetween, *this);
125127
}
126128
if (outOutside)
127129
{
128130
outOutside->registerPointFieldsFrom(pc);
129131
ctxOutside = outOutside->prepareForInsertPointsFrom(pc);
132+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outOutside, *this);
130133
}
131134

132135
for (size_t i = 0; i < xs.size(); i++)

mp2p_icp_filters/src/FilterDecimate.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @date Jan 12, 2026
1919
*/
2020

21+
#include <mp2p_icp/pointcloud_field_utils.h>
2122
#include <mp2p_icp_filters/FilterDecimate.h>
2223
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2324
#include <mrpt/containers/yaml.h>
@@ -82,21 +83,14 @@ void FilterDecimate::filter(mp2p_icp::metric_map_t& inOut) const
8283
pcIn->GetRuntimeClass()->className);
8384

8485
// Efficiently copy points including all extra fields
85-
#if MRPT_VERSION >= 0x020f00
8686
outPc->registerPointFieldsFrom(*pcIn);
8787
auto ctx = outPc->prepareForInsertPointsFrom(*pcIn);
88-
#endif
88+
mp2p_icp::warn_on_field_padding_mismatch(*pcIn, *outPc, *this);
8989

9090
outPc->reserve(outPc->size() + (nIn / N));
9191

9292
for (size_t i = 0; i < nIn; i += N)
9393
{
94-
#if MRPT_VERSION >= 0x020f03
9594
outPc->insertPointFrom(i, ctx);
96-
#elif MRPT_VERSION >= 0x020f00
97-
outPc->insertPointFrom(*pcIn, i, ctx);
98-
#else
99-
outPc->insertPointFrom(*pcIn, i);
100-
#endif
10195
}
10296
}

mp2p_icp_filters/src/FilterDecimateAdaptive.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @date Nov 24, 2023
1919
*/
2020

21+
#include <mp2p_icp/pointcloud_field_utils.h>
2122
#include <mp2p_icp_filters/FilterDecimateAdaptive.h>
2223
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2324
#include <mrpt/containers/yaml.h>
@@ -183,6 +184,7 @@ void FilterDecimateAdaptive::filter(mp2p_icp::metric_map_t& inOut) const
183184

184185
outPc->registerPointFieldsFrom(pc);
185186
mrpt::maps::CPointsMap::InsertCtx ctx = outPc->prepareForInsertPointsFrom(pc);
187+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outPc, *this);
186188

187189
// Perform resampling:
188190
// -------------------

mp2p_icp_filters/src/FilterDecimateVoxels.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @date Sep 10, 2021
1919
*/
2020

21+
#include <mp2p_icp/pointcloud_field_utils.h>
2122
#include <mp2p_icp/pointcloud_sanity_check.h>
2223
#include <mp2p_icp_filters/FilterDecimateVoxels.h>
2324
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
@@ -172,6 +173,7 @@ void FilterDecimateVoxels::filter(mp2p_icp::metric_map_t& inOut) const
172173
outPc->registerPointFieldsFrom(*pcPtrs[mapIdx]);
173174
mrpt::maps::CPointsMap::InsertCtx ctxOut =
174175
outPc->prepareForInsertPointsFrom(*pcPtrs[mapIdx]);
176+
mp2p_icp::warn_on_field_padding_mismatch(*pcPtrs[mapIdx], *outPc, *this);
175177

176178
for (size_t i = 0; i < xs.size(); i++)
177179
{

mp2p_icp_filters/src/FilterDeskew.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include <mola_imu_preintegration/trajectory_from_buffer.h>
2525
#endif
2626

27+
#include <mp2p_icp/pointcloud_field_utils.h>
2728
#include <mp2p_icp_filters/FilterDeskew.h>
2829
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2930
#include <mrpt/containers/yaml.h>
@@ -430,6 +431,7 @@ void FilterDeskew::filter(mp2p_icp::metric_map_t& inOut) const
430431

431432
// and then, prepare structures for fast copying:
432433
insert_ctx = outPc->prepareForInsertPointsFrom(*inPc);
434+
mp2p_icp::warn_on_field_padding_mismatch(*inPc, *outPc, *this);
433435
}
434436

435437
// If the input is empty, just move on:

mp2p_icp_filters/src/FilterMLS.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* @date Oct 26, 2025
2020
*/
2121

22+
#include <mp2p_icp/pointcloud_field_utils.h>
23+
#include <mp2p_icp/pointcloud_sanity_check.h>
2224
#include <mp2p_icp_filters/FilterMLS.h>
2325
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2426
#include <mrpt/containers/NonCopiableData.h>
@@ -630,6 +632,7 @@ void FilterMLS::filter(mp2p_icp::metric_map_t& inOut) const
630632
ASSERT_(normals_z);
631633

632634
const auto ctx = outPc->prepareForInsertPointsFrom(*query_pc);
635+
mp2p_icp::warn_on_field_padding_mismatch(*query_pc, *outPc, *this);
633636

634637
const size_t firstIdx = outPc->size();
635638
outPc->reserve(firstIdx + nNewPoints);

mp2p_icp_filters/src/FilterSOR.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* @date Dec 28, 2025
2020
*/
2121

22+
#include <mp2p_icp/pointcloud_field_utils.h>
23+
#include <mp2p_icp/pointcloud_sanity_check.h>
2224
#include <mp2p_icp_filters/FilterSOR.h>
2325
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2426
#include <mrpt/containers/yaml.h>
@@ -87,11 +89,13 @@ void FilterSOR::filter(mp2p_icp::metric_map_t& inOut) const
8789
{
8890
outInliers->registerPointFieldsFrom(pc);
8991
ctxI = outInliers->prepareForInsertPointsFrom(pc);
92+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outInliers, *this);
9093
}
9194
if (outOutliers)
9295
{
9396
outOutliers->registerPointFieldsFrom(pc);
9497
ctxO = outOutliers->prepareForInsertPointsFrom(pc);
98+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outOutliers, *this);
9599
}
96100

97101
if (pcPtr->empty())

mp2p_icp_filters/src/FilterVoxelSOR.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
* @date Jan 21, 2026
2020
*/
2121

22+
#include <mp2p_icp/pointcloud_field_utils.h>
23+
#include <mp2p_icp/pointcloud_sanity_check.h>
2224
#include <mp2p_icp_filters/FilterVoxelSOR.h>
2325
#include <mp2p_icp_filters/GetOrCreatePointLayer.h>
2426
#include <mp2p_icp_filters/PointCloudToVoxelGrid.h>
@@ -92,16 +94,17 @@ void FilterVoxelSOR::filter(mp2p_icp::metric_map_t& inOut) const
9294
outOutliers->clear();
9395
}
9496

95-
#if MRPT_VERSION >= 0x020f00
9697
outInliers->registerPointFieldsFrom(*pcIn);
9798
auto ctxI = outInliers->prepareForInsertPointsFrom(*pcIn);
99+
mp2p_icp::warn_on_field_padding_mismatch(*pcIn, *outInliers, *this);
100+
98101
std::optional<mrpt::maps::CPointsMap::InsertCtx> ctxO;
99102
if (outOutliers)
100103
{
101104
outOutliers->registerPointFieldsFrom(*pcIn);
102105
ctxO = outOutliers->prepareForInsertPointsFrom(*pcIn);
106+
mp2p_icp::warn_on_field_padding_mismatch(pc, *outOutliers, *this);
103107
}
104-
#endif
105108

106109
const auto& xs = pcIn->getPointsBufferRef_x();
107110
const auto& ys = pcIn->getPointsBufferRef_y();

mp2p_icp_map/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ set(LIB_SRCS
1111
src/NearestPlaneCapable.cpp
1212
src/NearestPointWithCovCapable.cpp
1313
src/point_with_cov_pair_t.cpp
14+
src/pointcloud_field_utils.cpp
1415
src/pointcloud_sanity_check.cpp
1516
src/update_velocity_buffer_from_obs.cpp
1617
#
@@ -30,6 +31,7 @@ set(LIB_PUBLIC_HDRS
3031
include/mp2p_icp/point_plane_pair_t.h
3132
include/mp2p_icp/point_with_cov_pair_t.h
3233
include/mp2p_icp/pointcloud_bitfield.h
34+
include/mp2p_icp/pointcloud_field_utils.h
3335
include/mp2p_icp/pointcloud_sanity_check.h
3436
include/mp2p_icp/render_params.h
3537
include/mp2p_icp/update_velocity_buffer_from_obs.h

0 commit comments

Comments
 (0)