#4857 Add support to distinguish 3D-view commands done in the main and comparison view

Support annotation and rangefilter creation in the comparison view
This commit is contained in:
Jacob Støren 2019-10-17 10:35:01 +02:00
parent caed6bfa91
commit 5a72de405d
14 changed files with 89 additions and 40 deletions

View File

@ -84,6 +84,9 @@
#include "RimWellPltPlot.h" #include "RimWellPltPlot.h"
#include "RimWellRftPlot.h" #include "RimWellRftPlot.h"
#include "RiuViewer.h"
#include "RiuViewerCommands.h"
#include "cafPdmSettings.h" #include "cafPdmSettings.h"
#include "cafPdmUiModelChangeDetector.h" #include "cafPdmUiModelChangeDetector.h"
#include "cafProgressInfo.h" #include "cafProgressInfo.h"
@ -258,6 +261,25 @@ RimGridView* RiaApplication::activeGridView()
return dynamic_cast<RimGridView*>( m_activeReservoirView.p() ); return dynamic_cast<RimGridView*>( m_activeReservoirView.p() );
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGridView* RiaApplication::activeMainOrComparisonGridView()
{
RimGridView* activeView = RiaApplication::instance()->activeGridView();
RimGridView* viewOrComparisonView = activeView;
if ( activeView->viewer()->viewerCommands()->isCurrentPickInComparisonView() )
{
if ( RimGridView* compView = dynamic_cast<RimGridView*>( activeView->activeComparisonView() ) )
{
viewOrComparisonView = compView;
}
}
return viewOrComparisonView;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -112,6 +112,7 @@ public:
Rim3dView* activeReservoirView(); Rim3dView* activeReservoirView();
const Rim3dView* activeReservoirView() const; const Rim3dView* activeReservoirView() const;
RimGridView* activeGridView(); RimGridView* activeGridView();
RimGridView* activeMainOrComparisonGridView();
RimProject* project(); RimProject* project();

View File

@ -28,6 +28,7 @@
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "RiuViewer.h" #include "RiuViewer.h"
#include "RiuViewerCommands.h"
#include "cvfBoundingBox.h" #include "cvfBoundingBox.h"
#include "cvfCamera.h" #include "cvfCamera.h"
@ -57,12 +58,14 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked )
if ( activeView ) if ( activeView )
{ {
cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView();
cvf::BoundingBox bbox = activeView->ownerCase()->activeCellsBoundingBox();
cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords();
cvf::BoundingBox bbox = viewOrComparisonView->ownerCase()->activeCellsBoundingBox();
if ( contMapView ) domainCoord[2] = bbox.max().z() - bbox.extent().z() * 0.2; if ( contMapView ) domainCoord[2] = bbox.max().z() - bbox.extent().z() * 0.2;
auto coll = activeView->annotationCollection(); auto coll = viewOrComparisonView->annotationCollection();
if ( coll ) if ( coll )
{ {
@ -70,7 +73,9 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked )
newAnnotation->setAnchorPoint( domainCoord ); newAnnotation->setAnchorPoint( domainCoord );
cvf::Vec3d labelPos = domainCoord; cvf::Vec3d labelPos = domainCoord;
if ( activeView->viewer()->mainCamera()->direction().z() <= 0 ) cvf::Camera* viewCamera = activeView->viewer()->mainCamera();
if ( viewCamera->direction().z() <= 0 )
{ {
labelPos.z() = bbox.max().z(); labelPos.z() = bbox.max().z();
} }
@ -79,10 +84,10 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked )
labelPos.z() = bbox.min().z(); labelPos.z() = bbox.min().z();
} }
cvf::Vec3d horizontalRight = activeView->viewer()->mainCamera()->direction() ^ cvf::Vec3d::Z_AXIS; cvf::Vec3d horizontalRight = viewCamera->direction() ^ cvf::Vec3d::Z_AXIS;
cvf::Vec3d horizontalUp = activeView->viewer()->mainCamera()->up() - cvf::Vec3d horizontalUp = viewCamera->up() -
( cvf::Vec3d::Z_AXIS * ( cvf::Vec3d::Z_AXIS * ( viewCamera->up() * cvf::Vec3d::Z_AXIS ) );
( activeView->viewer()->mainCamera()->up() * cvf::Vec3d::Z_AXIS ) );
bool isOk = horizontalRight.normalize(); bool isOk = horizontalRight.normalize();
if ( !isOk ) horizontalRight = {1.0, 0.0, 0.0}; if ( !isOk ) horizontalRight = {1.0, 0.0, 0.0};
@ -93,7 +98,7 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked )
coll->scheduleRedrawOfRelevantViews(); coll->scheduleRedrawOfRelevantViews();
coll->updateConnectedEditors(); coll->updateConnectedEditors();
RiuMainWindow::instance()->selectAsCurrentItem( newAnnotation ); RiuMainWindow::instance()->selectAsCurrentItem( newAnnotation, false );
} }
} }
} }

