Skip to content

Commit 544d439

Browse files
committed
Added write/read methods to CPointsMap::TInsertionOptions
As mentioned in https://github.com/jlblancoc/mrpt/pull/8
1 parent 4927c76 commit 544d439

6 files changed

Lines changed: 123 additions & 86 deletions

File tree

doc/doxygen-pages/changeLog_doc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
- New structures:
4343
- mrpt::slam::TMatchingParams
4444
- mrpt::slam::TMatchingExtraResults
45+
- mrpt::slam::CPointsMap::TInsertionOptions now have methods to save/load from binary streams, making more maintainable the serialization of point maps - [(commit)]()
4546
- New options in point maps: mrpt::slam::CPointsMap::TInsertionOptions::insertInvalidPoints - [(commit)](https://github.com/jlblancoc/mrpt/pull/8)
4647
- mrpt::slam::CObservationIMU now includes data fields for 3D magnetometers and altimeters. - [(commit)](http://code.google.com/p/mrpt/source/detail?r=3451)
4748
- Method renamed mrpt::utils::CEnhancedMetaFile::selectVectorTextFont() to avoid shadowing mrpt::utils::CCanvas::selectTextFont()

libs/maps/include/mrpt/slam/CPointsMap.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ namespace slam
183183
float maxDistForInterpolatePoints; //!< The maximum distance between two points to interpolate between them (ONLY when also_interpolate=true)
184184
bool insertInvalidPoints; //!< Points with x,y,z coordinates set to zero will also be inserted
185185

186+
void writeToStream(CStream &out) const; //!< Binary dump to stream - for usage in derived classes' serialization
187+
void readFromStream(CStream &in); //!< Binary dump to stream - for usage in derived classes' serialization
186188
};
187189

188190
TInsertionOptions insertionOptions; //!< The options used when inserting observations in the map

libs/maps/src/maps/CColouredPointsMap.cpp

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -132,33 +132,12 @@ void CColouredPointsMap::writeToStream(CStream &out, int *version) const
132132
out.WriteBufferFixEndianness(&x[0],n);
133133
out.WriteBufferFixEndianness(&y[0],n);
134134
out.WriteBufferFixEndianness(&z[0],n);
135-
// v7 removed: WriteBufferFixEndianness(&pointWeight[0],n);
136135
}
136+
out << m_color_R << m_color_G << m_color_B; // added in v4
137137

138-
// version 2: options saved too
139-
out << insertionOptions.minDistBetweenLaserPoints
140-
<< insertionOptions.addToExistingPointsMap
141-
<< insertionOptions.also_interpolate
142-
<< insertionOptions.disableDeletion
143-
<< insertionOptions.fuseWithExisting
144-
<< insertionOptions.isPlanarMap
145-
// << insertionOptions.matchStaticPointsOnly // Removed in version 6
146-
<< insertionOptions.maxDistForInterpolatePoints;
147-
148-
// Insertion as 3D:
149-
out << m_disableSaveAs3DObject;
150-
151-
// Added in version 3:
152-
out << insertionOptions.horizontalTolerance;
153-
154-
// V4:
155-
out << m_color_R << m_color_G << m_color_B; // Removed in v7: << m_min_dist;
156-
157-
// V5:
158-
likelihoodOptions.writeToStream(out);
159-
160-
// Added in version 8:
161-
out << insertionOptions.insertInvalidPoints;
138+
out << m_disableSaveAs3DObject; // Insertion as 3D
139+
insertionOptions.writeToStream(out); // version 9: insert options are saved with its own method
140+
likelihoodOptions.writeToStream(out); // Added in version 5
162141
}
163142
}
164143

