From 53f57bbd7f67ab3ebf1fc7509e929bb260fb36b9 Mon Sep 17 00:00:00 2001 From: "1020785391@qq.com" <1020785391@qq.com> Date: Tue, 15 Mar 2022 16:08:06 +0800 Subject: [PATCH 01/20] =?UTF-8?q?=E8=A7=A3=E5=86=B3slt=E5=9B=BE=C2=B7?= =?UTF-8?q?=E9=9A=9C=E7=A2=8D=E7=89=A9=E7=B1=BB=E5=9E=8B=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_draw.cpp | 19 ++- chart_plugin/src/slt_space_display.cpp | 160 +++++------------- 2 files changed, 57 insertions(+), 122 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 83efdc8..a4efbf1 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2020-2021, Huawei Technologies Co., Ltd +Copyright (c) 2020-2022, Huawei Technologies Co., Ltd All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the @@ -108,12 +108,23 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const const auto sltObjectsMap = spaceDataPtr->GetObjectsMap(); const auto objectsIdType = spaceDataPtr->GetObjectsIdTypeMap(); - for (auto iter = sltObjectsMap.begin(); iter != sltObjectsMap.end(); iter++) { - vector objectData = iter.value(); + QList listType = objectsIdType.values(); + for (int i = 0; i < listType.count() - 1; i++) { + for (int j = i + 1; j < listType.count(); j++) { + if (listType.at(i) > listType.at(j)) { + int32_t type = listType.at(i); + listType[i] = listType.at(j); + listType[j] = type; + } + } + } + + for (auto type : listType) { + vector objectData = sltObjectsMap.value(objectsIdType.key(type)); if (objectData.size() != OBJECT_DATA_NUM_SIZE) { continue; } - QString objectId = iter.key(); + QString objectId = objectsIdType.key(type); int32_t type = objectsIdType.value(objectId); spaceDisplayPtr->SetObjectProperty(type); auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index 6b3b2c9..f7c1484 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2020-2021, Huawei Technologies Co., Ltd +Copyright (c) 2020-2022, Huawei Technologies Co., Ltd All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the @@ -75,36 +75,20 @@ void SltSpaceDisplay::ClearData() void SltSpaceDisplay::InitTitleProperty() { - plotTitleProperty = new (std::nothrow) + plotTitleProperty = new StringProperty("Chart Title", "SLT", "Chart title name property.", this, SLOT(UpdateMathglDraw()), this); - if (plotTitleProperty == nullptr) { - ROS_ERROR("Failed to create the plotTitleProperty."); - return; - } plotTitleProperty->setReadOnly(true); - xAxisTitleProperty = new (std::nothrow) + xAxisTitleProperty = new StringProperty("X Axis Title", "S[m]", "X Axis title name property.", this, SLOT(UpdateMathglDraw()), this); - if (xAxisTitleProperty == nullptr) { - ROS_ERROR("Failed to create the xAxisTitleProperty."); - return; - } xAxisTitleProperty->setReadOnly(true); - yAxisTitleProperty = new (std::nothrow) + yAxisTitleProperty = new StringProperty("Y Axis Title", "L[m]", "Y Axis title name property.", this, SLOT(UpdateMathglDraw()), this); - if (yAxisTitleProperty == nullptr) { - ROS_ERROR("Failed to create the yAxisTitleProperty."); - return; - } yAxisTitleProperty->setReadOnly(true); - zAxisTitleProperty = new (std::nothrow) + zAxisTitleProperty = new StringProperty("Z Axis Title", "T[s]", "Z Axis title name property.", this, SLOT(UpdateMathglDraw()), this); - if (zAxisTitleProperty == nullptr) { - ROS_ERROR("Failed to create the zAxisTitleProperty."); - return; - } zAxisTitleProperty->setReadOnly(true); } @@ -117,44 +101,24 @@ void SltSpaceDisplay::InitCurveProperty() const int32_t speedLimitCurveColorG = 0xFF; const int32_t speedLimitCurveColorB = 0xC1; - curveProperty = new (std::nothrow) + curveProperty = new EnumProperty("Curve", "Optimized Track", "Curve type setting selection.", this, SLOT(UpdateCurveChoice())); - if (curveProperty == nullptr) { - ROS_ERROR("Failed to create the curveProperty."); - return; - } curveProperty->addOption("Optimized Track", OPTIMIZED_TRACK_CURVE); curveProperty->addOption("Speed Limit", SPEED_LIMIT_CURVE); - optimizedCurveTitleProperty = new (std::nothrow) StringProperty("Optimized Title", "Optimized Track", + optimizedCurveTitleProperty = new StringProperty("Optimized Title", "Optimized Track", "Optimized curve title property setting.", curveProperty, SLOT(UpdateOptimizedCurveTitle()), this); - if (optimizedCurveTitleProperty == nullptr) { - ROS_ERROR("Failed to create the optimizedCurveTitleProperty."); - return; - } - optimizedCurveColorProperty = new (std::nothrow) + optimizedCurveColorProperty = new ColorProperty("Optimized Color", QColor(optimizedCurveColorR, optimizedCurveColorG, optimizedCurveColorB), "Color of the Optimized Slt Track Curve.", curveProperty, SLOT(UpdateOptimizedCurveColor()), this); - if (optimizedCurveColorProperty == nullptr) { - ROS_ERROR("Failed to create the optimizedCurveColorProperty."); - return; - } - speedLimitCurveTitleProperty = new (std::nothrow) StringProperty("Speed Title", "Speed Limit", + speedLimitCurveTitleProperty = new StringProperty("Speed Title", "Speed Limit", "Slt Speed Limit curve title property setting.", curveProperty, SLOT(UpdateSpeedLimitCurveTitle()), this); - if (speedLimitCurveTitleProperty == nullptr) { - ROS_ERROR("Failed to create the speedLimitCurveTitleProperty."); - return; - } - speedLimitCurveColorProperty = new (std::nothrow) + speedLimitCurveColorProperty = new ColorProperty("Speed Color", QColor(speedLimitCurveColorR, speedLimitCurveColorG, speedLimitCurveColorB), "Color of the Slt Speed Limit Curve.", curveProperty, SLOT(UpdateSpeedLimitCurveColor()), this); - if (speedLimitCurveColorProperty == nullptr) { - ROS_ERROR("Failed to create the speedLimitCurveColorProperty."); - return; - } } void SltSpaceDisplay::InitProperty() @@ -201,13 +165,9 @@ void SltSpaceDisplay::CreateObjectsTypeProperty(int32_t type) objectsTypeTotalVector.append(type); if (objectsTypeProperty == nullptr) { - objectsTypeProperty = new (std::nothrow) EnumProperty("Objects Type", typeName, + objectsTypeProperty = new EnumProperty("Objects Type", typeName, "Slt Objects Type setting selection.", this, SLOT(UpdateObjectsTypeChoice())); } - if (objectsTypeProperty == nullptr) { - ROS_ERROR("Failed to create the objectsTypeProperty."); - return; - } objectsTypeProperty->addOption(typeName, type); } @@ -269,12 +229,8 @@ void SltSpaceDisplay::CreateObjectProperty(const QString &propertyKey, const QSt int32_t green = colorChannelValue[1].toInt(); int32_t blue = colorChannelValue[2].toInt(); // 取colorChannelValue中第2个元素 QColor color = QColor(red, green, blue); - ColorProperty *objectsTypeColorPropertyPtr = new (std::nothrow) ColorProperty(propertyKey, color, + ColorProperty *objectsTypeColorPropertyPtr = new ColorProperty(propertyKey, color, "Objects type color setting.", objectsTypeProperty, SLOT(UpdateObjectsTypeColor()), this); - if (objectsTypeColorPropertyPtr == nullptr) { - ROS_ERROR("Failed to Create the objectsTypeColorPropertyPtr of ColorProperty."); - return; - } SetObjectsTypeColor(type, red, green, blue); objectsTypeColorPropertyMap.insert(type, objectsTypeColorPropertyPtr); @@ -282,12 +238,8 @@ void SltSpaceDisplay::CreateObjectProperty(const QString &propertyKey, const QSt } if (keyList.contains("Title")) { - StringProperty *objectsTypeTitlePropertyPtr = new (std::nothrow) StringProperty(propertyKey, propertyValue, + StringProperty *objectsTypeTitlePropertyPtr = new StringProperty(propertyKey, propertyValue, "Objects type title setting.", objectsTypeProperty, SLOT(UpdateObjectsTypeTitle()), this); - if (objectsTypeTitlePropertyPtr == nullptr) { - ROS_ERROR("Failed to Create the objectsTypeTitlePropertyPtr of StringProperty."); - return; - } objectsTypeTitlePropertyMap.insert(type, objectsTypeTitlePropertyPtr); } @@ -313,11 +265,7 @@ void SltSpaceDisplay::load(const rviz::Config &config) void SltSpaceDisplay::CreateOptimizedLegend() { if (optimizedCurveLegend == nullptr) { - optimizedCurveLegend = new (std::nothrow) QPushButton(ui.GetScrollAreaWidgetContents()); - if (optimizedCurveLegend == nullptr) { - ROS_ERROR("Failed to Create the optimizedCurveLegend of QPushButton."); - return; - } + optimizedCurveLegend = new QPushButton(ui.GetScrollAreaWidgetContents()); QObject::connect(optimizedCurveLegend, SIGNAL(toggled(bool)), this, SLOT(UpdateMathglDraw())); } @@ -333,11 +281,7 @@ void SltSpaceDisplay::CreateOptimizedLegend() void SltSpaceDisplay::CreateSpeedLegend() { if (speedLimitCurveLegend == nullptr) { - speedLimitCurveLegend = new (std::nothrow) QPushButton(ui.GetScrollAreaWidgetContents()); - if (speedLimitCurveLegend == nullptr) { - ROS_ERROR("Failed to Create the speedLimitCurveLegend of QPushButton."); - return; - } + speedLimitCurveLegend = new QPushButton(ui.GetScrollAreaWidgetContents()); QObject::connect(speedLimitCurveLegend, SIGNAL(toggled(bool)), this, SLOT(UpdateMathglDraw())); } @@ -489,7 +433,19 @@ void SltSpaceDisplay::UpdateGridLayoutItem() ui.GetGridLayout()->addItem(horizontalSpacerRight, 1, column - 1, 1, 1); const auto &objectsIdTypeMap = sltSpaceData.GetObjectsIdTypeMap(); - auto iter = objectsIdTypeMap.cbegin(); + + QList listType = objectsIdTypeMap.values(); + for (int32_t i = 0; i < listType.count() - 1; i++) { + for (int32_t j = i + 1; j < listType.count(); j++) { + if (listType.at(i) > listType.at(j)) { + int32_t type = listType.at(i); + listType[i] = listType.at(j); + listType[j] = type; + } + } + } + + int32_t k = 0; // 从第1行第1列位置开始放置图例按钮,遍历网格图例按钮放置区域(row - 2)行乘(column - 2)列个放置空间 for (int32_t i = 1; i <= row - 2; i++) { // 共有(column - 2)列是安置图例按钮的 @@ -502,15 +458,15 @@ void SltSpaceDisplay::UpdateGridLayoutItem() ui.GetGridLayout()->addWidget(speedLimitCurveLegend, i, j, 1, 1); speedLimitCurveLegend->show(); // 只有当整个障碍物图例按钮都还没有遍历安置完毕,网格布局器才安置图例按钮 - } else if (iter != objectsIdTypeMap.cend()) { - auto objectIdLegendIter = objectsIdLegendMap.find(iter.key()); + } else if (k < listType.count()) { + auto objectIdLegendIter = objectsIdLegendMap.find(objectsIdTypeMap.key(listType.at(k))); if ((objectIdLegendIter == objectsIdLegendMap.end()) || (objectIdLegendIter->second == nullptr)) { - iter++; + k++; continue; } - ui.GetGridLayout()->addWidget(objectsIdLegendMap[iter.key()].get(), i, j, 1, 1); - objectsIdLegendMap[iter.key()]->show(); - iter++; + ui.GetGridLayout()->addWidget(objectsIdLegendMap[objectsIdTypeMap.key(listType.at(k))].get(), i, j, 1, 1); + objectsIdLegendMap[objectsIdTypeMap.key(listType.at(k))]->show(); + k++; } } } @@ -531,36 +487,20 @@ void SltSpaceDisplay::InitLegendSpacerItem() const int32_t horizontalHeight = 20; verticalSpacerTop = - new (std::nothrow) QSpacerItem(verticalWidth, verticalHeightTop, QSizePolicy::Minimum, QSizePolicy::Expanding); - if (verticalSpacerTop == nullptr) { - ROS_ERROR("Failed to Create the verticalSpacerTop of QSpacerItem."); - return; - } + new QSpacerItem(verticalWidth, verticalHeightTop, QSizePolicy::Minimum, QSizePolicy::Expanding); ui.GetGridLayout()->addItem(verticalSpacerTop, 0, 1, 1, 1); - verticalSpacerBottom = new (std::nothrow) + verticalSpacerBottom = new QSpacerItem(verticalWidth, verticalHeightBottom, QSizePolicy::Minimum, QSizePolicy::Expanding); - if (verticalSpacerBottom == nullptr) { - ROS_ERROR("Failed to Create the verticalSpacerBottom of QSpacerItem."); - return; - } // 底部垂直弹簧放置第2行第1列,占据1行1列 ui.GetGridLayout()->addItem(verticalSpacerBottom, 2, 1, 1, 1); horizontalSpacerLeft = - new (std::nothrow) QSpacerItem(horizontalWidth, horizontalHeight, QSizePolicy::Expanding, QSizePolicy::Minimum); - if (horizontalSpacerLeft == nullptr) { - ROS_ERROR("Failed to Create the horizontalSpacerLeft of QSpacerItem."); - return; - } + new QSpacerItem(horizontalWidth, horizontalHeight, QSizePolicy::Expanding, QSizePolicy::Minimum); ui.GetGridLayout()->addItem(horizontalSpacerLeft, 1, 0, 1, 1); horizontalSpacerRight = - new (std::nothrow) QSpacerItem(horizontalWidth, horizontalHeight, QSizePolicy::Expanding, QSizePolicy::Minimum); - if (horizontalSpacerRight == nullptr) { - ROS_ERROR("Failed to Create the horizontalSpacerRight of QSpacerItem."); - return; - } + new QSpacerItem(horizontalWidth, horizontalHeight, QSizePolicy::Expanding, QSizePolicy::Minimum); // 默认安装位置为第1行第3列,占据1行1列 ui.GetGridLayout()->addItem(horizontalSpacerRight, 1, 3, 1, 1); @@ -603,11 +543,7 @@ void SltSpaceDisplay::onInitialize() graph.Clf(mglGraphColorR, mglGraphColorG, mglGraphColorB); ui.GetQMathGl()->setGraph(&graph); - SltSpaceDraw *spaceDraw = new (std::nothrow) SltSpaceDraw(this, &sltSpaceData); - if (spaceDraw == nullptr) { - ROS_ERROR("Failed to Create the spaceDraw of SltSpaceDraw."); - return; - } + SltSpaceDraw *spaceDraw = new SltSpaceDraw(this, &sltSpaceData); ui.GetQMathGl()->setDraw(spaceDraw); ui.GetQMathGl()->setDotsPreview(false); @@ -734,32 +670,20 @@ void SltSpaceDisplay::SetObjectProperty(int32_t objectType) objectsTypeTotalVector.append(objectType); if (objectsTypeProperty == nullptr) { - objectsTypeProperty = new (std::nothrow) EnumProperty("Object Type", QString("Type %1").arg(objectType), + objectsTypeProperty = new EnumProperty("Object Type", QString("Type %1").arg(objectType), "Slt Objects Type setting selection.", this, SLOT(UpdateObjectsTypeChoice())); - if (objectsTypeProperty == nullptr) { - ROS_ERROR("Failed to Create the objectsTypeProperty of EnumProperty."); - return; - } } QString typeName = QString("Type %1").arg(objectType); objectsTypeProperty->addOption(typeName, objectType); StringProperty *objectsTypeTitlePropertyPtr = - new (std::nothrow) StringProperty(QString("Type %1 Title").arg(objectType), QString("Type %1").arg(objectType), + new StringProperty(QString("Type %1 Title").arg(objectType), QString("Type %1").arg(objectType), "Objects type title setting.", objectsTypeProperty, SLOT(UpdateObjectsTypeTitle()), this); - if (objectsTypeTitlePropertyPtr == nullptr) { - ROS_ERROR("Failed to Create the objectsTypeTitlePropertyPtr of StringProperty."); - return; - } QColor color = GetObjectsTypeColor(objectType); ColorProperty *objectsTypeColorPropertyPtr = - new (std::nothrow) ColorProperty(QString("Type %1 Color").arg(objectType), color, "Objects type color setting.", + new ColorProperty(QString("Type %1 Color").arg(objectType), color, "Objects type color setting.", objectsTypeProperty, SLOT(UpdateObjectsTypeColor()), this); - if (objectsTypeColorPropertyPtr == nullptr) { - ROS_ERROR("Failed to Create the objectsTypeColorPropertyPtr of ColorProperty."); - return; - } objectsTypeTitlePropertyMap.insert(objectType, objectsTypeTitlePropertyPtr); objectsTypeColorPropertyMap.insert(objectType, objectsTypeColorPropertyPtr); -- Gitee From 51500e17fac3c2e16a775866aa57c0f4b8086589 Mon Sep 17 00:00:00 2001 From: "1020785391@qq.com" <1020785391@qq.com> Date: Tue, 15 Mar 2022 17:29:03 +0800 Subject: [PATCH 02/20] =?UTF-8?q?=E5=B0=86=E6=8E=92=E5=BA=8F=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E6=94=B9=E4=B8=BAqSort()=E5=87=BD=E6=95=B0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_draw.cpp | 10 +--------- chart_plugin/src/slt_space_display.cpp | 10 +--------- chart_plugin/src/st_space_display.cpp | 17 ++++------------- 3 files changed, 6 insertions(+), 31 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index a4efbf1..9ad398d 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -109,15 +109,7 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const const auto sltObjectsMap = spaceDataPtr->GetObjectsMap(); const auto objectsIdType = spaceDataPtr->GetObjectsIdTypeMap(); QList listType = objectsIdType.values(); - for (int i = 0; i < listType.count() - 1; i++) { - for (int j = i + 1; j < listType.count(); j++) { - if (listType.at(i) > listType.at(j)) { - int32_t type = listType.at(i); - listType[i] = listType.at(j); - listType[j] = type; - } - } - } + qSort(listType.begin(), listType.end()); for (auto type : listType) { vector objectData = sltObjectsMap.value(objectsIdType.key(type)); diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index f7c1484..ee930e5 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -435,15 +435,7 @@ void SltSpaceDisplay::UpdateGridLayoutItem() const auto &objectsIdTypeMap = sltSpaceData.GetObjectsIdTypeMap(); QList listType = objectsIdTypeMap.values(); - for (int32_t i = 0; i < listType.count() - 1; i++) { - for (int32_t j = i + 1; j < listType.count(); j++) { - if (listType.at(i) > listType.at(j)) { - int32_t type = listType.at(i); - listType[i] = listType.at(j); - listType[j] = type; - } - } - } + qSort(listType.begin(), listType.end()); int32_t k = 0; // 从第1行第1列位置开始放置图例按钮,遍历网格图例按钮放置区域(row - 2)行乘(column - 2)列个放置空间 diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index a707382..0aec938 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -700,20 +700,11 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &objectsIdTyp stObjectsCurveMap.clear(); } - QStringList typeNames = stObjectsMap.keys(); - for (int32_t i = 0; i < typeNames.count() - 1; i++) { - for (int32_t j = i + 1; j < typeNames.count(); j++) { - if (objectsIdType.value(typeNames.at(i)) > objectsIdType.value(typeNames.at(j))) { - QString typeName = typeNames.at(i); - typeNames[i] = typeNames.at(j); - typeNames[j] = typeName; - } - } - } + QList listType = objectsIdType.values(); + qSort(listType.begin(), listType.end()); - for (auto typeName : typeNames) { - QString objectId = typeName; - int32_t type = objectsIdType.value(objectId); + for (auto type : listType) { + QString objectId = objectsIdType.key(type); SetObjectProperty(type); if (!objectsTypeTitleProperty.contains(type) || objectsTypeTitleProperty[type] == nullptr) { continue; -- Gitee From deae83b156847688ede9923d2df2e557c51133dd Mon Sep 17 00:00:00 2001 From: "1020785391@qq.com" <1020785391@qq.com> Date: Tue, 15 Mar 2022 17:51:03 +0800 Subject: [PATCH 03/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_draw.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 9ad398d..4d372ef 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -117,7 +117,6 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const continue; } QString objectId = objectsIdType.key(type); - int32_t type = objectsIdType.value(objectId); spaceDisplayPtr->SetObjectProperty(type); auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && -- Gitee From 599ee7acbd132e16cfa3bb4bf24d83df49ef3452 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Wed, 6 Apr 2022 16:16:32 +0800 Subject: [PATCH 04/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9st=E5=9B=BE=E5=92=8Cslt?= =?UTF-8?q?=E5=9B=BE=E6=8E=92=E5=BA=8F=E7=B4=8A=E4=B9=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 8 +++ chart_plugin/src/slt_space/slt_space_data.h | 9 +++ chart_plugin/src/slt_space/slt_space_draw.cpp | 59 +++++++++-------- chart_plugin/src/slt_space_display.cpp | 20 ++++-- chart_plugin/src/st_space/st_space_data.cpp | 8 +++ chart_plugin/src/st_space/st_space_data.h | 9 +++ chart_plugin/src/st_space_display.cpp | 64 +++++++++++-------- chart_plugin/src/st_space_display.h | 4 +- 8 files changed, 120 insertions(+), 61 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index c31a163..88fa2dc 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -62,6 +62,7 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto { objectsMap.clear(); objectsIdTypeMap.clear(); + objectsTypeIdMap.clear(); if (pointVector.empty()) { return; @@ -73,6 +74,7 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto if (!objectsMap.contains(id)) { objectsMap.insert(id, CreateObjectIdData(point)); objectsIdTypeMap.insert(id, type); + objectsTypeIdMap.insert(type, id); continue; } objectsMap[id].push_back(mglPoint(point.sValue, point.lValue, point.tValue)); @@ -99,12 +101,18 @@ const QMap &SltSpaceData::GetObjectsIdTypeMap() const return objectsIdTypeMap; } +const QMultimap &SltSpaceData::GetObjectsTypeIdMap() const +{ + return objectsTypeIdMap; +} + void SltSpaceData::Clear() { optimizedSltTrack.clear(); sltSpeedLimit.clear(); objectsMap.clear(); objectsIdTypeMap.clear(); + objectsTypeIdMap.clear(); } bool SltSpaceData::Add(const custom::SltSpace::ConstPtr &msg) diff --git a/chart_plugin/src/slt_space/slt_space_data.h b/chart_plugin/src/slt_space/slt_space_data.h index 37d8ce6..94ac4b6 100755 --- a/chart_plugin/src/slt_space/slt_space_data.h +++ b/chart_plugin/src/slt_space/slt_space_data.h @@ -86,6 +86,14 @@ public: * 返回值:QMap障碍物属性数据,障碍物id和其对应type信息 */ const QMap &GetObjectsIdTypeMap() const; + + /* + * 功能:获取障碍物属性数据 + * 输入参数:无 + * 输出参数:无 + * 返回值:QMultiMap障碍物属性数据,障碍物type和其对应多个id + */ + const QMultiMap &GetObjectsTypeIdMap() const; private: /* @@ -118,6 +126,7 @@ private: QMap> objectsMap {}; QMap objectsIdTypeMap {}; + QMultiMap objectsTypeIdMap; }; } // namespace chart_plugin diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 4d372ef..747a67a 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -108,40 +108,45 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const const auto sltObjectsMap = spaceDataPtr->GetObjectsMap(); const auto objectsIdType = spaceDataPtr->GetObjectsIdTypeMap(); - QList listType = objectsIdType.values(); + const auto objectsTypeId = spaceDataPtr->GetObjectsTypeIdMap(); + + QList listType = QSet::fromList(objectsTypeId.keys()).toList(); qSort(listType.begin(), listType.end()); - for (auto type : listType) { - vector objectData = sltObjectsMap.value(objectsIdType.key(type)); - if (objectData.size() != OBJECT_DATA_NUM_SIZE) { - continue; - } - QString objectId = objectsIdType.key(type); - spaceDisplayPtr->SetObjectProperty(type); - auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); - if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && - !((*objectIdLegendIter).second)->isChecked()) { - continue; - } - - auto objectsTypeColorPropertyMap = spaceDisplayPtr->GetObjectsTypeColorPropertyMap(); - if (!objectsTypeColorPropertyMap.contains(type) || objectsTypeColorPropertyMap[type] == nullptr) { - continue; - } - QColor color = objectsTypeColorPropertyMap[type]->getColor(); - QString colorFaceFormat = COLOR_FACE_PREFIX + color.name().mid(0x1) + COLOR_FACE_SUFFIX; - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM3], + for (auto objectType : listType) { + QStringList listId = objectsTypeId.values(objectType); + qSort(listId.begin(), listId.end()); + for (auto objectId : listId) { + vector objectData = sltObjectsMap.value(objectId); + if (objectData.size() != OBJECT_DATA_NUM_SIZE) { + continue; + } + spaceDisplayPtr->SetObjectProperty(objectType); + auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); + if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && + !((*objectIdLegendIter).second)->isChecked()) { + continue; + } + + QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[type]->getColor(); + QString colorFaceFormat = COLOR_FACE_PREFIX + color.name().mid(0x1) + COLOR_FACE_SUFFIX; + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM2], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM6], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], objectData[OBJECT_DATA_NUM5], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], objectData[OBJECT_DATA_NUM5], objectData[OBJECT_DATA_NUM4], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM4], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM4], objectData[OBJECT_DATA_NUM5], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM5], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM5], objectData[OBJECT_DATA_NUM6], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM4], - objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM3], objectData[ OBJECT_DATA_NUM4], + objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); + } + + + + } if (spaceDisplayPtr->GetIsTopicMessageComing()) { diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index ee930e5..08e8dc5 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -432,10 +432,16 @@ void SltSpaceDisplay::UpdateGridLayoutItem() ui.GetGridLayout()->addItem(horizontalSpacerLeft, 1, 0, 1, 1); ui.GetGridLayout()->addItem(horizontalSpacerRight, 1, column - 1, 1, 1); - const auto &objectsIdTypeMap = sltSpaceData.GetObjectsIdTypeMap(); + const auto &objectsTypeIdMap = sltSpaceData.GetObjectsTypeIdMap(); - QList listType = objectsIdTypeMap.values(); + QList listType = QSet::fromList(objectsIdTypeMap.keys()).toList(); qSort(listType.begin(), listType.end()); + QStringList listId; + for (auto type : listType) { + QStringList listObjectId = objectsTypeIdMap.values(type); + qSort(listObjectId.begin(), listObjectId.end()); + listId << listObjectId; + } int32_t k = 0; // 从第1行第1列位置开始放置图例按钮,遍历网格图例按钮放置区域(row - 2)行乘(column - 2)列个放置空间 @@ -450,14 +456,16 @@ void SltSpaceDisplay::UpdateGridLayoutItem() ui.GetGridLayout()->addWidget(speedLimitCurveLegend, i, j, 1, 1); speedLimitCurveLegend->show(); // 只有当整个障碍物图例按钮都还没有遍历安置完毕,网格布局器才安置图例按钮 - } else if (k < listType.count()) { - auto objectIdLegendIter = objectsIdLegendMap.find(objectsIdTypeMap.key(listType.at(k))); + } else if (k < listId.count()) { + QString objectId = listId.at(k); + + auto objectIdLegendIter = objectsIdLegendMap.find(objectId); if ((objectIdLegendIter == objectsIdLegendMap.end()) || (objectIdLegendIter->second == nullptr)) { k++; continue; } - ui.GetGridLayout()->addWidget(objectsIdLegendMap[objectsIdTypeMap.key(listType.at(k))].get(), i, j, 1, 1); - objectsIdLegendMap[objectsIdTypeMap.key(listType.at(k))]->show(); + ui.GetGridLayout()->addWidget(objectsIdLegendMap[objectId].get(), i, j, 1, 1); + objectsIdLegendMap[objectId]->show(); k++; } } diff --git a/chart_plugin/src/st_space/st_space_data.cpp b/chart_plugin/src/st_space/st_space_data.cpp index fe0e119..c9a1e92 100755 --- a/chart_plugin/src/st_space/st_space_data.cpp +++ b/chart_plugin/src/st_space/st_space_data.cpp @@ -54,6 +54,7 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector { objectsMap.clear(); objectsIdTypeMap.clear(); + objectsTypeIdMap.clear(); if (pointVector.empty()) { return; @@ -67,6 +68,7 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector objectIdNew.append(QPointF(point.tValue, point.sValue)); objectsMap.insert(id, objectIdNew); objectsIdTypeMap.insert(id, type); + objectsTypeIdMap.insert(type, id); continue; } objectsMap[id].append(QPointF(point.tValue, point.sValue)); @@ -98,6 +100,11 @@ const QMap &StSpaceData::GetObjectsIdTypeMap() const return objectsIdTypeMap; } +const QMultiMap &StSpaceData::GetObjectsTypeIdMap() const +{ + return objectsTypeIdMap; +} + void StSpaceData::Clear() { firstStTrack.clear(); @@ -105,6 +112,7 @@ void StSpaceData::Clear() stSpeedLimit.clear(); objectsMap.clear(); objectsIdTypeMap.clear(); + objectsTypeIdMap.clear(); } bool StSpaceData::Add(const custom::StSpace::ConstPtr &msg) diff --git a/chart_plugin/src/st_space/st_space_data.h b/chart_plugin/src/st_space/st_space_data.h index 31b7fa3..05837ed 100755 --- a/chart_plugin/src/st_space/st_space_data.h +++ b/chart_plugin/src/st_space/st_space_data.h @@ -94,6 +94,14 @@ public: * 返回值:QMap障碍物属性数据,障碍物id和其对应type信息 */ const QMap &GetObjectsIdTypeMap() const; + + /* + * 功能:获取障碍物属性数据 + * 输入参数:无 + * 输出参数:无 + * 返回值:QMultiMap障碍物属性数据,障碍物type和其对应id信息 + */ + const QMultiMap &GetObjectsTypeIdMap() const; private: /* @@ -119,6 +127,7 @@ private: QMap objectsMap {}; QMap objectsIdTypeMap {}; + QMultiMap objectsTypeIdMap {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 0aec938..f033066 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -686,42 +686,55 @@ void StSpaceDisplay::SetObjectProperty(int32_t objectType) objectsTypeAlphaProperty.insert(objectType, objectsTypeAlphaPropertyPtr); } -void StSpaceDisplay::ShowObjectsCurve(const QMap &objectsIdType, - const QMap &stObjectsMap) +void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsMap) { + const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); + const QMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); + + bool same = false; if((!stObjectsCurveMap.empty()) && (stObjectsCurveMap.size() == stObjectsMap.size())) { - for (auto &stObjectsCurve : stObjectsCurveMap) { + same = true; + for (auto &stObjectsCurve : stObjectsCurveMap) { + if (!objectsIdType.contains(stObjectsCurve.first)) { + same = false; + break; + } + } + } + + if (same) { + for (auto &stObjectsCurve : stObjectsCurveMap) { stObjectsCurve.second->setSamples(stObjectsMap.value(stObjectsCurve.first)); } return; - } + } if (!stObjectsCurveMap.empty()) { stObjectsCurveMap.clear(); } - QList listType = objectsIdType.values(); + QList listType = QSet::fromList(objectsTypeId.keys()).toList(); qSort(listType.begin(), listType.end()); - for (auto type : listType) { - QString objectId = objectsIdType.key(type); - SetObjectProperty(type); - if (!objectsTypeTitleProperty.contains(type) || objectsTypeTitleProperty[type] == nullptr) { - continue; - } - QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[type]->getString()).arg(objectId); - QColor color = GetObjectsTypeColor(type); - unique_ptr curve = make_unique(objectName); - curve->setTitle(objectName); - color.setAlpha(objectsTypeAlphaProperty[type]->getFloat() * 0xFF); - curve->setPen(color, OBJECT_CURVE_PEN_WIDTH); - curve->setBrush(color); - curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); - curve->setLegendAttribute(curve->LegendShowBrush); - curve->attach(ui.qwtPlot); - curve->setSamples(stObjectsMap.value(objectId)); - ShowCurve(curve.get(), true); - stObjectsCurveMap.insert(std::make_pair(objectId, std::move(curve))); + for (auto objectType : listType) { + QStringList listId = objectsTypeId.values(objectType); + qSort(listId.begin(), listId.end()); + for (auto objectId : listId) { + SetObjectProperty(type); + QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[type]->getString()).arg(objectId); + QColor color = GetObjectsTypeColor(type); + unique_ptr curve = make_unique(objectName); + curve->setTitle(objectName); + color.setAlpha(objectsTypeAlphaProperty[type]->getFloat() * 0xFF); + curve->setPen(color, OBJECT_CURVE_PEN_WIDTH); + curve->setBrush(color); + curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); + curve->setLegendAttribute(curve->LegendShowBrush); + curve->attach(ui.qwtPlot); + curve->setSamples(stObjectsMap.value(objectId)); + ShowCurve(curve.get(), true); + stObjectsCurveMap.insert(std::make_pair(objectId, std::move(curve))); + } } } @@ -731,8 +744,7 @@ void StSpaceDisplay::DrawObjects(const QMap &stObjectsMap) return; } - const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); - ShowObjectsCurve(objectsIdType, stObjectsMap); + ShowObjectsCurve(stObjectsMap); UpdateObjectsTypeChoice(); } diff --git a/chart_plugin/src/st_space_display.h b/chart_plugin/src/st_space_display.h index 3067554..5b54620 100755 --- a/chart_plugin/src/st_space_display.h +++ b/chart_plugin/src/st_space_display.h @@ -370,11 +370,11 @@ private: /* * 功能:创建并显示障碍物曲线信息 - * 输入参数:objectsIdType-障碍物的Id和对应的类型,stObjectsMap-障碍物的Id和对应的数据 + * 输入参数:stObjectsMap-障碍物的Id和对应的数据 * 输出参数:无 * 返回值:无 */ - void ShowObjectsCurve(const QMap &objectsIdType, const QMap &stObjectsMap); + void ShowObjectsCurve(const QMap &stObjectsMap); /* * 功能:更新当前第一条曲线的属性选项的控制展示 -- Gitee From 8de5cca1ef956bc258750aa186562ee432db7482 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Wed, 6 Apr 2022 17:01:15 +0800 Subject: [PATCH 05/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 2 +- chart_plugin/src/slt_space/slt_space_draw.cpp | 2 +- chart_plugin/src/st_space_display.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index 88fa2dc..7a728a6 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -101,7 +101,7 @@ const QMap &SltSpaceData::GetObjectsIdTypeMap() const return objectsIdTypeMap; } -const QMultimap &SltSpaceData::GetObjectsTypeIdMap() const +const QMultiMap &SltSpaceData::GetObjectsTypeIdMap() const { return objectsTypeIdMap; } diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 747a67a..7a6b2ad 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -128,7 +128,7 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const continue; } - QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[type]->getColor(); + QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[objectType]->getColor(); QString colorFaceFormat = COLOR_FACE_PREFIX + color.name().mid(0x1) + COLOR_FACE_SUFFIX; mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM2], colorFaceFormat.toStdString().c_str()); diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index f033066..842e754 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -689,7 +689,7 @@ void StSpaceDisplay::SetObjectProperty(int32_t objectType) void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsMap) { const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); - const QMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); + const QMultiMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); bool same = false; if((!stObjectsCurveMap.empty()) && (stObjectsCurveMap.size() == stObjectsMap.size())) { @@ -720,7 +720,7 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsM QStringList listId = objectsTypeId.values(objectType); qSort(listId.begin(), listId.end()); for (auto objectId : listId) { - SetObjectProperty(type); + SetObjectProperty(objectType); QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[type]->getString()).arg(objectId); QColor color = GetObjectsTypeColor(type); unique_ptr curve = make_unique(objectName); -- Gitee From d0ca178c9669a9a11837e23c1edf78609ebee62b Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Wed, 6 Apr 2022 17:15:00 +0800 Subject: [PATCH 06/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space_display.cpp | 2 +- chart_plugin/src/st_space_display.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index 08e8dc5..e8d3c10 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -434,7 +434,7 @@ void SltSpaceDisplay::UpdateGridLayoutItem() const auto &objectsTypeIdMap = sltSpaceData.GetObjectsTypeIdMap(); - QList listType = QSet::fromList(objectsIdTypeMap.keys()).toList(); + QList listType = QSet::fromList(objectsTypeIdMap.keys()).toList(); qSort(listType.begin(), listType.end()); QStringList listId; for (auto type : listType) { diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 842e754..0b0926f 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -721,11 +721,11 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsM qSort(listId.begin(), listId.end()); for (auto objectId : listId) { SetObjectProperty(objectType); - QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[type]->getString()).arg(objectId); - QColor color = GetObjectsTypeColor(type); + QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[objectType]->getString()).arg(objectId); + QColor color = GetObjectsTypeColor(objectType); unique_ptr curve = make_unique(objectName); curve->setTitle(objectName); - color.setAlpha(objectsTypeAlphaProperty[type]->getFloat() * 0xFF); + color.setAlpha(objectsTypeAlphaProperty[objectType]->getFloat() * 0xFF); curve->setPen(color, OBJECT_CURVE_PEN_WIDTH); curve->setBrush(color); curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); -- Gitee From afd24aa247f68b003f4619fd2c6f93aef5aa5e4f Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Wed, 6 Apr 2022 17:35:10 +0800 Subject: [PATCH 07/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.h b/chart_plugin/src/slt_space/slt_space_data.h index 94ac4b6..60e6a4b 100755 --- a/chart_plugin/src/slt_space/slt_space_data.h +++ b/chart_plugin/src/slt_space/slt_space_data.h @@ -126,7 +126,7 @@ private: QMap> objectsMap {}; QMap objectsIdTypeMap {}; - QMultiMap objectsTypeIdMap; + QMultiMap objectsTypeIdMap {}; }; } // namespace chart_plugin -- Gitee From 887717360988236bdab02b5342158fa718267722 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Wed, 6 Apr 2022 17:54:00 +0800 Subject: [PATCH 08/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 8 +-- chart_plugin/src/slt_space/slt_space_data.h | 4 +- chart_plugin/src/slt_space/slt_space_draw.cpp | 54 ++++++++--------- chart_plugin/src/slt_space_display.cpp | 14 ++--- chart_plugin/src/st_space/st_space_data.cpp | 8 +-- chart_plugin/src/st_space/st_space_data.h | 4 +- chart_plugin/src/st_space_display.cpp | 60 +++++++++---------- 7 files changed, 74 insertions(+), 78 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index 7a728a6..af97d38 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -62,7 +62,7 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto { objectsMap.clear(); objectsIdTypeMap.clear(); - objectsTypeIdMap.clear(); + objectsTypeIdMap.clear(); if (pointVector.empty()) { return; @@ -74,7 +74,7 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto if (!objectsMap.contains(id)) { objectsMap.insert(id, CreateObjectIdData(point)); objectsIdTypeMap.insert(id, type); - objectsTypeIdMap.insert(type, id); + objectsTypeIdMap.insert(type, id); continue; } objectsMap[id].push_back(mglPoint(point.sValue, point.lValue, point.tValue)); @@ -103,7 +103,7 @@ const QMap &SltSpaceData::GetObjectsIdTypeMap() const const QMultiMap &SltSpaceData::GetObjectsTypeIdMap() const { - return objectsTypeIdMap; + return objectsTypeIdMap; } void SltSpaceData::Clear() @@ -112,7 +112,7 @@ void SltSpaceData::Clear() sltSpeedLimit.clear(); objectsMap.clear(); objectsIdTypeMap.clear(); - objectsTypeIdMap.clear(); + objectsTypeIdMap.clear(); } bool SltSpaceData::Add(const custom::SltSpace::ConstPtr &msg) diff --git a/chart_plugin/src/slt_space/slt_space_data.h b/chart_plugin/src/slt_space/slt_space_data.h index 60e6a4b..65d40e8 100755 --- a/chart_plugin/src/slt_space/slt_space_data.h +++ b/chart_plugin/src/slt_space/slt_space_data.h @@ -87,7 +87,7 @@ public: */ const QMap &GetObjectsIdTypeMap() const; - /* + /* * 功能:获取障碍物属性数据 * 输入参数:无 * 输出参数:无 @@ -126,7 +126,7 @@ private: QMap> objectsMap {}; QMap objectsIdTypeMap {}; - QMultiMap objectsTypeIdMap {}; + QMultiMap objectsTypeIdMap {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 7a6b2ad..5865e74 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -108,45 +108,41 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const const auto sltObjectsMap = spaceDataPtr->GetObjectsMap(); const auto objectsIdType = spaceDataPtr->GetObjectsIdTypeMap(); - const auto objectsTypeId = spaceDataPtr->GetObjectsTypeIdMap(); + const auto objectsTypeId = spaceDataPtr->GetObjectsTypeIdMap(); QList listType = QSet::fromList(objectsTypeId.keys()).toList(); qSort(listType.begin(), listType.end()); for (auto objectType : listType) { - QStringList listId = objectsTypeId.values(objectType); - qSort(listId.begin(), listId.end()); - for (auto objectId : listId) { - vector objectData = sltObjectsMap.value(objectId); - if (objectData.size() != OBJECT_DATA_NUM_SIZE) { - continue; - } - spaceDisplayPtr->SetObjectProperty(objectType); - auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); - if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && - !((*objectIdLegendIter).second)->isChecked()) { - continue; - } - - QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[objectType]->getColor(); - QString colorFaceFormat = COLOR_FACE_PREFIX + color.name().mid(0x1) + COLOR_FACE_SUFFIX; - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM3], + QStringList listId = objectsTypeId.values(objectType); + qSort(listId.begin(), listId.end()); + for (auto objectId : listId) { + vector objectData = sltObjectsMap.value(objectId); + if (objectData.size() != OBJECT_DATA_NUM_SIZE) { + continue; + } + spaceDisplayPtr->SetObjectProperty(objectType); + auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); + if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && + !((*objectIdLegendIter).second)->isChecked()) { + continue; + } + + QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[objectType]->getColor(); + QString colorFaceFormat = COLOR_FACE_PREFIX + color.name().mid(0x1) + COLOR_FACE_SUFFIX; + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM2], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM6], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM3], objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], objectData[OBJECT_DATA_NUM5], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM6], objectData[OBJECT_DATA_NUM7], objectData[OBJECT_DATA_NUM5], objectData[OBJECT_DATA_NUM4], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM4], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM4], objectData[OBJECT_DATA_NUM5], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM5], + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM1], objectData[OBJECT_DATA_NUM2], objectData[OBJECT_DATA_NUM5], objectData[OBJECT_DATA_NUM6], colorFaceFormat.toStdString().c_str()); - mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM3], objectData[ OBJECT_DATA_NUM4], - objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); - } - - - - + mglGraphPtr->Face(objectData[OBJECT_DATA_NUM0], objectData[OBJECT_DATA_NUM3], objectData[ OBJECT_DATA_NUM4], + objectData[OBJECT_DATA_NUM7], colorFaceFormat.toStdString().c_str()); + } } if (spaceDisplayPtr->GetIsTopicMessageComing()) { diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index e8d3c10..8bb8bee 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -436,12 +436,12 @@ void SltSpaceDisplay::UpdateGridLayoutItem() QList listType = QSet::fromList(objectsTypeIdMap.keys()).toList(); qSort(listType.begin(), listType.end()); - QStringList listId; - for (auto type : listType) { - QStringList listObjectId = objectsTypeIdMap.values(type); - qSort(listObjectId.begin(), listObjectId.end()); - listId << listObjectId; - } + QStringList listId; + for (auto type : listType) { + QStringList listObjectId = objectsTypeIdMap.values(type); + qSort(listObjectId.begin(), listObjectId.end()); + listId << listObjectId; + } int32_t k = 0; // 从第1行第1列位置开始放置图例按钮,遍历网格图例按钮放置区域(row - 2)行乘(column - 2)列个放置空间 @@ -457,7 +457,7 @@ void SltSpaceDisplay::UpdateGridLayoutItem() speedLimitCurveLegend->show(); // 只有当整个障碍物图例按钮都还没有遍历安置完毕,网格布局器才安置图例按钮 } else if (k < listId.count()) { - QString objectId = listId.at(k); + QString objectId = listId.at(k); auto objectIdLegendIter = objectsIdLegendMap.find(objectId); if ((objectIdLegendIter == objectsIdLegendMap.end()) || (objectIdLegendIter->second == nullptr)) { diff --git a/chart_plugin/src/st_space/st_space_data.cpp b/chart_plugin/src/st_space/st_space_data.cpp index c9a1e92..e5fff62 100755 --- a/chart_plugin/src/st_space/st_space_data.cpp +++ b/chart_plugin/src/st_space/st_space_data.cpp @@ -54,7 +54,7 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector { objectsMap.clear(); objectsIdTypeMap.clear(); - objectsTypeIdMap.clear(); + objectsTypeIdMap.clear(); if (pointVector.empty()) { return; @@ -68,7 +68,7 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector objectIdNew.append(QPointF(point.tValue, point.sValue)); objectsMap.insert(id, objectIdNew); objectsIdTypeMap.insert(id, type); - objectsTypeIdMap.insert(type, id); + objectsTypeIdMap.insert(type, id); continue; } objectsMap[id].append(QPointF(point.tValue, point.sValue)); @@ -102,7 +102,7 @@ const QMap &StSpaceData::GetObjectsIdTypeMap() const const QMultiMap &StSpaceData::GetObjectsTypeIdMap() const { - return objectsTypeIdMap; + return objectsTypeIdMap; } void StSpaceData::Clear() @@ -112,7 +112,7 @@ void StSpaceData::Clear() stSpeedLimit.clear(); objectsMap.clear(); objectsIdTypeMap.clear(); - objectsTypeIdMap.clear(); + objectsTypeIdMap.clear(); } bool StSpaceData::Add(const custom::StSpace::ConstPtr &msg) diff --git a/chart_plugin/src/st_space/st_space_data.h b/chart_plugin/src/st_space/st_space_data.h index 05837ed..ed89b15 100755 --- a/chart_plugin/src/st_space/st_space_data.h +++ b/chart_plugin/src/st_space/st_space_data.h @@ -95,7 +95,7 @@ public: */ const QMap &GetObjectsIdTypeMap() const; - /* + /* * 功能:获取障碍物属性数据 * 输入参数:无 * 输出参数:无 @@ -127,7 +127,7 @@ private: QMap objectsMap {}; QMap objectsIdTypeMap {}; - QMultiMap objectsTypeIdMap {}; + QMultiMap objectsTypeIdMap {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 0b0926f..0f99910 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -688,26 +688,26 @@ void StSpaceDisplay::SetObjectProperty(int32_t objectType) void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsMap) { - const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); - const QMultiMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); - - bool same = false; + const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); + const QMultiMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); + + bool same = false; if((!stObjectsCurveMap.empty()) && (stObjectsCurveMap.size() == stObjectsMap.size())) { - same = true; - for (auto &stObjectsCurve : stObjectsCurveMap) { + same = true; + for (auto &stObjectsCurve : stObjectsCurveMap) { if (!objectsIdType.contains(stObjectsCurve.first)) { - same = false; - break; - } + same = false; + break; + } } } - if (same) { - for (auto &stObjectsCurve : stObjectsCurveMap) { + if (same) { + for (auto &stObjectsCurve : stObjectsCurveMap) { stObjectsCurve.second->setSamples(stObjectsMap.value(stObjectsCurve.first)); } return; - } + } if (!stObjectsCurveMap.empty()) { stObjectsCurveMap.clear(); @@ -717,24 +717,24 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsM qSort(listType.begin(), listType.end()); for (auto objectType : listType) { - QStringList listId = objectsTypeId.values(objectType); - qSort(listId.begin(), listId.end()); - for (auto objectId : listId) { - SetObjectProperty(objectType); - QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[objectType]->getString()).arg(objectId); - QColor color = GetObjectsTypeColor(objectType); - unique_ptr curve = make_unique(objectName); - curve->setTitle(objectName); - color.setAlpha(objectsTypeAlphaProperty[objectType]->getFloat() * 0xFF); - curve->setPen(color, OBJECT_CURVE_PEN_WIDTH); - curve->setBrush(color); - curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); - curve->setLegendAttribute(curve->LegendShowBrush); - curve->attach(ui.qwtPlot); - curve->setSamples(stObjectsMap.value(objectId)); - ShowCurve(curve.get(), true); - stObjectsCurveMap.insert(std::make_pair(objectId, std::move(curve))); - } + QStringList listId = objectsTypeId.values(objectType); + qSort(listId.begin(), listId.end()); + for (auto objectId : listId) { + SetObjectProperty(objectType); + QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[objectType]->getString()).arg(objectId); + QColor color = GetObjectsTypeColor(objectType); + unique_ptr curve = make_unique(objectName); + curve->setTitle(objectName); + color.setAlpha(objectsTypeAlphaProperty[objectType]->getFloat() * 0xFF); + curve->setPen(color, OBJECT_CURVE_PEN_WIDTH); + curve->setBrush(color); + curve->setRenderHint(QwtPlotItem::RenderAntialiased, true); + curve->setLegendAttribute(curve->LegendShowBrush); + curve->attach(ui.qwtPlot); + curve->setSamples(stObjectsMap.value(objectId)); + ShowCurve(curve.get(), true); + stObjectsCurveMap.insert(std::make_pair(objectId, std::move(curve))); + } } } -- Gitee From 47b7af68a174ca6edb438c5e67f7c92dbd0f2cd4 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 15:51:15 +0800 Subject: [PATCH 09/20] =?UTF-8?q?=E5=B0=86QMap=E6=94=B9=E4=B8=BAQMultiMap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 8 ++++++-- chart_plugin/src/slt_space/slt_space_data.h | 6 +++--- chart_plugin/src/slt_space/slt_space_draw.cpp | 8 +++----- chart_plugin/src/slt_space_display.cpp | 8 ++++---- chart_plugin/src/st_space/st_space_data.cpp | 8 ++++++-- chart_plugin/src/st_space/st_space_data.h | 6 +++--- chart_plugin/src/st_space_display.cpp | 16 +++++++++------- chart_plugin/src/st_space_display.h | 2 +- 8 files changed, 35 insertions(+), 27 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index af97d38..b34479e 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -74,7 +74,11 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto if (!objectsMap.contains(id)) { objectsMap.insert(id, CreateObjectIdData(point)); objectsIdTypeMap.insert(id, type); - objectsTypeIdMap.insert(type, id); + QStringList listId = objectsTypeIdMap.value(type); + if (!listId.contains(id)) { + listId.push_back(id); + } + objectsTypeIdMap[type] = listId; continue; } objectsMap[id].push_back(mglPoint(point.sValue, point.lValue, point.tValue)); @@ -101,7 +105,7 @@ const QMap &SltSpaceData::GetObjectsIdTypeMap() const return objectsIdTypeMap; } -const QMultiMap &SltSpaceData::GetObjectsTypeIdMap() const +const QMap &SltSpaceData::GetObjectsTypeIdMap() const { return objectsTypeIdMap; } diff --git a/chart_plugin/src/slt_space/slt_space_data.h b/chart_plugin/src/slt_space/slt_space_data.h index 65d40e8..066da38 100755 --- a/chart_plugin/src/slt_space/slt_space_data.h +++ b/chart_plugin/src/slt_space/slt_space_data.h @@ -91,9 +91,9 @@ public: * 功能:获取障碍物属性数据 * 输入参数:无 * 输出参数:无 - * 返回值:QMultiMap障碍物属性数据,障碍物type和其对应多个id + * 返回值:QMap障碍物属性数据,障碍物type和其对应多个id */ - const QMultiMap &GetObjectsTypeIdMap() const; + const QMap &GetObjectsTypeIdMap() const; private: /* @@ -126,7 +126,7 @@ private: QMap> objectsMap {}; QMap objectsIdTypeMap {}; - QMultiMap objectsTypeIdMap {}; + QMap objectsTypeIdMap {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 5865e74..066780b 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -109,12 +109,10 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const const auto sltObjectsMap = spaceDataPtr->GetObjectsMap(); const auto objectsIdType = spaceDataPtr->GetObjectsIdTypeMap(); const auto objectsTypeId = spaceDataPtr->GetObjectsTypeIdMap(); - - QList listType = QSet::fromList(objectsTypeId.keys()).toList(); - qSort(listType.begin(), listType.end()); - for (auto objectType : listType) { - QStringList listId = objectsTypeId.values(objectType); + for (auto iter = objectsTypeId.begin(); iter != objectsTypeId.end(); iter++) { + int32_t objectType = iter.key(); + QStringList listId = iter.value(); qSort(listId.begin(), listId.end()); for (auto objectId : listId) { vector objectData = sltObjectsMap.value(objectId); diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index 8bb8bee..197dad0 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -433,12 +433,12 @@ void SltSpaceDisplay::UpdateGridLayoutItem() ui.GetGridLayout()->addItem(horizontalSpacerRight, 1, column - 1, 1, 1); const auto &objectsTypeIdMap = sltSpaceData.GetObjectsTypeIdMap(); - - QList listType = QSet::fromList(objectsTypeIdMap.keys()).toList(); - qSort(listType.begin(), listType.end()); + + QList listType = objectsTypeIdMap.keys(); + QStringList listId; for (auto type : listType) { - QStringList listObjectId = objectsTypeIdMap.values(type); + QStringList listObjectId = objectsTypeIdMap.value(type); qSort(listObjectId.begin(), listObjectId.end()); listId << listObjectId; } diff --git a/chart_plugin/src/st_space/st_space_data.cpp b/chart_plugin/src/st_space/st_space_data.cpp index e5fff62..5224ed3 100755 --- a/chart_plugin/src/st_space/st_space_data.cpp +++ b/chart_plugin/src/st_space/st_space_data.cpp @@ -68,7 +68,11 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector objectIdNew.append(QPointF(point.tValue, point.sValue)); objectsMap.insert(id, objectIdNew); objectsIdTypeMap.insert(id, type); - objectsTypeIdMap.insert(type, id); + QStringList listId = objectsTypeIdMap.value(type); + if (!listId.contains(id)) { + listId.push_back(id); + objectsTypeIdMap.insert(type, listId); + } continue; } objectsMap[id].append(QPointF(point.tValue, point.sValue)); @@ -100,7 +104,7 @@ const QMap &StSpaceData::GetObjectsIdTypeMap() const return objectsIdTypeMap; } -const QMultiMap &StSpaceData::GetObjectsTypeIdMap() const +const QMap &StSpaceData::GetObjectsTypeIdMap() const { return objectsTypeIdMap; } diff --git a/chart_plugin/src/st_space/st_space_data.h b/chart_plugin/src/st_space/st_space_data.h index ed89b15..fe47eb1 100755 --- a/chart_plugin/src/st_space/st_space_data.h +++ b/chart_plugin/src/st_space/st_space_data.h @@ -99,9 +99,9 @@ public: * 功能:获取障碍物属性数据 * 输入参数:无 * 输出参数:无 - * 返回值:QMultiMap障碍物属性数据,障碍物type和其对应id信息 + * 返回值:QMap障碍物属性数据,障碍物type和其对应id信息 */ - const QMultiMap &GetObjectsTypeIdMap() const; + const QMap &GetObjectsTypeIdMap() const; private: /* @@ -127,7 +127,7 @@ private: QMap objectsMap {}; QMap objectsIdTypeMap {}; - QMultiMap objectsTypeIdMap {}; + QMap objectsTypeIdMap {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 0f99910..30865ec 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -686,10 +686,10 @@ void StSpaceDisplay::SetObjectProperty(int32_t objectType) objectsTypeAlphaProperty.insert(objectType, objectsTypeAlphaPropertyPtr); } -void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsMap) +void StSpaceDisplay::ShowObjects(const QMap &stObjectsMap) { - const QMap objectsIdType = stSpaceData.GetObjectsIdTypeMap(); - const QMultiMap objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); + auto objectsIdType = stSpaceData.GetObjectsIdTypeMap(); + auto objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); bool same = false; if((!stObjectsCurveMap.empty()) && (stObjectsCurveMap.size() == stObjectsMap.size())) { @@ -713,14 +713,16 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &stObjectsM stObjectsCurveMap.clear(); } - QList listType = QSet::fromList(objectsTypeId.keys()).toList(); - qSort(listType.begin(), listType.end()); + QList listType = objectsTypeId.keys(); for (auto objectType : listType) { - QStringList listId = objectsTypeId.values(objectType); + QStringList listId = objectsTypeId.value(objectType); qSort(listId.begin(), listId.end()); for (auto objectId : listId) { SetObjectProperty(objectType); + if (!objectsTypeTitleProperty.contains(objectType) || objectsTypeTitleProperty[objectType] == nullptr) { + continue; + } QString objectName = QString("%1: %2").arg(objectsTypeTitleProperty[objectType]->getString()).arg(objectId); QColor color = GetObjectsTypeColor(objectType); unique_ptr curve = make_unique(objectName); @@ -744,7 +746,7 @@ void StSpaceDisplay::DrawObjects(const QMap &stObjectsMap) return; } - ShowObjectsCurve(stObjectsMap); + ShowObjects(stObjectsMap); UpdateObjectsTypeChoice(); } diff --git a/chart_plugin/src/st_space_display.h b/chart_plugin/src/st_space_display.h index 5b54620..4df61f2 100755 --- a/chart_plugin/src/st_space_display.h +++ b/chart_plugin/src/st_space_display.h @@ -374,7 +374,7 @@ private: * 输出参数:无 * 返回值:无 */ - void ShowObjectsCurve(const QMap &stObjectsMap); + void ShowObjects(const QMap &stObjectsMap); /* * 功能:更新当前第一条曲线的属性选项的控制展示 -- Gitee From dbc9b54c2820e6bf81defd536e4cf72952443ebd Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 16:34:11 +0800 Subject: [PATCH 10/20] =?UTF-8?q?=E8=A7=A3=E5=86=B3curve=E5=9B=BE=E6=9B=B2?= =?UTF-8?q?=E7=BA=BF=E6=97=A0=E6=B3=95=E6=98=BE=E9=9A=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/curve_display.cpp | 40 +++++++++++++++++++++++++++++- chart_plugin/src/curve_display.h | 16 ++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/chart_plugin/src/curve_display.cpp b/chart_plugin/src/curve_display.cpp index 55597ff..81c5fde 100755 --- a/chart_plugin/src/curve_display.cpp +++ b/chart_plugin/src/curve_display.cpp @@ -31,6 +31,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include "common/utils.h" @@ -79,6 +80,10 @@ const double QWTPLOT_AXIS_XBOTTOM_MAX = 0x96; const double QWTPLOT_AXIS_YLEFT_MIN = 0x00; const double QWTPLOT_AXIS_YLEFT_MAX = 0x0A; +const int32_t LEGEND_WIDGETS_SIZE = 0x01; + +const QString LEGEND_STYLE_SHEET = "color: rgb(255, 255, 255)"; + enum CurveType { FIRST_CURVE, SECOND_CURVE, @@ -208,6 +213,23 @@ const QString CurveDisplay::StringElidedText(const QFont &font, const QString &t return strText; } +void CurveDisplay::ShowCurve(QwtPlotItem *item, bool isVisible) +{ + if (item == nullptr) { + return; + } + + item->setVisible(isVisible); + QwtLegend *legend = qobject_cast(ui.qwtPlot->legend()); + QList legendWidgets = legend->legendWidgets(ui.qwtPlot->itemToInfo(item)); + if (legendWidgets.size() == LEGEND_WIDGETS_SIZE) { + QwtLegendLabel *legendLabel = qobject_cast(legendWidgets[0]); + if (legendLabel != nullptr) { + legendLabel->setChecked(isVisible); + } + } +} + void CurveDisplay::UpdateXAxisTitle() { QwtScaleWidget *scaleWidget = ui.qwtPlot->axisWidget(QwtPlot::xBottom); @@ -279,7 +301,12 @@ void CurveDisplay::InitQwtPlotStyle() // 设置图例的位置 QwtLegend *legend = new QwtLegend(); - ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); + if (legend != nullptr) { + legend->setStyleSheet(LEGEND_STYLE_SHEET); + legend->setDefaultItemMode(QwtLegendData::Checkable); + ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); + connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, QLOT(legendChecked(const QVariant &, bool, int))); + } // 绘制网格 grid.setPen(QColor(QWTPLOT_GRID_COLOR_R, QWTPLOT_GRID_COLOR_G, QWTPLOT_GRID_COLOR_B), QWTPLOT_GRID_PEN_WIDTH); @@ -348,10 +375,12 @@ void CurveDisplay::onInitialize() InitCurveStyle(firstCurve, *firstCurveTitleProperty, *firstCurveColorProperty, *firstCurveAlphaProperty); // 添加到控件上 firstCurve.attach(ui.qwtPlot); + showCurve(&firstCurve, true); InitCurveStyle(secondCurve, *secondCurveTitleProperty, *secondCurveColorProperty, *secondCurveAlphaProperty); // 添加到控件上 secondCurve.attach(ui.qwtPlot); + showCurve(&secondCurve, true); setAssociatedWidget(&widget); UpdateCurveChoice(); @@ -404,6 +433,15 @@ void CurveDisplay::reset() curveData.Clear(); } +void CurveDisplay::LegendChecked(const QVariant &itemInfo, bool isVisible, int) +{ + QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); + if (plotItem != nullptr) { + plotItem->setVisible(isVisible); + } + ui.qwtPlot->replot(); +} + void CurveDisplay::updateTopic() { Clear(); diff --git a/chart_plugin/src/curve_display.h b/chart_plugin/src/curve_display.h index 800b132..5035e10 100755 --- a/chart_plugin/src/curve_display.h +++ b/chart_plugin/src/curve_display.h @@ -113,6 +113,14 @@ public Q_SLOTS: */ void UpdateCurveColorAndAlpha(); + /* + * 功能:QWT图例点击槽 + * 输入参数:itemInfo-图例对应的QwtPlotCurve, isVisible-是否可见 + * 输出参数:无 + * 返回值:无 + */ + void LegendChecked(const QVariant &itemInfo, bool isVisible, int); + protected: /* * 功能:插件激活时需要进行的操作,继承自父类 @@ -220,6 +228,14 @@ private: */ const QString StringElidedText(const QFont &font, const QString &text, const int32_t displayAreaWidth); + /* + * 功能:控制当前曲线是否显示 + * 输入参数:item-当时被控制的曲线,isVisible-控制显隐 + * 输出参数:无 + * 返回值:无 + */ + void ShowCurve(QwtPlotItem *item, bool isVisible); + private: UiCurveWidget ui {}; QWidget widget {}; -- Gitee From deeba44e95fd514f845f32486b5f0e74c50bf804 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 16:43:04 +0800 Subject: [PATCH 11/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/curve_display.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/chart_plugin/src/curve_display.cpp b/chart_plugin/src/curve_display.cpp index 81c5fde..a6cfdb3 100755 --- a/chart_plugin/src/curve_display.cpp +++ b/chart_plugin/src/curve_display.cpp @@ -305,7 +305,7 @@ void CurveDisplay::InitQwtPlotStyle() legend->setStyleSheet(LEGEND_STYLE_SHEET); legend->setDefaultItemMode(QwtLegendData::Checkable); ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); - connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, QLOT(legendChecked(const QVariant &, bool, int))); + connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, SLOT(legendChecked(const QVariant &, bool, int))); } // 绘制网格 @@ -375,12 +375,12 @@ void CurveDisplay::onInitialize() InitCurveStyle(firstCurve, *firstCurveTitleProperty, *firstCurveColorProperty, *firstCurveAlphaProperty); // 添加到控件上 firstCurve.attach(ui.qwtPlot); - showCurve(&firstCurve, true); + ShowCurve(&firstCurve, true); InitCurveStyle(secondCurve, *secondCurveTitleProperty, *secondCurveColorProperty, *secondCurveAlphaProperty); // 添加到控件上 secondCurve.attach(ui.qwtPlot); - showCurve(&secondCurve, true); + ShowCurve(&secondCurve, true); setAssociatedWidget(&widget); UpdateCurveChoice(); -- Gitee From 6041d1148c9cc80ec0c108329ce82773e24e861e Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 17:17:38 +0800 Subject: [PATCH 12/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/curve_display.cpp | 17 +++++++---------- chart_plugin/src/curve_display.h | 8 -------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/chart_plugin/src/curve_display.cpp b/chart_plugin/src/curve_display.cpp index a6cfdb3..cb09a25 100755 --- a/chart_plugin/src/curve_display.cpp +++ b/chart_plugin/src/curve_display.cpp @@ -305,7 +305,13 @@ void CurveDisplay::InitQwtPlotStyle() legend->setStyleSheet(LEGEND_STYLE_SHEET); legend->setDefaultItemMode(QwtLegendData::Checkable); ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); - connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, SLOT(legendChecked(const QVariant &, bool, int))); + connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, [=](const QVariant &, bool, int){ + QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); + if (plotItem != nullptr) { + plotItem->setVisible(isVisible); + } + ui.qwtPlot->replot(); + }); } // 绘制网格 @@ -433,15 +439,6 @@ void CurveDisplay::reset() curveData.Clear(); } -void CurveDisplay::LegendChecked(const QVariant &itemInfo, bool isVisible, int) -{ - QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); - if (plotItem != nullptr) { - plotItem->setVisible(isVisible); - } - ui.qwtPlot->replot(); -} - void CurveDisplay::updateTopic() { Clear(); diff --git a/chart_plugin/src/curve_display.h b/chart_plugin/src/curve_display.h index 5035e10..994517c 100755 --- a/chart_plugin/src/curve_display.h +++ b/chart_plugin/src/curve_display.h @@ -113,14 +113,6 @@ public Q_SLOTS: */ void UpdateCurveColorAndAlpha(); - /* - * 功能:QWT图例点击槽 - * 输入参数:itemInfo-图例对应的QwtPlotCurve, isVisible-是否可见 - * 输出参数:无 - * 返回值:无 - */ - void LegendChecked(const QVariant &itemInfo, bool isVisible, int); - protected: /* * 功能:插件激活时需要进行的操作,继承自父类 -- Gitee From 7ff31ab6e3b6c93a077b8cc1bf0ef1a3460a76fe Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 17:24:06 +0800 Subject: [PATCH 13/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/curve_display.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chart_plugin/src/curve_display.cpp b/chart_plugin/src/curve_display.cpp index cb09a25..e15c3d3 100755 --- a/chart_plugin/src/curve_display.cpp +++ b/chart_plugin/src/curve_display.cpp @@ -305,7 +305,7 @@ void CurveDisplay::InitQwtPlotStyle() legend->setStyleSheet(LEGEND_STYLE_SHEET); legend->setDefaultItemMode(QwtLegendData::Checkable); ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); - connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, [=](const QVariant &, bool, int){ + connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, [=](const QVariant &itemInfo, bool isVisible, int){ QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); if (plotItem != nullptr) { plotItem->setVisible(isVisible); -- Gitee From 0cc2469593630b288ace3881136440f4117a3fae Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 17:29:23 +0800 Subject: [PATCH 14/20] =?UTF-8?q?=E8=A7=A3=E5=86=B3ST=E5=9B=BE=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E5=80=BC=E8=BF=87=E5=B0=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/st_space/ui_st_widget.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/chart_plugin/src/st_space/ui_st_widget.cpp b/chart_plugin/src/st_space/ui_st_widget.cpp index e9381be..0cd8bdb 100755 --- a/chart_plugin/src/st_space/ui_st_widget.cpp +++ b/chart_plugin/src/st_space/ui_st_widget.cpp @@ -35,10 +35,10 @@ const QString QWT_PLOT_NAME = QString::fromUtf8("qwtPlot"); const int32_t WIDGET_WIDTH = 572; const int32_t WIDGET_HEIGHT = 327; const int32_t WIDGET_MIN_WIDTH = 320; -const int32_t WIDGET_MIN_HEIGHT = 180; +const int32_t WIDGET_MIN_HEIGHT = 260; const int32_t QWTPLOT_MIN_WIDTH = 240; -const int32_t QWTPLOT_MIN_HEIGHT = 120; +const int32_t QWTPLOT_MIN_HEIGHT = 230; const int32_t QWTPLOT_LINEWIDTH = 1; const int32_t QSPACER_ITEM_WIDTH = 40; @@ -357,19 +357,11 @@ void UiStWidget::SetupUi(QWidget &widget) InitPalette(palette); widget.setPalette(palette); widget.setAutoFillBackground(true); - verticalLayout = new (std::nothrow) QVBoxLayout(&widget); - if (verticalLayout == nullptr) { - ROS_ERROR("Failed to Create the verticalLayout of QVBoxLayout."); - return; - } - + + verticalLayout = new QVBoxLayout(&widget); verticalLayout->setObjectName(VERTICALL_LAYOUT_NAME); - qwtPlot = new (std::nothrow) QwtPlot(&widget); - if (qwtPlot == nullptr) { - ROS_ERROR("Failed to Create the qwtPlot of QwtPlot."); - return; - } - + + qwtPlot = new QwtPlot(&widget); qwtPlot->setObjectName(QWT_PLOT_NAME); qwtPlot->setMinimumSize(QSize(QWTPLOT_MIN_WIDTH, QWTPLOT_MIN_HEIGHT)); qwtPlot->setFrameShape(QFrame::NoFrame); -- Gitee From 7c8cbbedd675ad2115735143523768602c768f2a Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 17:36:42 +0800 Subject: [PATCH 15/20] =?UTF-8?q?=E8=A7=A3=E5=86=B3st=E5=9B=BEtopic?= =?UTF-8?q?=E4=B8=8E=E5=88=AB=E7=9A=84mviz=E6=8F=92=E4=BB=B6=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E9=A3=8E=E6=A0=BC=E4=B8=8D=E7=BB=9F=E4=B8=80=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/common/chart_display_base.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/chart_plugin/src/common/chart_display_base.h b/chart_plugin/src/common/chart_display_base.h index 580939e..8a971f7 100755 --- a/chart_plugin/src/common/chart_display_base.h +++ b/chart_plugin/src/common/chart_display_base.h @@ -113,6 +113,7 @@ protected: const uint32_t queueSize = 10; sub.subscribe(update_nh_, topic_property_->getTopicStd(), queueSize, transportHint); setStatus(rviz::StatusProperty::Ok, "Topic", "OK"); + setStatus(rviz::StatusProperty::Warn, "Data receiving failure", "No Display data was received in the last 1 second."); } catch (ros::Exception &e) { setStatus(rviz::StatusProperty::Error, "Topic", QString("Error subscribing: ") + e.what()); } @@ -142,6 +143,7 @@ protected: ++messagesReceived; setStatus(rviz::StatusProperty::Ok, "Topic", QString::number(messagesReceived) + " messages received"); + deleteStatus("Data receiving failure"); ProcessMessage(msg); } -- Gitee From f693225ec18fb79490750ffaf2d7eca782f89378 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 8 Apr 2022 17:46:34 +0800 Subject: [PATCH 16/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/curve_display.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chart_plugin/src/curve_display.cpp b/chart_plugin/src/curve_display.cpp index e15c3d3..e9b0fb7 100755 --- a/chart_plugin/src/curve_display.cpp +++ b/chart_plugin/src/curve_display.cpp @@ -305,8 +305,8 @@ void CurveDisplay::InitQwtPlotStyle() legend->setStyleSheet(LEGEND_STYLE_SHEET); legend->setDefaultItemMode(QwtLegendData::Checkable); ui.qwtPlot->insertLegend(legend, QwtPlot::BottomLegend); - connect(legend, SIGNAL(checked(const QVariant &, bool, int)), this, [=](const QVariant &itemInfo, bool isVisible, int){ - QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); + connect(legend, &QwtLegend::checked, this, [=](const QVariant &itemInfo, bool isVisible, int){ + QwtPlotItem *plotItem = ui.qwtPlot->infoToItem(itemInfo); if (plotItem != nullptr) { plotItem->setVisible(isVisible); } -- Gitee From a57736ca1499271978c204bb77735c838f42fa06 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Thu, 14 Apr 2022 17:26:58 +0800 Subject: [PATCH 17/20] =?UTF-8?q?topic=E4=B8=8D=E5=8F=98=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=9A=9C=E7=A2=8D=E7=89=A9=E6=98=BE=E9=9A=90=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 56 ++++++++++++++++++ chart_plugin/src/slt_space/slt_space_data.h | 36 ++++++++++++ chart_plugin/src/slt_space/slt_space_draw.cpp | 6 +- chart_plugin/src/slt_space_display.cpp | 19 ++++++- chart_plugin/src/slt_space_display.h | 2 +- chart_plugin/src/st_space/st_space_data.cpp | 57 +++++++++++++++++++ chart_plugin/src/st_space/st_space_data.h | 36 ++++++++++++ chart_plugin/src/st_space_display.cpp | 37 ++++-------- chart_plugin/src/st_space_display.h | 8 --- 9 files changed, 217 insertions(+), 40 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index b34479e..2f4dd6f 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -68,9 +68,16 @@ void SltSpaceData::SetObjectsFaceData(const vector &pointVecto return; } + QStringList listId; for (const auto &point : pointVector) { int32_t type = point.type; QString id = QString::fromStdString(point.id); + listId.push_back(id); + if (!QueueHaveId(id)) { + LimitQueueNumber(listId); + objectsIdVisibleQueue.enqueue(QPair(id, true)); + } + if (!objectsMap.contains(id)) { objectsMap.insert(id, CreateObjectIdData(point)); objectsIdTypeMap.insert(id, type); @@ -110,8 +117,32 @@ const QMap &SltSpaceData::GetObjectsTypeIdMap() const return objectsTypeIdMap; } +void SltSpaceData::SetObjectVisible(const QString &id, bool isVisible) +{ + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (iter->first == id) { + iter->second = isVisible; + return; + } + } + + objectsIdVisibleQueue.enqueue(QPair(id, isVisible)); +} + +bool SltSpaceData::GetObjectVisible() const +{ + for (auto pair : objectsIdVisibleQueue) { + if (pair.first == id) { + return pair.second; + } + } + return true; +} + void SltSpaceData::Clear() { + objectsIdVisibleQueue.clear(); + optimizedSltTrack.clear(); sltSpeedLimit.clear(); objectsMap.clear(); @@ -135,4 +166,29 @@ bool SltSpaceData::Add(const custom::SltSpace::ConstPtr &msg) } return false; } + +bool SltSpaceData::QueueHaveId(const QString &id) +{ + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (iter->first == id) { + return true; + } + } + return false; +} + +void SltSpaceData::LimitQueueNumber(const QStringList &listId) +{ + int32_t queueMaxNumber = 1000; + if (objectsIdVisibleQueue.count() < queueMaxNumber) { + return; + } + + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (!listId.contains(iter->first)) { + objectsIdVisibleQueue.erase(iter); + return; + } + } +} } // namespace chart_plugin diff --git a/chart_plugin/src/slt_space/slt_space_data.h b/chart_plugin/src/slt_space/slt_space_data.h index 066da38..214bcaa 100755 --- a/chart_plugin/src/slt_space/slt_space_data.h +++ b/chart_plugin/src/slt_space/slt_space_data.h @@ -28,6 +28,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SLT_SPACE_DATA_H #include +#include +#include #include #include "custom/SltSpace.h" @@ -95,6 +97,22 @@ public: */ const QMap &GetObjectsTypeIdMap() const; + /* + * 功能:设置障碍物是否显示 + * 输入参数:id-障碍物id属性,isVisible-障碍物显隐 + * 输出参数:无 + * 返回值:无 + */ + void SetObjectVisible(const QString &id, bool isVisible); + + /* + * 功能:获取障碍物是否显示 + * 输入参数:id-障碍物id属性 + * 输出参数:无 + * 返回值:障碍物是否显示 + */ + bool GetObjectVisible(const QString &id) const; + private: /* * 功能:设置曲线 mglPoint 数据信息 @@ -120,6 +138,22 @@ private: */ std::vector CreateObjectIdData(const custom::SltPoint &point); + /* + * 功能:查询objectsIdVisibleQueue队列是否有id数据 + * 输入参数:id-障碍物id属性 + * 输出参数:无 + * 返回值:无 + */ + bool QueueHaveId(const QString &id); + + /* + * 功能:设置objectsIdVisibleQueue队列上限 + * 输入参数:listId-障碍物链表 + * 输出参数:无 + * 返回值:无 + */ + void LimitQueueNumber(const QStringList &listId); + private: std::vector optimizedSltTrack {}; std::vector sltSpeedLimit {}; @@ -127,6 +161,8 @@ private: QMap> objectsMap {}; QMap objectsIdTypeMap {}; QMap objectsTypeIdMap {}; + + QQueue> objectsIdVisibleQueue {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 066780b..99839d4 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -120,9 +120,7 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const continue; } spaceDisplayPtr->SetObjectProperty(objectType); - auto objectIdLegendIter = (spaceDisplayPtr->GetObjectsIdLegendMap()).find(objectId); - if (objectIdLegendIter != (spaceDisplayPtr->GetObjectsIdLegendMap()).end() && - !((*objectIdLegendIter).second)->isChecked()) { + if (!spaceDataPtr->GetObjectVisible(objectId)) { continue; } @@ -147,6 +145,8 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const spaceDisplayPtr->SetIsTopicMessageComing(false); spaceDisplayPtr->CreateObjectsLegend(objectsIdType); spaceDisplayPtr->UpdateLegend(); + } else { + spaceDisplayPtr->UpdateLegend(); } } diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index 197dad0..4a4362b 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -70,6 +70,8 @@ bool SltSpaceDisplay::eventFilter(QObject *obj, QEvent *e) void SltSpaceDisplay::ClearData() { + optimizedCurveLegend->setChecked(true); + speedLimitCurveLegend->setChecked(true); sltSpaceData.Clear(); } @@ -322,6 +324,10 @@ const QIcon SltSpaceDisplay::GenerateLegendIcon(const QColor &color, LegendType void SltSpaceDisplay::CreateObjectsLegend(const QMap &objectsIdType) { + if (!objectsIdLegendMap.empty()) { + objectsIdLegendMap.clear(); + } + for (auto iter = objectsIdType.begin(); iter != objectsIdType.end(); iter++) { QString objectId = iter.key(); int32_t objectType = iter.value(); @@ -342,7 +348,7 @@ void SltSpaceDisplay::CreateObjectsLegend(const QMap &objectsI QString("%1: %2").arg(objectsTypeTitlePropertyMap[objectType]->getString()).arg(objectId)); QObject::connect(buttonLegend.get(), SIGNAL(toggled(bool)), this, SLOT(UpdateMathglDraw())); objectsIdLegendMap.insert(std::make_pair(objectId, std::move(buttonLegend))); - objectsIdLegendMap[objectId]->setChecked(true); + objectsIdLegendMap[objectId]->setChecked(sltSpaceData.GetObjectVisible(objectId)); } } @@ -554,8 +560,17 @@ void SltSpaceDisplay::onInitialize() QObject::connect(ui.GetRestoreButton(), SIGNAL(pressed()), this, SLOT(UpdateMathglZoomAndRotation())); } -void SltSpaceDisplay::UpdateMathglDraw() const +void SltSpaceDisplay::UpdateMathglDraw() { + QPushButton *button = qobject_cast(sender()); + if (button != nullptr) { + for (auto iter = objectsIdLegendMap.begin(); iter != objectsIdLegendMap.end(); iter++) { + if (iter->second.get() == button) { + sltSpaceData.SetObjectVisible(iter->first, button->isChecked()); + } + } + } + UpdateDrawQMathGl(); } diff --git a/chart_plugin/src/slt_space_display.h b/chart_plugin/src/slt_space_display.h index 4e052b0..1419982 100755 --- a/chart_plugin/src/slt_space_display.h +++ b/chart_plugin/src/slt_space_display.h @@ -213,7 +213,7 @@ public Q_SLOTS: * 输出参数:无 * 返回值:无 */ - void UpdateMathglDraw() const; + void UpdateMathglDraw(); /* * 功能:恢复mathgl画布为默认视角 diff --git a/chart_plugin/src/st_space/st_space_data.cpp b/chart_plugin/src/st_space/st_space_data.cpp index 5224ed3..b5068e3 100755 --- a/chart_plugin/src/st_space/st_space_data.cpp +++ b/chart_plugin/src/st_space/st_space_data.cpp @@ -60,9 +60,17 @@ void StSpaceData::SetObjectsCurveData(const vector &pointVector return; } + QStringList listId; for (const auto &point : pointVector) { int32_t type = point.type; QString id = QString::fromStdString(point.id); + + listId.push_back(id); + if (!QueueHaveId(id)) { + LimitQueueNumber(listId); + objectsIdVisibleQueue.enqueue(QPair(id, true)); + } + if (!objectsMap.contains(id)) { QPolygonF objectIdNew; objectIdNew.append(QPointF(point.tValue, point.sValue)); @@ -109,8 +117,32 @@ const QMap &StSpaceData::GetObjectsTypeIdMap() const return objectsTypeIdMap; } +void SltSpaceData::SetObjectVisible(const QString &id, bool isVisible) +{ + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (iter->first == id) { + iter->second = isVisible; + return; + } + } + + objectsIdVisibleQueue.enqueue(QPair(id, isVisible)); +} + +bool SltSpaceData::GetObjectVisible() const +{ + for (auto pair : objectsIdVisibleQueue) { + if (pair.first == id) { + return pair.second; + } + } + return true; +} + void StSpaceData::Clear() { + objectsIdVisibleQueue.clear(); + firstStTrack.clear(); optimizedStTrack.clear(); stSpeedLimit.clear(); @@ -137,4 +169,29 @@ bool StSpaceData::Add(const custom::StSpace::ConstPtr &msg) } return false; } + +bool SltSpaceData::QueueHaveId(const QString &id) +{ + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (iter->first == id) { + return true; + } + } + return false; +} + +void SltSpaceData::LimitQueueNumber(const QStringList &listId) +{ + int32_t queueMaxNumber = 1000; + if (objectsIdVisibleQueue.count() < queueMaxNumber) { + return; + } + + for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { + if (!listId.contains(iter->first)) { + objectsIdVisibleQueue.erase(iter); + return; + } + } +} } // namespace chart_plugin diff --git a/chart_plugin/src/st_space/st_space_data.h b/chart_plugin/src/st_space/st_space_data.h index fe47eb1..a028f9f 100755 --- a/chart_plugin/src/st_space/st_space_data.h +++ b/chart_plugin/src/st_space/st_space_data.h @@ -29,6 +29,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include +#include #include "custom/StSpace.h" @@ -103,6 +105,22 @@ public: */ const QMap &GetObjectsTypeIdMap() const; + /* + * 功能:设置障碍物是否显示 + * 输入参数:id-障碍物id属性,isVisible-障碍物显隐 + * 输出参数:无 + * 返回值:无 + */ + void SetObjectVisible(const QString &id, bool isVisible); + + /* + * 功能:获取障碍物是否显示 + * 输入参数:id-障碍物id属性 + * 输出参数:无 + * 返回值:障碍物是否显示 + */ + bool GetObjectVisible(const QString &id) const; + private: /* * 功能:设置曲线QPolygonF数据信息 @@ -119,6 +137,22 @@ private: * 返回值:无 */ void SetObjectsCurveData(const std::vector &pointVector); + + /* + * 功能:查询objectsIdVisibleQueue队列是否有id数据 + * 输入参数:id-障碍物id属性 + * 输出参数:无 + * 返回值:无 + */ + bool QueueHaveId(const QString &id); + + /* + * 功能:设置objectsIdVisibleQueue队列上限 + * 输入参数:listId-障碍物链表 + * 输出参数:无 + * 返回值:无 + */ + void LimitQueueNumber(const QStringList &listId); private: QPolygonF firstStTrack {}; @@ -128,6 +162,8 @@ private: QMap objectsMap {}; QMap objectsIdTypeMap {}; QMap objectsTypeIdMap {}; + + QQueue> objectsIdVisibleQueue {}; }; } // namespace chart_plugin diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 30865ec..281c426 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -327,6 +327,11 @@ void StSpaceDisplay::LegendChecked(const QVariant &itemInfo, bool isVisible) if (plotItem != nullptr) { plotItem->setVisible(isVisible); + for (auto iter = stObjectsCurveMap.begin(); iter != stObjectsCurveMap.end(); iter++) { + if (plotItem == iter->second.get()) { + stSpaceData.setObjectVisible(iter->first, isVisible); + } + } } ui.qwtPlot->replot(); @@ -688,27 +693,8 @@ void StSpaceDisplay::SetObjectProperty(int32_t objectType) void StSpaceDisplay::ShowObjects(const QMap &stObjectsMap) { - auto objectsIdType = stSpaceData.GetObjectsIdTypeMap(); auto objectsTypeId = stSpaceData.GetObjectsTypeIdMap(); - bool same = false; - if((!stObjectsCurveMap.empty()) && (stObjectsCurveMap.size() == stObjectsMap.size())) { - same = true; - for (auto &stObjectsCurve : stObjectsCurveMap) { - if (!objectsIdType.contains(stObjectsCurve.first)) { - same = false; - break; - } - } - } - - if (same) { - for (auto &stObjectsCurve : stObjectsCurveMap) { - stObjectsCurve.second->setSamples(stObjectsMap.value(stObjectsCurve.first)); - } - return; - } - if (!stObjectsCurveMap.empty()) { stObjectsCurveMap.clear(); } @@ -734,7 +720,7 @@ void StSpaceDisplay::ShowObjects(const QMap &stObjectsMap) curve->setLegendAttribute(curve->LegendShowBrush); curve->attach(ui.qwtPlot); curve->setSamples(stObjectsMap.value(objectId)); - ShowCurve(curve.get(), true); + ShowCurve(curve.get(), stSpaceData.GetObjectVisible(objectId)); stObjectsCurveMap.insert(std::make_pair(objectId, std::move(curve))); } } @@ -781,6 +767,10 @@ void StSpaceDisplay::ProcessMessage(const custom::StSpace::ConstPtr &message) void StSpaceDisplay::ClearData() { + ShowCurve(&firstStTrackCurve, true); + ShowCurve(&optimizedStTrackCurve, true); + ShowCurve(&stSpeedLimitCurve, true); + stSpaceData.Clear(); } @@ -798,14 +788,9 @@ void StSpaceDisplay::ReplotEmptyData() ui.qwtPlot->replot(); } -void StSpaceDisplay::reset() -{ - ChartDisplayClass::reset(); - ClearData(); -} - void StSpaceDisplay::updateTopic() { + ClearData(); ReplotEmptyData(); sub.unsubscribe(); stObjectsCurveMap.clear(); diff --git a/chart_plugin/src/st_space_display.h b/chart_plugin/src/st_space_display.h index 4df61f2..a53510b 100755 --- a/chart_plugin/src/st_space_display.h +++ b/chart_plugin/src/st_space_display.h @@ -60,14 +60,6 @@ public: */ void onInitialize() override; - /* - * 功能:通知rviz Display清除其状态,同时这里也清除自己的topic数据,继承自父类并重写 - * 输入参数:无 - * 输出参数:无 - * 返回值:无 - */ - void reset() override; - /* * 功能:加载配置文件,继承自父类并重写 * 输入参数:Config -- Gitee From 24269abfb2dff03d3a1b4a0565cfcb24444dea22 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Thu, 14 Apr 2022 17:38:26 +0800 Subject: [PATCH 18/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_data.cpp | 2 +- chart_plugin/src/st_space/st_space_data.cpp | 8 ++++---- chart_plugin/src/st_space_display.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_data.cpp b/chart_plugin/src/slt_space/slt_space_data.cpp index 2f4dd6f..e7e49e8 100755 --- a/chart_plugin/src/slt_space/slt_space_data.cpp +++ b/chart_plugin/src/slt_space/slt_space_data.cpp @@ -129,7 +129,7 @@ void SltSpaceData::SetObjectVisible(const QString &id, bool isVisible) objectsIdVisibleQueue.enqueue(QPair(id, isVisible)); } -bool SltSpaceData::GetObjectVisible() const +bool SltSpaceData::GetObjectVisible(const QString &id) const { for (auto pair : objectsIdVisibleQueue) { if (pair.first == id) { diff --git a/chart_plugin/src/st_space/st_space_data.cpp b/chart_plugin/src/st_space/st_space_data.cpp index b5068e3..42c7ba3 100755 --- a/chart_plugin/src/st_space/st_space_data.cpp +++ b/chart_plugin/src/st_space/st_space_data.cpp @@ -117,7 +117,7 @@ const QMap &StSpaceData::GetObjectsTypeIdMap() const return objectsTypeIdMap; } -void SltSpaceData::SetObjectVisible(const QString &id, bool isVisible) +void StSpaceData::SetObjectVisible(const QString &id, bool isVisible) { for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { if (iter->first == id) { @@ -129,7 +129,7 @@ void SltSpaceData::SetObjectVisible(const QString &id, bool isVisible) objectsIdVisibleQueue.enqueue(QPair(id, isVisible)); } -bool SltSpaceData::GetObjectVisible() const +bool StSpaceData::GetObjectVisible(const QString &id) const { for (auto pair : objectsIdVisibleQueue) { if (pair.first == id) { @@ -170,7 +170,7 @@ bool StSpaceData::Add(const custom::StSpace::ConstPtr &msg) return false; } -bool SltSpaceData::QueueHaveId(const QString &id) +bool StSpaceData::QueueHaveId(const QString &id) { for (auto iter = objectsIdVisibleQueue.begin(); iter != objectsIdVisibleQueue.end(); iter++) { if (iter->first == id) { @@ -180,7 +180,7 @@ bool SltSpaceData::QueueHaveId(const QString &id) return false; } -void SltSpaceData::LimitQueueNumber(const QStringList &listId) +void StSpaceData::LimitQueueNumber(const QStringList &listId) { int32_t queueMaxNumber = 1000; if (objectsIdVisibleQueue.count() < queueMaxNumber) { diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index 281c426..72d1561 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -329,7 +329,7 @@ void StSpaceDisplay::LegendChecked(const QVariant &itemInfo, bool isVisible) plotItem->setVisible(isVisible); for (auto iter = stObjectsCurveMap.begin(); iter != stObjectsCurveMap.end(); iter++) { if (plotItem == iter->second.get()) { - stSpaceData.setObjectVisible(iter->first, isVisible); + stSpaceData.SetObjectVisible(iter->first, isVisible); } } } -- Gitee From f60f84981724c6b284454c8b7fdadbd4839713b7 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 15 Apr 2022 17:21:55 +0800 Subject: [PATCH 19/20] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=9B=B8=E5=90=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=97=AA=E7=83=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_draw.cpp | 3 +++ chart_plugin/src/slt_space_display.cpp | 13 +++++++++++++ chart_plugin/src/slt_space_display.h | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 99839d4..98df0ce 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -143,6 +143,9 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const if (spaceDisplayPtr->GetIsTopicMessageComing()) { spaceDisplayPtr->SetIsTopicMessageComing(false); + if (spaceDisplayPtr->Same(objectsIdType)) { + return; + } spaceDisplayPtr->CreateObjectsLegend(objectsIdType); spaceDisplayPtr->UpdateLegend(); } else { diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index 4a4362b..b4b1b5a 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -528,6 +528,19 @@ void SltSpaceDisplay::UpdateDrawQMathGl() const ui.GetQMathGl()->refresh(); } +bool SltSpaceDisplay::Same(const QMap &objectsIdType) const +{ + if (objectsIdType.size() == objectsIdLegendMap.size()) { + for (auto iter = objectsIdLegendMap.begin(); iter != objectsIdLegendMap.end(); iter++) { + if (!objectsIdType.contains(iter->first)) { + return false; + } + } + return true; + } + return false; +} + void SltSpaceDisplay::onInitialize() { InitProperty(); diff --git a/chart_plugin/src/slt_space_display.h b/chart_plugin/src/slt_space_display.h index 1419982..80f44ac 100755 --- a/chart_plugin/src/slt_space_display.h +++ b/chart_plugin/src/slt_space_display.h @@ -198,6 +198,14 @@ public: */ void UpdateDrawQMathGl() const; + /* + * 功能:是否和原来障碍物一样 + * 输入参数:无 + * 输出参数:无 + * 返回值:bool + */ + bool Same(const QMap &objectsIdType) const; + public Q_SLOTS: /* * 功能:更新曲线属性控制选项为用户所选择的曲线 -- Gitee From e0557b87bcdd3ab7cfd0f9a57a154191e889a9c8 Mon Sep 17 00:00:00 2001 From: wangjie <1020785391@qq.com> Date: Fri, 15 Apr 2022 17:43:48 +0800 Subject: [PATCH 20/20] =?UTF-8?q?=E4=BF=AE=E6=94=B9issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chart_plugin/src/slt_space/slt_space_draw.cpp | 2 +- chart_plugin/src/slt_space_display.cpp | 2 +- chart_plugin/src/slt_space_display.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index 98df0ce..5430f0f 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -143,7 +143,7 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const if (spaceDisplayPtr->GetIsTopicMessageComing()) { spaceDisplayPtr->SetIsTopicMessageComing(false); - if (spaceDisplayPtr->Same(objectsIdType)) { + if (spaceDisplayPtr->IsObjectsSizeAndIdSame(objectsIdType)) { return; } spaceDisplayPtr->CreateObjectsLegend(objectsIdType); diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index b4b1b5a..28e6638 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -528,7 +528,7 @@ void SltSpaceDisplay::UpdateDrawQMathGl() const ui.GetQMathGl()->refresh(); } -bool SltSpaceDisplay::Same(const QMap &objectsIdType) const +bool SltSpaceDisplay::IsObjectsSizeAndIdSame(const QMap &objectsIdType) const { if (objectsIdType.size() == objectsIdLegendMap.size()) { for (auto iter = objectsIdLegendMap.begin(); iter != objectsIdLegendMap.end(); iter++) { diff --git a/chart_plugin/src/slt_space_display.h b/chart_plugin/src/slt_space_display.h index 80f44ac..ff6d328 100755 --- a/chart_plugin/src/slt_space_display.h +++ b/chart_plugin/src/slt_space_display.h @@ -204,7 +204,7 @@ public: * 输出参数:无 * 返回值:bool */ - bool Same(const QMap &objectsIdType) const; + bool IsObjectsSizeAndIdSame(const QMap &objectsIdType) const; public Q_SLOTS: /* -- Gitee