Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/MeasureCommands.cpp @ 722:28b9e3a54200
Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
tools are now handled by the ViewportController. Multi-touch does not crash
trackers anymore.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Tue, 21 May 2019 10:27:54 +0200 |
parents | 059e1fd05fd6 |
children | 712ff6ff3c19 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/MeasureCommands.cpp Mon May 20 12:49:29 2019 +0200 +++ b/Framework/Scene2DViewport/MeasureCommands.cpp Tue May 21 10:27:54 2019 +0200 @@ -20,23 +20,24 @@ #include "MeasureCommands.h" +#include <boost/make_shared.hpp> +#include <boost/ref.hpp> + namespace OrthancStone { void CreateMeasureCommand::Undo() { // simply disable the measure tool upon undo - GetMeasureTool()->Disable(); + GetController()->RemoveMeasureTool(GetMeasureTool()); } void CreateMeasureCommand::Redo() { - GetMeasureTool()->Enable(); + GetController()->AddMeasureTool(GetMeasureTool()); } - CreateMeasureCommand::CreateMeasureCommand( - ViewportControllerWPtr controllerW, MeasureToolList& measureTools) + CreateMeasureCommand::CreateMeasureCommand(ViewportControllerWPtr controllerW) : TrackerCommand(controllerW) - , measureTools_(measureTools) { } @@ -50,12 +51,12 @@ CreateLineMeasureCommand::CreateLineMeasureCommand( MessageBroker& broker, ViewportControllerWPtr controllerW, - MeasureToolList& measureTools, ScenePoint2D point) - : CreateMeasureCommand(controllerW, measureTools) - , measureTool_(new LineMeasureTool(broker, controllerW)) + : CreateMeasureCommand(controllerW) + , measureTool_( + boost::make_shared<LineMeasureTool>(boost::ref(broker), controllerW)) { - measureTools_.push_back(measureTool_); + GetController()->AddMeasureTool(measureTool_); measureTool_->Set(point, point); } @@ -67,12 +68,12 @@ CreateAngleMeasureCommand::CreateAngleMeasureCommand( MessageBroker& broker, ViewportControllerWPtr controllerW, - MeasureToolList& measureTools, ScenePoint2D point) - : CreateMeasureCommand(controllerW, measureTools) - , measureTool_(new AngleMeasureTool(broker, controllerW)) + : CreateMeasureCommand(controllerW) + , measureTool_( + boost::make_shared<AngleMeasureTool>(boost::ref(broker), controllerW)) { - measureTools_.push_back(measureTool_); + GetController()->AddMeasureTool(measureTool_); measureTool_->SetSide1End(point); measureTool_->SetCenter(point); measureTool_->SetSide2End(point); @@ -90,4 +91,10 @@ measureTool_->SetSide2End(scenePos); } + ViewportControllerPtr TrackerCommand::GetController() + { + ViewportControllerPtr controller = controllerW_.lock(); + assert(controller); // accessing dead object? + return controller; + } }