|
@@ -312,6 +312,19 @@ void RoadEditDialog::on_comboBox_Road_activated(const QString &arg1)
|
|
|
|
|
|
}
|
|
|
|
|
|
+bool RoadEditDialog::IsDrawMark(double s)
|
|
|
+{
|
|
|
+ const double dotdis = 10.0;
|
|
|
+ const double dotlen = 5.0;
|
|
|
+
|
|
|
+ double y = fmod(s,dotdis);
|
|
|
+ if(y>dotlen)return true;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void RoadEditDialog::on_comboBox_Road_currentIndexChanged(int index)
|
|
|
{
|
|
|
Road * pRoad = mpxodr->GetRoad(index);
|
|
@@ -332,6 +345,14 @@ void RoadEditDialog::on_comboBox_Road_currentIndexChanged(int index)
|
|
|
}
|
|
|
mvectorroadview.clear();
|
|
|
|
|
|
+ nsize = mvectorviewitem.size();
|
|
|
+ for(i=0;i<nsize;i++)
|
|
|
+ {
|
|
|
+ scene->removeItem(mvectorviewitem.at(i));
|
|
|
+ delete mvectorviewitem.at(i);
|
|
|
+ }
|
|
|
+ mvectorviewitem.clear();
|
|
|
+
|
|
|
|
|
|
double froad_xmin,froad_ymin,froad_xmax,froad_ymax;
|
|
|
ServiceXODRTool.GetRoadMaxMin(pRoad,froad_xmin,froad_ymin,froad_xmax,froad_ymax);
|
|
@@ -364,9 +385,9 @@ void RoadEditDialog::on_comboBox_Road_currentIndexChanged(int index)
|
|
|
|
|
|
prvw->setPos(mfViewMoveX,mfViewMoveY);
|
|
|
// prvw->setPos((froad_xmax - froad_xmin)/2.0, (froad_ymax-froad_ymin)/2.0);
|
|
|
- mvectorroadview.push_back(prvw);
|
|
|
+// mvectorroadview.push_back(prvw);
|
|
|
prvw->setratio(1.0);
|
|
|
- scene->addItem(prvw);
|
|
|
+// scene->addItem(prvw);
|
|
|
|
|
|
mnSelGeo = -1;
|
|
|
|
|
@@ -380,6 +401,190 @@ void RoadEditDialog::on_comboBox_Road_currentIndexChanged(int index)
|
|
|
ui->comboBox_Geo->addItem(QString("Geo ")+QString::number(i));
|
|
|
}
|
|
|
|
|
|
+ double flmw = 0.15;
|
|
|
+
|
|
|
+ RoadDigit xrd(mpCurRoad,0.1);
|
|
|
+ std::vector<iv::RoadDigitUnit> * pvectorrdu = xrd.GetRDU();
|
|
|
+ nsize = pvectorrdu->size();
|
|
|
+
|
|
|
+ for(i=0;i<(nsize-1);i++)
|
|
|
+ {
|
|
|
+ std::vector<iv::LanePoint> xvepre = pvectorrdu->at(i).mvectorLanePoint;
|
|
|
+ std::vector<iv::LanePoint> xvenxt = pvectorrdu->at(i+1).mvectorLanePoint;
|
|
|
+ if((xvepre.size()<2)||(xvenxt.size()<2)||(xvenxt.size() != xvepre.size()))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unsigned int k;
|
|
|
+ for(k=0;k<(xvepre.size()-1);k++)
|
|
|
+ {
|
|
|
+ QPainterPath xpath;
|
|
|
+ xpath.moveTo(xvepre.at(k).mfX,xvepre.at(k).mfY*(-1));
|
|
|
+ xpath.lineTo(xvenxt.at(k).mfX,xvenxt.at(k).mfY*(-1));
|
|
|
+ xpath.lineTo(xvenxt.at(k+1).mfX,xvenxt.at(k+1).mfY*(-1));
|
|
|
+ xpath.lineTo(xvepre.at(k+1).mfX,xvepre.at(k+1).mfY*(-1));
|
|
|
+ xpath.closeSubpath();
|
|
|
+ QGraphicsPathItem * pitem = new QGraphicsPathItem;
|
|
|
+ pitem->setPath(xpath);
|
|
|
+ pitem->setPos(mfViewMoveX,mfViewMoveY);
|
|
|
+ int nlanetype = xvepre.at(k).mnlanetype;
|
|
|
+ if(xvepre.at(k).mnlane<=0)nlanetype = xvepre.at(k+1).mnlanetype;
|
|
|
+ QColor brushcolor = Qt::darkGray;
|
|
|
+ switch (nlanetype) {
|
|
|
+ case 2:
|
|
|
+ brushcolor = Qt::darkGray;
|
|
|
+ break;
|
|
|
+ case 8:
|
|
|
+ brushcolor = Qt::red;
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ brushcolor = QColor(0xB2,0xB2,0xD6);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ brushcolor = Qt::darkGreen;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pitem->setBrush(brushcolor);
|
|
|
+ pitem->setPen(QPen(brushcolor,0.001));
|
|
|
+ scene->addItem(pitem);
|
|
|
+ mvectorviewitem.push_back(pitem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for(i=0;i<(nsize-1);i++)
|
|
|
+ {
|
|
|
+ std::vector<iv::LanePoint> xvepre = pvectorrdu->at(i).mvectorLanePoint;
|
|
|
+ std::vector<iv::LanePoint> xvenxt = pvectorrdu->at(i+1).mvectorLanePoint;
|
|
|
+ if(xvenxt.size() != xvepre.size())
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ unsigned int k;
|
|
|
+ for(k=0;k<(xvepre.size());k++)
|
|
|
+ {
|
|
|
+ QPainterPath xpath;
|
|
|
+ int ncolor = -3;
|
|
|
+ int nmarktype = xvepre[k].mnlanemarktype;
|
|
|
+ if(nmarktype >= 0)
|
|
|
+ {
|
|
|
+ if(nmarktype<2)
|
|
|
+ {
|
|
|
+ if((nmarktype == 0)||(IsDrawMark(xvepre[k].mS)))
|
|
|
+ {
|
|
|
+ xpath.moveTo(xvepre[k].mfX + 0.5*flmw * cos(xvenxt[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+0.5*flmw * sin(xvenxt[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvenxt[k].mfX+ 0.5*flmw * cos(xvepre[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+0.5*flmw * sin(xvepre[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvenxt[k].mfX + 0.5*flmw * cos(xvenxt[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+0.5*flmw * sin(xvenxt[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvepre[k].mfX+ 0.5*flmw * cos(xvepre[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+0.5*flmw * sin(xvepre[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+ xpath.closeSubpath();
|
|
|
+ ncolor = xvepre[k].mnlanecolor;
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if((nmarktype == 2)||(nmarktype == 3)||(IsDrawMark(xvepre[k].mS)))
|
|
|
+ {
|
|
|
+ xpath.moveTo(xvepre[k].mfX + flmw * cos(xvenxt[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+flmw * sin(xvenxt[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvenxt[k].mfX+ flmw * cos(xvepre[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+flmw * sin(xvepre[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+
|
|
|
+ xpath.lineTo(xvenxt[k].mfX + 2*flmw * cos(xvenxt[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+2*flmw * sin(xvenxt[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvepre[k].mfX+ 2*flmw * cos(xvepre[k].mfhdg + M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+2*flmw * sin(xvepre[k].mfhdg + M_PI/2.0))*(-1.0));
|
|
|
+ xpath.closeSubpath();
|
|
|
+ ncolor = xvepre[k].mnlanecolor;
|
|
|
+ }
|
|
|
+ if((nmarktype == 2)||(nmarktype == 4)||(IsDrawMark(xvepre[k].mS)))
|
|
|
+ {
|
|
|
+ xpath.moveTo(xvepre[k].mfX + flmw * cos(xvenxt[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+flmw * sin(xvenxt[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvenxt[k].mfX+ flmw * cos(xvepre[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+flmw * sin(xvepre[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+
|
|
|
+ xpath.lineTo(xvenxt[k].mfX + 2*flmw * cos(xvenxt[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvenxt[k].mfY+2*flmw * sin(xvenxt[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+ xpath.lineTo(xvepre[k].mfX+ 2*flmw * cos(xvepre[k].mfhdg - M_PI/2.0),
|
|
|
+ (xvepre[k].mfY+2*flmw * sin(xvepre[k].mfhdg - M_PI/2.0))*(-1.0));
|
|
|
+ xpath.closeSubpath();
|
|
|
+ ncolor = xvepre[k].mnlanecolor;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ncolor != -3)
|
|
|
+ {
|
|
|
+ QGraphicsPathItem * pitem = new QGraphicsPathItem;
|
|
|
+ pitem->setPath(xpath);
|
|
|
+ QColor brushcolor;
|
|
|
+ switch (ncolor) {
|
|
|
+ case 0:
|
|
|
+ brushcolor = Qt::white;
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ brushcolor = Qt::blue;
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ brushcolor = Qt::green;
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ brushcolor = Qt::red;
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
+ brushcolor = Qt::white;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ brushcolor = Qt::yellow;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ brushcolor = Qt::yellow; //orange use yellow replace
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ brushcolor = Qt::white;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ pitem->setBrush(brushcolor);
|
|
|
+ pitem->setPen(QPen(brushcolor,0.001));
|
|
|
+ pitem->setPos(mfViewMoveX,mfViewMoveY);
|
|
|
+ scene->addItem(pitem);
|
|
|
+ mvectorviewitem.push_back(pitem);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+// for(i=0;i<(nsize-1);i++)
|
|
|
+// {
|
|
|
+// QPainterPath xpath;
|
|
|
+// std::vector<iv::LanePoint> * pvectorLP1 = &pvectorrdu->at(i).mvectorLanePoint;
|
|
|
+// std::vector<iv::LanePoint> * pvectorLP2 = &pvectorrdu->at(i+1).mvectorLanePoint;
|
|
|
+// xpath.moveTo(pvectorLP1->at(0).mfX,pvectorLP1->at(0).mfY*(-1));
|
|
|
+// xpath.lineTo(pvectorLP2->at(0).mfX,pvectorLP2->at(0).mfY*(-1));
|
|
|
+// xpath.lineTo(pvectorLP2->at(pvectorLP2->size()-1).mfX,pvectorLP2->at(pvectorLP2->size()-1).mfY*(-1));
|
|
|
+// xpath.lineTo(pvectorLP1->at(pvectorLP1->size()-1).mfX,pvectorLP1->at(pvectorLP1->size()-1).mfY*(-1));
|
|
|
+// xpath.closeSubpath();
|
|
|
+// QGraphicsPathItem * pitem = new QGraphicsPathItem;
|
|
|
+// pitem->setPath(xpath);
|
|
|
+// pitem->setPos(mfViewMoveX,mfViewMoveY);
|
|
|
+// pitem->setBrush(Qt::darkGray);
|
|
|
+// pitem->setPen(QPen(Qt::darkGray,0.001));
|
|
|
+// scene->addItem(pitem);
|
|
|
+// mvectorviewitem.push_back(pitem);
|
|
|
+// }
|
|
|
+
|
|
|
update();
|
|
|
}
|
|
|
|