#5285 Surface Import command. SurfaceInView tree-items. Delete.

Ready to start on visualization code
This commit is contained in:
Jacob Støren
2020-01-06 11:30:06 +01:00
parent 3488280c69
commit 45a3225ec8
16 changed files with 288 additions and 20 deletions

View File

@@ -22,6 +22,7 @@
#include "RiaGuiApplication.h"
#include "Rim2dIntersectionViewCollection.h"
#include "Rim3dView.h"
#include "RimAnnotationCollection.h"
#include "RimAnnotationInViewCollection.h"
@@ -33,6 +34,7 @@
#include "RimEnsembleCurveSet.h"
#include "RimEnsembleCurveSetCollection.h"
#include "RimFormationNamesCollection.h"
#include "RimFractureTemplateCollection.h"
#include "RimGeoMechPropertyFilterCollection.h"
#include "RimIntersectionCollection.h"
#include "RimIntersectionResultsDefinitionCollection.h"
@@ -41,6 +43,7 @@
#include "RimSummaryCrossPlotCollection.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimSurfaceCollection.h"
#include "RimViewLinkerCollection.h"
#include "RimWellLogPlot.h"
#include "RimWellLogPlotCollection.h"
@@ -50,9 +53,6 @@
#include "RiuPlotMainWindow.h"
#include "RimFractureTemplateCollection.h"
#include "Rim2dIntersectionViewCollection.h"
#include "cafNotificationCenter.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmDocument.h"
@@ -329,6 +329,15 @@ void RicDeleteItemExec::redo()
annotationColl->onAnnotationDeleted();
}
}
{
RimSurfaceCollection* surfCollection;
parentObj->firstAncestorOrThisOfType( surfCollection );
if ( surfCollection )
{
surfCollection->updateViews();
}
}
}
}

View File

@@ -54,6 +54,7 @@
#include "RimSummaryCurve.h"
#include "RimSummaryCurveFilter.h"
#include "RimSummaryPlot.h"
#include "RimSurface.h"
#include "RimTextAnnotation.h"
#include "RimViewController.h"
#include "RimWellAllocationPlot.h"
@@ -139,6 +140,7 @@ bool isDeletable( caf::PdmUiItem* uiItem )
if ( dynamic_cast<RimReachCircleAnnotation*>( uiItem ) ) return true;
if ( dynamic_cast<RimPolylinesAnnotation*>( uiItem ) ) return true;
if ( dynamic_cast<RimIntersectionResultDefinition*>( uiItem ) ) return true;
if ( dynamic_cast<RimSurface*>( uiItem ) ) return true;
if ( dynamic_cast<RimGridCrossPlot*>( uiItem ) )
{

View File

@@ -57,7 +57,7 @@ void RicImportSurfacesFeature::onActionTriggered( bool isChecked )
// Remember the path to next time
app->setLastUsedDialogDirectory( "BINARY_GRID", QFileInfo( fileNames.last() ).absolutePath() );
// Find or create the AnnotationsCollection
// Find or create the SurfaceCollection
RimProject* proj = RiaApplication::instance()->project();
RimSurfaceCollection* surfColl = proj->activeOilField()->surfaceCollection();
@@ -66,20 +66,17 @@ void RicImportSurfacesFeature::onActionTriggered( bool isChecked )
{
surfColl = new RimSurfaceCollection();
proj->activeOilField()->surfaceCollection = surfColl;
proj->updateConnectedEditors();
}
// For each file,
RimSurface* lastCreatedOrUpdated = surfColl->importSurfacesFromFiles( fileNames );
proj->updateConnectedEditors();
if ( lastCreatedOrUpdated )
{
Riu3DMainWindowTools::selectAsCurrentItem( lastCreatedOrUpdated );
}
// surfColl->scheduleRedrawOfRelevantViews();
}
//--------------------------------------------------------------------------------------------------

View File

