diff --git a/chart_plugin/src/slt_space/slt_space_draw.cpp b/chart_plugin/src/slt_space/slt_space_draw.cpp index bdda5b990d779c7a19e2a76d383c6c21b568edb2..83efdc82d18c777dee038df015a8a8590102aba1 100755 --- a/chart_plugin/src/slt_space/slt_space_draw.cpp +++ b/chart_plugin/src/slt_space/slt_space_draw.cpp @@ -122,7 +122,11 @@ void SltSpaceDraw::DrawObjects(mglGraph *mglGraphPtr) const continue; } - QColor color = (spaceDisplayPtr->GetObjectsTypeColorPropertyMap())[type]->getColor(); + 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], objectData[OBJECT_DATA_NUM2], colorFaceFormat.toStdString().c_str()); diff --git a/chart_plugin/src/slt_space_display.cpp b/chart_plugin/src/slt_space_display.cpp index a695a7cc2bc386f8054dc0cf1bfa56a320811a64..6b3b2c96e7164691239049a16de4ba3eb281ddd0 100755 --- a/chart_plugin/src/slt_space_display.cpp +++ b/chart_plugin/src/slt_space_display.cpp @@ -387,6 +387,9 @@ void SltSpaceDisplay::CreateObjectsLegend(const QMap &objectsI continue; } + if (!objectsTypeTitlePropertyMap.contains(objectType) || objectsTypeTitlePropertyMap[objectType] == nullptr) { + continue; + } auto buttonLegend = make_unique(); buttonLegend->setObjectName(QString("Type %1: %2").arg(objectType).arg(objectId)); buttonLegend->setIcon(GenerateLegendIcon(GetObjectsTypeColor(objectType), LegendType::OBJECT)); @@ -424,6 +427,11 @@ void SltSpaceDisplay::CalculateGridColumnAndRow(int32_t &column, int32_t &row) row = verticalSpacerNum + 1; for (auto iter = objectsIdTypeMap.cbegin(); iter != objectsIdTypeMap.cend(); ++iter) { + auto objectIdLegendIter = objectsIdLegendMap.find(iter.key()); + if ((objectIdLegendIter == objectsIdLegendMap.end()) || objectIdLegendIter->second == nullptr) { + continue; + } + width += metrics.width(objectsIdLegendMap[iter.key()]->text()) + CURVE_LEGEND_MIN_HEIGHT_WIDTH; if (width >= widgetWidth) { break; @@ -495,6 +503,11 @@ void SltSpaceDisplay::UpdateGridLayoutItem() speedLimitCurveLegend->show(); // 只有当整个障碍物图例按钮都还没有遍历安置完毕,网格布局器才安置图例按钮 } else if (iter != objectsIdTypeMap.cend()) { + auto objectIdLegendIter = objectsIdLegendMap.find(iter.key()); + if ((objectIdLegendIter == objectsIdLegendMap.end()) || (objectIdLegendIter->second == nullptr)) { + iter++; + continue; + } ui.GetGridLayout()->addWidget(objectsIdLegendMap[iter.key()].get(), i, j, 1, 1); objectsIdLegendMap[iter.key()]->show(); iter++; @@ -648,6 +661,14 @@ void SltSpaceDisplay::UpdateObjectsTypeChoice() int32_t type = objectsTypeProperty->getOptionInt(); for (auto iter : objectsTypeTotalVector) { + if (!objectsTypeTitlePropertyMap.contains(iter) || (objectsTypeTitlePropertyMap[iter] == nullptr)) { + continue; + } + + if (!objectsTypeColorPropertyMap.contains(iter) || (objectsTypeColorPropertyMap[iter] == nullptr)) { + continue; + } + objectsTypeTitlePropertyMap[iter]->setHidden(!(iter == type)); objectsTypeColorPropertyMap[iter]->setHidden(!(iter == type)); } @@ -671,6 +692,10 @@ QColor SltSpaceDisplay::GetObjectsTypeColor(int32_t type) void SltSpaceDisplay::UpdateObjectsTypeColor() { int32_t type = objectsTypeProperty->getOptionInt(); + if (!objectsTypeColorPropertyMap.contains(type) || (objectsTypeColorPropertyMap[type] == nullptr)) { + return; + } + QColor objectColor = (objectsTypeColorPropertyMap[type])->getColor(); const auto objectsIdTypeMap = sltSpaceData.GetObjectsIdTypeMap(); @@ -688,11 +713,11 @@ void SltSpaceDisplay::UpdateObjectsTypeColor() void SltSpaceDisplay::UpdateObjectsTypeTitle() { int32_t type = objectsTypeProperty->getOptionInt(); - const auto objectsIdTypeMap = sltSpaceData.GetObjectsIdTypeMap(); for (auto iter = objectsIdTypeMap.begin(); iter != objectsIdTypeMap.end(); iter++) { auto objectIdLegendIter = objectsIdLegendMap.find(iter.key()); - if ((objectIdLegendIter != objectsIdLegendMap.end()) && (iter.value() == type)) { + if ((objectIdLegendIter != objectsIdLegendMap.end()) && (iter.value() == type) && + (objectsTypeTitlePropertyMap.contains(type) && objectsTypeTitlePropertyMap[type] != nullptr)) { ((*objectIdLegendIter).second) ->setText(QString("%1: %2").arg(objectsTypeTitlePropertyMap[type]->getString()).arg(iter.key())); } diff --git a/chart_plugin/src/st_space_display.cpp b/chart_plugin/src/st_space_display.cpp index a7fbdd7372cf9bccc42cd03693c63fe2d6d939f8..d7589f65acebb4fca94225f30125b289c23cf1db 100755 --- a/chart_plugin/src/st_space_display.cpp +++ b/chart_plugin/src/st_space_display.cpp @@ -294,7 +294,8 @@ void StSpaceDisplay::UpdateObjectCurveTitle() const QMap objectsIdTypeMap = stSpaceData.GetObjectsIdTypeMap(); for (auto iter = objectsIdTypeMap.begin(); iter != objectsIdTypeMap.end(); iter++) { auto objectIdLegendIter = stObjectsCurveMap.find(iter.key()); - if ((objectIdLegendIter != stObjectsCurveMap.end()) && (iter.value() == type)) { + if ((objectIdLegendIter != stObjectsCurveMap.end()) && (iter.value() == type) && + objectsTypeTitleProperty.contains(type) && objectsTypeTitleProperty[type] != nullptr) { ((*objectIdLegendIter).second) ->setTitle(QString("%1: %2").arg(objectsTypeTitleProperty[type]->getString()).arg(iter.key())); } @@ -450,8 +451,8 @@ void StSpaceDisplay::InitQwtPlotStyle() ui.qwtPlot->setAxisAutoScale(QwtPlot::yLeft, true); } -void StSpaceDisplay::InitCurveStyle(QwtPlotCurve &curve, StringProperty &title, - const ColorProperty &color, const IntProperty &alpha) +void StSpaceDisplay::InitCurveStyle(QwtPlotCurve &curve, StringProperty &title, const ColorProperty &color, + const IntProperty &alpha) { // 图例名字 curve.setTitle(title.getString()); @@ -640,6 +641,11 @@ void StSpaceDisplay::UpdateObjectsTypeChoice() int32_t type = objectsTypeProperty->getOptionInt(); for (auto iter : objectsTypeTotalVector) { + if (!objectsTypeTitleProperty.contains(iter) || objectsTypeTitleProperty[iter] == nullptr || + !objectsTypeColorProperty.contains(iter) || objectsTypeColorProperty[iter] == nullptr || + !objectsTypeAlphaProperty.contains(iter) || objectsTypeAlphaProperty[iter] == nullptr) { + continue; + } objectsTypeTitleProperty[iter]->setHidden(!(iter == type)); objectsTypeColorProperty[iter]->setHidden(!(iter == type)); objectsTypeAlphaProperty[iter]->setHidden(!(iter == type)); @@ -650,6 +656,11 @@ void StSpaceDisplay::UpdateObjectsTypeColorAndAlpha() { int32_t type = objectsTypeProperty->getOptionInt(); + if (!objectsTypeColorProperty.contains(type) || objectsTypeColorProperty[type] == nullptr || + !objectsTypeAlphaProperty.contains(type) || objectsTypeAlphaProperty[type] == nullptr) { + return; + } + QColor objectColor = (objectsTypeColorProperty[type])->getColor(); int32_t alpha = (objectsTypeAlphaProperty[type])->getInt(); objectColor.setAlpha(alpha); @@ -660,7 +671,12 @@ void StSpaceDisplay::UpdateObjectsTypeColorAndAlpha() for (auto iter = idTypeMap.begin(); iter != idTypeMap.end(); iter++) { int32_t typeTmp = iter.value(); QString objectId = iter.key(); + if (typeTmp == type) { + auto objectsCurveMap = stObjectsCurveMap.find(objectId); + if (objectsCurveMap == stObjectsCurveMap.end() || stObjectsCurveMap[objectId] == nullptr) { + continue; + } stObjectsCurveMap[objectId]->setPen(objectColor, OBJECT_CURVE_PEN_WIDTH); stObjectsCurveMap[objectId]->setBrush(objectColor); } @@ -787,6 +803,9 @@ void StSpaceDisplay::ShowObjectsCurve(const QMap &objectsIdTyp QString objectId = iter.key(); int32_t type = objectsIdType.value(objectId); 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);