#4226 Add polyline measurement mode

This commit is contained in:
Gaute Lindkvist
2019-03-26 14:05:05 +01:00
parent b956e6ed70
commit 009dcb5f19
12 changed files with 122 additions and 21 deletions

View File

@@ -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)
{

View File

@@ -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;
};

View File

@@ -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;
}

View File

@@ -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;
};