@@ -171,6 +150,29 @@ void CColouredPointsMap::readFromStream(CStream &in, int version)
171150
{
172151
switch(version)
173152
{
153+
case 8:
154+
{
155+
mark_as_modified();
156+
157+
// Read the number of points:
158+
uint32_t n;
159+
in >> n;
160+
161+
x.resize(n); y.resize(n); z.resize(n);
162+
163+
if (n>0)
164+
{
165+
in.ReadBufferFixEndianness(&x[0],n);
166+
in.ReadBufferFixEndianness(&y[0],n);
167+
in.ReadBufferFixEndianness(&z[0],n);
168+
}
169+
in >> m_color_R >> m_color_G >> m_color_B;
170+
171+
in >> m_disableSaveAs3DObject;
172+
insertionOptions.readFromStream(in);
173+
likelihoodOptions.readFromStream(in);
174+
} break;
175+
174176
case 0:
175177
case 1:
176178
case 2:

libs/maps/src/maps/CPointsMap.cpp

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -605,22 +605,53 @@ bool CPointsMap::isEmpty() const
605605
TInsertionOptions
606606
---------------------------------------------------------------*/
607607
CPointsMap::TInsertionOptions::TInsertionOptions() :
608-
minDistBetweenLaserPoints ( 0.02f),
609-
addToExistingPointsMap ( true),
610-
also_interpolate ( false),
611-
disableDeletion ( true),
612-
fuseWithExisting ( false),
613-
isPlanarMap ( false),
614-
horizontalTolerance ( DEG2RAD(0.05) ),
615-
maxDistForInterpolatePoints ( 2.0f ),
616-
insertInvalidPoints ( false)
608+
minDistBetweenLaserPoints ( 0.02f),
609+
addToExistingPointsMap ( true),
610+
also_interpolate ( false),
611+
disableDeletion ( true),
612+
fuseWithExisting ( false),
613+
isPlanarMap ( false),
614+
horizontalTolerance ( DEG2RAD(0.05) ),
615+
maxDistForInterpolatePoints ( 2.0f ),
616+
insertInvalidPoints ( false)
617617
{
618618
}
619619

620+
// Binary dump to/read from stream - for usage in derived classes' serialization
621+
void CPointsMap::TInsertionOptions::writeToStream(CStream &out) const
622+
{
623+
const int8_t version = 0;
624+
out << version;
625+
626+
out
627+
<< minDistBetweenLaserPoints << addToExistingPointsMap << also_interpolate
628+
<< disableDeletion << fuseWithExisting << isPlanarMap << horizontalTolerance
629+
<< maxDistForInterpolatePoints << insertInvalidPoints; // v0
630+
}
631+
632+
void CPointsMap::TInsertionOptions::readFromStream(CStream &in)
633+
{
634+
int8_t version;
635+
in >> version;
636+
switch(version)
637+
{
638+
case 0:
639+
{
640+
in
641+
>> minDistBetweenLaserPoints >> addToExistingPointsMap >> also_interpolate
642+
>> disableDeletion >> fuseWithExisting >> isPlanarMap >> horizontalTolerance
643+
>> maxDistForInterpolatePoints >> insertInvalidPoints; // v0
644+
}
645+
break;
646+
default: MRPT_THROW_UNKNOWN_SERIALIZATION_VERSION(version)
647+
}
648+
}
649+
650+
620651
CPointsMap::TLikelihoodOptions::TLikelihoodOptions() :
621-
sigma_dist ( 0.05 ),
622-
max_corr_distance ( 1.0 ),
623-
decimation ( 10 )
652+
sigma_dist ( 0.05 ),
653+
max_corr_distance ( 1.0 ),
654+
decimation ( 10 )
624655
{
625656

626657
}

libs/maps/src/maps/CSimplePointsMap.cpp

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -98,30 +98,11 @@ void CSimplePointsMap::writeToStream(CStream &out, int *version) const
9898
out.WriteBufferFixEndianness(&x[0],n);
9999
out.WriteBufferFixEndianness(&y[0],n);
100100
out.WriteBufferFixEndianness(&z[0],n);
101-
// This was removed in v7: WriteBufferFixEndianness(&pointWeight[0],n);
102101
}
103-
104-
// version 2: options saved too
105-
out << insertionOptions.minDistBetweenLaserPoints
106-
<< insertionOptions.addToExistingPointsMap
107-
<< insertionOptions.also_interpolate
108-
<< insertionOptions.disableDeletion
109-
<< insertionOptions.fuseWithExisting
110-
<< insertionOptions.isPlanarMap
111-
// << insertionOptions.matchStaticPointsOnly // Removed in v6
112-
<< insertionOptions.maxDistForInterpolatePoints;
113-
114-
// Insertion as 3D:
115-
out << m_disableSaveAs3DObject;
116-
117-
// Added in version 3:
118-
out << insertionOptions.horizontalTolerance;
119-
120-
// Added in version 5:
121-
likelihoodOptions.writeToStream(out);
122-
123-
// Added in version 8:
124-
out << insertionOptions.insertInvalidPoints;
102+
out << m_disableSaveAs3DObject; // Insertion as 3D:
103+
104+
insertionOptions.writeToStream(out); // version 9: insert options are saved with its own method:
105+
likelihoodOptions.writeToStream(out); // Added in version 5:
125106
}
126107
}
127108

