mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Curve Style : Add support for curve fitting for non-solid line styles
This commit is contained in:
parent
3a461473d0
commit
87b822a80f
@ -914,6 +914,13 @@ void RimPlotCurve::updateCurveAppearance()
|
||||
legendIconSize.setWidth( width );
|
||||
m_plotCurve->setLegendIconSize( legendIconSize );
|
||||
}
|
||||
|
||||
double tolerance = 0.0;
|
||||
if ( m_curveAppearance->lineStyle() != RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_SOLID )
|
||||
{
|
||||
tolerance = m_curveAppearance->curveFittingTolerance();
|
||||
}
|
||||
m_plotCurve->setCurveFittingTolerance( tolerance );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -106,6 +106,13 @@ RimPlotCurveAppearance::RimPlotCurveAppearance()
|
||||
"Minimum pixel distance between symbols",
|
||||
"" );
|
||||
|
||||
CAF_PDM_InitField( &m_curveFittingTolerance,
|
||||
"CurveFittingTolerance",
|
||||
1.0f,
|
||||
"Curve Fitting Tolerance",
|
||||
"",
|
||||
"Value above 0 : Curve fitting tolerance (default 1.0), 0 : disable curve fitting" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_symbolLabel, "SymbolLabel", "Symbol Label" );
|
||||
CAF_PDM_InitField( &m_symbolSize, "SymbolSize", 6, "Symbol Size" );
|
||||
|
||||
@ -126,30 +133,23 @@ void RimPlotCurveAppearance::fieldChangedByUi( const caf::PdmFieldHandle* change
|
||||
const QVariant& oldValue,
|
||||
const QVariant& newValue )
|
||||
{
|
||||
if ( &m_curveColor == changedField || &m_curveThickness == changedField || &m_pointSymbol == changedField ||
|
||||
&m_lineStyle == changedField || &m_symbolSkipPixelDistance == changedField ||
|
||||
&m_curveInterpolation == changedField || &m_symbolSize == changedField || &m_symbolEdgeColor == changedField ||
|
||||
&m_fillStyle == changedField || &m_fillColor == changedField )
|
||||
if ( &m_pointSymbol == changedField )
|
||||
{
|
||||
if ( &m_pointSymbol == changedField )
|
||||
{
|
||||
m_symbolSize.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuPlotCurveSymbol::SYMBOL_NONE );
|
||||
m_symbolSkipPixelDistance.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuPlotCurveSymbol::SYMBOL_NONE );
|
||||
}
|
||||
else if ( &m_lineStyle == changedField )
|
||||
{
|
||||
m_curveThickness.uiCapability()->setUiReadOnly( m_lineStyle() ==
|
||||
RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE );
|
||||
m_curveInterpolation.uiCapability()->setUiReadOnly( m_lineStyle() ==
|
||||
RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE );
|
||||
}
|
||||
else if ( &m_fillColor == changedField )
|
||||
{
|
||||
fillColorChanged.send();
|
||||
}
|
||||
|
||||
appearanceChanged.send();
|
||||
m_symbolSize.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuPlotCurveSymbol::SYMBOL_NONE );
|
||||
m_symbolSkipPixelDistance.uiCapability()->setUiReadOnly( m_pointSymbol() == RiuPlotCurveSymbol::SYMBOL_NONE );
|
||||
}
|
||||
else if ( &m_lineStyle == changedField )
|
||||
{
|
||||
m_curveThickness.uiCapability()->setUiReadOnly( m_lineStyle() == RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE );
|
||||
m_curveInterpolation.uiCapability()->setUiReadOnly( m_lineStyle() ==
|
||||
RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_NONE );
|
||||
}
|
||||
else if ( &m_fillColor == changedField )
|
||||
{
|
||||
fillColorChanged.send();
|
||||
}
|
||||
|
||||
appearanceChanged.send();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -198,6 +198,9 @@ void RimPlotCurveAppearance::defineUiOrdering( QString uiConfigName, caf::PdmUiO
|
||||
uiOrdering.add( &m_lineStyle );
|
||||
uiOrdering.add( &m_curveThickness );
|
||||
|
||||
uiOrdering.add( &m_curveFittingTolerance );
|
||||
m_curveFittingTolerance.uiCapability()->setUiReadOnly( m_lineStyle() ==
|
||||
RiuQwtPlotCurveDefines::LineStyleEnum::STYLE_SOLID );
|
||||
uiOrdering.add( &m_fillStyle );
|
||||
m_fillStyle.uiCapability()->setUiHidden( !m_fillOptionsVisible );
|
||||
|
||||
@ -422,6 +425,14 @@ cvf::Color3f RimPlotCurveAppearance::fillColor() const
|
||||
return m_fillColor;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
float RimPlotCurveAppearance::curveFittingTolerance() const
|
||||
{
|
||||
return m_curveFittingTolerance();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -84,6 +84,8 @@ public:
|
||||
void setFillColor( const cvf::Color3f& fillColor );
|
||||
cvf::Color3f fillColor() const;
|
||||
|
||||
float curveFittingTolerance() const;
|
||||
|
||||
void setInterpolation( RiuQwtPlotCurveDefines::CurveInterpolationEnum );
|
||||
RiuQwtPlotCurveDefines::CurveInterpolationEnum interpolation() const;
|
||||
|
||||
@ -109,6 +111,8 @@ protected:
|
||||
caf::PdmField<int> m_curveThickness;
|
||||
caf::PdmField<float> m_symbolSkipPixelDistance;
|
||||
|
||||
caf::PdmField<float> m_curveFittingTolerance;
|
||||
|
||||
caf::PdmField<PointSymbol> m_pointSymbol;
|
||||
caf::PdmField<LineStyle> m_lineStyle;
|
||||
caf::PdmField<FillStyle> m_fillStyle;
|
||||
|
@ -129,6 +129,8 @@ public:
|
||||
|
||||
virtual RiuPlotCurveSymbol* createSymbol( RiuPlotCurveSymbol::PointSymbolEnum symbol ) const = 0;
|
||||
|
||||
virtual void setCurveFittingTolerance( double tolerance ) = 0;
|
||||
|
||||
protected:
|
||||
virtual void setSamplesInPlot( const std::vector<double>& xValues, const std::vector<double>& yValues ) = 0;
|
||||
|
||||
|
@ -581,6 +581,14 @@ RiuPlotCurveSymbol* RiuQtChartsPlotCurve::createSymbol( RiuPlotCurveSymbol::Poin
|
||||
return new RiuQtChartsPlotCurveSymbol( symbol );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuQtChartsPlotCurve::setCurveFittingTolerance( double tolerance )
|
||||
{
|
||||
// Not supported
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -80,6 +80,7 @@ public:
|
||||
void updateLineAndAreaSeries();
|
||||
|
||||
RiuPlotCurveSymbol* createSymbol( RiuPlotCurveSymbol::PointSymbolEnum symbol ) const override;
|
||||
void setCurveFittingTolerance( double tolerance ) override;
|
||||
|
||||
void updateScatterSeries();
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "qwt_point_mapper.h"
|
||||
#include "qwt_scale_map.h"
|
||||
#include "qwt_symbol.h"
|
||||
#include "qwt_weeding_curve_fitter.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
@ -520,3 +521,27 @@ RiuPlotCurveSymbol* RiuQwtPlotCurve::createSymbol( RiuPlotCurveSymbol::PointSymb
|
||||
{
|
||||
return new RiuQwtSymbol( symbol );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiuQwtPlotCurve::setCurveFittingTolerance( double tolerance )
|
||||
{
|
||||
bool enableCurveFitting = ( tolerance > 0.0 );
|
||||
if ( !enableCurveFitting )
|
||||
{
|
||||
setCurveAttribute( QwtPlotCurve::Fitted, false );
|
||||
}
|
||||
else
|
||||
{
|
||||
auto cf = dynamic_cast<QwtWeedingCurveFitter*>( curveFitter() );
|
||||
if ( !cf )
|
||||
{
|
||||
cf = new QwtWeedingCurveFitter;
|
||||
setCurveFitter( cf );
|
||||
}
|
||||
setCurveAttribute( QwtPlotCurve::Fitted, true );
|
||||
|
||||
cf->setTolerance( tolerance );
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +81,8 @@ public:
|
||||
void setSymbol( RiuPlotCurveSymbol* symbol ) override;
|
||||
RiuPlotCurveSymbol* createSymbol( RiuPlotCurveSymbol::PointSymbolEnum symbol ) const override;
|
||||
|
||||
void setCurveFittingTolerance( double tolerance ) override;
|
||||
|
||||
protected:
|
||||
void drawCurve( QPainter* p,
|
||||
int style,
|
||||
|
2
ThirdParty/qwt
vendored
2
ThirdParty/qwt
vendored
@ -1 +1 @@
|
||||
Subproject commit a7272f8e852d2e5113f58fb5d1f50946330bf68b
|
||||
Subproject commit 886436d42226eb2f978735717da03d4e1a912d55
|
Loading…
Reference in New Issue
Block a user