///////////////////////////////////////////////////////////////////////////////// // // 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. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include "RiaDefines.h" #include "cafPdmChildArrayField.h" #include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmObject.h" #include #include #include class RimStreamline; class RimEclipseCase; class RimRegularLegendConfig; class RigTracer; class RigCell; class RiuViewer; class RimStreamlineInViewCollection : public caf::PdmObject { CAF_PDM_HEADER_INIT; public: enum class VisualizationMode { ANIMATION = 0, MANUAL }; using VisualizationModeEnum = caf::AppEnum; enum class StreamlinePhaseType { OIL, GAS, WATER, COMBINED }; using StreamlinePhaseTypeEnum = caf::AppEnum; enum class ColorMode { PHASE_COLORS = 0, VELOCITY, }; using ColorModeEnum = caf::AppEnum; public: RimStreamlineInViewCollection(); ~RimStreamlineInViewCollection() override; void setEclipseCase( RimEclipseCase* reservoir ); RimEclipseCase* eclipseCase() const; std::list phases() const; VisualizationMode visualizationMode() const; ColorMode colorMode() const; size_t animationSpeed() const; size_t animationIndex() const; double scaleFactor() const; size_t tracerLength() const; bool shouldBeAvailable() const; bool isActive() const; void refresh(); const std::list& tracers(); const RimRegularLegendConfig* legendConfig() const; void mappingRange( double& min, double& max ) const; void updateLegendRangesTextAndVisibility( RiuViewer* nativeOrOverrideViewer, bool isUsingOverrideViewer ); void updateFromCurrentTimeStep( int timeStep ); protected: caf::PdmFieldHandle* objectToggleField() override; void updateStreamlines(); void initAfterRead() override; private: void findStartCells( int timeIdx, std::vector>& outInjectorCells, std::vector>& outProducerCells ); void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override; void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void outputSummary() const; private: caf::PdmField m_isActive; caf::PdmField m_collectionName; caf::PdmField m_lengthThreshold; caf::PdmField m_flowThreshold; caf::PdmField m_resolution; caf::PdmField m_maxDays; caf::PdmField m_useProducers; caf::PdmField m_useInjectors; caf::PdmPointer m_eclipseCase; caf::PdmChildArrayField m_streamlines; caf::PdmField m_phases; caf::PdmField m_visualizationMode; caf::PdmField m_colorMode; // Animation caf::PdmField m_animationSpeed; caf::PdmField m_animationIndex; caf::PdmField m_scaleFactor; caf::PdmField m_tracerLength; size_t m_maxAnimationIndex; bool m_shouldGenerateTracers; int m_currentTimestep; std::list m_activeTracers; std::set m_wellCellIds; caf::PdmChildField m_legendConfig; };