comparison Framework/Scene2DViewport/MeasureTool.h @ 774:66ac7a2d1e3a

A few renames and cleanups + moved GUI constants to controller + start work on hit tests for measure tools and mouse hover.
author Benjamin Golinvaux <bgo@osimis.io>
date Fri, 24 May 2019 15:59:51 +0200
parents Framework/Scene2DViewport/MeasureTools.h@92c400a09f1b
children e42b491f1fb2
comparison
equal deleted inserted replaced
761:07adcffba38c 774:66ac7a2d1e3a
1 /**
2 * Stone of Orthanc
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium
6 *
7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU Affero General Public License
9 * as published by the Free Software Foundation, either version 3 of
10 * the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 **/
20
21 #pragma once
22
23 #include "../Scene2D/PolylineSceneLayer.h"
24 #include "../Scene2D/Scene2D.h"
25 #include "../Scene2D/ScenePoint2D.h"
26 #include "../Scene2D/TextSceneLayer.h"
27 #include "../Scene2DViewport/PointerTypes.h"
28 #include "../Scene2DViewport/ViewportController.h"
29
30 #include <boost/shared_ptr.hpp>
31 #include <boost/weak_ptr.hpp>
32
33 #include <vector>
34 #include <cmath>
35
36 namespace OrthancStone
37 {
38 class MeasureTool : public IObserver
39 {
40 public:
41 virtual ~MeasureTool();
42
43 /**
44 Enabled tools are rendered in the scene.
45 */
46 void Enable();
47
48 /**
49 Disabled tools are not rendered in the scene. This is useful to be able
50 to use them as their own memento in command stacks (when a measure tool
51 creation command has been undone, the measure remains alive in the
52 command object but is disabled so that it can be redone later on easily)
53 */
54 void Disable();
55
56 /**
57 This method is called when the scene transform changes. It allows to
58 recompute the visual elements whose content depend upon the scene transform
59 */
60 void OnSceneTransformChanged(
61 const ViewportController::SceneTransformChanged& message);
62
63 /**
64 This function must be implemented by the measuring tool to return whether
65 a given point in scene coords is close to the measuring tool.
66
67 This is used for mouse hover highlighting.
68
69 It is assumed that if the pointer position leads to this function returning
70 true, then a click at that position will return a tracker to edit the
71 measuring tool
72 */
73 virtual bool HitTest(ScenePoint2D p) const = 0;
74 protected:
75 MeasureTool(MessageBroker& broker, ViewportControllerWPtr controllerW);
76
77 /**
78 The measuring tool may exist in a standalone fashion, without any available
79 scene (because the controller is dead or dying). This call allows to check
80 before accessing the scene.
81 */
82 bool IsSceneAlive() const;
83
84 /**
85 This is the meat of the tool: this method must [create (if needed) and]
86 update the layers and their data according to the measure tool kind and
87 current state. This is repeatedly called during user interaction
88 */
89 virtual void RefreshScene() = 0;
90
91 ViewportControllerConstPtr GetController() const;
92 ViewportControllerPtr GetController();
93
94 Scene2DConstPtr GetScene() const;
95 Scene2DPtr GetScene();
96
97 /**
98 enabled_ is not accessible by subclasses because there is a state machine
99 that we do not wanna mess with
100 */
101 bool IsEnabled() const;
102
103 private:
104 ViewportControllerWPtr controllerW_;
105 bool enabled_;
106 };
107 }
108
109 extern void TrackerSample_SetInfoDisplayMessage(
110 std::string key, std::string value);