@@ -102,6 +102,8 @@
#include "RimSummaryCurveCollection.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimSurface.h"
#include "RimSurfaceCollection.h"
#include "RimValveTemplate.h"
#include "RimValveTemplateCollection.h"
#include "RimViewController.h"
@@ -799,6 +801,10 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "Separator";
menuBuilder << "RicConvertFractureTemplateUnitFeature";
}
else if ( dynamic_cast<RimSurfaceCollection*>( firstUiItem ) || dynamic_cast<RimSurface*>( firstUiItem ) )
{
menuBuilder << "RicImportSurfacesFeature";
}
else if ( dynamic_cast<RimAnnotationCollection*>( firstUiItem ) ||
dynamic_cast<RimAnnotationGroupCollection*>( firstUiItem ) )
{

View File

@@ -71,6 +71,7 @@
#include "RimSimWellInView.h"
#include "RimSimWellInViewCollection.h"
#include "RimStimPlanColors.h"
#include "RimSurfaceInViewCollection.h"
#include "RimTernaryLegendConfig.h"
#include "RimViewController.h"
#include "RimViewLinker.h"
@@ -1754,6 +1755,8 @@ void RimEclipseView::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin
uiTreeOrdering.add( annotationCollection() );
uiTreeOrdering.add( intersectionCollection() );
if ( surfaceInViewCollection() ) uiTreeOrdering.add( surfaceInViewCollection() );
uiTreeOrdering.add( m_rangeFilterCollection() );
uiTreeOrdering.add( m_propertyFilterCollection() );
uiTreeOrdering.skipRemainingChildren( true );

View File

@@ -42,6 +42,7 @@
#include "RimIntersectionResultDefinition.h"
#include "RimIntersectionResultsDefinitionCollection.h"
#include "RimRegularLegendConfig.h"
#include "RimSurfaceInViewCollection.h"
#include "RimTensorResults.h"
#include "RimTernaryLegendConfig.h"
#include "RimViewLinker.h"
@@ -907,6 +908,7 @@ void RimGeoMechView::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin
uiTreeOrdering.add( &m_wellMeasurementCollection );
uiTreeOrdering.add( m_intersectionCollection() );
if ( surfaceInViewCollection() ) uiTreeOrdering.add( surfaceInViewCollection() );
uiTreeOrdering.add( m_rangeFilterCollection() );
uiTreeOrdering.add( m_propertyFilterCollection() );

View File

@@ -29,8 +29,11 @@
#include "RimGridCollection.h"
#include "RimIntersectionCollection.h"
#include "RimIntersectionResultsDefinitionCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimPropertyFilterCollection.h"
#include "RimSurfaceCollection.h"
#include "RimSurfaceInViewCollection.h"
#include "RimTextAnnotation.h"
#include "RimViewController.h"
#include "RimViewLinker.h"
@@ -97,6 +100,9 @@ RimGridView::RimGridView()
CAF_PDM_InitFieldNoDefault( &m_wellMeasurementCollection, "WellMeasurements", "Well Measurements", "", "", "" );
m_wellMeasurementCollection = new RimWellMeasurementInViewCollection;
m_wellMeasurementCollection.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_surfaceCollection, "SurfaceInViewCollection", "Surface Collection Field", "", "", "" );
m_surfaceCollection.uiCapability()->setUiTreeHidden( true );
}
//--------------------------------------------------------------------------------------------------
@@ -174,6 +180,14 @@ RimIntersectionCollection* RimGridView::intersectionCollection() const
return m_intersectionCollection();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSurfaceInViewCollection* RimGridView::surfaceInViewCollection() const
{
return m_surfaceCollection();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -565,3 +579,28 @@ void RimGridView::updateWellMeasurements()
{
m_wellMeasurementCollection->syncWithChangesInWellMeasurementCollection();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGridView::updateSurfacesInViewTreeItems()
{
RimProject* proj = RiaApplication::instance()->project();
RimSurfaceCollection* surfColl = proj->activeOilField()->surfaceCollection();
if ( surfColl && surfColl->surfaces().size() )
{
if ( !m_surfaceCollection() )
{
m_surfaceCollection = new RimSurfaceInViewCollection();
}
m_surfaceCollection->updateFromSurfaceCollection();
}
else
{
delete m_surfaceCollection;
}
this->updateConnectedEditors();
}

View File

@@ -31,6 +31,7 @@ class RimPropertyFilterCollection;
class RimGridCollection;
class RimCellRangeFilterCollection;
class RimWellMeasurementInViewCollection;
class RimSurfaceInViewCollection;
class RimGridView : public Rim3dView
{
@@ -47,6 +48,7 @@ public:
cvf::ref<cvf::UByteArray> currentTotalCellVisibility();
RimIntersectionCollection* intersectionCollection() const;
RimSurfaceInViewCollection* surfaceInViewCollection() const;
RimIntersectionResultsDefinitionCollection* separateIntersectionResultsCollection() const;
RimAnnotationInViewCollection* annotationCollection() const;
RimWellMeasurementInViewCollection* measurementCollection() const;
@@ -72,6 +74,7 @@ public:
bool forceChange = false ) override;
void updateWellMeasurements();
void updateSurfacesInViewTreeItems();
protected:
virtual void updateViewFollowingRangeFilterUpdates();
@@ -98,6 +101,7 @@ protected:
caf::PdmChildField<RimGridCollection*> m_gridCollection;
caf::PdmChildField<RimAnnotationInViewCollection*> m_annotationCollection;
caf::PdmChildField<RimWellMeasurementInViewCollection*> m_wellMeasurementCollection;
caf::PdmChildField<RimSurfaceInViewCollection*> m_surfaceCollection;
private:
void onCreatePartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) override;

View File

@@ -64,6 +64,33 @@ QString RimSurface::userDescription()
return m_userDescription();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* RimSurface::userDescriptionField()
{
return &m_userDescription;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurface::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue )
{
if ( changedField == &m_surfaceDefinitionFilePath )
{
updateDataFromFile();
// Todo: Update visualization
}
else if ( changedField == &m_color )
{
// Todo: Update visualization
}
}
struct SurfacePointData
{
int i;

View File

@@ -49,6 +49,11 @@ public:
QString userDescription();
private:
caf::PdmFieldHandle* userDescriptionField() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue ) override;
caf::PdmField<caf::FilePath> m_surfaceDefinitionFilePath;
caf::PdmField<QString> m_userDescription;
caf::PdmField<cvf::Color3f> m_color;

View File

@@ -20,8 +20,10 @@
#include "QMessageBox"
#include "RiaApplication.h"
#include "RiaColorTables.h"
#include "RimGridView.h"
#include "RimProject.h"
#include "RimSurface.h"
#include "RimSurfaceInView.h"
CAF_PDM_SOURCE_INIT( RimSurfaceCollection, "SurfaceCollection" );
@@ -122,6 +124,14 @@ RimSurface* RimSurfaceCollection::importSurfacesFromFiles( const QStringList& fi
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimSurface*> RimSurfaceCollection::surfaces() const
{
return m_surfaces.childObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -131,10 +141,53 @@ void RimSurfaceCollection::updateViews( const std::vector<RimSurface*>& surfsToR
std::vector<RimGridView*> views;
proj->allVisibleGridViews( views );
// Make sure the tree items are syncronized
for ( auto view : views )
{
// Update SurfaceInViewCollection
// For each visible surfaceInView included in surfsToReload
// LoadDataAndUpdate
view->updateSurfacesInViewTreeItems();
}
std::set<RimGridView*> viewsNeedingUpdate;
for ( auto surf : surfsToReload )
{
std::vector<RimSurfaceInView*> surfsInView;
surf->objectsWithReferringPtrFieldsOfType( surfsInView );
for ( auto surfInView : surfsInView )
{
RimGridView* gridView;
surfInView->firstAncestorOrThisOfType( gridView );
if ( gridView ) viewsNeedingUpdate.insert( gridView );
}
}
// Update the views:
for ( auto view : viewsNeedingUpdate )
{
view->scheduleCreateDisplayModelAndRedraw();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceCollection::updateViews()
{
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimGridView*> views;
proj->allVisibleGridViews( views );
// Make sure the tree items are syncronized
for ( auto view : views )
{
view->updateSurfacesInViewTreeItems();
}
for ( auto view : views )
{
view->scheduleCreateDisplayModelAndRedraw();
}
}

View File

@@ -34,6 +34,10 @@ public:
RimSurface* importSurfacesFromFiles( const QStringList& fileNames );
std::vector<RimSurface*> surfaces() const;
void updateViews();
private:
void updateViews( const std::vector<RimSurface*>& surfsToReload );

View File

@@ -27,9 +27,16 @@ CAF_PDM_SOURCE_INIT( RimSurfaceInView, "SurfaceInView" );
//--------------------------------------------------------------------------------------------------
RimSurfaceInView::RimSurfaceInView()
{
CAF_PDM_InitObject( "Surface", "", "", "" );
CAF_PDM_InitObject( "Surface", ":/ReservoirSurface16x16.png", "", "" );
CAF_PDM_InitField( &m_isActive, "IsActive", true, "Visible", "", "", "" );
m_isActive.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_name, "Name", "Name", "", "", "" );
m_name.registerGetMethod( this, &RimSurfaceInView::name );
CAF_PDM_InitFieldNoDefault( &m_surface, "SurfaceRef", "Surface", "", "", "" );
m_surface.uiCapability()->setUiHidden( true );
}
//--------------------------------------------------------------------------------------------------
@@ -40,7 +47,7 @@ RimSurfaceInView::~RimSurfaceInView() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimSurfaceInView::name()
QString RimSurfaceInView::name() const
{
if ( m_surface ) return m_surface->userDescription();
@@ -51,3 +58,35 @@ QString RimSurfaceInView::name()
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceInView::loadDataAndUpdate() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSurface* RimSurfaceInView::surface() const
{
return m_surface();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceInView::setSurface( RimSurface* surf )
{
m_surface = surf;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* RimSurfaceInView::userDescriptionField()
{
return &m_name;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* RimSurfaceInView::objectToggleField()
{
return &m_isActive;
}

View File

@@ -32,11 +32,16 @@ public:
RimSurfaceInView();
~RimSurfaceInView() override;
QString name();
void loadDataAndUpdate();
QString name() const;
RimSurface* surface() const;
void setSurface( RimSurface* surf );
private:
caf::PdmFieldHandle* userDescriptionField() override;
caf::PdmFieldHandle* objectToggleField() override;
caf::PdmProxyValueField<QString> m_name;
caf::PdmField<bool> m_isActive;
caf::PdmPtrField<RimSurface*> m_surface;

View File

@@ -18,6 +18,10 @@
#include "RimSurfaceInViewCollection.h"
#include "RiaApplication.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimSurfaceCollection.h"
#include "RimSurfaceInView.h"
CAF_PDM_SOURCE_INIT( RimSurfaceInViewCollection, "SurfaceInViewCollection" );
@@ -27,9 +31,13 @@ CAF_PDM_SOURCE_INIT( RimSurfaceInViewCollection, "SurfaceInViewCollection" );
//--------------------------------------------------------------------------------------------------
RimSurfaceInViewCollection::RimSurfaceInViewCollection()
{
CAF_PDM_InitObject( "Surfaces", "", "", "" );
CAF_PDM_InitObject( "Surfaces", ":/ReservoirSurfaces16x16.png", "", "" );
CAF_PDM_InitField( &m_isActive, "isActive", true, "Active", "", "", "" );
m_isActive.uiCapability()->setUiHidden( true );
CAF_PDM_InitFieldNoDefault( &m_surfacesInView, "SurfacesInViewField", "SurfacesInViewField", "", "", "" );
m_surfacesInView.uiCapability()->setUiTreeHidden( true );
}
//--------------------------------------------------------------------------------------------------
@@ -40,4 +48,64 @@ RimSurfaceInViewCollection::~RimSurfaceInViewCollection() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSurfaceInViewCollection::updateFromSurfaceCollection() {}
void RimSurfaceInViewCollection::updateFromSurfaceCollection()
{
// Delete surfaceInView without any real Surface connection
std::vector<RimSurfaceInView*> surfsInView = m_surfacesInView.childObjects();
for ( auto surf : surfsInView )
{
if ( !surf->surface() )
{
m_surfacesInView.removeChildObject( surf );
delete surf;
}
}
// Create new entries
RimProject* proj = RiaApplication::instance()->project();
RimSurfaceCollection* surfColl = proj->activeOilField()->surfaceCollection();
if ( surfColl )
{
std::vector<RimSurface*> surfs = surfColl->surfaces();
for ( auto surf : surfs )
{
if ( !this->hasSurfaceInViewForSurface( surf ) )
{
RimSurfaceInView* newSurfInView = new RimSurfaceInView();
newSurfInView->setSurface( surf );
m_surfacesInView.push_back( newSurfInView );
}
}
}
this->updateConnectedEditors();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimSurfaceInViewCollection::hasSurfaceInViewForSurface( const RimSurface* surf ) const
{
for ( auto surfInView : m_surfacesInView )
{
if ( surfInView->surface() == surf )
{
return true;
}
}
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf::PdmFieldHandle* RimSurfaceInViewCollection::objectToggleField()
{
return &m_isActive;
}

View File

@@ -17,10 +17,12 @@
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafPdmObject.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
class RimSurfaceInView;
class RimSurface;
class RimSurfaceInViewCollection : public caf::PdmObject
{
@@ -33,7 +35,10 @@ public:
void updateFromSurfaceCollection();
private:
caf::PdmFieldHandle* objectToggleField() override;
bool hasSurfaceInViewForSurface(const RimSurface * surf) const;
caf::PdmField<bool> m_isActive;
caf::PdmChildArrayField<RimSurfaceInView*> m_surfacesInView;
};