Added support for geo mech property filters for managed views

This commit is contained in:
Magne Sjaastad
2015-08-27 22:54:37 +02:00
parent 81ce665883
commit 5fd81b19d8
16 changed files with 155 additions and 119 deletions

View File

@@ -82,7 +82,7 @@ void RicDeleteItemExec::redo()
if (rangeFilterColl) if (rangeFilterColl)
{ {
rangeFilterColl->updateUiUpdateDisplayModel(); rangeFilterColl->updateDisplayModeNotifyManagedViews();
} }
RimEclipsePropertyFilterCollection* eclipsePropColl; RimEclipsePropertyFilterCollection* eclipsePropColl;

View File

@@ -65,7 +65,7 @@ void RicRangeFilterInsertExec::redo()
rangeFilter->setDefaultValues(); rangeFilter->setDefaultValues();
applyCommandDataOnFilter(rangeFilter); applyCommandDataOnFilter(rangeFilter);
m_cellRangeFilterCollection->updateUiUpdateDisplayModel(); m_cellRangeFilterCollection->updateDisplayModeNotifyManagedViews();
m_cellRangeFilterCollection->updateConnectedEditors(); m_cellRangeFilterCollection->updateConnectedEditors();

View File

@@ -68,7 +68,7 @@ void RicRangeFilterNewExec::redo()
rangeFilter->setDefaultValues(); rangeFilter->setDefaultValues();
applyCommandDataOnFilter(rangeFilter); applyCommandDataOnFilter(rangeFilter);
m_cellRangeFilterCollection->updateUiUpdateDisplayModel(); m_cellRangeFilterCollection->updateDisplayModeNotifyManagedViews();
m_cellRangeFilterCollection->updateConnectedEditors(); m_cellRangeFilterCollection->updateConnectedEditors();
@@ -85,7 +85,7 @@ void RicRangeFilterNewExec::undo()
m_cellRangeFilterCollection->rangeFilters.erase(m_cellRangeFilterCollection->rangeFilters.size() - 1); m_cellRangeFilterCollection->rangeFilters.erase(m_cellRangeFilterCollection->rangeFilters.size() - 1);
m_cellRangeFilterCollection->updateUiUpdateDisplayModel(); m_cellRangeFilterCollection->updateDisplayModeNotifyManagedViews();
m_cellRangeFilterCollection->updateConnectedEditors(); m_cellRangeFilterCollection->updateConnectedEditors();
} }

View File

@@ -82,7 +82,7 @@ void RimCellRangeFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
{ {
computeAndSetValidValues(); computeAndSetValidValues();
parentContainer()->updateUiUpdateDisplayModel(); parentContainer()->updateDisplayModeNotifyManagedViews();
} }
} }

View File

@@ -137,16 +137,16 @@ RigActiveCellInfo* RimCellRangeFilterCollection::activeCellInfo() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) void RimCellRangeFilterCollection::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{ {
updateUiUpdateDisplayModel(); this->updateUiIconFromToggleField();
updateDisplayModeNotifyManagedViews();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCellRangeFilterCollection::updateUiUpdateDisplayModel() void RimCellRangeFilterCollection::updateDisplayModeNotifyManagedViews()
{ {
this->updateUiIconFromToggleField();
RimView* rimView = NULL; RimView* rimView = NULL;
firstAnchestorOrThisOfType(rimView); firstAnchestorOrThisOfType(rimView);

View File

@@ -53,7 +53,7 @@ public:
RigActiveCellInfo* activeCellInfo() const; RigActiveCellInfo* activeCellInfo() const;
void updateUiUpdateDisplayModel(); void updateDisplayModeNotifyManagedViews();
// Overridden methods // Overridden methods
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 );

View File

@@ -102,9 +102,10 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
|| &isActive == changedField || &isActive == changedField
|| &filterMode == changedField) || &filterMode == changedField)
{ {
parentContainer()->fieldChangedByUi(changedField, oldValue, newValue);
updateFilterName(); updateFilterName();
this->updateIconState(); this->updateIconState();
parentContainer()->updateDisplayModelNotifyManagedViews();
} }
} }

View File