View File

@ -27,6 +27,7 @@
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "RiuViewer.h" #include "RiuViewer.h"
#include "RiuViewerCommands.h"
#include "cafCmdExecCommandManager.h" #include "cafCmdExecCommandManager.h"
#include "cafSelectionManager.h" #include "cafSelectionManager.h"
@ -61,7 +62,8 @@ void RicIntersectionBoxAtPosFeature::onActionTriggered( bool isChecked )
coll->appendIntersectionBoxAndUpdate( intersectionBox ); coll->appendIntersectionBoxAndUpdate( intersectionBox );
cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords();
intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_NONE, domainCoord ); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_NONE, domainCoord );
coll->updateConnectedEditors(); coll->updateConnectedEditors();

View File

@ -24,6 +24,7 @@
#include "RimGridView.h" #include "RimGridView.h"
#include "RimIntersectionBox.h" #include "RimIntersectionBox.h"
#include "RimIntersectionCollection.h" #include "RimIntersectionCollection.h"
#include "RiuViewerCommands.h"
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "RiuViewer.h" #include "RiuViewer.h"
@ -61,7 +62,7 @@ void RicIntersectionBoxXSliceFeature::onActionTriggered( bool isChecked )
coll->appendIntersectionBoxAndUpdate( intersectionBox ); coll->appendIntersectionBoxAndUpdate( intersectionBox );
cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords();
intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord ); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord );
coll->updateConnectedEditors(); coll->updateConnectedEditors();

View File

@ -27,6 +27,7 @@
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "RiuViewer.h" #include "RiuViewer.h"
#include "RiuViewerCommands.h"
#include "cafCmdExecCommandManager.h" #include "cafCmdExecCommandManager.h"
#include "cafSelectionManager.h" #include "cafSelectionManager.h"
@ -61,7 +62,7 @@ void RicIntersectionBoxYSliceFeature::onActionTriggered( bool isChecked )
coll->appendIntersectionBoxAndUpdate( intersectionBox ); coll->appendIntersectionBoxAndUpdate( intersectionBox );
cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords();
intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord ); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord );
coll->updateConnectedEditors(); coll->updateConnectedEditors();

View File

@ -24,6 +24,7 @@
#include "RimGridView.h" #include "RimGridView.h"
#include "RimIntersectionBox.h" #include "RimIntersectionBox.h"
#include "RimIntersectionCollection.h" #include "RimIntersectionCollection.h"
#include "RiuViewerCommands.h"
#include "RiuMainWindow.h" #include "RiuMainWindow.h"
#include "RiuViewer.h" #include "RiuViewer.h"
@ -60,7 +61,8 @@ void RicIntersectionBoxZSliceFeature::onActionTriggered( bool isChecked )
intersectionBox->name = QString( "Z-slice (Intersection box)" ); intersectionBox->name = QString( "Z-slice (Intersection box)" );
coll->appendIntersectionBoxAndUpdate( intersectionBox ); coll->appendIntersectionBoxAndUpdate( intersectionBox );
cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords();
intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord ); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord );
coll->updateConnectedEditors(); coll->updateConnectedEditors();

View File

