|
@@ -3033,6 +3033,14 @@ bool OpenDriveXmlParser::ReadJunction (TiXmlElement *node)
|
|
|
subNode=subNode->NextSiblingElement("controller");
|
|
|
}
|
|
|
|
|
|
+ subNode = node->FirstChildElement("crossPath");
|
|
|
+
|
|
|
+ while(subNode)
|
|
|
+ {
|
|
|
+ ReadJunctionCrossPass(junction,subNode);
|
|
|
+ subNode=subNode->NextSiblingElement("crossPath");
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
return true;
|
|
|
|
|
@@ -3122,6 +3130,111 @@ bool OpenDriveXmlParser::ReadJunctionController (Junction* junction, TiXmlElemen
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+bool OpenDriveXmlParser::ReadJunctionCrossPass(Junction * junction, TiXmlElement *node)
|
|
|
+{
|
|
|
+ string strId;
|
|
|
+ string strcrossingRoad;
|
|
|
+ string strroadAtStart;
|
|
|
+ string strroadAtEnd;
|
|
|
+ JunctionCrossPathStartLaneLink startLaneLink;
|
|
|
+ JunctionCrossPathEndLaneLink endLaneLink;
|
|
|
+ int checker=TIXML_SUCCESS;
|
|
|
+ checker+=node->QueryStringAttribute("id",&strId);
|
|
|
+ checker+=node->QueryStringAttribute("crossingRoad",&strcrossingRoad);
|
|
|
+ checker+=node->QueryStringAttribute("roadAtStart",&strroadAtStart);
|
|
|
+ checker+=node->QueryStringAttribute("roadAtEnd",&strroadAtEnd);
|
|
|
+ if (checker!=TIXML_SUCCESS)
|
|
|
+ {
|
|
|
+ cout<<"Error parsing Junction CrossPass attributes"<<endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ TiXmlElement *subNode=node->FirstChildElement("startLaneLink");
|
|
|
+
|
|
|
+ if (subNode)
|
|
|
+ {
|
|
|
+ if(ReadJunctionCrossPassStartLaneLink(startLaneLink,subNode))
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ cout<<"Error parsing Junction CrossPass, no startlanelink attributes."<<endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ subNode=node->FirstChildElement("endLaneLink");
|
|
|
+
|
|
|
+ if (subNode)
|
|
|
+ {
|
|
|
+ if(ReadJunctionCrossPassEndLaneLink(endLaneLink,subNode))
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ cout<<"Error parsing Junction CrossPass, no startlanelink attributes."<<endl;
|
|
|
+ }
|
|
|
+
|
|
|
+ junction->AddJunctionCrossPath(strId,strcrossingRoad,strroadAtStart,strroadAtEnd,startLaneLink,endLaneLink);
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
+bool OpenDriveXmlParser::ReadJunctionCrossPassStartLaneLink(JunctionCrossPathStartLaneLink & startLaneLink,TiXmlElement * node)
|
|
|
+{
|
|
|
+ double s;
|
|
|
+ int nFrom;
|
|
|
+ int nTo;
|
|
|
+
|
|
|
+ int checker=TIXML_SUCCESS;
|
|
|
+ checker+=node->QueryDoubleAttribute("s",&s);
|
|
|
+ checker+=node->QueryIntAttribute("from",&nFrom);
|
|
|
+ checker+=node->QueryIntAttribute("to",&nTo);
|
|
|
+ if (checker!=TIXML_SUCCESS)
|
|
|
+ {
|
|
|
+ cout<<"Error parsing Junction CrossPass StartLaneLink attributes"<<endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ startLaneLink.SetS(s);
|
|
|
+ startLaneLink.SetFrom(nFrom);
|
|
|
+ startLaneLink.SetTo(nTo);
|
|
|
+ return true;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+bool OpenDriveXmlParser::ReadJunctionCrossPassEndLaneLink(JunctionCrossPathEndLaneLink & endLaneLink,TiXmlElement * node)
|
|
|
+{
|
|
|
+ double s;
|
|
|
+ int nFrom;
|
|
|
+ int nTo;
|
|
|
+
|
|
|
+ int checker=TIXML_SUCCESS;
|
|
|
+ checker+=node->QueryDoubleAttribute("s",&s);
|
|
|
+ checker+=node->QueryIntAttribute("from",&nFrom);
|
|
|
+ checker+=node->QueryIntAttribute("to",&nTo);
|
|
|
+ if (checker!=TIXML_SUCCESS)
|
|
|
+ {
|
|
|
+ cout<<"Error parsing Junction CrossPass EndLaneLink attributes"<<endl;
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ endLaneLink.SetS(s);
|
|
|
+ endLaneLink.SetFrom(nFrom);
|
|
|
+ endLaneLink.SetTo(nTo);
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
/**
|