@@ -29,7 +29,7 @@ namespace RGL
29
29
30
30
LidarRaycaster::LidarRaycaster (LidarRaycaster&& other)
31
31
: m_uuid{ other.m_uuid }
32
- , m_isMaxRangeEnabled { other.m_isMaxRangeEnabled }
32
+ , m_returnNonHits { other.m_returnNonHits }
33
33
, m_range{ other.m_range }
34
34
, m_graph{ std::move (other.m_graph ) }
35
35
, m_rayTransforms{ AZStd::move (other.m_rayTransforms ) }
@@ -169,6 +169,18 @@ namespace RGL
169
169
Utils::UnpackRglEntityId);
170
170
}
171
171
172
+ if (auto isHit = raycastResults.GetFieldSpan <ROS2::RaycastResultFlags::IsHit>(); isHit.has_value ())
173
+ {
174
+ AZStd::transform (
175
+ m_rglRaycastResults.m_isHit .begin (),
176
+ m_rglRaycastResults.m_isHit .end (),
177
+ isHit.value ().begin (),
178
+ [](int32_t isHit)
179
+ {
180
+ return isHit != 0 ;
181
+ });
182
+ }
183
+
172
184
return AZ::Success (m_raycastResults.value ());
173
185
}
174
186
@@ -193,7 +205,7 @@ namespace RGL
193
205
float minRangeNonHitValue = -AZStd::numeric_limits<float >::infinity ();
194
206
float maxRangeNonHitValue = AZStd::numeric_limits<float >::infinity ();
195
207
196
- if (m_isMaxRangeEnabled && m_range.has_value ())
208
+ if (m_returnNonHits && m_range.has_value ())
197
209
{
198
210
minRangeNonHitValue = m_range.value ().m_min ;
199
211
maxRangeNonHitValue = m_range.value ().m_max ;
@@ -202,10 +214,9 @@ namespace RGL
202
214
m_graph.ConfigureRaytraceNodeNonHits (minRangeNonHitValue, maxRangeNonHitValue);
203
215
}
204
216
205
- void LidarRaycaster::ConfigureMaxRangePointAddition (bool addMaxRangePoints )
217
+ void LidarRaycaster::ConfigureNonHitReturn (bool returnNonHits )
206
218
{
207
- m_isMaxRangeEnabled = addMaxRangePoints;
208
-
219
+ m_returnNonHits = returnNonHits;
209
220
UpdateNonHitValues ();
210
221
211
222
// We need to configure if points should be compacted to minimize the CPU operations when retrieving raycast results.
@@ -259,11 +270,23 @@ namespace RGL
259
270
}
260
271
}
261
272
273
+ if (results.IsFieldPresent <ROS2::RaycastResultFlags::IsHit>())
274
+ {
275
+ if (!resultsSize.has_value ())
276
+ {
277
+ resultsSize = rglResults.m_isHit .size ();
278
+ }
279
+ else if (resultsSize != rglResults.m_isHit .size ())
280
+ {
281
+ return AZStd::nullopt ;
282
+ }
283
+ }
284
+
262
285
return resultsSize;
263
286
}
264
287
265
288
bool LidarRaycaster::ShouldEnableCompact () const
266
289
{
267
- return !m_raycastResults->IsFieldPresent <ROS2::RaycastResultFlags::Range>() && !m_isMaxRangeEnabled ;
290
+ return !m_raycastResults->IsFieldPresent <ROS2::RaycastResultFlags::Range>() && !m_returnNonHits ;
268
291
}
269
292
} // namespace RGL
0 commit comments