Mercurial > hg > orthanc-stone
comparison Framework/Scene2DViewport/MeasureCommands.cpp @ 1020:ac88989817e3 toa2019093001
TrackerCommand --> MeasureCommand + fuse against exception in MeasureTool dtor
+ added DeleteMeasureCommand + moved the various concrete measuring tool-related
classes to their pre-assigned file locations (everything was crammed into
MeasureCommands.* files up to this commit) + added double-click handler to
GuiAdapter (for TOA implementation of "delete measuring tool on double-click")
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Mon, 30 Sep 2019 10:41:06 +0200 |
parents | c71ef52602a0 |
children | 01631b65837c |
comparison
equal
deleted
inserted
replaced
1019:29f5f2031310 | 1020:ac88989817e3 |
---|---|
37 GetMeasureTool()->Enable(); | 37 GetMeasureTool()->Enable(); |
38 GetController()->AddMeasureTool(GetMeasureTool()); | 38 GetController()->AddMeasureTool(GetMeasureTool()); |
39 } | 39 } |
40 | 40 |
41 CreateMeasureCommand::CreateMeasureCommand(boost::weak_ptr<ViewportController> controllerW) | 41 CreateMeasureCommand::CreateMeasureCommand(boost::weak_ptr<ViewportController> controllerW) |
42 : TrackerCommand(controllerW) | 42 : MeasureCommand(controllerW) |
43 { | 43 { |
44 | 44 |
45 } | 45 } |
46 | 46 |
47 CreateMeasureCommand::~CreateMeasureCommand() | 47 CreateMeasureCommand::~CreateMeasureCommand() |
48 { | 48 { |
49 // deleting the command should not change the model state | 49 // deleting the command should not change the model state |
50 // we thus leave it as is | 50 // we thus leave it as is |
51 } | 51 } |
52 | 52 |
53 void DeleteMeasureCommand::Redo() | |
54 { | |
55 // simply disable the measure tool upon undo | |
56 GetMeasureTool()->Disable(); | |
57 GetController()->RemoveMeasureTool(GetMeasureTool()); | |
58 } | |
59 | |
60 void DeleteMeasureCommand::Undo() | |
61 { | |
62 GetMeasureTool()->Enable(); | |
63 GetController()->AddMeasureTool(GetMeasureTool()); | |
64 } | |
65 | |
66 DeleteMeasureCommand::~DeleteMeasureCommand() | |
67 { | |
68 // deleting the command should not change the model state | |
69 // we thus leave it as is | |
70 } | |
71 | |
72 DeleteMeasureCommand::DeleteMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) | |
73 : MeasureCommand(controllerW) | |
74 , measureTool_(measureTool) | |
75 , mementoOriginal_(measureTool->GetMemento()) | |
76 , mementoModified_(measureTool->GetMemento()) | |
77 { | |
78 GetMeasureTool()->Disable(); | |
79 GetController()->RemoveMeasureTool(GetMeasureTool()); | |
80 } | |
81 | |
53 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) | 82 EditMeasureCommand::EditMeasureCommand(boost::shared_ptr<MeasureTool> measureTool, boost::weak_ptr<ViewportController> controllerW) |
54 : TrackerCommand(controllerW) | 83 : MeasureCommand(controllerW) |
55 , mementoOriginal_(measureTool->GetMemento()) | 84 , mementoOriginal_(measureTool->GetMemento()) |
56 , mementoModified_(measureTool->GetMemento()) | 85 , mementoModified_(measureTool->GetMemento()) |
57 { | 86 { |
58 | 87 |
59 } | 88 } |
72 void EditMeasureCommand::Redo() | 101 void EditMeasureCommand::Redo() |
73 { | 102 { |
74 GetMeasureTool()->SetMemento(mementoModified_); | 103 GetMeasureTool()->SetMemento(mementoModified_); |
75 } | 104 } |
76 | 105 |
77 CreateLineMeasureCommand::CreateLineMeasureCommand( | 106 boost::shared_ptr<ViewportController> MeasureCommand::GetController() |
78 MessageBroker& broker, | |
79 boost::weak_ptr<ViewportController> controllerW, | |
80 ScenePoint2D point) | |
81 : CreateMeasureCommand(controllerW) | |
82 , measureTool_( | |
83 boost::make_shared<LineMeasureTool>(boost::ref(broker), controllerW)) | |
84 { | |
85 GetController()->AddMeasureTool(measureTool_); | |
86 measureTool_->Set(point, point); | |
87 } | |
88 | |
89 void CreateLineMeasureCommand::SetEnd(ScenePoint2D scenePos) | |
90 { | |
91 measureTool_->SetEnd(scenePos); | |
92 } | |
93 | |
94 EditLineMeasureCommand::EditLineMeasureCommand( | |
95 boost::shared_ptr<LineMeasureTool> measureTool, | |
96 MessageBroker& broker, | |
97 boost::weak_ptr<ViewportController> controllerW) | |
98 : EditMeasureCommand(measureTool,controllerW) | |
99 , measureTool_(measureTool) | |
100 { | |
101 } | |
102 | |
103 | |
104 void EditLineMeasureCommand::SetStart(ScenePoint2D scenePos) | |
105 { | |
106 measureTool_->SetStart(scenePos); | |
107 mementoModified_ = measureTool_->GetMemento(); | |
108 } | |
109 | |
110 | |
111 void EditLineMeasureCommand::SetEnd(ScenePoint2D scenePos) | |
112 { | |
113 measureTool_->SetEnd(scenePos); | |
114 mementoModified_ = measureTool_->GetMemento(); | |
115 } | |
116 | |
117 CreateAngleMeasureCommand::CreateAngleMeasureCommand( | |
118 MessageBroker& broker, | |
119 boost::weak_ptr<ViewportController> controllerW, | |
120 ScenePoint2D point) | |
121 : CreateMeasureCommand(controllerW) | |
122 , measureTool_( | |
123 boost::make_shared<AngleMeasureTool>(boost::ref(broker), controllerW)) | |
124 { | |
125 GetController()->AddMeasureTool(measureTool_); | |
126 measureTool_->SetSide1End(point); | |
127 measureTool_->SetCenter(point); | |
128 measureTool_->SetSide2End(point); | |
129 } | |
130 | |
131 /** This method sets center*/ | |
132 void CreateAngleMeasureCommand::SetCenter(ScenePoint2D scenePos) | |
133 { | |
134 measureTool_->SetCenter(scenePos); | |
135 } | |
136 | |
137 /** This method sets end of side 2*/ | |
138 void CreateAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) | |
139 { | |
140 measureTool_->SetSide2End(scenePos); | |
141 } | |
142 | |
143 boost::shared_ptr<ViewportController> TrackerCommand::GetController() | |
144 { | 107 { |
145 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); | 108 boost::shared_ptr<ViewportController> controller = controllerW_.lock(); |
146 assert(controller); // accessing dead object? | 109 assert(controller); // accessing dead object? |
147 return controller; | 110 return controller; |
148 } | 111 } |
149 | |
150 EditAngleMeasureCommand::EditAngleMeasureCommand( | |
151 boost::shared_ptr<AngleMeasureTool> measureTool, | |
152 MessageBroker& broker, | |
153 boost::weak_ptr<ViewportController> controllerW) | |
154 : EditMeasureCommand(measureTool, controllerW) | |
155 , measureTool_(measureTool) | |
156 { | |
157 } | |
158 | |
159 void EditAngleMeasureCommand::SetCenter(ScenePoint2D scenePos) | |
160 { | |
161 measureTool_->SetCenter(scenePos); | |
162 mementoModified_ = measureTool_->GetMemento(); | |
163 } | |
164 | |
165 | |
166 void EditAngleMeasureCommand::SetSide1End(ScenePoint2D scenePos) | |
167 { | |
168 measureTool_->SetSide1End(scenePos); | |
169 mementoModified_ = measureTool_->GetMemento(); | |
170 } | |
171 | |
172 | |
173 void EditAngleMeasureCommand::SetSide2End(ScenePoint2D scenePos) | |
174 { | |
175 measureTool_->SetSide2End(scenePos); | |
176 mementoModified_ = measureTool_->GetMemento(); | |
177 } | |
178 | |
179 } | 112 } |