diff --git a/ApplicationLibCode/CMakeLists.txt b/ApplicationLibCode/CMakeLists.txt index 4d14dc7e95..50027dfc04 100644 --- a/ApplicationLibCode/CMakeLists.txt +++ b/ApplicationLibCode/CMakeLists.txt @@ -118,6 +118,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/ResultStatisticsCache ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/Completions + ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/ResultAccessors ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/OdbReader ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/GeoMechDataModel ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/GeoMechVisualization @@ -164,6 +165,7 @@ list( ReservoirDataModel/CMakeLists_files.cmake ReservoirDataModel/CMakeLists_filesNotToUnitTest.cmake ReservoirDataModel/Completions/CMakeLists_files.cmake + ReservoirDataModel/ResultAccessors/CMakeLists_files.cmake FileInterface/CMakeLists_files.cmake ProjectDataModel/CMakeLists_files.cmake ProjectDataModel/AnalysisPlots/CMakeLists_files.cmake @@ -426,20 +428,22 @@ target_link_libraries( target_include_directories( ${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR}/Generated - PUBLIC ${CMAKE_SOURCE_DIR}/ApplicationLibCode - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/Application - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/Application/Tools - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/CommandFileInterface - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/CommandFileInterface/Core - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/FileInterface - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/GeoMech - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ModelVisualization - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel/Flow - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel/Intersections - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/SocketInterface - ${CMAKE_SOURCE_DIR}/ApplicationLibCode/UserInterface + PUBLIC + ${CMAKE_SOURCE_DIR}/ApplicationLibCode + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/Application + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/Application/Tools + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/CommandFileInterface + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/CommandFileInterface/Core + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/FileInterface + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/GeoMech + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ModelVisualization + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel/Flow + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel/Intersections + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel/ResultAccessors + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/SocketInterface + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/UserInterface ) # ############################################################################## diff --git a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake index 1eea926592..258b03ed6a 100644 --- a/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationLibCode/ReservoirDataModel/CMakeLists_files.cmake @@ -4,14 +4,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RigEclipseCaseData.h ${CMAKE_CURRENT_LIST_DIR}/RigGridBase.h ${CMAKE_CURRENT_LIST_DIR}/RigGridManager.h - ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessor.h - ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessorFactory.h - ${CMAKE_CURRENT_LIST_DIR}/RigAllGridCellsResultAccessor.h - ${CMAKE_CURRENT_LIST_DIR}/RigActiveCellsResultAccessor.h - ${CMAKE_CURRENT_LIST_DIR}/RigCellEdgeResultAccessor.h ${CMAKE_CURRENT_LIST_DIR}/RigCellGeometryTools.h - ${CMAKE_CURRENT_LIST_DIR}/RigCombTransResultAccessor.h - ${CMAKE_CURRENT_LIST_DIR}/RigCombMultResultAccessor.h ${CMAKE_CURRENT_LIST_DIR}/RigResultModifier.h ${CMAKE_CURRENT_LIST_DIR}/RigResultModifierFactory.h ${CMAKE_CURRENT_LIST_DIR}/RigFormationNames.h @@ -37,14 +30,12 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/cvfGeometryTools.h ${CMAKE_CURRENT_LIST_DIR}/cvfGeometryTools.inl ${CMAKE_CURRENT_LIST_DIR}/RigPipeInCellEvaluator.h - ${CMAKE_CURRENT_LIST_DIR}/RigTernaryResultAccessor.h ${CMAKE_CURRENT_LIST_DIR}/RigEclipseNativeStatCalc.h ${CMAKE_CURRENT_LIST_DIR}/RigEclipseNativeVisibleCellsStatCalc.h ${CMAKE_CURRENT_LIST_DIR}/RigEclipseMultiPropertyStatCalc.h ${CMAKE_CURRENT_LIST_DIR}/RigWellLogCurveData.h ${CMAKE_CURRENT_LIST_DIR}/RigWellLogExtractionTools.h ${CMAKE_CURRENT_LIST_DIR}/RigHexIntersectionTools.h - ${CMAKE_CURRENT_LIST_DIR}/RigTimeHistoryResultAccessor.h ${CMAKE_CURRENT_LIST_DIR}/RigLasFileExporter.h ${CMAKE_CURRENT_LIST_DIR}/RigSimulationWellCoordsAndMD.h ${CMAKE_CURRENT_LIST_DIR}/RigFishbonesGeometry.h @@ -105,14 +96,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigEclipseCaseData.cpp ${CMAKE_CURRENT_LIST_DIR}/RigGridBase.cpp ${CMAKE_CURRENT_LIST_DIR}/RigGridManager.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessor.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessorFactory.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigAllGridCellsResultAccessor.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigActiveCellsResultAccessor.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigCellEdgeResultAccessor.cpp ${CMAKE_CURRENT_LIST_DIR}/RigCellGeometryTools.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigCombTransResultAccessor.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigCombMultResultAccessor.cpp ${CMAKE_CURRENT_LIST_DIR}/RigResultModifierFactory.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFormationNames.cpp ${CMAKE_CURRENT_LIST_DIR}/RigAllanDiagramData.cpp @@ -134,13 +118,11 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigFault.cpp ${CMAKE_CURRENT_LIST_DIR}/RigNNCData.cpp ${CMAKE_CURRENT_LIST_DIR}/cvfGeometryTools.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigTernaryResultAccessor.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEclipseNativeStatCalc.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEclipseNativeVisibleCellsStatCalc.cpp ${CMAKE_CURRENT_LIST_DIR}/RigEclipseMultiPropertyStatCalc.cpp ${CMAKE_CURRENT_LIST_DIR}/RigWellLogCurveData.cpp ${CMAKE_CURRENT_LIST_DIR}/RigHexIntersectionTools.cpp - ${CMAKE_CURRENT_LIST_DIR}/RigTimeHistoryResultAccessor.cpp ${CMAKE_CURRENT_LIST_DIR}/RigLasFileExporter.cpp ${CMAKE_CURRENT_LIST_DIR}/RigSimulationWellCoordsAndMD.cpp ${CMAKE_CURRENT_LIST_DIR}/RigFishbonesGeometry.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/ResultAccessors/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/CMakeLists_files.cmake new file mode 100644 index 0000000000..feefb2ebb1 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/CMakeLists_files.cmake @@ -0,0 +1,35 @@ +set(SOURCE_GROUP_HEADER_FILES + ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessorFactory.h + ${CMAKE_CURRENT_LIST_DIR}/RigAllGridCellsResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigActiveCellsResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigCellEdgeResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigCombTransResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigCombMultResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigTernaryResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigTimeHistoryResultAccessor.h + ${CMAKE_CURRENT_LIST_DIR}/RigDepthResultAccessor.h +) + +set(SOURCE_GROUP_SOURCE_FILES + ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigResultAccessorFactory.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigAllGridCellsResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigActiveCellsResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigCellEdgeResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigCombTransResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigCombMultResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigTernaryResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigTimeHistoryResultAccessor.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigDepthResultAccessor.cpp +) + +list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) + +list(APPEND CODE_SOURCE_FILES ${SOURCE_GROUP_SOURCE_FILES}) + +source_group( + "ReservoirDataModel\\ResultAccessors" + FILES ${SOURCE_GROUP_HEADER_FILES} ${SOURCE_GROUP_SOURCE_FILES} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists_files.cmake +) diff --git a/ApplicationLibCode/ReservoirDataModel/RigActiveCellsResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigActiveCellsResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigActiveCellsResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigActiveCellsResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigActiveCellsResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigActiveCellsResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigActiveCellsResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigActiveCellsResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigAllGridCellsResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigAllGridCellsResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigAllGridCellsResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigAllGridCellsResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigAllGridCellsResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigAllGridCellsResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigAllGridCellsResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigAllGridCellsResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigCellEdgeResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCellEdgeResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCellEdgeResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCellEdgeResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigCellEdgeResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCellEdgeResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCellEdgeResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCellEdgeResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigCombMultResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombMultResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCombMultResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombMultResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigCombMultResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombMultResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCombMultResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombMultResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigCombTransResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombTransResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCombTransResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombTransResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigCombTransResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombTransResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigCombTransResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigCombTransResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.cpp new file mode 100644 index 0000000000..bf76326875 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.cpp @@ -0,0 +1,153 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023 Equinor ASA +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigDepthResultAccessor.h" + +#include "RigCell.h" +#include "RigEclipseCaseData.h" +#include "RigGridBase.h" +#include "RigResultAccessor.h" +#include "RigResultAccessorFactory.h" + +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigDepthResultAccessor::resultValues( RigEclipseCaseData* eclipseCaseData, + RimEclipseResultDefinition* resultDefinition, + int gridIndex, + size_t cellIndex, + int currentTimeStep ) +{ + std::vector values; + + RigHugeValResultAccessor hugeVal; + + if ( cellIndex != cvf::UNDEFINED_SIZE_T ) + { + size_t i = 0; + size_t j = 0; + size_t dummy = 0; + + auto kvals = kValues( eclipseCaseData, gridIndex ); + + auto grid = eclipseCaseData->grid( gridIndex ); + + if ( grid->ijkFromCellIndex( cellIndex, &i, &j, &dummy ) ) + { + cvf::ref resultAccessor = + RigResultAccessorFactory::createFromResultDefinition( eclipseCaseData, gridIndex, currentTimeStep, resultDefinition ); + + for ( auto k : kvals ) + { + int tmpCellIdx = grid->cellIndexFromIJK( i, j, k ); + + if ( resultAccessor.notNull() ) + { + values.push_back( resultAccessor->cellScalar( tmpCellIdx ) ); + } + else + { + values.push_back( hugeVal.cellScalar( tmpCellIdx ) ); + } + } + } + } + + return values; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigDepthResultAccessor::kValues( RigEclipseCaseData* eclipseCaseData, int gridIndex ) +{ + std::vector kvals; + int maxK = eclipseCaseData->grid( gridIndex )->cellCountK(); + + for ( int i = 0; i < maxK; i++ ) + { + kvals.push_back( i ); + } + + return kvals; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigDepthResultAccessor::depthValues( RigEclipseCaseData* eclipseCaseData, int startCellIndex, int gridIndex ) +{ + std::vector depthVals; + + auto grid = eclipseCaseData->grid( gridIndex ); + size_t i = 0; + size_t j = 0; + size_t dummy = 0; + + if ( grid->ijkFromCellIndex( startCellIndex, &i, &j, &dummy ) ) + { + int maxK = grid->cellCountK(); + + for ( int k = 0; k < maxK; k++ ) + { + auto cellIdx = grid->cellIndexFromIJK( i, j, k ); + + auto& cell = grid->cell( cellIdx ); + if ( cell.isInvalid() ) + { + depthVals.push_back( std::nan( "" ) ); + } + else + { + auto center = cell.center(); + depthVals.push_back( -1.0 * center.z() ); + } + } + } + return depthVals; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RigDepthResultAccessor::geometrySelectionText( RigEclipseCaseData* eclipseCaseData, size_t gridIndex, size_t cellIndex ) +{ + QString text; + + if ( eclipseCaseData ) + { + if ( cellIndex != cvf::UNDEFINED_SIZE_T ) + { + size_t i = 0; + size_t j = 0; + size_t k = 0; + if ( eclipseCaseData->grid( gridIndex )->ijkFromCellIndex( cellIndex, &i, &j, &k ) ) + { + // Adjust to 1-based Eclipse indexing + i++; + j++; + + text += QString( "[%1, %2]" ).arg( i ).arg( j ); + } + } + } + + return text; +} diff --git a/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.h new file mode 100644 index 0000000000..d200b259d5 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigDepthResultAccessor.h @@ -0,0 +1,39 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023 Equinor ASA +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include + +class RigEclipseCaseData; +class RimEclipseResultDefinition; + +class RigDepthResultAccessor +{ +public: + static QString geometrySelectionText( RigEclipseCaseData* eclipseCaseData, size_t m_gridIndex, size_t m_cellIndex ); + static std::vector resultValues( RigEclipseCaseData* eclipseCaseData, + RimEclipseResultDefinition* resultDefinition, + int gridIndex, + size_t cellIndex, + int currentTimeStep ); + + static std::vector kValues( RigEclipseCaseData* eclipseCaseData, int gridIndex ); + static std::vector depthValues( RigEclipseCaseData* eclipseCaseData, int startCellIndex, int gridIndex ); +}; diff --git a/ApplicationLibCode/ReservoirDataModel/RigResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigResultAccessorFactory.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessorFactory.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigResultAccessorFactory.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessorFactory.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigResultAccessorFactory.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessorFactory.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigResultAccessorFactory.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigResultAccessorFactory.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigTernaryResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTernaryResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigTernaryResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTernaryResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigTernaryResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTernaryResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigTernaryResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTernaryResultAccessor.h diff --git a/ApplicationLibCode/ReservoirDataModel/RigTimeHistoryResultAccessor.cpp b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTimeHistoryResultAccessor.cpp similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigTimeHistoryResultAccessor.cpp rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTimeHistoryResultAccessor.cpp diff --git a/ApplicationLibCode/ReservoirDataModel/RigTimeHistoryResultAccessor.h b/ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTimeHistoryResultAccessor.h similarity index 100% rename from ApplicationLibCode/ReservoirDataModel/RigTimeHistoryResultAccessor.h rename to ApplicationLibCode/ReservoirDataModel/ResultAccessors/RigTimeHistoryResultAccessor.h diff --git a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake index 3eb868fb51..326ea5368a 100644 --- a/ApplicationLibCode/UserInterface/CMakeLists_files.cmake +++ b/ApplicationLibCode/UserInterface/CMakeLists_files.cmake @@ -89,6 +89,7 @@ set(SOURCE_GROUP_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuDockWidgetTools.h ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotItemGroup.h ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotTools.h + ${CMAKE_CURRENT_LIST_DIR}/RiuDepthQwtPlot.h ${CMAKE_CURRENT_LIST_DIR}/RiuWellPathComponentPlotItem.h ${CMAKE_CURRENT_LIST_DIR}/RiuMeasurementViewEventFilter.h ${CMAKE_CURRENT_LIST_DIR}/RiuDraggableOverlayFrame.h @@ -193,6 +194,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RiuDockWidgetTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotItemGroup.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuQwtPlotTools.cpp + ${CMAKE_CURRENT_LIST_DIR}/RiuDepthQwtPlot.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuWellPathComponentPlotItem.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuDraggableOverlayFrame.cpp ${CMAKE_CURRENT_LIST_DIR}/RiuMdiMaximizeWindowGuard.cpp @@ -258,6 +260,7 @@ list( ${CMAKE_CURRENT_LIST_DIR}/RiuRelativePermeabilityPlotPanel.h ${CMAKE_CURRENT_LIST_DIR}/RiuResultInfoPanel.h ${CMAKE_CURRENT_LIST_DIR}/RiuResultQwtPlot.h + ${CMAKE_CURRENT_LIST_DIR}/RiuDepthQwtPlot.h ${CMAKE_CURRENT_LIST_DIR}/RiuTextDialog.h ${CMAKE_CURRENT_LIST_DIR}/RiuViewer.h ${CMAKE_CURRENT_LIST_DIR}/RiuProcessMonitor.h diff --git a/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.cpp b/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.cpp new file mode 100644 index 0000000000..257bcb6099 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.cpp @@ -0,0 +1,309 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023 Equinor ASA +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiuDepthQwtPlot.h" + +#include "RiaApplication.h" +#include "RiaCurveDataTools.h" + +#include "RimCase.h" +#include "RimContextCommandBuilder.h" + +#include "RiuQwtLinearScaleEngine.h" +#include "RiuQwtPlotCurve.h" +#include "RiuQwtPlotTools.h" +#include "RiuQwtSymbol.h" +#include "RiuTextDialog.h" + +#include "cvfColor3.h" + +#include "qwt_legend.h" +#include "qwt_plot_curve.h" +#include "qwt_plot_grid.h" +#include "qwt_plot_layout.h" +#include "qwt_scale_engine.h" + +#include +#include + +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuDepthQwtPlot::RiuDepthQwtPlot( QWidget* parent ) + : RiuDockedQwtPlot( parent ) + , m_bShowDepth( true ) +{ + setAutoFillBackground( true ); + setDefaults(); + resetRanges(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuDepthQwtPlot::~RiuDepthQwtPlot() +{ + deleteAllCurves(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::resetRanges() +{ + m_minX = std::numeric_limits::max(); + m_minY = std::numeric_limits::max(); + m_maxX = std::numeric_limits::lowest(); + m_maxY = std::numeric_limits::lowest(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::addCurve( const RimCase* rimCase, + const QString& curveName, + const cvf::Color3f& curveColor, + const std::vector& kIndexes, + const std::vector& depthValues, + const std::vector& resultValues ) +{ + if ( kIndexes.empty() || resultValues.empty() || depthValues.empty() ) + { + return; + } + + std::vector kValues; + + if ( m_bShowDepth ) + { + kValues = depthValues; + setAxisTitle( QwtAxis::YLeft, "Depth" ); + } + else + { + for ( auto k : kIndexes ) + { + kValues.push_back( 1.0 * k + 1.0 ); // adjust to eclipse index + } + setAxisTitle( QwtAxis::YLeft, "K" ); + } + + double yMax = *std::max_element( kValues.begin(), kValues.end() ); + double yMin = *std::min_element( kValues.begin(), kValues.end() ); + m_maxY = std::max( yMax, m_maxY ); + m_minY = std::min( yMin, m_minY ); + + std::vector tmpResultValues; + + for ( auto val : resultValues ) + { + if ( std::isinf( val ) ) + tmpResultValues.push_back( std::nan( "" ) ); + else + { + if ( val > m_maxX ) m_maxX = val; + if ( val < m_minX ) m_minX = val; + tmpResultValues.push_back( val ); + } + } + + RiuQwtPlotCurve* plotCurve = new RiuQwtPlotCurve( nullptr ); + + plotCurve->setSamplesFromXValuesAndYValues( tmpResultValues, kValues, false ); + plotCurve->setTitle( curveName ); + plotCurve->setAxes( QwtAxis::XTop, QwtAxis::YLeft ); + + auto color = QColor( curveColor.rByte(), curveColor.gByte(), curveColor.bByte() ); + + plotCurve->setPen( QPen( color ) ); + + RiuQwtSymbol* symbol = new RiuQwtSymbol( RiuPlotCurveSymbol::SYMBOL_XCROSS, "" ); + symbol->setSize( 6, 6 ); + symbol->setColor( color ); + plotCurve->setSymbol( symbol ); + + plotCurve->attach( this ); + m_plotCurves.push_back( plotCurve ); + + updateAxisScaling(); + + this->applyFontSizes( false ); + + this->replot(); + + int caseId = rimCase->caseId(); + + m_caseNames[caseId] = rimCase->caseUserDescription(); + m_curveNames[caseId].push_back( curveName ); + m_curveData[caseId].push_back( resultValues ); + m_kSteps[caseId] = kIndexes; + m_depthValues[caseId] = depthValues; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::deleteAllCurves() +{ + for ( size_t i = 0; i < m_plotCurves.size(); i++ ) + { + m_plotCurves[i]->detach(); + delete m_plotCurves[i]; + } + + m_plotCurves.clear(); + + m_caseNames.clear(); + m_curveNames.clear(); + m_curveData.clear(); + m_kSteps.clear(); + m_depthValues.clear(); + + resetRanges(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QSize RiuDepthQwtPlot::sizeHint() const +{ + return QSize( 100, 100 ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QSize RiuDepthQwtPlot::minimumSizeHint() const +{ + return QSize( 0, 0 ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::contextMenuEvent( QContextMenuEvent* event ) +{ + QMenu menu; + + const int curveCount = this->itemList( QwtPlotItem::Rtti_PlotCurve ).count(); + + QAction* act = menu.addAction( "Show Plot Data", this, SLOT( slotCurrentPlotDataInTextDialog() ) ); + act->setEnabled( curveCount > 0 ); + + if ( !menu.actions().empty() ) + { + menu.exec( event->globalPos() ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::setDefaults() +{ + RiuQwtPlotTools::setCommonPlotBehaviour( this ); + + setAxesCount( QwtAxis::XTop, 1 ); + setAxesCount( QwtAxis::YLeft, 1 ); + + setAxisVisible( QwtAxis::XTop, true ); + setAxisVisible( QwtAxis::XBottom, false ); + + setAxisMaxMinor( QwtAxis::XTop, 2 ); + setAxisMaxMinor( QwtAxis::YLeft, 6 ); + + applyFontSizes( false ); + + QwtLegend* legend = new QwtLegend( this ); + insertLegend( legend, BottomLegend ); + + RiuQwtPlotTools::enableGridLines( this, QwtAxis::XBottom, false, false ); + RiuQwtPlotTools::enableGridLines( this, QwtAxis::XTop, true, true ); + RiuQwtPlotTools::enableGridLines( this, QwtAxis::YLeft, true, true ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDepthQwtPlot::asciiDataForUiSelectedCurves() const +{ + QString out; + + for ( std::pair caseIdAndName : m_caseNames ) + { + int caseId = caseIdAndName.first; + out += "Case: " + caseIdAndName.second; + out += "\n"; + + for ( size_t i = 0; i < m_kSteps.at( caseId ).size(); i++ ) // time steps & data points + { + if ( i == 0 ) + { + out += "K Index"; + out += "\tDepth"; + for ( QString curveName : m_curveNames.at( caseId ) ) + { + out += "\t" + curveName; + } + } + out += "\n"; + + QString kString = QString::number( m_kSteps.at( caseId )[i] ); + + out += kString; + + QString depthString = QString::number( m_depthValues.at( caseId )[i], 'f', 2 ); + out += "\t" + depthString; + + for ( size_t j = 0; j < m_curveData.at( caseId ).size(); j++ ) // curves + { + out += "\t" + QString::number( m_curveData.at( caseId )[j][i], 'g', 6 ); + } + } + out += "\n\n"; + } + + return out; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::slotCurrentPlotDataInTextDialog() +{ + QString outTxt = asciiDataForUiSelectedCurves(); + + RiuTextDialog* textDialog = new RiuTextDialog( this ); + textDialog->setMinimumSize( 600, 600 ); + textDialog->setWindowTitle( "Depth Plot Data" ); + textDialog->setText( outTxt ); + textDialog->show(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuDepthQwtPlot::updateAxisScaling() +{ + double valRangeX = m_maxX - m_minX; + this->setAxisScale( QwtAxis::YLeft, m_maxY + 0.1, m_minY - 0.1 ); + this->setAxisScale( QwtAxis::XTop, m_minX - 0.02 * valRangeX, m_maxX + 0.1 * valRangeX ); +} diff --git a/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.h b/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.h new file mode 100644 index 0000000000..4ddb7683f9 --- /dev/null +++ b/ApplicationLibCode/UserInterface/RiuDepthQwtPlot.h @@ -0,0 +1,88 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023 Equinor ASA +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RiuDockedQwtPlot.h" + +#include +#include +#include + +class RimCase; +class QwtPlotCurve; +class QwtPlotGrid; + +namespace cvf +{ +class Color3f; +} + +//================================================================================================== +// +// +// +//================================================================================================== +class RiuDepthQwtPlot : public RiuDockedQwtPlot +{ + Q_OBJECT + +public: + explicit RiuDepthQwtPlot( QWidget* parent = nullptr ); + ~RiuDepthQwtPlot() override; + + void addCurve( const RimCase* rimCase, + const QString& curveName, + const cvf::Color3f& curveColor, + const std::vector& kIndexes, + const std::vector& depthValues, + const std::vector& resultValues ); + + void deleteAllCurves(); + +protected: + QSize sizeHint() const override; + QSize minimumSizeHint() const override; + void contextMenuEvent( QContextMenuEvent* ) override; + +private: + void setDefaults(); + void resetRanges(); + void updateAxisScaling(); + + QString asciiDataForUiSelectedCurves() const; + +private slots: + void slotCurrentPlotDataInTextDialog(); + +private: + std::vector m_plotCurves; + + std::map m_caseNames; + std::map> m_kSteps; + std::map> m_depthValues; + std::map>> m_curveData; + std::map> m_curveNames; + + double m_maxY; + double m_minY; + double m_maxX; + double m_minX; + + bool m_bShowDepth; +}; diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp index 0b6f20f3ad..7678cd1ea7 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.cpp @@ -91,6 +91,14 @@ QString RiuDockWidgetTools::mainWindowResultPlotName() return "dockResultPlot_mainWindow"; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RiuDockWidgetTools::mainWindowDepthPlotName() +{ + return "dockDepthPlot_mainWindow"; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -323,6 +331,8 @@ QIcon RiuDockWidgetTools::dockIcon( const QString dockWidgetName ) return QIcon( ":/view.svg" ); else if ( dockWidgetName == mainWindowResultPlotName() ) return QIcon( ":/graph.svg" ); + else if ( dockWidgetName == mainWindowDepthPlotName() ) + return QIcon( ":/graph.svg" ); else if ( dockWidgetName == mainWindowRelPermPlotName() ) return QIcon( ":/graph.svg" ); else if ( dockWidgetName == mainWindowPvtPlotName() ) @@ -377,34 +387,39 @@ QByteArray RiuDockWidgetTools::defaultEclipseDockState() // Set up the dock widgets the way you want it using the GUI inside ResInsight - then use "Export Layout to // Clipboard" from the Windows menu and paste the exported text into this file to update the default states. + // start paste + static const char stateData[] = - { '\x00', '\x00', '\x06', '\x13', '\x78', '\xda', '\x95', '\x54', '\xdf', '\x4f', '\xc2', '\x30', '\x10', '\x7e', '\xf7', '\xaf', - '\x68', '\xf6', '\xae', '\x30', '\xc6', '\x94', '\x25', '\x80', '\x31', '\xa0', '\x89', '\x0f', '\x28', '\x3a', '\xd0', '\x47', - '\x53', '\xbb', '\x13', '\xab', '\x5d', '\x4b', '\xae', '\x07', '\xfe', '\x88', '\x7f', '\xbc', '\x1d', '\x18', '\x12', '\xa0', - '\xdb', '\xe4', '\x69', '\xdd', '\xdd', '\xf7', '\xf5', '\xfb', '\xae', '\xbd', '\x6b', '\xf7', '\xfc', '\x33', '\x57', '\x6c', - '\x09', '\x68', '\xa5', '\xd1', '\xbd', '\x20', '\x3c', '\x69', '\x06', '\x0c', '\xb4', '\x30', '\x99', '\xd4', '\xb3', '\x5e', - '\x30', '\x9d', '\x5c', '\x1d', '\x77', '\x82', '\xf3', '\x7e', '\xf7', '\x8e', '\x2e', '\xb2', '\x25', '\xd7', '\x02', '\xb2', - '\xa1', '\x11', '\xef', '\x2e', '\x97', '\x7e', '\x59', '\x82', '\x9c', '\x3d', '\x6c', '\x88', '\x01', '\x9b', '\x5a', '\xc0', - '\xcd', '\x7f', '\x2b', '\x60', '\x03', '\xa3', '\x89', '\x4b', '\xed', '\x22', '\xab', '\xf4', '\x00', '\x34', '\x21', '\x57', - '\x8f', '\x32', '\x9b', '\x01', '\xf5', '\x82', '\xcc', '\xed', '\x13', '\x0d', '\x1f', '\xa5', '\xce', '\xcc', '\xc7', '\x53', - '\xee', '\x70', '\xeb', '\x65', '\xd0', '\xef', '\x6e', '\x78', '\xec', '\x4a', '\x19', '\x4e', '\x2b', '\x23', '\x4d', '\x17', - '\x4f', '\xe7', '\x4a', '\x12', '\xb9', '\xf0', '\x2d', '\x4a', '\xb7', '\x97', '\xcb', '\x14', '\x42', '\x3f', '\x85', '\xd0', - '\x42', '\x53', '\x21', '\x59', '\x86', '\x39', '\xde', '\xc2', '\x5c', '\x20', '\x70', '\x36', '\xe1', '\xcf', '\xce', '\x56', - '\xe4', '\x12', '\x0b', '\x44', '\xd0', '\x7f', '\x86', '\xc6', '\x68', '\xde', '\x40', '\xd0', '\x04', '\x01', '\xb6', '\x3d', - '\xad', '\x5d', '\xb3', '\x1b', '\x9e', '\x43', '\x25', '\x92', '\x0d', '\x94', '\xb1', '\x90', '\x15', '\x86', '\x1b', '\x1e', - '\xd6', '\x90', '\x13', '\x4f', '\xcd', '\x02', '\x05', '\x1c', '\x48', '\x4c', '\x05', '\xca', '\x39', '\xd9', '\x6a', '\x56', - '\xa3', '\xa8', '\x6c', '\xab', '\xbe', '\x70', '\xbf', '\xbe', '\x39', '\x20', '\x7d', '\x5d', '\x66', '\x92', '\x0c', '\xd6', - '\x97', '\x58', '\x02', '\xf6', '\xca', '\xa6', '\xf2', '\x1b', '\x6c', '\xff', '\xac', '\xd3', '\x62', '\xed', '\xd3', '\x0e', - '\xeb', '\x36', '\xd6', '\xff', '\xee', '\xfb', '\x77', '\x25', '\x07', '\x5f', '\xce', '\xae', '\x79', '\x5f', '\xb7', '\xb8', - '\x16', '\xe1', '\xb3', '\x15', '\xd6', '\x53', '\x80', '\x97', '\xe0', '\xb5', '\x5e', '\xd3', '\x59', '\x51', '\xb5', '\xb1', - '\x7b', '\xb0', '\x0b', '\x45', '\xd7', '\xfa', '\xc5', '\xd4', '\x9c', '\xa8', '\x1f', '\x58', '\x77', '\x89', '\x6d', '\xaf', - '\xdc', '\x58', '\x19', '\xfa', '\x97', '\xdc', '\x2e', '\xb0', '\xa6', '\xd3', '\x46', '\xe6', '\x15', '\xed', '\x40', '\xa2', - '\x50', '\x50', '\xca', '\x0c', '\xbd', '\xcc', '\x7b', '\x50', '\x63', '\xc0', '\xfc', '\x40', '\xbd', '\xf1', '\xb2', '\xc6', - '\xe1', '\xfe', '\x81', '\xec', '\x4e', '\xed', '\x08', '\xac', '\xe5', '\x33', '\xb0', '\x35', '\xc7', '\xe1', '\x83', '\xd5', - '\x99', '\x43', '\x23', '\x1c', '\x6b', '\x64', '\x74', '\xf5', '\x08', '\xec', '\x11', '\xa7', '\x0e', '\x94', '\x12', '\x17', - '\xef', '\xff', '\x1c', '\x9b', '\x28', '\x89', '\x59', '\xd8', '\x4a', '\x9a', '\xac', '\x1d', '\x97', '\xcc', '\xce', '\x2a', - '\xd2', '\x49', '\x4e', '\x59', '\x14', '\xb7', '\x2b', '\x10', '\x51', '\x92', '\xb0', '\x56', '\x18', '\xc7', '\x5e', '\x48', - '\x63', '\xf3', '\xb4', '\xba', '\x75', '\xc9', '\x93', '\xde', '\x3f', '\xfa', '\x05', '\x48', '\x0b', '\x16', '\x15' }; + { '\x00', '\x00', '\x06', '\x92', '\x78', '\xda', '\xb5', '\x55', '\x5d', '\x4f', '\xc2', '\x30', '\x14', '\x7d', '\xf7', '\x57', + '\x34', '\x7b', '\x47', '\x18', '\x83', '\x30', '\x13', '\xc0', '\x18', '\x90', '\xc4', '\x07', '\x14', '\x1d', '\xca', '\xa3', + '\xa9', '\xdb', '\x15', '\xab', '\x5d', '\x4b', '\x6e', '\x2f', '\x28', '\xc6', '\x1f', '\x6f', '\xc7', '\xcc', '\x12', '\xb0', + '\x50', '\x79', '\xf0', '\x69', '\xed', '\xed', '\x39', '\x3d', '\xe7', '\x7e', '\x6c', '\xeb', '\x9e', '\x7f', '\xe4', '\x92', + '\xad', '\x00', '\x8d', '\xd0', '\xaa', '\x17', '\x84', '\xa7', '\x8d', '\x80', '\x81', '\x4a', '\x75', '\x26', '\xd4', '\xbc', + '\x17', '\xdc', '\x4f', '\x47', '\xb5', '\x38', '\x38', '\xef', '\x77', '\x6f', '\xe9', '\x22', '\x5b', '\x71', '\x95', '\x42', + '\x36', '\xd4', '\xe9', '\x9b', '\x3d', '\x4b', '\xd6', '\x86', '\x20', '\x67', '\x0f', '\x15', '\x31', '\x60', '\xf7', '\x06', + '\xb0', '\xda', '\x47', '\x01', '\x1b', '\x68', '\x45', '\x5c', '\x28', '\x1b', '\xd9', '\x1c', '\x0f', '\x40', '\x11', '\x72', + '\x39', '\x13', '\xd9', '\x1c', '\xa8', '\x17', '\x64', '\xf6', '\x9e', '\x68', '\x38', '\x13', '\x2a', '\xd3', '\xef', '\x8f', + '\xb9', '\xc5', '\x95', '\xcb', '\xa0', '\xdf', '\xad', '\x78', '\x6c', '\x24', '\x35', '\xa7', '\x8d', '\x91', '\x86', '\x8d', + '\x27', '\x0b', '\x29', '\x88', '\x6c', '\xf8', '\x06', '\x85', '\xbd', '\xcb', '\x9e', '\x14', '\x42', '\x5f', '\x85', '\xd0', + '\x52', '\x51', '\x21', '\xb9', '\x0f', '\x53', '\xab', '\x30', '\x4d', '\x8b', '\xb9', '\x40', '\xe0', '\x6c', '\xca', '\x9f', + '\x4c', '\xe9', '\x72', '\x89', '\x08', '\xea', '\xc7', '\xd0', '\x04', '\xf5', '\x2b', '\xa4', '\x34', '\x45', '\x80', '\x6d', + '\x4f', '\xa5', '\x6b', '\x76', '\xcd', '\x73', '\x38', '\x88', '\x64', '\x03', '\xa9', '\x0d', '\x64', '\x85', '\xe1', '\xba', + '\x83', '\x35', '\xe4', '\xc4', '\x13', '\xbd', '\xc4', '\x14', '\x8e', '\x24', '\x26', '\x29', '\x8a', '\x05', '\x99', '\xc3', + '\xac', '\x7a', '\x91', '\xd9', '\x56', '\x7e', '\xe1', '\xef', '\xfc', '\x16', '\x80', '\xb4', '\xbe', '\xcc', '\x04', '\x69', + '\xf4', '\xa7', '\xb8', '\x07', '\xec', '\x94', '\x4d', '\xc4', '\x27', '\x98', '\x7e', '\xa7', '\x73', '\xc6', '\xda', '\x51', + '\xc8', '\xba', '\xf5', '\x72', '\x6f', '\x9f', '\x3f', '\x2d', '\x39', '\xba', '\x39', '\xbb', '\xe6', '\x5d', '\xd3', '\x62', + '\x47', '\x84', '\xcf', '\x37', '\x58', '\x47', '\x02', '\x4e', '\x82', '\xd3', '\xba', '\x67', '\xb2', '\x3c', '\xc6', '\xee', + '\xc0', '\x2c', '\x25', '\x5d', '\xa9', '\x67', '\xed', '\xa9', '\xa8', '\x1b', '\xe8', '\x6b', '\x62', '\xcb', '\x29', '\x37', + '\x91', '\x9a', '\xfe', '\x24', '\xb7', '\x0b', '\xf4', '\x4c', '\xda', '\x58', '\xbf', '\xa0', '\x19', '\x08', '\x4c', '\x25', + '\xec', '\x65', '\x86', '\x4e', '\xe6', '\x1d', '\xc8', '\x09', '\x60', '\x7e', '\xa4', '\xde', '\x64', '\xe5', '\x71', '\xb8', + '\x35', '\x5e', '\xad', '\xf0', '\x8c', '\x85', '\xcd', '\x38', '\x72', '\xcf', '\xd7', '\x26', '\x12', '\xc7', '\x6d', '\xd6', + '\x6a', '\xb6', '\xff', '\x63', '\x02', '\x87', '\xb0', '\xa0', '\x97', '\x3f', '\x14', '\xde', '\x89', '\xf3', '\xb5', '\xb9', + '\xb9', '\x23', '\x36', '\x06', '\x63', '\xf8', '\x1c', '\x8c', '\x47', '\xcb', '\x05', '\xf3', '\x95', '\x1c', '\x75', '\x6a', + '\x59', '\x63', '\xad', '\x8e', '\x78', '\xb1', '\x0f', '\x96', '\xb5', '\xec', '\x4d', '\x14', '\xb1', '\xb0', '\xd3', '\x88', + '\x59', '\xab', '\xd1', '\x71', '\xc2', '\xea', '\xd5', '\x97', '\xdd', '\xae', '\xf7', '\xfc', '\x51', '\xfa', '\x27', '\xdf', + '\x7c', '\xb5', '\x40', '\x74' }; + + // end paste QByteArray retVal( stateData, sizeof( stateData ) ); @@ -416,34 +431,39 @@ QByteArray RiuDockWidgetTools::defaultEclipseDockState() //-------------------------------------------------------------------------------------------------- QByteArray RiuDockWidgetTools::defaultGeoMechDockState() { + // start paste + static const char stateData[] = - { '\x00', '\x00', '\x06', '\x13', '\x78', '\xda', '\x95', '\x54', '\xdf', '\x4f', '\xc2', '\x30', '\x10', '\x7e', '\xf7', '\xaf', - '\x68', '\xf6', '\x8e', '\xb0', '\x8d', '\x29', '\x4b', '\xf8', '\x11', '\x03', '\x9a', '\xf8', '\x80', '\xa2', '\x03', '\x79', - '\x34', '\xb5', '\x3b', '\xb1', '\xda', '\xb5', '\xa4', '\x3d', '\xf0', '\x47', '\xfc', '\xe3', '\xed', '\x86', '\x21', '\x01', - '\xba', '\x0d', '\x9e', '\xda', '\xde', '\x7d', '\x5f', '\xef', '\xbb', '\xeb', '\x5d', '\xbb', '\x83', '\xaf', '\x4c', '\x90', - '\x35', '\x68', '\xc3', '\x95', '\xec', '\x79', '\xfe', '\x79', '\xcb', '\x23', '\x20', '\x99', '\x4a', '\xb9', '\x5c', '\xf4', - '\xbc', '\xd9', '\xf4', '\xa6', '\xd1', '\xf1', '\x06', '\xfd', '\xee', '\x03', '\x5e', '\xa5', '\x6b', '\x2a', '\x19', '\xa4', - '\x23', '\xc5', '\x3e', '\xac', '\x2f', '\xf9', '\x36', '\x08', '\x19', '\x79', '\xda', '\x12', '\x3d', '\x32', '\x33', '\xa0', - '\xb7', '\xe7', '\xc0', '\x23', '\x43', '\x25', '\x91', '\x72', '\x69', '\x2d', '\x85', '\x7b', '\x08', '\x12', '\x35', '\x15', - '\x73', '\x9e', '\x2e', '\x00', '\x7b', '\x5e', '\x6a', '\xef', '\x09', '\x47', '\x73', '\x2e', '\x53', '\xf5', '\xf9', '\x9c', - '\x59', '\xdc', '\x66', '\xeb', '\xf5', '\xbb', '\x5b', '\x1e', '\xb9', '\x11', '\x8a', '\x62', '\x21', '\xa4', '\x65', '\xed', - '\xc9', '\x52', '\x70', '\x44', '\x6b', '\xbe', '\xd7', '\xdc', '\xde', '\x65', '\x3d', '\x79', '\xa0', '\xdf', '\x3c', '\xd0', - '\x4a', '\x62', '\x1e', '\xb2', '\x0c', '\xd3', '\xd8', '\xc1', '\x5c', '\x69', '\xa0', '\x64', '\x4a', '\x5f', '\xac', '\xac', - '\xd0', '\x3a', '\x56', '\x5a', '\x83', '\xfc', '\x17', '\x34', '\xd1', '\xea', '\x1d', '\x18', '\x4e', '\x35', '\xc0', '\xae', - '\xa6', '\x8d', '\x6a', '\x72', '\x47', '\x33', '\xa8', '\x44', '\x92', '\xa1', '\x50', '\x06', '\xd2', '\x5c', '\x70', '\xd3', - '\xc1', '\x1a', '\x51', '\xa4', '\x89', '\x5a', '\x69', '\x06', '\x27', '\x12', '\x13', '\xa6', '\xf9', '\x12', '\x4d', '\x35', - '\xab', '\x99', '\x67', '\xb6', '\x93', '\x9f', '\x7f', '\x98', '\xdf', '\x12', '\x34', '\x7e', '\x5f', '\xa7', '\x1c', '\x95', - '\xae', '\x4f', '\xb1', '\x04', '\xec', '\x0c', '\x9b', '\xf0', '\x1f', '\x30', '\xfd', '\xcb', '\x4e', '\x40', '\xda', '\x17', - '\x1d', '\xd2', '\x6d', '\x6e', '\xce', '\x76', '\xfd', '\x7f', '\x92', '\x93', '\x1f', '\x67', '\x5f', '\xbc', '\xab', '\x5b', - '\x6c', '\x8b', '\xd0', '\x45', '\x81', '\x75', '\x24', '\xe0', '\x24', '\x38', '\xa5', '\xd7', '\x74', '\x56', '\x58', '\x2d', - '\xec', '\x11', '\xcc', '\x4a', '\xe0', '\xad', '\x7c', '\x55', '\x35', '\x15', '\x75', '\x03', '\xeb', '\x1e', '\xb1', '\xed', - '\x0c', '\x37', '\x11', '\x0a', '\x8f', '\x0a', '\xb7', '\x0f', '\xac', '\xe9', '\xb4', '\xb1', '\x7a', '\xd3', '\x66', '\xc8', - '\x35', '\x13', '\x70', '\x22', '\xf3', '\x11', '\xc4', '\x04', '\x74', '\x56', '\xca', '\xf2', '\x9d', '\xac', '\xc9', '\x1a', - '\xab', '\x19', '\x87', '\x05', '\xd9', '\x9f', '\xda', '\x31', '\x18', '\x43', '\x17', '\x60', '\x6a', '\xca', '\xe1', '\x82', - '\xd5', '\xa4', '\x64', '\x47', '\x80', '\x59', '\xd6', '\x58', '\xc9', '\xea', '\x11', '\x38', '\x20', '\xce', '\x2c', '\x28', - '\x41', '\xca', '\x3e', '\x8e', '\x1c', '\x9b', '\x30', '\x8e', '\x88', '\x1f', '\xc4', '\x2d', '\xd2', '\x8e', '\x4a', '\x66', - '\xa7', '\xb0', '\x74', '\xe2', '\x0b', '\x12', '\x46', '\xed', '\x0a', '\x44', '\x18', '\xc7', '\x24', '\xf0', '\xa3', '\xc8', - '\x09', '\x69', '\x6e', '\xbf', '\x56', '\xbb', '\x2f', '\xf9', '\xd2', '\xfb', '\x67', '\x7f', '\x49', '\x4b', '\x16', '\x16' }; + { '\x00', '\x00', '\x06', '\x4e', '\x78', '\xda', '\x95', '\x55', '\x5d', '\x4f', '\xc2', '\x30', '\x14', '\x7d', '\xf7', '\x57', + '\x34', '\x7b', '\x47', '\x36', '\x36', '\x44', '\x12', '\x3e', '\x42', '\x40', '\x12', '\x1f', '\x50', '\x64', '\x20', '\x8f', + '\xa6', '\x6e', '\x57', '\xa8', '\x76', '\x2d', '\x69', '\x2f', '\x28', '\xc6', '\x1f', '\x6f', '\xc7', '\xc8', '\x12', '\xa0', + '\x6c', '\xf0', '\xb4', '\xee', '\xf6', '\x9c', '\x9e', '\x73', '\x3f', '\xba', '\xb5', '\xba', '\x3f', '\x09', '\x27', '\x1b', + '\x50', '\x9a', '\x49', '\xd1', '\x76', '\xbc', '\x5b', '\xd7', '\x21', '\x20', '\x22', '\x19', '\x33', '\xb1', '\x68', '\x3b', + '\xb3', '\xe9', '\xb0', '\x72', '\xef', '\x74', '\x3b', '\xad', '\x17', '\xec', '\xc5', '\x1b', '\x2a', '\x22', '\x88', '\x07', + '\x32', '\xfa', '\x32', '\x7b', '\xe1', '\x56', '\x23', '\x24', '\xe4', '\x35', '\x27', '\x3a', '\x64', '\xa6', '\x41', '\xe5', + '\xef', '\xbe', '\x43', '\xfa', '\x52', '\x20', '\x65', '\xc2', '\x44', '\x76', '\xdb', '\x7d', '\x10', '\xa8', '\x28', '\x9f', + '\xb3', '\x78', '\x01', '\xd8', '\x76', '\x62', '\x73', '\x8e', '\x3f', '\x98', '\x33', '\x11', '\xcb', '\xef', '\xb7', '\xc4', + '\xe0', '\xb2', '\xa5', '\xd3', '\x69', '\xe5', '\x3c', '\x32', '\xe4', '\x92', '\xe2', '\xce', '\x88', '\x6b', '\xe2', '\xe1', + '\x8a', '\x33', '\x44', '\x13', '\x7e', '\x56', '\xcc', '\x9c', '\x65', '\x76', '\x52', '\xa1', '\xbf', '\x54', '\x68', '\x2d', + '\x30', '\x95', '\x3c', '\x87', '\xa9', '\xe4', '\x98', '\x9a', '\xc1', '\xf4', '\x14', '\x50', '\x32', '\xa5', '\xef', '\x3a', + '\x73', '\xb9', '\x56', '\x0a', '\xc4', '\xde', '\xd0', '\x58', '\xc9', '\x4f', '\x88', '\x70', '\xaa', '\x00', '\x0e', '\x3d', + '\x65', '\xae', '\xc9', '\x13', '\x4d', '\xa0', '\x10', '\x49', '\xfa', '\x5c', '\x6a', '\x88', '\x53', '\xc3', '\x55', '\x0b', + '\x6b', '\x40', '\x91', '\x86', '\x72', '\xad', '\x22', '\xb8', '\x92', '\x18', '\x46', '\x8a', '\xad', '\x50', '\x17', '\xb3', + '\xaa', '\x69', '\x66', '\x07', '\xf9', '\x79', '\xa7', '\xf9', '\xad', '\x40', '\xe1', '\xf6', '\x21', '\x66', '\x28', '\x55', + '\x79', '\x8a', '\x67', '\xc0', '\x56', '\xd9', '\x90', '\xfd', '\x82', '\xee', '\x34', '\x1a', '\x4d', '\x52', '\xf7', '\x3d', + '\xd2', '\xaa', '\x66', '\xef', '\xe6', '\xb9', '\x6f', '\xc9', '\xd5', '\xcd', '\x39', '\x36', '\x6f', '\x9b', '\x16', '\x33', + '\x22', '\x74', '\xb1', '\xc3', '\x5a', '\x12', '\xb0', '\x12', '\xac', '\xd6', '\x2f', '\x98', '\xac', '\x02', '\x63', '\x13', + '\xd0', '\x6b', '\x8e', '\x8f', '\xe2', '\x43', '\x96', '\x54', '\xd4', '\x0e', '\x2c', '\x6b', '\x62', '\x60', '\x95', '\x1b', + '\x73', '\x89', '\x17', '\xc9', '\x1d', '\x03', '\x4b', '\x26', '\x6d', '\x24', '\x97', '\x4a', '\xf7', '\x99', '\x8a', '\x38', + '\x5c', '\xc9', '\x9c', '\x00', '\x1f', '\x83', '\x4a', '\xce', '\xb2', '\x3c', '\x2b', '\x6b', '\xbc', '\xc1', '\x62', '\xc6', + '\x69', '\x41', '\x6a', '\x47', '\x05', '\x19', '\x81', '\xd6', '\x74', '\x01', '\xba', '\xa4', '\x1c', '\x36', '\x58', '\x49', + '\x4a', '\xe6', '\x0a', '\x44', '\x86', '\x35', '\x92', '\xe2', '\x8a', '\x2b', '\x50', '\xaf', '\x79', '\xc4', '\xf3', '\xea', + '\x2e', '\x09', '\xfc', '\x7b', '\xfb', '\x3d', '\xd8', '\x45', '\x9a', '\x6e', '\x40', '\x02', '\xf7', '\xce', '\x8a', '\x28', + '\x18', '\xb6', '\x01', '\xac', '\x70', '\x79', '\x41', '\xf3', '\xad', '\x38', '\x6b', '\x65', '\x33', '\xf9', '\xc0', '\xf7', + '\x49', '\xcd', '\x33', '\xd6', '\x5d', '\xab', '\xa3', '\x6a', '\xfe', '\x55', '\x36', '\xeb', '\x33', '\x7f', '\x83', '\xce', + '\xcd', '\x3f', '\x00', '\xe7', '\x29', '\xe5' }; + + // end paste QByteArray retVal( stateData, sizeof( stateData ) ); @@ -455,32 +475,35 @@ QByteArray RiuDockWidgetTools::defaultGeoMechDockState() //-------------------------------------------------------------------------------------------------- QByteArray RiuDockWidgetTools::defaultPlotDockState() { + // start paste + static const char stateData[] = - { '\x00', '\x00', '\x04', '\xf5', '\x78', '\xda', '\x9d', '\x54', '\x51', '\x6f', '\x82', '\x30', '\x10', '\x7e', '\xdf', '\xaf', - '\x68', '\xfa', '\xee', '\x04', '\x99', '\x13', '\x13', '\xd4', '\x18', '\x9c', '\x6f', '\x6e', '\x2e', '\xe8', '\x7c', '\x34', - '\x1d', '\x5c', '\x48', '\x23', '\xb4', '\xa4', '\x2d', '\x6e', '\x2e', '\xfb', '\xf1', '\x3b', '\x70', '\x61', '\x9b', '\x01', - '\xc5', '\x3d', '\xb5', '\xbd', '\xfb', '\xbe', '\xbb', '\xef', '\x72', '\x5f', '\xea', '\x4d', '\xde', '\xd3', '\x84', '\xec', - '\x41', '\x69', '\x2e', '\xc5', '\x88', '\xda', '\xb7', '\x16', '\x25', '\x20', '\x42', '\x19', '\x71', '\x11', '\x8f', '\xe8', - '\x7a', '\x35', '\xef', '\xb8', '\x74', '\x32', '\xf6', '\x9e', '\xcd', '\x34', '\xda', '\x33', '\x11', '\x42', '\x34', '\x93', - '\xe1', '\x0e', '\x73', '\xc1', '\x41', '\x1b', '\x48', '\xc9', '\x4b', '\x45', '\xa4', '\x64', '\xad', '\x41', '\x55', '\xef', - '\x1e', '\x25', '\xbe', '\x14', '\x86', '\x71', '\x81', '\x91', '\x32', '\xed', '\x83', '\x30', '\x8a', '\x25', '\x1b', '\x1e', - '\xc5', '\x60', '\x46', '\x34', '\xc2', '\x3a', '\xcb', '\x44', '\x9a', '\x0d', '\x17', '\x91', '\x7c', '\xdb', '\xa6', '\x88', - '\xfc', '\x79', '\xd2', '\xb1', '\x57', '\xb1', '\xc9', '\x3c', '\x91', '\xcc', '\x94', '\x72', '\x2c', '\x8c', '\x07', '\x59', - '\xc2', '\x8d', '\xc1', '\xf0', '\x93', '\xe2', '\x58', '\x11', '\x33', '\x45', '\xbb', '\xcf', '\xa2', '\x5d', '\x2e', '\xb0', - '\xae', '\xd3', '\x88', '\xe9', '\x54', '\x98', '\x1e', '\x62', '\xa6', '\x0a', '\x18', '\x59', '\xb1', '\x57', '\x5d', '\x50', - '\x88', '\x9f', '\x2b', '\x05', '\xe2', '\x97', '\x2c', '\xbd', '\x52', '\x00', '\xdb', '\x0c', '\x6f', '\x0b', '\x54', '\x51', - '\xa9', '\x3a', '\xaa', '\x27', '\x8f', '\x2c', '\x85', '\x0b', '\x58', '\xe2', '\x27', '\x52', '\x43', '\x54', '\x88', '\xee', - '\xd6', '\xf0', '\x56', '\x90', '\x66', '\x09', '\x33', '\xf0', '\x1f', '\x6e', '\x10', '\x2a', '\x9e', '\xb5', '\xe9', '\xda', - '\x2d', '\x86', '\xfc', '\x33', '\xaa', '\x7d', '\x3a', '\xaa', '\x92', '\x19', '\x28', '\x73', '\x78', '\x88', '\xb8', '\x91', - '\xaa', '\xcd', '\xbc', '\x67', '\x09', '\xb5', '\xed', '\x03', '\xfe', '\x01', '\x7a', '\xec', '\xda', '\x43', '\x72', '\xd7', - '\x77', '\x89', '\xd7', '\x3d', '\xbe', '\xf1', '\xfc', '\xde', '\xd2', '\x79', '\x81', '\x8d', '\x16', '\x41', '\x5f', '\xb0', - '\xb8', '\x64', '\x34', '\xac', '\xa5', '\x81', '\x56', '\x2b', '\xf1', '\x3a', '\xc3', '\xf4', '\x4e', '\x44', '\xce', '\x98', - '\x61', '\x81', '\xcc', '\x55', '\x08', '\x2d', '\x5d', '\x73', '\x9e', '\x70', '\x69', '\xfd', '\x79', '\x9a', '\x32', '\x75', - '\x58', '\x96', '\x24', '\xc1', '\x62', '\x50', '\x17', '\xd7', '\x7e', '\x2a', '\x78', '\x01', '\x5a', '\x23', '\x51', '\xb7', - '\x90', '\xda', '\x04', '\xbd', '\x20', '\x72', '\x8d', '\xa0', '\xc0', '\xb0', '\x70', '\x77', '\x8d', '\x45', '\x86', '\x16', - '\x71', '\xdc', '\x41', '\xad', '\x45', '\x8e', '\x11', '\xc7', '\xe9', '\x13', '\x7b', '\x70', '\x6f', '\xa1', '\x93', '\x9c', - '\x5a', '\x58', '\xb7', '\xfa', '\x36', '\xf0', '\xde', '\xf0', '\x69', '\x8d', '\x6f', '\xbe', '\x00', '\x0a', '\x89', '\xb7', - '\xa8' }; + { '\x00', '\x00', '\x04', '\xbd', '\x78', '\xda', '\x9d', '\x54', '\x51', '\x6f', '\x82', '\x30', '\x10', '\x7e', '\xdf', '\xaf', + '\x68', '\xfa', '\xee', '\x50', '\xc1', '\x89', '\x09', '\x62', '\x8c', '\xce', '\x37', '\x37', '\x17', '\x70', '\x3e', '\x9a', + '\x8e', '\x5e', '\x48', '\x33', '\x68', '\x49', '\x5b', '\xdd', '\x5c', '\xf6', '\xe3', '\x57', '\x60', '\x61', '\x9b', '\x01', + '\xc4', '\x3d', '\xd1', '\xbb', '\xfb', '\xbe', '\xde', '\x77', '\xf9', '\xae', '\x78', '\xb3', '\xf7', '\x34', '\x41', '\x47', + '\x90', '\x8a', '\x09', '\x3e', '\xc5', '\x83', '\xdb', '\x3e', '\x46', '\xc0', '\x23', '\x41', '\x19', '\x8f', '\xa7', '\x78', + '\x1b', '\xae', '\x7a', '\x2e', '\x9e', '\xf9', '\xde', '\x93', '\x9e', '\xd3', '\x23', '\xe1', '\x11', '\xd0', '\xa5', '\x88', + '\x5e', '\x4d', '\x2d', '\x38', '\x29', '\x0d', '\x29', '\x7a', '\xae', '\x88', '\x18', '\x6d', '\x15', '\xc8', '\x2a', '\xb6', + '\x31', '\x5a', '\x08', '\xae', '\x09', '\xe3', '\x26', '\x53', '\x94', '\x17', '\xc0', '\xb5', '\x24', '\xc9', '\x8e', '\xd1', + '\x18', '\xf4', '\x14', '\x53', '\x73', '\xcf', '\x26', '\x11', '\x7a', '\xc7', '\x38', '\x15', '\x6f', '\xfb', '\xd4', '\x20', + '\x7f', '\x42', '\xec', '\x7b', '\x15', '\x1b', '\xad', '\x12', '\x41', '\x74', '\x21', '\xa7', '\x6f', '\xf2', '\x41', '\x96', + '\x30', '\xad', '\x4d', '\xfa', '\x51', '\x32', '\x73', '\xa3', '\xa9', '\xe4', '\xed', '\x3e', '\xf3', '\x76', '\x07', '\xae', + '\xf3', '\xc6', '\x4d', '\x98', '\x5e', '\x85', '\x19', '\x1a', '\xcc', '\x5c', '\x02', '\x41', '\x21', '\x79', '\x51', '\xa5', + '\xd6', '\x83', '\x94', '\xc0', '\x7f', '\xc9', '\x52', '\xa1', '\x04', '\xd8', '\x67', '\xe6', '\xb4', '\x36', '\x2a', '\x2a', + '\x55', '\xa5', '\x7a', '\xf4', '\x40', '\x52', '\xb8', '\x80', '\x45', '\x8b', '\x44', '\x28', '\xa0', '\xb9', '\x68', '\xab', + '\x86', '\x17', '\x42', '\x9a', '\x25', '\x44', '\xc3', '\x7f', '\xb8', '\x41', '\x24', '\x59', '\xd6', '\xa5', '\xab', '\x95', + '\x0f', '\xf9', '\x67', '\xd4', '\xc1', '\xf9', '\xa8', '\x52', '\x64', '\x20', '\xf5', '\xe9', '\x9e', '\x32', '\x2d', '\x64', + '\x97', '\x79', '\x5b', '\x09', '\xb5', '\xed', '\x03', '\xf6', '\x01', '\xca', '\x1f', '\x4f', '\x5c', '\xe4', '\x8c', '\x27', + '\xc8', '\xb3', '\xca', '\xd8', '\x7c', '\xbf', '\x5d', '\x6a', '\x17', '\xd8', '\xb8', '\x22', '\x66', '\x2f', '\x48', '\x5c', + '\x30', '\x1a', '\x6c', '\x69', '\xa0', '\xd5', '\x4a', '\xbc', '\x6e', '\x61', '\x86', '\x67', '\x22', '\x97', '\x44', '\x93', + '\x40', '\x1c', '\x64', '\x04', '\x1d', '\xb7', '\xa6', '\x9d', '\x70', '\xc9', '\xfe', '\x43', '\x9a', '\x12', '\x79', '\xda', + '\x14', '\x24', '\x4e', '\x62', '\x90', '\x57', '\xdb', '\xbe', '\x06', '\xa5', '\x0c', '\x51', '\x75', '\x90', '\xda', '\x04', + '\x6d', '\xb1', '\xda', '\x9d', '\xd8', '\xc8', '\x76', '\x9d', '\x5a', '\xab', '\xcb', '\x8c', '\x3d', '\x72', '\xd0', '\x60', + '\x3c', '\xba', '\x43', '\x8e', '\xed', '\xd6', '\xc2', '\xac', '\xea', '\xf9', '\x9b', '\x73', '\xc3', '\xcf', '\xc7', '\xbf', + '\xf9', '\x02', '\x51', '\x97', '\xa4', '\x18' }; + + // end paste QByteArray retVal( stateData, sizeof( stateData ) ); @@ -492,34 +515,38 @@ QByteArray RiuDockWidgetTools::defaultPlotDockState() //-------------------------------------------------------------------------------------------------- QByteArray RiuDockWidgetTools::hideAllDocking3DState() { + // start paste + static const char stateData[] = - { '\x00', '\x00', '\x06', '\x11', '\x78', '\xda', '\x95', '\x54', '\x4d', '\x53', '\xc2', '\x30', '\x10', '\xbd', '\xfb', '\x2b', - '\x32', '\xbd', '\x2b', '\x05', '\xd4', '\xf1', '\xc0', '\xc7', '\x30', '\xa0', '\x33', '\x1e', '\x50', '\xb4', '\x20', '\x47', - '\x27', '\xa6', '\x2b', '\x46', '\xd3', '\x84', '\xd9', '\x2c', '\xf8', '\x31', '\xfe', '\x78', '\xb7', '\x05', '\x19', '\x29', - '\xa5', '\x95', '\x53', '\xd3', '\xdd', '\xf7', '\xf2', '\xde', '\x26', '\xbb', '\x69', '\x75', '\x3f', '\x12', '\x23', '\x96', - '\x80', '\x5e', '\x3b', '\xdb', '\x0e', '\xea', '\x27', '\x61', '\x20', '\xc0', '\x2a', '\x17', '\x6b', '\x3b', '\x6b', '\x07', - '\x93', '\xf1', '\xd5', '\xf1', '\x45', '\xd0', '\xed', '\xb4', '\xee', '\xa8', '\x17', '\x2f', '\xa5', '\x55', '\x10', '\x0f', - '\x9c', '\x7a', '\xe3', '\x5c', '\xf4', '\xe9', '\x09', '\x12', '\xf1', '\xb0', '\x21', '\x06', '\x62', '\xe2', '\x01', '\x37', - '\xff', '\x8d', '\x40', '\xf4', '\x9d', '\x25', '\xa9', '\x2d', '\x47', '\xb2', '\x74', '\x1f', '\x2c', '\xa1', '\x34', '\x53', - '\x1d', '\xcf', '\x80', '\xda', '\x41', '\xcc', '\xfb', '\x34', '\x07', '\x53', '\x6d', '\x63', '\xf7', '\xfe', '\x98', '\x30', - '\x6e', '\xb5', '\x0c', '\x3a', '\xad', '\x0d', '\x4f', '\x5c', '\x19', '\x27', '\x29', '\x33', '\x12', '\x72', '\x3c', '\x9a', - '\x1b', '\x4d', '\xc4', '\xe1', '\x5b', '\xd4', '\xbc', '\x17', '\x67', '\x52', '\xa1', '\xef', '\x54', '\x68', '\x61', '\x29', - '\x95', '\xdc', '\x87', '\x39', '\xde', '\xc2', '\xf4', '\x10', '\xa4', '\x18', '\xcb', '\x27', '\xb6', '\xd5', '\xe4', '\xc4', - '\x02', '\x11', '\xec', '\xda', '\x50', '\xa4', '\x50', '\xcf', '\xc9', '\x8f', '\x11', '\x60', '\xdb', '\xd3', '\xca', '\xb5', - '\xb8', '\x91', '\x09', '\xac', '\x90', '\x23', '\x74', '\xaf', '\xa0', '\x28', '\x8f', '\x14', '\x7d', '\xe3', '\x3c', '\xc4', - '\x69', '\xc1', '\xb5', '\x02', '\xd6', '\x40', '\x92', '\x8c', '\xdc', '\x02', '\x15', '\x1c', '\x48', '\xdc', '\x63', '\x6c', - '\x9b', '\x55', '\x4b', '\x2b', '\xdb', '\xaa', '\xaf', '\x9e', '\xab', '\x8f', '\x5d', '\xcf', '\x01', '\xe9', '\xf3', '\x32', - '\xd6', '\xe4', '\xb0', '\xba', '\xc4', '\x3d', '\xe0', '\x42', '\xd9', '\x48', '\x7f', '\x81', '\xef', '\x84', '\xa2', '\xde', - '\x38', '\x3b', '\x17', '\xad', '\xda', '\xea', '\x97', '\xbf', '\xeb', '\x1b', '\x39', '\xf8', '\x6e', '\xf2', '\xde', '\x8b', - '\x9a', '\x85', '\x3b', '\x44', '\xce', '\x32', '\x6c', '\x81', '\xff', '\x42', '\xc2', '\xaf', '\xf3', '\xf0', '\xaf', '\xf3', - '\x8a', '\xc6', '\x6a', '\x96', '\x1b', '\xbb', '\x07', '\xbf', '\x30', '\x74', '\x6d', '\x9f', '\x5d', '\xc5', '\x81', '\x16', - '\x03', '\xab', '\xee', '\xf0', '\x34', '\x27', '\x37', '\x74', '\x2f', '\xe8', '\xfb', '\x1a', '\x95', '\x81', '\x91', '\x71', - '\xf4', '\x2f', '\xcd', '\x3c', '\xb0', '\xa2', '\xdb', '\x4a', '\x24', '\x2a', '\x98', '\xf7', '\x60', '\x46', '\x80', '\xc9', - '\x81', '\xac', '\xd1', '\xb2', '\xc2', '\xe1', '\xee', '\xa9', '\xe4', '\x27', '\x77', '\xc2', '\xac', '\x88', '\xa4', '\x7a', - '\xab', '\x38', '\x8f', '\x21', '\x78', '\x2f', '\x67', '\xe0', '\x0f', '\x71', '\x87', '\x4e', '\x31', '\x6b', '\xe8', '\x6c', - '\xf9', '\x1c', '\xec', '\x10', '\x0b', '\x3d', '\x95', '\xce', '\x4e', '\x28', '\x78', '\x78', '\xc2', '\xe2', '\xe9', '\xc9', - '\x22', '\xd9', '\x70', '\x95', '\x01', '\x4a', '\x76', '\xa8', '\x6d', '\x1e', '\x56', '\x5e', '\xef', '\x79', '\xd0', '\x3b', - '\x47', '\x3f', '\x6f', '\xaf', '\x16', '\x81' }; + { '\x00', '\x00', '\x06', '\x51', '\x78', '\xda', '\x95', '\x95', '\x4d', '\x53', '\xc2', '\x30', '\x10', '\x86', '\xef', '\xfe', + '\x8a', '\x4c', '\xef', '\x48', '\x01', '\x65', '\x3c', '\xf0', '\x31', '\x4c', '\x91', '\x19', '\x0f', '\x28', '\x5a', '\x90', + '\xa3', '\x13', '\xdb', '\x15', '\xa2', '\x69', '\xc2', '\x24', '\x0b', '\x8a', '\xe3', '\x8f', '\x37', '\x6d', '\xb1', '\x23', + '\x25', '\x6d', '\xe9', '\xa9', '\x69', '\xf2', '\xbe', '\xd9', '\x67', '\xb3', '\x9b', '\xb6', '\x37', '\xfc', '\x8a', '\x38', + '\xd9', '\x81', '\xd2', '\x4c', '\x8a', '\xbe', '\xd3', '\xba', '\x74', '\x1d', '\x02', '\x22', '\x90', '\x21', '\x13', '\xab', + '\xbe', '\xb3', '\x98', '\x4f', '\x1a', '\x37', '\xce', '\x70', '\xd0', '\x7b', '\xc4', '\x51', '\xb8', '\xa3', '\x22', '\x80', + '\x70', '\x2c', '\x83', '\x0f', '\xb3', '\xe6', '\xef', '\x35', '\x42', '\x44', '\x9e', '\x33', '\xa3', '\x43', '\x16', '\x1a', + '\x54', '\xf6', '\xde', '\x71', '\x88', '\x27', '\x05', '\x52', '\x26', '\xcc', '\x4c', '\xb2', '\xec', '\x81', '\x40', '\x45', + '\xf9', '\x92', '\x85', '\x2b', '\xc0', '\xbe', '\x13', '\x9a', '\x7d', '\x3a', '\xe3', '\x25', '\x13', '\xa1', '\xfc', '\x7c', + '\x89', '\x8c', '\x2e', '\x1d', '\x3a', '\x83', '\x5e', '\xe6', '\x23', '\x13', '\x2e', '\x29', '\x26', '\x20', '\xae', '\x99', + '\xf7', '\x37', '\x9c', '\x21', '\x9a', '\xe9', '\x07', '\xc5', '\xcc', '\x5e', '\x66', '\x25', '\x0e', '\xf4', '\x13', '\x07', + '\xda', '\x0a', '\x8c', '\x43', '\x16', '\x69', '\x1a', '\x99', '\xa6', '\x6d', '\x34', '\x23', '\x05', '\x94', '\xcc', '\xe9', + '\xab', '\x4e', '\x29', '\xb7', '\x4a', '\x81', '\x38', '\x00', '\xf9', '\x81', '\x62', '\x1b', '\xd4', '\x73', '\x05', '\x70', + '\xcc', '\x94', '\x52', '\x93', '\x7b', '\x1a', '\x41', '\xaa', '\x9c', '\x29', '\xf9', '\x0e', '\x01', '\xe6', '\x95', '\xc4', + '\xe3', '\x52', '\x43', '\x18', '\x27', '\xdc', '\xb4', '\xb8', '\xc6', '\x14', '\xa9', '\x2f', '\xb7', '\x2a', '\x80', '\x9a', + '\xc6', '\x02', '\xb0', '\x63', '\x57', '\x33', '\xce', '\xec', '\x28', '\xbf', '\x56', '\x2e', '\x3f', '\x43', '\xbd', '\x01', + '\x85', '\xfb', '\xdb', '\x90', '\xa1', '\x54', '\xd5', '\x29', '\x16', '\x88', '\xad', '\x61', '\x7d', '\xf6', '\x0d', '\x7a', + '\xe0', '\x92', '\x56', '\xa7', '\xd5', '\x25', '\xbd', '\x66', '\xfa', '\x6a', '\x9e', '\x87', '\x8a', '\xd4', '\xae', '\x4d', + '\x9e', '\xdd', '\xd6', '\x2c', '\xa6', '\x43', '\xe8', '\x2a', '\xd1', '\x5a', '\xf8', '\xad', '\x86', '\x3f', '\x72', '\xf7', + '\x3f', '\xf9', '\x19', '\x8d', '\x55', '\x02', '\xf6', '\x04', '\x7a', '\xcb', '\xf1', '\x4e', '\xbc', '\xc9', '\x8a', '\x03', + '\xb5', '\x0b', '\xab', '\x6a', '\x78', '\x95', '\x0b', '\x37', '\x95', '\x6b', '\xa5', '\x3d', '\xa6', '\x02', '\x0e', '\x33', + '\x2e', '\xf1', '\xac', '\x98', '\x79', '\x61', '\x45', '\xb7', '\x95', '\x84', '\xa8', '\x70', '\x3e', '\x01', '\x9f', '\x81', + '\x8a', '\x6a', '\xba', '\x66', '\xbb', '\x0a', '\xc2', '\xd3', '\x53', '\x69', '\x9f', '\x76', '\x76', '\x00', '\x5a', '\x4f', + '\xa5', '\x38', '\xa3', '\xb3', '\xa7', '\x46', '\x49', '\x57', '\xa0', '\xeb', '\x20', '\x16', '\xee', '\x5f', '\x7a', '\x19', + '\x5c', '\xd2', '\xbe', '\xee', '\xba', '\xf6', '\xeb', '\x90', '\xcc', '\x24', '\xb7', '\xc5', '\x2e', '\x28', '\x69', '\xb9', + '\x31', '\x6c', '\x70', '\x7d', '\x46', '\xf5', '\xad', '\xba', '\x52', '\xe0', '\x04', '\xd7', '\xce', '\xd3', '\xcc', '\x3e', + '\xcc', '\x66', '\x5c', '\xf0', '\x43', '\x18', '\x5c', '\xfc', '\x02', '\x10', '\x78', '\x2c', '\xb5' }; + + // end paste QByteArray retVal( stateData, sizeof( stateData ) ); @@ -531,31 +558,34 @@ QByteArray RiuDockWidgetTools::hideAllDocking3DState() //-------------------------------------------------------------------------------------------------- QByteArray RiuDockWidgetTools::hideAllDockingPlotState() { + // start paste + static const char stateData[] = - { '\x00', '\x00', '\x04', '\xe7', '\x78', '\xda', '\x9d', '\x94', '\x51', '\x6f', '\x82', '\x30', '\x14', '\x85', '\xdf', '\xf7', - '\x2b', '\x9a', '\xbe', '\x3b', '\x10', '\xb3', '\xc5', '\x07', '\xc4', '\x18', '\x9c', '\x6f', '\x6e', '\x2e', '\xe0', '\x7c', - '\x34', '\x1d', '\xdc', '\x90', '\x46', '\x68', '\x49', '\x5b', '\xdc', '\x5c', '\xf6', '\xe3', '\x77', '\x41', '\xc5', '\xe9', - '\xc0', '\xa9', '\x4f', '\xd0', '\xf6', '\x9c', '\x9e', '\xef', '\x72', '\x6f', '\x70', '\x87', '\x9f', '\x59', '\x4a', '\xd6', - '\xa0', '\x34', '\x97', '\x62', '\x40', '\xbb', '\xf7', '\x36', '\x25', '\x20', '\x22', '\x19', '\x73', '\x91', '\x0c', '\xe8', - '\x3c', '\x9c', '\x74', '\xfa', '\x74', '\xe8', '\xb9', '\xaf', '\x66', '\x14', '\xaf', '\x99', '\x88', '\x20', '\x1e', '\xcb', - '\x68', '\x85', '\x67', '\xc1', '\x46', '\x1b', '\xc8', '\xc8', '\x5b', '\x6d', '\xa4', '\x64', '\xae', '\x41', '\xd5', '\x6b', - '\x87', '\x12', '\x5f', '\x0a', '\xc3', '\xb8', '\xc0', '\x9d', '\xea', '\xd8', '\x07', '\x61', '\x14', '\x4b', '\x17', '\x3c', - '\x4e', '\xc0', '\x0c', '\x68', '\x8c', '\xf7', '\xcc', '\x52', '\x69', '\x16', '\x5c', '\xc4', '\xf2', '\x63', '\x99', '\xa1', - '\xf2', '\xb0', '\xa4', '\x9e', '\x5b', '\xbb', '\xc9', '\x24', '\x95', '\xcc', '\x54', '\x38', '\x36', '\xee', '\x07', '\x79', - '\xca', '\x8d', '\xc1', '\xed', '\x17', '\xc5', '\xf1', '\x46', '\x3c', '\x29', '\xe3', '\xbe', '\xcb', '\xb8', '\x42', '\xe0', - '\xbd', '\xbd', '\x56', '\x4d', '\xa7', '\xd6', '\x38', '\xa8', '\x19', '\x29', '\x60', '\x24', '\x64', '\xef', '\xba', '\xb4', - '\x10', '\xbf', '\x50', '\x0a', '\xc4', '\x0e', '\x2b', '\x88', '\x14', '\xcf', '\x8d', '\x0e', '\x15', '\xc0', '\x32', '\x47', - '\xa6', '\x29', '\x72', '\xd4', '\x5c', '\x5b', '\x7e', '\xf2', '\xcc', '\x32', '\x38', '\x14', '\xd1', '\xa8', '\x25', '\x7e', - '\x2a', '\x35', '\xc4', '\x65', '\xf1', '\x56', '\x83', '\x2f', '\x84', '\x2c', '\x4f', '\x99', '\x81', '\x5b', '\xbc', '\x67', - '\x08', '\x8f', '\x9d', '\x56', '\x59', '\xe6', '\x51', '\xb1', '\xdd', '\x93', '\x62', '\x67', '\x4a', '\xe6', '\xa0', '\xcc', - '\xe6', '\x29', '\xe6', '\x46', '\xaa', '\x4b', '\xea', '\x3d', '\x6b', '\x68', '\x8c', '\x0f', '\xf8', '\x17', '\x68', '\xcf', - '\x26', '\x5d', '\xa7', '\xdf', '\x23', '\xae', '\xb5', '\x5d', '\xe2', '\x73', '\xd7', '\xa6', '\xf3', '\x7c', '\xad', '\x33', - '\x82', '\x83', '\xc1', '\x92', '\xca', '\xd1', '\xd2', '\x95', '\x16', '\xdb', '\x9e', '\xd0', '\xfe', '\x4d', '\x78', '\xdd', - '\xc4', '\x38', '\xa7', '\x13', '\x53', '\x64', '\x19', '\x53', '\x9b', '\x59', '\xf5', '\x2d', '\x04', '\x4b', '\x40', '\x35', - '\x31', '\x8d', '\x99', '\x61', '\x81', '\x2c', '\x54', '\x04', '\xb7', '\xb4', '\xfc', '\x6f', '\xc4', '\x7f', '\xad', '\x3e', - '\xa5', '\x9c', '\x63', '\x4e', '\x60', '\x58', '\xb4', '\xba', '\xa0', '\xcb', '\x53', '\xd0', '\x1a', '\x43', '\xf4', '\x95', - '\x94', '\xad', '\x11', '\xb7', '\xcd', '\xc5', '\x5e', '\xe0', '\x3c', '\x3c', '\xda', '\xc4', '\x6e', '\x94', '\x58', '\xf5', - '\x8f', '\x02', '\xdf', '\x5b', '\x7e', '\x53', '\xde', '\xdd', '\x0f', '\x36', '\x41', '\xb3', '\x2a' }; + { '\x00', '\x00', '\x04', '\xae', '\x78', '\xda', '\x9d', '\x54', '\xc1', '\x6e', '\x82', '\x40', '\x10', '\xbd', '\xf7', '\x2b', + '\x36', '\x7b', '\xb7', '\x20', '\xa6', '\x8d', '\x07', '\xc4', '\x18', '\xad', '\x37', '\x5b', '\x1b', '\xb0', '\x1e', '\xcd', + '\x96', '\x9d', '\x90', '\x4d', '\x61', '\x97', '\xec', '\x2e', '\xb6', '\x36', '\xfd', '\xf8', '\x0e', '\xa8', '\x58', '\x2d', + '\x18', '\xf5', '\x04', '\x33', '\xf3', '\xde', '\xce', '\x1b', '\xde', '\xb0', '\xfe', '\xf0', '\x2b', '\x4b', '\xc9', '\x1a', + '\xb4', '\x11', '\x4a', '\x0e', '\x68', '\xf7', '\xde', '\xa5', '\x04', '\x64', '\xac', '\xb8', '\x90', '\xc9', '\x80', '\x2e', + '\xa2', '\x69', '\xa7', '\x4f', '\x87', '\x81', '\xff', '\x6a', '\x47', '\x7c', '\xcd', '\x64', '\x0c', '\x7c', '\xa2', '\xe2', + '\x0f', '\xac', '\x85', '\x1b', '\x63', '\x21', '\x23', '\x6f', '\x35', '\x91', '\x92', '\x85', '\x01', '\x5d', '\xc7', '\x3d', + '\x4a', '\xc6', '\x4a', '\x5a', '\x26', '\x24', '\x66', '\xaa', '\xf2', '\x18', '\xa4', '\xd5', '\x2c', '\x5d', '\x0a', '\x9e', + '\x80', '\x1d', '\x50', '\x8e', '\xe7', '\xcc', '\x53', '\x65', '\x97', '\x42', '\x72', '\xf5', '\xb9', '\xca', '\x10', '\x79', + '\x08', '\x69', '\xe0', '\xd7', '\x6c', '\x32', '\x4d', '\x15', '\xb3', '\x95', '\x1c', '\x17', '\xf3', '\x61', '\x9e', '\x0a', + '\x6b', '\x31', '\xfd', '\xa2', '\x05', '\x9e', '\x88', '\x95', '\xb2', '\xdd', '\x4f', '\xd9', '\xae', '\x90', '\xb6', '\x6c', + '\xdc', '\x86', '\xe9', '\xd4', '\x18', '\x0f', '\x31', '\x23', '\x0d', '\x8c', '\x44', '\xec', '\xdd', '\x6c', '\xb5', '\x16', + '\x5a', '\x83', '\xdc', '\xc9', '\x0a', '\x63', '\x2d', '\x72', '\x6b', '\x22', '\x0d', '\xb0', '\xca', '\x51', '\xd3', '\x0c', + '\x75', '\xd4', '\xba', '\xb6', '\xfa', '\xc9', '\x33', '\xcb', '\xe0', '\x30', '\x44', '\x23', '\x96', '\x8c', '\x53', '\x65', + '\x80', '\x97', '\xc3', '\x3b', '\x0d', '\xbc', '\x08', '\xb2', '\x3c', '\x65', '\x16', '\x6e', '\xe1', '\x9e', '\x51', '\x78', + '\xcc', '\x74', '\xca', '\x31', '\x8f', '\x86', '\xed', '\x9e', '\x0c', '\x3b', '\xd7', '\x2a', '\x07', '\x6d', '\x37', '\x4f', + '\x5c', '\x58', '\xa5', '\x2f', '\x99', '\xf7', '\x2c', '\xa1', '\xb1', '\x7d', '\x28', '\xbe', '\xc1', '\x04', '\x2e', '\xe9', + '\x7a', '\xfd', '\x1e', '\xf1', '\x9d', '\x6d', '\x88', '\xcf', '\x9d', '\x4d', '\xe7', '\xf5', '\xb5', '\xee', '\x08', '\x2e', + '\x06', '\x4b', '\x2a', '\x46', '\x8b', '\x2b', '\x2d', '\xb4', '\xbd', '\x42', '\xf7', '\xaf', '\xc2', '\xeb', '\x36', '\xc6', + '\x3b', '\xdd', '\x98', '\x22', '\xcb', '\x98', '\xde', '\xcc', '\xab', '\x6f', '\x21', '\x59', '\x02', '\xba', '\x49', '\xd3', + '\x84', '\x59', '\x16', '\xaa', '\x42', '\xc7', '\x70', '\x8b', '\xe5', '\xff', '\x5b', '\x5c', '\x6b', '\xf5', '\x0c', '\x8c', + '\x41', '\xa2', '\xb9', '\xc0', '\xe4', '\x36', '\xe8', '\x6d', '\xf6', '\xee', '\x01', '\xde', '\xc3', '\xa3', '\x4b', '\xdc', + '\x46', '\x88', '\x53', '\xff', '\xef', '\xf8', '\xde', '\x72', '\xdb', '\x04', '\x77', '\xbf', '\xe8', '\x23', '\x9f', '\x33' }; + + // end paste QByteArray retVal( stateData, sizeof( stateData ) ); diff --git a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h index 6a4f4cb801..48a9bc9b8c 100644 --- a/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h +++ b/ApplicationLibCode/UserInterface/RiuDockWidgetTools.h @@ -51,6 +51,7 @@ public: static QString mainWindowResultInfoName(); static QString mainWindowProcessMonitorName(); static QString mainWindowResultPlotName(); + static QString mainWindowDepthPlotName(); static QString mainWindowRelPermPlotName(); static QString mainWindowPvtPlotName(); static QString mainWindowMessagesName(); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp index 22001e39aa..19c9d44676 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.cpp @@ -50,6 +50,7 @@ #include "RimViewLinkerCollection.h" #include "RimViewWindow.h" +#include "RiuDepthQwtPlot.h" #include "RiuDockWidgetTools.h" #include "RiuMdiArea.h" #include "RiuMdiSubWindow.h" @@ -256,6 +257,7 @@ void RiuMainWindow::cleanupGuiCaseClose() setResultInfo( "" ); m_resultQwtPlot->deleteAllCurves(); + m_depthQwtPlot->deleteAllCurves(); if ( m_relPermPlotPanel ) m_relPermPlotPanel->clearPlot(); if ( m_pvtPlotPanel ) m_pvtPlotPanel->clearPlot(); if ( m_mohrsCirclePlot ) m_mohrsCirclePlot->clearPlot(); @@ -814,6 +816,14 @@ void RiuMainWindow::createDockPanels() bottomWidgets.push_back( dockWidget ); } + { + auto dockWidget = RiuDockWidgetTools::createDockWidget( "Depth Plot", RiuDockWidgetTools::mainWindowDepthPlotName(), dockManager() ); + + m_depthQwtPlot = new RiuDepthQwtPlot( dockWidget ); + dockWidget->setWidget( m_depthQwtPlot ); + rightWidgets.push_back( dockWidget ); + } + ads::CDockAreaWidget* leftArea = addTabbedWidgets( leftWidgets, ads::DockWidgetArea::LeftDockWidgetArea ); ads::CDockAreaWidget* rightArea = addTabbedWidgets( rightWidgets, ads::DockWidgetArea::RightDockWidgetArea ); ads::CDockAreaWidget* bottomArea = @@ -1149,6 +1159,14 @@ RiuResultQwtPlot* RiuMainWindow::resultPlot() return m_resultQwtPlot; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuDepthQwtPlot* RiuMainWindow::depthPlot() +{ + return m_depthQwtPlot; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1820,6 +1838,10 @@ void RiuMainWindow::applyFontSizesToDockedPlots() { m_resultQwtPlot->applyFontSizes( true ); } + if ( m_depthQwtPlot ) + { + m_depthQwtPlot->applyFontSizes( true ); + } if ( m_mohrsCirclePlot ) { m_mohrsCirclePlot->applyFontSizes( true ); diff --git a/ApplicationLibCode/UserInterface/RiuMainWindow.h b/ApplicationLibCode/UserInterface/RiuMainWindow.h index 780d7e339f..1383b6e18f 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindow.h +++ b/ApplicationLibCode/UserInterface/RiuMainWindow.h @@ -49,6 +49,7 @@ class RiuMessagePanel; class RiuProcessMonitor; class RiuResultInfoPanel; class RiuResultQwtPlot; +class RiuDepthQwtPlot; class RiuRelativePermeabilityPlotPanel; class RiuPvtPlotPanel; class RiuMohrsCirclePlot; @@ -123,6 +124,7 @@ public: QList subWindowList( QMdiArea::WindowOrder order ); RiuResultQwtPlot* resultPlot(); + RiuDepthQwtPlot* depthPlot(); RiuRelativePermeabilityPlotPanel* relativePermeabilityPlotPanel(); RiuPvtPlotPanel* pvtPlotPanel(); RiuMohrsCirclePlot* mohrsCirclePlot(); @@ -184,6 +186,7 @@ private: QPointer m_messagePanel; RiuResultQwtPlot* m_resultQwtPlot; + RiuDepthQwtPlot* m_depthQwtPlot; RiuMohrsCirclePlot* m_mohrsCirclePlot; RiuRelativePermeabilityPlotPanel* m_relPermPlotPanel; RiuPvtPlotPanel* m_pvtPlotPanel; diff --git a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp index a5a20ceef4..34725ca7f0 100644 --- a/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp +++ b/ApplicationLibCode/UserInterface/RiuMainWindowBase.cpp @@ -52,7 +52,7 @@ #include #include -#define DOCKSTATE_VERSION 2 +#define DOCKSTATE_VERSION 3 //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp index 0761991c91..bbda2104b7 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.cpp @@ -319,3 +319,29 @@ QList RiuQwtPlotTools::createLegendData( const std::vectoritemList( QwtPlotItem::Rtti_PlotGrid ); + for ( QwtPlotItem* plotItem : plotItems ) + { + auto* grid = static_cast( plotItem ); + if ( axis == QwtAxis::XTop || axis == QwtAxis::XBottom ) + { + grid->setXAxis( axis ); + grid->enableX( enableMajor ); + grid->enableXMin( enableMinor ); + } + else + { + grid->setYAxis( axis ); + grid->enableY( enableMajor ); + grid->enableYMin( enableMinor ); + } + grid->setMajorPen( Qt::lightGray, 1.0, Qt::SolidLine ); + grid->setMinorPen( Qt::lightGray, 1.0, Qt::DashLine ); + } +} diff --git a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.h b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.h index 058c0fbb46..a554a75851 100644 --- a/ApplicationLibCode/UserInterface/RiuQwtPlotTools.h +++ b/ApplicationLibCode/UserInterface/RiuQwtPlotTools.h @@ -70,6 +70,8 @@ public: static QwtAxis::Position toQwtPlotAxisEnum( RiaDefines::PlotAxis riaPlotAxis ); static RiaDefines::PlotAxis fromQwtPlotAxis( QwtAxis::Position ); + + static void enableGridLines( QwtPlot* plot, QwtAxis::Position axis, bool enableMajor, bool enableMinor ); }; //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp index ca3078d103..f49c4d1513 100644 --- a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp +++ b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp @@ -20,6 +20,7 @@ #include "RiuSelectionChangedHandler.h" #include "RigCaseCellResultsData.h" +#include "RigDepthResultAccessor.h" #include "RigEclipseCaseData.h" #include "RigFemPartCollection.h" #include "RigFemPartResultsCollection.h" @@ -38,6 +39,7 @@ #include "RimProject.h" #include "Riu3dSelectionManager.h" +#include "RiuDepthQwtPlot.h" #include "RiuFemResultTextBuilder.h" #include "RiuMainWindow.h" #include "RiuMohrsCirclePlot.h" @@ -82,6 +84,7 @@ void RiuSelectionChangedHandler::handleSelectionDeleted() const if ( !RiuMainWindow::instance() ) return; RiuMainWindow::instance()->resultPlot()->deleteAllCurves(); + RiuMainWindow::instance()->depthPlot()->deleteAllCurves(); RiuRelativePermeabilityPlotUpdater* relPermPlotUpdater = RiuMainWindow::instance()->relativePermeabilityPlotPanel()->plotUpdater(); relPermPlotUpdater->updateOnSelectionChanged( nullptr ); @@ -104,7 +107,9 @@ void RiuSelectionChangedHandler::handleItemAppended( const RiuSelectionItem* ite { if ( !RiuMainWindow::instance() ) return; - addCurveFromSelectionItem( item ); + addResultCurveFromSelectionItem( item ); + + addDepthCurveFromSelectionItem( item ); RiuRelativePermeabilityPlotUpdater* relPermUpdater = RiuMainWindow::instance()->relativePermeabilityPlotPanel()->plotUpdater(); relPermUpdater->updateOnSelectionChanged( item ); @@ -128,6 +133,7 @@ void RiuSelectionChangedHandler::handleSetSelectedItem( const RiuSelectionItem* if ( !RiuMainWindow::instance() ) return; RiuMainWindow::instance()->resultPlot()->deleteAllCurves(); + RiuMainWindow::instance()->depthPlot()->deleteAllCurves(); RiuMohrsCirclePlot* mohrsCirclePlot = RiuMainWindow::instance()->mohrsCirclePlot(); if ( mohrsCirclePlot ) mohrsCirclePlot->clearPlot(); @@ -138,7 +144,7 @@ void RiuSelectionChangedHandler::handleSetSelectedItem( const RiuSelectionItem* //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuSelectionChangedHandler::addCurveFromSelectionItem( const RiuEclipseSelectionItem* eclipseSelectionItem ) const +void RiuSelectionChangedHandler::addResultCurveFromSelectionItem( const RiuEclipseSelectionItem* eclipseSelectionItem ) const { RimEclipseResultDefinition* eclResDef = eclipseSelectionItem->m_resultDefinition; if ( !eclResDef ) return; @@ -184,7 +190,7 @@ void RiuSelectionChangedHandler::addCurveFromSelectionItem( const RiuEclipseSele //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuSelectionChangedHandler::addCurveFromSelectionItem( const RiuGeoMechSelectionItem* geomSelectionItem ) const +void RiuSelectionChangedHandler::addResultCurveFromSelectionItem( const RiuGeoMechSelectionItem* geomSelectionItem ) const { RimGeoMechResultDefinition* geomResDef = geomSelectionItem->m_resultDefinition; @@ -271,40 +277,40 @@ void RiuSelectionChangedHandler::addCurveFromSelectionItem( const RiuGeoMechSele //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuSelectionChangedHandler::addCurveFromSelectionItem( const Riu2dIntersectionSelectionItem* selectionItem ) const +void RiuSelectionChangedHandler::addResultCurveFromSelectionItem( const Riu2dIntersectionSelectionItem* selectionItem ) const { if ( selectionItem->eclipseSelectionItem() ) { - addCurveFromSelectionItem( selectionItem->eclipseSelectionItem() ); + addResultCurveFromSelectionItem( selectionItem->eclipseSelectionItem() ); } else if ( selectionItem->geoMechSelectionItem() ) { - addCurveFromSelectionItem( selectionItem->geoMechSelectionItem() ); + addResultCurveFromSelectionItem( selectionItem->geoMechSelectionItem() ); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuSelectionChangedHandler::addCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const +void RiuSelectionChangedHandler::addResultCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const { if ( itemAdded->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT ) { const RiuEclipseSelectionItem* eclipseSelectionItem = static_cast( itemAdded ); - addCurveFromSelectionItem( eclipseSelectionItem ); + addResultCurveFromSelectionItem( eclipseSelectionItem ); } else if ( itemAdded->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT ) { const RiuGeoMechSelectionItem* geomSelectionItem = static_cast( itemAdded ); - addCurveFromSelectionItem( geomSelectionItem ); + addResultCurveFromSelectionItem( geomSelectionItem ); } else if ( itemAdded->type() == RiuSelectionItem::INTERSECTION_SELECTION_OBJECT ) { const Riu2dIntersectionSelectionItem* _2dSelectionItem = static_cast( itemAdded ); - addCurveFromSelectionItem( _2dSelectionItem ); + addResultCurveFromSelectionItem( _2dSelectionItem ); } } @@ -406,3 +412,56 @@ void RiuSelectionChangedHandler::updateResultInfo( const RiuSelectionItem* itemA mainWnd->statusBar()->showMessage( pickInfo ); mainWnd->setResultInfo( resultInfo ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSelectionChangedHandler::addDepthCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const +{ + if ( itemAdded->type() != RiuSelectionItem::ECLIPSE_SELECTION_OBJECT ) return; + + const RiuEclipseSelectionItem* eclipseSelectionItem = static_cast( itemAdded ); + if ( eclipseSelectionItem == nullptr ) return; + + int currentTimeStep = eclipseSelectionItem->m_view->currentTimeStep(); + + RimEclipseResultDefinition* eclResDef = eclipseSelectionItem->m_resultDefinition; + if ( !eclResDef ) return; + + if ( eclResDef->isFlowDiagOrInjectionFlooding() && eclResDef->resultVariable() != RIG_NUM_FLOODED_PV ) + { + // NB! Do not read out data for flow results, as this can be a time consuming operation + return; + } + else if ( eclResDef->hasResult() && !RiaResultNames::isPerCellFaceResult( eclResDef->resultVariable() ) && eclResDef->eclipseCase() && + eclResDef->eclipseCase()->eclipseCaseData() ) + { + QString curveName = eclResDef->resultVariableUiShortName(); + curveName += ", "; + curveName += RigDepthResultAccessor::geometrySelectionText( eclResDef->eclipseCase()->eclipseCaseData(), + eclipseSelectionItem->m_gridIndex, + eclipseSelectionItem->m_gridLocalCellIndex ); + + std::vector resultValues = RigDepthResultAccessor::resultValues( eclResDef->eclipseCase()->eclipseCaseData(), + eclResDef, + eclipseSelectionItem->m_gridIndex, + eclipseSelectionItem->m_gridLocalCellIndex, + currentTimeStep ); + + std::vector kValues = + RigDepthResultAccessor::kValues( eclResDef->eclipseCase()->eclipseCaseData(), eclipseSelectionItem->m_gridIndex ); + + std::vector depthValues = RigDepthResultAccessor::depthValues( eclResDef->eclipseCase()->eclipseCaseData(), + eclipseSelectionItem->m_gridLocalCellIndex, + eclipseSelectionItem->m_gridIndex ); + + CVF_ASSERT( kValues.size() == resultValues.size() ); + + RiuMainWindow::instance()->depthPlot()->addCurve( eclResDef->eclipseCase(), + curveName, + eclipseSelectionItem->m_color, + kValues, + depthValues, + resultValues ); + } +} diff --git a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h index d548497658..f7ac86a5b1 100644 --- a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h +++ b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h @@ -38,10 +38,12 @@ public: void handleSetSelectedItem( const RiuSelectionItem* item ) const; private: - void addCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const; - void addCurveFromSelectionItem( const RiuEclipseSelectionItem* selectionItem ) const; - void addCurveFromSelectionItem( const RiuGeoMechSelectionItem* selectionItem ) const; - void addCurveFromSelectionItem( const Riu2dIntersectionSelectionItem* selectionItem ) const; + void addResultCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const; + void addResultCurveFromSelectionItem( const RiuEclipseSelectionItem* selectionItem ) const; + void addResultCurveFromSelectionItem( const RiuGeoMechSelectionItem* selectionItem ) const; + void addResultCurveFromSelectionItem( const Riu2dIntersectionSelectionItem* selectionItem ) const; + + void addDepthCurveFromSelectionItem( const RiuSelectionItem* itemAdded ) const; void scheduleUpdateForAllVisibleViews() const; void updateResultInfo( const RiuSelectionItem* itemAdded ) const;