///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2020- 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 "RicNewStimPlanModelPlotFeature.h" #include "RiaApplication.h" #include "RiaColorTables.h" #include "RiaGuiApplication.h" #include "RiaLogging.h" #include "RiaStimPlanModelDefines.h" #include "RimPlotCurveAppearance.h" #include "WellLogCommands/RicNewWellLogPlotFeatureImpl.h" #include "RigWellPath.h" #include "RimColorLegend.h" #include "RimColorLegendCollection.h" #include "RimEclipseCase.h" #include "RimEclipseResultDefinition.h" #include "RimEclipseView.h" #include "RimFaciesProperties.h" #include "RimMainPlotCollection.h" #include "RimModeledWellPath.h" #include "RimStimPlanModel.h" #include "RimStimPlanModelCurve.h" #include "RimStimPlanModelPlot.h" #include "RimStimPlanModelPlotCollection.h" #include "RimStimPlanModelTemplate.h" #include "RimWellLogPlotNameConfig.h" #include "RimWellLogTrack.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" #include "RiuPlotMainWindowTools.h" #include "cafProgressInfo.h" #include "cafSelectionManager.h" #include "cvfAssert.h" #include "cvfMath.h" #include #include #include #include #include CAF_CMD_SOURCE_INIT( RicNewStimPlanModelPlotFeature, "RicNewStimPlanModelPlotFeature" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimStimPlanModelPlot* RicNewStimPlanModelPlotFeature::createPlot( RimStimPlanModel* stimPlanModel ) { RimEclipseCase* eclipseCase = stimPlanModel->eclipseCaseForProperty( RiaDefines::CurveProperty::UNDEFINED ); int timeStep = stimPlanModel->timeStep(); caf::ProgressInfo progInfo( 100, "Creating StimPlan Model Plot" ); RimStimPlanModelPlot* plot = createStimPlanModelPlot( true, "StimPlan Model" ); plot->setStimPlanModel( stimPlanModel ); { auto task = progInfo.task( "Creating formation track", 2 ); RimEclipseCase* formationEclipseCase = stimPlanModel->eclipseCaseForType( RimExtractionConfiguration::EclipseCaseType::STATIC_CASE ); createFormationTrack( plot, stimPlanModel, formationEclipseCase ); } { auto task = progInfo.task( "Creating facies track", 2 ); RimEclipseCase* faciesEclipseCase = stimPlanModel->eclipseCaseForProperty( RiaDefines::CurveProperty::FACIES ); createFaciesTrack( plot, stimPlanModel, faciesEclipseCase ); } { auto task = progInfo.task( "Creating layers track", 2 ); createLayersTrack( plot, stimPlanModel, eclipseCase ); } { auto task = progInfo.task( "Creating parameters track", 15 ); std::vector>> plots = { { "Porosity", { RiaDefines::CurveProperty::POROSITY, RiaDefines::CurveProperty::POROSITY_UNSCALED } }, { "Permeability", { RiaDefines::CurveProperty::PERMEABILITY_X, RiaDefines::CurveProperty::PERMEABILITY_Z } }, { "Pressure", { RiaDefines::CurveProperty::INITIAL_PRESSURE, RiaDefines::CurveProperty::PRESSURE } }, { "Net-To-Gross", { RiaDefines::CurveProperty::NET_TO_GROSS } }, { "EQLNUM", { RiaDefines::CurveProperty::EQLNUM } } }; std::set logarithmicPlots; logarithmicPlots.insert( "Permeability" ); for ( auto result : plots ) { bool logarithmicPlot = logarithmicPlots.count( result.first ) > 0; createParametersTrack( plot, stimPlanModel, eclipseCase, timeStep, result.first, result.second, logarithmicPlot ); } } { auto task = progInfo.task( "Creating stress track", 2 ); createParametersTrack( plot, stimPlanModel, eclipseCase, timeStep, "Stress", { RiaDefines::CurveProperty::INITIAL_STRESS, RiaDefines::CurveProperty::STRESS } ); createParametersTrack( plot, stimPlanModel, eclipseCase, timeStep, "Stress Gradient", { RiaDefines::CurveProperty::STRESS_GRADIENT } ); } { auto task = progInfo.task( "Creating facies properties track", 15 ); std::vector results = { RiaDefines::CurveProperty::YOUNGS_MODULUS, RiaDefines::CurveProperty::POISSONS_RATIO, RiaDefines::CurveProperty::BIOT_COEFFICIENT, RiaDefines::CurveProperty::K0, RiaDefines::CurveProperty::K_IC, RiaDefines::CurveProperty::PROPPANT_EMBEDMENT, RiaDefines::CurveProperty::FLUID_LOSS_COEFFICIENT, RiaDefines::CurveProperty::SPURT_LOSS, RiaDefines::CurveProperty::RELATIVE_PERMEABILITY_FACTOR, RiaDefines::CurveProperty::PORO_ELASTIC_CONSTANT, RiaDefines::CurveProperty::THERMAL_EXPANSION_COEFFICIENT, RiaDefines::CurveProperty::IMMOBILE_FLUID_SATURATION }; for ( auto result : results ) { QString trackName = caf::AppEnum::uiText( result ); createParametersTrack( plot, stimPlanModel, eclipseCase, timeStep, trackName, { result } ); } } { auto task = progInfo.task( "Creating temperature track", 2 ); createParametersTrack( plot, stimPlanModel, eclipseCase, timeStep, "Temperature", { RiaDefines::CurveProperty::TEMPERATURE } ); } { auto task = progInfo.task( "Updating all tracks", 5 ); plot->setPlotTitleVisible( true ); plot->setLegendsVisible( true ); plot->setLegendsHorizontal( false ); plot->setDepthType( RiaDefines::DepthTypeEnum::TRUE_VERTICAL_DEPTH ); plot->setAutoScaleDepthValuesEnabled( true ); } RiuPlotMainWindowTools::showPlotMainWindow(); RiuPlotMainWindowTools::onObjectAppended( plot ); plot->loadDataAndUpdate(); return plot; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::onActionTriggered( bool isChecked ) { RimStimPlanModel* stimPlanModel = caf::SelectionManager::instance()->selectedItemAncestorOfType(); if ( !stimPlanModel ) return; createPlot( stimPlanModel ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::setupActionLook( QAction* actionToSetup ) { actionToSetup->setText( "New StimPlan Model Plot" ); // actionToSetup->setIcon( QIcon( ":/WellBoreStability16x16.png" ) ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::createFormationTrack( RimStimPlanModelPlot* plot, RimStimPlanModel* stimPlanModel, RimEclipseCase* eclipseCase ) { RimWellLogTrack* formationTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Formations", plot ); formationTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); formationTrack->setFormationCase( eclipseCase ); formationTrack->setAnnotationType( RiaDefines::RegionAnnotationType::FORMATION_ANNOTATIONS ); formationTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AxisGridVisibility::AXIS_GRID_NONE ); formationTrack->setShowWellPathAttributes( true ); formationTrack->setShowBothSidesOfWell( false ); formationTrack->setWellPathAttributesSource( stimPlanModel->thicknessDirectionWellPath() ); formationTrack->setVisiblePropertyValueRange( 0.0, 0.0 ); formationTrack->setOverburdenHeight( stimPlanModel->overburdenHeight() ); formationTrack->setUnderburdenHeight( stimPlanModel->underburdenHeight() ); formationTrack->setColSpan( RimPlot::ONE ); formationTrack->setPropertyValueAxisTitle( stimPlanModel->unitForProperty( RiaDefines::CurveProperty::FORMATIONS ) ); formationTrack->setLegendsVisible( true ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::createFaciesTrack( RimStimPlanModelPlot* plot, RimStimPlanModel* stimPlanModel, RimEclipseCase* eclipseCase ) { RimStimPlanModelTemplate* stimPlanModelTemplate = stimPlanModel->stimPlanModelTemplate(); if ( !stimPlanModelTemplate ) return; RimFaciesProperties* faciesProperties = stimPlanModelTemplate->faciesProperties(); if ( !faciesProperties ) return; const RimEclipseResultDefinition* faciesDefinition = faciesProperties->faciesDefinition(); if ( !faciesDefinition ) return; RimWellLogTrack* faciesTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Facies", plot ); faciesTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); faciesTrack->setFormationCase( eclipseCase ); faciesTrack->setAnnotationType( RiaDefines::RegionAnnotationType::RESULT_PROPERTY_ANNOTATIONS ); faciesTrack->setRegionPropertyResultType( faciesDefinition->resultType(), faciesDefinition->resultVariable() ); faciesTrack->setAnnotationDisplay( RiaDefines::COLOR_SHADING ); faciesTrack->setOverburdenHeight( stimPlanModel->overburdenHeight() ); faciesTrack->setUnderburdenHeight( stimPlanModel->underburdenHeight() ); faciesTrack->setPropertyValueAxisTitle( stimPlanModel->unitForProperty( RiaDefines::CurveProperty::FACIES ) ); faciesTrack->setLegendsVisible( false ); faciesTrack->setPlotTitleVisible( true ); RimColorLegend* faciesColors = faciesProperties->colorLegend(); if ( faciesColors ) faciesTrack->setColorShadingLegend( faciesColors ); faciesTrack->setVisiblePropertyValueRange( 0.0, 0.0 ); faciesTrack->setColSpan( RimPlot::ONE ); faciesTrack->setAutoScalePropertyValuesEnabled( false ); faciesTrack->setVisiblePropertyValueRange( 0.0, 0.0 ); faciesTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AxisGridVisibility::AXIS_GRID_NONE ); caf::ColorTable colors = RiaColorTables::wellLogPlotPaletteColors(); RimStimPlanModelCurve* curve = new RimStimPlanModelCurve; curve->setCurveProperty( RiaDefines::CurveProperty::FACIES ); curve->setStimPlanModel( stimPlanModel ); curve->setEclipseResultCategory( faciesDefinition->resultType() ); curve->setEclipseResultVariable( faciesDefinition->resultVariable() ); curve->setColor( colors.cycledColor3f( 0 ) ); curve->setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE ); curve->setLineThickness( 2 ); curve->setAutoNameComponents( false, true, false, false, false ); faciesTrack->addCurve( curve ); curve->loadDataAndUpdate( true ); curve->updateConnectedEditors(); faciesTrack->updateConnectedEditors(); plot->updateConnectedEditors(); RiaGuiApplication::instance()->getOrCreateMainPlotWindow(); RiuPlotMainWindowTools::showPlotMainWindow(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::createLayersTrack( RimStimPlanModelPlot* plot, RimStimPlanModel* stimPlanModel, RimEclipseCase* eclipseCase ) { RimWellLogTrack* faciesTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, "Layers", plot ); faciesTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); faciesTrack->setFormationCase( eclipseCase ); faciesTrack->setLegendsVisible( true ); faciesTrack->setPlotTitleVisible( true ); RimStimPlanModelTemplate* stimPlanModelTemplate = stimPlanModel->stimPlanModelTemplate(); if ( !stimPlanModelTemplate ) return; RimFaciesProperties* faciesProperties = stimPlanModelTemplate->faciesProperties(); if ( !faciesProperties ) return; RimColorLegend* faciesColors = faciesProperties->colorLegend(); if ( faciesColors ) faciesTrack->setColorShadingLegend( faciesColors ); faciesTrack->setVisiblePropertyValueRange( 0.0, 0.0 ); faciesTrack->setColSpan( RimPlot::ONE ); caf::ColorTable colors = RiaColorTables::wellLogPlotPaletteColors(); RimStimPlanModelCurve* curve = new RimStimPlanModelCurve; curve->setCurveProperty( RiaDefines::CurveProperty::LAYERS ); curve->setStimPlanModel( stimPlanModel ); curve->setColor( colors.cycledColor3f( 0 ) ); curve->setLineStyle( RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_SOLID ); curve->setLineThickness( 2 ); curve->setAutoNameComponents( false, true, false, false, false ); faciesTrack->addCurve( curve ); faciesTrack->setAutoScalePropertyValuesEnabled( true ); faciesTrack->setPropertyValueAxisTitle( stimPlanModel->unitForProperty( RiaDefines::CurveProperty::LAYERS ) ); curve->loadDataAndUpdate( true ); curve->updateConnectedEditors(); faciesTrack->updateConnectedEditors(); plot->updateConnectedEditors(); RiaGuiApplication::instance()->getOrCreateMainPlotWindow(); RiuPlotMainWindowTools::showPlotMainWindow(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewStimPlanModelPlotFeature::createParametersTrack( RimStimPlanModelPlot* plot, RimStimPlanModel* stimPlanModel, RimEclipseCase* eclipseCase, int timeStep, const QString& trackTitle, const std::vector& propertyTypes, bool isPlotLogarithmic ) { CAF_ASSERT( !propertyTypes.empty() ); RimWellLogTrack* plotTrack = RicNewWellLogPlotFeatureImpl::createWellLogPlotTrack( false, trackTitle, plot ); plotTrack->setFormationCase( eclipseCase ); plotTrack->setFormationWellPath( stimPlanModel->thicknessDirectionWellPath() ); plotTrack->setColSpan( defaultColSpan( propertyTypes[0] ) ); plotTrack->setLegendsVisible( true ); plotTrack->setPlotTitleVisible( true ); plotTrack->setShowWindow( shouldShowByDefault( propertyTypes, stimPlanModel->useDetailedFluidLoss() ) ); int colorIndex = 0; for ( const RiaDefines::CurveProperty& propertyType : propertyTypes ) { QString resultVariable = stimPlanModel->eclipseResultVariable( propertyType ); RiaDefines::ResultCatType resultCategoryType = stimPlanModel->eclipseResultCategory( propertyType ); // TODO: maybe improve? bool fixedInitialTimeStep = ( propertyType == RiaDefines::CurveProperty::INITIAL_PRESSURE || resultCategoryType == RiaDefines::ResultCatType::STATIC_NATIVE ); RimStimPlanModelCurve* curve = new RimStimPlanModelCurve; curve->setCurveProperty( propertyType ); curve->setStimPlanModel( stimPlanModel ); curve->setEclipseResultVariable( resultVariable ); curve->setEclipseResultCategory( resultCategoryType ); curve->setColor( defaultColor( propertyType, colorIndex ) ); RimPlotCurveAppearance::FillStyle fillStyle = defaultFillStyle( propertyType ); if ( fillStyle != Qt::NoBrush ) { curve->setFillStyle( fillStyle ); curve->setFillColor( defaultFillColor( propertyType ) ); } curve->setLineStyle( defaultLineStyle( propertyType ) ); curve->setLineThickness( 2 ); if ( propertyType == RiaDefines::CurveProperty::STRESS_GRADIENT ) { curve->setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum::INTERPOLATION_STEP_LEFT ); } if ( fixedInitialTimeStep ) { curve->setAutoNameComponents( false, false, false, false, false ); curve->setCurrentTimeStep( 0 ); } else { curve->setAutoNameComponents( false, true, false, false, false ); curve->setCurrentTimeStep( timeStep ); } plotTrack->addCurve( curve ); curve->loadDataAndUpdate( true ); curve->updateConnectedEditors(); colorIndex++; } plotTrack->setPropertyValueAxisGridVisibility( RimWellLogPlot::AXIS_GRID_MAJOR ); plotTrack->setShowRegionLabels( true ); plotTrack->setLogarithmicScale( isPlotLogarithmic ); plotTrack->setAutoScalePropertyValuesEnabled( true ); plotTrack->setMinAndMaxTicksOnly( useMinMaxTicksOnly( propertyTypes[0] ) ); plotTrack->setPropertyValueAxisTitle( stimPlanModel->unitForProperty( propertyTypes[0] ) ); plotTrack->updateConnectedEditors(); plot->updateConnectedEditors(); RiaGuiApplication::instance()->getOrCreateMainPlotWindow(); RiuPlotMainWindowTools::showPlotMainWindow(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimStimPlanModelPlot* RicNewStimPlanModelPlotFeature::createStimPlanModelPlot( bool showAfterCreation, const QString& plotDescription ) { RimStimPlanModelPlotCollection* stimPlanModelPlotColl = stimPlanModelPlotCollection(); CVF_ASSERT( stimPlanModelPlotColl ); // Make sure the summary plot window is created RiaGuiApplication::instance()->getOrCreateMainPlotWindow(); RimStimPlanModelPlot* plot = new RimStimPlanModelPlot(); plot->setAsPlotMdiWindow(); stimPlanModelPlotColl->addStimPlanModelPlot( plot ); plot->setNamingMethod( RiaDefines::ObjectNamingMethod::CUSTOM ); if ( !plotDescription.isEmpty() ) { plot->nameConfig()->setCustomName( plotDescription ); } else { plot->nameConfig()->setCustomName( QString( "StimPlan Model Plot %1" ).arg( stimPlanModelPlotCollection()->stimPlanModelPlots().size() ) ); } stimPlanModelPlotColl->updateAllRequiredEditors(); if ( showAfterCreation ) { RiaGuiApplication::instance()->getOrCreateAndShowMainPlotWindow(); } return plot; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimStimPlanModelPlotCollection* RicNewStimPlanModelPlotFeature::stimPlanModelPlotCollection() { return RimMainPlotCollection::current()->stimPlanModelPlotCollection(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicNewStimPlanModelPlotFeature::shouldShowByDefault( const std::vector& propertyTypes, bool useDetailedFluidLoss ) { std::vector defaultPropertyTypes = { RiaDefines::CurveProperty::FACIES, RiaDefines::CurveProperty::POROSITY, RiaDefines::CurveProperty::INITIAL_PRESSURE, RiaDefines::CurveProperty::PRESSURE, RiaDefines::CurveProperty::PERMEABILITY_X, RiaDefines::CurveProperty::PERMEABILITY_Z, RiaDefines::CurveProperty::STRESS, RiaDefines::CurveProperty::INITIAL_STRESS, RiaDefines::CurveProperty::STRESS_GRADIENT, RiaDefines::CurveProperty::YOUNGS_MODULUS, RiaDefines::CurveProperty::POISSONS_RATIO, RiaDefines::CurveProperty::K_IC, RiaDefines::CurveProperty::PROPPANT_EMBEDMENT, RiaDefines::CurveProperty::BIOT_COEFFICIENT, RiaDefines::CurveProperty::K0, }; if ( !useDetailedFluidLoss ) { defaultPropertyTypes.push_back( RiaDefines::CurveProperty::FLUID_LOSS_COEFFICIENT ); } for ( auto propertyType : propertyTypes ) { for ( auto defaultPropertyType : defaultPropertyTypes ) { if ( propertyType == defaultPropertyType ) return true; } } return false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::Color3f RicNewStimPlanModelPlotFeature::defaultColor( RiaDefines::CurveProperty property, int colorIndex ) { std::map colorMap; colorMap[RiaDefines::CurveProperty::LAYERS] = cvf::Color3f( 0.000f, 0.000f, 1.000f ); colorMap[RiaDefines::CurveProperty::POROSITY] = cvf::Color3f( 0.804f, 0.522f, 0.247f ); colorMap[RiaDefines::CurveProperty::POROSITY_UNSCALED] = cvf::Color3f::BLACK; colorMap[RiaDefines::CurveProperty::PERMEABILITY_X] = cvf::Color3f( 0.745f, 0.000f, 0.000f ); colorMap[RiaDefines::CurveProperty::PERMEABILITY_Z] = cvf::Color3f::RED; colorMap[RiaDefines::CurveProperty::INITIAL_PRESSURE] = cvf::Color3f::BLACK; colorMap[RiaDefines::CurveProperty::PRESSURE] = cvf::Color3f( 0.000f, 0.333f, 1.000f ); colorMap[RiaDefines::CurveProperty::INITIAL_STRESS] = cvf::Color3f::BLACK; colorMap[RiaDefines::CurveProperty::STRESS] = cvf::Color3f( 0.541f, 0.169f, 0.886f ); colorMap[RiaDefines::CurveProperty::STRESS_GRADIENT] = cvf::Color3f( 0.522f, 0.522f, 0.784f ); colorMap[RiaDefines::CurveProperty::YOUNGS_MODULUS] = cvf::Color3f( 0.565f, 0.565f, 0.424f ); colorMap[RiaDefines::CurveProperty::POISSONS_RATIO] = cvf::Color3f( 0.804f, 0.522f, 0.247f ); colorMap[RiaDefines::CurveProperty::BIOT_COEFFICIENT] = cvf::Color3f( 0.000f, 0.506f, 0.761f ); colorMap[RiaDefines::CurveProperty::K0] = cvf::Color3f( 0.294f, 0.765f, 0.529f ); colorMap[RiaDefines::CurveProperty::K_IC] = cvf::Color3f( 0.576f, 0.576f, 0.000f ); colorMap[RiaDefines::CurveProperty::PROPPANT_EMBEDMENT] = cvf::Color3f( 0.667f, 0.333f, 0.498f ); if ( colorMap.count( property ) > 0 ) return colorMap[property]; caf::ColorTable colors = RiaColorTables::wellLogPlotPaletteColors(); return colors.cycledColor3f( colorIndex ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::Color3f RicNewStimPlanModelPlotFeature::defaultFillColor( RiaDefines::CurveProperty property ) { std::map colorMap; colorMap[RiaDefines::CurveProperty::POROSITY] = cvf::Color3f( 0.988f, 0.635f, 0.302f ); colorMap[RiaDefines::CurveProperty::PERMEABILITY_X] = cvf::Color3f( 1.000f, 0.486f, 0.486f ); colorMap[RiaDefines::CurveProperty::PERMEABILITY_Z] = cvf::Color3f( 1.000f, 0.486f, 0.486f ); colorMap[RiaDefines::CurveProperty::STRESS_GRADIENT] = cvf::Color3f( 0.667f, 0.667f, 1.000f ); colorMap[RiaDefines::CurveProperty::YOUNGS_MODULUS] = cvf::Color3f( 0.667f, 0.667f, 0.498f ); colorMap[RiaDefines::CurveProperty::POISSONS_RATIO] = cvf::Color3f( 1.000f, 0.667f, 0.498f ); colorMap[RiaDefines::CurveProperty::BIOT_COEFFICIENT] = cvf::Color3f( 0.647f, 0.847f, 1.000f ); colorMap[RiaDefines::CurveProperty::K0] = cvf::Color3f( 0.482f, 0.765f, 0.573f ); colorMap[RiaDefines::CurveProperty::K_IC] = cvf::Color3f( 0.839f, 0.729f, 0.941f ); colorMap[RiaDefines::CurveProperty::PROPPANT_EMBEDMENT] = cvf::Color3f( 0.882f, 0.439f, 0.663f ); if ( colorMap.count( property ) > 0 ) return colorMap[property]; return cvf::Color3f::LIGHT_GRAY; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimPlotCurveAppearance::FillStyle RicNewStimPlanModelPlotFeature::defaultFillStyle( RiaDefines::CurveProperty property ) { std::set solids = { RiaDefines::CurveProperty::POROSITY, RiaDefines::CurveProperty::PERMEABILITY_X, RiaDefines::CurveProperty::PERMEABILITY_Z, RiaDefines::CurveProperty::STRESS_GRADIENT, RiaDefines::CurveProperty::YOUNGS_MODULUS, RiaDefines::CurveProperty::POISSONS_RATIO, RiaDefines::CurveProperty::BIOT_COEFFICIENT, RiaDefines::CurveProperty::K0, RiaDefines::CurveProperty::K_IC, RiaDefines::CurveProperty::PROPPANT_EMBEDMENT, }; if ( solids.count( property ) > 0 ) return RimPlotCurveAppearance::FillStyle( Qt::SolidPattern ); return RimPlotCurveAppearance::FillStyle( Qt::NoBrush ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RiuQwtPlotCurveDefines::LineStyleEnum RicNewStimPlanModelPlotFeature::defaultLineStyle( RiaDefines::CurveProperty property ) { std::set dashedProperties = { RiaDefines::CurveProperty::INITIAL_STRESS, RiaDefines::CurveProperty::INITIAL_PRESSURE }; if ( dashedProperties.count( property ) > 0 ) return RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_DASH; return RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_SOLID; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimPlot::RowOrColSpan RicNewStimPlanModelPlotFeature::defaultColSpan( RiaDefines::CurveProperty property ) { std::set wideProperties = { RiaDefines::CurveProperty::STRESS, RiaDefines::CurveProperty::INITIAL_STRESS, RiaDefines::CurveProperty::PRESSURE, RiaDefines::CurveProperty::INITIAL_PRESSURE }; if ( wideProperties.count( property ) > 0 ) return RimPlot::TWO; return RimPlot::ONE; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RicNewStimPlanModelPlotFeature::useMinMaxTicksOnly( RiaDefines::CurveProperty property ) { std::set useMajorAndMinorTickmarks = { RiaDefines::CurveProperty::STRESS, RiaDefines::CurveProperty::INITIAL_STRESS, RiaDefines::CurveProperty::PRESSURE, RiaDefines::CurveProperty::INITIAL_PRESSURE }; return useMajorAndMinorTickmarks.count( property ) == 0; }