annotate Framework/Scene2D/RotateSceneTracker.cpp @ 1327:4f8db2d202c8 broker

OrthancSeriesProgressiveLoader now has two modes that can be selected at object creation : - progressive (will first load jpeg50, then jpeg90 then PAM) - non-progressive (will directly load PAM (uncompressed)) Please note that the slice loading order remains dynamic and depending upon the slice that the client code wishes to extract from the volume.
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 25 Mar 2020 14:34:27 +0100
parents a5326ce4f24b
children ab81ee8fce1f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
1270
2d8ab34c8c91 upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 958
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * the License, or (at your option) any later version.
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * Affero General Public License for more details.
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
16 *
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 **/
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 #include "RotateSceneTracker.h"
736
c0fcb2757b0a enforce relative includes
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 700
diff changeset
22 #include "../Scene2DViewport/ViewportController.h"
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 namespace OrthancStone
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 {
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
26 RotateSceneTracker::RotateSceneTracker(IViewport& viewport,
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
27 const PointerEvent& event)
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
28 : OneGesturePointerTracker(viewport)
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
29 , click_(event.GetMainPosition())
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
30 , aligner_(viewport, click_)
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
31 , isFirst_(true)
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 {
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
33 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
34 originalSceneToCanvas_ = lock->GetController().GetSceneToCanvasTransform();
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
35
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 }
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
37
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
38 void RotateSceneTracker::PointerMove(const PointerEvent& event)
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 {
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 ScenePoint2D p = event.GetMainPosition();
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 double dx = p.GetX() - click_.GetX();
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 double dy = p.GetY() - click_.GetY();
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
44 if (std::abs(dx) > 5.0 ||
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 std::abs(dy) > 5.0)
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 {
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 double a = atan2(dy, dx);
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 if (isFirst_)
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 {
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 referenceAngle_ = a;
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 isFirst_ = false;
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 }
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
55 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
56
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
57 lock->GetController().SetSceneToCanvasTransform(
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
58 AffineTransform2D::Combine(
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
59 AffineTransform2D::CreateRotation(a - referenceAngle_),
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
60 originalSceneToCanvas_));
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
61 aligner_.Apply();
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
62 lock->Invalidate();
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 }
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 }
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
65
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
66 void RotateSceneTracker::Cancel()
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
67 {
1305
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
68 // See remark above
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
69 std::unique_ptr<IViewport::ILock> lock(viewport_.Lock());
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
70 lock->GetController().SetSceneToCanvasTransform(originalSceneToCanvas_);
a5326ce4f24b Trackers and measuring tools now use the viewport instead of ViewportController, so that proper locks can be used
Benjamin Golinvaux <bgo@osimis.io>
parents: 1270
diff changeset
71 lock->Invalidate();
700
059e1fd05fd6 Introduced the ViewportController that sits between the application and the
Benjamin Golinvaux <bgo@osimis.io>
parents: 617
diff changeset
72 }
596
b716763571ad IPointerTracker
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 }