Skip to content

Commit f009640

Browse files
authored
Merge pull request #3223 from pleroy/Serialization
Only write the number of dense points if downsampling is enabled
2 parents 7522c92 + 36c120d commit f009640

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

physics/discrete_trajectory_body.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,7 @@ void DiscreteTrajectory<Frame>::ReadFromPreHamiltonMessage(
879879
downsampling_parameters.max_dense_intervals);
880880
downsampling_parameters.tolerance.WriteToMessage(
881881
serialized_downsampling_parameters->mutable_tolerance());
882+
serialized_segment.set_number_of_dense_points(0); // Overridden later.
882883
}
883884
*sit = DiscreteTrajectorySegment<Frame>::ReadFromMessage(serialized_segment,
884885
self);

physics/discrete_trajectory_segment_body.hpp

+8-5
Original file line numberDiff line numberDiff line change
@@ -300,14 +300,17 @@ DiscreteTrajectorySegment<Frame>::ReadFromMessage(
300300
}
301301

302302
// Finally, restore the downsampling information.
303+
CHECK_EQ(message.has_downsampling_parameters(),
304+
message.has_number_of_dense_points())
305+
<< message.DebugString();
303306
if (message.has_downsampling_parameters()) {
304307
segment.downsampling_parameters_ = DownsamplingParameters{
305308
.max_dense_intervals =
306309
message.downsampling_parameters().max_dense_intervals(),
307310
.tolerance = Length::ReadFromMessage(
308311
message.downsampling_parameters().tolerance())};
312+
segment.number_of_dense_points_ = message.number_of_dense_points();
309313
}
310-
segment.number_of_dense_points_ = message.number_of_dense_points();
311314

312315
return segment;
313316
}
@@ -542,11 +545,11 @@ void DiscreteTrajectorySegment<Frame>::WriteToMessage(
542545
downsampling_parameters_->max_dense_intervals);
543546
downsampling_parameters_->tolerance.WriteToMessage(
544547
serialized_downsampling_parameters->mutable_tolerance());
548+
message->set_number_of_dense_points(std::min(
549+
timeline_size,
550+
std::max<std::int64_t>(
551+
0, number_of_dense_points_ - number_of_points_to_skip_at_end)));
545552
}
546-
message->set_number_of_dense_points(std::min(
547-
timeline_size,
548-
std::max<std::int64_t>(
549-
0, number_of_dense_points_ - number_of_points_to_skip_at_end)));
550553

551554
// Convert the |exact| vector into a set, and add the extremities. This
552555
// ensures that we don't have redundancies. The set is sorted by time to

serialization/physics.proto

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ message DiscreteTrajectorySegment {
136136
required int32 timeline_size = 4;
137137
}
138138
optional DownsamplingParameters downsampling_parameters = 1;
139-
required int32 number_of_dense_points = 2;
139+
optional int32 number_of_dense_points = 2;
140140
repeated InstantaneousDegreesOfFreedom exact = 3;
141141
required Zfp zfp = 4;
142142
}

0 commit comments

Comments
 (0)