comparison Framework/Deprecated/Layers/LineMeasureTracker.cpp @ 732:c35e98d22764

move Deprecated classes to a separate folder
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 21 May 2019 14:27:35 +0200
parents Framework/Layers/LineMeasureTracker.cpp@4f2416d519b4
children 2d8ab34c8c91
comparison
equal deleted inserted replaced
729:529189f399ec 732:c35e98d22764
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
22 #include "LineMeasureTracker.h"
23
24 #include <stdio.h>
25
26 namespace Deprecated
27 {
28 LineMeasureTracker::LineMeasureTracker(IStatusBar* statusBar,
29 const OrthancStone::CoordinateSystem3D& slice,
30 double x,
31 double y,
32 uint8_t red,
33 uint8_t green,
34 uint8_t blue,
35 const Orthanc::Font& font) :
36 statusBar_(statusBar),
37 slice_(slice),
38 x1_(x),
39 y1_(y),
40 x2_(x),
41 y2_(y),
42 font_(font)
43 {
44 color_[0] = red;
45 color_[1] = green;
46 color_[2] = blue;
47 }
48
49
50 void LineMeasureTracker::Render(OrthancStone::CairoContext& context,
51 double zoom)
52 {
53 context.SetSourceColor(color_[0], color_[1], color_[2]);
54
55 cairo_t* cr = context.GetObject();
56 cairo_set_line_width(cr, 2.0 / zoom);
57 cairo_move_to(cr, x1_, y1_);
58 cairo_line_to(cr, x2_, y2_);
59 cairo_stroke(cr);
60
61 if (y2_ - y1_ < 0)
62 {
63 context.DrawText(font_, FormatLength(), x2_, y2_ - 5, OrthancStone::BitmapAnchor_BottomCenter);
64 }
65 else
66 {
67 context.DrawText(font_, FormatLength(), x2_, y2_ + 5, OrthancStone::BitmapAnchor_TopCenter);
68 }
69 }
70
71
72 double LineMeasureTracker::GetLength() const // In millimeters
73 {
74 OrthancStone::Vector a = slice_.MapSliceToWorldCoordinates(x1_, y1_);
75 OrthancStone::Vector b = slice_.MapSliceToWorldCoordinates(x2_, y2_);
76 return boost::numeric::ublas::norm_2(b - a);
77 }
78
79
80 std::string LineMeasureTracker::FormatLength() const
81 {
82 char buf[64];
83 sprintf(buf, "%0.01f cm", GetLength() / 10.0);
84 return buf;
85 }
86
87 void LineMeasureTracker::MouseMove(int displayX,
88 int displayY,
89 double x,
90 double y,
91 const std::vector<Touch>& displayTouches,
92 const std::vector<Touch>& sceneTouches)
93 {
94 x2_ = x;
95 y2_ = y;
96
97 if (statusBar_ != NULL)
98 {
99 statusBar_->SetMessage("Line length: " + FormatLength());
100 }
101 }
102 }