Uses switches depending on line type
This commit is contained in:
parent
a2ae705126
commit
e6ba65db21
|
@ -206,23 +206,33 @@ namespace geom {
|
||||||
size_t PosToAdd = it - redirections.begin();
|
size_t PosToAdd = it - redirections.begin();
|
||||||
|
|
||||||
Mesh out_mesh;
|
Mesh out_mesh;
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving ){
|
switch(lane_pair.second.GetType())
|
||||||
out_mesh += *GenerateTesselated(lane_pair.second);
|
{
|
||||||
}else{
|
case road::Lane::LaneType::Driving:
|
||||||
out_mesh += *GenerateSidewalk(lane_pair.second);
|
case road::Lane::LaneType::Parking:
|
||||||
|
case road::Lane::LaneType::Bidirectional:
|
||||||
|
{
|
||||||
|
out_mesh += *GenerateTesselated(lane_pair.second);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case road::Lane::LaneType::Shoulder:
|
||||||
|
case road::Lane::LaneType::Sidewalk:
|
||||||
|
case road::Lane::LaneType::Biking:
|
||||||
|
{
|
||||||
|
out_mesh += *GenerateSidewalk(lane_pair.second);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
out_mesh += *GenerateTesselated(lane_pair.second);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( result[lane_pair.second.GetType()].size() <= PosToAdd ){
|
if( result[lane_pair.second.GetType()].size() <= PosToAdd ){
|
||||||
result[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(out_mesh));
|
result[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(out_mesh));
|
||||||
} else {
|
} else {
|
||||||
uint32_t verticesinwidth = 0;
|
uint32_t verticesinwidth = SelectVerticesInWidth(vertices_in_width, lane_pair.second.GetType());
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving) {
|
|
||||||
verticesinwidth = vertices_in_width;
|
|
||||||
}else if(lane_pair.second.GetType() == road::Lane::LaneType::Sidewalk){
|
|
||||||
verticesinwidth = 6;
|
|
||||||
}else{
|
|
||||||
verticesinwidth = 2;
|
|
||||||
}
|
|
||||||
(result[lane_pair.second.GetType()][PosToAdd])->ConcatMesh(out_mesh, verticesinwidth);
|
(result[lane_pair.second.GetType()][PosToAdd])->ConcatMesh(out_mesh, verticesinwidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -548,12 +558,28 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
|
|
||||||
for (auto &&lane_pair : lane_section.GetLanes()) {
|
for (auto &&lane_pair : lane_section.GetLanes()) {
|
||||||
Mesh lane_section_mesh;
|
Mesh lane_section_mesh;
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving ){
|
switch(lane_pair.second.GetType())
|
||||||
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_until);
|
{
|
||||||
}else{
|
case road::Lane::LaneType::Driving:
|
||||||
lane_section_mesh += *GenerateSidewalk(lane_pair.second, s_current, s_until);
|
case road::Lane::LaneType::Parking:
|
||||||
|
case road::Lane::LaneType::Bidirectional:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_until);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case road::Lane::LaneType::Shoulder:
|
||||||
|
case road::Lane::LaneType::Sidewalk:
|
||||||
|
case road::Lane::LaneType::Biking:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateSidewalk(lane_pair.second, s_current, s_until);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_until);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto it = std::find(redirections.begin(), redirections.end(), lane_pair.first);
|
auto it = std::find(redirections.begin(), redirections.end(), lane_pair.first);
|
||||||
if (it == redirections.end()) {
|
if (it == redirections.end()) {
|
||||||
redirections.push_back(lane_pair.first);
|
redirections.push_back(lane_pair.first);
|
||||||
|
@ -564,14 +590,7 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
if (mesh_uptr_list[lane_pair.second.GetType()].size() <= PosToAdd) {
|
if (mesh_uptr_list[lane_pair.second.GetType()].size() <= PosToAdd) {
|
||||||
mesh_uptr_list[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(lane_section_mesh));
|
mesh_uptr_list[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(lane_section_mesh));
|
||||||
} else {
|
} else {
|
||||||
uint32_t verticesinwidth = 0;
|
uint32_t verticesinwidth = SelectVerticesInWidth(vertices_in_width, lane_pair.second.GetType());
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving) {
|
|
||||||
verticesinwidth = vertices_in_width;
|
|
||||||
}else if(lane_pair.second.GetType() == road::Lane::LaneType::Sidewalk){
|
|
||||||
verticesinwidth = 6;
|
|
||||||
}else{
|
|
||||||
verticesinwidth = 2;
|
|
||||||
}
|
|
||||||
(mesh_uptr_list[lane_pair.second.GetType()][PosToAdd])->ConcatMesh(lane_section_mesh, verticesinwidth);
|
(mesh_uptr_list[lane_pair.second.GetType()][PosToAdd])->ConcatMesh(lane_section_mesh, verticesinwidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -580,10 +599,27 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
if (s_end - s_current > EPSILON) {
|
if (s_end - s_current > EPSILON) {
|
||||||
for (auto &&lane_pair : lane_section.GetLanes()) {
|
for (auto &&lane_pair : lane_section.GetLanes()) {
|
||||||
Mesh lane_section_mesh;
|
Mesh lane_section_mesh;
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving ){
|
switch(lane_pair.second.GetType())
|
||||||
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_end);
|
{
|
||||||
}else{
|
case road::Lane::LaneType::Driving:
|
||||||
lane_section_mesh += *GenerateSidewalk(lane_pair.second, s_current, s_end);
|
case road::Lane::LaneType::Parking:
|
||||||
|
case road::Lane::LaneType::Bidirectional:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case road::Lane::LaneType::Shoulder:
|
||||||
|
case road::Lane::LaneType::Sidewalk:
|
||||||
|
case road::Lane::LaneType::Biking:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateSidewalk(lane_pair.second, s_current, s_end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
lane_section_mesh += *GenerateTesselated(lane_pair.second, s_current, s_end);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto it = std::find(redirections.begin(), redirections.end(), lane_pair.first);
|
auto it = std::find(redirections.begin(), redirections.end(), lane_pair.first);
|
||||||
|
@ -598,13 +634,7 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
mesh_uptr_list[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(lane_section_mesh));
|
mesh_uptr_list[lane_pair.second.GetType()].push_back(std::make_unique<Mesh>(lane_section_mesh));
|
||||||
} else {
|
} else {
|
||||||
uint32_t verticesinwidth = 0;
|
uint32_t verticesinwidth = 0;
|
||||||
if(lane_pair.second.GetType() == road::Lane::LaneType::Driving) {
|
|
||||||
verticesinwidth = vertices_in_width;
|
|
||||||
}else if(lane_pair.second.GetType() == road::Lane::LaneType::Sidewalk){
|
|
||||||
verticesinwidth = 6;
|
|
||||||
}else{
|
|
||||||
verticesinwidth = 2;
|
|
||||||
}
|
|
||||||
*(mesh_uptr_list[lane_pair.second.GetType()][PosToAdd]) += lane_section_mesh;
|
*(mesh_uptr_list[lane_pair.second.GetType()][PosToAdd]) += lane_section_mesh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -725,9 +755,20 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
for (auto&& lane_section : road.GetLaneSections()) {
|
for (auto&& lane_section : road.GetLaneSections()) {
|
||||||
for (auto&& lane : lane_section.GetLanes()) {
|
for (auto&& lane : lane_section.GetLanes()) {
|
||||||
if (lane.first != 0) {
|
if (lane.first != 0) {
|
||||||
if(lane.second.GetType() == road::Lane::LaneType::Driving ){
|
switch(lane.second.GetType())
|
||||||
GenerateLaneMarksForNotCenterLine(lane_section, lane.second, inout, outinfo);
|
{
|
||||||
outinfo.push_back("white");
|
case road::Lane::LaneType::Driving:
|
||||||
|
case road::Lane::LaneType::Parking:
|
||||||
|
case road::Lane::LaneType::Bidirectional:
|
||||||
|
{
|
||||||
|
GenerateLaneMarksForNotCenterLine(lane_section, lane.second, inout, outinfo);
|
||||||
|
outinfo.push_back("white");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(lane.second.GetType() == road::Lane::LaneType::None ){
|
if(lane.second.GetType() == road::Lane::LaneType::None ){
|
||||||
|
@ -1131,6 +1172,32 @@ std::map<road::Lane::LaneType , std::vector<std::unique_ptr<Mesh>>> MeshFactory:
|
||||||
return std::make_unique<Mesh>(out_mesh);
|
return std::make_unique<Mesh>(out_mesh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t MeshFactory::SelectVerticesInWidth(uint32_t default_num_vertices, road::Lane::LaneType type)
|
||||||
|
{
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case road::Lane::LaneType::Driving:
|
||||||
|
case road::Lane::LaneType::Parking:
|
||||||
|
case road::Lane::LaneType::Bidirectional:
|
||||||
|
{
|
||||||
|
return default_num_vertices;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case road::Lane::LaneType::Shoulder:
|
||||||
|
case road::Lane::LaneType::Sidewalk:
|
||||||
|
case road::Lane::LaneType::Biking:
|
||||||
|
{
|
||||||
|
return 6;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::pair<geom::Vector3D, geom::Vector3D> MeshFactory::ComputeEdgesForLanemark(
|
std::pair<geom::Vector3D, geom::Vector3D> MeshFactory::ComputeEdgesForLanemark(
|
||||||
const road::LaneSection& lane_section,
|
const road::LaneSection& lane_section,
|
||||||
const road::Lane& lane,
|
const road::Lane& lane,
|
||||||
|
|
|
@ -129,9 +129,7 @@ namespace geom {
|
||||||
const road::Lane& lane,
|
const road::Lane& lane,
|
||||||
std::vector<std::unique_ptr<Mesh>>& inout,
|
std::vector<std::unique_ptr<Mesh>>& inout,
|
||||||
std::vector<std::string>& outinfo ) const;
|
std::vector<std::string>& outinfo ) const;
|
||||||
// =========================================================================
|
|
||||||
// -- Generation parameters ------------------------------------------------
|
|
||||||
// =========================================================================
|
|
||||||
|
|
||||||
/// Parameters for the road generation
|
/// Parameters for the road generation
|
||||||
struct RoadParameters {
|
struct RoadParameters {
|
||||||
|
@ -148,6 +146,12 @@ namespace geom {
|
||||||
|
|
||||||
RoadParameters road_param;
|
RoadParameters road_param;
|
||||||
|
|
||||||
|
|
||||||
|
// =========================================================================
|
||||||
|
// -- Helper functions ------------------------------------------------
|
||||||
|
// =========================================================================
|
||||||
|
|
||||||
|
static uint32_t SelectVerticesInWidth(uint32_t default_num_vertices, road::Lane::LaneType type);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
// Calculate the points on both sides of the lane mark for the specified s_current
|
// Calculate the points on both sides of the lane mark for the specified s_current
|
||||||
|
|
Loading…
Reference in New Issue