diff --git a/OpenRoadEd/OpenDrive/OpenDriveXmlParser.cpp b/OpenRoadEd/OpenDrive/OpenDriveXmlParser.cpp index 7488fe0b90485a90fb600511c6b7b9a7b73d48fb..6484d90b0a61fb8619035c47a0108f0eaaf15511 100644 --- a/OpenRoadEd/OpenDrive/OpenDriveXmlParser.cpp +++ b/OpenRoadEd/OpenDrive/OpenDriveXmlParser.cpp @@ -970,7 +970,6 @@ bool OpenDriveXmlParser::ReadObjects (Road* road, TiXmlElement *node) object_node=node->FirstChildElement("object"); while(object_node!=0) { - std::cout << "new object" << std::endl; checker=TIXML_SUCCESS; checker+=object_node->QueryDoubleAttribute("s",&s); checker+=object_node->QueryDoubleAttribute("t",&t); @@ -1099,7 +1098,6 @@ bool OpenDriveXmlParser::ReadSignals (Road* road, TiXmlElement *node) signal_node=node->FirstChildElement("signal"); while(signal_node!=0) { - std::cout << "new signal" << std::endl; checker=TIXML_SUCCESS; checker+=signal_node->QueryDoubleAttribute("s",&s); checker+=signal_node->QueryDoubleAttribute("t",&t); diff --git a/OpenRoadEd/OpenDrive/OpenDriveXmlWriter.cpp b/OpenRoadEd/OpenDrive/OpenDriveXmlWriter.cpp index 55897846baa7e32d3f72bf742b164fb5f7c70c83..fab5a48272f558dcdcbdb334015ed6bc02cb3174 100644 --- a/OpenRoadEd/OpenDrive/OpenDriveXmlWriter.cpp +++ b/OpenRoadEd/OpenDrive/OpenDriveXmlWriter.cpp @@ -988,8 +988,6 @@ bool OpenDriveXmlWriter::WriteObjects (TiXmlElement *node, Road* road) parking_marking_node->SetAttribute("color",mark_color); } } - - std::cout << "written object " << object->GetName() << " with id: " << object->GetId() << std::endl; } return true; @@ -1041,8 +1039,6 @@ bool OpenDriveXmlWriter::WriteSignals (TiXmlElement *node, Road* road) // signal_node->SetAttribute("hOffset",signal->GetHeadingOffset()); // signal_node->SetAttribute("pitch",signal->GetPitch()); // signal_node->SetAttribute("roll",signal->GetRoll()); - - std::cout << "written signal " << signal->GetName() << " with id: " << signal->GetId() << std::endl; } return true; diff --git a/OpenRoadEd/Osg/OSGRecordsHelpers.cpp b/OpenRoadEd/Osg/OSGRecordsHelpers.cpp index 59f200421bee25871577d51c85a85cd40179b3df..d3f58fcf602b449f9390c91a91908b2295873ab9 100644 --- a/OpenRoadEd/Osg/OSGRecordsHelpers.cpp +++ b/OpenRoadEd/Osg/OSGRecordsHelpers.cpp @@ -265,7 +265,6 @@ void OSGRecordsHelpers::FillHelperGroups (Road *road,unsigned int roadIndex, osg else mObjectGroup->addChild(AddObjectHelper(road->GetObject(i)).get()); } - std::cout << "num object items: " << mObjectGroup->getNumChildren() << std::endl; for (unsigned int i = 0; i<road->GetSignalCount(); i++) mSignalGroup->addChild(AddSignalHelper(road->GetSignal(i)).get()); } @@ -564,13 +563,12 @@ osg::ref_ptr<osg::MatrixTransform> OSGRecordsHelpers::AddParkingHelper(Object *o x-=object->GetT()*sin(hdg); y+=object->GetT()*cos(hdg); - std::cout << "Z: " << elevation+object->GetZOffset() << std::endl; matrix->setMatrix(osg::Matrix::rotate(osg::inRadians(hdg+object->GetHeading()), osg::Vec3(0.0, 0.0, 1.0)) * osg::Matrix::translate(osg::Vec3(x,y,elevation+object->GetZOffset())) ); matrix->addChild(parkingGeode); //========================================================= - // Add front mark + // Add mark //========================================================= std::string mark_side,mark_type,mark_color; double mark_width; @@ -578,44 +576,66 @@ osg::ref_ptr<osg::MatrixTransform> OSGRecordsHelpers::AddParkingHelper(Object *o for(unsigned int i=0;i<object->GetNumParkingMarkings();i++) { object->GetParkingMarking(i,mark_side,mark_type,mark_width,mark_color); - if(mark_side=="front") - { - osg::ref_ptr<OSGGeodeNode> markGeode = new OSGGeodeNode(); - osg::ref_ptr<osg::Geometry> markGeom=new osg::Geometry; - markGeom->setUseDisplayList( false ); + osg::ref_ptr<OSGGeodeNode> markGeode = new OSGGeodeNode(); + osg::ref_ptr<osg::Geometry> markGeom=new osg::Geometry; + markGeom->setUseDisplayList( false ); - markGeode->SetNodeType(PARKING_OBJECT_NODE); + markGeode->SetNodeType(PARKING_OBJECT_NODE); - osg::ref_ptr<osg::Vec3Array> markVertices = new osg::Vec3Array; - osg::ref_ptr<osg::DrawElementsUInt> markTris = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); + osg::ref_ptr<osg::Vec3Array> markVertices = new osg::Vec3Array; + osg::ref_ptr<osg::DrawElementsUInt> markTris = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); + if(mark_side=="front") + { markVertices->push_back(osg::Vec3(-mark_width/2.0+length/2.0,-width/2.0,0)); markVertices->push_back(osg::Vec3(mark_width/2.0+length/2.0,-width/2.0,0)); markVertices->push_back(osg::Vec3(mark_width/2.0+length/2.0,width/2.0,0)); markVertices->push_back(osg::Vec3(-mark_width/2.0+length/2.0,width/2.0,0)); - markTris->push_back(1); - markTris->push_back(2); - markTris->push_back(3); - markTris->push_back(0); - markTris->push_back(1); - markTris->push_back(3); - - markGeode->addDrawable(markGeom); - markGeom->setVertexArray(markVertices.get()); - markGeom->addPrimitiveSet(markTris.get()); - - osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; - markGeom->setColorArray(colors.get()); - markGeom->setColorBinding(osg::Geometry::BIND_OVERALL); - colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); - osg::StateSet* markState=markGeom->getOrCreateStateSet(); - // assign the material and texture - markState->setMode(GL_LIGHTING, osg::StateAttribute::OFF); - markState->setMode(GL_BLEND,osg::StateAttribute::ON); - markState->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); - - matrix->addChild(markGeode); } + else if(mark_side=="rear") + { + markVertices->push_back(osg::Vec3(-mark_width/2.0-length/2.0,-width/2.0,0)); + markVertices->push_back(osg::Vec3(mark_width/2.0-length/2.0,-width/2.0,0)); + markVertices->push_back(osg::Vec3(mark_width/2.0-length/2.0,width/2.0,0)); + markVertices->push_back(osg::Vec3(-mark_width/2.0-length/2.0,width/2.0,0)); + } + else if(mark_side=="left") + { + markVertices->push_back(osg::Vec3(-length/2.0,-mark_width/2.0+width/2.0,0)); + markVertices->push_back(osg::Vec3(length/2.0,-mark_width/2.0+width/2.0,0)); + markVertices->push_back(osg::Vec3(length/2.0,mark_width/2.0+width/2.0,0)); + markVertices->push_back(osg::Vec3(-length/2.0,mark_width/2.0+width/2.0,0)); + } + else if(mark_side=="right") + { + markVertices->push_back(osg::Vec3(-length/2.0,-mark_width/2.0-width/2.0,0)); + markVertices->push_back(osg::Vec3(length/2.0,-mark_width/2.0-width/2.0,0)); + markVertices->push_back(osg::Vec3(length/2.0,mark_width/2.0-width/2.0,0)); + markVertices->push_back(osg::Vec3(-length/2.0,mark_width/2.0-width/2.0,0)); + } + + markTris->push_back(1); + markTris->push_back(2); + markTris->push_back(3); + markTris->push_back(0); + markTris->push_back(1); + markTris->push_back(3); + + markGeode->addDrawable(markGeom); + markGeom->setVertexArray(markVertices.get()); + markGeom->addPrimitiveSet(markTris.get()); + + osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; + markGeom->setColorArray(colors.get()); + markGeom->setColorBinding(osg::Geometry::BIND_OVERALL); + colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); + osg::StateSet* markState=markGeom->getOrCreateStateSet(); + // assign the material and texture + markState->setMode(GL_LIGHTING, osg::StateAttribute::OFF); + markState->setMode(GL_BLEND,osg::StateAttribute::ON); + markState->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF); + + matrix->addChild(markGeode); } return matrix; diff --git a/OpenRoadEd/Qt/CreationWidgets/CreationAllRoad.cpp b/OpenRoadEd/Qt/CreationWidgets/CreationAllRoad.cpp index dea1e497ecbf269b8bc8faa6541d19f9a416929e..a69ad3e0501f5d4b8707601d0c1471b64b1f2cf3 100644 --- a/OpenRoadEd/Qt/CreationWidgets/CreationAllRoad.cpp +++ b/OpenRoadEd/Qt/CreationWidgets/CreationAllRoad.cpp @@ -268,7 +268,7 @@ void CreationAllRoad::CreateRoadTypePressed() // Duplicate it if it exists if(lRoadType) index = lRoad->CloneRoadType(lRoad->GetRoadTypeCount()-1); // else create a blank one - else index = lRoad->AddRoadType(0,"Default"); + else index = lRoad->AddRoadType(0,"unknown"); // Redraws the road to reflect the changes mOsgMain->RedrawRoad(lCurSelection->GetIndex(0)); // Add new road type to the road tree diff --git a/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.cpp b/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.cpp index facf9978b7824353648d230a51cbcbab24a081b1..6295e9d89fbafd6548b8b0eeb620599d368d63c1 100644 --- a/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.cpp +++ b/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.cpp @@ -100,6 +100,33 @@ SettingsRoadObject::SettingsRoadObject(OpenDrive *openDrive) QFormLayout *settingsParkingFrontMarkLayout = new QFormLayout; settingsParkingFrontMarkLayout->addRow(tr("Width:"),mParkingFrontWidth); mParkingFrontMark->setLayout(settingsParkingFrontMarkLayout); + mParkingRearMark = new QGroupBox; + mParkingRearMark->setTitle(tr("ParkingRearMarking")); + mParkingRearMark->setCheckable(true); + mParkingRearMark->setChecked(false); + mParkingRearWidth = new QLineEdit; + mParkingRearWidth->setText("0.3"); + QFormLayout *settingsParkingRearMarkLayout = new QFormLayout; + settingsParkingRearMarkLayout->addRow(tr("Width:"),mParkingRearWidth); + mParkingRearMark->setLayout(settingsParkingRearMarkLayout); + mParkingLeftMark = new QGroupBox; + mParkingLeftMark->setTitle(tr("ParkingLeftMarking")); + mParkingLeftMark->setCheckable(true); + mParkingLeftMark->setChecked(false); + mParkingLeftWidth = new QLineEdit; + mParkingLeftWidth->setText("0.3"); + QFormLayout *settingsParkingLeftMarkLayout = new QFormLayout; + settingsParkingLeftMarkLayout->addRow(tr("Width:"),mParkingLeftWidth); + mParkingLeftMark->setLayout(settingsParkingLeftMarkLayout); + mParkingRightMark = new QGroupBox; + mParkingRightMark->setTitle(tr("ParkingRightMarking")); + mParkingRightMark->setCheckable(true); + mParkingRightMark->setChecked(false); + mParkingRightWidth = new QLineEdit; + mParkingRightWidth->setText("0.3"); + QFormLayout *settingsParkingRightMarkLayout = new QFormLayout; + settingsParkingRightMarkLayout->addRow(tr("Width:"),mParkingRightWidth); + mParkingRightMark->setLayout(settingsParkingRightMarkLayout); mBoundingBox = new QGroupBox; mBoundingBox->setTitle(tr("BoundingBox")); @@ -150,6 +177,9 @@ SettingsRoadObject::SettingsRoadObject(OpenDrive *openDrive) QVBoxLayout *settingsGroupLayout = new QVBoxLayout; settingsGroupLayout->addLayout(settingsFormLayout); settingsGroupLayout->addWidget(mParkingFrontMark); + settingsGroupLayout->addWidget(mParkingRearMark); + settingsGroupLayout->addWidget(mParkingLeftMark); + settingsGroupLayout->addWidget(mParkingRightMark); settingsGroupLayout->addWidget(mBoundingBox); settingsGroupLayout->addWidget(mBoundingCyl); @@ -176,6 +206,9 @@ SettingsRoadObject::SettingsRoadObject(OpenDrive *openDrive) "<p><b>ParkingAccess</b> - type of parking. Only for ParkingSpace objects</p>" "<p><b>ParkingRestrictions</b> - restrictions of the parking space. Only for ParkingSpace objects</p>" "<p><b>ParkingFrontMark</b> - check if the parking space has a front mark</p>" + "<p><b>ParkingRearMark</b> - check if the parking space has a rear mark</p>" + "<p><b>ParkingLeftMark</b> - check if the parking space has a left mark</p>" + "<p><b>ParkingRightMark</b> - check if the parking space has a right mark</p>" "<p><b>Width</b> - Width of the front mark of the parking space</p>" "<p><b>BoundingBox</b> - check if this road has a bounding box</p>" "<p><b>Box length</b> - length of the bounding box</p>" @@ -222,6 +255,12 @@ void SettingsRoadObject::LoadData(Object *object) disconnect(mParkingRestrictions, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(ParkingRestrictionsChanged(const QString &))); disconnect(mParkingFrontMark, SIGNAL(clicked(bool)), this, SLOT(ParkingFrontMarkChanged(bool))); disconnect(mParkingFrontWidth, SIGNAL(editingFinished()), this, SLOT(ParkingFrontWidthChanged())); + disconnect(mParkingRearMark, SIGNAL(clicked(bool)), this, SLOT(ParkingRearMarkChanged(bool))); + disconnect(mParkingRearWidth, SIGNAL(editingFinished()), this, SLOT(ParkingRearWidthChanged())); + disconnect(mParkingLeftMark, SIGNAL(clicked(bool)), this, SLOT(ParkingLeftMarkChanged(bool))); + disconnect(mParkingLeftWidth, SIGNAL(editingFinished()), this, SLOT(ParkingLeftWidthChanged())); + disconnect(mParkingRightMark, SIGNAL(clicked(bool)), this, SLOT(ParkingRightMarkChanged(bool))); + disconnect(mParkingRightWidth, SIGNAL(editingFinished()), this, SLOT(ParkingRightWidthChanged())); disconnect(mBoundingBox, SIGNAL(clicked(bool)), this, SLOT(BoundingBoxChanged(bool))); disconnect(mBoxLength, SIGNAL(editingFinished()), this, SLOT(BoxLengthChanged())); disconnect(mBoxWidth, SIGNAL(editingFinished()), this, SLOT(BoxWidthChanged())); @@ -308,6 +347,12 @@ void SettingsRoadObject::LoadData(Object *object) mParkingRestrictions->setCurrentIndex(1); mParkingFrontMark->setEnabled(true); mParkingFrontMark->setChecked(false); + mParkingRearMark->setEnabled(true); + mParkingRearMark->setChecked(false); + mParkingLeftMark->setEnabled(true); + mParkingLeftMark->setChecked(false); + mParkingRightMark->setEnabled(true); + mParkingRightMark->setChecked(false); for(unsigned int i=0;i<object->GetNumParkingMarkings();i++) { std::string mark_side,mark_type,mark_color; @@ -319,6 +364,24 @@ void SettingsRoadObject::LoadData(Object *object) mParkingFrontWidth->setEnabled(true); mParkingFrontWidth->setText(QString("%1").arg(mark_width)); } + else if(mark_side=="rear") + { + mParkingRearMark->setChecked(true); + mParkingRearWidth->setEnabled(true); + mParkingRearWidth->setText(QString("%1").arg(mark_width)); + } + else if(mark_side=="left") + { + mParkingLeftMark->setChecked(true); + mParkingLeftWidth->setEnabled(true); + mParkingLeftWidth->setText(QString("%1").arg(mark_width)); + } + else if(mark_side=="right") + { + mParkingRightMark->setChecked(true); + mParkingRightWidth->setEnabled(true); + mParkingRightWidth->setText(QString("%1").arg(mark_width)); + } } } else @@ -327,6 +390,12 @@ void SettingsRoadObject::LoadData(Object *object) mParkingRestrictions->setDisabled(true); mParkingFrontMark->setDisabled(true); mParkingFrontWidth->setDisabled(true); + mParkingRearMark->setDisabled(true); + mParkingRearWidth->setDisabled(true); + mParkingLeftMark->setDisabled(true); + mParkingLeftWidth->setDisabled(true); + mParkingRightMark->setDisabled(true); + mParkingRightWidth->setDisabled(true); } if(object->GetBoundingBox(length,width,height)) @@ -364,6 +433,12 @@ void SettingsRoadObject::LoadData(Object *object) connect(mParkingRestrictions, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(ParkingRestrictionsChanged(const QString &))); connect(mParkingFrontMark, SIGNAL(clicked(bool)), this, SLOT(ParkingFrontMarkChanged(bool))); connect(mParkingFrontWidth, SIGNAL(editingFinished()), this, SLOT(ParkingFrontWidthChanged())); + connect(mParkingRearMark, SIGNAL(clicked(bool)), this, SLOT(ParkingRearMarkChanged(bool))); + connect(mParkingRearWidth, SIGNAL(editingFinished()), this, SLOT(ParkingRearWidthChanged())); + connect(mParkingLeftMark, SIGNAL(clicked(bool)), this, SLOT(ParkingLeftMarkChanged(bool))); + connect(mParkingLeftWidth, SIGNAL(editingFinished()), this, SLOT(ParkingLeftWidthChanged())); + connect(mParkingRightMark, SIGNAL(clicked(bool)), this, SLOT(ParkingRightMarkChanged(bool))); + connect(mParkingRightWidth, SIGNAL(editingFinished()), this, SLOT(ParkingRightWidthChanged())); connect(mBoundingBox, SIGNAL(clicked(bool)), this, SLOT(BoundingBoxChanged(bool))); connect(mBoxLength, SIGNAL(editingFinished()), this, SLOT(BoxLengthChanged())); connect(mBoxWidth, SIGNAL(editingFinished()), this, SLOT(BoxWidthChanged())); @@ -430,6 +505,9 @@ void SettingsRoadObject::TypeChanged(const QString & text) mParkingAccess->setEnabled(true); mParkingRestrictions->setEnabled(true); mParkingFrontMark->setEnabled(true); + mParkingRearMark->setEnabled(true); + mParkingLeftMark->setEnabled(true); + mParkingRightMark->setEnabled(true); mBoundingBox->setChecked(true); mBoundingCyl->setChecked(false); } @@ -438,6 +516,9 @@ void SettingsRoadObject::TypeChanged(const QString & text) mParkingAccess->setDisabled(true); mParkingRestrictions->setDisabled(true); mParkingFrontMark->setDisabled(true); + mParkingRearMark->setDisabled(true); + mParkingLeftMark->setDisabled(true); + mParkingRightMark->setDisabled(true); mObject->ClearParking(); } emit RoadGeometryChanged(true); @@ -490,6 +571,93 @@ void SettingsRoadObject::ParkingFrontWidthChanged() emit RoadGeometryChanged(true); } +void SettingsRoadObject::ParkingRearMarkChanged(bool on) +{ + double width; + + if(on) + { + mParkingRearWidth->setEnabled(true); + width=mParkingRearWidth->text().toDouble(); + mObject->AddParkingMarking("rear","solid",width,"standard"); + } + else + { + mParkingRearWidth->setDisabled(true); + mObject->RemoveParkingMarking("rear"); + } + + emit RoadGeometryChanged(true); +} + +void SettingsRoadObject::ParkingRearWidthChanged() +{ + double width; + + width=mParkingRearWidth->text().toDouble(); + mObject->AddParkingMarking("rear","solid",width,"standard"); + + emit RoadGeometryChanged(true); +} + +void SettingsRoadObject::ParkingLeftMarkChanged(bool on) +{ + double width; + + if(on) + { + mParkingLeftWidth->setEnabled(true); + width=mParkingLeftWidth->text().toDouble(); + mObject->AddParkingMarking("left","solid",width,"standard"); + } + else + { + mParkingLeftWidth->setDisabled(true); + mObject->RemoveParkingMarking("left"); + } + + emit RoadGeometryChanged(true); +} + +void SettingsRoadObject::ParkingLeftWidthChanged() +{ + double width; + + width=mParkingLeftWidth->text().toDouble(); + mObject->AddParkingMarking("left","solid",width,"standard"); + + emit RoadGeometryChanged(true); +} + +void SettingsRoadObject::ParkingRightMarkChanged(bool on) +{ + double width; + + if(on) + { + mParkingRightWidth->setEnabled(true); + width=mParkingRightWidth->text().toDouble(); + mObject->AddParkingMarking("right","solid",width,"standard"); + } + else + { + mParkingRightWidth->setDisabled(true); + mObject->RemoveParkingMarking("right"); + } + + emit RoadGeometryChanged(true); +} + +void SettingsRoadObject::ParkingRightWidthChanged() +{ + double width; + + width=mParkingRightWidth->text().toDouble(); + mObject->AddParkingMarking("right","solid",width,"standard"); + + emit RoadGeometryChanged(true); +} + void SettingsRoadObject::BoundingBoxChanged(bool on) { double length,width,height; diff --git a/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.h b/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.h index b1abc85d09890eb4e4c97d051974284aa663d232..98db5b6b74ea548b678e5804736427e76c4dfc38 100644 --- a/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.h +++ b/OpenRoadEd/Qt/SettingsWidgets/SettingsRoadObject.h @@ -62,6 +62,12 @@ private: QComboBox *mParkingRestrictions; QGroupBox *mParkingFrontMark; QLineEdit *mParkingFrontWidth; + QGroupBox *mParkingRearMark; + QLineEdit *mParkingRearWidth; + QGroupBox *mParkingLeftMark; + QLineEdit *mParkingLeftWidth; + QGroupBox *mParkingRightMark; + QLineEdit *mParkingRightWidth; QGroupBox *mBoundingBox; QLineEdit *mBoxLength; QLineEdit *mBoxWidth; @@ -89,6 +95,12 @@ public slots: void ParkingRestrictionsChanged(const QString & text); void ParkingFrontMarkChanged(bool on); void ParkingFrontWidthChanged(); + void ParkingRearMarkChanged(bool on); + void ParkingRearWidthChanged(); + void ParkingLeftMarkChanged(bool on); + void ParkingLeftWidthChanged(); + void ParkingRightMarkChanged(bool on); + void ParkingRightWidthChanged(); void BoundingBoxChanged(bool on); void BoxLengthChanged(); void BoxWidthChanged();