mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Performance: Recompute legend only when required
This commit is contained in:
parent
15eab9b261
commit
e02d2f2300
@ -416,14 +416,46 @@ void RimLegendConfig::updateLegend()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimLegendConfig::setAutomaticRanges(double globalMin, double globalMax, double localMin, double localMax)
|
void RimLegendConfig::setAutomaticRanges(double globalMin, double globalMax, double localMin, double localMax)
|
||||||
{
|
{
|
||||||
m_globalAutoMin = roundToNumSignificantDigits(globalMin, m_precision);
|
double candidateGlobalAutoMin = roundToNumSignificantDigits(globalMin, m_precision);
|
||||||
m_globalAutoMax = roundToNumSignificantDigits(globalMax, m_precision);
|
double candidateGlobalAutoMax = roundToNumSignificantDigits(globalMax, m_precision);
|
||||||
|
|
||||||
m_localAutoMin = roundToNumSignificantDigits(localMin, m_precision);
|
double candidateLocalAutoMin = roundToNumSignificantDigits(localMin, m_precision);
|
||||||
m_localAutoMax = roundToNumSignificantDigits(localMax, m_precision);
|
double candidateLocalAutoMax = roundToNumSignificantDigits(localMax, m_precision);
|
||||||
|
|
||||||
|
bool needsUpdate = false;
|
||||||
|
const double epsilon = std::numeric_limits<double>::epsilon();
|
||||||
|
|
||||||
|
if (cvf::Math::abs(candidateGlobalAutoMax - m_globalAutoMax) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cvf::Math::abs(candidateGlobalAutoMin - m_globalAutoMin) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cvf::Math::abs(candidateLocalAutoMax - m_localAutoMax) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cvf::Math::abs(candidateLocalAutoMin - m_localAutoMin) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needsUpdate)
|
||||||
|
{
|
||||||
|
m_globalAutoMin = candidateGlobalAutoMin;
|
||||||
|
m_globalAutoMax = candidateGlobalAutoMax;
|
||||||
|
|
||||||
|
m_localAutoMin = candidateLocalAutoMin;
|
||||||
|
m_localAutoMax = candidateLocalAutoMax;
|
||||||
|
|
||||||
updateLegend();
|
updateLegend();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -561,6 +593,28 @@ double RimLegendConfig::roundToNumSignificantDigits(double domainValue, double n
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimLegendConfig::setClosestToZeroValues(double globalPosClosestToZero, double globalNegClosestToZero, double localPosClosestToZero, double localNegClosestToZero)
|
void RimLegendConfig::setClosestToZeroValues(double globalPosClosestToZero, double globalNegClosestToZero, double localPosClosestToZero, double localNegClosestToZero)
|
||||||
|
{
|
||||||
|
bool needsUpdate = false;
|
||||||
|
const double epsilon = std::numeric_limits<double>::epsilon();
|
||||||
|
|
||||||
|
if (cvf::Math::abs(globalPosClosestToZero - m_globalAutoPosClosestToZero) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
if (cvf::Math::abs(globalNegClosestToZero - m_globalAutoNegClosestToZero) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
if (cvf::Math::abs(localPosClosestToZero - m_localAutoPosClosestToZero) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
if (cvf::Math::abs(localNegClosestToZero - m_localAutoNegClosestToZero) > epsilon)
|
||||||
|
{
|
||||||
|
needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (needsUpdate)
|
||||||
{
|
{
|
||||||
m_globalAutoPosClosestToZero = globalPosClosestToZero;
|
m_globalAutoPosClosestToZero = globalPosClosestToZero;
|
||||||
m_globalAutoNegClosestToZero = globalNegClosestToZero;
|
m_globalAutoNegClosestToZero = globalNegClosestToZero;
|
||||||
@ -574,6 +628,7 @@ void RimLegendConfig::setClosestToZeroValues(double globalPosClosestToZero, doub
|
|||||||
|
|
||||||
updateLegend();
|
updateLegend();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
|
@ -93,13 +93,13 @@ public:
|
|||||||
|
|
||||||
cvf::ScalarMapper* scalarMapper() { return m_currentScalarMapper.p(); }
|
cvf::ScalarMapper* scalarMapper() { return m_currentScalarMapper.p(); }
|
||||||
cvf::OverlayScalarMapperLegend* legend() { return m_legend.p(); }
|
cvf::OverlayScalarMapperLegend* legend() { return m_legend.p(); }
|
||||||
void updateLegend();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||||
virtual void initAfterRead();
|
virtual void initAfterRead();
|
||||||
virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
|
virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering );
|
||||||
private:
|
private:
|
||||||
|
void updateLegend();
|
||||||
void updateFieldVisibility();
|
void updateFieldVisibility();
|
||||||
cvf::ref<cvf::Color3ubArray> interpolateColorArray(const cvf::Color3ubArray& colorArray, cvf::uint targetColorCount);
|
cvf::ref<cvf::Color3ubArray> interpolateColorArray(const cvf::Color3ubArray& colorArray, cvf::uint targetColorCount);
|
||||||
double roundToNumSignificantDigits(double value, double precision);
|
double roundToNumSignificantDigits(double value, double precision);
|
||||||
|
Loading…
Reference in New Issue
Block a user