comparison Framework/Scene2DViewport/LineMeasureTool.cpp @ 866:c71ef52602a0 toa2019062501

Added the ability to edit existing measuring tools (demo not updated yet)
author Benjamin Golinvaux <bgo@osimis.io>
date Tue, 25 Jun 2019 17:54:46 +0200
parents a29c13497557
children 0aff28f15ea2
comparison
equal deleted inserted replaced
865:a29c13497557 866:c71ef52602a0
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 "LineMeasureTool.h" 21 #include "LineMeasureTool.h"
22 #include "MeasureToolsToolbox.h" 22 #include "MeasureToolsToolbox.h"
23 #include "EditLineMeasureTracker.h"
23 #include "LayerHolder.h" 24 #include "LayerHolder.h"
24 25
25 #include <Core/Logging.h> 26 #include <Core/Logging.h>
26 27
27 #include <boost/make_shared.hpp> 28 #include <boost/make_shared.hpp>
115 } 116 }
116 117
117 bool LineMeasureTool::HitTest(ScenePoint2D p) const 118 bool LineMeasureTool::HitTest(ScenePoint2D p) const
118 { 119 {
119 return LineHitTest(p) != LineHighlightArea_None; 120 return LineHitTest(p) != LineHighlightArea_None;
121 }
122
123 boost::shared_ptr<IFlexiblePointerTracker> LineMeasureTool::CreateEditionTracker(const PointerEvent& e)
124 {
125 ScenePoint2D scenePos = e.GetMainPosition().Apply(
126 GetScene()->GetCanvasToSceneTransform());
127
128 if (!HitTest(scenePos))
129 return boost::shared_ptr<IFlexiblePointerTracker>();
130
131 /**
132 new EditLineMeasureTracker(
133 boost::shared_ptr<LineMeasureTool> measureTool;
134 MessageBroker & broker,
135 boost::weak_ptr<ViewportController> controllerW,
136 const PointerEvent & e);
137 */
138 boost::shared_ptr<EditLineMeasureTracker> editLineMeasureTracker(
139 new EditLineMeasureTracker(shared_from_this(), GetBroker(), GetController(), e));
140 return editLineMeasureTracker;
141 }
142
143
144 boost::shared_ptr<MeasureToolMemento> LineMeasureTool::GetMemento() const
145 {
146 boost::shared_ptr<LineMeasureToolMemento> memento(new LineMeasureToolMemento());
147 memento->start_ = start_;
148 memento->end_ = end_;
149 return memento;
150 }
151
152 void LineMeasureTool::SetMemento(boost::shared_ptr<MeasureToolMemento> mementoBase)
153 {
154 boost::shared_ptr<LineMeasureToolMemento> memento = boost::dynamic_pointer_cast<LineMeasureToolMemento>(mementoBase);
155 ORTHANC_ASSERT(memento.get() != NULL, "Internal error: wrong (or bad) memento");
156 start_ = memento->start_;
157 end_ = memento->end_;
158 RefreshScene();
120 } 159 }
121 160
122 void LineMeasureTool::RefreshScene() 161 void LineMeasureTool::RefreshScene()
123 { 162 {
124 if (IsSceneAlive()) 163 if (IsSceneAlive())