mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#884 RimIntersectionBox now manages the box manipulator object
This commit is contained in:
@@ -214,6 +214,7 @@ set ( QT_MOC_HEADERS
|
|||||||
Application/RiaApplication.h
|
Application/RiaApplication.h
|
||||||
|
|
||||||
ProjectDataModel/RimMimeData.h
|
ProjectDataModel/RimMimeData.h
|
||||||
|
ProjectDataModel/RimIntersectionBox.h
|
||||||
|
|
||||||
UserInterface/RiuMainWindowBase.h
|
UserInterface/RiuMainWindowBase.h
|
||||||
UserInterface/RiuMainWindow.h
|
UserInterface/RiuMainWindow.h
|
||||||
|
|||||||
@@ -18,13 +18,20 @@
|
|||||||
|
|
||||||
#include "RimIntersectionBox.h"
|
#include "RimIntersectionBox.h"
|
||||||
|
|
||||||
|
#include "RimCase.h"
|
||||||
|
#include "RimEclipseView.h"
|
||||||
#include "RimView.h"
|
#include "RimView.h"
|
||||||
|
|
||||||
|
#include "IntersectionBoxCommands/RicBoxManipulatorEventHandler.h"
|
||||||
|
|
||||||
|
#include "RiuViewer.h"
|
||||||
|
|
||||||
#include "RivIntersectionBoxPartMgr.h"
|
#include "RivIntersectionBoxPartMgr.h"
|
||||||
|
|
||||||
#include "cafPdmUiSliderEditor.h"
|
|
||||||
#include "RimCase.h"
|
|
||||||
#include "cafPdmUiDoubleSliderEditor.h"
|
#include "cafPdmUiDoubleSliderEditor.h"
|
||||||
#include "RimEclipseView.h"
|
#include "cafPdmUiPushButtonEditor.h"
|
||||||
|
#include "cafPdmUiSliderEditor.h"
|
||||||
|
#include "cafDisplayCoordTransform.h"
|
||||||
|
|
||||||
|
|
||||||
namespace caf
|
namespace caf
|
||||||
@@ -76,6 +83,12 @@ RimIntersectionBox::RimIntersectionBox()
|
|||||||
|
|
||||||
CAF_PDM_InitField (&showInactiveCells, "ShowInactiveCells", false, "Inactive Cells", "", "", "");
|
CAF_PDM_InitField (&showInactiveCells, "ShowInactiveCells", false, "Inactive Cells", "", "", "");
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_show3DManipulator, "show3DManipulator", "", "", "", "");
|
||||||
|
m_show3DManipulator.xmlCapability()->setIOWritable(false);
|
||||||
|
m_show3DManipulator.xmlCapability()->setIOReadable(false);
|
||||||
|
m_show3DManipulator.uiCapability()->setUiEditorTypeName(caf::PdmUiPushButtonEditor::uiEditorTypeName());
|
||||||
|
|
||||||
|
m_show3DManipulator = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -83,7 +96,12 @@ RimIntersectionBox::RimIntersectionBox()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimIntersectionBox::~RimIntersectionBox()
|
RimIntersectionBox::~RimIntersectionBox()
|
||||||
{
|
{
|
||||||
|
if (m_boxManipulator && viewer())
|
||||||
|
{
|
||||||
|
viewer()->removeStaticModel(m_boxManipulator->model());
|
||||||
|
|
||||||
|
m_boxManipulator->deleteLater();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -228,6 +246,61 @@ void RimIntersectionBox::fieldChangedByUi(const caf::PdmFieldHandle* changedFiel
|
|||||||
{
|
{
|
||||||
m_maxDepth = CVF_MAX(m_maxDepth, m_minDepth);
|
m_maxDepth = CVF_MAX(m_maxDepth, m_minDepth);
|
||||||
}
|
}
|
||||||
|
else if (changedField == &m_show3DManipulator)
|
||||||
|
{
|
||||||
|
if (m_show3DManipulator)
|
||||||
|
{
|
||||||
|
if (viewer())
|
||||||
|
{
|
||||||
|
m_boxManipulator = new RicBoxManipulatorEventHandler(viewer());
|
||||||
|
|
||||||
|
connect(m_boxManipulator, SIGNAL(notifyRedraw()), this, SLOT(slotScheduleRedraw()));
|
||||||
|
connect(m_boxManipulator, SIGNAL(notifyUpdate(const cvf::Vec3d&, const cvf::Vec3d&)), this, SLOT(slotUpdateGeometry(const cvf::Vec3d&, const cvf::Vec3d&)));
|
||||||
|
|
||||||
|
RimView* rimView = nullptr;
|
||||||
|
this->firstAncestorOrThisOfType(rimView);
|
||||||
|
cvf::ref<caf::DisplayCoordTransform> transForm = rimView->displayCoordTransform();
|
||||||
|
|
||||||
|
m_boxManipulator->setOrigin(transForm->transformToDisplayCoord(boxOrigin().translation()));
|
||||||
|
m_boxManipulator->setSize(transForm->scaleToDisplaySize(boxSize()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_boxManipulator)
|
||||||
|
{
|
||||||
|
if (viewer())
|
||||||
|
{
|
||||||
|
viewer()->removeStaticModel(m_boxManipulator->model());
|
||||||
|
}
|
||||||
|
|
||||||
|
m_boxManipulator->deleteLater();
|
||||||
|
m_boxManipulator = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changedField == &m_minXCoord ||
|
||||||
|
changedField == &m_minYCoord ||
|
||||||
|
changedField == &m_minDepth ||
|
||||||
|
changedField == &m_maxXCoord ||
|
||||||
|
changedField == &m_maxYCoord ||
|
||||||
|
changedField == &m_maxDepth)
|
||||||
|
{
|
||||||
|
if (m_boxManipulator)
|
||||||
|
{
|
||||||
|
RimView* rimView = nullptr;
|
||||||
|
this->firstAncestorOrThisOfType(rimView);
|
||||||
|
|
||||||
|
if (rimView)
|
||||||
|
{
|
||||||
|
cvf::ref<caf::DisplayCoordTransform> transForm = rimView->displayCoordTransform();
|
||||||
|
|
||||||
|
m_boxManipulator->setOrigin(transForm->transformToDisplayCoord(boxOrigin().translation()));
|
||||||
|
m_boxManipulator->setSize(transForm->scaleToDisplaySize(boxSize()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (changedField != &name)
|
if (changedField != &name)
|
||||||
@@ -262,6 +335,20 @@ void RimIntersectionBox::defineEditorAttribute(const caf::PdmFieldHandle* field,
|
|||||||
myAttr->m_maximum = -cellsBoundingBox.min().z();
|
myAttr->m_maximum = -cellsBoundingBox.min().z();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (field == &m_show3DManipulator)
|
||||||
|
{
|
||||||
|
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*> (attribute);
|
||||||
|
|
||||||
|
if (m_show3DManipulator)
|
||||||
|
{
|
||||||
|
attrib->m_buttonText = "Hide3D manipulator";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
attrib->m_buttonText = "Show 3D manipulator";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -270,6 +357,7 @@ void RimIntersectionBox::defineEditorAttribute(const caf::PdmFieldHandle* field,
|
|||||||
void RimIntersectionBox::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
void RimIntersectionBox::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||||
{
|
{
|
||||||
uiOrdering.add(&name);
|
uiOrdering.add(&name);
|
||||||
|
uiOrdering.add(&m_show3DManipulator);
|
||||||
uiOrdering.add(&m_singlePlaneState);
|
uiOrdering.add(&m_singlePlaneState);
|
||||||
|
|
||||||
cvf::BoundingBox cellsBoundingBox = currentCellBoundingBox();
|
cvf::BoundingBox cellsBoundingBox = currentCellBoundingBox();
|
||||||
@@ -302,6 +390,41 @@ void RimIntersectionBox::initAfterRead()
|
|||||||
updateVisibility();
|
updateVisibility();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimIntersectionBox::slotScheduleRedraw()
|
||||||
|
{
|
||||||
|
if (viewer())
|
||||||
|
{
|
||||||
|
viewer()->addStaticModelOnce(m_boxManipulator->model());
|
||||||
|
|
||||||
|
RimView* rimView = nullptr;
|
||||||
|
this->firstAncestorOrThisOfType(rimView);
|
||||||
|
|
||||||
|
rimView->scheduleCreateDisplayModelAndRedraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimIntersectionBox::slotUpdateGeometry(const cvf::Vec3d& origin, const cvf::Vec3d& size)
|
||||||
|
{
|
||||||
|
RimView* rimView = nullptr;
|
||||||
|
this->firstAncestorOrThisOfType(rimView);
|
||||||
|
|
||||||
|
if (rimView)
|
||||||
|
{
|
||||||
|
cvf::ref<caf::DisplayCoordTransform> transForm = rimView->displayCoordTransform();
|
||||||
|
|
||||||
|
cvf::Vec3d domainOrigin = transForm->transformToDomainCoord(origin);
|
||||||
|
cvf::Vec3d domainSize = transForm->scaleToDomainSize(size);
|
||||||
|
|
||||||
|
setFromOriginAndSize(domainOrigin, domainSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -451,3 +574,17 @@ cvf::BoundingBox RimIntersectionBox::currentCellBoundingBox()
|
|||||||
return rimCase->activeCellsBoundingBox();
|
return rimCase->activeCellsBoundingBox();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RiuViewer* RimIntersectionBox::viewer()
|
||||||
|
{
|
||||||
|
RimView* rimView = nullptr;
|
||||||
|
this->firstAncestorOrThisOfType(rimView);
|
||||||
|
|
||||||
|
RiuViewer* riuViewer = nullptr;
|
||||||
|
if (rimView) riuViewer = rimView->viewer();
|
||||||
|
|
||||||
|
return riuViewer;
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,8 +21,15 @@
|
|||||||
#include "cafPdmObject.h"
|
#include "cafPdmObject.h"
|
||||||
#include "cafPdmField.h"
|
#include "cafPdmField.h"
|
||||||
|
|
||||||
|
#include "cvfBase.h"
|
||||||
|
#include "cvfVector3.h"
|
||||||
#include "cvfBoundingBox.h"
|
#include "cvfBoundingBox.h"
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
class RicBoxManipulatorEventHandler;
|
||||||
|
class RiuViewer;
|
||||||
class RivIntersectionBoxPartMgr;
|
class RivIntersectionBoxPartMgr;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
@@ -30,8 +37,10 @@ class RivIntersectionBoxPartMgr;
|
|||||||
//
|
//
|
||||||
//
|
//
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
class RimIntersectionBox : public caf::PdmObject
|
class RimIntersectionBox : public QObject, public caf::PdmObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT;
|
||||||
|
|
||||||
CAF_PDM_HEADER_INIT;
|
CAF_PDM_HEADER_INIT;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -71,12 +80,19 @@ protected:
|
|||||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
virtual void initAfterRead() override;
|
virtual void initAfterRead() override;
|
||||||
|
|
||||||
|
protected slots:
|
||||||
|
void slotScheduleRedraw();
|
||||||
|
void slotUpdateGeometry(const cvf::Vec3d& origin, const cvf::Vec3d& size);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void rebuildGeometryAndScheduleCreateDisplayModel();
|
void rebuildGeometryAndScheduleCreateDisplayModel();
|
||||||
void updateVisibility();
|
void updateVisibility();
|
||||||
void updateLabelsFromBoundingBox();
|
|
||||||
void clampSinglePlaneValues();
|
void clampSinglePlaneValues();
|
||||||
void switchSingelPlaneState();
|
void switchSingelPlaneState();
|
||||||
|
|
||||||
|
cvf::BoundingBox currentCellBoundingBox();
|
||||||
|
|
||||||
|
RiuViewer* viewer();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmField<caf::AppEnum< SinglePlaneState > > m_singlePlaneState;
|
caf::PdmField<caf::AppEnum< SinglePlaneState > > m_singlePlaneState;
|
||||||
@@ -89,8 +105,8 @@ private:
|
|||||||
caf::PdmField<double> m_maxYCoord;
|
caf::PdmField<double> m_maxYCoord;
|
||||||
caf::PdmField<double> m_maxDepth;
|
caf::PdmField<double> m_maxDepth;
|
||||||
|
|
||||||
|
caf::PdmField<bool> m_show3DManipulator;
|
||||||
cvf::BoundingBox currentCellBoundingBox();
|
|
||||||
|
|
||||||
cvf::ref<RivIntersectionBoxPartMgr> m_intersectionBoxPartMgr;
|
cvf::ref<RivIntersectionBoxPartMgr> m_intersectionBoxPartMgr;
|
||||||
|
QPointer<RicBoxManipulatorEventHandler> m_boxManipulator;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -207,12 +207,6 @@ void RiuViewerCommands::displayContextMenu(QMouseEvent* event)
|
|||||||
m_currentFaceIndex = cvf::StructGridInterface::NO_FACE;
|
m_currentFaceIndex = cvf::StructGridInterface::NO_FACE;
|
||||||
|
|
||||||
m_currentPickedObject = const_cast<RimIntersectionBox*>(intersectionBoxSourceInfo->intersectionBox());
|
m_currentPickedObject = const_cast<RimIntersectionBox*>(intersectionBoxSourceInfo->intersectionBox());
|
||||||
menu.addAction(caf::CmdFeatureManager::instance()->action("RicEditIntersectionBoxFeature"));
|
|
||||||
menu.addSeparator();
|
|
||||||
|
|
||||||
QStringList commandIdList;
|
|
||||||
commandIdList << "RicEditIntersectionBoxFeature";
|
|
||||||
caf::CmdFeatureManager::instance()->refreshCheckedState(commandIdList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// IJK -slice commands
|
// IJK -slice commands
|
||||||
|
|||||||
Reference in New Issue
Block a user