///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2018- 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 "RiuQwtPlotItemGroup.h" #include "RimPlotCurve.h" #include "RimWellLogPlot.h" #include "RimWellPathAttribute.h" #include "RimWellPathComponentInterface.h" #include "cafPdmBase.h" #include "cafPdmObject.h" #include "cafPdmPtrField.h" #include "cvfColor4.h" #include "cvfObject.h" #include #include class RigWellLogCurveData; class RimWellPath; class QwtPlotItem; //================================================================================================== /// /// //================================================================================================== class RiuWellPathComponentPlotItem { public: RiuWellPathComponentPlotItem( const RimWellPath* wellPath ); RiuWellPathComponentPlotItem( const RimWellPath* wellPath, const RimWellPathComponentInterface* completion ); ~RiuWellPathComponentPlotItem(); QString label() const; QString legendTitle() const; void loadDataAndUpdate( bool updateParentPlot ); RiaDefines::WellPathComponentType componentType() const; bool xValueRange( double* minimumValue, double* maximumValue ) const; bool yValueRange( double* minimumValue, double* maximumValue ) const; void setShowLabel( bool showLabel ); void setDepthType( RimWellLogPlot::DepthTypeEnum depthType ); void setContributeToLegend( bool contributeToLegend ); void setParentQwtPlotAndReplot( QwtPlot* plot ); void setParentPlotNoReplot( QwtPlot* plot ); void attachToQwt(); void detachFromQwt(); void reattachToQwt(); private: void calculateColumnOffsets( const RimWellPathComponentInterface* component ); void onLoadDataAndUpdate( bool updateParentPlot ); std::pair depthsOfDepthType() const; void addMarker( double posX, double depth, int size, RiuPlotCurveSymbol::PointSymbolEnum symbolType, cvf::Color4f baseColor, const QString& label = QString( "" ), Qt::Alignment labelAlignment = Qt::AlignVCenter | Qt::AlignRight, Qt::Orientation labelOrientation = Qt::Horizontal, bool drawLine = false, bool contrastTextColor = false ); QwtPlotItem* createMarker( double posX, double depth, int size, RiuPlotCurveSymbol::PointSymbolEnum symbolType, cvf::Color4f baseColor, const QString& label = QString( "" ), Qt::Alignment labelAlignment = Qt::AlignVCenter | Qt::AlignRight, Qt::Orientation labelOrientation = Qt::Horizontal, bool drawLine = false, bool contrastTextColor = false ); void addColumnFeature( double startX, double endX, double startDepth, double endDepth, cvf::Color4f baseColor, Qt::BrushStyle brushStyle = Qt::SolidPattern ); cvf::Color4f componentColor( float alpha = 1.0 ) const; private: const RimWellPath* m_wellPath; RiaDefines::WellPathComponentType m_componentType; double m_startMD; double m_endMD; std::vector m_subMDs; QString m_label; QString m_legendTitle; double m_columnOffset; double m_maxColumnOffset; RimWellLogPlot::DepthTypeEnum m_depthType; QPointer m_parentQwtPlot; RiuQwtPlotItemGroup m_combinedComponentGroup; bool m_showLabel; };