//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RimPlotCurve::canCurveBeAttached() const { if (!m_parentQwtPlot) { return false; } if (!m_showCurve()) { return false; } bool isVisibleInPossibleParent = true; { RimSummaryCurveCollection* summaryCurveCollection = nullptr; this->firstAncestorOrThisOfType(summaryCurveCollection); if (summaryCurveCollection) isVisibleInPossibleParent = summaryCurveCollection->isCurvesVisible(); RimEnsembleCurveSet* ensembleCurveSet = nullptr; firstAncestorOrThisOfType(ensembleCurveSet); if (ensembleCurveSet) isVisibleInPossibleParent = ensembleCurveSet->isCurvesVisible(); } return isVisibleInPossibleParent; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimPlotCurve::updateCurveVisibility(bool updateParentPlot) { bool isVisibleInPossibleParent = true; { RimSummaryCurveCollection* summaryCurveCollection = nullptr; this->firstAncestorOrThisOfType(summaryCurveCollection); if (summaryCurveCollection) isVisibleInPossibleParent = summaryCurveCollection->isCurvesVisible(); RimEnsembleCurveSet* ensembleCurveSet = nullptr; firstAncestorOrThisOfType(ensembleCurveSet); if (ensembleCurveSet) isVisibleInPossibleParent = ensembleCurveSet->isCurvesVisible(); } if (m_showCurve() && m_parentQwtPlot && isVisibleInPossibleParent) { m_qwtPlotCurve->attach(m_parentQwtPlot); } else { m_qwtPlotCurve->detach(); } if (updateParentPlot) { updateZoomInParentPlot(); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimSummaryCaseCollection::updateReferringCurveSets() const { // Update curve set referring to this group std::vector<PdmObjectHandle*> referringObjects; objectsWithReferringPtrFields(referringObjects); for (PdmObjectHandle* obj : referringObjects) { RimEnsembleCurveSet* curveSet = dynamic_cast<RimEnsembleCurveSet*>(obj); if (curveSet) curveSet->updateAllCurves(); } }
//-------------------------------------------------------------------------------------------------- /// Copy curves from preview plot to target plot //-------------------------------------------------------------------------------------------------- void RicSummaryCurveCreator::updateTargetPlot() { if (!m_targetPlot) return; m_targetPlot->deleteAllSummaryCurves(); m_targetPlot->ensembleCurveSetCollection()->deleteAllCurveSets(); // Add edited curves to target plot for (const auto& editedCurve : m_previewPlot->summaryCurves()) { if (!editedCurve->isCurveVisible()) { continue; } copyCurveAndAddToPlot(editedCurve, m_targetPlot); } for (const auto& editedCurveSet : m_previewPlot->ensembleCurveSetCollection()->curveSets()) { if (!editedCurveSet->isCurvesVisible()) { continue; } RimEnsembleCurveSet* newCurveSet = editedCurveSet->clone(); m_targetPlot->ensembleCurveSetCollection()->addCurveSet(newCurveSet); for (const auto& editedCurve : newCurveSet->curves()) { copyEnsembleCurveAndAddToCurveSet(editedCurve, editedCurveSet); } newCurveSet->setParentQwtPlotNoReplot(m_targetPlot->qwtPlot()); } m_targetPlot->enableAutoPlotTitle(m_useAutoPlotTitleProxy()); m_targetPlot->loadDataAndUpdate(); m_targetPlot->updatePlotTitle(); m_targetPlot->updateConnectedEditors(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimEnsembleCurveSet* RicNewSummaryEnsembleCurveSetFeature::addDefaultCurveSet(RimSummaryPlot* plot, RimSummaryCaseCollection* ensemble) { CVF_ASSERT(plot && ensemble); RimProject* project = RiaApplication::instance()->project(); CVF_ASSERT(project); RimEnsembleCurveSet* curveSet = new RimEnsembleCurveSet(); // Use same counting as RicNewSummaryCurveFeature::onActionTriggered auto colorIndex = plot->singleColorCurveCount(); curveSet->setColor(RiaColorTables::summaryCurveDefaultPaletteColors().cycledColor3f(colorIndex)); curveSet->legendConfig()->setColorRange( RimEnsembleCurveSetColorManager::cycledEnsembleColorRange(static_cast<int>(colorIndex))); curveSet->setSummaryCaseCollection(ensemble); curveSet->setSummaryAddress(RifEclipseSummaryAddress::fieldAddress("FOPT")); plot->ensembleCurveSetCollection()->addCurveSet(curveSet); return curveSet; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions( const std::set<RiaSummaryCurveDefinition>& allCurveDefsToDisplay, const std::set<RiaSummaryCurveDefinition>& curveDefsToAdd, const std::set<RimSummaryCurve*>& curvesToDelete) { static bool warningDisplayed = false; RimSummaryCase* prevCase = nullptr; std::set<RiaSummaryCurveDefinition> summaryCurveDefsToDisplay; // Ignore curve sets when assigning colors to singe summary curves for (const auto& def : allCurveDefsToDisplay) { if (!def.isEnsembleCurve()) summaryCurveDefsToDisplay.insert(def); } RimSummaryCurveAppearanceCalculator curveLookCalc( summaryCurveDefsToDisplay, getAllSummaryCaseNames(), getAllSummaryWellNames()); initCurveAppearanceCalculator(curveLookCalc); // Delete curves for (const auto& curve : curvesToDelete) { m_previewPlot->deleteCurve(curve); } size_t ensembleCurveCnt = ensembleCurveCount(allCurveDefsToDisplay); // Add new curves for (const auto& curveDef : curveDefsToAdd) { RimSummaryCase* currentCase = curveDef.summaryCase(); RimSummaryCurve* curve = new RimSummaryCurve(); curve->setSummaryCaseY(currentCase); curve->setSummaryAddressY(curveDef.summaryAddress()); curve->applyCurveAutoNameSettings(*m_curveNameConfig()); if (curveDef.isEnsembleCurve()) { // Find curveSet RimEnsembleCurveSet* curveSet = nullptr; for (const auto& cs : m_previewPlot->ensembleCurveSetCollection()->curveSets()) { if (cs->summaryCaseCollection() == curveDef.ensemble() && cs->summaryAddress() == curveDef.summaryAddress()) { curveSet = cs; break; } } if (!curveSet) { curveSet = new RimEnsembleCurveSet(); curveSet->setSummaryCaseCollection(curveDef.ensemble()); curveSet->setSummaryAddress(curveDef.summaryAddress()); m_previewPlot->ensembleCurveSetCollection()->addCurveSet(curveSet); // Set single curve set color size_t colorIndex = m_previewPlot->ensembleCurveSetCollection()->curveSetCount(); curveSet->setColor(RiaColorTables::summaryCurveDefaultPaletteColors().cycledColor3f(colorIndex)); if (m_previewPlot->ensembleCurveSetCollection()->curveSets().size() > 1 && ensembleCurveCnt > ENSEMBLE_CURVE_COUNT_THRESHOLD) { // Toggle off new curve set and display warning curveSet->showCurves(false); if (!warningDisplayed) { QMessageBox mbox; mbox.setIcon(QMessageBox::Icon::Warning); mbox.setInformativeText( "The new curve set is hidden. Too many visible curve sets may lead to poor performance"); mbox.exec(); warningDisplayed = true; } } } curveSet->addCurve(curve); } else { m_previewPlot->addCurveNoUpdate(curve); curveLookCalc.setupCurveLook(curve); } } m_previewPlot->loadDataAndUpdate(); m_previewPlot->zoomAll(); m_previewPlot->updateConnectedEditors(); m_previewPlot->summaryCurveCollection()->updateConnectedEditors(); }