mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4226 Add polyline measurement mode
This commit is contained in:
parent
b956e6ed70
commit
009dcb5f19
@ -69,6 +69,15 @@ void RicMeasurementPickEventHandler::unregisterAsPickEventHandler()
|
|||||||
RicMeasurementPickEventHandler::RicMeasurementPickEventHandler()
|
RicMeasurementPickEventHandler::RicMeasurementPickEventHandler()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicMeasurementPickEventHandler::enablePolyLineMode(bool polyLineModeEnabled)
|
||||||
|
{
|
||||||
|
m_polyLineModeEnabled = polyLineModeEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -76,7 +85,7 @@ bool RicMeasurementPickEventHandler::handle3dPickEvent(const Ric3dPickEvent& eve
|
|||||||
{
|
{
|
||||||
auto measurement = RiaApplication::instance()->project()->measurement();
|
auto measurement = RiaApplication::instance()->project()->measurement();
|
||||||
|
|
||||||
if (measurement && measurement->isInMeasurementMode())
|
if (measurement && measurement->measurementMode())
|
||||||
{
|
{
|
||||||
const RiuPickItemInfo* firstGeometryPickInfo = nullptr;
|
const RiuPickItemInfo* firstGeometryPickInfo = nullptr;
|
||||||
for (const auto& info : eventObject.m_pickItemInfos)
|
for (const auto& info : eventObject.m_pickItemInfos)
|
||||||
@ -98,7 +107,9 @@ bool RicMeasurementPickEventHandler::handle3dPickEvent(const Ric3dPickEvent& eve
|
|||||||
|
|
||||||
bool isControlButtonDown = QApplication::keyboardModifiers() & Qt::ControlModifier;
|
bool isControlButtonDown = QApplication::keyboardModifiers() & Qt::ControlModifier;
|
||||||
|
|
||||||
if (!isControlButtonDown)
|
bool isPolyLineMode = m_polyLineModeEnabled != isControlButtonDown;
|
||||||
|
|
||||||
|
if (!isPolyLineMode)
|
||||||
{
|
{
|
||||||
if (measurement->pointsInDomainCoords().size() > 1)
|
if (measurement->pointsInDomainCoords().size() > 1)
|
||||||
{
|
{
|
||||||
|
@ -28,13 +28,17 @@ class RicMeasurementPickEventHandler : public Ric3dViewPickEventHandler
|
|||||||
public:
|
public:
|
||||||
static RicMeasurementPickEventHandler* instance();
|
static RicMeasurementPickEventHandler* instance();
|
||||||
|
|
||||||
|
|
||||||
void registerAsPickEventHandler() override;
|
void registerAsPickEventHandler() override;
|
||||||
void unregisterAsPickEventHandler() override;
|
void unregisterAsPickEventHandler() override;
|
||||||
|
|
||||||
|
void enablePolyLineMode(bool polyLineModeEnabled);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RicMeasurementPickEventHandler();
|
RicMeasurementPickEventHandler();
|
||||||
bool handle3dPickEvent(const Ric3dPickEvent& eventObject) override;
|
bool handle3dPickEvent(const Ric3dPickEvent& eventObject) override;
|
||||||
void notifyUnregistered() override;
|
void notifyUnregistered() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_polyLineModeEnabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include <QAction>
|
#include <QAction>
|
||||||
|
|
||||||
CAF_CMD_SOURCE_INIT(RicToggleMeasurementModeFeature, "RicToggleMeasurementModeFeature");
|
CAF_CMD_SOURCE_INIT(RicToggleMeasurementModeFeature, "RicToggleMeasurementModeFeature");
|
||||||
|
CAF_CMD_SOURCE_INIT(RicTogglePolyMeasurementModeFeature, "RicTogglePolyMeasurementModeFeature");
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
@ -54,7 +55,14 @@ bool RicToggleMeasurementModeFeature::isCommandEnabled()
|
|||||||
void RicToggleMeasurementModeFeature::onActionTriggered(bool isChecked)
|
void RicToggleMeasurementModeFeature::onActionTriggered(bool isChecked)
|
||||||
{
|
{
|
||||||
auto meas = measurement();
|
auto meas = measurement();
|
||||||
meas->setMeasurementMode(!meas->isInMeasurementMode());
|
if (meas->measurementMode() == RimMeasurement::MEASURE_REGULAR)
|
||||||
|
{
|
||||||
|
meas->setMeasurementMode(RimMeasurement::MEASURE_DISABLED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
meas->setMeasurementMode(RimMeasurement::MEASURE_REGULAR);
|
||||||
|
}
|
||||||
|
|
||||||
refreshActionLook();
|
refreshActionLook();
|
||||||
}
|
}
|
||||||
@ -69,7 +77,7 @@ void RicToggleMeasurementModeFeature::setupActionLook(QAction* actionToSetup)
|
|||||||
actionToSetup->setCheckable(true);
|
actionToSetup->setCheckable(true);
|
||||||
|
|
||||||
auto* meas = measurement();
|
auto* meas = measurement();
|
||||||
if (meas && meas->isInMeasurementMode())
|
if (meas && meas->measurementMode() == RimMeasurement::MEASURE_REGULAR)
|
||||||
{
|
{
|
||||||
actionToSetup->setShortcut(QKeySequence(Qt::Key_Escape));
|
actionToSetup->setShortcut(QKeySequence(Qt::Key_Escape));
|
||||||
}
|
}
|
||||||
@ -87,7 +95,7 @@ bool RicToggleMeasurementModeFeature::isCommandChecked()
|
|||||||
auto meas = measurement();
|
auto meas = measurement();
|
||||||
if (meas)
|
if (meas)
|
||||||
{
|
{
|
||||||
return meas->isInMeasurementMode();
|
return meas->measurementMode() == RimMeasurement::MEASURE_REGULAR;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -109,3 +117,55 @@ Rim3dView* RicToggleMeasurementModeFeature::activeView() const
|
|||||||
auto view = RiaApplication::instance()->activeReservoirView();
|
auto view = RiaApplication::instance()->activeReservoirView();
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicTogglePolyMeasurementModeFeature::onActionTriggered(bool isChecked)
|
||||||
|
{
|
||||||
|
auto meas = measurement();
|
||||||
|
if (meas->measurementMode() == RimMeasurement::MEASURE_POLYLINE)
|
||||||
|
{
|
||||||
|
meas->setMeasurementMode(RimMeasurement::MEASURE_DISABLED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
meas->setMeasurementMode(RimMeasurement::MEASURE_POLYLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
refreshActionLook();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RicTogglePolyMeasurementModeFeature::setupActionLook(QAction* actionToSetup)
|
||||||
|
{
|
||||||
|
actionToSetup->setText("Poly Line Measurement Mode");
|
||||||
|
actionToSetup->setIcon(QIcon(":/RulerPoly24x24.png"));
|
||||||
|
actionToSetup->setCheckable(true);
|
||||||
|
|
||||||
|
auto* meas = measurement();
|
||||||
|
if (meas && meas->measurementMode() == RimMeasurement::MEASURE_POLYLINE)
|
||||||
|
{
|
||||||
|
actionToSetup->setShortcut(QKeySequence(Qt::Key_Escape));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
actionToSetup->setShortcut(QKeySequence());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
bool RicTogglePolyMeasurementModeFeature::isCommandChecked()
|
||||||
|
{
|
||||||
|
auto meas = measurement();
|
||||||
|
if (meas)
|
||||||
|
{
|
||||||
|
return meas->measurementMode() == RimMeasurement::MEASURE_POLYLINE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -39,10 +39,22 @@ protected:
|
|||||||
void setupActionLook(QAction* actionToSetup) override;
|
void setupActionLook(QAction* actionToSetup) override;
|
||||||
bool isCommandChecked() override;
|
bool isCommandChecked() override;
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
void refreshActionLook();
|
void refreshActionLook();
|
||||||
|
|
||||||
private:
|
|
||||||
RimMeasurement* measurement() const;
|
RimMeasurement* measurement() const;
|
||||||
Rim3dView* activeView() const;
|
Rim3dView* activeView() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//==================================================================================================
|
||||||
|
///
|
||||||
|
//==================================================================================================
|
||||||
|
class RicTogglePolyMeasurementModeFeature : public RicToggleMeasurementModeFeature
|
||||||
|
{
|
||||||
|
CAF_CMD_HEADER_INIT;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void onActionTriggered(bool isChecked) override;
|
||||||
|
void setupActionLook(QAction* actionToSetup) override;
|
||||||
|
bool isCommandChecked() override;
|
||||||
|
|
||||||
|
};
|
||||||
|
@ -36,7 +36,7 @@ CAF_PDM_SOURCE_INIT(RimMeasurement, "RimMeasurement");
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimMeasurement::RimMeasurement()
|
RimMeasurement::RimMeasurement()
|
||||||
: m_isInMeasurementMode(false)
|
: m_measurementMode(MEASURE_DISABLED)
|
||||||
{
|
{
|
||||||
CAF_PDM_InitObject("Measurement", ":/TextAnnotation16x16.png", "", "");
|
CAF_PDM_InitObject("Measurement", ":/TextAnnotation16x16.png", "", "");
|
||||||
}
|
}
|
||||||
@ -49,13 +49,14 @@ RimMeasurement::~RimMeasurement() {}
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimMeasurement::setMeasurementMode(bool measurementMode)
|
void RimMeasurement::setMeasurementMode(MeasurementMode measurementMode)
|
||||||
{
|
{
|
||||||
m_isInMeasurementMode = measurementMode;
|
m_measurementMode = measurementMode;
|
||||||
|
|
||||||
if (m_isInMeasurementMode)
|
if (m_measurementMode != MEASURE_DISABLED)
|
||||||
{
|
{
|
||||||
RicMeasurementPickEventHandler::instance()->registerAsPickEventHandler();
|
RicMeasurementPickEventHandler::instance()->registerAsPickEventHandler();
|
||||||
|
RicMeasurementPickEventHandler::instance()->enablePolyLineMode(m_measurementMode == MEASURE_POLYLINE);
|
||||||
m_eventFilter = new RiuMeasurementEventFilter(this);
|
m_eventFilter = new RiuMeasurementEventFilter(this);
|
||||||
m_eventFilter->registerFilter();
|
m_eventFilter->registerFilter();
|
||||||
}
|
}
|
||||||
@ -78,9 +79,9 @@ void RimMeasurement::setMeasurementMode(bool measurementMode)
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
bool RimMeasurement::isInMeasurementMode() const
|
RimMeasurement::MeasurementMode RimMeasurement::measurementMode() const
|
||||||
{
|
{
|
||||||
return m_isInMeasurementMode;
|
return m_measurementMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -38,6 +38,13 @@ class RimMeasurement : public caf::PdmObject
|
|||||||
using Vec3d = cvf::Vec3d;
|
using Vec3d = cvf::Vec3d;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum MeasurementMode
|
||||||
|
{
|
||||||
|
MEASURE_DISABLED = 0,
|
||||||
|
MEASURE_REGULAR,
|
||||||
|
MEASURE_POLYLINE
|
||||||
|
};
|
||||||
|
|
||||||
class Lengths
|
class Lengths
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -60,8 +67,8 @@ public:
|
|||||||
RimMeasurement();
|
RimMeasurement();
|
||||||
~RimMeasurement() override;
|
~RimMeasurement() override;
|
||||||
|
|
||||||
void setMeasurementMode(bool measurementMode);
|
void setMeasurementMode(MeasurementMode measureMode);
|
||||||
bool isInMeasurementMode() const;
|
MeasurementMode measurementMode() const;
|
||||||
|
|
||||||
void addPointInDomainCoords(const Vec3d& pointInDomainCoord);
|
void addPointInDomainCoords(const Vec3d& pointInDomainCoord);
|
||||||
std::vector<Vec3d> pointsInDomainCoords() const;
|
std::vector<Vec3d> pointsInDomainCoords() const;
|
||||||
@ -76,7 +83,7 @@ private:
|
|||||||
void updateView() const;
|
void updateView() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_isInMeasurementMode;
|
MeasurementMode m_measurementMode;
|
||||||
std::vector<Vec3d> m_pointsInDomainCoords;
|
std::vector<Vec3d> m_pointsInDomainCoords;
|
||||||
caf::PdmPointer<Rim3dView> m_sourceView;
|
caf::PdmPointer<Rim3dView> m_sourceView;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ bool RiuMeasurementEventFilter::eventFilter(QObject* obj, QEvent* event)
|
|||||||
|
|
||||||
if (m_parent)
|
if (m_parent)
|
||||||
{
|
{
|
||||||
m_parent->setMeasurementMode(false);
|
m_parent->setMeasurementMode(RimMeasurement::MEASURE_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -148,6 +148,7 @@
|
|||||||
<file>ReachCircle16x16.png</file>
|
<file>ReachCircle16x16.png</file>
|
||||||
<file>2DMapProjection16x16.png</file>
|
<file>2DMapProjection16x16.png</file>
|
||||||
<file>Ruler24x24.png</file>
|
<file>Ruler24x24.png</file>
|
||||||
|
<file>RulerPoly24x24.png</file>
|
||||||
<file>Swap.png</file>
|
<file>Swap.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/Shader/">
|
<qresource prefix="/Shader/">
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.5 KiB |
BIN
ApplicationCode/Resources/RulerPoly24x24.png
Normal file
BIN
ApplicationCode/Resources/RulerPoly24x24.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
@ -613,8 +613,11 @@ void RiuMainWindow::createToolBars()
|
|||||||
{
|
{
|
||||||
QToolBar* toolbar = addToolBar(tr("Measurement"));
|
QToolBar* toolbar = addToolBar(tr("Measurement"));
|
||||||
toolbar->setObjectName(toolbar->windowTitle());
|
toolbar->setObjectName(toolbar->windowTitle());
|
||||||
auto action = cmdFeatureMgr->action("RicToggleMeasurementModeFeature");
|
auto measureAction = cmdFeatureMgr->action("RicToggleMeasurementModeFeature");
|
||||||
toolbar->addAction(action);
|
toolbar->addAction(measureAction);
|
||||||
|
auto polyMeasureAction = cmdFeatureMgr->action("RicTogglePolyMeasurementModeFeature");
|
||||||
|
toolbar->addAction(polyMeasureAction);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RiaApplication* app = RiaApplication::instance();
|
RiaApplication* app = RiaApplication::instance();
|
||||||
@ -895,6 +898,7 @@ void RiuMainWindow::slotRefreshViewActions()
|
|||||||
{
|
{
|
||||||
QStringList commandIds;
|
QStringList commandIds;
|
||||||
commandIds << "RicToggleMeasurementModeFeature";
|
commandIds << "RicToggleMeasurementModeFeature";
|
||||||
|
commandIds << "RicTogglePolyMeasurementModeFeature";
|
||||||
|
|
||||||
caf::CmdFeatureManager::instance()->refreshCheckedState(commandIds);
|
caf::CmdFeatureManager::instance()->refreshCheckedState(commandIds);
|
||||||
}
|
}
|
||||||
|
@ -354,6 +354,7 @@ void RiuViewerCommands::displayContextMenu(QMouseEvent* event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
menuBuilder << "RicToggleMeasurementModeFeature";
|
menuBuilder << "RicToggleMeasurementModeFeature";
|
||||||
|
menuBuilder << "RicTogglePolyMeasurementModeFeature";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user