@@ -70,7 +70,7 @@ void RimEclipsePropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHan
{ {
this->updateUiIconFromToggleField(); this->updateUiIconFromToggleField();
updateDisplayModel(); updateDisplayModelNotifyManagedViews();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -136,7 +136,7 @@ caf::PdmFieldHandle* RimEclipsePropertyFilterCollection::objectToggleField()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimEclipsePropertyFilterCollection::updateDisplayModel() void RimEclipsePropertyFilterCollection::updateDisplayModelNotifyManagedViews()
{ {
RimEclipseView* view = NULL; RimEclipseView* view = NULL;
this->firstAnchestorOrThisOfType(view); this->firstAnchestorOrThisOfType(view);

View File

@@ -45,7 +45,7 @@ public:
void loadAndInitializePropertyFilters(); void loadAndInitializePropertyFilters();
void updateDisplayModel(); void updateDisplayModelNotifyManagedViews();
// Overridden methods // Overridden methods

View File

@@ -81,8 +81,8 @@ void RimGeoMechPropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
{ {
this->updateIconState(); this->updateIconState();
this->updateFilterName(); this->updateFilterName();
((RimView*)resultDefinition->reservoirView())->scheduleGeometryRegen(PROPERTY_FILTERED);
resultDefinition->reservoirView()->scheduleCreateDisplayModelAndRedraw(); parentContainer()->updateDisplayModelNotifyManagedViews();
} }
} }

View File

@@ -18,9 +18,11 @@
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
#include "RimGeoMechPropertyFilterCollection.h" #include "RimGeoMechPropertyFilterCollection.h"
#include "RimGeoMechCellColors.h"
#include "RimGeoMechPropertyFilter.h" #include "RimGeoMechPropertyFilter.h"
#include "RimGeoMechView.h" #include "RimGeoMechView.h"
#include "RimGeoMechCellColors.h" #include "RimManagedViewCollection.h"
#include "cvfAssert.h" #include "cvfAssert.h"
@@ -49,31 +51,17 @@ RimGeoMechPropertyFilterCollection::~RimGeoMechPropertyFilterCollection()
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilterCollection::setReservoirView(RimGeoMechView* reservoirView)
{
m_reservoirView = reservoirView;
for (size_t i = 0; i < propertyFilters.size(); i++)
{
RimGeoMechPropertyFilter* propertyFilter = propertyFilters[i];
propertyFilter->resultDefinition->setReservoirView(m_reservoirView.p());
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RimGeoMechView* RimGeoMechPropertyFilterCollection::reservoirView() RimGeoMechView* RimGeoMechPropertyFilterCollection::reservoirView()
{ {
CVF_ASSERT(!m_reservoirView.isNull()); RimGeoMechView* geoMechView = NULL;
return m_reservoirView; firstAnchestorOrThisOfType(geoMechView);
return geoMechView;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -81,31 +69,9 @@ void RimGeoMechPropertyFilterCollection::fieldChangedByUi(const caf::PdmFieldHan
{ {
this->updateUiIconFromToggleField(); this->updateUiIconFromToggleField();
((RimView*)m_reservoirView)->scheduleGeometryRegen(PROPERTY_FILTERED); updateDisplayModelNotifyManagedViews();
m_reservoirView->scheduleCreateDisplayModelAndRedraw();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGeoMechPropertyFilter* RimGeoMechPropertyFilterCollection::createAndAppendPropertyFilter()
{
RimGeoMechPropertyFilter* propertyFilter = new RimGeoMechPropertyFilter();
propertyFilter->resultDefinition->setReservoirView(m_reservoirView.p());
propertyFilter->setParentContainer(this);
propertyFilters.push_back(propertyFilter);
propertyFilter->resultDefinition->setResultAddress(m_reservoirView->cellResult()->resultAddress());
propertyFilter->resultDefinition->loadResult();
propertyFilter->setToDefaultValues();
propertyFilter->updateFilterName();
return propertyFilter;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -130,21 +96,13 @@ void RimGeoMechPropertyFilterCollection::initAfterRead()
RimGeoMechPropertyFilter* propertyFilter = propertyFilters[i]; RimGeoMechPropertyFilter* propertyFilter = propertyFilters[i];
propertyFilter->setParentContainer(this); propertyFilter->setParentContainer(this);
propertyFilter->resultDefinition->setReservoirView(m_reservoirView.p()); propertyFilter->resultDefinition->setReservoirView(reservoirView());
propertyFilter->updateIconState(); propertyFilter->updateIconState();
} }
this->updateUiIconFromToggleField(); this->updateUiIconFromToggleField();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilterCollection::remove(RimGeoMechPropertyFilter* propertyFilter)
{
propertyFilters.removeChildObject(propertyFilter);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -169,7 +127,6 @@ bool RimGeoMechPropertyFilterCollection::hasActiveDynamicFilters() const
return hasActiveFilters(); return hasActiveFilters();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -177,3 +134,19 @@ caf::PdmFieldHandle* RimGeoMechPropertyFilterCollection::objectToggleField()
{ {
return &active; return &active;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechPropertyFilterCollection::updateDisplayModelNotifyManagedViews()
{
RimGeoMechView* view = NULL;
this->firstAnchestorOrThisOfType(view);
CVF_ASSERT(view);
view->scheduleGeometryRegen(PROPERTY_FILTERED);
view->scheduleCreateDisplayModelAndRedraw();
// Notify managed views of range filter change in master view
view->managedViewCollection()->updatePropertyFilters();
}

View File

@@ -38,33 +38,22 @@ public:
RimGeoMechPropertyFilterCollection(); RimGeoMechPropertyFilterCollection();
virtual ~RimGeoMechPropertyFilterCollection(); virtual ~RimGeoMechPropertyFilterCollection();
void setReservoirView(RimGeoMechView* reservoirView);
RimGeoMechView* reservoirView(); RimGeoMechView* reservoirView();
// Fields: // Fields:
caf::PdmField<bool> active; caf::PdmField<bool> active;
caf::PdmChildArrayField<RimGeoMechPropertyFilter*> propertyFilters; caf::PdmChildArrayField<RimGeoMechPropertyFilter*> propertyFilters;
// Methods // Methods
RimGeoMechPropertyFilter* createAndAppendPropertyFilter();
void remove(RimGeoMechPropertyFilter* propertyFilter);
bool hasActiveFilters() const; bool hasActiveFilters() const;
bool hasActiveDynamicFilters() const; bool hasActiveDynamicFilters() const;
void loadAndInitializePropertyFilters(); void loadAndInitializePropertyFilters();
void updateDisplayModelNotifyManagedViews();
// Overridden methods
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual caf::PdmFieldHandle* objectToggleField();
protected: protected:
// Overridden methods // Overridden methods
virtual void initAfterRead(); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual caf::PdmFieldHandle* objectToggleField();
private: virtual void initAfterRead();
caf::PdmPointer<RimGeoMechView> m_reservoirView;
}; };

View File

@@ -19,38 +19,41 @@
#include "RimGeoMechView.h" #include "RimGeoMechView.h"
#include "Rim3dOverlayInfoConfig.h"
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RiaPreferences.h" #include "RiaPreferences.h"
#include "RimGeoMechCellColors.h"
#include "RiuMainWindow.h"
#include "cafCeetronPlusNavigation.h"
#include "cafCadNavigation.h"
#include "RimLegendConfig.h"
#include "cvfOverlayScalarMapperLegend.h"
#include "RimGeoMechCase.h"
#include "cvfPart.h"
#include "cvfViewport.h"
#include "cvfModelBasicList.h"
#include "cvfScene.h"
#include "RimEclipseView.h"
#include "RiuViewer.h"
#include "RivGeoMechPartMgr.h"
#include "RigGeoMechCaseData.h"
#include "cvfqtUtils.h"
#include "RigFemPartCollection.h" #include "RigFemPartCollection.h"
#include "cafFrameAnimationControl.h"
#include <QMessageBox>
#include "cafProgressInfo.h"
#include "RimCellRangeFilterCollection.h"
#include "RivGeoMechPartMgrCache.h"
#include "RivGeoMechVizLogic.h"
#include "RigFemPartGrid.h" #include "RigFemPartGrid.h"
#include "RigFemPartResultsCollection.h" #include "RigFemPartResultsCollection.h"
#include "RimGeoMechPropertyFilterCollection.h" #include "RigGeoMechCaseData.h"
#include "Rim3dOverlayInfoConfig.h"
#include "RimCellRangeFilterCollection.h"
#include "RimEclipseView.h"
#include "RimGeoMechCase.h"
#include "RimGeoMechCellColors.h"
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimLegendConfig.h"
#include "RiuMainWindow.h"
#include "RiuViewer.h"
#include "RivGeoMechPartMgr.h"
#include "RivGeoMechPartMgrCache.h"
#include "RivGeoMechVizLogic.h"
#include "cafCadNavigation.h"
#include "cafCeetronPlusNavigation.h"
#include "cafFrameAnimationControl.h"
#include "cafProgressInfo.h"
#include "cvfModelBasicList.h"
#include "cvfOverlayScalarMapperLegend.h"
#include "cvfPart.h"
#include "cvfScene.h"
#include "cvfViewport.h"
#include "cvfqtUtils.h"
#include <QMessageBox>
@@ -74,17 +77,15 @@ RimGeoMechView::RimGeoMechView(void)
m_rangeFilterCollection = new RimCellRangeFilterCollection(); m_rangeFilterCollection = new RimCellRangeFilterCollection();
m_rangeFilterCollection.uiCapability()->setUiHidden(true); m_rangeFilterCollection.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&propertyFilterCollection, "PropertyFilters", "Property Filters", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_propertyFilterCollection, "PropertyFilters", "Property Filters", "", "", "");
propertyFilterCollection = new RimGeoMechPropertyFilterCollection(); m_propertyFilterCollection = new RimGeoMechPropertyFilterCollection();
propertyFilterCollection->setReservoirView(this); m_propertyFilterCollection.uiCapability()->setUiHidden(true);
propertyFilterCollection.uiCapability()->setUiHidden(true);
this->cellResult()->setReservoirView(this); this->cellResult()->setReservoirView(this);
this->cellResult()->legendConfig()->setReservoirView(this); this->cellResult()->legendConfig()->setReservoirView(this);
m_scaleTransform = new cvf::Transform(); m_scaleTransform = new cvf::Transform();
m_vizLogic = new RivGeoMechVizLogic(this); m_vizLogic = new RivGeoMechVizLogic(this);
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -514,3 +515,26 @@ void RimGeoMechView::scheduleGeometryRegen(RivCellSetEnum geometryType)
m_vizLogic->scheduleGeometryRegen(geometryType); m_vizLogic->scheduleGeometryRegen(geometryType);
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechView::setOverridePropertyFilterCollection(RimGeoMechPropertyFilterCollection* pfc)
{
m_overridePropertyFilterCollection = pfc;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGeoMechPropertyFilterCollection* RimGeoMechView::propertyFilterCollection()
{
if (m_overridePropertyFilterCollection)
{
return m_overridePropertyFilterCollection;
}
else
{
return m_propertyFilterCollection;
}
}

View File

@@ -63,8 +63,10 @@ public:
virtual void loadDataAndUpdate(); virtual void loadDataAndUpdate();
caf::PdmChildField<RimGeoMechCellColors*> cellResult; caf::PdmChildField<RimGeoMechCellColors*> cellResult;
caf::PdmChildField<RimGeoMechPropertyFilterCollection*> propertyFilterCollection;
RimGeoMechPropertyFilterCollection* propertyFilterCollection();
void setOverridePropertyFilterCollection(RimGeoMechPropertyFilterCollection* pfc);
bool isTimeStepDependentDataVisible(); bool isTimeStepDependentDataVisible();
@@ -91,6 +93,9 @@ private:
virtual RimCase* ownerCase(); virtual RimCase* ownerCase();
caf::PdmChildField<RimGeoMechPropertyFilterCollection*> m_propertyFilterCollection;
caf::PdmPointer<RimGeoMechPropertyFilterCollection> m_overridePropertyFilterCollection;
caf::PdmPointer<RimGeoMechCase> m_geomechCase; caf::PdmPointer<RimGeoMechCase> m_geomechCase;
cvf::ref<RivGeoMechVizLogic> m_vizLogic; cvf::ref<RivGeoMechVizLogic> m_vizLogic;
cvf::ref<cvf::Transform> m_scaleTransform; cvf::ref<cvf::Transform> m_scaleTransform;

View File

@@ -32,6 +32,8 @@
#include "RiuViewer.h" #include "RiuViewer.h"
#include "cafPdmUiTreeOrdering.h" #include "cafPdmUiTreeOrdering.h"
#include "RimGeoMechView.h"
#include "RimGeoMechPropertyFilterCollection.h"
CAF_PDM_SOURCE_INIT(RimManagedViewConfig, "RimManagedViewConfig"); CAF_PDM_SOURCE_INIT(RimManagedViewConfig, "RimManagedViewConfig");
@@ -154,7 +156,7 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
if (managedView) if (managedView)
{ {
managedView->rangeFilterCollection()->updateUiUpdateDisplayModel(); managedView->rangeFilterCollection()->updateDisplayModeNotifyManagedViews();
} }
} }
else if (changedField == &syncPropertyFilters) else if (changedField == &syncPropertyFilters)
@@ -164,7 +166,14 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
RimEclipseView* eclipseView = managedEclipseView(); RimEclipseView* eclipseView = managedEclipseView();
if (eclipseView) if (eclipseView)
{ {
eclipseView->propertyFilterCollection()->updateDisplayModel(); eclipseView->propertyFilterCollection()->updateDisplayModelNotifyManagedViews();
}
RimGeoMechView* geoView = managedGeoView();
if (geoView)
{
geoView->scheduleGeometryRegen(PROPERTY_FILTERED);
geoView->scheduleCreateDisplayModelAndRedraw();
} }
} }
else if (changedField == &managedView) else if (changedField == &managedView)
@@ -173,7 +182,7 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
if (managedView) if (managedView)
{ {
managedView->rangeFilterCollection()->updateUiUpdateDisplayModel(); managedView->rangeFilterCollection()->updateDisplayModeNotifyManagedViews();
if (syncCellResult()) if (syncCellResult())
{ {
@@ -189,13 +198,19 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
{ {
RimView* rimView = dynamic_cast<RimView*>(prevValue); RimView* rimView = dynamic_cast<RimView*>(prevValue);
rimView->setOverrideRangeFilterCollection(NULL); rimView->setOverrideRangeFilterCollection(NULL);
rimView->rangeFilterCollection()->updateUiUpdateDisplayModel(); rimView->rangeFilterCollection()->updateDisplayModeNotifyManagedViews();
RimEclipseView* rimEclipseView = dynamic_cast<RimEclipseView*>(rimView); RimEclipseView* rimEclipseView = dynamic_cast<RimEclipseView*>(rimView);
if (rimEclipseView) if (rimEclipseView)
{ {
rimEclipseView->setOverridePropertyFilterCollection(NULL); rimEclipseView->setOverridePropertyFilterCollection(NULL);
} }
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(rimView);
if (geoView)
{
geoView->setOverridePropertyFilterCollection(NULL);
}
} }
} }
} }
@@ -235,6 +250,23 @@ void RimManagedViewConfig::configureOverrides()
} }
} }
} }
RimGeoMechView* masterGeoView = dynamic_cast<RimGeoMechView*>(masterView);
if (masterGeoView)
{
RimGeoMechView* geoView = managedGeoView();
if (geoView)
{
if (syncPropertyFilters)
{
geoView->setOverridePropertyFilterCollection(masterGeoView->propertyFilterCollection());
}
else
{
geoView->setOverridePropertyFilterCollection(NULL);
}
}
}
} }
} }
@@ -256,3 +288,13 @@ RimEclipseView* RimManagedViewConfig::managedEclipseView()
return dynamic_cast<RimEclipseView*>(rimView); return dynamic_cast<RimEclipseView*>(rimView);
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGeoMechView* RimManagedViewConfig::managedGeoView()
{
RimView* rimView = managedView;
return dynamic_cast<RimGeoMechView*>(rimView);
}

View File

@@ -25,6 +25,7 @@
class RimView; class RimView;
class RimEclipseView; class RimEclipseView;
class RimGeoMechView;
//================================================================================================== //==================================================================================================
/// ///
@@ -57,4 +58,5 @@ private:
void configureOverrides(); void configureOverrides();
RimEclipseView* managedEclipseView(); RimEclipseView* managedEclipseView();
RimGeoMechView* managedGeoView();
}; };