///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2011-2012 Statoil ASA, Ceetron AS // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html> // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "RIStdInclude.h" #include "Rim3dOverlayInfoConfig.h" #include "RimReservoirView.h" #include "RIViewer.h" #include "RimReservoir.h" #include "RigReservoir.h" #include "RigMainGrid.h" #include "RigReservoirCellResults.h" CAF_PDM_SOURCE_INIT(Rim3dOverlayInfoConfig, "3dOverlayInfoConfig"); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Rim3dOverlayInfoConfig::Rim3dOverlayInfoConfig() { CAF_PDM_InitObject("Overlay 3D info", ":/Legend.png", "", ""); CAF_PDM_InitField(&showInfoText, "ShowInfoText", true, "Info Text", "", "", ""); CAF_PDM_InitField(&showAnimProgress, "ShowAnimProgress", true, "Animation progress", "", "", ""); CAF_PDM_InitField(&showHistogram, "ShowHistogram", true, "Histogram", "", "", ""); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- Rim3dOverlayInfoConfig::~Rim3dOverlayInfoConfig() { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void Rim3dOverlayInfoConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { this->update3DInfo(); m_reservoirView->viewer()->update(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void Rim3dOverlayInfoConfig::setPosition(cvf::Vec2ui position) { m_position = position; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void Rim3dOverlayInfoConfig::update3DInfo() { if (!m_reservoirView && m_reservoirView->viewer()) return; m_reservoirView->viewer()->showInfoText(showInfoText()); m_reservoirView->viewer()->showHistogram(false); m_reservoirView->viewer()->showAnimationProgress(showAnimProgress()); if (showInfoText()) { QString caseName; QString totCellCount; QString activeCellCount; QString iSize, jSize, kSize; QString propName; QString cellEdgeName; if (m_reservoirView->eclipseCase() && m_reservoirView->eclipseCase()->reservoirData()) { caseName = m_reservoirView->eclipseCase()->caseName(); totCellCount = QString::number(m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->cells().size()); activeCellCount = QString::number(m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->numActiveCells()); iSize = QString::number(m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->cellCountI()); jSize = QString::number(m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->cellCountJ()); kSize = QString::number(m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->cellCountK()); propName = m_reservoirView->cellResult()->resultVariable(); cellEdgeName = m_reservoirView->cellEdgeResult()->resultVariable(); } QString infoText = QString( "<p><b><center>-- %1 --</center></b><p> " "<b>Cell count:</b> Total: %2 Active: %3 <br>" "<b>Main Grid I,J,K:</b> %4, %5, %6 <br>").arg(caseName, totCellCount, activeCellCount, iSize, jSize, kSize); if (m_reservoirView->animationMode() && m_reservoirView->cellResult()->hasResult()) { infoText += QString("<b>Cell Property:</b> %1 ").arg(propName); double min, max; double p10, p90; size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex(); m_reservoirView->gridCellResults()->minMaxCellScalarValues(scalarIndex, min, max); m_reservoirView->gridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90); infoText += QString("<blockquote> Min: %1 P10: %2 P90: %3 Max: %4 </blockquote>").arg(min).arg(p10).arg(p90).arg(max); } if (m_reservoirView->animationMode() && m_reservoirView->cellEdgeResult()->hasResult()) { double min, max; m_reservoirView->cellEdgeResult()->minMaxCellEdgeValues(min, max); infoText += QString("<b>Cell Edge Property:</b> %1 <blockquote>Min: %2 Max: %3 </blockquote>").arg(cellEdgeName).arg(min).arg(max); } if ( m_reservoirView->cellResult()->hasDynamicResult() || m_reservoirView->propertyFilterCollection()->hasActiveDynamicFilters() || m_reservoirView->wellCollection()->hasVisibleWellPipes()) { int currentTimeStep = m_reservoirView->currentTimeStep(); QDateTime date = m_reservoirView->gridCellResults()->timeStepDate(0, currentTimeStep); infoText += QString("<b>Time Step:</b> %1 <b>Time:</b> %2").arg(currentTimeStep).arg(date.toString("dd.MMM yyyy")); } m_reservoirView->viewer()->setInfoText(infoText); } if (showHistogram()) { if (m_reservoirView->animationMode() && m_reservoirView->cellResult()->hasResult()) { double min, max; double p10, p90; size_t scalarIndex = m_reservoirView->cellResult()->gridScalarIndex(); m_reservoirView->gridCellResults()->minMaxCellScalarValues(scalarIndex, min, max); m_reservoirView->gridCellResults()->p10p90CellScalarValues(scalarIndex, p10, p90); m_reservoirView->viewer()->showHistogram(true); m_reservoirView->viewer()->setHistogram(min, max, m_reservoirView->gridCellResults()->cellScalarValuesHistogram(scalarIndex)); m_reservoirView->viewer()->setHistogramPercentiles(p10, p90); } } }