Mercurial > hg > orthanc-stone
comparison 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 |
comparison
equal
deleted
inserted
replaced
721:af0aa0c149fa | 722:28b9e3a54200 |
---|---|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 **/ | 19 **/ |
20 | 20 |
21 #include "MeasureCommands.h" | 21 #include "MeasureCommands.h" |
22 | 22 |
23 #include <boost/make_shared.hpp> | |
24 #include <boost/ref.hpp> | |
25 | |
23 namespace OrthancStone | 26 namespace OrthancStone |
24 { | 27 { |
25 void CreateMeasureCommand::Undo() | 28 void CreateMeasureCommand::Undo() |
26 { | 29 { |
27 // simply disable the measure tool upon undo | 30 // simply disable the measure tool upon undo |
28 GetMeasureTool()->Disable(); | 31 GetController()->RemoveMeasureTool(GetMeasureTool()); |
29 } | 32 } |
30 | 33 |
31 void CreateMeasureCommand::Redo() | 34 void CreateMeasureCommand::Redo() |
32 { | 35 { |
33 GetMeasureTool()->Enable(); | 36 GetController()->AddMeasureTool(GetMeasureTool()); |
34 } | 37 } |
35 | 38 |
36 CreateMeasureCommand::CreateMeasureCommand( | 39 CreateMeasureCommand::CreateMeasureCommand(ViewportControllerWPtr controllerW) |
37 ViewportControllerWPtr controllerW, MeasureToolList& measureTools) | |
38 : TrackerCommand(controllerW) | 40 : TrackerCommand(controllerW) |
39 , measureTools_(measureTools) | |
40 { | 41 { |
41 | 42 |
42 } | 43 } |
43 | 44 |
44 CreateMeasureCommand::~CreateMeasureCommand() | 45 CreateMeasureCommand::~CreateMeasureCommand() |
48 } | 49 } |
49 | 50 |
50 CreateLineMeasureCommand::CreateLineMeasureCommand( | 51 CreateLineMeasureCommand::CreateLineMeasureCommand( |
51 MessageBroker& broker, | 52 MessageBroker& broker, |
52 ViewportControllerWPtr controllerW, | 53 ViewportControllerWPtr controllerW, |
53 MeasureToolList& measureTools, | |
54 ScenePoint2D point) | 54 ScenePoint2D point) |
55 : CreateMeasureCommand(controllerW, measureTools) | 55 : CreateMeasureCommand(controllerW) |
56 , measureTool_(new LineMeasureTool(broker, controllerW)) | 56 , measureTool_( |
57 boost::make_shared<LineMeasureTool>(boost::ref(broker), controllerW)) | |
57 { | 58 { |
58 measureTools_.push_back(measureTool_); | 59 GetController()->AddMeasureTool(measureTool_); |
59 measureTool_->Set(point, point); | 60 measureTool_->Set(point, point); |
60 } | 61 } |
61 | 62 |
62 void CreateLineMeasureCommand::SetEnd(ScenePoint2D scenePos) | 63 void CreateLineMeasureCommand::SetEnd(ScenePoint2D scenePos) |
63 { | 64 { |
65 } | 66 } |
66 | 67 |
67 CreateAngleMeasureCommand::CreateAngleMeasureCommand( | 68 CreateAngleMeasureCommand::CreateAngleMeasureCommand( |
68 MessageBroker& broker, | 69 MessageBroker& broker, |
69 ViewportControllerWPtr controllerW, | 70 ViewportControllerWPtr controllerW, |
70 MeasureToolList& measureTools, | |
71 ScenePoint2D point) | 71 ScenePoint2D point) |
72 : CreateMeasureCommand(controllerW, measureTools) | 72 : CreateMeasureCommand(controllerW) |
73 , measureTool_(new AngleMeasureTool(broker, controllerW)) | 73 , measureTool_( |
74 boost::make_shared<AngleMeasureTool>(boost::ref(broker), controllerW)) | |
74 { | 75 { |
75 measureTools_.push_back(measureTool_); | 76 GetController()->AddMeasureTool(measureTool_); |
76 measureTool_->SetSide1End(point); | 77 measureTool_->SetSide1End(point); |
77 measureTool_->SetCenter(point); | 78 measureTool_->SetCenter(point); |
78 measureTool_->SetSide2End(point); | 79 measureTool_->SetSide2End(point); |
79 } | 80 } |
80 | 81 |
88 void CreateAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) | 89 void CreateAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) |
89 { | 90 { |
90 measureTool_->SetSide2End(scenePos); | 91 measureTool_->SetSide2End(scenePos); |
91 } | 92 } |
92 | 93 |
94 ViewportControllerPtr TrackerCommand::GetController() | |
95 { | |
96 ViewportControllerPtr controller = controllerW_.lock(); | |
97 assert(controller); // accessing dead object? | |
98 return controller; | |
99 } | |
93 } | 100 } |