Engauge Digitizer
2
Toggle main menu visibility
Loading...
Searching...
No Matches
Zoom
ZoomTransition.cpp
Go to the documentation of this file.
1
2
/******************************************************************************************************
3
* (C) 2017 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
4
* under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
5
* LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
6
******************************************************************************************************/
7
8
#include "
EngaugeAssert.h
"
9
#include "
Logger.h
"
10
#include <qmath.h>
11
#include "
ZoomTransition.h
"
12
13
const
double
CLOSER
= qPow (2, 1.0 / 3.0);
14
const
double
FARTHER
= 1.0 /
CLOSER
;
15
16
ZoomTransition::ZoomTransition
()
17
{
18
m_zoomMapToFactor [
ZOOM_16_TO_1
] = 16.0;
19
m_zoomMapToFactor [
ZOOM_16_TO_1_FARTHER
] = 16.0 *
FARTHER
;
20
m_zoomMapToFactor [
ZOOM_8_TO_1_CLOSER
] = 8.0 *
CLOSER
;
21
m_zoomMapToFactor [
ZOOM_8_TO_1
] = 8.0;
22
m_zoomMapToFactor [
ZOOM_8_TO_1_FARTHER
] = 8.0 *
FARTHER
;
23
m_zoomMapToFactor [
ZOOM_4_TO_1_CLOSER
] = 4.0 *
CLOSER
;
24
m_zoomMapToFactor [
ZOOM_4_TO_1
] = 4.0;
25
m_zoomMapToFactor [
ZOOM_4_TO_1_FARTHER
] = 4.0 *
FARTHER
;
26
m_zoomMapToFactor [
ZOOM_2_TO_1_CLOSER
] = 2.0 *
CLOSER
;
27
m_zoomMapToFactor [
ZOOM_2_TO_1
] = 2.0;
28
m_zoomMapToFactor [
ZOOM_2_TO_1_FARTHER
] = 2.0 *
FARTHER
;
29
m_zoomMapToFactor [
ZOOM_1_TO_1_CLOSER
] = 1.0 *
CLOSER
;
30
m_zoomMapToFactor [
ZOOM_1_TO_1
] = 1.0;
31
m_zoomMapToFactor [
ZOOM_1_TO_1_FARTHER
] = 1.0 *
FARTHER
;
32
m_zoomMapToFactor [
ZOOM_1_TO_2_CLOSER
] = 0.5 *
CLOSER
;
33
m_zoomMapToFactor [
ZOOM_1_TO_2
] = 0.5;
34
m_zoomMapToFactor [
ZOOM_1_TO_2_FARTHER
] = 0.5 *
FARTHER
;
35
m_zoomMapToFactor [
ZOOM_1_TO_4_CLOSER
] = 0.25 *
CLOSER
;
36
m_zoomMapToFactor [
ZOOM_1_TO_4
] = 0.25;
37
m_zoomMapToFactor [
ZOOM_1_TO_4_FARTHER
] = 0.25 *
FARTHER
;
38
m_zoomMapToFactor [
ZOOM_1_TO_8_CLOSER
] = 0.125 *
CLOSER
;
39
m_zoomMapToFactor [
ZOOM_1_TO_8
] = 0.125;
40
m_zoomMapToFactor [
ZOOM_1_TO_8_FARTHER
] = 0.125 *
FARTHER
;
41
m_zoomMapToFactor [
ZOOM_1_TO_16_CLOSER
] = 0.0625 *
CLOSER
;
42
m_zoomMapToFactor [
ZOOM_1_TO_16
] = 0.0625;
43
}
44
45
double
ZoomTransition::mapToFactor
(
ZoomFactor
zoomFactor)
const
46
{
47
ENGAUGE_ASSERT
(m_zoomMapToFactor.contains (zoomFactor));
48
49
return
m_zoomMapToFactor [zoomFactor];
50
}
51
52
ZoomFactor
ZoomTransition::zoomIn
(
ZoomFactor
currentZoomFactor,
53
double
m11,
54
double
m22,
55
bool
actionZoomFillIsChecked)
const
56
{
57
qCInfo(ENGAUGE_LOG) <<
"ZoomTransition::zoomIn"
;
58
59
// Try to zoom in
60
ZoomFactor
zoomFactorOld = currentZoomFactor;
61
62
if
(actionZoomFillIsChecked) {
63
64
// Zooming in means user probably wants the more squished direction to be zoomed in by one step.
65
// Loop through the zoom values until a match is found
66
double
xScale = m11;
67
double
yScale = m22;
68
double
scale = qMin(xScale, yScale);
// Fit so large extent just fits
69
70
for
(
int
zoom =
ZOOM_1_TO_16_CLOSER
; zoom >= 0; zoom--) {
71
ZoomFactor
zoomFactor =
static_cast<
ZoomFactor
>
(zoom);
72
if
(scale < m_zoomMapToFactor [zoomFactor]) {
73
zoomFactorOld = zoomFactor;
74
break
;
75
}
76
}
77
}
78
79
ZoomFactor
zoomFactorNew =
ZOOM_16_TO_1
;
80
if
(zoomFactorOld >
ZOOM_16_TO_1
) {
81
zoomFactorNew =
static_cast<
ZoomFactor
>
(zoomFactorOld - 1);
82
}
83
84
return
zoomFactorNew;
85
}
86
87
ZoomFactor
ZoomTransition::zoomOut
(
ZoomFactor
currentZoomFactor,
88
double
m11,
89
double
m22,
90
bool
actionZoomFillIsChecked)
const
91
{
92
qCInfo(ENGAUGE_LOG) <<
"ZoomTransition::zoomOut"
;
93
94
// Try to zoom out
95
ZoomFactor
zoomFactorOld = currentZoomFactor;
96
97
if
(actionZoomFillIsChecked) {
98
99
// Zooming out means user probably wants the less squished direction to be zoomed out by one step.
100
// Loop through the zoom values until a match is found
101
double
xScale = m11;
102
double
yScale = m22;
103
double
scale = qMax(xScale, yScale);
// Fit so larger extent just fits
104
105
for
(
int
zoom = 0; zoom <=
ZOOM_1_TO_16_CLOSER
; zoom++) {
106
ZoomFactor
zoomFactor =
static_cast<
ZoomFactor
>
(zoom);
107
if
(scale > m_zoomMapToFactor [zoomFactor]) {
108
zoomFactorOld = zoomFactor;
109
break
;
110
}
111
}
112
}
113
114
ZoomFactor
zoomFactorNew =
ZOOM_1_TO_16
;
115
if
(zoomFactorOld <
ZOOM_1_TO_16
) {
116
zoomFactorNew =
static_cast<
ZoomFactor
>
(zoomFactorOld + 1);
117
}
118
119
return
zoomFactorNew;
120
}
EngaugeAssert.h
ENGAUGE_ASSERT
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
Definition
EngaugeAssert.h:17
Logger.h
ZoomFactor
ZoomFactor
Zoom factors ordered by zoom level so next one above/below is the next zoom level.
Definition
ZoomFactor.h:11
ZOOM_1_TO_1_FARTHER
@ ZOOM_1_TO_1_FARTHER
Definition
ZoomFactor.h:25
ZOOM_8_TO_1_FARTHER
@ ZOOM_8_TO_1_FARTHER
Definition
ZoomFactor.h:16
ZOOM_16_TO_1_FARTHER
@ ZOOM_16_TO_1_FARTHER
Definition
ZoomFactor.h:13
ZOOM_2_TO_1
@ ZOOM_2_TO_1
Definition
ZoomFactor.h:21
ZOOM_8_TO_1
@ ZOOM_8_TO_1
Definition
ZoomFactor.h:15
ZOOM_1_TO_4_CLOSER
@ ZOOM_1_TO_4_CLOSER
Definition
ZoomFactor.h:29
ZOOM_1_TO_8_CLOSER
@ ZOOM_1_TO_8_CLOSER
Definition
ZoomFactor.h:32
ZOOM_4_TO_1
@ ZOOM_4_TO_1
Definition
ZoomFactor.h:18
ZOOM_1_TO_2
@ ZOOM_1_TO_2
Definition
ZoomFactor.h:27
ZOOM_4_TO_1_CLOSER
@ ZOOM_4_TO_1_CLOSER
Definition
ZoomFactor.h:17
ZOOM_1_TO_4_FARTHER
@ ZOOM_1_TO_4_FARTHER
Definition
ZoomFactor.h:31
ZOOM_1_TO_1_CLOSER
@ ZOOM_1_TO_1_CLOSER
Definition
ZoomFactor.h:23
ZOOM_1_TO_2_FARTHER
@ ZOOM_1_TO_2_FARTHER
Definition
ZoomFactor.h:28
ZOOM_1_TO_1
@ ZOOM_1_TO_1
Definition
ZoomFactor.h:24
ZOOM_1_TO_8
@ ZOOM_1_TO_8
Definition
ZoomFactor.h:33
ZOOM_4_TO_1_FARTHER
@ ZOOM_4_TO_1_FARTHER
Definition
ZoomFactor.h:19
ZOOM_8_TO_1_CLOSER
@ ZOOM_8_TO_1_CLOSER
Definition
ZoomFactor.h:14
ZOOM_2_TO_1_CLOSER
@ ZOOM_2_TO_1_CLOSER
Definition
ZoomFactor.h:20
ZOOM_1_TO_4
@ ZOOM_1_TO_4
Definition
ZoomFactor.h:30
ZOOM_1_TO_8_FARTHER
@ ZOOM_1_TO_8_FARTHER
Definition
ZoomFactor.h:34
ZOOM_1_TO_2_CLOSER
@ ZOOM_1_TO_2_CLOSER
Definition
ZoomFactor.h:26
ZOOM_1_TO_16
@ ZOOM_1_TO_16
Definition
ZoomFactor.h:36
ZOOM_2_TO_1_FARTHER
@ ZOOM_2_TO_1_FARTHER
Definition
ZoomFactor.h:22
ZOOM_1_TO_16_CLOSER
@ ZOOM_1_TO_16_CLOSER
Definition
ZoomFactor.h:35
ZOOM_16_TO_1
@ ZOOM_16_TO_1
Definition
ZoomFactor.h:12
FARTHER
const double FARTHER
Definition
ZoomTransition.cpp:14
CLOSER
const double CLOSER
Definition
ZoomTransition.cpp:13
ZoomTransition.h
ZoomTransition::ZoomTransition
ZoomTransition()
Single constructor.
Definition
ZoomTransition.cpp:16
ZoomTransition::mapToFactor
double mapToFactor(ZoomFactor zoomFactor) const
Return the floating precision zoom factor given the enum value.
Definition
ZoomTransition.cpp:45
ZoomTransition::zoomOut
ZoomFactor zoomOut(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom out.
Definition
ZoomTransition.cpp:87
ZoomTransition::zoomIn
ZoomFactor zoomIn(ZoomFactor currentZoomFactor, double m11, double m22, bool actionZoomFillIsChecked) const
Zoom in.
Definition
ZoomTransition.cpp:52
Generated on
for Engauge Digitizer by
1.17.0