#3103 Make grid lines match major and minor interval and make the grid lines optional

This commit is contained in:
Gaute Lindkvist 2018-06-27 12:42:11 +02:00
parent 8c445388b8
commit 707a7a91e6
6 changed files with 81 additions and 18 deletions

View File

@ -1020,7 +1020,7 @@ void RimWellPltPlot::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
m_wellLogPlot->uiOrderingForPlotSettings(*legendAndAxisGroup);
track->uiOrderingForVisibleXRange(*legendAndAxisGroup);
track->uiOrderingForXAxisSettings(*legendAndAxisGroup);
m_wellLogPlot->uiOrderingForDepthAxis(*legendAndAxisGroup);
}

View File

@ -783,7 +783,7 @@ void RimWellRftPlot::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
m_wellLogPlot->uiOrderingForPlotSettings(*legendAndAxisGroup);
track->uiOrderingForVisibleXRange(*legendAndAxisGroup);
track->uiOrderingForXAxisSettings(*legendAndAxisGroup);
m_wellLogPlot->uiOrderingForDepthAxis(*legendAndAxisGroup);
}

View File

@ -115,6 +115,15 @@ namespace caf
addItem(RimWellLogTrack::EXTRA_WIDE_TRACK, "EXTRA_WIDE_TRACK", "Extra wide");
setDefault(RimWellLogTrack::NORMAL_TRACK);
}
template<>
void AppEnum< RimWellLogTrack::GridLines >::setUp()
{
addItem(RimWellLogTrack::GRID_X_NONE, "GRID_X_NONE", "No Gridlines");
addItem(RimWellLogTrack::GRID_X_MAJOR, "GRID_X_MAJOR", "Major Only");
addItem(RimWellLogTrack::GRID_X_MAJOR_AND_MINOR, "GRID_X_MAJOR_AND_MINOR", "Major and Minor");
setDefault(RimWellLogTrack::GRID_X_MAJOR);
}
}
@ -142,6 +151,8 @@ RimWellLogTrack::RimWellLogTrack()
CAF_PDM_InitField(&m_isLogarithmicScaleEnabled, "LogarithmicScaleX", false, "Logarithmic Scale", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_showXGridLines, "ShowXGridLines", "Show Grid Lines", "", "", "");
CAF_PDM_InitField(&m_showFormations, "ShowFormations", false, "Show", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_formationSource, "FormationSource", "Source", "", "", "");
@ -242,6 +253,11 @@ void RimWellLogTrack::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
updateAxisAndGridTickIntervals();
m_wellLogTrackPlotWidget->replot();
}
else if (changedField == &m_showXGridLines)
{
updateAxisAndGridTickIntervals();
m_wellLogTrackPlotWidget->replot();
}
else if (changedField == &m_visibleXRangeMin || changedField == &m_visibleXRangeMax)
{
m_wellLogTrackPlotWidget->setXRange(m_visibleXRangeMin, m_visibleXRangeMax);
@ -417,6 +433,18 @@ void RimWellLogTrack::updateAxisAndGridTickIntervals()
m_wellLogTrackPlotWidget->setAxisMaxMajor(QwtPlot::xTop, xMajorTickIntervals);
m_wellLogTrackPlotWidget->setAxisMaxMinor(QwtPlot::xTop, xMinorTickIntervals);
switch (m_showXGridLines())
{
case GRID_X_NONE:
m_wellLogTrackPlotWidget->enableGridLines(false, false);
break;
case GRID_X_MAJOR:
m_wellLogTrackPlotWidget->enableGridLines(true, false);
break;
case GRID_X_MAJOR_AND_MINOR:
m_wellLogTrackPlotWidget->enableGridLines(true, true);
break;
}
}
//--------------------------------------------------------------------------------------------------
@ -850,29 +878,43 @@ void RimWellLogTrack::calculateXZoomRange()
double minValue = HUGE_VAL;
double maxValue = -HUGE_VAL;
size_t visibleCurves = 0u;
for (size_t cIdx = 0; cIdx < curves.size(); cIdx++)
{
double minCurveValue = HUGE_VAL;
double maxCurveValue = -HUGE_VAL;
if (curves[cIdx]->isCurveVisible() && curves[cIdx]->valueRange(&minCurveValue, &maxCurveValue))
if (curves[cIdx]->isCurveVisible())
{
if (minCurveValue < minValue)
visibleCurves++;
if (curves[cIdx]->valueRange(&minCurveValue, &maxCurveValue))
{
minValue = minCurveValue;
}
if (minCurveValue < minValue)
{
minValue = minCurveValue;
}
if (maxCurveValue > maxValue)
{
maxValue = maxCurveValue;
if (maxCurveValue > maxValue)
{
maxValue = maxCurveValue;
}
}
}
}
if (minValue == HUGE_VAL)
{
minValue = RI_LOGPLOTTRACK_MINX_DEFAULT;
maxValue = RI_LOGPLOTTRACK_MAXX_DEFAULT;
if (visibleCurves)
{
minValue = RI_LOGPLOTTRACK_MINX_DEFAULT;
maxValue = RI_LOGPLOTTRACK_MAXX_DEFAULT;
}
else
{
// Empty axis when there are no curves
minValue = 0;
maxValue = 0;
}
}
m_visibleXRangeMin = minValue;
@ -990,7 +1032,7 @@ void RimWellLogTrack::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
}
}
uiOrderingForVisibleXRange(uiOrdering);
uiOrderingForXAxisSettings(uiOrdering);
caf::PdmUiGroup* trackSettingsGroup = uiOrdering.addNewGroup("Track Settings");
trackSettingsGroup->add(&m_widthScaleFactor);
@ -1142,12 +1184,13 @@ void RimWellLogTrack::uiOrderingForRftPltFormations(caf::PdmUiOrdering& uiOrderi
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimWellLogTrack::uiOrderingForVisibleXRange(caf::PdmUiOrdering& uiOrdering)
void RimWellLogTrack::uiOrderingForXAxisSettings(caf::PdmUiOrdering& uiOrdering)
{
caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup("Visible X Axis Range");
caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup("X Axis Settings");
gridGroup->add(&m_isLogarithmicScaleEnabled);
gridGroup->add(&m_visibleXRangeMin);
gridGroup->add(&m_visibleXRangeMax);
gridGroup->add(&m_showXGridLines);
}
//--------------------------------------------------------------------------------------------------

View File

@ -68,9 +68,10 @@ public:
RimWellLogTrack();
virtual ~RimWellLogTrack();
enum TrajectoryType { WELL_PATH, SIMULATION_WELL };
enum FormationSource { CASE, WELL_PICK_FILTER };
enum TrajectoryType { WELL_PATH, SIMULATION_WELL };
enum FormationSource { CASE, WELL_PICK_FILTER };
enum WidthScaleFactor { EXTRA_NARROW_TRACK = 2, NARROW_TRACK = 3, NORMAL_TRACK = 4, WIDE_TRACK = 6, EXTRA_WIDE_TRACK = 10 };
enum GridLines { GRID_X_NONE, GRID_X_MAJOR, GRID_X_MAJOR_AND_MINOR};
void setDescription(const QString& description);
bool isVisible();
@ -125,7 +126,7 @@ public:
std::vector<RimWellLogCurve* > curvesVector();
void uiOrderingForRftPltFormations(caf::PdmUiOrdering& uiOrdering);
void uiOrderingForVisibleXRange(caf::PdmUiOrdering& uiOrdering);
void uiOrderingForXAxisSettings(caf::PdmUiOrdering& uiOrdering);
void setFormationsForCaseWithSimWellOnly(bool caseWithSimWellOnly);
@ -174,6 +175,8 @@ private:
caf::PdmField<double> m_visibleXRangeMax;
caf::PdmField<bool> m_isAutoScaleXEnabled;
caf::PdmField<bool> m_isLogarithmicScaleEnabled;
caf::PdmField<caf::AppEnum<GridLines>> m_showXGridLines;
caf::PdmField<bool> m_showFormations;
caf::PdmField<caf::AppEnum<FormationSource>> m_formationSource;
caf::PdmPtrField<RimCase*> m_formationCase;

View File

@ -288,3 +288,20 @@ int RiuWellLogTrack::widthScaleFactor() const
return 1;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuWellLogTrack::enableGridLines(bool majorGridLines, bool minorGridLines)
{
QwtPlotItemList plotItems = this->itemList(QwtPlotItem::Rtti_PlotGrid);
for (QwtPlotItem* plotItem : plotItems)
{
QwtPlotGrid* grid = static_cast<QwtPlotGrid*>(plotItem);
grid->setXAxis(QwtPlot::xTop);
grid->enableX(majorGridLines);
grid->enableXMin(minorGridLines);
grid->setMajorPen(Qt::lightGray, 1.0, Qt::SolidLine);
grid->setMinorPen(Qt::lightGray, 1.0, Qt::DashLine);
}
}

View File

@ -54,7 +54,7 @@ public:
bool isRimTrackVisible();
void enableVerticalAxisLabelsAndTitle(bool enable);
int widthScaleFactor() const;
void enableGridLines(bool majorGridLines, bool minorGridLines);
protected:
virtual bool eventFilter(QObject* watched, QEvent* event);
virtual QSize sizeHint() const;