@@ -134,6 +115,28 @@ void CSimplePointsMap::readFromStream(CStream &in, int version)
134115
{
135116
switch(version)
136117
{
118+
case 8:
119+
{
120+
mark_as_modified();
121+
122+
// Read the number of points:
123+
uint32_t n;
124+
in >> n;
125+
126+
x.resize(n); y.resize(n); z.resize(n);
127+
128+
if (n>0)
129+
{
130+
in.ReadBufferFixEndianness(&x[0],n);
131+
in.ReadBufferFixEndianness(&y[0],n);
132+
in.ReadBufferFixEndianness(&z[0],n);
133+
}
134+
in >> m_disableSaveAs3DObject;
135+
136+
insertionOptions.readFromStream(in);
137+
likelihoodOptions.readFromStream(in);
138+
} break;
139+
137140
case 0:
138141
case 1:
139142
case 2:

libs/maps/src/maps/CWeightedPointsMap.cpp

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ void CWeightedPointsMap::addFrom_classSpecific(const CPointsMap &anotherMap, co
126126
void CWeightedPointsMap::writeToStream(CStream &out, int *version) const
127127
{
128128
if (version)
129-
*version = 0;
129+
*version = 1;
130130
else
131131
{
132132
uint32_t n = x.size();
@@ -142,20 +142,9 @@ void CWeightedPointsMap::writeToStream(CStream &out, int *version) const
142142
out.WriteBufferFixEndianness(&pointWeight[0],n);
143143
}
144144

145-
// options saved too
146-
out << insertionOptions.minDistBetweenLaserPoints
147-
<< insertionOptions.addToExistingPointsMap
148-
<< insertionOptions.also_interpolate
149-
<< insertionOptions.disableDeletion
150-
<< insertionOptions.fuseWithExisting
151-
<< insertionOptions.isPlanarMap
152-
<< insertionOptions.maxDistForInterpolatePoints;
153-
154-
// Insertion as 3D:
155-
out << m_disableSaveAs3DObject;
156-
out << insertionOptions.horizontalTolerance;
157-
158-
likelihoodOptions.writeToStream(out);
145+
out << m_disableSaveAs3DObject; // Insertion as 3D
146+
insertionOptions.writeToStream(out); // version 9: insert options are saved with its own method
147+
likelihoodOptions.writeToStream(out); // Added in version 5
159148
}
160149
}
161150

@@ -169,6 +158,7 @@ void CWeightedPointsMap::readFromStream(CStream &in, int version)
169158
switch(version)
170159
{
171160
case 0:
161+
case 1:
172162
{
173163
mark_as_modified();
174164

@@ -190,18 +180,26 @@ void CWeightedPointsMap::readFromStream(CStream &in, int version)
190180
in.ReadBufferFixEndianness(&pointWeight[0],n);
191181
}
192182

193-
in >> insertionOptions.minDistBetweenLaserPoints
194-
>> insertionOptions.addToExistingPointsMap
195-
>> insertionOptions.also_interpolate
196-
>> insertionOptions.disableDeletion
197-
>> insertionOptions.fuseWithExisting
198-
>> insertionOptions.isPlanarMap
199-
>> insertionOptions.maxDistForInterpolatePoints
200-
>> m_disableSaveAs3DObject;
201-
202-
in >> insertionOptions.horizontalTolerance;
183+
if (version>=1)
184+
{
185+
in >> m_disableSaveAs3DObject; // Insertion as 3D
186+
insertionOptions.readFromStream(in); // version 9: insert options are saved with its own method
187+
}
188+
else
189+
{
190+
insertionOptions = TInsertionOptions();
191+
in >> insertionOptions.minDistBetweenLaserPoints
192+
>> insertionOptions.addToExistingPointsMap
193+
>> insertionOptions.also_interpolate
194+
>> insertionOptions.disableDeletion
195+
>> insertionOptions.fuseWithExisting
196+
>> insertionOptions.isPlanarMap
197+
>> insertionOptions.maxDistForInterpolatePoints
198+
>> m_disableSaveAs3DObject
199+
>> insertionOptions.horizontalTolerance;
200+
}
203201

204-
likelihoodOptions.readFromStream(in);
202+
likelihoodOptions.readFromStream(in); // Added in version 5
205203

206204
} break;
207205
default:

0 commit comments

Comments
 (0)