@@ -212,18 +212,14 @@ Vec3D Road::get_surface_pt(double s, const double t, Vec3D* vn) const
212212 return this ->get_xyz (s, t, h, nullptr , nullptr , vn);
213213}
214214
215- std::set<double >
216- Road::approximate_lane_border_linear (const Lane& lane, const double s_start, const double s_end, const double eps, const bool outer) const
215+ std::set<double > Road::approximate_lane_border_linear (const LaneKey& lane_key, double s_start, double s_end, double eps, bool outer) const
217216{
217+ const LaneSection& lanesection = this ->s_to_lanesection .at (lane_key.lanesection_s0 );
218+ const Lane& lane = lanesection.id_to_lane .at (lane_key.lane_id );
219+
218220 std::set<double > s_vals = this ->ref_line .approximate_linear (eps, s_start, s_end);
219221
220- CubicProfile border = lane.outer_border ;
221- if (!outer)
222- {
223- const LaneSection& lanesection = this ->s_to_lanesection .at (lane.key .lanesection_s0 );
224- const Lane& inner_neighbor_lane = lanesection.get_lane (next_towards_zero (lane.id ));
225- border = inner_neighbor_lane.outer_border ;
226- }
222+ const CubicProfile border = outer ? lane.outer_border : lanesection.id_to_lane .at (next_towards_zero (lane.id )).outer_border ;
227223
228224 std::set<double > s_vals_brdr = border.approximate_linear (eps, s_start, s_end);
229225 s_vals.insert (s_vals_brdr.begin (), s_vals_brdr.end ());
@@ -238,23 +234,20 @@ Road::approximate_lane_border_linear(const Lane& lane, const double s_start, con
238234 return s_vals;
239235}
240236
241- std::set<double > Road::approximate_lane_border_linear (const Lane& lane, const double eps, const bool outer) const
237+ std::set<double > Road::approximate_lane_border_linear (const LaneKey& lane_key, double eps, bool outer) const
242238{
243- const double s_end = this ->get_lanesection_end (lane. key .lanesection_s0 );
244- return this ->approximate_lane_border_linear (lane, lane. key . lanesection_s0 , s_end , eps, outer);
239+ const double lanesec_s_end = this ->get_lanesection_end (lane_key .lanesection_s0 );
240+ return this ->approximate_lane_border_linear (lane_key, lane_key. lanesection_s0 , lanesec_s_end , eps, outer);
245241}
246242
247- Line3D Road::get_lane_border_line (const Lane& lane, const double s_start, const double s_end, const double eps, const bool outer) const
243+ Line3D Road::get_lane_border_line (const LaneKey& lane_key, double s_start, double s_end, double eps, bool outer) const
248244{
249- std::set<double > s_vals = this ->approximate_lane_border_linear (lane, s_start, s_end, eps, outer);
245+ const LaneSection& lanesection = this ->s_to_lanesection .at (lane_key.lanesection_s0 );
246+ const Lane& lane = lanesection.id_to_lane .at (lane_key.lane_id );
250247
251- CubicProfile border = lane.outer_border ;
252- if (!outer)
253- {
254- const LaneSection& lanesection = this ->s_to_lanesection .at (lane.key .lanesection_s0 );
255- const Lane& inner_neighbor_lane = lanesection.get_lane (next_towards_zero (lane.id ));
256- border = inner_neighbor_lane.outer_border ;
257- }
248+ std::set<double > s_vals = this ->approximate_lane_border_linear (lane_key, s_start, s_end, eps, outer);
249+
250+ const CubicProfile border = outer ? lane.outer_border : lanesection.id_to_lane .at (next_towards_zero (lane.id )).outer_border ;
258251
259252 Line3D border_line;
260253 for (const double & s : s_vals)
@@ -268,21 +261,23 @@ Line3D Road::get_lane_border_line(const Lane& lane, const double s_start, const
268261 return border_line;
269262}
270263
271- Line3D Road::get_lane_border_line (const Lane& lane, const double eps, const bool outer) const
264+ Line3D Road::get_lane_border_line (const LaneKey& lane_key, double eps, bool outer) const
272265{
273- const double s_end = this ->get_lanesection_end (lane. key .lanesection_s0 );
274- return this ->get_lane_border_line (lane, lane. key . lanesection_s0 , s_end , eps, outer);
266+ const double lanesec_s_end = this ->get_lanesection_end (lane_key .lanesection_s0 );
267+ return this ->get_lane_border_line (lane_key, lane_key. lanesection_s0 , lanesec_s_end , eps, outer);
275268}
276269
277- Mesh3D Road::get_lane_mesh (const Lane& lane, const double s_start, const double s_end, const double eps, std::vector<uint32_t >* outline_indices) const
270+ Mesh3D Road::get_lane_mesh (const LaneKey& lane_key, double s_start, double s_end, double eps, std::vector<uint32_t >* outline_indices) const
278271{
272+ const LaneSection& lanesection = this ->s_to_lanesection .at (lane_key.lanesection_s0 );
273+ const Lane& lane = lanesection.id_to_lane .at (lane_key.lane_id );
274+
279275 std::set<double > s_vals = this ->ref_line .approximate_linear (eps, s_start, s_end);
280276 std::set<double > s_vals_outer_brdr = lane.outer_border .approximate_linear (eps, s_start, s_end);
281277 s_vals.insert (s_vals_outer_brdr.begin (), s_vals_outer_brdr.end ());
282278
283- const LaneSection& lanesection = this ->s_to_lanesection .at (lane.key .lanesection_s0 );
284- const Lane& inner_neighbor_lane = lanesection.get_lane (next_towards_zero (lane.id ));
285- std::set<double > s_vals_inner_brdr = inner_neighbor_lane.outer_border .approximate_linear (eps, s_start, s_end);
279+ const Lane& inner_neighbor_lane = lanesection.get_lane (next_towards_zero (lane.id ));
280+ std::set<double > s_vals_inner_brdr = inner_neighbor_lane.outer_border .approximate_linear (eps, s_start, s_end);
286281 s_vals.insert (s_vals_inner_brdr.begin (), s_vals_inner_brdr.end ());
287282 std::set<double > s_vals_lane_offset = this ->lane_offset .approximate_linear (eps, s_start, s_end);
288283 s_vals.insert (s_vals_lane_offset.begin (), s_vals_lane_offset.end ());
@@ -333,25 +328,26 @@ Mesh3D Road::get_lane_mesh(const Lane& lane, const double s_start, const double
333328 }
334329
335330 if (outline_indices)
336- {
337331 *outline_indices = get_triangle_strip_outline_indices<uint32_t >(out_mesh.vertices .size ());
338- }
339332
340333 return out_mesh;
341334}
342335
343- Mesh3D Road::get_lane_mesh (const Lane& lane, const double eps, std::vector<uint32_t >* outline_indices) const
336+ Mesh3D Road::get_lane_mesh (const LaneKey& lane_key, double eps, std::vector<uint32_t >* outline_indices) const
344337{
345- const double s_end = this ->get_lanesection_end (lane. key .lanesection_s0 );
346- return this ->get_lane_mesh (lane, lane. key . lanesection_s0 , s_end , eps, outline_indices);
338+ const double lanesec_s_end = this ->get_lanesection_end (lane_key .lanesection_s0 );
339+ return this ->get_lane_mesh (lane_key, lane_key. lanesection_s0 , lanesec_s_end , eps, outline_indices);
347340}
348341
349- Mesh3D Road::get_roadmark_mesh (const Lane& lane , const SingleRoadMark& roadmark, const double eps) const
342+ Mesh3D Road::get_roadmark_mesh (const LaneKey& lane_key , const SingleRoadMark& roadmark, double eps) const
350343{
351344 if (is_zero (roadmark.width ))
352345 return Mesh3D{};
353346
354- const std::set<double > s_vals = this ->approximate_lane_border_linear (lane, roadmark.s0 , roadmark.s1 , eps, true );
347+ const LaneSection& lanesection = this ->s_to_lanesection .at (lane_key.lanesection_s0 );
348+ const Lane& lane = lanesection.id_to_lane .at (lane_key.lane_id );
349+
350+ const std::set<double > s_vals = this ->approximate_lane_border_linear (lane_key, roadmark.s0 , roadmark.s1 , eps, true );
355351
356352 Mesh3D out_mesh;
357353 for (const double & s : s_vals)
@@ -402,7 +398,7 @@ Mesh3D Road::get_road_signal_mesh(const RoadSignal& road_signal) const
402398 return road_signal_mesh;
403399}
404400
405- Mesh3D Road::get_road_object_mesh (const RoadObject& road_obj, const double eps) const
401+ Mesh3D Road::get_road_object_mesh (const RoadObject& road_obj, double eps) const
406402{
407403 std::vector<RoadObjectRepeat> repeats_copy = road_obj.repeats ; // make copy to keep method const
408404 if (repeats_copy.empty () && road_obj.outlines .empty ()) // handle single road object as one object repeat
0 commit comments