#1148 Use tristate for well cell visibility

This commit is contained in:
Magne Sjaastad 2017-02-02 08:26:27 +01:00
parent b26bd11674
commit fad0974b3f
5 changed files with 103 additions and 45 deletions

View File

@ -1141,9 +1141,6 @@ void RimEclipseView::calculateVisibleWellCellsIncFence(cvf::UByteArray* visibleC
} }
visibleCells->setAll(false); visibleCells->setAll(false);
// If all wells are forced off, return
if (!this->wellCollection()->showWellCells()) return;
RigActiveCellInfo* activeCellInfo = this->currentActiveCellInfo(); RigActiveCellInfo* activeCellInfo = this->currentActiveCellInfo();
CVF_ASSERT(activeCellInfo); CVF_ASSERT(activeCellInfo);
@ -1152,7 +1149,7 @@ void RimEclipseView::calculateVisibleWellCellsIncFence(cvf::UByteArray* visibleC
for (size_t wIdx = 0; wIdx < this->wellCollection()->wells().size(); ++wIdx) for (size_t wIdx = 0; wIdx < this->wellCollection()->wells().size(); ++wIdx)
{ {
RimEclipseWell* well = this->wellCollection()->wells()[wIdx]; RimEclipseWell* well = this->wellCollection()->wells()[wIdx];
if (this->wellCollection()->showWellCells() && well->showWell() && well->showWellCells()) if (well->showWell() && well->showWellCells())
{ {
RigSingleWellResultsData* wres = well->wellResults(); RigSingleWellResultsData* wres = well->wellResults();
if (!wres) continue; if (!wres) continue;

View File

@ -27,6 +27,8 @@
#include "RimEclipseWellCollection.h" #include "RimEclipseWellCollection.h"
#include "RimIntersectionCollection.h" #include "RimIntersectionCollection.h"
#include "RiuMainWindow.h"
#include "cvfMath.h" #include "cvfMath.h"
CAF_PDM_SOURCE_INIT(RimEclipseWell, "Well"); CAF_PDM_SOURCE_INIT(RimEclipseWell, "Well");
@ -51,7 +53,7 @@ RimEclipseWell::RimEclipseWell()
CAF_PDM_InitField(&pipeScaleFactor, "WellPipeRadiusScale", 1.0, "Pipe Scale Factor", "", "", ""); CAF_PDM_InitField(&pipeScaleFactor, "WellPipeRadiusScale", 1.0, "Pipe Scale Factor", "", "", "");
CAF_PDM_InitField(&wellPipeColor, "WellPipeColor", cvf::Color3f(0.588f, 0.588f, 0.804f), "Pipe color", "", "", ""); CAF_PDM_InitField(&wellPipeColor, "WellPipeColor", cvf::Color3f(0.588f, 0.588f, 0.804f), "Pipe color", "", "", "");
CAF_PDM_InitField(&showWellCells, "ShowWellCells", true, "Well Cells", "", "", ""); CAF_PDM_InitField(&showWellCells, "ShowWellCells", false, "Well Cells", "", "", "");
CAF_PDM_InitField(&showWellCellFence, "ShowWellCellFence", false, "Well Cell Fence", "", "", ""); CAF_PDM_InitField(&showWellCellFence, "ShowWellCellFence", false, "Well Cell Fence", "", "", "");
m_resultWellIndex = cvf::UNDEFINED_SIZE_T; m_resultWellIndex = cvf::UNDEFINED_SIZE_T;
@ -77,34 +79,44 @@ caf::PdmFieldHandle* RimEclipseWell::userDescriptionField()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEclipseWell::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) void RimEclipseWell::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{ {
RimEclipseView* m_reservoirView = nullptr; RimEclipseView* reservoirView = nullptr;
this->firstAncestorOrThisOfType(m_reservoirView); this->firstAncestorOrThisOfType(reservoirView);
if (!m_reservoirView) return; if (reservoirView)
if (&showWellLabel == changedField ||
&showWellHead == changedField ||
&showWellPipe == changedField ||
&showWellSpheres == changedField ||
&wellPipeColor == changedField)
{ {
m_reservoirView->scheduleCreateDisplayModelAndRedraw(); if (&showWellLabel == changedField ||
} &showWellHead == changedField ||
else if (&showWell == changedField || &showWellPipe == changedField ||
&showWellCells == changedField || &showWellSpheres == changedField ||
&showWellCellFence == changedField) &wellPipeColor == changedField)
{
m_reservoirView->scheduleGeometryRegen(VISIBLE_WELL_CELLS);
m_reservoirView->scheduleCreateDisplayModelAndRedraw();
}
else if ( &pipeScaleFactor == changedField
|| &wellHeadScaleFactor == changedField)
{
if (m_reservoirView)
{ {
m_reservoirView->schedulePipeGeometryRegen(); reservoirView->scheduleCreateDisplayModelAndRedraw();
m_reservoirView->scheduleCreateDisplayModelAndRedraw();
} }
else if (&showWell == changedField ||
&showWellCells == changedField ||
&showWellCellFence == changedField)
{
reservoirView->scheduleGeometryRegen(VISIBLE_WELL_CELLS);
reservoirView->scheduleCreateDisplayModelAndRedraw();
}
else if ( &pipeScaleFactor == changedField
|| &wellHeadScaleFactor == changedField)
{
if (reservoirView)
{
reservoirView->schedulePipeGeometryRegen();
reservoirView->scheduleCreateDisplayModelAndRedraw();
}
}
}
RimEclipseWellCollection* wellColl = nullptr;
this->firstAncestorOrThisOfType(wellColl);
if (wellColl)
{
wellColl->updateStateForVisibilityCheckboxes();
RiuMainWindow::instance()->refreshDrawStyleActions();
} }
} }

View File

@ -161,7 +161,11 @@ RimEclipseWellCollection::RimEclipseWellCollection()
pipeCrossSectionVertexCount.uiCapability()->setUiHidden(true); pipeCrossSectionVertexCount.uiCapability()->setUiHidden(true);
CAF_PDM_InitField(&wellPipeCoordType, "WellPipeCoordType", WellPipeCoordEnum(WELLPIPE_INTERPOLATED), "Type", "", "", ""); CAF_PDM_InitField(&wellPipeCoordType, "WellPipeCoordType", WellPipeCoordEnum(WELLPIPE_INTERPOLATED), "Type", "", "", "");
CAF_PDM_InitField(&showWellCells, "ShowWellCells", false, "Show Well Cells", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_showWellCells, "ShowWellCells", "Show Well Cells", "", "", "");
m_showWellCells.uiCapability()->setUiEditorTypeName(caf::PdmUiCheckBoxTristateEditor::uiEditorTypeName());
m_showWellCells.xmlCapability()->setIOReadable(false);
m_showWellCells.xmlCapability()->setIOWritable(false);
CAF_PDM_InitField(&showWellCellFence, "ShowWellFences", false, "Show Well Cell Fence", "", "", ""); CAF_PDM_InitField(&showWellCellFence, "ShowWellFences", false, "Show Well Cell Fence", "", "", "");
CAF_PDM_InitField(&wellCellFenceType, "DefaultWellFenceDirection", WellFenceEnum(K_DIRECTION), "Well Fence Direction", "", "", ""); CAF_PDM_InitField(&wellCellFenceType, "DefaultWellFenceDirection", WellFenceEnum(K_DIRECTION), "Well Fence Direction", "", "", "");
@ -191,6 +195,40 @@ RimEclipseWellCollection::~RimEclipseWellCollection()
wells.deleteAllChildObjects(); wells.deleteAllChildObjects();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseWellCollection::setShowWellCellsState(bool enable)
{
for (RimEclipseWell* w : wells)
{
w->showWellCells = enable;
}
updateConnectedEditors();
if (m_reservoirView)
{
m_reservoirView->scheduleGeometryRegen(VISIBLE_WELL_CELLS);
m_reservoirView->scheduleCreateDisplayModelAndRedraw();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimEclipseWellCollection::showWellCells()
{
if (m_showWellCells().isFalse())
{
return false;
}
else
{
return true;
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -212,7 +250,6 @@ RimEclipseWell* RimEclipseWellCollection::findWell(QString name)
bool RimEclipseWellCollection::hasVisibleWellCells() bool RimEclipseWellCollection::hasVisibleWellCells()
{ {
if (!this->isActive()) return false; if (!this->isActive()) return false;
if (!this->showWellCells()) return false;
if (this->wells().size() == 0 ) return false; if (this->wells().size() == 0 ) return false;
bool hasCells = false; bool hasCells = false;
@ -292,12 +329,19 @@ void RimEclipseWellCollection::fieldChangedByUi(const caf::PdmFieldHandle* chang
} }
} }
if (&m_showWellCells == changedField)
{
for (RimEclipseWell* w : wells)
{
w->showWellCells = !(m_showWellCells().isFalse());
}
}
if (m_reservoirView) if (m_reservoirView)
{ {
if ( &isActive == changedField if ( &isActive == changedField
|| &m_showWellLabel == changedField || &m_showWellLabel == changedField
|| &showWellCells == changedField || &m_showWellCells == changedField
|| &showWellCellFence == changedField || &showWellCellFence == changedField
|| &wellCellFenceType == changedField) || &wellCellFenceType == changedField)
{ {
@ -372,7 +416,7 @@ void RimEclipseWellCollection::fieldChangedByUi(const caf::PdmFieldHandle* chang
m_applySingleColorToWells = false; m_applySingleColorToWells = false;
} }
if (&showWellCells == changedField) if (&m_showWellCells == changedField)
{ {
RiuMainWindow::instance()->refreshDrawStyleActions(); RiuMainWindow::instance()->refreshDrawStyleActions();
} }
@ -425,7 +469,7 @@ void RimEclipseWellCollection::defineUiOrdering(QString uiConfigName, caf::PdmUi
caf::PdmUiGroup* filterGroup = uiOrdering.addNewGroup("Well Cells"); caf::PdmUiGroup* filterGroup = uiOrdering.addNewGroup("Well Cells");
filterGroup->add(&obsoleteField_wellCellsToRangeFilterMode); filterGroup->add(&obsoleteField_wellCellsToRangeFilterMode);
filterGroup->add(&showWellCells); filterGroup->add(&m_showWellCells);
filterGroup->add(&showWellCellFence); filterGroup->add(&showWellCellFence);
filterGroup->add(&wellCellFenceType); filterGroup->add(&wellCellFenceType);
@ -442,6 +486,7 @@ void RimEclipseWellCollection::updateStateForVisibilityCheckboxes()
size_t showWellHeadCount = 0; size_t showWellHeadCount = 0;
size_t showPipeCount = 0; size_t showPipeCount = 0;
size_t showSphereCount = 0; size_t showSphereCount = 0;
size_t showWellCellsCount = 0;
for (RimEclipseWell* w : wells) for (RimEclipseWell* w : wells)
{ {
@ -449,12 +494,14 @@ void RimEclipseWellCollection::updateStateForVisibilityCheckboxes()
if (w->showWellHead()) showWellHeadCount++; if (w->showWellHead()) showWellHeadCount++;
if (w->showWellPipe()) showPipeCount++; if (w->showWellPipe()) showPipeCount++;
if (w->showWellSpheres()) showSphereCount++; if (w->showWellSpheres()) showSphereCount++;
if (w->showWellCells()) showWellCellsCount++;
} }
updateStateFromEnabledChildCount(showLabelCount, &m_showWellLabel); updateStateFromEnabledChildCount(showLabelCount, &m_showWellLabel);
updateStateFromEnabledChildCount(showWellHeadCount, &m_showWellHead); updateStateFromEnabledChildCount(showWellHeadCount, &m_showWellHead);
updateStateFromEnabledChildCount(showPipeCount, &m_showWellPipe); updateStateFromEnabledChildCount(showPipeCount, &m_showWellPipe);
updateStateFromEnabledChildCount(showSphereCount, &m_showWellSpheres); updateStateFromEnabledChildCount(showSphereCount, &m_showWellSpheres);
updateStateFromEnabledChildCount(showWellCellsCount, &m_showWellCells);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -523,21 +570,18 @@ void RimEclipseWellCollection::initAfterRead()
if (obsoleteField_wellCellsToRangeFilterMode() == RANGE_ADD_NONE) if (obsoleteField_wellCellsToRangeFilterMode() == RANGE_ADD_NONE)
{ {
showWellCells = false; for (RimEclipseWell* w : wells)
{
w->showWell = false;
}
} }
else if (obsoleteField_wellCellsToRangeFilterMode() == RANGE_ADD_ALL) else if (obsoleteField_wellCellsToRangeFilterMode() == RANGE_ADD_ALL)
{ {
showWellCells = true;
for (RimEclipseWell* w : wells) for (RimEclipseWell* w : wells)
{ {
w->showWellCells = true; w->showWellCells = true;
} }
} }
else if (obsoleteField_wellCellsToRangeFilterMode() == RANGE_ADD_INDIVIDUAL)
{
showWellCells = true;
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -95,7 +95,9 @@ public:
caf::PdmField<cvf::Color3f> wellLabelColor; caf::PdmField<cvf::Color3f> wellLabelColor;
caf::PdmField<bool> showConnectionStatusColors; caf::PdmField<bool> showConnectionStatusColors;
caf::PdmField<bool> showWellCells; void setShowWellCellsState(bool enable);
bool showWellCells();
caf::PdmField<bool> showWellCellFence; caf::PdmField<bool> showWellCellFence;
caf::PdmField<WellFenceEnum> wellCellFenceType; caf::PdmField<WellFenceEnum> wellCellFenceType;
caf::PdmField<double> wellCellTransparencyLevel; caf::PdmField<double> wellCellTransparencyLevel;
@ -116,6 +118,8 @@ public:
const std::vector<cvf::ubyte>& resultWellGeometryVisibilities(size_t frameIndex); const std::vector<cvf::ubyte>& resultWellGeometryVisibilities(size_t frameIndex);
void scheduleIsWellPipesVisibleRecalculation(); void scheduleIsWellPipesVisibleRecalculation();
void updateStateForVisibilityCheckboxes();
static cvf::Color3f cycledPaletteColor(size_t colorIndex); static cvf::Color3f cycledPaletteColor(size_t colorIndex);
@ -130,7 +134,6 @@ protected:
private: private:
void calculateWellGeometryVisibility(size_t frameIndex); void calculateWellGeometryVisibility(size_t frameIndex);
void updateStateForVisibilityCheckboxes();
void updateStateFromEnabledChildCount(size_t showLabelCount, caf::PdmField<caf::Tristate>* fieldToUpdate); void updateStateFromEnabledChildCount(size_t showLabelCount, caf::PdmField<caf::Tristate>* fieldToUpdate);
private: private:
@ -146,6 +149,7 @@ private:
caf::PdmField<caf::Tristate> m_showWellHead; caf::PdmField<caf::Tristate> m_showWellHead;
caf::PdmField<caf::Tristate> m_showWellPipe; caf::PdmField<caf::Tristate> m_showWellPipe;
caf::PdmField<caf::Tristate> m_showWellSpheres; caf::PdmField<caf::Tristate> m_showWellSpheres;
caf::PdmField<caf::Tristate> m_showWellCells;
// Obsolete fields // Obsolete fields
caf::PdmField<WellVisibilityEnum> obsoleteField_wellPipeVisibility; caf::PdmField<WellVisibilityEnum> obsoleteField_wellPipeVisibility;

View File

@ -1384,6 +1384,7 @@ void RiuMainWindow::refreshDrawStyleActions()
m_toggleFaultsLabelAction->blockSignals(false); m_toggleFaultsLabelAction->blockSignals(false);
m_showWellCellsAction->blockSignals(true); m_showWellCellsAction->blockSignals(true);
eclView->wellCollection()->updateStateForVisibilityCheckboxes();
m_showWellCellsAction->setChecked(eclView->wellCollection()->showWellCells()); m_showWellCellsAction->setChecked(eclView->wellCollection()->showWellCells());
m_showWellCellsAction->blockSignals(false); m_showWellCellsAction->blockSignals(false);
} }
@ -1577,7 +1578,7 @@ void RiuMainWindow::slotShowWellCellsAction(bool doAdd)
RimEclipseView* riv = dynamic_cast<RimEclipseView*>(RiaApplication::instance()->activeReservoirView()); RimEclipseView* riv = dynamic_cast<RimEclipseView*>(RiaApplication::instance()->activeReservoirView());
if (riv) if (riv)
{ {
riv->wellCollection()->showWellCells.setValueWithFieldChanged(doAdd); riv->wellCollection()->setShowWellCellsState(doAdd);
} }
} }