@ -26,23 +26,28 @@
#include "RimGridView.h" #include "RimGridView.h"
#include "RimViewController.h" #include "RimViewController.h"
#include "RiuViewer.h"
#include "RiuViewerCommands.h"
#include "cafCmdExecCommandManager.h" #include "cafCmdExecCommandManager.h"
#include <QAction> #include <QAction>
#include <QList> #include <QList>
#include <QVariant> #include <QVariant>
CAF_CMD_SOURCE_INIT( RicNewSliceRangeFilterFeature, "RicNewSliceRangeFilterFeature" ); CAF_CMD_SOURCE_INIT( RicNewSliceRangeFilter3dViewFeature, "RicNewSliceRangeFilter3dViewFeature" );
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RicNewSliceRangeFilterFeature::isCommandEnabled() bool RicNewSliceRangeFilter3dViewFeature::isCommandEnabled()
{ {
RimGridView* view = RiaApplication::instance()->activeGridView(); RimGridView* view = RiaApplication::instance()->activeGridView();
if ( !view ) return false; if ( !view ) return false;
RimViewController* vc = view->viewController(); RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView();
RimViewController* vc = viewOrComparisonView->viewController();
if ( !vc ) return true; if ( !vc ) return true;
return ( !vc->isRangeFiltersControlled() ); return ( !vc->isRangeFiltersControlled() );
@ -51,14 +56,16 @@ bool RicNewSliceRangeFilterFeature::isCommandEnabled()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicNewSliceRangeFilterFeature::onActionTriggered( bool isChecked ) void RicNewSliceRangeFilter3dViewFeature::onActionTriggered( bool isChecked )
{ {
QVariant userData = this->userData(); QVariant userData = this->userData();
if ( !userData.isNull() && userData.type() == QVariant::List ) if ( !userData.isNull() && userData.type() == QVariant::List )
{ {
RimGridView* view = RiaApplication::instance()->activeGridView(); RimGridView* activeView = RiaApplication::instance()->activeGridView();
RimCellRangeFilterCollection* rangeFilterCollection = view->rangeFilterCollection(); RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView();
RimCellRangeFilterCollection* rangeFilterCollection = viewOrComparisonView->rangeFilterCollection();
RicRangeFilterNewExec* filterExec = new RicRangeFilterNewExec( rangeFilterCollection ); RicRangeFilterNewExec* filterExec = new RicRangeFilterNewExec( rangeFilterCollection );
@ -87,14 +94,14 @@ void RicNewSliceRangeFilterFeature::onActionTriggered( bool isChecked )
} }
caf::CmdExecCommandManager::instance()->processExecuteCommand( filterExec ); caf::CmdExecCommandManager::instance()->processExecuteCommand( filterExec );
view->setSurfaceDrawstyle(); activeView->setSurfaceDrawstyle();
} }
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicNewSliceRangeFilterFeature::setupActionLook( QAction* actionToSetup ) void RicNewSliceRangeFilter3dViewFeature::setupActionLook( QAction* actionToSetup )
{ {
actionToSetup->setIcon( QIcon( ":/CellFilter_Range.png" ) ); actionToSetup->setIcon( QIcon( ":/CellFilter_Range.png" ) );
} }

View File

@ -23,7 +23,7 @@
//================================================================================================== //==================================================================================================
/// ///
//================================================================================================== //==================================================================================================
class RicNewSliceRangeFilterFeature : public caf::CmdFeature class RicNewSliceRangeFilter3dViewFeature : public caf::CmdFeature
{ {
CAF_CMD_HEADER_INIT; CAF_CMD_HEADER_INIT;

View File

@ -73,7 +73,7 @@ void RicRangeFilterNewExec::redo()
m_cellRangeFilterCollection->updateConnectedEditors(); m_cellRangeFilterCollection->updateConnectedEditors();
Riu3DMainWindowTools::selectAsCurrentItem( rangeFilter ); Riu3DMainWindowTools::selectAsCurrentItem( rangeFilter, false );
// Trigger update of view following the range filter update // Trigger update of view following the range filter update
RimGridView* view = nullptr; RimGridView* view = nullptr;

View File

@ -976,11 +976,9 @@ void RiuViewer::setAxisLabels( const cvf::String& xLabel, const cvf::String& yLa
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
cvf::Vec3d RiuViewer::lastPickPositionInDomainCoords() const RiuViewerCommands* RiuViewer::viewerCommands() const
{ {
CVF_ASSERT( m_viewerCommands ); return m_viewerCommands;
return m_viewerCommands->lastPickPositionInDomainCoords();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -120,7 +120,7 @@ public:
void showAxisCross( bool enable ); void showAxisCross( bool enable );
void setAxisLabels( const cvf::String& xLabel, const cvf::String& yLabel, const cvf::String& zLabel ); void setAxisLabels( const cvf::String& xLabel, const cvf::String& yLabel, const cvf::String& zLabel );
cvf::Vec3d lastPickPositionInDomainCoords() const; RiuViewerCommands* viewerCommands() const;
cvf::OverlayItem* pickFixedPositionedLegend( int winPosX, int winPosY ); cvf::OverlayItem* pickFixedPositionedLegend( int winPosX, int winPosY );

View File

@ -165,8 +165,8 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
} }
} }
bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( event->x(), event->y() ); m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( event->x(), event->y() );
Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() Rim3dView* mainOrComparisonView = m_isCurrentPickInComparisonView ? m_reservoirView->activeComparisonView()
: m_reservoirView.p(); : m_reservoirView.p();
// Find the following data // Find the following data
@ -320,13 +320,13 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
menuBuilder.subMenuStart( "Range Filter Slice", QIcon( ":/CellFilter_Range.png" ) ); menuBuilder.subMenuStart( "Range Filter Slice", QIcon( ":/CellFilter_Range.png" ) );
menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature",
"I-slice Range Filter", "I-slice Range Filter",
iSliceList ); iSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature",
"J-slice Range Filter", "J-slice Range Filter",
jSliceList ); jSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature",
"K-slice Range Filter", "K-slice Range Filter",
kSliceList ); kSliceList );
@ -588,8 +588,8 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard
} }
} }
bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY );
Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() Rim3dView* mainOrComparisonView = m_isCurrentPickInComparisonView ? m_reservoirView->activeComparisonView()
: m_reservoirView.p(); : m_reservoirView.p();
// Make pickEventHandlers do their stuff // Make pickEventHandlers do their stuff
@ -1051,6 +1051,14 @@ cvf::Vec3d RiuViewerCommands::lastPickPositionInDomainCoords() const
return m_currentPickPositionInDomainCoords; return m_currentPickPositionInDomainCoords;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiuViewerCommands::isCurrentPickInComparisonView() const
{
return m_isCurrentPickInComparisonView;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -1284,12 +1292,12 @@ void RiuViewerCommands::handleTextPicking( int winPosX, int winPosY, cvf::HitIte
{ {
using namespace cvf; using namespace cvf;
bool isMouseWithinComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY );
int translatedMousePosX = winPosX; int translatedMousePosX = winPosX;
int translatedMousePosY = m_viewer->height() - winPosY; int translatedMousePosY = m_viewer->height() - winPosY;
Scene* scene = m_viewer->currentScene( isMouseWithinComparisonView ); Scene* scene = m_viewer->currentScene( m_isCurrentPickInComparisonView );
if ( !scene ) return; if ( !scene ) return;

View File

@ -66,6 +66,7 @@ public:
static void removePickEventHandlerIfActive( Ric3dViewPickEventHandler* pickEventHandler ); static void removePickEventHandlerIfActive( Ric3dViewPickEventHandler* pickEventHandler );
cvf::Vec3d lastPickPositionInDomainCoords() const; cvf::Vec3d lastPickPositionInDomainCoords() const;
bool isCurrentPickInComparisonView() const;
private: private:
void findCellAndGridIndex( Rim3dView* mainOrComparisonView, void findCellAndGridIndex( Rim3dView* mainOrComparisonView,
@ -96,6 +97,7 @@ private:
size_t m_currentCellIndex; size_t m_currentCellIndex;
cvf::StructGridInterface::FaceType m_currentFaceIndex; cvf::StructGridInterface::FaceType m_currentFaceIndex;
cvf::Vec3d m_currentPickPositionInDomainCoords; cvf::Vec3d m_currentPickPositionInDomainCoords;
bool m_isCurrentPickInComparisonView;
caf::PdmPointer<Rim3dView> m_reservoirView; caf::PdmPointer<Rim3dView> m_reservoirView;
QPointer<RiuViewer> m_viewer; QPointer<RiuViewer> m_viewer;