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()
|
||||
{}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicMeasurementPickEventHandler::enablePolyLineMode(bool polyLineModeEnabled)
|
||||
{
|
||||
m_polyLineModeEnabled = polyLineModeEnabled;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -76,7 +85,7 @@ bool RicMeasurementPickEventHandler::handle3dPickEvent(const Ric3dPickEvent& eve
|
||||
{
|
||||
auto measurement = RiaApplication::instance()->project()->measurement();
|
||||
|
||||
if (measurement && measurement->isInMeasurementMode())
|
||||
if (measurement && measurement->measurementMode())
|
||||
{
|
||||
const RiuPickItemInfo* firstGeometryPickInfo = nullptr;
|
||||
for (const auto& info : eventObject.m_pickItemInfos)
|
||||
@ -98,7 +107,9 @@ bool RicMeasurementPickEventHandler::handle3dPickEvent(const Ric3dPickEvent& eve
|
||||
|
||||
bool isControlButtonDown = QApplication::keyboardModifiers() & Qt::ControlModifier;
|
||||
|
||||
if (!isControlButtonDown)
|
||||
bool isPolyLineMode = m_polyLineModeEnabled != isControlButtonDown;
|
||||
|
||||
if (!isPolyLineMode)
|
||||
{
|
||||
if (measurement->pointsInDomainCoords().size() > 1)
|
||||
{
|
||||
|
@ -28,13 +28,17 @@ class RicMeasurementPickEventHandler : public Ric3dViewPickEventHandler
|
||||
public:
|
||||
static RicMeasurementPickEventHandler* instance();
|
||||
|
||||
|
||||
void registerAsPickEventHandler() override;
|
||||
void unregisterAsPickEventHandler() override;
|
||||
|
||||
void enablePolyLineMode(bool polyLineModeEnabled);
|
||||
|
||||
protected:
|
||||
RicMeasurementPickEventHandler();
|
||||
bool handle3dPickEvent(const Ric3dPickEvent& eventObject) override;
|
||||
void notifyUnregistered() override;
|
||||
|
||||
private:
|
||||
bool m_polyLineModeEnabled;
|
||||
};
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <QAction>
|
||||
|
||||
CAF_CMD_SOURCE_INIT(RicToggleMeasurementModeFeature, "RicToggleMeasurementModeFeature");
|
||||
CAF_CMD_SOURCE_INIT(RicTogglePolyMeasurementModeFeature, "RicTogglePolyMeasurementModeFeature");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
@ -54,7 +55,14 @@ bool RicToggleMeasurementModeFeature::isCommandEnabled()
|
||||
void RicToggleMeasurementModeFeature::onActionTriggered(bool isChecked)
|
||||
{
|
||||
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();
|
||||
}
|
||||
@ -69,7 +77,7 @@ void RicToggleMeasurementModeFeature::setupActionLook(QAction* actionToSetup)
|
||||
actionToSetup->setCheckable(true);
|
||||
|
||||
auto* meas = measurement();
|
||||
if (meas && meas->isInMeasurementMode())
|
||||
if (meas && meas->measurementMode() == RimMeasurement::MEASURE_REGULAR)
|
||||
{
|
||||
actionToSetup->setShortcut(QKeySequence(Qt::Key_Escape));
|
||||
}
|
||||
@ -87,7 +95,7 @@ bool RicToggleMeasurementModeFeature::isCommandChecked()
|
||||
auto meas = measurement();
|
||||
if (meas)
|
||||
{
|
||||
return meas->isInMeasurementMode();
|
||||
return meas->measurementMode() == RimMeasurement::MEASURE_REGULAR;
|
||||
}
|
||||
|
||||
return false;
|
||||
@ -109,3 +117,55 @@ Rim3dView* RicToggleMeasurementModeFeature::activeView() const
|
||||
auto view = RiaApplication::instance()->activeReservoirView();
|
||||
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;
|
||||
bool isCommandChecked() override;
|
||||
|
||||
private:
|
||||
protected:
|
||||
void refreshActionLook();
|
||||
|
||||
private:
|
||||
RimMeasurement* measurement() 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()
|
||||
: m_isInMeasurementMode(false)
|
||||
: m_measurementMode(MEASURE_DISABLED)
|
||||
{
|
||||
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()->enablePolyLineMode(m_measurementMode == MEASURE_POLYLINE);
|
||||
m_eventFilter = new RiuMeasurementEventFilter(this);
|
||||
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;
|
||||
|
||||
public:
|
||||
enum MeasurementMode
|
||||
{
|
||||
MEASURE_DISABLED = 0,
|
||||
MEASURE_REGULAR,
|
||||
MEASURE_POLYLINE
|
||||
};
|
||||
|
||||
class Lengths
|
||||
{
|
||||
public:
|
||||
@ -60,8 +67,8 @@ public:
|
||||
RimMeasurement();
|
||||
~RimMeasurement() override;
|
||||
|
||||
void setMeasurementMode(bool measurementMode);
|
||||
bool isInMeasurementMode() const;
|
||||
void setMeasurementMode(MeasurementMode measureMode);
|
||||
MeasurementMode measurementMode() const;
|
||||
|
||||
void addPointInDomainCoords(const Vec3d& pointInDomainCoord);
|
||||
std::vector<Vec3d> pointsInDomainCoords() const;
|
||||
@ -76,7 +83,7 @@ private:
|
||||
void updateView() const;
|
||||
|
||||
private:
|
||||
bool m_isInMeasurementMode;
|
||||
MeasurementMode m_measurementMode;
|
||||
std::vector<Vec3d> m_pointsInDomainCoords;
|
||||
caf::PdmPointer<Rim3dView> m_sourceView;
|
||||
|
||||
|
@ -67,7 +67,7 @@ bool RiuMeasurementEventFilter::eventFilter(QObject* obj, QEvent* event)
|
||||
|
||||
if (m_parent)
|
||||
{
|
||||
m_parent->setMeasurementMode(false);
|
||||
m_parent->setMeasurementMode(RimMeasurement::MEASURE_DISABLED);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -148,6 +148,7 @@
|
||||
<file>ReachCircle16x16.png</file>
|
||||
<file>2DMapProjection16x16.png</file>
|
||||
<file>Ruler24x24.png</file>
|
||||
<file>RulerPoly24x24.png</file>
|
||||
<file>Swap.png</file>
|
||||
</qresource>
|
||||
<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"));
|
||||
toolbar->setObjectName(toolbar->windowTitle());
|
||||
auto action = cmdFeatureMgr->action("RicToggleMeasurementModeFeature");
|
||||
toolbar->addAction(action);
|
||||
auto measureAction = cmdFeatureMgr->action("RicToggleMeasurementModeFeature");
|
||||
toolbar->addAction(measureAction);
|
||||
auto polyMeasureAction = cmdFeatureMgr->action("RicTogglePolyMeasurementModeFeature");
|
||||
toolbar->addAction(polyMeasureAction);
|
||||
|
||||
}
|
||||
|
||||
RiaApplication* app = RiaApplication::instance();
|
||||
@ -895,6 +898,7 @@ void RiuMainWindow::slotRefreshViewActions()
|
||||
{
|
||||
QStringList commandIds;
|
||||
commandIds << "RicToggleMeasurementModeFeature";
|
||||
commandIds << "RicTogglePolyMeasurementModeFeature";
|
||||
|
||||
caf::CmdFeatureManager::instance()->refreshCheckedState(commandIds);
|
||||
}
|
||||
|
@ -354,6 +354,7 @@ void RiuViewerCommands::displayContextMenu(QMouseEvent* event)
|
||||
}
|
||||
|
||||
menuBuilder << "RicToggleMeasurementModeFeature";
|
||||
menuBuilder << "RicTogglePolyMeasurementModeFeature";
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user