Codebase list engauge-digitizer / d750689
Imported Upstream version 8.3 Tobias Winchen 7 years ago
92 changed file(s) with 6572 addition(s) and 576 deletion(s). Raw diff Collapse all Expand all
1818 engauge.dmg
1919 engauge.pkg
2020 engauge.app.dSYM
21 fftw-3.3.4*
22 log4cpp-1.1.1*
23 log4cpp_null*
24 poppler-qt5*
2125 transifex_downloads
66 QTLIBS: Qt5CLucene Qt5Core Qt5Gui Qt5Help Qt5Network Qt5PrintSupport Qt5Sql Qt5Widgets Qt5Xml
77
88 matrix:
9 - ENGAUGE_RELEASE: "1"
9 - ENGAUGE_RELEASE: 1
10 ENGAUGE_CONFIG: "pdf"
1011 QTLIBEXT: '.lib'
1112 LOG4CPPDLLINK: 'https://dl.dropboxusercontent.com/u/1147076/log4cpp-1.1.1.zip'
1213 RESULTDIR: engauge-build
13 - QTLIBEXT: 'd.lib'
14 - ENGAUGE_CONFIG: "debug pdf"
15 QTLIBEXT: 'd.lib'
1416 LOG4CPPDLLINK: 'https://dl.dropboxusercontent.com/u/1147076/log4cpp-debug-1.1.1.zip'
1517 RESULTDIR: engauge-build-debug
1618
1719 install:
18 - set QTDIR=C:\Qt\5.6\msvc2013
20 - set QTDIR=C:\Qt\5.7\msvc2013
1921 - set PATH=%PATH%;%QTDIR%\bin
2022 - cd %APPVEYOR_BUILD_FOLDER%
2123 - curl -fsSL %LOG4CPPDLLINK% -o log4cpp-1.1.1.zip
3335 - move *dll lib
3436 - move *def lib
3537 - move *lib lib
38 - cd %APPVEYOR_BUILD_FOLDER%
39 - curl -fsSLO 'https://dl.dropboxusercontent.com/u/1147076/poppler-qt5.zip' -o poppler-qt5.zip
40 - 7z x poppler-qt5.zip -aoa
3641
3742 build_script:
3843 - cd %APPVEYOR_BUILD_FOLDER%
3944 - set LOG4CPP_HOME=%APPVEYOR_BUILD_FOLDER%\log4cpp-1.1.1
4045 - set FFTW_HOME=%APPVEYOR_BUILD_FOLDER%\fftw-3.3.4-dll32
41 - qmake engauge.pro
46 - set POPPLER_INCLUDE=%APPVEYOR_BUILD_FOLDER%\poppler-qt5\include\poppler\qt5
47 - set POPPLER_LIB=%APPVEYOR_BUILD_FOLDER%\poppler-qt5
48 - qmake engauge.pro "CONFIG+=%ENGAUGE_CONFIG%"
4249 - move Makefile Makefile.orig
4350 - ps: gc Makefile.orig | %{ $_ -replace '551.lib', $Env:QTLIBEXT } > Makefile
4451 - nmake
6067 - copy bin\engauge.exe %RESULTDIR%
6168 - copy log4cpp-1.1.1\lib\log4cpp.dll %RESULTDIR%
6269 - copy fftw-3.3.4-dll32\lib\libfftw3-3.dll %RESULTDIR%
70 - copy %APPVEYOR_BUILD_FOLDER%\poppler-qt5\*.dll %RESULTDIR%
6371 - copy LICENSE %RESULTDIR%
6472 - cd %APPVEYOR_BUILD_FOLDER%\help
6573 - qcollectiongenerator engauge.qhcp -o engauge.qhc
6674 - move engauge.qch ..\%RESULTDIR%\documentation
6775 - move engauge.qhc ..\%RESULTDIR%\documentation
6876 - cd ..
69 - 7z a %RESULTDIR%.zip %RESULTDIR%
77 - 7z a %RESULTDIR%.7z %RESULTDIR%
7078
7179 artifacts:
72 - path: engauge-build*.zip
80 - path: engauge-build*.7z
7381 name: engauge-build-result
33 engauge.exe
44 engauge_error_report.xml
55 engauge_test
6 lib*
67 *.log
78 *.log.*
89 *.pdb
0 [Desktop Entry]
1 Name=Engauge Digitizer
2 Type=Application
3 Comment=Extracts data points from images of graphs
4 TryExec=engauge
5 Exec=engauge %F
6 MimeType=text/plain
7 Categories=Education;Science;DataVisualization;
8 Icon=/usr/share/pixmaps/engauge-digitizer.xpm
9 Keywords=Analog-Digital Converter;
00 <?xml version="1.0" encoding="UTF-8"?>
11 <!DOCTYPE QtCreatorProject>
2 <!-- Written by QtCreator 3.0.1, 2016-06-08T22:08:48. -->
2 <!-- Written by QtCreator 3.0.1, 2016-07-06T22:13:50. -->
33 <qtcreator>
44 <data>
55 <variable>ProjectExplorer.Project.ActiveTarget</variable>
5757 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
5858 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
5959 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
60 <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory"></value>
60 <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/mark/engauge-digitizer/</value>
6161 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
6262 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
6363 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
6666 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
6767 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
6868 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
69 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments">CONFIG+=pdf</value>
7070 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
7171 </valuemap>
7272 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
115115 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
116116 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
117117 </valuemap>
118 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
119 <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory"></value>
120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
121 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
122 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
123 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
124 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
125 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
126 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
127 <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
128 <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
129 <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
130 </valuemap>
131 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
132 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
133 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
134 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
135 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
136 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
137 <value type="QString">-w</value>
138 <value type="QString">-r</value>
139 </valuelist>
140 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
141 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
142 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
143 </valuemap>
144 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
145 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
146 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
147 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
148 </valuemap>
149 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
150 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
151 <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
152 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
153 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
154 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
155 <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments">
156 <value type="QString">-w</value>
157 <value type="QString">-r</value>
158 </valuelist>
159 <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
160 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
161 <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
162 </valuemap>
163 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
164 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
165 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
166 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
167 </valuemap>
168 <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
169 <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
170 <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
173 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
174 <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
175 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
176 </valuemap>
177 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
118 <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
178119 <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
179120 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
180121 <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
229170 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">engauge</value>
230171 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
231172 <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/mark/engauge-digitizer/engauge.pro</value>
232 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments">-errorreport ../test/cartesian_linear_log.xml -regression</value>
173 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
233174 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">engauge.pro</value>
234175 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
235176 <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
236 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
177 <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory">/home/mark/engauge-digitizer/src</value>
237178 <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
238179 <value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
239180 <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">false</value>
44 <metadata_license>CC0</metadata_license>
55 <project_license>GPL-2.0+</project_license>
66 <name>Engauge Digitizer</name>
7 <summary>Convert an image file showing a graph or map into numbers</summary>
87 <description>
9 <p>
10 This open source digitizing software converts an image file
11 showing a graph or map into numbers. The image file can come
12 from a scanner, digital camera, or a screen-shot. The numbers
13 can be read on the screen and written or copied to a
14 spreadsheet. The process starts with an image file containing a
15 graph or map. The final result is digitized data that can be
16 used by other tools such as spreadsheet and numerical computation
17 programs.
18 </p>
19 <p>
20 Here are some real-life examples:
21 </p>
22 <ul>
23 <li>
24 You need to recreate graphs in some decades-old documents in
25 a modern format
26 </li>
27 <li>
28 You are a graduate student gathering historical data from
29 charts for your project
30 </li>
31 <li>
32 You are a webmaster with visitor statistics charts and you
33 want to do statistical analyses
34 </li>
35 </ul>
8 <p>
9 The Engauge Digitizer tool assists in interactively extracting numbers
10 from images of graphs. Conceptually, it is thus the opposite of a
11 graphing tool that converts data points to graphs. It provides assistance
12 in enhancing the image quality and matching the data points. Engauge
13 Digitizer is used by individuals such as grad students and researchers as
14 well as engineers and employees in large government and commercial
15 organizations for processing single files but also managing databases of
16 thousands of image files.
17 </p>
18
19 <p>
20 Features of Engauge Digitizer include:
21 </p>
22 <ul>
23 <li>Automatic grid line removal</li>
24 <li>Automatic point and axis matching</li>
25 <li>Automatic curve tracing</li>
26 <li>Image processing for separating important details from background information</li>
27 <li>A wizard providing an interactive tutorial to explain the basic steps</li>
28 <li>Multiple coordinate systems in the same image can be digitized in advanced mode</li>
29 <li>Cubic spline interpolation between points gives more accurate curves with fewer points</li>
30 <li>Handling of cartesian, polar, linear and logarithmic graphs</li>
31 <li>Support for drag-and-drop and copy-and-paste</li>
32 <li>Context-sensitive help, user manual and tutorials explaining every feature</li>
33 <li>Preview windows to give immediate feedback while modifying settings</li>
34 <li>Automated line and point extraction to rapidly digitize data</li>
35 </ul>
36
3637 </description>
3738 <screenshots>
3839 <screenshot type="default">https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-points-save-as.png</screenshot>
3940 <screenshot>https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-axis-point.png</screenshot>
4041 <screenshot>https://github.com/markummitchell/engauge-digitizer/raw/master/dev/gnome/engauge-screenshots/engauge-screenshot-map-points.png</screenshot>
4142 </screenshots>
42 <url type="homepage">http://digitizer.sourceforge.net/</url>
43 <url type="homepage">http://markummitchell.github.io/engauge-digitizer/</url>
4344 <updatecontact>zbyszek@in.waw.pl</updatecontact>
4445 </application>
1212 <key>CFBundleExecutable</key>
1313 <string>Engauge Digitizer</string>
1414 <key>CFBundleVersion</key>
15 <string>8.2</string>
15 <string>8.3</string>
1616 <key>CFBundleShortVersionString</key>
17 <string>8.2</string>
17 <string>8.3</string>
1818 <key>LSApplicationCategoryType</key>
1919 <string>public.app-category.utilities</string>
2020 <key>CFBundleIdentifier</key>
44 engauge*.wixpdb
55 staging
66 Engauge Digitizer
7 Engauge Digitizer.7z
78 build_msi_and_zip~
9 engauge-build
10 engauge-build.7z
11 fftw-3.3.4-dll32
12 log4cpp-1.1.1*
+0
-134
dev/windows/build_msi_and_zip less more
0 #!/usr/bin/bash
1 #
2 # ENGDIR is two levels above the current directory
3 DIR=`pwd`
4 export ENGDIR=${DIR%/*/*}
5 export ENGTRANSDIR="$ENGDIR/translations"
6 export QTBINDIR=`qtpaths --binaries-dir`
7 export QTPLUGINSDIR=`qtpaths --plugin-dir`
8 if [ -z "$QTBINDIR" ]; then
9 echo "qtpaths utility is not in PATH, which should be pointing to the Qt5 bin directory"
10 exit
11 fi
12 #
13 echo "Engauge: $ENGDIR"
14 echo "Qt binaries: $QTBINDIR"
15 echo "Qt plugins: $QTPLUGINSDIR"
16 echo "Translations: $ENGTRANSDIR"
17 #
18 echo " "
19 where g++
20 where mingw32-make
21 echo " "
22 #
23 read -p 'If the g++ compiler and mingw32-make tools are first in a directory like C:\QtOpenSource\Qt5.5.1\Tools\mingw492_32\bin, press Enter to continue, otherwise Control-C and fix the PATH variable'
24 #
25 export FROMQCH="$ENGDIR/bin/documentation/engauge.qch"
26 export FROMQHC="$ENGDIR/bin/documentation/engauge.qhc"
27 export FROMICO="$ENGDIR/src/img/digitizer.ico"
28 export FROMDLL="$QTBINDIR"
29 if ([ ! -f "$FROMQCH" ] || [ ! -f "$FROMQHC" ]); then
30 echo "File $FROMQCH and/or $FROMQHC does not exist. Run $ENGDIR/help/build.mingw to create those files"
31 exit
32 fi
33 #
34 echo " "
35 ls -ls $FROMQCH | awk '{print $7,$8,$9,$10}'
36 ls -ls $FROMQHC | awk '{print $7,$8,$9,$10}'
37 echo " "
38 #
39 read -p 'If the help input files are up to date, press Enter to continue'
40 #
41 VERSION_NUMBER_CODE=`fgrep -e 'char *VERSION_NUMBER' ../../src/util/Version.cpp | awk -F '"' '{print $2}'`
42 VERSION_NUMBER_WIX=`fgrep -e 'Version' engauge.wxs | grep -v Installer | awk -F "'" '{print $2}'`
43 #
44 echo " "
45 echo "Version number in C++ code (Version.cpp)=$VERSION_NUMBER_CODE"
46 echo "Version number in Windows WiX installer (engauge.wxs)=$VERSION_NUMBER_WIX"
47 echo " "
48 #
49 read -p 'If the version numbers are correct, press Enter to continue'
50 #
51 VERSION_NUMBER_CODE=`echo $VERSION_NUMBER_CODE | sed 's/\./_/g'`
52 #
53 echo "***Copying help input files"
54 mkdir -p documentation
55 cp $FROMQCH ../../bin/documentation
56 cp $FROMQHC ../../bin/documentation
57 #
58 echo "***Copying DLL libraries from $FROMDLL"
59 cp $FROMDLL/libwinpthread-1.dll ../../bin/
60 #
61 echo "***Copying icon file"
62 cp $FROMICO ../../bin
63 #
64 # Notes:
65 # 1) Need gcc 4 bundled with Qt rather than gcc 3 at /usr/bin to prevent 'unrecognized command line
66 # option -fno-keep-inline-dllexport'
67 # 2) Running 'make -j 4' exhausts system resources which hangs the build
68 # 3) windeployqt builds the release files in the same directory as the executable
69 # 4) PATH must include $QTBINDIR but in the /C/... format rather than the C:/... format that $QTBINDIR is in
70 # 5) qt dislikes mingw to the point that it creates Makefiles with mangled library names, which we fix using sed
71 echo "***Rebuilding release executable" &&
72 export PATH="$QTBINDIR:$PATH"
73 export ENGAUGE_RELEASE=1 &&
74 cd ../.. &&
75 lrelease engauge.pro &&
76 qmake engauge.pro &&
77 sed 's/-lQt/-lQt5/g' Makefile >Makefile~ &&
78 sed 's/Qt55/Qt5/g' Makefile~ >Makefile &&
79 mingw32-make clean &&
80 mingw32-make &&
81 cd dev/windows &&
82 echo "***Rebuilding release directory" &&
83 windeployqt -release ../../bin/engauge.exe &&
84 echo "***Compiling release files" &&
85 candle.exe engauge.wxs &&
86 candle.exe WixUI_InstallDir_NoLicense.wxs &&
87 echo "***Creating MSI" &&
88 light.exe -ext WixUIExtension -ext WixUtilExtension engauge.wixobj WixUI_InstallDir_NoLicense.wixobj -o digit-exe-windows-32-bit-installer-$VERSION_NUMBER_CODE.msi
89 #
90 echo "***Copying files for creating zip file"
91 mkdir -p "Engauge Digitizer/bearer"
92 mkdir -p "Engauge Digitizer/documentation"
93 mkdir -p "Engauge Digitizer/iconengines"
94 mkdir -p "Engauge Digitizer/imageformats"
95 mkdir -p "Engauge Digitizer/platforms"
96 mkdir -p "Engauge Digitizer/printsupport"
97 mkdir -p "Engauge Digitizer/sqldrivers"
98 mkdir -p "Engauge Digitizer/translations"
99 cp $QTPLUGINSDIR/bearer/qgenericbearer.dll "Engauge Digitizer/bearer"
100 cp $QTPLUGINSDIR/bearer/qnativewifibearer.dll "Engauge Digitizer/bearer"
101 cp $FROMQCH "Engauge Digitizer/documentation"
102 cp $FROMQHC "Engauge Digitizer/documentation"
103 cp $QTPLUGINSDIR/iconengines/qsvgicon.dll "Engauge Digitizer/iconengines"
104 cp $QTPLUGINSDIR/imageformats/qdds.dll "Engauge Digitizer/imageformats"
105 cp $QTPLUGINSDIR/imageformats/qgif.dll "Engauge Digitizer/imageformats"
106 cp $QTPLUGINSDIR/imageformats/qicns.dll "Engauge Digitizer/imageformats"
107 cp $QTPLUGINSDIR/imageformats/qico.dll "Engauge Digitizer/imageformats"
108 cp $QTPLUGINSDIR/imageformats/qjpeg.dll "Engauge Digitizer/imageformats"
109 cp $QTPLUGINSDIR/imageformats/qsvg.dll "Engauge Digitizer/imageformats"
110 cp $QTPLUGINSDIR/imageformats/qtga.dll "Engauge Digitizer/imageformats"
111 cp $QTPLUGINSDIR/imageformats/qtiff.dll "Engauge Digitizer/imageformats"
112 cp $QTPLUGINSDIR/imageformats/qwbmp.dll "Engauge Digitizer/imageformats"
113 cp $QTPLUGINSDIR/imageformats/qwebp.dll "Engauge Digitizer/imageformats"
114 cp $QTPLUGINSDIR/platforms/qwindows.dll "Engauge Digitizer/platforms"
115 cp $QTPLUGINSDIR/printsupport/windowsprintersupport.dll "Engauge Digitizer/printsupport"
116 cp $QTPLUGINSDIR/sqldrivers/qsqlite.dll "Engauge Digitizer/sqldrivers"
117 cp $QTPLUGINSDIR/sqldrivers/qsqlmysql.dll "Engauge Digitizer/sqldrivers"
118 cp $QTPLUGINSDIR/sqldrivers/qsqlpsql.dll "Engauge Digitizer/sqldrivers"
119 cp $QTTRANSDIR/*.qm "Engauge Digitizer/translations"
120 cp $ENGTRANSDIR/*.qm "Engauge Digitizer/translations"
121 cp ../../LICENSE "Engauge Digitizer"
122 cp ../../bin/D3Dcompiler_47.dll "Engauge Digitizer"
123 cp ../../bin/engauge.exe "Engauge Digitizer"
124 cp ../../bin/libEGL.dll "Engauge Digitizer"
125 cp ../../bin/libgcc_s_dw2-1.dll "Engauge Digitizer"
126 cp ../../bin/libGLESV2.dll "Engauge Digitizer"
127 cp ../../bin/libstdc++-6.dll "Engauge Digitizer"
128 cp ../../bin/libwinpthread-1.dll "Engauge Digitizer"
129 cp ../../bin/opengl32sw.dll "Engauge Digitizer"
130 cp ../../bin/Qt5*.dll "Engauge Digitizer"
131 #
132 echo "***Building zip file"
133 /C/cygwin64/bin/zip -r digit-exe-windows-32-bit-without-installer-file-$VERSION_NUMBER_CODE.zip "Engauge Digitizer"
0 call C:\"Program Files (x86)"\"Microsoft Visual Studio 12.0"\VC\vcvarsall.bat x86
1
2 set QTDIRS=bearer iconengines imageformats platforms printsupport sqldrivers
3 set QTLIBS=Qt5CLucene Qt5Core Qt5Gui Qt5Help Qt5Network Qt5PrintSupport Qt5Sql Qt5Widgets Qt5Xml
4
5 set ENGAUGE_CONFIG='pdf'
6 set QTLIBEXT='.lib'
7 set LOG4CPPDLLINK='https://dl.dropboxusercontent.com/u/1147076/log4cpp-1.1.1.zip'
8
9 set SCRIPTDIR=%cd%
10
11 rem Double-double quotes are needed in next line if the directory has a space
12 set RESULTDIR=""%SCRIPTDIR%\Engauge Digitizer""
13
14 mkdir "%RESULTDIR%"
15
16 rem Directory containing engauge.pro
17 set APPVEYOR_BUILD_FOLDER="%SCRIPTDIR%\..\.."
18
19 rem Nominal Qt installation is QTDIR="C:\Qt\5.6\msvc2013" or QTDIR="C:\Qt\5.7\msvc2013"
20 set PATH=%QTDIR%\bin;%PATH%
21
22 mkdir "%APPVEYOR_BUILD_FOLDER%"
23 cd "%APPVEYOR_BUILD_FOLDER%"
24 curl "%LOG4CPPDLLINK%" -o log4cpp-1.1.1.zip
25 7z x log4cpp-1.1.1.zip -aoa
26 mkdir fftw-3.3.4-dll32
27 cd fftw-3.3.4-dll32
28 curl 'ftp://ftp.fftw.org/pub/fftw/fftw-3.3.4-dll32.zip' -o fftw-3.3.4-dll32.zip
29 7z x fftw-3.3.4-dll32.zip -aoa
30 lib /def:libfftw3-3.def
31 lib /def:libfftw3f-3.def
32 lib /def:libfftw3l-3.def
33 mkdir include
34 mkdir lib
35 move fftw3.h include
36 move *dll lib
37 move *def lib
38 move *.lib lib
39 cd "%APPVEYOR_BUILD_FOLDER%"
40 curl 'https://dl.dropboxusercontent.com/u/1147076/poppler-qt5.zip' -o poppler-qt5.zip
41 7z x poppler-qt5.zip -aoa
42
43 cd "%APPVEYOR_BUILD_FOLDER%"
44 set FFTW_HOME="%APPVEYOR_BUILD_FOLDER%\fftw-3.3.4-dll32"
45 set POPPLER_INCLUDE="%APPVEYOR_BUILD_FOLDER%\poppler-qt5\include\poppler\qt5"
46 set POPPLER_LIB="%APPVEYOR_BUILD_FOLDER%\poppler-qt5"
47 lrelease engauge.pro
48 qmake engauge.pro "CONFIG+=%ENGAUGE_CONFIG%"
49 rem move Makefile Makefile.orig
50 rem ps: gc Makefile.orig | %{ $_ -replace '551.lib', %QTLIBEXT% } > Makefile
51 nmake
52
53 cd "%APPVEYOR_BUILD_FOLDER%"
54 mkdir "%RESULTDIR%"\documentation
55 for %%I in (%QTDIRS%) do mkdir "%RESULTDIR%\%%I"
56 for %%I in (%QTDIRS%) do copy %QTDIR%\plugins\%%I\*.dll "%RESULTDIR%\%%I"
57 for %%I in (%QTLIBS%) do copy %QTDIR%\bin\%%I.dll "%RESULTDIR%"
58 del /S *d.dll
59 copy bin\engauge.exe "%RESULTDIR%"
60
61 copy "%LOG4CPP_HOME%\lib\log4cpp.dll" "%RESULTDIR%"
62
63 copy fftw-3.3.4-dll32\lib\libfftw3-3.dll "%RESULTDIR%"
64 copy "%APPVEYOR_BUILD_FOLDER%"\poppler-qt5\*.dll "%RESULTDIR%"
65 copy LICENSE "%RESULTDIR%"
66 cd "%APPVEYOR_BUILD_FOLDER%"\help
67 qcollectiongenerator engauge.qhcp -o engauge.qhc
68 move engauge.qch "%RESULTDIR%"\documentation
69 move engauge.qhc "%RESULTDIR%"\documentation
70 cd ..
71 7z a "%RESULTDIR%.7z" "%RESULTDIR%"
72
73 echo ***creating msi
74 cd "%SCRIPTDIR%"
75 findStr "char *VERSION_NUMBER" ..\..\src\util\Version.cpp
76 findStr "Version=" engauge.wxs | findStr /v InstallerVersion
77 set /p VERSION_NUMBER_CODE="If the version numbers are correct, enter the version number seen above to continue and build releases> "
78
79 candle engauge.wxs
80 candle WixUI_InstallDir_NoLicense.wxs
81 light.exe -ext WixUIExtension -ext WixUtilExtension engauge.wixobj WixUI_InstallDir_NoLicense.wixobj -o digit-exe-windows-32-bit-installer-%VERSION_NUMBER_CODE%.msi
82
83 echo *** creating zip
84 rem "Engauge Digitizer" in next line is needed since zip crashes on %RESULTDIR% due to the space
85 zip -r "digit-exe-windows-32-bit-without-installer-file-%VERSION_NUMBER_CODE%.zip" "Engauge Digitizer"
0 #!/usr/bin/bash
1 #
2 # ENGDIR is two levels above the current directory
3 DIR=`pwd`
4 export ENGDIR=${DIR%/*/*}
5 export ENGTRANSDIR="$ENGDIR/translations"
6 export QTBINDIR=`qtpaths --binaries-dir`
7 export QTPLUGINSDIR=`qtpaths --plugin-dir`
8 if [ -z "$QTBINDIR" ]; then
9 echo "qtpaths utility is not in PATH, which should be pointing to the Qt5 bin directory"
10 exit
11 fi
12 #
13 echo "Engauge: $ENGDIR"
14 echo "Qt binaries: $QTBINDIR"
15 echo "Qt plugins: $QTPLUGINSDIR"
16 echo "Translations: $ENGTRANSDIR"
17 #
18 echo " "
19 where g++
20 where mingw32-make
21 echo " "
22 #
23 read -p 'If the g++ compiler and mingw32-make tools are first in a directory like C:\QtOpenSource\Qt5.5.1\Tools\mingw492_32\bin, press Enter to continue, otherwise Control-C and fix the PATH variable'
24 #
25 export FROMQCH="$ENGDIR/bin/documentation/engauge.qch"
26 export FROMQHC="$ENGDIR/bin/documentation/engauge.qhc"
27 export FROMICO="$ENGDIR/src/img/digitizer.ico"
28 export FROMDLL="$QTBINDIR"
29 if ([ ! -f "$FROMQCH" ] || [ ! -f "$FROMQHC" ]); then
30 echo "File $FROMQCH and/or $FROMQHC does not exist. Run $ENGDIR/help/build.mingw to create those files"
31 exit
32 fi
33 #
34 echo " "
35 ls -ls $FROMQCH | awk '{print $7,$8,$9,$10}'
36 ls -ls $FROMQHC | awk '{print $7,$8,$9,$10}'
37 echo " "
38 #
39 read -p 'If the help input files are up to date, press Enter to continue'
40 #
41 VERSION_NUMBER_CODE=`fgrep -e 'char *VERSION_NUMBER' ../../src/util/Version.cpp | awk -F '"' '{print $2}'`
42 VERSION_NUMBER_WIX=`fgrep -e 'Version' engauge.wxs | grep -v Installer | awk -F "'" '{print $2}'`
43 #
44 echo " "
45 echo "Version number in C++ code (Version.cpp)=$VERSION_NUMBER_CODE"
46 echo "Version number in Windows WiX installer (engauge.wxs)=$VERSION_NUMBER_WIX"
47 echo " "
48 #
49 read -p 'If the version numbers are correct, press Enter to continue'
50 #
51 VERSION_NUMBER_CODE=`echo $VERSION_NUMBER_CODE | sed 's/\./_/g'`
52 #
53 echo "***Copying help input files"
54 mkdir -p documentation
55 cp $FROMQCH ../../bin/documentation
56 cp $FROMQHC ../../bin/documentation
57 #
58 echo "***Copying DLL libraries from $FROMDLL"
59 cp $FROMDLL/libwinpthread-1.dll ../../bin/
60 #
61 echo "***Copying icon file"
62 cp $FROMICO ../../bin
63 #
64 # Notes:
65 # 1) Need gcc 4 bundled with Qt rather than gcc 3 at /usr/bin to prevent 'unrecognized command line
66 # option -fno-keep-inline-dllexport'
67 # 2) Running 'make -j 4' exhausts system resources which hangs the build
68 # 3) windeployqt builds the release files in the same directory as the executable
69 # 4) PATH must include $QTBINDIR but in the /C/... format rather than the C:/... format that $QTBINDIR is in
70 # 5) qt dislikes mingw to the point that it creates Makefiles with mangled library names, which we fix using sed
71 echo "***Rebuilding release executable" &&
72 export PATH="$QTBINDIR:$PATH"
73 export ENGAUGE_RELEASE=1 &&
74 cd ../.. &&
75 lrelease engauge.pro &&
76 qmake engauge.pro &&
77 sed 's/-lQt/-lQt5/g' Makefile >Makefile~ &&
78 sed 's/Qt55/Qt5/g' Makefile~ >Makefile &&
79 mingw32-make clean &&
80 mingw32-make &&
81 cd dev/windows &&
82 echo "***Rebuilding release directory" &&
83 windeployqt -release ../../bin/engauge.exe &&
84 echo "***Compiling release files" &&
85 candle.exe engauge.wxs &&
86 candle.exe WixUI_InstallDir_NoLicense.wxs &&
87 echo "***Creating MSI" &&
88 light.exe -ext WixUIExtension -ext WixUtilExtension engauge.wixobj WixUI_InstallDir_NoLicense.wixobj -o digit-exe-windows-32-bit-installer-$VERSION_NUMBER_CODE.msi
89 #
90 echo "***Copying files for creating zip file"
91 mkdir -p "Engauge Digitizer/bearer"
92 mkdir -p "Engauge Digitizer/documentation"
93 mkdir -p "Engauge Digitizer/iconengines"
94 mkdir -p "Engauge Digitizer/imageformats"
95 mkdir -p "Engauge Digitizer/platforms"
96 mkdir -p "Engauge Digitizer/printsupport"
97 mkdir -p "Engauge Digitizer/sqldrivers"
98 mkdir -p "Engauge Digitizer/translations"
99 cp $QTPLUGINSDIR/bearer/qgenericbearer.dll "Engauge Digitizer/bearer"
100 cp $QTPLUGINSDIR/bearer/qnativewifibearer.dll "Engauge Digitizer/bearer"
101 cp $FROMQCH "Engauge Digitizer/documentation"
102 cp $FROMQHC "Engauge Digitizer/documentation"
103 cp $QTPLUGINSDIR/iconengines/qsvgicon.dll "Engauge Digitizer/iconengines"
104 cp $QTPLUGINSDIR/imageformats/qdds.dll "Engauge Digitizer/imageformats"
105 cp $QTPLUGINSDIR/imageformats/qgif.dll "Engauge Digitizer/imageformats"
106 cp $QTPLUGINSDIR/imageformats/qicns.dll "Engauge Digitizer/imageformats"
107 cp $QTPLUGINSDIR/imageformats/qico.dll "Engauge Digitizer/imageformats"
108 cp $QTPLUGINSDIR/imageformats/qjpeg.dll "Engauge Digitizer/imageformats"
109 cp $QTPLUGINSDIR/imageformats/qsvg.dll "Engauge Digitizer/imageformats"
110 cp $QTPLUGINSDIR/imageformats/qtga.dll "Engauge Digitizer/imageformats"
111 cp $QTPLUGINSDIR/imageformats/qtiff.dll "Engauge Digitizer/imageformats"
112 cp $QTPLUGINSDIR/imageformats/qwbmp.dll "Engauge Digitizer/imageformats"
113 cp $QTPLUGINSDIR/imageformats/qwebp.dll "Engauge Digitizer/imageformats"
114 cp $QTPLUGINSDIR/platforms/qwindows.dll "Engauge Digitizer/platforms"
115 cp $QTPLUGINSDIR/printsupport/windowsprintersupport.dll "Engauge Digitizer/printsupport"
116 cp $QTPLUGINSDIR/sqldrivers/qsqlite.dll "Engauge Digitizer/sqldrivers"
117 cp $QTPLUGINSDIR/sqldrivers/qsqlmysql.dll "Engauge Digitizer/sqldrivers"
118 cp $QTPLUGINSDIR/sqldrivers/qsqlpsql.dll "Engauge Digitizer/sqldrivers"
119 cp $QTTRANSDIR/*.qm "Engauge Digitizer/translations"
120 cp $ENGTRANSDIR/*.qm "Engauge Digitizer/translations"
121 cp ../../LICENSE "Engauge Digitizer"
122 cp ../../bin/D3Dcompiler_47.dll "Engauge Digitizer"
123 cp ../../bin/engauge.exe "Engauge Digitizer"
124 cp ../../bin/libEGL.dll "Engauge Digitizer"
125 cp ../../bin/libgcc_s_dw2-1.dll "Engauge Digitizer"
126 cp ../../bin/libGLESV2.dll "Engauge Digitizer"
127 cp ../../bin/libstdc++-6.dll "Engauge Digitizer"
128 cp ../../bin/libwinpthread-1.dll "Engauge Digitizer"
129 cp ../../bin/opengl32sw.dll "Engauge Digitizer"
130 cp ../../bin/Qt5*.dll "Engauge Digitizer"
131 #
132 echo "***Building zip file"
133 /C/cygwin64/bin/zip -r digit-exe-windows-32-bit-without-installer-file-$VERSION_NUMBER_CODE.zip "Engauge Digitizer"
11 <Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
22 <Product Name='Engauge Digitizer'
33 Manufacturer='Engauge Open Source Developers'
4 Id='CC6A7063-A6B8-45BE-AC9B-8EDD614C43F8'
4 Id='C111CD75-C12E-45D2-AD60-F0DD78831DC0'
55 UpgradeCode='00A6792B-65ED-4894-A48B-B95D63C62CC6'
66 Language='1033' Codepage='1252'
7 Version='8.2'>
7 Version='8.3'>
88 <Package Id='*' Keywords='Installer' Description="Engauge Digitizer Installer"
99 Comments='Engauge Digitizer is available from github.com' Manufacturer='Engauge Open Source Developers'
1010 InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
2121 <File Id='engauge.exe' Name='engauge.exe' DiskId='1' Source='../../bin/engauge.exe' KeyPath='yes'>
2222 <Shortcut Id='desktopshortcut' Directory='DesktopFolder' Name='Engauge Digitizer' WorkingDirectory='INSTALLDIR' Icon='engauge.ico' IconIndex='0' Advertise='yes' />
2323 </File>
24 <File Id='d3dcompiler' Name='D3Dcompiler_47.dll' DiskId='1' Source='../../bin/D3Dcompiler_47.dll' />
25 <File Id='clucene' Name='Qt5CLucene.dll' DiskId='1' Source='../../bin/Qt5CLucene.dll' />
26 <File Id='core' Name='Qt5Core.dll' DiskId='1' Source='../../bin/Qt5Core.dll' />
27 <File Id='gui' Name='Qt5Gui.dll' DiskId='1' Source='../../bin/Qt5Gui.dll' />
28 <File Id='help' Name='Qt5Help.dll' DiskId='1' Source='../../bin/Qt5Help.dll' />
29 <File Id='network' Name='Qt5Network.dll' DiskId='1' Source='../../bin/Qt5Network.dll' />
30 <File Id='printsupport' Name='Qt5PrintSupport.dll' DiskId='1' Source='../../bin/Qt5PrintSupport.dll' />
31 <File Id='sql' Name='Qt5Sql.dll' DiskId='1' Source='../../bin/Qt5Sql.dll' />
32 <File Id='svg' Name='Qt5Svg.dll' DiskId='1' Source='../../bin/Qt5Svg.dll' />
33 <File Id='widgets' Name='Qt5Widgets.dll' DiskId='1' Source='../../bin/Qt5Widgets.dll' />
34 <File Id='xml' Name='Qt5Xml.dll' DiskId='1' Source='../../bin/Qt5Xml.dll' />
35 <File Id='egl' Name='libEGL.dll' DiskId='1' Source='../../bin/libEGL.dll' />
36 <File Id='gles' Name='libGLESV2.dll' DiskId='1' Source='../../bin/libGLESV2.dll' />
37 <File Id='gcc' Name='libgcc_s_dw2-1.dll' DiskId='1' Source='../../bin/libgcc_s_dw2-1.dll' />
38 <File Id='pthread' Name='libwinpthread-1.dll' DiskId='1' Source='../../bin/libwinpthread-1.dll' />
39 <File Id='stdc' Name='libstdc++-6.dll' DiskId='1' Source='../../bin/libstdc++-6.dll' />
40 <File Id='opengl' Name='opengl32sw.dll' DiskId='1' Source='../../bin/opengl32sw.dll' />
24 <File Id='freetype6' Name='freetype6.dll' DiskId='1' Source='Engauge Digitizer/freetype6.dll' />
25 <File Id='libfftw33' Name='libfftw3-3.dll' DiskId='1' Source='Engauge Digitizer/libfftw3-3.dll' />
26 <File Id='log4cpp' Name='log4cpp.dll' DiskId='1' Source='Engauge Digitizer/log4cpp.dll' />
27 <File Id='openjpeg' Name='openjpeg.dll' DiskId='1' Source='Engauge Digitizer/openjpeg.dll' />
28 <File Id='popplerqt5' Name='poppler-qt5.dll' DiskId='1' Source='Engauge Digitizer/poppler-qt5.dll' />
29 <File Id='clucene' Name='Qt5CLucene.dll' DiskId='1' Source='Engauge Digitizer/Qt5CLucene.dll' />
30 <File Id='core' Name='Qt5Core.dll' DiskId='1' Source='Engauge Digitizer/Qt5Core.dll' />
31 <File Id='gui' Name='Qt5Gui.dll' DiskId='1' Source='Engauge Digitizer/Qt5Gui.dll' />
32 <File Id='help' Name='Qt5Help.dll' DiskId='1' Source='Engauge Digitizer/Qt5Help.dll' />
33 <File Id='network' Name='Qt5Network.dll' DiskId='1' Source='Engauge Digitizer/Qt5Network.dll' />
34 <File Id='printsupport' Name='Qt5PrintSupport.dll' DiskId='1' Source='Engauge Digitizer/Qt5PrintSupport.dll' />
35 <File Id='sql' Name='Qt5Sql.dll' DiskId='1' Source='Engauge Digitizer/Qt5Sql.dll' />
36 <File Id='widgets' Name='Qt5Widgets.dll' DiskId='1' Source='Engauge Digitizer/Qt5Widgets.dll' />
37 <File Id='xml' Name='Qt5Xml.dll' DiskId='1' Source='Engauge Digitizer/Qt5Xml.dll' />
38 <File Id='zlib' Name='zlib1.dll' DiskId='1' Source='Engauge Digitizer/zlib1.dll' />
4139 </Component>
4240 <Directory Id='bearer' Name='bearer'>
4341 <Component Id='bearer' Guid='C7385BF7-2EF9-499A-90FF-17C3F8D4C708'>
44 <File Id='generic' Name='qgenericbearer.dll' DiskId='1' Source='../../bin/bearer/qgenericbearer.dll' />
45 <File Id='native' Name='qnativewifibearer.dll' DiskId='1' Source='../../bin/bearer/qnativewifibearer.dll' />
42 <File Id='generic' Name='qgenericbearer.dll' DiskId='1' Source='Engauge Digitizer/bearer/qgenericbearer.dll' />
43 <File Id='native' Name='qnativewifibearer.dll' DiskId='1' Source='Engauge Digitizer/bearer/qnativewifibearer.dll' />
4644 </Component>
4745 </Directory>
4846 <Directory Id='documentation' Name='documentation'>
4947 <Component Id='documentation' Guid='34F27B58-56AC-4380-9B85-131DED5BA593'>
50 <File Id='qch' Name='engauge.qch' DiskId='1' Source='../../bin/documentation/engauge.qch' />
51 <File Id='qhc' Name='engauge.qhc' DiskId='1' Source='../../bin/documentation/engauge.qhc' />
48 <File Id='qch' Name='engauge.qch' DiskId='1' Source='Engauge Digitizer/documentation/engauge.qch' />
49 <File Id='qhc' Name='engauge.qhc' DiskId='1' Source='Engauge Digitizer/documentation/engauge.qhc' />
5250 </Component>
5351 </Directory>
5452 <Directory Id='iconengines' Name='iconengines'>
5553 <Component Id='iconengines' Guid='ADE56F32-F33D-4315-ADEA-244EAD400CC2'>
56 <File Id='svgicon' Name='qsvgicon.dll' DiskId='1' Source='../../bin/iconengines/qsvgicon.dll' KeyPath='yes' />
54 <File Id='svgicon' Name='qsvgicon.dll' DiskId='1' Source='Engauge Digitizer/iconengines/qsvgicon.dll' KeyPath='yes' />
5755 </Component>
5856 </Directory>
5957 <Directory Id='imageformats' Name='imageformats'>
6058 <Component Id='imageformats' Guid='94F1114F-216F-4409-AAC6-1B4ADCB3AC32'>
61 <File Id='qdds' Name='qdds.dll' DiskId='1' Source='../../bin/imageformats/qdds.dll' />
62 <File Id='qgif' Name='qgif.dll' DiskId='1' Source='../../bin/imageformats/qgif.dll' />
63 <File Id='qicns' Name='qicns.dll' DiskId='1' Source='../../bin/imageformats/qicns.dll' />
64 <File Id='qico' Name='qico.dll' DiskId='1' Source='../../bin/imageformats/qico.dll' />
65 <File Id='qjp2' Name='qjp2.dll' DiskId='1' Source='../../bin/imageformats/qjp2.dll' />
66 <File Id='qjpeg' Name='qjpeg.dll' DiskId='1' Source='../../bin/imageformats/qjpeg.dll' />
67 <File Id='qmng' Name='qmng.dll' DiskId='1' Source='../../bin/imageformats/qmng.dll' />
68 <File Id='qsvg' Name='qsvg.dll' DiskId='1' Source='../../bin/imageformats/qsvg.dll' />
69 <File Id='qtga' Name='qtga.dll' DiskId='1' Source='../../bin/imageformats/qtga.dll' />
70 <File Id='qtiff' Name='qtiff.dll' DiskId='1' Source='../../bin/imageformats/qtiff.dll' />
71 <File Id='qwbmp' Name='qwbmp.dll' DiskId='1' Source='../../bin/imageformats/qwbmp.dll' />
72 <File Id='qwebp' Name='qwebp.dll' DiskId='1' Source='../../bin/imageformats/qwebp.dll' />
59 <File Id='qdds' Name='qdds.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qdds.dll' />
60 <File Id='qgif' Name='qgif.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qgif.dll' />
61 <File Id='qicns' Name='qicns.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qicns.dll' />
62 <File Id='qico' Name='qico.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qico.dll' />
63 <File Id='qjpeg' Name='qjpeg.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qjpeg.dll' />
64 <File Id='qsvg' Name='qsvg.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qsvg.dll' />
65 <File Id='qtga' Name='qtga.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qtga.dll' />
66 <File Id='qtiff' Name='qtiff.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qtiff.dll' />
67 <File Id='qwbmp' Name='qwbmp.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qwbmp.dll' />
68 <File Id='qwebp' Name='qwebp.dll' DiskId='1' Source='Engauge Digitizer/imageformats/qwebp.dll' />
7369 </Component>
7470 </Directory>
7571 <Directory Id='platforms' Name='platforms'>
7672 <Component Id='platforms' Guid='679FF2A9-FB70-47ED-BA76-7CDC68367777'>
77 <File Id='win' Name='qwindows.dll' DiskId='1' Source='../../bin/platforms/qwindows.dll' KeyPath='yes' />
73 <File Id='qminimal' Name='qminimal.dll' DiskId='1' Source='Engauge Digitizer/platforms/qminimal.dll' />
74 <File Id='qoffscreen' Name='qoffscreen.dll' DiskId='1' Source='Engauge Digitizer/platforms/qoffscreen.dll' />
75 <File Id='win' Name='qwindows.dll' DiskId='1' Source='Engauge Digitizer/platforms/qwindows.dll' />
7876 </Component>
7977 </Directory>
8078 <Directory Id='printsupport' Name='printsupport'>
8179 <Component Id='printsupport' Guid='39CBE62C-09FA-4D88-B3F0-1691B91DC5C3'>
82 <File Id='winprint' Name='windowsprintersupport.dll' DiskId='1' Source='../../bin/printsupport/windowsprintersupport.dll' KeyPath='yes' />
80 <File Id='winprint' Name='windowsprintersupport.dll' DiskId='1' Source='Engauge Digitizer/printsupport/windowsprintersupport.dll' KeyPath='yes' />
8381 </Component>
8482 </Directory>
8583 <Directory Id='sqldrivers' Name='sqldrivers'>
8684 <Component Id='sqldrivers' Guid='642778D3-ED5F-47CA-9978-671DF3B472D0'>
87 <File Id='qsqlite' Name='qsqlite.dll' DiskId='1' Source='../../bin/sqldrivers/qsqlite.dll' />
88 <File Id='qsqlmysql' Name='qsqlmysql.dll' DiskId='1' Source='../../bin/sqldrivers/qsqlmysql.dll' />
89 <File Id='qsqlodbc' Name='qsqlodbc.dll' DiskId='1' Source='../../bin/sqldrivers/qsqlodbc.dll' />
90 <File Id='qsqlpsql' Name='qsqlpsql.dll' DiskId='1' Source='../../bin/sqldrivers/qsqlpsql.dll' />
85 <File Id='qsqlite' Name='qsqlite.dll' DiskId='1' Source='Engauge Digitizer/sqldrivers/qsqlite.dll' />
86 <File Id='qsqlmysql' Name='qsqlmysql.dll' DiskId='1' Source='Engauge Digitizer/sqldrivers/qsqlmysql.dll' />
87 <File Id='qsqlodbc' Name='qsqlodbc.dll' DiskId='1' Source='Engauge Digitizer/sqldrivers/qsqlodbc.dll' />
88 <File Id='qsqlpsql' Name='qsqlpsql.dll' DiskId='1' Source='Engauge Digitizer/sqldrivers/qsqlpsql.dll' />
9189 </Component>
9290 </Directory>
9391 <Directory Id='translations' Name='translations'>
9492 <Component Id='translations' Guid='A9AD2B5C-8B4F-48E5-819A-D38C4EA11153'>
95 <File Id='qt_ca' Name='qt_ca.qm' DiskId='1' Source='../../bin/translations/qt_ca.qm' />
96 <File Id='qt_cs' Name='qt_cs.qm' DiskId='1' Source='../../bin/translations/qt_cs.qm' />
97 <File Id='qt_de' Name='qt_de.qm' DiskId='1' Source='../../bin/translations/qt_de.qm' />
98 <File Id='qt_en' Name='qt_en.qm' DiskId='1' Source='../../bin/translations/qt_en.qm' />
99 <File Id='qt_fi' Name='qt_fi.qm' DiskId='1' Source='../../bin/translations/qt_fi.qm' />
100 <File Id='qt_fr' Name='qt_fr.qm' DiskId='1' Source='../../bin/translations/qt_fr.qm' />
101 <File Id='qt_he' Name='qt_he.qm' DiskId='1' Source='../../bin/translations/qt_he.qm' />
102 <File Id='qt_hu' Name='qt_hu.qm' DiskId='1' Source='../../bin/translations/qt_hu.qm' />
103 <File Id='qt_it' Name='qt_it.qm' DiskId='1' Source='../../bin/translations/qt_it.qm' />
104 <File Id='qt_ja' Name='qt_ja.qm' DiskId='1' Source='../../bin/translations/qt_ja.qm' />
105 <File Id='qt_ko' Name='qt_ko.qm' DiskId='1' Source='../../bin/translations/qt_ko.qm' />
106 <File Id='qt_lv' Name='qt_lv.qm' DiskId='1' Source='../../bin/translations/qt_lv.qm' />
107 <File Id='qt_ru' Name='qt_ru.qm' DiskId='1' Source='../../bin/translations/qt_ru.qm' />
108 <File Id='qt_sk' Name='qt_sk.qm' DiskId='1' Source='../../bin/translations/qt_sk.qm' />
109 <File Id='qt_uk' Name='qt_uk.qm' DiskId='1' Source='../../bin/translations/qt_uk.qm' />
93 <File Id='qt_ar' Name='qt_ar.qm' DiskId='1' Source='../../translations/engauge_ar.qm' />
94 <File Id='qt_de' Name='qt_de.qm' DiskId='1' Source='../../translations/engauge_de.qm' />
95 <File Id='qt_en' Name='qt_en.qm' DiskId='1' Source='../../translations/engauge_en.qm' />
96 <File Id='qt_es' Name='qt_es.qm' DiskId='1' Source='../../translations/engauge_es.qm' />
97 <File Id='qt_fr' Name='qt_fr.qm' DiskId='1' Source='../../translations/engauge_fr.qm' />
98 <File Id='qt_hi' Name='qt_hi.qm' DiskId='1' Source='../../translations/engauge_hi.qm' />
99 <File Id='qt_it' Name='qt_it.qm' DiskId='1' Source='../../translations/engauge_it.qm' />
100 <File Id='qt_ja' Name='qt_ja.qm' DiskId='1' Source='../../translations/engauge_ja.qm' />
101 <File Id='qt_kk' Name='qt_kk.qm' DiskId='1' Source='../../translations/engauge_kk.qm' />
102 <File Id='qt_ko' Name='qt_ko.qm' DiskId='1' Source='../../translations/engauge_ko.qm' />
103 <File Id='qt_pt' Name='qt_pt.qm' DiskId='1' Source='../../translations/engauge_pt.qm' />
104 <File Id='qt_ru' Name='qt_ru.qm' DiskId='1' Source='../../translations/engauge_ru.qm' />
105 <File Id='qt_zh' Name='qt_zh.qm' DiskId='1' Source='../../translations/engauge_zh.qm' />
110106 </Component>
111107 </Directory>
112108 </Directory>
141137 <ComponentRef Id='sqldrivers' />
142138 <ComponentRef Id='translations' />
143139 </Feature>
144 <Icon Id='engauge.ico' SourceFile='../../bin/digitizer.ico' />
140 <Icon Id='engauge.ico' SourceFile='../../src/img/digitizer.ico' />
145141 <Property Id='ARPPRODUCTION' Value='engauge.ico' />
146142 <Property Id="WIXUI_INSTALLDIR" Value="MYAPPDIRPROPERTY" />
147143 <UIRef Id="WixUI_InstallDir_NoLicense" />
33 # 1) This builds 'release' executables by default, to greatly reduce the chances of a 'debug' build getting deployed.
44 # To get a 'debug' build, add 'CONFIG=debug' to the qmake command line:
55 # qmake CONFIG=debug
6 # 2) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires JPEG2000_INCLUDE and
7 # JPEG2000_LIB environment variables. At some point, Qt may provide its own support for this format, at which point
8 # this can be skipped
6 # 2) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires:
7 # 1) previous installation of OpenJPEG 2.1 development package
8 # 2) OPENJPEG_INCLUDE environment variable pointing to directory with openjpeg.h
9 # 3) OPENJPEG_LIB environment variable pointing to directory with libopenjp2.so
10 # Sample command lines:
911 # qmake CONFIG+=jpeg2000
1012 # qmake "CONFIG+=debug jpeg2000"
11 # 3) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of
12 # include/library files in an automated and platform-independent manner, so it will not be removed
13 # At some point, Qt may provide its own support for this format, at which point this can be skipped
14 # 3) Add 'pdf' to the qmake command line to include support for PDF input files. Requires
15 # 1) previous installation of the poppler-qt5 development package. Engauge has been tested with versions 0.24.5 and 0.44.0
16 # 2) POPPLER_INCLUDE environment variable pointing to directory containing Document.h
17 # 3) POPPLER_LIB environment variable pointing to directory containing libpoppler-qt5.so
18 # Sample command lines:
19 # qmake CONFIG+=pdf
20 # qmake "CONFIG+=debug pdf"
1321 # 4) Set environment variable HELPDIR to override the default directory for the help files. On the command line, use
1422 # qmake "DEFINES+=HELPDIR=<directory>". The <directory> is absolute or relative to the application executable directory
23 # 5) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of
24 # include/library files in an automated and platform-independent manner, so it will not be removed
1525 #
1626 # More comments are in the INSTALL file, and below
1727
195205 src/Export/ExportAlignLinear.h \
196206 src/Export/ExportAlignLog.h \
197207 src/Export/ExportDelimiter.h \
208 src/Export/ExportImageForRegression.h \
198209 src/Export/ExportLayoutFunctions.h \
199210 src/Export/ExportPointsIntervalUnits.h \
200211 src/Export/ExportPointsSelectionFunctions.h \
269280 src/Network/NetworkClient.h \
270281 src/Ordinal/OrdinalGenerator.h \
271282 src/Ordinal/OrdinalToGraphicsPoint.h \
283 src/Pdf/PdfResolution.h \
272284 src/Point/Point.h \
273285 src/Point/PointComparator.h \
274286 src/Point/PointIdentifiers.h \
324336 src/Zoom/ZoomControl.h \
325337 src/Zoom/ZoomFactor.h \
326338 src/Zoom/ZoomFactorInitial.h \
327 src/Zoom/ZoomLabels.h
339 src/Zoom/ZoomLabels.h \
340 src/util/ZValues.h
328341
329342 SOURCES += \
330343 src/Background/BackgroundImage.cpp \
484497 src/Export/ExportFileFunctions.cpp \
485498 src/Export/ExportFileRelations.cpp \
486499 src/Export/ExportHeader.cpp \
500 src/Export/ExportImageForRegression.cpp \
487501 src/Export/ExportLayoutFunctions.cpp \
488502 src/Export/ExportOrdinalsSmooth.cpp \
489503 src/Export/ExportOrdinalsStraight.cpp \
547561 src/util/mmsubs.cpp \
548562 src/Network/NetworkClient.cpp \
549563 src/Ordinal/OrdinalGenerator.cpp \
564 src/Pdf/PdfResolution.cpp \
550565 src/Point/Point.cpp \
551566 src/Point/PointIdentifiers.cpp \
552567 src/Point/PointMatchAlgorithm.cpp \
595610 src/View/ViewProfileScale.cpp \
596611 src/View/ViewSegmentFilter.cpp \
597612 src/util/Xml.cpp \
598 src/Zoom/ZoomLabels.cpp
613 src/Zoom/ZoomLabels.cpp \
614 src/util/ZValues.cpp
599615
600616 macx-* {
601617 CONFIG(debug,debug|release){
628644
629645 win32-* {
630646 CONFIG += windows
631 QMAKE_LFLAGS += -Wl,--stack,32000000
632647 }
633648
634649 win32-msvc* {
635 QMAKE_CXXFLAGS += -EHsc
650 QMAKE_CXXFLAGS += -EHsc /F 32000000
636651 LIBS += $$(FFTW_HOME)/lib/libfftw3-3.lib $$(LOG4CPP_HOME)/lib/log4cpp.lib shell32.lib
637652 } else {
638653 win32-g++* {
639654 LIBS += -L$$(LOG4CPP_HOME)/lib -L$$(FFTW_HOME)/lib
655 QMAKE_LFLAGS += -Wl,--stack,32000000
640656 }
641657 LIBS += -lfftw3 -llog4cpp
642658 }
673689 src/Mime \
674690 src/Network \
675691 src/Ordinal \
692 src/Pdf \
676693 src/Plot \
677694 src/Point \
678695 src/Segment \
693710
694711 RESOURCES += src/engauge.qrc
695712
713 CONFIG(debug,debug|release) {
714 message("Build type: debug")
715 } else {
716 message("Build type: release")
717 }
718
696719 jpeg2000 {
697 CONFIG(debug,debug|release) {
698 message(Building dynamic debug version with internal support for JPEG2000 files)
699 } else {
700 message(Building static release version with internal support for JPEG2000 files)
701 }
720 message("JPEG2000 support: yes")
702721 _OPENJPEG_INCLUDE = $$(OPENJPEG_INCLUDE)
703722 _OPENJPEG_LIB = $$(OPENJPEG_LIB)
704 _JPEG2000_INCLUDE = $$(JPEG2000_INCLUDE)
705 _JPEG2000_LIB = $$(JPEG2000_LIB)
706723 isEmpty(_OPENJPEG_INCLUDE) {
707 error("OPENJPEG_INCLUDE, OPENJPEG_LIB, JPEG2000_INCLUDE and JPEG2000_LIB environment variables must be defined")
724 error("OPENJPEG_INCLUDE and OPENJPEG_LIB environment variables must be defined")
708725 } else {
709726 isEmpty(_OPENJPEG_LIB) {
710 error("OPENJPEG_INCLUDE, OPENJPEG_LIB, JPEG2000_INCLUDE and JPEG2000_LIB environment variables must be defined")
711 } else {
712 isEmpty(_JPEG2000_INCLUDE) {
713 error("JPEG_INCLUDE, JPEG_LIB, JPEG2000_INCLUDE and JPEG2000_LIB environment variables must be defined")
714 } else {
715 isEmpty(_JPEG2000_LIB) {
716 error("JPEG_INCLUDE, JPEG_LIB, JPEG2000_INCLUDE and JPEG2000_LIB environment variables must be defined")
717 }
718 }
727 error("OPENJPEG_INCLUDE and OPENJPEG_LIB environment variables must be defined")
719728 }
720729 }
721730 DEFINES += "ENGAUGE_JPEG2000"
722731 INCLUDEPATH += $$(OPENJPEG_INCLUDE) \
723 $$(JPEG2000_INCLUDE)
724 LIBS += -L$$(OPENJPEG_LIB) -L$$(JPEG2000_LIB) -lopenjp2
725
732 src/Jpeg2000
733 LIBS += -L$$(OPENJPEG_LIB) -lopenjp2
726734 HEADERS += src/Jpeg2000/Jpeg2000.h \
727735 src/Jpeg2000/Jpeg2000Callbacks.h \
728736 src/Jpeg2000/Jpeg2000Color.h \
729737 src/Jpeg2000/Jpeg2000Convert.h \
730738 src/Jpeg2000/Jpeg2000FormatDefs.h
731
732739 SOURCES += src/Jpeg2000/Jpeg2000.cpp \
733740 src/Jpeg2000/Jpeg2000Callbacks.cpp \
734741 src/Jpeg2000/Jpeg2000Color.cpp \
735742 src/Jpeg2000/Jpeg2000Convert.cpp
743 QMAKE_LFLAGS += -Wl,-rpath=\'\$\$ORIGIN\'
744 QMAKE_POST_LINK += cp $$(OPENJPEG_LIB)/libopenjp2.so.7 bin
736745
737746 } else {
738 CONFIG(debug,debug|release) {
739 message(Building debug version without internal support for JPEG2000 files)
747 message("JPEG2000 support: no")
748 }
749
750 pdf {
751 message("PDF support: yes")
752 _POPPLER_INCLUDE = $$(POPPLER_INCLUDE)
753 _POPPLER_LIB = $$(POPPLER_LIB)
754 isEmpty(_POPPLER_INCLUDE) {
755 error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined")
740756 } else {
741 message(Building release version without internal support for JPEG2000 files)
757 isEmpty(_POPPLER_LIB) {
758 error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined")
759 }
742760 }
761 DEFINES += "ENGAUGE_PDF"
762 LIBS += -L$$(POPPLER_LIB) -lpoppler-qt5
763 INCLUDEPATH += $$(POPPLER_INCLUDE)
764 HEADERS += src/Dlg/DlgPdfFrame.h \
765 src/Pdf/Pdf.h \
766 src/Pdf/PdfFrame.h \
767 src/Pdf/PdfFrameHandle.h
768 SOURCES += src/Dlg/DlgPdfFrame.cpp \
769 src/Pdf/Pdf.cpp \
770 src/Pdf/PdfFrame.cpp \
771 src/Pdf/PdfFrameHandle.cpp
772
773 } else {
774 message("PDF support: no")
743775 }
744776
745777 # People interested in translating a language can contact the developers for help.
Binary diff not shown
99 #include "GraphicsItemType.h"
1010 #include "GraphicsScene.h"
1111 #include "Logger.h"
12 #include "ZValues.h"
1213
1314 BackgroundStateAbstractBase::BackgroundStateAbstractBase(BackgroundStateContext &context,
1415 GraphicsScene &scene) :
2021 QPixmap dummy;
2122 m_imageItem = m_scene.addPixmap (dummy);
2223 m_imageItem->setVisible (false);
24 m_imageItem->setZValue (Z_VALUE_BACKGROUND);
2325 m_imageItem->setData (DATA_KEY_IDENTIFIER, "view");
2426 m_imageItem->setData (DATA_KEY_GRAPHICS_ITEM_TYPE, GRAPHICS_ITEM_TYPE_IMAGE);
2527 }
1212 #include <QVariant>
1313 #include <QXmlStreamWriter>
1414
15 const QString PIPE ("|");
16 const QString SPACE (" ");
17 const QString TAB ("\t");
18
1519 CurveNameList::CurveNameList()
1620 {
1721 }
4953 if (success) {
5054
5155 // First test was passed. Second test is to check for duplication
52
5356 for (int row1 = 0; row1 < m_modelCurvesEntries.count(); row1++) {
5457
5558 // Use table entry except for the one row that gets overridden
8083 }
8184
8285 QVariant CurveNameList::data (const QModelIndex &index,
83 int role) const
86 int role) const
8487 {
8588 LOG4CPP_DEBUG_S ((*mainCat)) << "CurveNameList::data"
8689 << " isRoot=" << (index.isValid () ? "no" : "yes")
118121
119122 Qt::ItemFlags CurveNameList::flags (const QModelIndex &index) const
120123 {
121 // Only the root item can accept drops, or else dragging one entry onto another
122 // would result in the drop target getting overwritten
123
124124 if (index.isValid ()) {
125125
126 // Not root item
126 // Not root item. ItemIsDropEnabled is unwanted during dragging since dragged entry would overwrite
127 // another entry if user forgets to drop into the space between successive entries
127128 return QAbstractTableModel::flags (index) |
128129 Qt::ItemIsDragEnabled |
129130 Qt::ItemIsEnabled |
139140 }
140141 }
141142
143 QModelIndex CurveNameList::indexForValue (const QModelIndex &indexToSkip,
144 const QVariant &value) const
145 {
146 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::indexForValue";
147
148 for (int row = 0; row < rowCount(); row++) {
149
150 QModelIndex indexSearch = index (row, 0);
151
152 if (indexToSkip != indexSearch) {
153
154 if (data (indexSearch) == value) {
155
156 return indexSearch;
157
158 }
159 }
160 }
161
162 QModelIndex invalid;
163 return invalid;
164 }
165
142166 bool CurveNameList::insertRows (int row,
143 int count,
144 const QModelIndex &parent)
167 int count,
168 const QModelIndex &parent)
145169 {
146170 bool skip = (count != 1 || row < 0 || row > rowCount () || parent.isValid());
147171
148172 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::insertRows"
149173 << " row=" << row
150174 << " count=" << count
175 << " parentRow=" << parent.row()
176 << " parentCol=" << parent.column()
151177 << " isRoot=" << (parent.isValid () ? "no" : "yes")
152178 << " skip=" << (skip ? "yes" : "no");
153179
154180 if (skip) {
155181
156 // Parent should be root item which is not valid
182 // Comments:
183 // 1) Row=-1 means the drag is AFTER the last entry. Although this method can deal with that easily by treating it
184 // as a drag to row=rowCount(), the later call to setData will fail since the row gets set to 0 (which is ambiguous
185 // with a drag to the 0th entry)
186 // 2) Valid parent means we are not adding to the root node, which is what we want to do
157187 return false;
158188 }
189
190 QString before = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
159191
160192 beginInsertRows (QModelIndex (),
161193 row,
168200
169201 endInsertRows ();
170202
203 QString after = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
204
205 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::insertRows"
206 << " before=" << before.toLatin1().data()
207 << " after=" << after.toLatin1().data();
208
171209 return true;
172210 }
173211
174212 bool CurveNameList::removeRows (int row,
175 int count,
176 const QModelIndex &parent)
213 int count,
214 const QModelIndex &parent)
177215 {
178216 bool skip = (count != 1 || row < 0 || row > rowCount () || parent.isValid());
179217
205243 return count;
206244 }
207245
246 bool CurveNameList::rowIsUnpopulated (int row) const
247 {
248 // Special case - in a drag to the white space after the last entry (and NOT to the legal drop line just after
249 // the last entry), our insertRows method has already rejected the insert. In this case, at this
250 // point row=0 so we need to check if variable 'row' points to an empty entry (empty+empty+0) or
251 // to a fully-populated entry (nonempty+maybeEmpty+number)
252 QString fields = m_modelCurvesEntries.at (row);
253 CurveNameListEntry entryAtRow (fields);
254 return entryAtRow.entryHasNotBeenPopulated ();
255 }
256
208257 bool CurveNameList::setData (const QModelIndex &index,
209258 const QVariant &value,
210259 int role)
211260 {
212261 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::setData"
213262 << " indexRow=" << index.row ()
214 << " value=" << (value.isValid () ? "valid" : "invalid")
263 << " indexCol=" << index.column ()
264 << " indexValid=" << (index.isValid() ? "valid" : "invalid")
265 << " valueValid=" << (value.isValid () ? "valid" : "invalid")
266 << " value=" << value.toString().toLatin1().data()
215267 << " role=" << roleAsString (role).toLatin1 ().data ();
216268
217269 bool success = false;
218270
219 int row = index.row ();
220 if (row < m_modelCurvesEntries.count ()) {
221
222 success = true; // This method will be successful except in the rare case when a curve name is a duplicate
223
224 if (!value.isValid () && (role == Qt::EditRole)) {
225
226 // Remove the entry
227 m_modelCurvesEntries.removeAt (row);
228
229 } else {
230
231 // Modify the entry
232 CurveNameListEntry curvesEntry (m_modelCurvesEntries [row]); // Retrieve entry
233
234 if (index.column () == 0) {
235 curvesEntry.setCurveNameCurrent (value.toString ());
236 success = curveNameIsAcceptable (value.toString (),
237 row);
238 } else if (index.column () == 1) {
239 curvesEntry.setCurveNameOriginal (value.toString ());
240 } else if (index.column () == 2) {
241 curvesEntry.setNumPoints (value.toInt ());
271 if (index.isValid()) {
272
273 // Process the new entry
274 int row = index.row ();
275 if (row < m_modelCurvesEntries.count ()) {
276
277 // Variable 'row' points to an empty entry (created by insertRows) so we populate it here
278 success = true;
279
280 QString before = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
281
282 if (!value.isValid () && (role == Qt::EditRole)) {
283
284 // Remove the entry
285 m_modelCurvesEntries.removeAt (row);
286
242287 } else {
243 ENGAUGE_ASSERT (false);
288
289 // Modify the entry
290 CurveNameListEntry curvesEntry (m_modelCurvesEntries [row]); // Retrieve entry
291
292 if (index.column () == 0) {
293
294 if (role == Qt::EditRole) {
295
296 // Does new curve name meet the requirements
297 if (curveNameIsAcceptable (value.toString (),
298 row)) {
299
300 curvesEntry.setCurveNameCurrent (value.toString ());
301 m_modelCurvesEntries [row] = curvesEntry.toString (); // Save update entry
302
303 } else {
304
305 success = false;
306 }
307
308 } else if ((role == Qt::DisplayRole) ||
309 (curveNameIsAcceptable (value.toString(),
310 row))) {
311
312 // Above we skipped curve name uniqueness check for Qt::DisplayRole since that role is used when dragging
313 // curve from one place to another, since for a short time the new curve name will coexist
314 // with the old curve name (until the old entry is removed)
315
316 if (rowIsUnpopulated (row)) {
317 success = true;
318 curvesEntry.setCurveNameCurrent (value.toString ());
319 curvesEntry.setNumPoints (0);
320 m_modelCurvesEntries [row] = curvesEntry.toString (); // Save update entry
321 tryToRemoveOriginalCopy (index,
322 value,
323 role);
324 } else {
325 success = false;
326 }
327 }
328 } else if (index.column () == 1) {
329 curvesEntry.setCurveNameOriginal (value.toString ());
330 m_modelCurvesEntries [row] = curvesEntry.toString (); // Save update entry
331 } else if (index.column () == 2) {
332 curvesEntry.setNumPoints (value.toInt ());
333 m_modelCurvesEntries [row] = curvesEntry.toString (); // Save update entry
334 } else {
335 ENGAUGE_ASSERT (false);
336 }
337
338 if (success) {
339 emit dataChanged (index,
340 index);
341 }
342
343 QString after = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
344
345 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::setData setting"
346 << " before=" << before.toLatin1().data()
347 << " after=" << after.toLatin1().data();
348
244349 }
245
246 if (success) {
247 m_modelCurvesEntries [row] = curvesEntry.toString (); // Save update entry
248 }
249 }
250
251 if (success) {
252 emit dataChanged (index,
253 index);
254350 }
255351 }
256352
261357 {
262358 return Qt::MoveAction;
263359 }
360
361 void CurveNameList::tryToRemoveOriginalCopy (const QModelIndex &index,
362 const QVariant &value,
363 int role)
364 {
365 // After the copy part of a move maneuver, the old entry must be identified and removed
366 if (index.column () == 0 && role == Qt::DisplayRole) {
367 QModelIndex indexToRemove = indexForValue (index,
368 value); // Returns Invalid if no duplicate entry was found
369 if (indexToRemove.isValid()) {
370
371 QString before = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
372
373 beginRemoveRows (QModelIndex (),
374 indexToRemove.row(),
375 indexToRemove.row());
376 m_modelCurvesEntries.removeAt (indexToRemove.row ());
377 endRemoveRows ();
378
379 emit dataChanged (indexToRemove,
380 indexToRemove);
381
382 QString after = m_modelCurvesEntries.join (PIPE).replace (TAB, SPACE);
383
384 LOG4CPP_INFO_S ((*mainCat)) << "CurveNameList::setData removed"
385 << " indexRow=" << indexToRemove.row ()
386 << " indexCol=" << indexToRemove.column ()
387 << " before=" << before.toLatin1().data()
388 << " after=" << after.toLatin1().data();
389 }
390 }
391 }
5454 bool curveNameIsAcceptable (const QString &curveNameNew,
5555 int row) const;
5656
57 /// Search method that finds the first occurrence of the specified value. If value is not found then Invalid is returned
58 QModelIndex indexForValue (const QModelIndex &indexToSkip,
59 const QVariant &value) const;
60
61 /// Return true if row has not yet been unpopulated
62 bool rowIsUnpopulated (int row) const;
63
64 /// Remove original copy after it has been replicated as part of a move operation
65 void tryToRemoveOriginalCopy(const QModelIndex &index,
66 const QVariant &value,
67 int role);
68
5769 /// Store entries as QStrings for easy translation into QVariants. Use CurveNameListEntry to translate
5870 QStringList m_modelCurvesEntries;
5971 };
1010 #include <QStringList>
1111 #include <QXmlStreamWriter>
1212
13 const int NUM_POINTS_UNDEFINED = -1; // Negative value indicates row is not yet been populated (since actual range is 0 or more)
1314 const QString DELIMITER ("\t");
1415
1516 CurveNameListEntry:: CurveNameListEntry () :
1617 m_curveNameCurrent (""),
1718 m_curveNameOriginal (""),
18 m_numPoints (0)
19 m_numPoints (NUM_POINTS_UNDEFINED)
1920 {
2021 }
2122
4748 return m_curveNameOriginal;
4849 }
4950
51 bool CurveNameListEntry::entryHasNotBeenPopulated () const
52 {
53 return m_numPoints < 0; // See comment about NUM_POINTS_UNDEFINED
54 }
55
5056 int CurveNameListEntry::numPoints () const
5157 {
5258 return m_numPoints;
4444 /// Original curve name in document. Empty if there was no original curve
4545 QString curveNameOriginal () const;
4646
47 /// Return true if entry is unpopulated. This is true between insertRows (where added to model) and setData (where fields are set)
48 bool entryHasNotBeenPopulated () const;
49
4750 /// Number of points in curve.
4851 int numPoints () const;
4952
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "DlgPdfFrame.h"
7 #include "EngaugeAssert.h"
8 #include "Logger.h"
9 #include "MainWindow.h"
10 #include "PdfFrame.h"
11 #include "poppler-qt5.h"
12 #include <QApplication>
13 #include <QGraphicsPixmapItem>
14 #include <QGraphicsScene>
15 #include <QImage>
16 #include <QLabel>
17 #include <QLayout>
18 #include <QPushButton>
19 #include <QSettings>
20 #include <QSpinBox>
21 #include <QTimer>
22 #include "Settings.h"
23 #include "ViewPreview.h"
24
25 using namespace Poppler;
26
27 int DlgPdfFrame::MINIMUM_DIALOG_WIDTH = 350;
28 int DlgPdfFrame::MINIMUM_PREVIEW_HEIGHT = 200;
29 const int X_TOP_LEFT = 0, Y_TOP_LEFT = 0;
30 const int WIDTH = -1, HEIGHT = -1; // Negative values give full page
31 const int FIRST_PAGE_1_BASED = 1;
32 const int SMALLEST_DELAY_MS = 500; // Below 500 triggers "double jump" bug in linux
33
34 DlgPdfFrame::DlgPdfFrame(const Poppler::Document &document,
35 int resolution) :
36 m_document (document),
37 m_resolution (resolution),
38 m_pixmap (0)
39 {
40 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::DlgPdfFrame";
41
42 setWindowTitle (tr ("PDF Frame"));
43 setModal (true);
44
45 QWidget *subPanel = new QWidget ();
46 QGridLayout *layout = new QGridLayout (subPanel);
47 subPanel->setLayout (layout);
48
49 int row = 0;
50
51 createTimer ();
52 createPageSpinner (layout, row);
53 createPreview (layout, row);
54 finishPanel (subPanel);
55 updatePreview ();
56
57 // Bring the two middle columns together
58 layout->setColumnStretch (0, 1);
59 layout->setColumnStretch (1, 0);
60 layout->setColumnStretch (2, 0);
61 layout->setColumnStretch (3, 1);
62 }
63
64 DlgPdfFrame::~DlgPdfFrame()
65 {
66 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::~DlgPdfFrame";
67 }
68
69 void DlgPdfFrame::createPageSpinner (QGridLayout *layout,
70 int &row)
71 {
72 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::createPageSpinner";
73
74 const int MIN_WIDTH_SPINNER = 90;
75
76 QLabel *labelPage = new QLabel (tr ("Page:"));
77 layout->addWidget (labelPage, row, 1, 1, 1);
78
79 m_spinPage = new QSpinBox;
80 m_spinPage->setMinimumWidth (MIN_WIDTH_SPINNER);
81 m_spinPage->setWhatsThis (tr ("Page number that will be imported"));
82 m_spinPage->setRange (1, m_document.numPages());
83 layout->addWidget (m_spinPage, row++, 2, 1, 1);
84 connect (m_spinPage, SIGNAL (valueChanged (int)), this, SLOT (slotPage (int)));
85 }
86
87 void DlgPdfFrame::createPreview (QGridLayout *layout,
88 int &row)
89 {
90 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::createPreview";
91
92 QLabel *labelPreview = new QLabel (tr ("Preview"));
93 layout->addWidget (labelPreview, row++, 0, 1, 1, Qt::AlignLeft);
94
95 m_scenePreview = new QGraphicsScene (this);
96 m_viewPreview = new ViewPreview (m_scenePreview,
97 ViewPreview::VIEW_ASPECT_RATIO_ONE_TO_ONE,
98 this);
99 m_viewPreview->setWhatsThis (tr ("Preview window that shows what part of the image will be imported. "
100 "The image portion inside the rectangular frame will be imported from the currently selected page. "
101 "The frame can be moved and resized by dragging the corner handles."));
102 m_viewPreview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
103 m_viewPreview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
104 m_viewPreview->setMinimumHeight (MINIMUM_PREVIEW_HEIGHT);
105 layout->addWidget (m_viewPreview, row++, 0, 1, 4);
106
107 // More preview initialization
108 initializeFrameGeometryAndPixmap (); // Before first call to updatePreview
109 createPdfFrame ();
110 }
111
112 void DlgPdfFrame::createPdfFrame ()
113 {
114 // Create frame that shows what will be included, and what will be excluded, during the import
115 m_pdfFrame = new PdfFrame (*m_scenePreview,
116 *m_viewPreview);
117 }
118
119 void DlgPdfFrame::createTimer ()
120 {
121 m_timer = new QTimer;
122 m_timer->setSingleShot (true);
123 connect (m_timer, SIGNAL (timeout ()), this, SLOT (slotTimeout ()));
124 }
125
126 void DlgPdfFrame::finishPanel (QWidget *subPanel)
127 {
128 const int STRETCH_OFF = 0, STRETCH_ON = 1;
129
130 QVBoxLayout *panelLayout = new QVBoxLayout (this);
131
132 setMinimumWidth (MINIMUM_DIALOG_WIDTH);
133 setLayout (panelLayout);
134
135 panelLayout->addWidget (subPanel);
136 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_ON);
137
138 QWidget *panelButtons = new QWidget (this);
139 QHBoxLayout *buttonLayout = new QHBoxLayout (panelButtons);
140
141 QHBoxLayout *layoutRightSide = new QHBoxLayout;
142
143 QWidget *widgetRightSide = new QWidget;
144 widgetRightSide->setLayout (layoutRightSide);
145 buttonLayout->addWidget (widgetRightSide);
146
147 QSpacerItem *spacerExpanding = new QSpacerItem (40, 5, QSizePolicy::Expanding, QSizePolicy::Expanding);
148 layoutRightSide->addItem (spacerExpanding);
149
150 m_btnOk = new QPushButton (tr ("Ok"));
151 layoutRightSide->addWidget (m_btnOk, 0, Qt::AlignRight);
152 connect (m_btnOk, SIGNAL (released ()), this, SLOT (slotOk ()));
153
154 QSpacerItem *spacerFixed = new QSpacerItem (40, 5, QSizePolicy::Fixed, QSizePolicy::Fixed);
155 layoutRightSide->addItem (spacerFixed);
156
157 m_btnCancel = new QPushButton (tr ("Cancel"));
158 layoutRightSide->addWidget (m_btnCancel, 0, Qt::AlignRight);
159 connect (m_btnCancel, SIGNAL (released ()), this, SLOT (slotCancel ()));
160
161 panelLayout->addWidget (panelButtons, STRETCH_ON);
162 panelLayout->setStretch (panelLayout->count () - 1, STRETCH_OFF);
163 }
164
165 QImage DlgPdfFrame::image () const
166 {
167 // If the entire page was to be returned, then this method would simply return m_image. However, only the framed
168 // portion is to be returned
169 ENGAUGE_ASSERT (m_pdfFrame != 0);
170 QRectF rectFramePixels = m_pdfFrame->frameRect ();
171
172 return m_image.copy (rectFramePixels.toRect ());
173 }
174
175 void DlgPdfFrame::initializeFrameGeometryAndPixmap ()
176 {
177 m_image = loadImage (FIRST_PAGE_1_BASED);
178 QGraphicsPixmapItem *pixmap = new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
179 m_scenePreview->addItem (pixmap);
180
181 // Force resize so image fills preview area. We do this only once initially for speed
182 m_viewPreview->setSceneRect (pixmap->boundingRect ());
183 }
184
185 QImage DlgPdfFrame::loadImage (int page1Based) const
186 {
187 QImage image;
188
189 int page0Based = page1Based - 1;
190 Page *page = m_document.page (page0Based);
191 if (page != 0) {
192
193 image = page->renderToImage (m_resolution,
194 m_resolution,
195 X_TOP_LEFT,
196 Y_TOP_LEFT,
197 WIDTH,
198 HEIGHT);
199
200 delete page;
201 }
202
203 return image;
204 }
205
206 void DlgPdfFrame::saveGeometryToSettings()
207 {
208 // Store the settings for use by showEvent
209 QSettings settings;
210 settings.beginGroup (SETTINGS_GROUP_PDF);
211 settings.setValue (SETTINGS_PDF_POS, saveGeometry ());
212 settings.endGroup();
213 }
214
215 void DlgPdfFrame::showEvent (QShowEvent * /* event */)
216 {
217 QSettings settings;
218 settings.beginGroup (SETTINGS_GROUP_PDF);
219 if (settings.contains (SETTINGS_PDF_POS)) {
220
221 // Restore the settings that were stored by the last call to saveGeometryToSettings
222 restoreGeometry (settings.value (SETTINGS_PDF_POS).toByteArray ());
223 }
224 }
225
226 void DlgPdfFrame::slotCancel ()
227 {
228 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::slotCancel";
229
230 // Restore cursor in case updatePreview has not already completed and then restored it
231 QApplication::restoreOverrideCursor ();
232
233 setResult (QDialog::Rejected);
234 saveGeometryToSettings();
235 hide();
236 }
237
238 void DlgPdfFrame::slotOk ()
239 {
240 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::slotOk";
241
242 // Restore cursor in case updatePreview has not already completed and then restored it
243 QApplication::restoreOverrideCursor ();
244
245 setResult (QDialog::Accepted);
246 saveGeometryToSettings();
247 hide();
248 }
249
250 void DlgPdfFrame::slotPage (int page)
251 {
252 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::slotPage"
253 << " page=" << page
254 << " stepBy=" << m_spinPage->singleStep ();
255
256 // Show wait cursor until slow calculations are over
257 QApplication::setOverrideCursor (Qt::WaitCursor);
258
259 m_timer->start (SMALLEST_DELAY_MS);
260 }
261
262 void DlgPdfFrame::slotTimeout ()
263 {
264 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::slotTimeout";
265
266 updatePreview ();
267 }
268
269 void DlgPdfFrame::updatePreview ()
270 {
271 LOG4CPP_INFO_S ((*mainCat)) << "DlgPdfFrame::updatePreview";
272
273 if (m_pixmap != 0) {
274 m_scenePreview->removeItem (m_pixmap);
275 }
276
277 m_image = loadImage (m_spinPage->value ());
278 m_pixmap = new QGraphicsPixmapItem (QPixmap::fromImage (m_image));
279 m_scenePreview->addItem (m_pixmap);
280
281 // Calculations for preview updating are now over
282 QApplication::restoreOverrideCursor ();
283 }
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef DLG_PDF_FRAME_H
7 #define DLG_PDF_FRAME_H
8
9 #include <QDialog>
10 #include <QImage>
11 #include <QObject>
12
13 class PdfFrame;
14 namespace Poppler {
15 class Document;
16 }
17 class QGraphicsPixmapItem;
18 class QGridLayout;
19 class QGraphicsScene;
20 class QRectF;
21 class QSpinBox;
22 class QString;
23 class QTimer;
24 class ViewPreview;
25
26 /// Dialog for selecting a page and frame on that page when importing an image from a pdf file
27 class DlgPdfFrame : public QDialog
28 {
29 Q_OBJECT;
30
31 public:
32 /// Single constructor.
33 DlgPdfFrame(const Poppler::Document &document,
34 int resolution);
35 virtual ~DlgPdfFrame();
36
37 /// Image that was selected. Value is null if loading failed
38 QImage image () const;
39
40 /// Do preparation before dialog is displayed.
41 virtual void showEvent (QShowEvent *event);
42
43 private slots:
44
45 /// Hide dialog.
46 void slotCancel();
47
48 /// Save changes entered in dialog.
49 void slotOk ();
50
51 /// Page number has changed
52 void slotPage (int);
53
54 /// Slow processing of pdf is performed asynchronously using a timer so event handlers are not slowed down
55 void slotTimeout ();
56
57 private:
58 DlgPdfFrame();
59
60 void createPageSpinner (QGridLayout *layout,
61 int &row);
62 void createPdfFrame ();
63 void createPreview (QGridLayout *layout,
64 int &row);
65 void createTimer ();
66 void finishPanel (QWidget *subPanel);
67 void initializeFrameGeometryAndPixmap ();
68 QImage loadImage (int page1Based) const;
69
70 /// Dialog layout constant that guarantees every widget has sufficient room
71 static int MINIMUM_DIALOG_WIDTH;
72
73 /// Dialog layout constant that guarantees preview has sufficent room
74 static int MINIMUM_PREVIEW_HEIGHT;
75
76 void saveGeometryToSettings ();
77 void updatePreview ();
78
79 QSpinBox *m_spinPage;
80 QPushButton *m_btnCancel;
81 QPushButton *m_btnOk;
82
83 QTimer *m_timer;
84 const Poppler::Document &m_document;
85 int m_resolution;
86 QImage m_image; // Needed so it can be passed to external code when this dialog has finished successfully
87 QGraphicsPixmapItem *m_pixmap; // Needed so old image can be removed just before new one gets added
88
89 QGraphicsScene *m_scenePreview;
90 ViewPreview *m_viewPreview;
91
92 PdfFrame *m_pdfFrame;
93 };
94
95 #endif // DLG_PDF_FRAME_H
5252 /// Process slotOk.
5353 virtual void handleOk () = 0;
5454
55 /// Load settings from Document.
56 virtual void load (CmdMediator &cmdMediator) = 0;
57
5558 /// Dialog layout constant that guarantees every widget has sufficient room
5659 static int MINIMUM_DIALOG_WIDTH;
5760
5861 /// Dialog layout constant that guarantees preview has sufficent room
5962 static int MINIMUM_PREVIEW_HEIGHT;
60
61 /// Load settings from Document.
62 virtual void load (CmdMediator &cmdMediator) = 0;
6363
6464 /// Get method for MainWindow.
6565 MainWindow &mainWindow ();
8080 void setDisableOkAtStartup(bool disableOkAtStartup);
8181
8282 private slots:
83 /// Do preparation before dialog is displayed.
84 virtual void showEvent (QShowEvent *event);
8583
8684 /// Hide dialog.
8785 void slotCancel();
9492
9593 void saveGeometryToSettings ();
9694
95 /// Do preparation before dialog is displayed.
96 virtual void showEvent (QShowEvent *event);
97
9798 MainWindow &m_mainWindow;
9899 CmdMediator *m_cmdMediator; // Cannot be const since Document gets a command pushed if dialog is ok'ed
99100 QPushButton *m_btnCancel;
1919 #include <QPushButton>
2020 #include <QSettings>
2121 #include <QSpacerItem>
22 #include <QTableView>
2223 #include "QtToString.h"
2324 #include "Settings.h"
2425 #include "SettingsForGraph.h"
26
27 const int FIRST_COLUMN = 0;
2528
2629 DlgSettingsCurveAddRemove::DlgSettingsCurveAddRemove(MainWindow &mainWindow) :
2730 DlgSettingsAbstractBase (tr ("Curve Add/Remove"),
8386 m_curveNameList = new CurveNameList;
8487
8588 // There is no Qt::ItemIsEditable flag for QListView, so instead we set that flag for the QListViewItems
89 #ifdef DLG_SETTINGS_DEBUG
90 m_listCurves = new QTableView;
91 #else
8692 m_listCurves = new QListView;
93 #endif
94
8795 m_listCurves->setWhatsThis (tr ("List of the curves belonging to this document.\n\n"
8896 "Click on a curve name to edit it. Each curve name must be unique.\n\n"
8997 "Reorder curves by dragging them around."));
9098 m_listCurves->setMinimumHeight (200);
91 m_listCurves->setSelectionMode (QAbstractItemView::ExtendedSelection);
99 m_listCurves->setSelectionMode (QAbstractItemView::SingleSelection);
92100 m_listCurves->setDefaultDropAction (Qt::MoveAction);
93 m_listCurves->setDragDropOverwriteMode (true);
101 m_listCurves->setDragDropOverwriteMode (false);
94102 m_listCurves->setDragEnabled (true);
95103 m_listCurves->setDropIndicatorShown (true);
96104 m_listCurves->setDragDropMode (QAbstractItemView::InternalMove);
105 #ifndef DLG_SETTINGS_DEBUG
97106 m_listCurves->setViewMode (QListView::ListMode);
98107 m_listCurves->setMovement (QListView::Snap);
108 #endif
99109 m_listCurves->setModel (m_curveNameList);
100110 layout->addWidget (m_listCurves, row++, 1, 1, 2);
101111 connect (m_curveNameList, SIGNAL (dataChanged (const QModelIndex &, const QModelIndex &, const QVector<int> &)),
112122 m_btnSaveDefault->setWhatsThis (tr ("Save the curve names for use as defaults for future graph curves."));
113123 connect (m_btnSaveDefault, SIGNAL (released ()), this, SLOT (slotSaveDefault ()));
114124 layout->addWidget (m_btnSaveDefault, 0, Qt::AlignLeft);
125
126 m_btnResetDefault = new QPushButton (tr ("Reset Default"));
127 m_btnResetDefault->setWhatsThis (tr ("Reset the defaults for future graph curves to the original settings."));
128 connect (m_btnResetDefault, SIGNAL (released ()), this, SLOT (slotResetDefault()));
129 layout->addWidget (m_btnResetDefault, 0, Qt::AlignRight);
115130
116131 QSpacerItem *spacer = new QSpacerItem (40, 2);
117132 layout->addItem (spacer);
213228 cmdMediator.curvesGraphsNumPoints (curveName));
214229 }
215230
231 selectCurveName (curveNames.first());
232
216233 enableOk (false); // Disable Ok button since there not yet any changes
217234 }
218235
219 QString DlgSettingsCurveAddRemove::nextCurveName () const
220 {
221 const QString DASH_ONE ("-1"); // Nice value to start a new range at a lower level than the current level
222
223 ENGAUGE_CHECK_PTR (m_listCurves);
224
236 int DlgSettingsCurveAddRemove::newIndexFromSelection () const
237 {
225238 int numSelectedItems = m_listCurves->selectionModel ()->selectedIndexes ().count ();
226239 int numItems = m_listCurves->model ()->rowCount ();
227240
228241 // Determine index where new entry will be inserted
229 int currentIndex = -1;
242 int newIndex = -1;
230243 if ((numSelectedItems == 0) &&
231244 (numItems > 0)) {
232245
233246 // Append after list which has at least one entry
234 currentIndex = numItems;
247 newIndex = numItems;
235248
236249 } else if (numSelectedItems == 1) {
237250
238 // Insert before the selected index
239 currentIndex = m_listCurves->selectionModel ()->selectedIndexes ().at (0).row ();
240
241 }
251 // Insert after the selected index
252 newIndex = 1 + m_listCurves->selectionModel ()->selectedIndexes ().at (0).row ();
253
254 }
255
256 return newIndex;
257 }
258
259 QString DlgSettingsCurveAddRemove::nextCurveName () const
260 {
261 const QString DASH_ONE ("-1"); // Nice value to start a new range at a lower level than the current level
262
263 ENGAUGE_CHECK_PTR (m_listCurves);
264
265 int newIndex = newIndexFromSelection ();
266 int numItems = m_listCurves->model ()->rowCount ();
242267
243268 // Curves names of existing before/after curves
244269 QString curveNameBefore, curveNameAfter;
245 if (currentIndex > 0) {
246
247 QModelIndex index = m_curveNameList->index (currentIndex - 1, 0);
270 if (newIndex > 0) {
271
272 QModelIndex index = m_curveNameList->index (newIndex - 1, 0);
248273 curveNameBefore = m_curveNameList->data (index).toString ();
249274
250275 }
251276
252 if ((0 <= currentIndex) && (currentIndex < numItems)) {
253
254 QModelIndex index = m_curveNameList->index (currentIndex, 0);
277 if ((0 <= newIndex) && (newIndex < numItems)) {
278
279 QModelIndex index = m_curveNameList->index (newIndex, 0);
255280 curveNameAfter = m_curveNameList->data (index).toString ();
256281
257282 }
345370 {
346371 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsCurveAddRemove::removeSelectedCurves";
347372
373 ENGAUGE_ASSERT (m_listCurves->selectionModel ()->selectedIndexes ().count () > 0); // Also guarantees number of indexes > 0
374
375 // Identify the first index after the last selected index
376 QString firstCurveAfter; // Empty case means there was no index afer the last selected index
377 for (int row = m_listCurves->model()->rowCount() - 1; row >= 0; row--) {
378
379 QModelIndex indexCurrent = m_listCurves->model()->index(row, FIRST_COLUMN);
380 if (indexCurrent == m_listCurves->selectionModel()->selectedIndexes().last()) {
381
382 // This is the last selected index, which will be removed below. Exit immediately with firstCurveAfter set
383 break;
384 }
385
386 firstCurveAfter = indexCurrent.data().toString();
387 }
388
389 // Delete the selected indexes from last to first
348390 for (int i = m_listCurves->selectionModel ()->selectedIndexes ().count () - 1; i >= 0; i--) {
349391
350392 int row = m_listCurves->selectionModel ()->selectedIndexes ().at (i).row ();
351393
352394 m_curveNameList->removeRow (row);
395 }
396
397 if (firstCurveAfter.isEmpty ()) {
398
399 // Select the last remaining curve. These steps seem more complicated than necessary
400 int numItems = m_listCurves->model()->rowCount();
401 QModelIndex indexLast = m_listCurves->model()->index (numItems - 1, FIRST_COLUMN);
402 firstCurveAfter = m_listCurves->model()->data (indexLast).toString();
403
404 }
405
406
407 // Select an item
408 selectCurveName(firstCurveAfter);
409 }
410
411 void DlgSettingsCurveAddRemove::selectCurveName (const QString &curveWanted)
412 {
413 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsCurveAddRemove::selectCurveName"
414 << " curve=" << curveWanted.toLatin1().data();
415
416 for (int row = 0; m_listCurves->model()->rowCount(); row++) {
417
418 QModelIndex index = m_listCurves->model()->index (row, FIRST_COLUMN);
419 QString curveGot = index.data ().toString ();
420
421 if (curveWanted == curveGot) {
422
423 // Found the curve we want to select
424 m_listCurves->setCurrentIndex (index);
425 break;
426
427 }
353428 }
354429 }
355430
360435 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsCurveAddRemove::slotDataChanged"
361436 << " topLeft=(" << topLeft.row () << "," << topLeft.column () << ")"
362437 << " bottomRight=(" << bottomRight.row () << "," << bottomRight.column () << ")"
363 << " roles=" << rolesAsString (roles).toLatin1 ().data ();
438 << " roles=" << rolesAsString (roles).toLatin1 ().data ()
439 << " defaultDragOption=" << (m_listCurves->defaultDropAction() == Qt::MoveAction ? "MoveAction" : "CopyAction");
364440
365441 updateControls ();
366442 }
374450
375451 QString curveNameSuggestion = nextCurveName ();
376452
377 appendCurveName (curveNameSuggestion,
453 int row = newIndexFromSelection();
454
455 insertCurveName (row,
456 curveNameSuggestion,
378457 NO_ORIGINAL_CURVE_NAME,
379458 NO_POINTS);
459
460 selectCurveName (curveNameSuggestion);
380461
381462 updateControls();
382463 }
425506 updateControls();
426507 }
427508
509 void DlgSettingsCurveAddRemove::slotResetDefault()
510 {
511 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsCurveAddRemove::slotResetDefault";
512
513 const QString REMOVE_ALL_SETTINGS_IN_GROUP; // Empty string
514
515 QSettings settings (SETTINGS_ENGAUGE, SETTINGS_DIGITIZER);
516
517 int indexOneBased = 1;
518
519 SettingsForGraph settingsForGraph;
520 QString groupName = settingsForGraph.groupNameForNthCurve (indexOneBased);
521 while (settings.childGroups().contains (groupName)) {
522
523 settings.beginGroup (groupName);
524 settings.remove (REMOVE_ALL_SETTINGS_IN_GROUP); // Remove this group by removing its settings
525 settings.endGroup ();
526
527 ++indexOneBased;
528 groupName = settingsForGraph.groupNameForNthCurve (indexOneBased);
529 }
530 }
531
428532 void DlgSettingsCurveAddRemove::slotSaveDefault()
429533 {
430534 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsCurveAddRemove::slotSaveDefault";
1414 class QGridLayout;
1515 class QListView;
1616 class QPushButton;
17 class QTableView;
1718
1819 /// Dialog for editing curve names settings.
20 ///
21 /// The debug macro DLG_SETTINGS_DEBUG can be temporarily set to see the hidden columns
1922 class DlgSettingsCurveAddRemove : public DlgSettingsAbstractBase
2023 {
2124 Q_OBJECT;
3538 const QVector<int> &roles);
3639 void slotNew ();
3740 void slotRemove ();
41 void slotResetDefault();
3842 void slotSaveDefault();
3943 void slotSelectionChanged (QItemSelection, QItemSelection);
4044
5357 const QString &curveNameNew,
5458 const QString &curveNameOriginal,
5559 int numPoints);
60 int newIndexFromSelection () const;
5661 QString nextCurveName () const; // Pick good curve name to go at currentRow()
5762 int numberAtEnd (const QString &str) const;
5863 void removeSelectedCurves();
64 void selectCurveName (const QString &curveWanted);
5965 void updateControls ();
6066
6167 CurveNameList *m_curveNameList; // Model for m_listCurves
68
69 #ifdef DLG_SETTINGS_DEBUG
70 QTableView *m_listCurves; // While debugging, the 3 columns in each row are visible to make the operations more clear
71 #else
6272 QListView *m_listCurves; // Use QListView instead of QListWidget so validators can be used
73 #endif
6374
6475 QPushButton *m_btnAdd;
6576 QPushButton *m_btnRemove;
6677 QPushButton *m_btnRename;
6778
79 QPushButton *m_btnResetDefault;
6880 QPushButton *m_btnSaveDefault;
6981 };
7082
108108 connect (m_cmbLocale, SIGNAL (currentIndexChanged (int)), this, SLOT (slotLocale (int)));
109109 layout->addWidget (m_cmbLocale, row++, 2);
110110
111 #ifdef ENGAUGE_PDF
112 QLabel *labelPdfResolution = new QLabel (tr ("Import PDF resolution (dots per inch):"));
113 layout->addWidget (labelPdfResolution, row, 1);
114
115 m_cmbPdfResolution = new QComboBox;
116 m_cmbPdfResolution->setWhatsThis (tr ("Import PDF Resolution\n\n"
117 "Imported Portable Document Format (PDF) files will be converted to this pixel resolution "
118 "in dots per inch (DPI), where each pixel is one dot. A higher value increases the picture resolution "
119 "and may also improve numeric digitizing accuracy. However, a very high value can make the image so "
120 "large that Engauge will slow down."));
121 m_cmbPdfResolution->addItem ("75", 75);
122 m_cmbPdfResolution->addItem ("100", 100);
123 m_cmbPdfResolution->addItem ("150", 150);
124 m_cmbPdfResolution->addItem ("200", 200);
125 m_cmbPdfResolution->addItem ("250", 250);
126 m_cmbPdfResolution->addItem ("300", 300);
127 connect (m_cmbPdfResolution, SIGNAL (currentTextChanged (QString)), this, SLOT (slotPdfResolution (QString)));
128 layout->addWidget (m_cmbPdfResolution, row++, 2);
129 #endif
130
111131 QLabel *labelRecent = new QLabel (tr ("Recent file list:"));
112132 layout->addWidget (labelRecent, row, 1);
113133
197217 index = m_cmbLocale->findText (locLabel);
198218 m_cmbLocale->setCurrentIndex(index);
199219 m_chkTitleBarFormat->setChecked (m_modelMainWindowAfter->mainTitleBarFormat() == MAIN_TITLE_BAR_FORMAT_PATH);
220 index = m_cmbPdfResolution->findData (m_modelMainWindowAfter->pdfResolution());
221 m_cmbPdfResolution->setCurrentIndex(index);
200222
201223 updateControls ();
202224 enableOk (false); // Disable Ok button since there not yet any changes
207229 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsMainWindow::slotLocale";
208230
209231 m_modelMainWindowAfter->setLocale (m_cmbLocale->itemData (index).toLocale());
232 updateControls();
233 }
234
235 void DlgSettingsMainWindow::slotPdfResolution(const QString)
236 {
237 LOG4CPP_INFO_S ((*mainCat)) << "DlgSettingsMainWIndow::slotPdfResolution";
238
239 m_modelMainWindowAfter->setPdfResolution(m_cmbPdfResolution->currentData().toInt());
210240 updateControls();
211241 }
212242
3737 private slots:
3838 void slotTitleBarFormat(bool);
3939 void slotLocale (int index);
40 void slotPdfResolution (const QString);
4041 void slotRecentFileClear ();
4142 void slotZoomControl (const QString);
4243 void slotZoomFactor (const QString);
5556 QComboBox *m_cmbLocale;
5657 QPushButton *m_btnRecentClear;
5758 QCheckBox *m_chkTitleBarFormat;
59 QComboBox *m_cmbPdfResolution;
5860
5961 MainWindowModel *m_modelMainWindowBefore;
6062 MainWindowModel *m_modelMainWindowAfter;
946946 m_coordSystemContext.setModelSegments (modelSegments);
947947 }
948948
949 void Document::setPixmap(const QImage &image)
950 {
951 LOG4CPP_INFO_S ((*mainCat)) << "Document::setPixmap";
952
953 m_pixmap = QPixmap::fromImage (image);
954 }
955
949956 void Document::setSelectedCurveName(const QString &selectedCurveName)
950957 {
951958 m_coordSystemContext.setSelectedCurveName (selectedCurveName);
282282 /// Set method for DocumentModelSegments.
283283 void setModelSegments(const DocumentModelSegments &modelSegments);
284284
285 /// Set method for the background pixmap
286 void setPixmap (const QImage &image);
287
285288 /// Save curve name that is selected for the current coordinate system, for the next time the coordinate system reappears
286289 void setSelectedCurveName (const QString &selectedCurveName);
287290
193193 {
194194 // LOG4CPP_INFO_S ((*mainCat)) << "ExportFileFunctions::linearlyInterpolate";
195195
196 // If point is within the range of the function points then interpolation will be used, otherwise
197 // extrapolation will be used
196198 double yRadius = 0;
197199 QPointF posGraphBefore; // Not set until ip=1
198200 bool foundIt = false;
199 for (int ip = 0; ip < points.count(); ip++) {
201 for (int ip = 0; !foundIt && (ip < points.count()); ip++) {
200202
201203 const Point &point = points.at (ip);
202204 QPointF posGraph;
203205 transformation.transformScreenToRawGraph (point.posScreen(),
204 posGraph);
205
206 if (xThetaValue <= posGraph.x()) {
206 posGraph);
207
208 // Cases where we have found it at this point in the code
209 // (1) interpolation case where (xBefore < xThetaValue < xAfter)
210 // (2) extrapolation case where (xThetaValue < xBefore < xAfter and ip=0) for which we delay finding it until ip=1 so we have
211 // two points for extrapolating. This case is why we have the subtle test for ip>0 in the next line
212 if (xThetaValue <= posGraph.x() && (ip > 0)) {
207213
208214 foundIt = true;
209 if (ip == 0) {
210
211 // Use first point
212 yRadius = posGraph.y();
213
214 } else {
215
216 // Between posGraphBefore and posGraph. Note that if posGraph.x()=posGraphBefore.x() then
217 // previous iteration of loop would have been used for interpolation, and then the loop was exited
218 double s = (xThetaValue - posGraphBefore.x()) / (posGraph.x() - posGraphBefore.x());
219 yRadius = (1.0 -s) * posGraphBefore.y() + s * posGraph.y();
220 }
215
216 // Case 1 comments: xThetaValue is between posGraphBefore and posGraph. Note that if posGraph.x()=posGraphBefore.x() then
217 // previous iteration of loop would have been used for interpolation, and then the loop was exited. Range of s is 0<s<1
218 // Case 2 comments: Range of s is s<0
219 double s = (xThetaValue - posGraphBefore.x()) / (posGraph.x() - posGraphBefore.x());
220 yRadius = (1.0 -s) * posGraphBefore.y() + s * posGraph.y();
221221
222222 break;
223223 }
227227
228228 if (!foundIt) {
229229
230 // Use last point
231 yRadius = posGraphBefore.y();
232
230 if (points.count() > 1) {
231
232 // Extrapolation will be used since point is out of the range of the function points. Specifically, it is greater than the
233 // last x value in the function. Range of s is 1<s
234 int N = points.count();
235 const Point &pointLast = points.at (N - 1);
236 const Point &pointBefore = points.at (N - 2);
237 QPointF posGraphLast;
238 transformation.transformScreenToRawGraph (pointLast.posScreen(),
239 posGraphLast);
240 transformation.transformScreenToRawGraph (pointBefore.posScreen(),
241 posGraphBefore);
242 double s = (xThetaValue - posGraphBefore.x()) / (posGraphLast.x() - posGraphBefore.x());
243 yRadius = (1.0 - s) * posGraphBefore.y() + s * posGraphLast.y();
244
245 } else if (points.count() == 1) {
246
247 // Just use the single point
248 yRadius = posGraphBefore.y();
249
250 } else {
251
252 ENGAUGE_ASSERT (false);
253
254 }
233255 }
234256
235257 return yRadius;
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "ExportImageForRegression.h"
7 #include <QFile>
8 #include <QMessageBox>
9 #include <QObject>
10 #include <QPixmap>
11 #include <QString>
12 #include <QTextStream>
13
14 ExportImageForRegression::ExportImageForRegression (const QPixmap &pixmap) :
15 m_width (pixmap.width ()),
16 m_height (pixmap.height ())
17 {
18 }
19
20 void ExportImageForRegression::fileExport (const QString &filename) const
21 {
22 QFile file (filename);
23 if (!file.open (QIODevice::WriteOnly)) {
24 QMessageBox::critical (0,
25 QObject::tr ("Export Image"),
26 QObject::tr ("Cannot export file"));
27 } else {
28
29 QTextStream str (&file);
30
31 str << m_width << "x" << m_height << "\n";
32
33 file.close ();
34 }
35 }
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef EXPORT_IMAGE_FOR_REGRESSION_H
7 #define EXPORT_IMAGE_FOR_REGRESSION_H
8
9 class QPixmap;
10 class QString;
11
12 /// Class for exporting during regression, when the Transformation has not yet been defined. This class just
13 /// exports the image size
14 class ExportImageForRegression
15 {
16 public:
17 /// Single constructor
18 ExportImageForRegression(const QPixmap &pixmap);
19
20 /// Export to the specified file. This is called when the Transformation has not been defined
21 void fileExport (const QString &filename) const;
22
23 private:
24 ExportImageForRegression();
25
26 const int m_width;
27 const int m_height;
28 };
29
30 #endif // EXPORT_IMAGE_FOR_REGRESSION_H
99 #include "FileCmdSerialize.h"
1010 #include "Logger.h"
1111 #include "MainWindow.h"
12 #include <QDir>
1213 #include <QFile>
14 #include <QMessageBox>
1315 #include <QXmlStreamReader>
1416 #include "Xml.h"
1517
1618 FileCmdScript::FileCmdScript(const QString &fileCmdScriptFile)
1719 {
20 LOG4CPP_INFO_S ((*mainCat)) << "FileCmdScript::FileCmdScript"
21 << " curDir=" << QDir::currentPath().toLatin1().data();
22
1823 // Read commands into stack. The file is known to exist since it was checked in parseCmdLine
1924 QFile file (fileCmdScriptFile);
2025
2126 QXmlStreamReader reader (&file);
22 file.open(QIODevice::ReadOnly | QIODevice::Text);
27 if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
28
29 QString msg = QString ("%1 %2 %3 %4")
30 .arg (QObject::tr ("Cannot read script file"))
31 .arg (fileCmdScriptFile)
32 .arg (QObject::tr ("from directory"))
33 .arg (QDir::currentPath());
34 QMessageBox::critical (0,
35 "Script File",
36 msg);
37 exit (-1);
38 }
2339
2440 // Load commands
2541 FileCmdFactory factory;
2121 #include "QtToString.h"
2222 #include "Spline.h"
2323 #include "Transformation.h"
24 #include "ZValues.h"
2425
2526 using namespace std;
2627
2930 GraphicsLinesForCurve::GraphicsLinesForCurve(const QString &curveName) :
3031 m_curveName (curveName)
3132 {
33 setZValue (Z_VALUE_CURVE);
3234 setData (DATA_KEY_GRAPHICS_ITEM_TYPE,
3335 GRAPHICS_ITEM_TYPE_LINE);
3436 setData (DATA_KEY_IDENTIFIER,
1919 #include <QPen>
2020 #include <QTextStream>
2121 #include "QtToString.h"
22 #include "ZValues.h"
2223
2324 const double ZERO_WIDTH = 0.0;
24 const double Z_VALUE = 100.0; // Put on top of Segments in DlgSettingsSegments
2525
2626 GraphicsPoint::GraphicsPoint(QGraphicsScene &scene,
2727 const QString &identifier,
111111 2 * radiusSigned + 1));
112112 m_scene.addItem (m_graphicsItemEllipse);
113113
114 m_graphicsItemEllipse->setZValue (Z_VALUE);
114 m_graphicsItemEllipse->setZValue (Z_VALUE_POINT);
115115 m_graphicsItemEllipse->setData (DATA_KEY_IDENTIFIER, m_identifier);
116116 m_graphicsItemEllipse->setData (DATA_KEY_GRAPHICS_ITEM_TYPE, GRAPHICS_ITEM_TYPE_POINT);
117117 m_graphicsItemEllipse->setPos (m_posScreen.x (),
146146 polygon);
147147 m_scene.addItem (m_graphicsItemPolygon);
148148
149 m_graphicsItemPolygon->setZValue (Z_VALUE);
149 m_graphicsItemPolygon->setZValue (Z_VALUE_POINT);
150150 m_graphicsItemPolygon->setData (DATA_KEY_IDENTIFIER, m_identifier);
151151 m_graphicsItemPolygon->setData (DATA_KEY_GRAPHICS_ITEM_TYPE, GRAPHICS_ITEM_TYPE_POINT);
152152 m_graphicsItemPolygon->setPos (m_posScreen.x (),
6666 #endif
6767 paths << "/documentation/engauge.qhc";
6868 paths << "/../share/doc/engauge-digitizer/engauge.qhc";
69 paths << "/usr/share/engauge-digitizer-doc/engauge.qhc";
6970
7071 QStringList::iterator itr;
7172 for (itr = paths.begin(); itr != paths.end(); itr++) {
+0
-32
src/Jpeg2000/Jpeg2000.pro less more
0 # Requirements:
1 # 1) LOG4CPP with environment variable LOG4CPP_INCLUDE pointing to that packages include directory. Example:
2 # LOG4CPP=$HOME/log4cpp_null/include
3 # 2) openjpeg with environment variable JPEG_INCLUDE pointing to that packages include directory. Example:
4 # JPEG_INCLUDE=$HOME/openjpeg-version.2.1/usr/local/include/openjpeg-2.1
5
6 _JPEG_INCLUDE = $$(JPEG_INCLUDE)
7 _LOG4CPP_HOME = $$(LOG4CPP_HOME)
8 isEmpty(_JPEG_INCLUDE) {
9 error("JPEG_INCLUDE and LOG4CPP_HOME environment variables must be defined")
10 } else {
11 isEmpty(_LOG4CPP_HOME) {
12 error("JPEG_INCLUDE and LOG4CPP_HOME environment variables must be defined")
13 }
14 }
15
16 TEMPLATE = lib
17
18 SOURCES += Jpeg2000Callbacks.cpp \
19 Jpeg2000Color.cpp \
20 Jpeg2000Convert.cpp \
21 Jpeg2000.cpp
22
23 HEADERS += Jpeg2000Callbacks.h \
24 Jpeg2000Color.h \
25 Jpeg2000Convert.h \
26 Jpeg2000FormatDefs.h \
27 Jpeg2000.h
28
29 INCLUDEPATH += $$(JPEG_INCLUDE) \
30 $$(LOG4CPP_HOME)/include \
31 ../Logger
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "DlgPdfFrame.h"
7 #include "Pdf.h"
8 #include "poppler-qt5.h"
9 #include <QImage>
10 #include <QString>
11
12 using namespace Poppler;
13
14 const int X_TOP_LEFT = 0, Y_TOP_LEFT = 0;
15 const int WIDTH = -1, HEIGHT = -1; // Negative values give full page
16 const int FIRST_PAGE_1_BASED = 1;
17
18 Pdf::Pdf ()
19 {
20 }
21
22 PdfReturn Pdf::load (const QString &fileName,
23 QImage &image,
24 int resolution,
25 bool isErrorReportRegressionTest) const
26 {
27 if (isErrorReportRegressionTest) {
28 return loadForTesting (fileName,
29 image,
30 resolution);
31 } else {
32 return loadNotTesting (fileName,
33 image,
34 resolution);
35 }
36 }
37
38 PdfReturn Pdf::loadForTesting (const QString &fileName,
39 QImage &image,
40 int resolution) const
41 {
42 PdfReturn pdfReturn = PDF_RETURN_FAILED;
43
44 // Simple check to prevent complaints from poppler code
45 if (fileName.right (4).toLower () == ".pdf") {
46
47 // Try to read the file
48 Document *document = Document::load (fileName);
49
50 if (document != 0) {
51 if (!document->isLocked ()) {
52
53 Page *page = document->page (FIRST_PAGE_1_BASED - 1);
54 if (page != 0) {
55
56 image = page->renderToImage (resolution,
57 resolution,
58 X_TOP_LEFT,
59 Y_TOP_LEFT,
60 WIDTH,
61 HEIGHT);
62
63 if (!image.isNull()) {
64 pdfReturn = PDF_RETURN_SUCCESS;
65 }
66
67 delete page;
68 }
69 }
70
71 delete document;
72 }
73 }
74
75 return pdfReturn;
76 }
77
78 PdfReturn Pdf::loadNotTesting (const QString &fileName,
79 QImage &image,
80 int resolution) const
81 {
82 PdfReturn pdfReturn = PDF_RETURN_FAILED;
83
84 // Simple check to prevent complaints from poppler code
85 if (fileName.right (4).toLower () == ".pdf") {
86
87 // Try to read the file
88 Document *document = Document::load (fileName);
89
90 if (document != 0) {
91 if (!document->isLocked ()) {
92
93 // Get page and extent
94 DlgPdfFrame dlg (*document,
95 resolution);
96 if (dlg.exec() == QDialog::Accepted) {
97
98 // Returned image is null if it could not be read
99 image = dlg.image ();
100
101 if (!image.isNull()) {
102 pdfReturn = PDF_RETURN_SUCCESS;
103 }
104
105 } else {
106 pdfReturn = PDF_RETURN_CANCELED;
107 }
108 }
109
110 delete document;
111 }
112 }
113
114 return pdfReturn;
115 }
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef PDF_H
7 #define PDF_H
8
9 class QImage;
10 class QString;
11
12 /// Return values from load operation
13 enum PdfReturn {
14 PDF_RETURN_CANCELED,
15 PDF_RETURN_FAILED,
16 PDF_RETURN_SUCCESS
17 };
18
19 /// Wrapper around the Poppler library. Engauge uses that library to read and import PDF files.
20 ///
21 /// This class is only compiled and linked in when ENGAUGE_PDF is defined, since it links to the optional poppler library.
22 class Pdf
23 {
24 public:
25 /// Single constructor
26 Pdf();
27
28 /// Try to load the specified file. Success is indicated in the function return value
29 PdfReturn load (const QString &fileName,
30 QImage &image,
31 int resolution,
32 bool isErrorReportRegressionTest) const;
33
34 private:
35
36 PdfReturn loadForTesting (const QString &fileName,
37 QImage &image,
38 int resolution) const; // No dialog is used during testing. Entire first page will be loaded
39 PdfReturn loadNotTesting (const QString &fileName,
40 QImage &image,
41 int resolution) const; // Dialog is used when not testing
42
43 };
44
45 #endif // PDF_H
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "Logger.h"
7 #include "PdfFrame.h"
8 #include "PdfFrameHandle.h"
9 #include <QGraphicsRectItem>
10 #include <QGraphicsScene>
11 #include <QRect>
12 #include "QtToString.h"
13 #include "ViewPreview.h"
14
15 const int Z_BOX = 50; // Under box and over background image
16 const int Z_HANDLE = 100; // Over box and background image
17
18 PdfFrame::PdfFrame (QGraphicsScene &scene,
19 ViewPreview &view) :
20 m_view (view)
21 {
22 createWidgets (scene);
23 }
24
25 void PdfFrame::createWidgets(QGraphicsScene &scene)
26 {
27 const double MARGIN_PERCENT = 5.0;
28 const int ZERO_WIDTH_IS_ALWAYS_VISIBLE = 0;
29
30 int marginHor = scene.width() * MARGIN_PERCENT / 100.0;
31 int marginVer = scene.height() * MARGIN_PERCENT / 100.0;
32
33 QRect box (scene.sceneRect().left() + marginHor,
34 scene.sceneRect().top() + marginVer,
35 scene.sceneRect().width() - 2 * marginHor,
36 scene.sceneRect().height() - 2 * marginVer);
37
38 m_handleTL = new PdfFrameHandle (scene, m_view, box.topLeft() , PDF_FRAME_LEFT | PDF_FRAME_TOP , *this, Z_HANDLE);
39 m_handleTR = new PdfFrameHandle (scene, m_view, box.topRight() , PDF_FRAME_RIGHT | PDF_FRAME_TOP , *this, Z_HANDLE);
40 m_handleBR = new PdfFrameHandle (scene, m_view, box.bottomRight(), PDF_FRAME_RIGHT | PDF_FRAME_BOTTOM , *this, Z_HANDLE);
41 m_handleBL = new PdfFrameHandle (scene, m_view, box.bottomLeft() , PDF_FRAME_LEFT | PDF_FRAME_BOTTOM , *this, Z_HANDLE);
42
43 m_box = new QGraphicsRectItem;
44 m_box->setZValue (Z_BOX);
45 m_box->setPen (QPen (QBrush (Qt::gray), ZERO_WIDTH_IS_ALWAYS_VISIBLE));
46 scene.addItem (m_box);
47
48 updateBox ();
49 }
50
51 void PdfFrame::disableEventsWhileMovingAutomatically ()
52 {
53 m_handleTL->setDisableEventsWhileMovingAutomatically (true);
54 m_handleTR->setDisableEventsWhileMovingAutomatically (true);
55 m_handleBR->setDisableEventsWhileMovingAutomatically (true);
56 m_handleBL->setDisableEventsWhileMovingAutomatically (true);
57 }
58
59 void PdfFrame::enableEventsWhileMovingAutomatically ()
60 {
61 m_handleTL->setDisableEventsWhileMovingAutomatically (false);
62 m_handleTR->setDisableEventsWhileMovingAutomatically (false);
63 m_handleBR->setDisableEventsWhileMovingAutomatically (false);
64 m_handleBL->setDisableEventsWhileMovingAutomatically (false);
65 }
66
67 QRectF PdfFrame::frameRect () const
68 {
69 // The x(), y(), pos(), rect() and boundingRect() will return coordinates assuming origin at the initial position of
70 // each handle. So to get the coordinates in the window reference frame it takes a two step process like
71 // QGraphicsRectItem::mapRectToScene (QGraphicsRectItem::rect())
72
73 QRectF rectTL = m_handleTL->mapRectToScene (m_handleTL->boundingRect());
74 QRectF rectBR = m_handleBR->mapRectToScene (m_handleBR->boundingRect());
75
76 QRectF rectUnited = rectTL.united (rectBR);
77
78 return rectUnited;
79 }
80
81 void PdfFrame::moveBL (const QPointF &newPos,
82 const QPointF &oldPos)
83 {
84 disableEventsWhileMovingAutomatically();
85
86 double deltaX = newPos.x() - oldPos.x();
87 double deltaY = newPos.y() - oldPos.y();
88
89 m_handleTL->moveBy (deltaX,
90 0);
91 m_handleBR->moveBy (0,
92 deltaY);
93
94 enableEventsWhileMovingAutomatically();
95
96 updateBox();
97 }
98
99 void PdfFrame::moveBR (const QPointF &newPos,
100 const QPointF &oldPos)
101 {
102 disableEventsWhileMovingAutomatically();
103
104 double deltaX = newPos.x() - oldPos.x();
105 double deltaY = newPos.y() - oldPos.y();
106
107 m_handleBL->moveBy (0,
108 deltaY);
109 m_handleTR->moveBy (deltaX,
110 0);
111
112 enableEventsWhileMovingAutomatically();
113
114 updateBox();
115 }
116
117 void PdfFrame::moveTL (const QPointF &newPos,
118 const QPointF &oldPos)
119 {
120 disableEventsWhileMovingAutomatically();
121
122 double deltaX = newPos.x() - oldPos.x();
123 double deltaY = newPos.y() - oldPos.y();
124
125 m_handleBL->moveBy (deltaX,
126 0);
127 m_handleTR->moveBy (0,
128 deltaY);
129
130 enableEventsWhileMovingAutomatically();
131
132 updateBox();
133 }
134
135 void PdfFrame::moveTR (const QPointF &newPos,
136 const QPointF &oldPos)
137 {
138 disableEventsWhileMovingAutomatically();
139
140 double deltaX = newPos.x() - oldPos.x();
141 double deltaY = newPos.y() - oldPos.y();
142
143 m_handleTL->moveBy (0,
144 deltaY);
145 m_handleBR->moveBy (deltaX,
146 0);
147
148 enableEventsWhileMovingAutomatically();
149
150 updateBox();
151 }
152
153 void PdfFrame::updateBox ()
154 {
155 QRectF rectUnited = frameRect ();
156
157 // Adjust by one pixel in both horizontal and vertical directions so bottom/right handles end on the box
158 rectUnited.setWidth (rectUnited.width () - 1);
159 rectUnited.setHeight (rectUnited.height () - 1);
160
161 m_box->setRect (rectUnited);
162 }
163
164 QSize PdfFrame::windowSize () const
165 {
166 return QSize (m_view.scene()->width(),
167 m_view.scene()->height());
168 }
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef PDF_FRAME_H
7 #define PDF_FRAME_H
8
9 #include <QRect>
10 #include <QSize>
11
12 class PdfFrameHandle;
13 class QGraphicsRectItem;
14 class QGraphicsScene;
15 class QPointF;
16 class ViewPreview;
17
18 /// This class shows a frame around the selected portion of the pdf import preview window
19 ///
20 /// Originally there were 4 handles at the corners and 4 handles at the middles of the sides, but dragging
21 /// the corner handles did not result in 1/2 the movement at the middle handles. The middle handles were deemed
22 /// not worth the effort
23 class PdfFrame
24 {
25 public:
26 /// Single constructor
27 PdfFrame(QGraphicsScene &scene,
28 ViewPreview &view);
29
30 /// Frame rectangle selected by user
31 QRectF frameRect () const;
32
33 /// Bottom left corner handle was moved
34 void moveBL (const QPointF &newPos,
35 const QPointF &oldPos);
36
37 /// Bottom right corner handle was moved
38 void moveBR (const QPointF &newPos,
39 const QPointF &oldPos);
40
41 /// Top left corner handle was moved
42 void moveTL (const QPointF &newPos,
43 const QPointF &oldPos);
44
45 /// Top right corner handle was moved
46 void moveTR (const QPointF &newPos,
47 const QPointF &oldPos);
48
49 static const int PDF_FRAME_BOTTOM = 1; ///< Bit flag when handle is aligned with bottom edge at reference point
50 static const int PDF_FRAME_LEFT = 2; ///< Bit flag when handle is aligned with left edge at reference point
51 static const int PDF_FRAME_RIGHT = 4; ///< Bit flag when handle is aligned with right edge at reference point
52 static const int PDF_FRAME_TOP = 8; ///< Bit flag when handle is aligned with top edge at reference point
53
54 /// Size of window in scene coordinates
55 QSize windowSize () const;
56
57 private:
58 PdfFrame();
59
60 void createWidgets (QGraphicsScene &scene);
61 void disableEventsWhileMovingAutomatically();
62 void enableEventsWhileMovingAutomatically();
63 QRectF rectFromTLAndBR () const;
64 void updateBox();
65
66 ViewPreview &m_view;
67
68 // Box
69 QGraphicsRectItem *m_box;
70
71 // Handles
72 PdfFrameHandle *m_handleTL;
73 PdfFrameHandle *m_handleTR;
74 PdfFrameHandle *m_handleBR;
75 PdfFrameHandle *m_handleBL;
76
77 };
78
79 #endif // PDF_FRAME_H
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "PdfFrame.h"
7 #include "PdfFrameHandle.h"
8 #include <QBrush>
9 #include <QGraphicsScene>
10 #include <QGraphicsView>
11 #include <QStyleOptionGraphicsItem>
12
13 const double HANDLE_SIZE_AS_FRACTION_OF_WINDOW_SIZE = 30;
14
15 PdfFrameHandle::PdfFrameHandle (QGraphicsScene &scene,
16 QGraphicsView &view,
17 const QPointF &pointReference,
18 int orientationFlags,
19 PdfFrame &pdfFrame,
20 int zValue) :
21 m_pdfFrame (pdfFrame),
22 m_orientationFlags (orientationFlags),
23 m_disableEventsWhileMovingAutomatically (false),
24 m_scene (scene),
25 m_view (view)
26 {
27 const double SUBTLE_OPACITY = 0.2;
28
29 // Advantages of using ItemIgnoresTransformations:
30 // 1) handles do not get bigger or smaller depending on the size of the image
31 // 2) handles never get ugly when zoomed in
32 // 3) handles never get too tiny when zoomed out
33 // Disadvantages of using ItemIgnoresTransformation:
34 // 1) Resizing the preview window with ItemIgnoresTransformations moves the handles out of position
35 // 2) More conversions back and forth between untransformed and transformed coordinates. This was the deal breaker since
36 // the transformations were undocumented and ultimately too difficult
37 // The solution is to have constant-size handles WITHOUT ItemIgnoresTransformations. This means resizing the window
38 // also involves resizing the handles, but everything else is pretty easy
39 //
40 // ItemIgnoresTransformations flag must agree with the QGraphicsRectItem used for the frame box by PdfFrame
41 setFlags (QGraphicsItem::ItemIsMovable |
42 QGraphicsItem::ItemIsSelectable |
43 QGraphicsItem::ItemSendsScenePositionChanges);
44
45 // Fill with nice color for better visibility. Note that the pen is disabled by overriding the paint method
46 setBrush (QBrush (Qt::blue));
47 setVisible (true);
48 setZValue (zValue);
49 setOpacity (SUBTLE_OPACITY);
50 setPos (pointReference); // Point position is handled in scene/view coordinates
51
52 // Add to scene
53 scene.addItem (this);
54
55 QSize handleSize = m_pdfFrame.windowSize() / HANDLE_SIZE_AS_FRACTION_OF_WINDOW_SIZE;
56
57 // Adjust positions of handles that are not at the top left so handles are laid out symmetrically
58 QPointF pointPos = pointReference;
59 if ((orientationFlags && PdfFrame::PDF_FRAME_LEFT) != 0) {
60 pointPos.setX (pointPos.x() - handleSize.width() / 2.0);
61 } else if ((orientationFlags && PdfFrame::PDF_FRAME_RIGHT) != 0) {
62 pointPos.setX (pointPos.x() + handleSize.width() / 2.0);
63 }
64 if ((orientationFlags && PdfFrame::PDF_FRAME_TOP) != 0) {
65 pointPos.setY (pointPos.y() - handleSize.height() / 2.0);
66 } else if ((orientationFlags && PdfFrame::PDF_FRAME_BOTTOM) != 0) {
67 pointPos.setY (pointPos.y() + handleSize.height() / 2.0);
68 }
69
70 // Start with geometry. Since point positions are handled in scene/view coordinates, we have to convert
71 // to local coordinates for the rectangle
72 QPointF topLeftLocal = mapFromScene (pointPos);
73
74 setRect (QRectF (topLeftLocal,
75 handleSize));
76 }
77
78 QVariant PdfFrameHandle::itemChange (GraphicsItemChange change,
79 const QVariant &value)
80 {
81 QVariant valueFiltered = value;
82
83 if (change == ItemPositionChange && scene()) {
84
85 QPointF sizeAsPointF (boundingRect().size().width(),
86 boundingRect().size().height());
87
88 // New position is in the value argument
89 QPointF newPos = valueFiltered.toPointF();
90 QPointF oldPos = pos ();
91
92 // This sequence is from http://www.qtcentre.org/threads/47248-How-to-efficiently-get-position-of-a-QGraphicsItem-in-view-coordinates
93 QRectF newRectItem (newPos,
94 QSize (boundingRect().size().width(),
95 boundingRect().size().height()));
96 QPolygonF newRectScene = mapToScene (newRectItem);
97 QPolygon newRectView = m_view.mapFromScene (newRectScene.boundingRect());
98
99 // Skip moving of this handle if it will go outside of the window
100 QRectF rectWindow = m_scene.sceneRect();
101 if (!rectWindow.contains (newRectView.boundingRect())) {
102
103 // Keep the item inside the scene rectangle
104 newPos.setX (qMin (rectWindow.right(), qMax (newPos.x(), rectWindow.left())));
105 newPos.setY (qMin (rectWindow.bottom(), qMax (newPos.y(), rectWindow.top())));
106
107 valueFiltered = (newPos);
108
109 }
110
111 // Skip moving of other handles, in response to the move of this handle, if event handling is (temporarily) off,
112 // to prevent an infinite loop
113 if (!m_disableEventsWhileMovingAutomatically) {
114
115 bool left = ((m_orientationFlags & PdfFrame::PDF_FRAME_LEFT ) != 0);
116 bool right = ((m_orientationFlags & PdfFrame::PDF_FRAME_RIGHT ) != 0);
117 bool top = ((m_orientationFlags & PdfFrame::PDF_FRAME_TOP ) != 0);
118 bool bottom = ((m_orientationFlags & PdfFrame::PDF_FRAME_BOTTOM) != 0);
119
120 if (left && top) {
121 m_pdfFrame.moveTL (newPos, oldPos);
122 } else if (right && top) {
123 m_pdfFrame.moveTR (newPos, oldPos);
124 } else if (right && bottom) {
125 m_pdfFrame.moveBR (newPos, oldPos);
126 } else if (left && bottom) {
127 m_pdfFrame.moveBL (newPos, oldPos);
128 }
129 }
130 }
131
132 return QGraphicsItem::itemChange(change, valueFiltered);
133 }
134
135 void PdfFrameHandle::paint (QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
136 {
137 // Temporarily remove the selected option
138 QStyleOptionGraphicsItem scrubbed (*option);
139 scrubbed.state &= ~QStyle::State_Selected;
140 QGraphicsRectItem::paint (painter, &scrubbed, widget);
141 }
142
143 void PdfFrameHandle::setDisableEventsWhileMovingAutomatically (bool disable)
144 {
145 m_disableEventsWhileMovingAutomatically = disable;
146 }
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef PDF_FRAME_HANDLE_H
7 #define PDF_FRAME_HANDLE_H
8
9 #include <QGraphicsRectItem>
10
11 class PdfFrame;
12 class QGraphicsScene;
13 class QGraphicsView;
14 class QPointF;
15 class QRectF;
16
17 /// This class acts as a single handle for the PdfFrame class
18 class PdfFrameHandle : public QGraphicsRectItem
19 {
20 public:
21 /// Single constructor
22 PdfFrameHandle(QGraphicsScene &scene,
23 QGraphicsView &view,
24 const QPointF &pointReference,
25 int orientationFlags,
26 PdfFrame &pdfFrame,
27 int zValue);
28
29 /// Intercept the drags and process them, which is the whole point of handles
30 virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
31
32 /// Override the paint method so the dashed-border-when-selected can be removed
33 virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
34
35 /// Temporarily disable event handling so code can move this object without triggering a cascade of events
36 void setDisableEventsWhileMovingAutomatically (bool disable);
37
38 private:
39 PdfFrameHandle();
40
41 PdfFrame &m_pdfFrame;
42 int m_orientationFlags; // From PdfFrame constants
43
44 bool m_disableEventsWhileMovingAutomatically;
45 QGraphicsScene &m_scene;
46 QGraphicsView &m_view;
47 };
48
49 #endif // PDF_FRAME_HANDLE_H
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "Pdf.h"
7
8 int DEFAULT_IMPORT_PDF_RESOLUTION = 150; // Balance between higher resolution and larger image size
0 /******************************************************************************************************
1 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef PDF_RESOLUTION_H
7 #define PDF_RESOLUTION_H
8
9 // This file is used even when ENGAUGE_PDF is not defined
10 extern int DEFAULT_IMPORT_PDF_RESOLUTION;
11
12 #endif // PDF_RESOLUTION_H
1111 #include <QPen>
1212 #include "Segment.h"
1313 #include "SegmentLine.h"
14
15 const double ZVALUE_SEGMENT = 50; // Less than z value for GraphicsPoint
14 #include "ZValues.h"
1615
1716 SegmentLine::SegmentLine(QGraphicsScene &scene,
1817 const DocumentModelSegments &modelSegments,
2827 // Make this transparent now, but always visible so hover events work
2928 scene.addItem (this);
3029 setPen (QPen (Qt::transparent));
31 setZValue (ZVALUE_SEGMENT);
30 setZValue (Z_VALUE_CURVE);
3231 setVisible (true);
3332 setAcceptHoverEvents (true);
3433 setHover (false); // Initially the cursor is not hovering over this object. Later a hover event will change this state
5555 const QString SETTINGS_GENERAL_EXTRA_PRECISION ("extraPrecision");
5656 const QString SETTINGS_GROUP_GENERAL ("GeneralEngauge"); // "General" group name is reserved for ungrouped settings
5757
58 // Import group
59 const QString SETTINGS_IMPORT_PDF_RESOLUTION ("PdfResolution");
60 const QString SETTINGS_GROUP_IMPORT ("Import");
61
5862 // Export group
5963 const QString SETTINGS_EXPORT_CURVE_NAMES_NOT_EXPORTED ("curveNamesNotExported");
6064 const QString SETTINGS_EXPORT_DELIMITER ("delimiter");
6973 const QString SETTINGS_EXPORT_POINTS_SELECTION_RELATIONS ("pointsSelectionRelations");
7074 const QString SETTINGS_EXPORT_X_LABEL ("xLabel");
7175 const QString SETTINGS_GROUP_EXPORT ("Export");
76
77 // Pdf group
78 const QString SETTINGS_PDF_POS ("pos");
79 const QString SETTINGS_GROUP_PDF ("Pdf");
4444 extern const QString SETTINGS_GROUP_ENVIRONMENT;
4545 extern const QString SETTINGS_GROUP_EXPORT;
4646 extern const QString SETTINGS_GROUP_GENERAL;
47 extern const QString SETTINGS_GROUP_IMPORT;
4748 extern const QString SETTINGS_GROUP_MAIN_WINDOW;
49 extern const QString SETTINGS_GROUP_PDF;
4850 extern const QString SETTINGS_HELP_POS;
4951 extern const QString SETTINGS_HELP_SIZE;
52 extern const QString SETTINGS_IMPORT_PDF_RESOLUTION;
5053 extern const QString SETTINGS_LOCALE_COUNTRY;
5154 extern const QString SETTINGS_LOCALE_LANGUAGE;
5255 extern const QString SETTINGS_MAIN_TITLE_BAR_FORMAT;
56 extern const QString SETTINGS_PDF_POS;
5357 extern const QString SETTINGS_POS;
5458 extern const QString SETTINGS_RECENT_FILE_LIST;
5559 extern const QString SETTINGS_SIZE;
120120 double tLow = m_t[0];
121121 double tHigh = m_t[m_xy.size() - 1];
122122
123 // This method implicitly assumes that the x values are monotonically increasing
124
125 // Extrapolation that is performed if x is out of bounds. As a starting point, we assume that the t
126 // values and x values behave the same, which is linearly. This assumption works best when user
127 // has set the points so the spline line is linear at the endpoints - which is also preferred since
128 // higher order polynomials are typically unstable and can "explode" off into unwanted directions
129 double x0 = interpolateCoeff (m_t[0]).x();
130 double xNm1 = interpolateCoeff (m_t[m_xy.size() - 1]).x();
131 if (x < x0) {
132
133 // Extrapolate with x < x(0) < x(N-1) which correspond to s, s0 and sNm1
134 double x1 = interpolateCoeff (m_t[1]).x();
135 double tStart = (x - x0) / (x1 - x0); // This is less than zero. x=x0 for t=0 and x=x1 for t=1
136 tLow = 2.0 * tStart;
137 tHigh = 0.0;
138
139 } else if (xNm1 < x) {
140
141 // Extrapolate with x(0) < x(N-1) < x which correspond to s0, sNm1 and s
142 double xNm2 = interpolateCoeff (m_t[m_xy.size() - 2]).x();
143 double tStart = tHigh + (x - xNm1) / (xNm1 - xNm2); // This is greater than one. x=xNm2 for t=0 and x=xNm1 for t=1
144 tLow = m_xy.size() - 1;
145 tHigh = tHigh + 2.0 * (tStart - tLow);
146
147 }
148
149 // Interpolation using bisection search
123150 double tCurrent = (tHigh + tLow) / 2.0;
124151 double tDelta = (tHigh - tLow) / 4.0;
125152 for (int iteration = 0; iteration < numIterations; iteration++) {
2222 QPointF pos = mapToScene (event->pos ());
2323
2424 emit signalMouseMove (pos);
25
26 // Normally we would need to call QGraphicsView::mouseMoveEvent at this point so that the mouse move event could be handled,
27 // but this is unwanted since:
28 // 1) Everywhere, except the pdf import preview, there is nothing to drag
29 // 2) Dragging of PdfFrameHandle objects in the pdf import preview is handled indirectly by PdfFrame
30 QGraphicsView::mouseMoveEvent (event);
2531 }
2632
2733 void ViewPreview::resizeEvent(QResizeEvent *event)
00 #!/bin/bash
11
2 # Script that runs command-line tests
2 # Description: Script that runs command-line tests
3 #
4 # Usage: build_and_run_all_cli_tests [jpeg2000] [pdf]
5 #
6 # where: jpeg2000 = run jpeg2000 test(s). Requires CONFIG+=jpeg2000 in qmake build
7 # pdf = run pdf test(s). Requires CONFIG+=pdf in qmake build
38
49 # Test names. Specify a single test to run just that test
510 tests=(TestCorrelation TestFormats TestGraphCoords TestProjectedPoint TestSegmentFill TestSpline TestTransformation TestValidators)
611
712 echo "Available tests: " ${tests[*]}
13
14 # Pass script arguments to qmake
15 CONFIGARGS=""
16 while test $# -gt 0
17 do
18 case "$1" in
19 jpeg2000) CONFIGARGS="jpeg2000 $CONFIGARGS"
20 ;;
21 pdf) CONFIGARGS="pdf $CONFIGARGS"
22 ;;
23 esac
24 shift
25 done
26
27 if [ -n "$CONFIGARGS" ]; then
28 CONFIGARGS="CONFIG+=$CONFIGARGS"
29 fi
830
931 # Need gcc 4 at /C/cygwin/bin rather than gcc 3 at /usr/bin to prevent 'unrecognized command line
1032 # option -fno-keep-inline-dllexport'
4870 for t in "${tests[@]}"
4971 do
5072 sed "s/TEST/$t/g" engauge_test_template.pro >engauge_test.pro
51 qmake engauge_test.pro
73 qmake $CONFIGARGS engauge_test.pro
5274 make all 2>>$LOGFILE >/dev/null
5375 ../bin/$t
5476 if [ $argcount -ne 1 ]
00 #!/bin/bash
11
2 SCRIPTS=../test/*.test.commandline
2 # Description: Script that runs gui tests after the command-line tests have been run
3 #
4 # Usage: build_and_run_all_gui_tests [jpeg2000] [pdf]
5 #
6 # where: jpeg2000 = run jpeg2000 test(s). Requires CONFIG+=jpeg2000 in qmake build
7 # pdf = run pdf test(s). Requires CONFIG+=pdf in qmake build
8
9 FILTERJPEG2000="skip"
10 FILTERPDF="skip"
11 while test $# -gt 0
12 do
13 case "$1" in
14 jpeg2000) FILTERJPEG2000=""
15 ;;
16 pdf) FILTERPDF=""
17 ;;
18 esac
19 shift
20 done
21
22 SCRIPTS=`find ../test -name "*.test.commandline" | sort`
323
424 for script in $SCRIPTS
525 do
6 # Run regression test
7 commandLine=`cat $script`
8 ../bin/engauge $commandLine
926
10 # File command scripts do not generate output files so we are done if command line does not have 'errorreport'
11 if [[ $commandLine == *errorreport* ]]
12 then
27 # Skip unwanted tests
28 skip=0
29 if [[ -n $FILTERJPEG2000 && $script =~ jpeg2000 ]]; then skip=1; fi
30 if [[ -n $FILTERPDF && $script =~ pdf ]]; then skip=1; fi
31
32 if [ $skip == 0 ]; then
33
34 # Run regression test
35 commandLine=`cat $script`
36 ../bin/engauge $commandLine
1337
1438 # Compare actual and desired output files. There is one pair for each coordinate system
15 root=${script/.test.commandline/}
16 EXPECTED_FILES=../test/$root.csv_expected_*
39 scriptfile=`basename $script`
40 root=${scriptfile/.test.commandline/}
41 EXPECTED_FILES=`find ../test -name "$root.csv_expected_*"`
1742 COUNT=0
1843 COUNTER=1
1944 for EXPECTED in $EXPECTED_FILES
44 TEMPLATE = app
55
66 # CONFIG comments:
7 # 1) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires JPEG2000_INCLUDE
8 # and JPEG2000_LIB environment variables
7 # 1) Add 'jpeg2000' to the qmake command line to include support for JPEG2000 input files. Requires
8 # 1) previous installation of the jpeg2000 development package
9 # 2) JPEG2000_INCLUDE environment variable pointing to directory containing openjpeg.h
10 # 3) JPEG2000_LIB environment variable pointing to directory containing libopenjp2.so
11 # Sample command lines
912 # qmake CONFIG+=jpeg2000
1013 # qmake "CONFIG+=debug jpeg2000"
14 # 2) Add 'pdf' to the qmake command line to include support for PDF input files. Requires
15 # 1) previous installation of the poppler-qt5 development package
16 # 2) POPPLER_INCLUDE environment variable pointing to directory containing Document.h
17 # 3) POPPLER_LIB environment variable pointing to directory containing libpoppler-qt5.so
18 # Sample command lines
19 # qmake CONFIG+=pdf
20 # qmake "CONFIG+=debug pdf"
1121 # 3) Gratuitous warning about import_qpa_plugin in Fedora is due to 'CONFIG=qt' but that option takes care of
1222 # include/library files in an automated and platform-independent manner, so it will not be removed
13 CONFIG = qt warn_on thread testcase
23 CONFIG += qt warn_on thread testcase
1424
1525 OBJECTS_DIR = .objs_test
1626 MOC_DIR = .moc_test
186196 Export/ExportFileFunctions.h \
187197 Export/ExportFileRelations.h \
188198 Export/ExportHeader.h \
199 Export/ExportImageForRegression.h \
189200 Export/ExportOrdinalsSmooth.h \
190201 Export/ExportOrdinalsStraight.h \
191202 Export/ExportToClipboard.h \
251262 Network/NetworkClient.h \
252263 Ordinal/OrdinalGenerator.h \
253264 Ordinal/OrdinalToGraphicsPoint.h \
265 Pdf/PdfResolution.h \
254266 Point/Point.h \
255267 Point/PointComparator.h \
256268 Point/PointIdentifiers.h \
307319 Zoom/ZoomControl.h \
308320 Zoom/ZoomFactor.h \
309321 Zoom/ZoomFactorInitial.h\
310 Zoom/ZoomLabels.h
322 Zoom/ZoomLabels.h \
323 util/ZValues.h
311324
312325 SOURCES += \
313326 Background/BackgroundImage.cpp \
467480 Export/ExportFileFunctions.cpp \
468481 Export/ExportFileRelations.cpp \
469482 Export/ExportHeader.cpp \
483 Export/ExportImageForRegression.cpp \
470484 Export/ExportLayoutFunctions.cpp \
471485 Export/ExportOrdinalsSmooth.cpp \
472486 Export/ExportOrdinalsStraight.cpp \
529543 util/mmsubs.cpp \
530544 Network/NetworkClient.cpp \
531545 Ordinal/OrdinalGenerator.cpp \
546 Pdf/PdfResolution.cpp \
532547 Point/Point.cpp \
533548 Point/PointIdentifiers.cpp \
534549 Point/PointMatchAlgorithm.cpp \
578593 View/ViewProfileScale.cpp \
579594 View/ViewSegmentFilter.cpp \
580595 util/Xml.cpp \
581 Zoom/ZoomLabels.cpp
596 Zoom/ZoomLabels.cpp \
597 util/ZValues.cpp
582598
583599 TARGET = ../bin/TEST
584600
625641 Mime \
626642 Network \
627643 Ordinal \
644 Pdf \
628645 Plot \
629646 Point \
630647 Segment \
652669 RESOURCES += \
653670 engauge.qrc
654671
672 CONFIG(debug,debug|release) {
673 message("Build type: debug")
674 } else {
675 message("Build type: release")
676 }
677
655678 jpeg2000 {
656 CONFIG(debug,debug|release) {
657 message(Building debug version with internal support for JPEG2000 files)
658 } else {
659 message(Building release version with internal support for JPEG2000 files)
660 }
679 message("JPEG2000 support: yes")
661680 _JPEG2000_INCLUDE = $$(JPEG2000_INCLUDE)
662681 _JPEG2000_LIB = $$(JPEG2000_LIB)
663682 isEmpty(_JPEG2000_INCLUDE) {
684703 Jpeg2000/Jpeg2000Convert.cpp
685704
686705 } else {
687 CONFIG(debug,debug|release) {
688 message(Building debug version without internal support for JPEG2000 files)
706 message("JPEG2000 support: no")
707 }
708
709 pdf {
710 message("PDF support: yes")
711 _POPPLER_INCLUDE = $$(POPPLER_INCLUDE)
712 _POPPLER_LIB = $$(POPPLER_LIB)
713 isEmpty(_POPPLER_INCLUDE) {
714 error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined")
689715 } else {
690 message(Building release version without internal support for JPEG2000 files)
716 isEmpty(_POPPLER_LIB) {
717 error("POPPLER_INCLUDE and POPPLER_LIB environment variables must be defined")
718 }
691719 }
720 DEFINES += "ENGAUGE_PDF"
721 INCLUDEPATH += $$(POPPLER_INCLUDE)
722 LIBS += -L$$(POPPLER_LIB) -lpoppler -lpoppler-qt5
723 HEADERS += Dlg/DlgPdfFrame.h \
724 Pdf/Pdf.h \
725 Pdf/PdfFrame.h \
726 Pdf/PdfFrameHandle.h
727 SOURCES += Dlg/DlgPdfFrame.cpp \
728 Pdf/Pdf.cpp \
729 Pdf/PdfFrame.cpp \
730 Pdf/PdfFrameHandle.cpp
731
732 } else {
733 message("PDF support: no")
692734 }
4848 #include "DocumentSerialize.h"
4949 #include "EngaugeAssert.h"
5050 #include "EnumsToQt.h"
51 #include "ExportImageForRegression.h"
5152 #include "ExportToFile.h"
5253 #include "FileCmdScript.h"
5354 #include "Ghosts.h"
6566 #include "MainTitleBarFormat.h"
6667 #include "MainWindow.h"
6768 #include "NetworkClient.h"
69 #ifdef ENGAUGE_PDF
70 #include "Pdf.h"
71 #endif // ENGAUGE_PDF
72 #include "PdfResolution.h"
6873 #include <QAction>
6974 #include <QApplication>
7075 #include <QCloseEvent>
135140 m_ghosts (0),
136141 m_timerRegressionErrorReport(0),
137142 m_fileCmdScript (0),
138 m_isRegressionTest (isRegressionTest),
143 m_isErrorReportRegressionTest (isRegressionTest),
139144 m_timerRegressionFileCmdScript(0)
140145 {
141146 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::MainWindow"
148153
149154 LoggerUpload::bindToMainWindow(this);
150155
151 QString initialPath = QDir::currentPath();
156 m_startupDirectory = QDir::currentPath();
152157
153158 setCurrentFile ("");
154159 createIcons();
173178 createZoomMap ();
174179 updateControls ();
175180
176 settingsRead ();
181 settingsRead (); // This changes the current directory when not regression testing
177182 setCurrentFile ("");
178183 setUnifiedTitleAndToolBarOnMac(true);
179184
180185 installEventFilter(this);
186
187 // Start regression scripting if appropriate. Regression scripts assume current directory is the original
188 // current directory, so we temporarily reset the current directory
189 QString originalPath = QDir::currentPath();
190 QDir::setCurrent (m_startupDirectory);
181191 if (!errorReportFile.isEmpty()) {
182 loadErrorReportFile(initialPath,
183 errorReportFile);
184 if (m_isRegressionTest) {
185 startRegressionTestErrorReport(initialPath,
186 errorReportFile);
192 loadErrorReportFile(errorReportFile);
193 if (m_isErrorReportRegressionTest) {
194 startRegressionTestErrorReport(errorReportFile);
187195 }
188196 } else if (!fileCmdScriptFile.isEmpty()) {
189197 m_fileCmdScript = new FileCmdScript (fileCmdScriptFile);
194202 // since only one of the two modes is available at any time, for simplicity
195203 m_loadStartupFiles = loadStartupFiles;
196204 }
205 QDir::setCurrent (originalPath);
197206 }
198207
199208 MainWindow::~MainWindow()
446455 "Creates a new document by importing an image with support for advanced feaures. In "
447456 "advanced mode, there can be multiple coordinate systems and/or floating axes."));
448457 connect (m_actionImportAdvanced, SIGNAL (triggered ()), this, SLOT (slotFileImportAdvanced ()));
458
459 m_actionImportImageReplace = new QAction (tr ("Import (Image Replace)..."), this);
460 m_actionImportImageReplace->setStatusTip (tr ("Imports a new image into the current document, replacing the existing image."));
461 m_actionImportImageReplace->setWhatsThis (tr ("Import (Image Replace)\n\n"
462 "Imports a new image into the current document. The existing image is replaced, "
463 "and all curves in the document are preserved. This operation is useful for applying "
464 "the axis points and other settings from an existing document to a different image."));
465 connect (m_actionImportImageReplace, SIGNAL (triggered ()), this, SLOT (slotFileImportImageReplace ()));
449466
450467 m_actionOpen = new QAction(tr ("&Open..."), this);
451468 m_actionOpen->setShortcut (QKeySequence::Open);
909926 m_menuFile = menuBar()->addMenu(tr("&File"));
910927 m_menuFile->addAction (m_actionImport);
911928 m_menuFile->addAction (m_actionImportAdvanced);
929 m_menuFile->addAction (m_actionImportImageReplace);
912930 m_menuFile->addAction (m_actionOpen);
913931 #ifndef OSX_RELEASE
914932 m_menuFileOpenRecent = new QMenu (tr ("Open &Recent"));
12891307 }
12901308
12911309 #ifndef OSX_RELEASE
1292 void MainWindow::exportAllCoordinateSystems()
1293 {
1294 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::exportAllCoordinateSystems";
1295
1296 ExportToFile exportStrategy;
1310 void MainWindow::exportAllCoordinateSystemsAfterRegressionTests()
1311 {
1312 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::exportAllCoordinateSystemsAfterRegressionTests curDir=" << QDir::currentPath().toLatin1().data();
12971313
12981314 // Output the regression test results. One file is output for every coordinate system
12991315 for (CoordSystemIndex index = 0; index < m_cmdMediator->document().coordSystemCount(); index++) {
13031319 QString regressionFile = QString ("%1_%2")
13041320 .arg (m_regressionFile)
13051321 .arg (index + 1); // Append the coordinate system index
1306 fileExport (regressionFile,
1307 exportStrategy);
1322
1323 // Normally we just export to a file, but when regression testing the export will fail since coordinates are not defined. To
1324 // get an export file when regression testing, we just output the image size
1325 if (m_isErrorReportRegressionTest && !m_transformation.transformIsDefined()) {
1326
1327 ExportImageForRegression exportStrategy (m_cmdMediator->pixmap ());
1328 exportStrategy.fileExport (regressionFile);
1329
1330 } else {
1331
1332 ExportToFile exportStrategy;
1333
1334 fileExport (regressionFile,
1335 exportStrategy);
1336 }
13081337 }
13091338 }
13101339 #endif
13151344
13161345 outFileName = outFileName.replace (".xml", ".csv_actual"); // Applies when extension is xml
13171346 outFileName = outFileName.replace (".dig", ".csv_actual"); // Applies when extension is dig
1347 outFileName = outFileName.replace (".pdf", ".csv_actual"); // Applies when extension is pdf
13181348
13191349 return outFileName;
13201350 }
13231353 ExportToFile exportStrategy)
13241354 {
13251355 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::fileExport"
1356 << " curDir=" << QDir::currentPath().toLatin1().data()
13261357 << " fileName=" << fileName.toLatin1().data();
13271358
13281359 QFile file (fileName);
13711402
13721403 if (importType == IMPORT_TYPE_ADVANCED) {
13731404
1374 // Remove any existing points, axes checker(s) and such from the previous Document so they do not appear in setupAfterLoad
1405 // Remove any existing points, axes checker(s) and such from the previous Document so they do not appear in setupAfterLoadNewDocument
13751406 // when previewing for IMAGE_TYPE_ADVANCED
13761407 slotFileClose();
13771408
13811412
13821413 QImage image;
13831414 bool loaded = false;
1415
13841416 #ifdef ENGAUGE_JPEG2000
13851417 Jpeg2000 jpeg2000;
13861418 loaded = jpeg2000.load (fileName,
13871419 image);
13881420 #endif // ENGAUGE_JPEG2000
1421
1422 #ifdef ENGAUGE_PDF
1423 if (!loaded) {
1424
1425 Pdf pdf;
1426 PdfReturn pdfReturn = pdf.load (fileName,
1427 image,
1428 m_modelMainWindow.pdfResolution(),
1429 m_isErrorReportRegressionTest);
1430 if (pdfReturn == PDF_RETURN_CANCELED) {
1431
1432 // User canceled so exit immediately
1433 return;
1434
1435 }
1436
1437 loaded = (pdfReturn == PDF_RETURN_SUCCESS);
1438 }
1439 #endif // ENGAUGE_PDF
1440
13891441 if (!loaded) {
13901442 loaded = image.load (fileName);
13911443 }
13921444
13931445 if (!loaded) {
1446 QString msg = QString("%1 %2 %3 %4.")
1447 .arg (tr ("Cannot read file"))
1448 .arg (fileName)
1449 .arg (tr ("from directory"))
1450 .arg (QDir::currentPath());
13941451 QMessageBox::warning (this,
13951452 engaugeWindowTitle(),
1396 QString("%1 %2.")
1397 .arg (tr ("Cannot read file"))
1398 .arg(fileName));
1453 msg);
13991454
14001455 // Reset
14011456 m_originalFile = originalFileOld;
14321487 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::fileImportWithPrompts"
14331488 << " importType=" << importType;
14341489
1435 if (maybeSave ()) {
1490 // Skip maybeSave method for IMPORT_TYPE_REPLACE_IMAGE since open file dialog is enough to allow user to cancel the operation, and
1491 // since no information is lost in that case
1492 bool okToContinue = true;
1493 if (importType != IMPORT_TYPE_IMAGE_REPLACE) {
1494 okToContinue = maybeSave ();
1495 }
1496
1497 if (okToContinue) {
14361498
14371499 QString filter;
14381500 QTextStream str (&filter);
14511513 supportedImageFormatStrings << jpeg2000.supportedImageWildcards();
14521514 #endif // ENGAUGE_JPEG2000
14531515
1516 #ifdef ENGAUGE_PDF
1517 supportedImageFormatStrings << "*.pdf";
1518 #endif // ENGAUGE_PDF
1519
14541520 supportedImageFormatStrings.sort();
14551521
14561522 str << "Image Files (" << supportedImageFormatStrings.join (" ") << ")";
14861552
14871553 if (importType == IMPORT_TYPE_ADVANCED) {
14881554
1489 // Remove any existing points, axes checker(s) and such from the previous Document so they do not appear in setupAfterLoad
1555 // Remove any existing points, axes checker(s) and such from the previous Document so they do not appear in setupAfterLoadNewDocument
14901556 // when previewing for IMAGE_TYPE_ADVANCED
14911557 slotFileClose();
14921558
15051571 if (!loaded) {
15061572 QMessageBox::warning (this,
15071573 engaugeWindowTitle(),
1508 QString("%1 %2.")
1574 QString("%1 %2 %3 %4.")
15091575 .arg (tr ("Cannot read file"))
1510 .arg(fileName));
1576 .arg (fileName)
1577 .arg (tr ("from directory"))
1578 .arg (QDir::currentPath ()));
15111579
15121580 // Reset
15131581 m_originalFile = originalFileOld;
16481716 }
16491717
16501718 m_cmdMediator = cmdMediator;
1651 setupAfterLoad(fileName,
1652 "File opened",
1653 IMPORT_TYPE_SIMPLE);
1719 setupAfterLoadNewDocument (fileName,
1720 "File opened",
1721 IMPORT_TYPE_SIMPLE);
16541722
16551723 // Start select mode
16561724 m_actionDigitizeSelect->setChecked (true); // We assume user wants to first select existing stuff
16711739
16721740 QMessageBox::warning (this,
16731741 engaugeWindowTitle(),
1674 QString("%1 %2:\n%3.")
1742 QString("%1 %2 %3 %4:\n%5.")
16751743 .arg (tr ("Cannot read file"))
1676 .arg(fileName)
1744 .arg (fileName)
1745 .arg (tr ("from directory"))
1746 .arg (QDir::currentPath ())
16771747 .arg(cmdMediator->reasonForUnsuccessfulRead ()));
16781748 delete cmdMediator;
16791749
16801750 }
16811751 }
16821752
1683 void MainWindow::loadErrorReportFile(const QString &initialPath,
1684 const QString &errorReportFile)
1753 void MainWindow::loadErrorReportFile(const QString &errorReportFile)
16851754 {
16861755 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::loadErrorReportFile"
1687 << " path=" << initialPath.toLatin1().data()
16881756 << " file=" << errorReportFile.toLatin1().data();
1689
1690 // The default path has been changed from its original executable-based initial value to the last directory used
1691 // according to the settings. Since the executable-based directory is much more stable, and we want a predictable
1692 // directory in the likely event that the error report file has a relative path, we temporarily switch the default path
1693 // back to the executable-based initial value
1694 QString originalPath = QDir::currentPath();
1695 QDir::setCurrent(initialPath);
16961757
16971758 QFile file (errorReportFile);
16981759 if (!file.exists()) {
17171778 reader);
17181779 file.close();
17191780
1720 // Reset the original path now that the error report file has been read in
1721 QDir::setCurrent(originalPath);
1722
1723 setupAfterLoad(errorReportFile,
1724 "Error report opened",
1725 IMPORT_TYPE_SIMPLE);
1781 setupAfterLoadNewDocument (errorReportFile,
1782 "Error report opened",
1783 IMPORT_TYPE_SIMPLE);
17261784
17271785 // Start select mode
17281786 m_actionDigitizeSelect->setChecked (true); // We assume user wants to first select existing stuff
17381796 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::loadImage"
17391797 << " fileName=" << fileName.toLatin1 ().data ()
17401798 << " importType=" << importType;
1799
1800 bool success;
1801 if (importType == IMPORT_TYPE_IMAGE_REPLACE) {
1802 success = loadImageReplacingImage (fileName,
1803 image,
1804 importType);
1805 } else {
1806 success = loadImageNewDocument (fileName,
1807 image,
1808 importType);
1809 }
1810
1811 return success;
1812 }
1813
1814 bool MainWindow::loadImageNewDocument (const QString &fileName,
1815 const QImage &image,
1816 ImportType importType)
1817 {
1818 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::loadImageNewDocument"
1819 << " fileName=" << fileName.toLatin1 ().data ()
1820 << " importType=" << importType;
1821
1822 ENGAUGE_ASSERT (importType != IMPORT_TYPE_IMAGE_REPLACE);
17411823
17421824 QApplication::setOverrideCursor(Qt::WaitCursor);
17431825 CmdMediator *cmdMediator = new CmdMediator (*this,
17541836 }
17551837
17561838 m_cmdMediator = cmdMediator;
1757 bool accepted = setupAfterLoad(fileName,
1758 tr ("File imported"),
1759 importType);
1839 bool accepted = setupAfterLoadNewDocument (fileName,
1840 tr ("File imported"),
1841 importType);
17601842
17611843 if (accepted) {
17621844
18001882
18011883 updateControls ();
18021884 }
1885
1886 return accepted;
1887 }
1888
1889 bool MainWindow::loadImageReplacingImage (const QString &fileName,
1890 const QImage &image,
1891 ImportType importType)
1892 {
1893 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::loadImageReplacingImage"
1894 << " fileName=" << fileName.toLatin1 ().data ()
1895 << " importType=" << importType;
1896
1897 ENGAUGE_ASSERT (importType == IMPORT_TYPE_IMAGE_REPLACE);
1898
1899 setCurrentPathFromFile (fileName);
1900 // We do not call rebuildRecentFileListForCurrentFile for an image file, so only proper Engauge document files appear in the recent file list
1901 m_engaugeFile = EMPTY_FILENAME; // Forces first Save to be treated as Save As
1902
1903 ENGAUGE_ASSERT (m_cmdMediator != 0); // Menu option should only be available when a document is currently open
1904
1905 m_cmdMediator->document().setPixmap (image);
1906
1907 bool accepted = setupAfterLoadReplacingImage (fileName,
1908 tr ("File imported"),
1909 importType);
1910
1911 // No checklist guide wizard is displayed when just replacing the image
18031912
18041913 return accepted;
18051914 }
19772086 {
19782087 // Skip if currently performing a regression test - in which case the preferred behavior is to let the current test fail and
19792088 // continue on to execute the remaining tests
1980 if ((m_cmdMediator != 0) && !m_isRegressionTest) {
2089 if ((m_cmdMediator != 0) && !m_isErrorReportRegressionTest) {
19812090
19822091 QString report = saveErrorReportFileAndExitXml (context,
19832092 file,
21712280 }
21722281 }
21732282
2174 void MainWindow::setPixmap (const QPixmap &pixmap)
2283 void MainWindow::setPixmap (const QString &curveSelected,
2284 const QPixmap &pixmap)
21752285 {
21762286 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::setPixmap";
21772287
21782288 m_digitizeStateContext->setImageIsLoaded (m_cmdMediator,
21792289 true);
2290
2291 // We cannot reliably use m_cmbCurve->currentText below for the selected curve since that control
2292 // can be pointing to a curve that no longer exists so this method requires curveSelected as an argument
21802293 m_backgroundStateContext->setPixmap (m_transformation,
21812294 m_cmdMediator->document().modelGridRemoval(),
21822295 m_cmdMediator->document().modelColorFilter(),
21832296 pixmap,
2184 m_cmbCurve->currentText());
2297 curveSelected);
21852298 }
21862299
21872300 void MainWindow::settingsRead ()
23092422 QVariant (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS)).toInt());
23102423 m_modelMainWindow.setMainTitleBarFormat ((MainTitleBarFormat) settings.value (SETTINGS_MAIN_TITLE_BAR_FORMAT,
23112424 QVariant (MAIN_TITLE_BAR_FORMAT_PATH)).toInt());
2425 m_modelMainWindow.setPdfResolution (settings.value (SETTINGS_IMPORT_PDF_RESOLUTION,
2426 QVariant (DEFAULT_IMPORT_PDF_RESOLUTION)).toInt ());
2427
23122428 updateSettingsMainWindow();
23132429
23142430 settings.endGroup();
23402456
23412457 }
23422458 settings.setValue (SETTINGS_CHECKLIST_GUIDE_WIZARD, m_actionHelpChecklistGuideWizard->isChecked ());
2459 settings.setValue (SETTINGS_IMPORT_PDF_RESOLUTION, m_modelMainWindow.pdfResolution ());
23432460 settings.setValue (SETTINGS_LOCALE_LANGUAGE, m_modelMainWindow.locale().language());
23442461 settings.setValue (SETTINGS_LOCALE_COUNTRY, m_modelMainWindow.locale().country());
23452462 settings.setValue (SETTINGS_VIEW_BACKGROUND_TOOLBAR, m_actionViewBackground->isChecked());
23562473 settings.endGroup ();
23572474 }
23582475
2359 bool MainWindow::setupAfterLoad (const QString &fileName,
2360 const QString &temporaryMessage ,
2361 ImportType importType)
2362 {
2363 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::setupAfterLoad"
2476 bool MainWindow::setupAfterLoadNewDocument (const QString &fileName,
2477 const QString &temporaryMessage ,
2478 ImportType importType)
2479 {
2480 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::setupAfterLoadNewDocument"
23642481 << " file=" << fileName.toLatin1().data()
23652482 << " message=" << temporaryMessage.toLatin1().data()
23662483 << " importType=" << importType;
2484
2485 // The steps in this method should theoretically be a superset of the steps in setupAfterLoadNewDocument. Therefore, any
2486 // changes to this method should be considered for application to the other method also
23672487
23682488 const QString EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING; // For bootstrapping the preview
23692489
23742494 m_cmdMediator->document().modelGridRemoval(),
23752495 m_cmdMediator->document().modelColorFilter(),
23762496 EMPTY_CURVE_NAME_TO_SKIP_BACKGROUND_PROCESSING); // Before setPixmap
2377 setPixmap (m_cmdMediator->pixmap ()); // Set background immediately so it is visible as a preview when any dialogs are displayed
2497 setPixmap (m_cmdMediator->document().curvesGraphsNames().first(),
2498 m_cmdMediator->pixmap ()); // Set background immediately so it is visible as a preview when any dialogs are displayed
23782499
23792500 // Image is visible now so the user can refer to it when we ask for the number of coordinate systems. Note that the Document
23802501 // may already have multiple CoordSystem if user loaded a file that had multiple CoordSystem entries
24202541 m_cmdMediator->document().modelGridRemoval(),
24212542 m_cmdMediator->document().modelColorFilter(),
24222543 m_cmbCurve->currentText ());
2544 m_backgroundStateContext->setBackgroundImage ((BackgroundImage) m_cmbBackground->currentIndex ());
2545
2546 applyZoomFactorAfterLoad(); // Zoom factor must be reapplied after background image is set, to have any effect
2547
2548 setCurrentFile(fileName);
2549 m_statusBar->showTemporaryMessage (temporaryMessage);
2550 m_statusBar->wakeUp ();
2551
2552 saveStartingDocumentSnapshot();
2553
2554 updateAfterCommand(); // Replace stale points by points in new Document
2555
2556 return true;
2557 }
2558
2559 bool MainWindow::setupAfterLoadReplacingImage (const QString &fileName,
2560 const QString &temporaryMessage ,
2561 ImportType importType)
2562 {
2563 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::setupAfterLoadReplacingImage"
2564 << " file=" << fileName.toLatin1().data()
2565 << " message=" << temporaryMessage.toLatin1().data()
2566 << " importType=" << importType;
2567
2568 // The steps in this method should theoretically be just a subset of the steps in setupAfterLoadNewDocument
2569
2570 // After this point there should be no commands in CmdMediator, since we effectively have a new document
2571 m_cmdMediator->clear();
2572
2573 setPixmap (m_cmdMediator->document().curvesGraphsNames().first(),
2574 m_cmdMediator->pixmap ()); // Set background immediately so it is visible as a preview when any dialogs are displayed
2575
2576 m_isDocumentExported = false;
2577
24232578 m_backgroundStateContext->setBackgroundImage ((BackgroundImage) m_cmbBackground->currentIndex ());
24242579
24252580 applyZoomFactorAfterLoad(); // Zoom factor must be reapplied after background image is set, to have any effect
28212976 IMPORT_TYPE_SIMPLE);
28222977 }
28232978
2979 void MainWindow::slotFileImportImageReplace ()
2980 {
2981 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::slotFileImportImageReplace";
2982
2983 fileImportWithPrompts (IMPORT_TYPE_IMAGE_REPLACE);
2984 }
2985
28242986 void MainWindow::slotFileOpen()
28252987 {
28262988 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::slotFileOpen";
32053367
32063368 if (m_cmdStackShadow->canRedo()) {
32073369
3370 // Always reset current directory before the command. This guarantees the upcoming redo step will work
3371 QDir::setCurrent (m_startupDirectory);
3372
32083373 m_cmdStackShadow->slotRedo();
32093374
3375 // Always reset current directory after the command. This guarantees the final export to file will work
3376 QDir::setCurrent (m_startupDirectory);
3377
32103378 } else {
32113379
32123380 #ifndef OSX_RELEASE
3213 exportAllCoordinateSystems ();
3381 exportAllCoordinateSystemsAfterRegressionTests ();
32143382 #endif
32153383
32163384 // Regression test has finished so exit. We unset the dirty flag so there is no prompt
32263394
32273395 if (m_fileCmdScript->canRedo()) {
32283396
3397 // Always reset current directory before the command. This guarantees the upcoming redo step will work
3398 QDir::setCurrent (m_startupDirectory);
3399
32293400 m_fileCmdScript->redo(*this);
3401
3402 // Always reset current directory after the command. This guarantees the final export to file will work
3403 QDir::setCurrent (m_startupDirectory);
32303404
32313405 } else {
32323406
32343408 if (m_cmdMediator != 0) {
32353409
32363410 #ifndef OSX_RELEASE
3237 exportAllCoordinateSystems ();
3411 exportAllCoordinateSystemsAfterRegressionTests ();
32383412 #endif
32393413
32403414 // We unset the dirty flag so there is no "Save changes?" prompt
37083882 }
37093883 }
37103884
3711 void MainWindow::startRegressionTestErrorReport(const QString &initialPath,
3712 const QString &regressionInputFile)
3885 void MainWindow::startRegressionTestErrorReport(const QString &regressionInputFile)
37133886 {
37143887 LOG4CPP_INFO_S ((*mainCat)) << "MainWindow::startRegressionTestErrorReport";
37153888
37193892 // 2) before running any commands since those commands implicitly assume the index is zero
37203893 Point::setIdentifierIndex(0);
37213894
3722 // Need absolute path since QDir::currentPath has been changed already so the
3723 // current path is not predictable
3724 QString absoluteRegressionInputFile = QString ("%1/%2")
3725 .arg (initialPath)
3726 .arg (regressionInputFile);
3727
37283895 // Save output/export file name
3729 m_regressionFile = exportFilenameFromInputFilename (absoluteRegressionInputFile);
3896 m_regressionFile = exportFilenameFromInputFilename (regressionInputFile);
37303897
37313898 m_timerRegressionErrorReport = new QTimer();
37323899 m_timerRegressionErrorReport->setSingleShot(false);
38404007
38414008 m_cmbBackground->setEnabled (!m_currentFile.isEmpty ());
38424009
4010 m_actionImportImageReplace->setEnabled (m_cmdMediator != 0);
38434011 #ifndef OSX_RELEASE
38444012 m_menuFileOpenRecent->setEnabled ((m_actionRecentFiles.count () > 0) &&
38454013 (m_actionRecentFiles.at(0)->isVisible ())); // Need at least one visible recent file entry
252252 void slotFileImportDraggedImage(QImage);
253253 void slotFileImportDraggedImageUrl(QUrl);
254254 void slotFileImportImage(QString, QImage);
255 void slotFileImportImageReplace();
255256 void slotFileOpen();
256257 void slotFileOpenDraggedDigFile (QString);
257258 void slotFilePrint();
320321
321322 enum ImportType {
322323 IMPORT_TYPE_SIMPLE,
323 IMPORT_TYPE_ADVANCED
324 IMPORT_TYPE_ADVANCED,
325 IMPORT_TYPE_IMAGE_REPLACE
324326 };
325327
326328 void applyZoomFactorAfterLoad();
350352 void createZoomMap ();
351353 ZoomFactor currentZoomFactor () const;
352354 #ifndef OSX_RELEASE
353 void exportAllCoordinateSystems();
355 void exportAllCoordinateSystemsAfterRegressionTests();
354356 #endif
355357 QString exportFilenameFromInputFilename (const QString &fileName) const;
356358 void fileExport(const QString &fileName,
364366 void loadCoordSystemListFromCmdMediator(); /// Update the combobox that has the CoordSystem list
365367 void loadCurveListFromCmdMediator(); /// Update the combobox that has the curve names.
366368 void loadDocumentFile (const QString &fileName);
367 void loadErrorReportFile(const QString &initialPath,
368 const QString &errorReportFile);
369 void loadErrorReportFile(const QString &errorReportFile);
369370 bool loadImage (const QString &fileName,
370371 const QImage &image,
371372 ImportType ImportType);
373 bool loadImageNewDocument (const QString &fileName,
374 const QImage &image,
375 ImportType ImportType);
376 bool loadImageReplacingImage (const QString &fileName,
377 const QImage &image,
378 ImportType ImportType);
372379 void loadInputFileForErrorReport(QDomDocument &domInputFile) const;
373380 void loadToolTips ();
374381 bool maybeSave();
384391 void saveStartingDocumentSnapshot();
385392 void setCurrentFile(const QString &fileName);
386393 void setCurrentPathFromFile (const QString &fileName);
387 void setPixmap (const QPixmap &pixmap);
394 void setPixmap (const QString &curveSelected,
395 const QPixmap &pixmap);
388396 void settingsRead ();
389397 void settingsReadEnvironment (QSettings &settings);
390398 void settingsReadMainWindow (QSettings &settings);
391399 void settingsWrite ();
392 bool setupAfterLoad (const QString &fileName,
393 const QString &temporaryMessage,
394 ImportType ImportType);
395 void startRegressionTestErrorReport (const QString &initialPath,
396 const QString &regressionInputFile);
400 bool setupAfterLoadNewDocument (const QString &fileName,
401 const QString &temporaryMessage,
402 ImportType ImportType);
403 bool setupAfterLoadReplacingImage (const QString &fileName,
404 const QString &temporaryMessage,
405 ImportType ImportType);
406 void startRegressionTestErrorReport (const QString &regressionInputFile);
397407 void startRegressionTestFileCmdScript ();
398408 void updateAfterCommandStatusBarCoords ();
399409 void updateControls (); // Update the widgets (typically in terms of show/hide state) depending on the application state.
417427 QMenu *m_menuFile;
418428 QAction *m_actionImport;
419429 QAction *m_actionImportAdvanced;
430 QAction *m_actionImportImageReplace;
420431 QAction *m_actionOpen;
421432 QMenu *m_menuFileOpenRecent;
422433 QList<QAction*> m_actionRecentFiles;
579590 // from the command stack getting executed
580591 QTimer *m_timerRegressionErrorReport;
581592 FileCmdScript *m_fileCmdScript;
582 bool m_isRegressionTest;
593 bool m_isErrorReportRegressionTest;
583594 QTimer *m_timerRegressionFileCmdScript;
584595 QString m_regressionFile;
596 QString m_startupDirectory; // Used to restore original directory just before outputing regression test results, since
597 // directory changes when settings are read, and also when files are opened or imported.
598 // Restoring the directory means relative paths in the regression scripts will work consistently
585599
586600 // Grid lines
587601 GridLines m_gridLines;
77 #include "DocumentSerialize.h"
88 #include "Logger.h"
99 #include "MainWindowModel.h"
10 #include "PdfResolution.h"
1011 #include <QLocale>
1112 #include <QObject>
1213 #include <QTextStream>
2122 MainWindowModel::MainWindowModel() :
2223 m_zoomControl (ZOOM_CONTROL_MENU_WHEEL_PLUSMINUS),
2324 m_zoomFactorInitial (DEFAULT_ZOOM_FACTOR_INITIAL),
24 m_mainTitleBarFormat (MAIN_TITLE_BAR_FORMAT_PATH)
25 m_mainTitleBarFormat (MAIN_TITLE_BAR_FORMAT_PATH),
26 m_pdfResolution (DEFAULT_IMPORT_PDF_RESOLUTION)
2527 {
2628 // Locale member variable m_locale is initialized to default locale when default constructor is called
2729 }
3032 m_locale (other.locale()),
3133 m_zoomControl (other.zoomControl()),
3234 m_zoomFactorInitial (other.zoomFactorInitial()),
33 m_mainTitleBarFormat (other.mainTitleBarFormat())
35 m_mainTitleBarFormat (other.mainTitleBarFormat()),
36 m_pdfResolution (other.pdfResolution())
3437 {
3538 }
3639
4043 m_zoomControl = other.zoomControl();
4144 m_zoomFactorInitial = other.zoomFactorInitial();
4245 m_mainTitleBarFormat = other.mainTitleBarFormat();
46 m_pdfResolution = other.pdfResolution();
4347
4448 return *this;
4549 }
7579 return m_mainTitleBarFormat;
7680 }
7781
82 int MainWindowModel::pdfResolution() const
83 {
84 return m_pdfResolution;
85 }
86
7887 void MainWindowModel::printStream(QString indentation,
7988 QTextStream &str) const
8089 {
8796 str << indentation << "zoomFactorInitial=" << m_zoomFactorInitial << "\n";
8897 str << indentation << "mainWindowTitleBarFormat=" << (m_mainTitleBarFormat == MAIN_TITLE_BAR_FORMAT_NO_PATH ?
8998 "NoPath" :
90 "Path");
99 "Path") << "\n";
100 str << indentation << "pdfResolution=" << m_pdfResolution << "\n";
91101 }
92102
93103 void MainWindowModel::saveXml(QXmlStreamWriter &writer) const
119129 m_mainTitleBarFormat = mainTitleBarFormat;
120130 }
121131
132 void MainWindowModel::setPdfResolution(int resolution)
133 {
134 m_pdfResolution = resolution;
135 }
136
122137 void MainWindowModel::setZoomControl (ZoomControl zoomControl)
123138 {
124139 m_zoomControl = zoomControl;
3939 /// Get method for MainWindow titlebar filename format
4040 MainTitleBarFormat mainTitleBarFormat () const;
4141
42 /// Get method for resolution of imported PDF files, in dots per inch
43 int pdfResolution () const;
44
4245 /// Debugging method that supports print method of this class and printStream method of some other class(es)
4346 void printStream (QString indentation,
4447 QTextStream &str) const;
5457
5558 /// Set method for MainWindow titlebar filename format
5659 void setMainTitleBarFormat (MainTitleBarFormat mainTitleBarFormat);
60
61 /// Set method for resolution of imported PDF files, in dots per inch
62 void setPdfResolution (int resolution);
5763
5864 /// Set method for zoom control
5965 void setZoomControl (ZoomControl zoomControl);
7379 ZoomControl m_zoomControl;
7480 ZoomFactorInitial m_zoomFactorInitial;
7581 MainTitleBarFormat m_mainTitleBarFormat;
82 int m_pdfResolution;
7683
7784 };
7885
4343 bool &isDebug,
4444 QString &errorReportFile,
4545 QString &fileCmdScriptFile,
46 bool &isRegressionTest,
46 bool &isErrorReportRegressionTest,
4747 bool &isGnuplot,
4848 QStringList &loadStartupFiles);
4949
104104 TranslatorContainer translatorContainer (app); // Must exist until execution terminates
105105
106106 // Command line
107 bool isDebug, isGnuplot, isRegressionTest;
107 bool isDebug, isGnuplot, isErrorReportRegressionTest;
108108 QString errorReportFile, fileCmdScriptFile;
109109 QStringList loadStartupFiles;
110110 parseCmdLine (argc,
112112 isDebug,
113113 errorReportFile,
114114 fileCmdScriptFile,
115 isRegressionTest,
115 isErrorReportRegressionTest,
116116 isGnuplot,
117117 loadStartupFiles);
118118
125125 // Create and show main window
126126 MainWindow w (errorReportFile,
127127 fileCmdScriptFile,
128 isRegressionTest,
128 isErrorReportRegressionTest,
129129 isGnuplot,
130130 loadStartupFiles);
131131 w.show();
139139 bool &isDebug,
140140 QString &errorReportFile,
141141 QString &fileCmdScriptFile,
142 bool &isRegressionTest,
142 bool &isErrorReportRegressionTest,
143143 bool &isGnuplot,
144144 QStringList &loadStartupFiles)
145145 {
154154 isDebug = false;
155155 errorReportFile = "";
156156 fileCmdScriptFile = "";
157 isRegressionTest = false;
157 isErrorReportRegressionTest = false;
158158 isGnuplot = false;
159159
160160 for (int i = 1; i < argc; i++) {
178178 } else if (strcmp (argv [i], DASH_HELP.toLatin1().data()) == 0) {
179179 showUsage = true; // User requested help
180180 } else if (strcmp (argv [i], DASH_REGRESSION.toLatin1().data()) == 0) {
181 isRegressionTest = true;
181 isErrorReportRegressionTest = true;
182182 } else if (strncmp (argv [i], DASH.toLatin1().data(), 1) == 0) {
183183 showUsage = true; // User entered an unrecognized token
184184 } else {
1818 QString str = QString ("(%1, %2)")
1919 .arg (pos.x ())
2020 .arg (pos.y ());
21
22 return str;
23 }
24
25 QString QRectFToString (const QRectF &rectF)
26 {
27 QString str = QString ("(%1x%2+%3+%4)")
28 .arg (rectF.width())
29 .arg (rectF.height())
30 .arg (rectF.x())
31 .arg (rectF.y());
2132
2233 return str;
2334 }
1515 class QPointF;
1616 class QTransform;
1717
18 extern QString QLocaleToString (const QLocale &locale);
1819 extern QString QPointFToString (const QPointF &pos);
19 extern QString QLocaleToString (const QLocale &locale);
20 extern QString QRectFToString (const QRectF &rectF);
2021 extern QString QtCursorToString (Qt::CursorShape cursorShape);
2122 extern QString QTransformToString (const QTransform &transform);
2223 extern QString QXmlStreamReaderTokenTypeToString (QXmlStreamReader::TokenType tokenType);
55
66 #include "Version.h"
77
8 const char *VERSION_NUMBER = "8.2";
8 const char *VERSION_NUMBER = "8.3";
99
1010 QString engaugeWindowTitle()
1111 {
0 /******************************************************************************************************
1 * (C) 2016 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #include "ZValues.h"
7
8 const int Z_VALUE_BACKGROUND = 0;
9 const int Z_VALUE_GRID_LINE = 100;
10 const int Z_VALUE_CURVE = 200;
11 const int Z_VALUE_POINT = 300;
12
0 /******************************************************************************************************
1 * (C) 2016 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
2 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
3 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
4 ******************************************************************************************************/
5
6 #ifndef Z_VALUES_H
7 #define Z_VALUES_H
8
9 /// Z values for ordering of the various graphics layers, with background at the bottom
10 extern const int Z_VALUE_BACKGROUND;
11 extern const int Z_VALUE_CURVE;
12 extern const int Z_VALUE_GRID;
13 extern const int Z_VALUE_POINT;
14
15 #endif // Z_VALUES_H
0 x,green,blue
1 -3.9725,-1.375,-4.022
2 -2.996,-1.022,-3.019
3 -2.9882,-1.019,-3.011
4 -1.9915,-0.659,-2.016
5 -1.9862,-0.658,-2.011
6 -0.9902,-0.342,-1.011
7 -0.9869,-0.341,-1.008
8 -0.0059,-3e-10,-0.0009
9 0.0058,0.005,0.011
10 1.002,0.395,1
11 1.0043,0.396,1.002
12 1.9922,0.667,1.989
13 2.0033,0.67,2
14 2.9882,0.985,3
15 3.002,0.989,3.014
16 3.9951,1.253,4.022
17 4.9936,1.626,5.016
18 5.9863,2.011,5.962
0 -errorreport ../test/extrapolate_functions_smooth.xml -regression
0 <ErrorReport>
1 <Application VersionNumber="8.2"/>
2 <Document VersionNumber="8.2" AxesPointsRequired="0">
3 <Image Height="252" Width="1221"><![CDATA[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]]></Image>
4 <CoordSystem>
5 <General CursorSize="3" ExtraPrecision="1"/>
6 <Coords ScaleXThetaString="Linear" UnitsRadius="0" UnitsDateString="YYYY/MM/DD" UnitsTheta="0" UnitsRadiusString="Number" ScaleYRadius="0" ScaleXTheta="0" UnitsTimeString="HH:MM:SS" TypeString="Cartesian" UnitsThetaString="Degrees (DDD.DDDDD)" UnitsDate="3" UnitsX="0" UnitsY="0" Type="0" Coords="0" ScaleYRadiusString="Linear" UnitsYString="Number" UnitsXString="Number" UnitsTime="2"/>
7 <DigitizeCurve CursorInnerRadius="5" CursorStandardCross="True" CursorLineWidth="2" CursorSize="1"/>
8 <Export PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" LayoutFunctionsString="OnePerLine" LayoutFunctions="1" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker LineColor="6" Mode="1" Seconds="3"/>
12 <GridDisplay Stable="False" CountX="2" StartX="0" StepX="1" CountY="2" StartY="0" StepY="1" Color="0" ColorString="Black" StopX="1" DisableX="0" StopY="1" DisableY="0"/>
13 <GridRemoval CoordDisableXString="Count" CloseDistance="10" Stable="False" CountX="2" StartX="0" StepX="0" CountY="2" StartY="0" StepY="0" DefinedGridLines="False" StopX="0" StopY="0" CoordDisableX="0" CoordDisableY="0" CoordDisableYString="Count"/>
14 <PointMatch ColorCandidateString="Yellow" ColorRejectedString="Red" ColorCandidate="7" PointSize="48" ColorRejected="6" ColorAccepted="4" ColorAcceptedString="Green"/>
15 <Segments PointSeparation="25" LineColor="4" MinLength="2" LineWidth="4" FillCorners="False" LineColorString="Green"/>
16 <Curve CurveName="Axes">
17 <ColorFilter IntensityLow="0" CurveName="Axes" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
20 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter IntensityLow="0" CurveName="Curve1" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
29 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem Endian="LittleEndian" WordSize="32"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd Type="CmdSettingsCurveAddRemove" Description="Curve add/remove">
39 <CurvesGraphs>
40 <Curve CurveName="Curve1">
41 <ColorFilter IntensityLow="0" CurveName="Curve1" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
42 <CurveStyle CurveName="Curve1">
43 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
44 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
45 </CurveStyle>
46 <CurvePoints/>
47 </Curve>
48 </CurvesGraphs>
49 <CurvesGraphs>
50 <Curve CurveName="green">
51 <ColorFilter IntensityLow="0" CurveName="green" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
52 <CurveStyle CurveName="green">
53 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
54 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
55 </CurveStyle>
56 <CurvePoints/>
57 </Curve>
58 <Curve CurveName="blue">
59 <ColorFilter IntensityLow="0" CurveName="blue" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
60 <CurveStyle CurveName="blue">
61 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
62 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
63 </CurveStyle>
64 <CurvePoints/>
65 </Curve>
66 </CurvesGraphs>
67 </Cmd>
68 <Cmd Type="CmdSettingsCurveProperties" Description="Curve Properties settings">
69 <CurveStyles>
70 <CurveStyle CurveName="green">
71 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
72 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
73 </CurveStyle>
74 <CurveStyle CurveName="blue">
75 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
76 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
77 </CurveStyle>
78 <CurveStyle CurveName="Axes">
79 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
80 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
81 </CurveStyle>
82 </CurveStyles>
83 <CurveStyles>
84 <CurveStyle CurveName="green">
85 <LineStyle ConnectAs="0" Color="4" Width="1" ColorString="Green" ConnectAsString="FunctionSmooth"/>
86 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="4" ShapeString="Cross" ColorString="Green"/>
87 </CurveStyle>
88 <CurveStyle CurveName="blue">
89 <LineStyle ConnectAs="0" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionSmooth"/>
90 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
91 </CurveStyle>
92 <CurveStyle CurveName="Axes">
93 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
94 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
95 </CurveStyle>
96 </CurveStyles>
97 </Cmd>
98 <Cmd ScreenX="492.709" ScreenY="110.209" Type="CmdAddPointAxis" Ordinal="1" Identifier="Axes&#x9;point&#x9;1" GraphX="0" Description="Add axis point" GraphY="0" IsXOnly="False"/>
99 <Cmd ScreenX="1201.54" ScreenY="110.209" Type="CmdAddPointAxis" Ordinal="2" Identifier="Axes&#x9;point&#x9;3" GraphX="6" Description="Add axis point" GraphY="0" IsXOnly="False"/>
100 <Cmd ScreenX="494.098" ScreenY="20.3969" Type="CmdAddPointAxis" Ordinal="3" Identifier="Axes&#x9;point&#x9;5" GraphX="0" Description="Add axis point" GraphY="3" IsXOnly="False"/>
101 <Cmd Type="CmdSettingsExport" Description="Export settings">
102 <Export PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" LayoutFunctionsString="OnePerLine" LayoutFunctions="1" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
103 <CurveNamesNotExported/>
104 </Export>
105 <Export PointsSelectionFunctions="0" PointsSelectionFunctionsString="InterpolateAllCurves" LayoutFunctionsString="AllPerLine" LayoutFunctions="0" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
106 <CurveNamesNotExported/>
107 </Export>
108 </Cmd>
109 <Cmd ScreenX="138.292" CurveName="green" ScreenY="140.804" Type="CmdAddPointGraph" Ordinal="1" Identifier="green&#x9;point&#x9;6" Description="Add graph point"/>
110 <Cmd ScreenX="257.126" CurveName="green" ScreenY="129.948" Type="CmdAddPointGraph" Ordinal="1" Identifier="green&#x9;point&#x9;7" Description="Add graph point"/>
111 <Cmd ScreenX="375.96" CurveName="green" ScreenY="120.407" Type="CmdAddPointGraph" Ordinal="2.5" Identifier="green&#x9;point&#x9;8" Description="Add graph point"/>
112 <Cmd ScreenX="492.014" CurveName="green" ScreenY="110.209" Type="CmdAddPointGraph" Ordinal="3.5" Identifier="green&#x9;point&#x9;9" Description="Add graph point"/>
113 <Cmd ScreenX="611.542" CurveName="green" ScreenY="98.3655" Type="CmdAddPointGraph" Ordinal="4.5" Identifier="green&#x9;point&#x9;10" Description="Add graph point"/>
114 <Cmd ScreenX="729.681" CurveName="green" ScreenY="90.141" Type="CmdAddPointGraph" Ordinal="5.5" Identifier="green&#x9;point&#x9;11" Description="Add graph point"/>
115 <Cmd ScreenX="847.82" CurveName="green" ScreenY="80.6005" Type="CmdAddPointGraph" Ordinal="6.5" Identifier="green&#x9;point&#x9;12" Description="Add graph point"/>
116 <Cmd ScreenX="965.264" CurveName="green" ScreenY="72.705" Type="CmdAddPointGraph" Ordinal="7.5" Identifier="green&#x9;point&#x9;13" Description="Add graph point"/>
117 <Cmd ScreenX="1083.4" CurveName="green" ScreenY="61.5196" Type="CmdAddPointGraph" Ordinal="8.5" Identifier="green&#x9;point&#x9;14" Description="Add graph point"/>
118 <Cmd ScreenX="1200.85" CurveName="green" ScreenY="50.0052" Type="CmdAddPointGraph" Ordinal="9.5" Identifier="green&#x9;point&#x9;15" Description="Add graph point"/>
119 <Cmd ScreenX="21.543" CurveName="blue" ScreenY="230.616" Type="CmdAddPointGraph" Ordinal="1" Identifier="blue&#x9;point&#x9;16" Description="Add graph point"/>
120 <Cmd ScreenX="138.292" CurveName="blue" ScreenY="200.35" Type="CmdAddPointGraph" Ordinal="1" Identifier="blue&#x9;point&#x9;17" Description="Add graph point"/>
121 <Cmd ScreenX="257.126" CurveName="blue" ScreenY="170.413" Type="CmdAddPointGraph" Ordinal="2.5" Identifier="blue&#x9;point&#x9;18" Description="Add graph point"/>
122 <Cmd ScreenX="375.265" CurveName="blue" ScreenY="140.475" Type="CmdAddPointGraph" Ordinal="3.5" Identifier="blue&#x9;point&#x9;19" Description="Add graph point"/>
123 <Cmd ScreenX="493.404" CurveName="blue" ScreenY="109.88" Type="CmdAddPointGraph" Ordinal="4.5" Identifier="blue&#x9;point&#x9;20" Description="Add graph point"/>
124 <Cmd ScreenX="611.542" CurveName="blue" ScreenY="80.2715" Type="CmdAddPointGraph" Ordinal="5.5" Identifier="blue&#x9;point&#x9;21" Description="Add graph point"/>
125 <Cmd ScreenX="728.986" CurveName="blue" ScreenY="50.6632" Type="CmdAddPointGraph" Ordinal="6.5" Identifier="blue&#x9;point&#x9;22" Description="Add graph point"/>
126 <Cmd ScreenX="847.125" CurveName="blue" ScreenY="20.3969" Type="CmdAddPointGraph" Ordinal="7.5" Identifier="blue&#x9;point&#x9;23" Description="Add graph point"/>
127 </CmdMediator>
128 <Error Context="Shift+Control+E" Comment="userTriggered" File="src/main/MainWindow.cpp" Line="1292"/>
129 </Document>
130 </ErrorReport>
0 x,green,blue
1 -3.9725,-1.374,-4.022
2 -2.996,-1.022,-3.019
3 -2.9882,-1.019,-3.011
4 -1.9915,-0.659,-2.016
5 -1.9862,-0.658,-2.011
6 -0.9902,-0.342,-1.011
7 -0.9869,-0.341,-1.008
8 -0.006,0.0003,-0.001
9 0.0058,0.005,0.011
10 1.002,0.395,1
11 1.0043,0.396,1.002
12 1.9922,0.667,1.989
13 2.0033,0.67,2
14 2.9882,0.985,3
15 3.002,0.989,3.014
16 3.9951,1.253,4.022
17 4.9936,1.626,5.035
18 5.9863,2.011,6.043
0 -errorreport ../test/extrapolate_functions_straight.xml -regression
0 <ErrorReport>
1 <Application VersionNumber="8.2"/>
2 <Document VersionNumber="8.2" AxesPointsRequired="0">
3 <Image Height="252" Width="1221"><![CDATA[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]]></Image>
4 <CoordSystem>
5 <General CursorSize="3" ExtraPrecision="1"/>
6 <Coords ScaleXThetaString="Linear" UnitsRadius="0" UnitsDateString="YYYY/MM/DD" UnitsTheta="0" UnitsRadiusString="Number" ScaleYRadius="0" ScaleXTheta="0" UnitsTimeString="HH:MM:SS" TypeString="Cartesian" UnitsThetaString="Degrees (DDD.DDDDD)" UnitsDate="3" UnitsX="0" UnitsY="0" Type="0" Coords="0" ScaleYRadiusString="Linear" UnitsYString="Number" UnitsXString="Number" UnitsTime="2"/>
7 <DigitizeCurve CursorInnerRadius="5" CursorStandardCross="True" CursorLineWidth="2" CursorSize="1"/>
8 <Export PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" LayoutFunctionsString="OnePerLine" LayoutFunctions="1" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker LineColor="6" Mode="1" Seconds="3"/>
12 <GridDisplay Stable="False" CountX="2" StartX="0" StepX="1" CountY="2" StartY="0" StepY="1" Color="0" ColorString="Black" StopX="1" DisableX="0" StopY="1" DisableY="0"/>
13 <GridRemoval CoordDisableXString="Count" CloseDistance="10" Stable="False" CountX="2" StartX="0" StepX="0" CountY="2" StartY="0" StepY="0" DefinedGridLines="False" StopX="0" StopY="0" CoordDisableX="0" CoordDisableY="0" CoordDisableYString="Count"/>
14 <PointMatch ColorCandidateString="Yellow" ColorRejectedString="Red" ColorCandidate="7" PointSize="48" ColorRejected="6" ColorAccepted="4" ColorAcceptedString="Green"/>
15 <Segments PointSeparation="25" LineColor="4" MinLength="2" LineWidth="4" FillCorners="False" LineColorString="Green"/>
16 <Curve CurveName="Axes">
17 <ColorFilter IntensityLow="0" CurveName="Axes" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
20 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter IntensityLow="0" CurveName="Curve1" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
29 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem Endian="LittleEndian" WordSize="32"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd Type="CmdSettingsCurveAddRemove" Description="Curve add/remove">
39 <CurvesGraphs>
40 <Curve CurveName="Curve1">
41 <ColorFilter IntensityLow="0" CurveName="Curve1" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
42 <CurveStyle CurveName="Curve1">
43 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
44 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
45 </CurveStyle>
46 <CurvePoints/>
47 </Curve>
48 </CurvesGraphs>
49 <CurvesGraphs>
50 <Curve CurveName="green">
51 <ColorFilter IntensityLow="0" CurveName="green" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
52 <CurveStyle CurveName="green">
53 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
54 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
55 </CurveStyle>
56 <CurvePoints/>
57 </Curve>
58 <Curve CurveName="blue">
59 <ColorFilter IntensityLow="0" CurveName="blue" SaturationHigh="100" ValueLow="0" Mode="2" ModeString="Intensity" HueHigh="360" ValueHigh="50" SaturationLow="50" HueLow="180" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10"/>
60 <CurveStyle CurveName="blue">
61 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
62 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
63 </CurveStyle>
64 <CurvePoints/>
65 </Curve>
66 </CurvesGraphs>
67 </Cmd>
68 <Cmd Type="CmdSettingsCurveProperties" Description="Curve Properties settings">
69 <CurveStyles>
70 <CurveStyle CurveName="green">
71 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
72 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="1" ShapeString="Cross" ColorString="Blue"/>
73 </CurveStyle>
74 <CurveStyle CurveName="blue">
75 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
76 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
77 </CurveStyle>
78 <CurveStyle CurveName="Axes">
79 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
80 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
81 </CurveStyle>
82 </CurveStyles>
83 <CurveStyles>
84 <CurveStyle CurveName="green">
85 <LineStyle ConnectAs="1" Color="4" Width="1" ColorString="Green" ConnectAsString="FunctionStraight"/>
86 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="4" ShapeString="Cross" ColorString="Green"/>
87 </CurveStyle>
88 <CurveStyle CurveName="blue">
89 <LineStyle ConnectAs="1" Color="1" Width="1" ColorString="Blue" ConnectAsString="FunctionStraight"/>
90 <PointStyle Radius="10" Shape="5" LineWidth="1" Color="1" ShapeString="X" ColorString="Blue"/>
91 </CurveStyle>
92 <CurveStyle CurveName="Axes">
93 <LineStyle ConnectAs="4" Color="8" Width="0" ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve"/>
94 <PointStyle Radius="10" Shape="1" LineWidth="1" Color="6" ShapeString="Cross" ColorString="Red"/>
95 </CurveStyle>
96 </CurveStyles>
97 </Cmd>
98 <Cmd ScreenX="492.709" ScreenY="110.209" Type="CmdAddPointAxis" Ordinal="1" Identifier="Axes&#x9;point&#x9;1" GraphX="0" Description="Add axis point" GraphY="0" IsXOnly="False"/>
99 <Cmd ScreenX="1201.54" ScreenY="110.209" Type="CmdAddPointAxis" Ordinal="2" Identifier="Axes&#x9;point&#x9;3" GraphX="6" Description="Add axis point" GraphY="0" IsXOnly="False"/>
100 <Cmd ScreenX="494.098" ScreenY="20.3969" Type="CmdAddPointAxis" Ordinal="3" Identifier="Axes&#x9;point&#x9;5" GraphX="0" Description="Add axis point" GraphY="3" IsXOnly="False"/>
101 <Cmd Type="CmdSettingsExport" Description="Export settings">
102 <Export PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" LayoutFunctionsString="OnePerLine" LayoutFunctions="1" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
103 <CurveNamesNotExported/>
104 </Export>
105 <Export PointsSelectionFunctions="0" PointsSelectionFunctionsString="InterpolateAllCurves" LayoutFunctionsString="AllPerLine" LayoutFunctions="0" PointsIntervalFunctions="10" PointsSelectionRelations="3" DelimiterString="Commas" PointsIntervalRelations="1" PointsIntervalUnitsFunctions="1" XLabel="x" PointsSelectionRelationsString="Unknown" Delimiter="0" HeaderString="Simple" PointsIntervalUnitsRelations="1" OverrideCsvTsv="True" Header="1">
106 <CurveNamesNotExported/>
107 </Export>
108 </Cmd>
109 <Cmd ScreenX="138.292" CurveName="green" ScreenY="140.804" Type="CmdAddPointGraph" Ordinal="1" Identifier="green&#x9;point&#x9;6" Description="Add graph point"/>
110 <Cmd ScreenX="257.126" CurveName="green" ScreenY="129.948" Type="CmdAddPointGraph" Ordinal="1" Identifier="green&#x9;point&#x9;7" Description="Add graph point"/>
111 <Cmd ScreenX="375.96" CurveName="green" ScreenY="120.407" Type="CmdAddPointGraph" Ordinal="2.5" Identifier="green&#x9;point&#x9;8" Description="Add graph point"/>
112 <Cmd ScreenX="492.0" CurveName="green" ScreenY="110.2" Type="CmdAddPointGraph" Ordinal="3.5" Identifier="green&#x9;point&#x9;9" Description="Add graph point"/>
113 <Cmd ScreenX="611.542" CurveName="green" ScreenY="98.3655" Type="CmdAddPointGraph" Ordinal="4.5" Identifier="green&#x9;point&#x9;10" Description="Add graph point"/>
114 <Cmd ScreenX="729.681" CurveName="green" ScreenY="90.141" Type="CmdAddPointGraph" Ordinal="5.5" Identifier="green&#x9;point&#x9;11" Description="Add graph point"/>
115 <Cmd ScreenX="847.82" CurveName="green" ScreenY="80.6005" Type="CmdAddPointGraph" Ordinal="6.5" Identifier="green&#x9;point&#x9;12" Description="Add graph point"/>
116 <Cmd ScreenX="965.264" CurveName="green" ScreenY="72.705" Type="CmdAddPointGraph" Ordinal="7.5" Identifier="green&#x9;point&#x9;13" Description="Add graph point"/>
117 <Cmd ScreenX="1083.4" CurveName="green" ScreenY="61.5196" Type="CmdAddPointGraph" Ordinal="8.5" Identifier="green&#x9;point&#x9;14" Description="Add graph point"/>
118 <Cmd ScreenX="1200.85" CurveName="green" ScreenY="50.0052" Type="CmdAddPointGraph" Ordinal="9.5" Identifier="green&#x9;point&#x9;15" Description="Add graph point"/>
119 <Cmd ScreenX="21.543" CurveName="blue" ScreenY="230.616" Type="CmdAddPointGraph" Ordinal="1" Identifier="blue&#x9;point&#x9;16" Description="Add graph point"/>
120 <Cmd ScreenX="138.292" CurveName="blue" ScreenY="200.35" Type="CmdAddPointGraph" Ordinal="1" Identifier="blue&#x9;point&#x9;17" Description="Add graph point"/>
121 <Cmd ScreenX="257.126" CurveName="blue" ScreenY="170.413" Type="CmdAddPointGraph" Ordinal="2.5" Identifier="blue&#x9;point&#x9;18" Description="Add graph point"/>
122 <Cmd ScreenX="375.265" CurveName="blue" ScreenY="140.475" Type="CmdAddPointGraph" Ordinal="3.5" Identifier="blue&#x9;point&#x9;19" Description="Add graph point"/>
123 <Cmd ScreenX="493.404" CurveName="blue" ScreenY="109.88" Type="CmdAddPointGraph" Ordinal="4.5" Identifier="blue&#x9;point&#x9;20" Description="Add graph point"/>
124 <Cmd ScreenX="611.542" CurveName="blue" ScreenY="80.2715" Type="CmdAddPointGraph" Ordinal="5.5" Identifier="blue&#x9;point&#x9;21" Description="Add graph point"/>
125 <Cmd ScreenX="728.986" CurveName="blue" ScreenY="50.6632" Type="CmdAddPointGraph" Ordinal="6.5" Identifier="blue&#x9;point&#x9;22" Description="Add graph point"/>
126 <Cmd ScreenX="847.125" CurveName="blue" ScreenY="20.3969" Type="CmdAddPointGraph" Ordinal="7.5" Identifier="blue&#x9;point&#x9;23" Description="Add graph point"/>
127 </CmdMediator>
128 <Error Context="Shift+Control+E" Comment="userTriggered" File="src/main/MainWindow.cpp" Line="1292"/>
129 </Document>
130 </ErrorReport>
0 x,red
1 -3.0033,-1.026
2 -2.9948,-1.023
3 -2.9862,-1.02
4 -2.9775,-1.017
5 -2.9688,-1.014
6 -2.9601,-1.01
7 -2.9513,-1.007
8 -2.9425,-1.004
9 -2.9336,-1.001
10 -2.9247,-0.997
11 -2.9159,-0.994
12 -2.907,-0.991
13 -2.898,-0.987
14 -2.8935,-0.986
15 -2.8851,-0.983
16 -2.8766,-0.979
17 -2.8679,-0.976
18 -2.8593,-0.973
19 -2.8506,-0.97
20 -2.8418,-0.967
21 -2.833,-0.963
22 -2.8242,-0.96
23 -2.8153,-0.957
24 -2.8065,-0.954
25 -2.7976,-0.95
26 -2.7887,-0.947
27 -2.7798,-0.944
28 -2.7753,-0.942
29 -2.7669,-0.939
30 -2.7583,-0.936
31 -2.7497,-0.933
32 -2.741,-0.929
33 -2.7323,-0.926
34 -2.7235,-0.923
35 -2.7148,-0.92
36 -2.7059,-0.916
37 -2.6971,-0.913
38 -2.6882,-0.91
39 -2.6793,-0.907
40 -2.6704,-0.903
41 -2.6615,-0.9
42 -2.657,-0.899
43 -2.6486,-0.895
44 -2.6401,-0.892
45 -2.6315,-0.889
46 -2.6228,-0.886
47 -2.6141,-0.883
48 -2.6053,-0.88
49 -2.5965,-0.876
50 -2.5877,-0.873
51 -2.5789,-0.87
52 -2.57,-0.867
53 -2.5611,-0.863
54 -2.5522,-0.86
55 -2.5433,-0.857
56 -2.5388,-0.855
57 -2.5304,-0.852
58 -2.5219,-0.849
59 -2.5133,-0.846
60 -2.5046,-0.843
61 -2.4959,-0.84
62 -2.4871,-0.836
63 -2.4784,-0.833
64 -2.4695,-0.83
65 -2.4607,-0.827
66 -2.4519,-0.824
67 -2.443,-0.82
68 -2.4341,-0.817
69 -2.4252,-0.814
70 -2.4163,-0.811
71 -2.4119,-0.809
72 -2.4037,-0.806
73 -2.3951,-0.803
74 -2.3864,-0.8
75 -2.3777,-0.797
76 -2.369,-0.794
77 -2.3602,-0.79
78 -2.3514,-0.787
79 -2.3426,-0.784
80 -2.3338,-0.781
81 -2.3249,-0.778
82 -2.316,-0.774
83 -2.3071,-0.771
84 -2.2982,-0.768
85 -2.2938,-0.767
86 -2.2855,-0.764
87 -2.2769,-0.76
88 -2.2683,-0.757
89 -2.2596,-0.754
90 -2.2509,-0.751
91 -2.2422,-0.748
92 -2.2334,-0.745
93 -2.2246,-0.742
94 -2.2158,-0.739
95 -2.2069,-0.736
96 -2.1981,-0.732
97 -2.1892,-0.729
98 -2.1803,-0.726
99 -2.1714,-0.723
100 -2.167,-0.721
101 -2.1587,-0.718
102 -2.1501,-0.715
103 -2.1415,-0.712
104 -2.1328,-0.709
105 -2.1241,-0.706
106 -2.1154,-0.703
107 -2.1066,-0.7
108 -2.0978,-0.697
109 -2.089,-0.694
110 -2.0802,-0.691
111 -2.0713,-0.688
112 -2.0625,-0.685
113 -2.0536,-0.681
114 -2.0447,-0.678
115 -2.0403,-0.677
116 -2.032,-0.674
117 -2.0234,-0.671
118 -2.0148,-0.668
119 -2.0062,-0.665
120 -1.9975,-0.662
121 -1.9887,-0.659
122 -1.98,-0.656
123 -1.9712,-0.653
124 -1.9624,-0.65
125 -1.9536,-0.647
126 -1.9447,-0.644
127 -1.9359,-0.641
128 -1.927,-0.638
129 -1.9182,-0.635
130 -1.9137,-0.633
131 -1.9053,-0.63
132 -1.8968,-0.627
133 -1.8882,-0.624
134 -1.8795,-0.621
135 -1.8709,-0.618
136 -1.8622,-0.616
137 -1.8534,-0.613
138 -1.8447,-0.61
139 -1.8359,-0.607
140 -1.8271,-0.604
141 -1.8183,-0.601
142 -1.8094,-0.598
143 -1.8006,-0.595
144 -1.7917,-0.592
145 -1.7829,-0.589
146 -1.7784,-0.587
147 -1.7701,-0.584
148 -1.7615,-0.581
149 -1.7529,-0.579
150 -1.7443,-0.576
151 -1.7356,-0.573
152 -1.7269,-0.57
153 -1.7182,-0.567
154 -1.7094,-0.564
155 -1.7007,-0.561
156 -1.6919,-0.558
157 -1.6831,-0.555
158 -1.6742,-0.552
159 -1.6654,-0.549
160 -1.6565,-0.546
161 -1.6477,-0.543
162 -1.6432,-0.542
163 -1.6349,-0.539
164 -1.6263,-0.536
165 -1.6177,-0.533
166 -1.6091,-0.53
167 -1.6004,-0.528
168 -1.5917,-0.525
169 -1.583,-0.522
170 -1.5742,-0.519
171 -1.5655,-0.516
172 -1.5567,-0.513
173 -1.5479,-0.51
174 -1.539,-0.507
175 -1.5302,-0.504
176 -1.5214,-0.501
177 -1.5125,-0.499
178 -1.508,-0.497
179 -1.4996,-0.494
180 -1.4911,-0.491
181 -1.4825,-0.489
182 -1.4739,-0.486
183 -1.4652,-0.483
184 -1.4565,-0.48
185 -1.4478,-0.477
186 -1.439,-0.474
187 -1.4303,-0.471
188 -1.4215,-0.469
189 -1.4127,-0.466
190 -1.4038,-0.463
191 -1.395,-0.46
192 -1.3861,-0.457
193 -1.3773,-0.454
194 -1.3728,-0.453
195 -1.3644,-0.45
196 -1.3559,-0.447
197 -1.3473,-0.444
198 -1.3386,-0.442
199 -1.33,-0.439
200 -1.3213,-0.436
201 -1.3125,-0.433
202 -1.3038,-0.43
203 -1.295,-0.427
204 -1.2862,-0.424
205 -1.2773,-0.422
206 -1.2685,-0.419
207 -1.2597,-0.416
208 -1.2508,-0.413
209 -1.2419,-0.41
210 -1.2375,-0.409
211 -1.2291,-0.406
212 -1.2206,-0.403
213 -1.212,-0.4
214 -1.2033,-0.397
215 -1.1946,-0.395
216 -1.1859,-0.392
217 -1.1771,-0.389
218 -1.1684,-0.386
219 -1.1596,-0.383
220 -1.1507,-0.38
221 -1.1419,-0.378
222 -1.133,-0.375
223 -1.1242,-0.372
224 -1.1153,-0.369
225 -1.1108,-0.367
226 -1.1024,-0.365
227 -1.0938,-0.362
228 -1.0852,-0.359
229 -1.0766,-0.356
230 -1.0679,-0.353
231 -1.0591,-0.351
232 -1.0504,-0.348
233 -1.0416,-0.345
234 -1.0328,-0.342
235 -1.0239,-0.339
236 -1.0151,-0.336
237 -1.0062,-0.333
238 -0.9973,-0.331
239 -0.9884,-0.328
240 -0.9839,-0.326
241 -0.9756,-0.324
242 -0.967,-0.321
243 -0.9584,-0.318
244 -0.9497,-0.315
245 -0.941,-0.312
246 -0.9322,-0.309
247 -0.9235,-0.307
248 -0.9146,-0.304
249 -0.9058,-0.301
250 -0.8969,-0.298
251 -0.8881,-0.295
252 -0.8792,-0.292
253 -0.8702,-0.289
254 -0.8657,-0.288
255 -0.8572,-0.285
256 -0.8487,-0.282
257 -0.8401,-0.279
258 -0.8314,-0.277
259 -0.8227,-0.274
260 -0.814,-0.271
261 -0.8052,-0.268
262 -0.7964,-0.265
263 -0.7875,-0.262
264 -0.7787,-0.259
265 -0.7698,-0.256
266 -0.7609,-0.254
267 -0.7519,-0.251
268 -0.743,-0.248
269 -0.7386,-0.246
270 -0.7304,-0.244
271 -0.7218,-0.241
272 -0.7131,-0.238
273 -0.7044,-0.235
274 -0.6956,-0.232
275 -0.6868,-0.229
276 -0.678,-0.226
277 -0.6692,-0.223
278 -0.6603,-0.22
279 -0.6514,-0.217
280 -0.6425,-0.215
281 -0.6336,-0.212
282 -0.629,-0.21
283 -0.6206,-0.207
284 -0.612,-0.204
285 -0.6034,-0.202
286 -0.5947,-0.199
287 -0.586,-0.196
288 -0.5773,-0.193
289 -0.5685,-0.19
290 -0.5596,-0.187
291 -0.5508,-0.184
292 -0.5419,-0.181
293 -0.533,-0.178
294 -0.5241,-0.175
295 -0.5152,-0.172
296 -0.5107,-0.171
297 -0.5023,-0.168
298 -0.4937,-0.165
299 -0.4851,-0.162
300 -0.4764,-0.159
301 -0.4677,-0.156
302 -0.4589,-0.153
303 -0.4501,-0.15
304 -0.4413,-0.147
305 -0.4325,-0.144
306 -0.4236,-0.141
307 -0.4147,-0.138
308 -0.4058,-0.135
309 -0.3969,-0.132
310 -0.3924,-0.13
311 -0.384,-0.128
312 -0.3754,-0.125
313 -0.3668,-0.122
314 -0.3581,-0.119
315 -0.3494,-0.116
316 -0.3407,-0.113
317 -0.3319,-0.11
318 -0.3231,-0.107
319 -0.3143,-0.104
320 -0.3054,-0.1
321 -0.2965,-0.097
322 -0.2876,-0.094
323 -0.2787,-0.091
324 -0.2698,-0.088
325 -0.2654,-0.087
326 -0.2572,-0.084
327 -0.2486,-0.081
328 -0.2399,-0.078
329 -0.2313,-0.075
330 -0.2225,-0.071
331 -0.2138,-0.068
332 -0.205,-0.065
333 -0.1962,-0.062
334 -0.1874,-0.059
335 -0.1785,-0.056
336 -0.1697,-0.053
337 -0.1608,-0.05
338 -0.1519,-0.046
339 -0.1431,-0.043
340 -0.1387,-0.042
341 -0.1304,-0.039
342 -0.1219,-0.036
343 -0.1132,-0.032
344 -0.1046,-0.029
345 -0.0959,-0.026
346 -0.0871,-0.023
347 -0.0784,-0.02
348 -0.0696,-0.017
349 -0.0608,-0.013
350 -0.052,-0.01
351 -0.0432,-0.007
352 -0.0343,-0.004
353 -0.0255,-0.0005
354 -0.0167,0.003
355 -0.0122,0.004
356 -0.0038,0.007
357 0.0047,0.011
358 0.0133,0.014
359 0.0219,0.017
360 0.0306,0.02
361 0.0392,0.023
362 0.0479,0.027
363 0.0567,0.03
364 0.0654,0.033
365 0.0742,0.037
366 0.0829,0.04
367 0.0917,0.043
368 0.1005,0.047
369 0.1093,0.05
370 0.1181,0.053
371 0.127,0.057
372 0.1314,0.058
373 0.1397,0.061
374 0.1482,0.065
375 0.1568,0.068
376 0.1654,0.071
377 0.174,0.075
378 0.1827,0.078
379 0.1914,0.081
380 0.2001,0.085
381 0.2088,0.088
382 0.2175,0.091
383 0.2262,0.095
384 0.235,0.098
385 0.2438,0.101
386 0.2525,0.105
387 0.2613,0.108
388 0.2701,0.112
389 0.2789,0.115
390 0.2833,0.117
391 0.2917,0.12
392 0.3002,0.123
393 0.3087,0.127
394 0.3173,0.13
395 0.3259,0.133
396 0.3345,0.137
397 0.3432,0.14
398 0.3519,0.143
399 0.3605,0.147
400 0.3692,0.15
401 0.378,0.154
402 0.3867,0.157
403 0.3954,0.16
404 0.4042,0.164
405 0.4129,0.167
406 0.4217,0.171
407 0.4305,0.174
408 0.4392,0.177
409 0.4436,0.179
410 0.452,0.182
411 0.4605,0.186
412 0.4691,0.189
413 0.4776,0.192
414 0.4862,0.196
415 0.4948,0.199
416 0.5035,0.202
417 0.5121,0.206
418 0.5208,0.209
419 0.5295,0.213
420 0.5382,0.216
421 0.5469,0.219
422 0.5556,0.223
423 0.5644,0.226
424 0.5731,0.229
425 0.5819,0.233
426 0.5906,0.236
427 0.5994,0.24
428 0.6082,0.243
429 0.6125,0.245
430 0.6209,0.248
431 0.6294,0.251
432 0.6379,0.255
433 0.6465,0.258
434 0.6551,0.261
435 0.6637,0.264
436 0.6724,0.268
437 0.681,0.271
438 0.6897,0.274
439 0.6984,0.278
440 0.7071,0.281
441 0.7158,0.284
442 0.7246,0.288
443 0.7333,0.291
444 0.7421,0.294
445 0.7508,0.298
446 0.7596,0.301
447 0.7684,0.304
448 0.7728,0.306
449 0.7813,0.309
450 0.7898,0.312
451 0.7983,0.315
452 0.8069,0.319
453 0.8155,0.322
454 0.8241,0.325
455 0.8327,0.328
456 0.8414,0.331
457 0.8501,0.335
458 0.8588,0.338
459 0.8675,0.341
460 0.8763,0.344
461 0.885,0.348
462 0.8938,0.351
463 0.9025,0.354
464 0.9113,0.357
465 0.9201,0.36
466 0.9289,0.363
467 0.9333,0.365
468 0.9417,0.368
469 0.9502,0.371
470 0.9588,0.374
471 0.9674,0.377
472 0.976,0.38
473 0.9847,0.383
474 0.9933,0.387
475 1.0021,0.39
476 1.0108,0.393
477 1.0195,0.396
478 1.0283,0.399
479 1.0371,0.402
480 1.0458,0.405
481 1.0546,0.408
482 1.0635,0.411
483 1.0723,0.414
484 1.0811,0.417
485 1.0855,0.419
486 1.0938,0.421
487 1.1024,0.424
488 1.111,0.427
489 1.1196,0.43
490 1.1282,0.433
491 1.1369,0.436
492 1.1457,0.439
493 1.1544,0.442
494 1.1632,0.445
495 1.1719,0.448
496 1.1807,0.451
497 1.1896,0.454
498 1.1984,0.456
499 1.2072,0.459
500 1.2161,0.462
501 1.2206,0.464
502 1.229,0.467
503 1.2375,0.469
504 1.2461,0.472
505 1.2547,0.475
506 1.2634,0.478
507 1.2721,0.481
508 1.2808,0.483
509 1.2896,0.486
510 1.2983,0.489
511 1.3071,0.492
512 1.3159,0.495
513 1.3248,0.497
514 1.3336,0.5
515 1.3425,0.503
516 1.3513,0.506
517 1.3558,0.507
518 1.3643,0.51
519 1.3728,0.513
520 1.3814,0.515
521 1.39,0.518
522 1.3987,0.521
523 1.4074,0.523
524 1.4161,0.526
525 1.4249,0.529
526 1.4337,0.532
527 1.4425,0.534
528 1.4513,0.537
529 1.4602,0.54
530 1.469,0.542
531 1.4779,0.545
532 1.4868,0.548
533 1.4912,0.549
534 1.4996,0.552
535 1.5081,0.554
536 1.5168,0.557
537 1.5254,0.56
538 1.5341,0.562
539 1.5428,0.565
540 1.5516,0.568
541 1.5604,0.57
542 1.5692,0.573
543 1.578,0.575
544 1.5869,0.578
545 1.5957,0.581
546 1.6046,0.583
547 1.6135,0.586
548 1.618,0.587
549 1.6264,0.59
550 1.635,0.592
551 1.6436,0.595
552 1.6522,0.598
553 1.6609,0.6
554 1.6696,0.603
555 1.6784,0.605
556 1.6872,0.608
557 1.696,0.61
558 1.7048,0.613
559 1.7136,0.616
560 1.7225,0.618
561 1.7314,0.621
562 1.7403,0.623
563 1.7492,0.626
564 1.7535,0.627
565 1.7618,0.63
566 1.7704,0.632
567 1.779,0.635
568 1.7877,0.637
569 1.7964,0.64
570 1.8052,0.642
571 1.8139,0.645
572 1.8227,0.647
573 1.8316,0.65
574 1.8404,0.652
575 1.8493,0.655
576 1.8581,0.657
577 1.867,0.66
578 1.8759,0.663
579 1.8803,0.664
580 1.8886,0.666
581 1.8972,0.669
582 1.9058,0.671
583 1.9145,0.674
584 1.9232,0.676
585 1.9319,0.679
586 1.9407,0.681
587 1.9495,0.684
588 1.9583,0.686
589 1.9671,0.689
590 1.9759,0.691
591 1.9848,0.694
592 1.9937,0.696
593 2.0025,0.699
594 2.007,0.7
595 2.0155,0.702
596 2.024,0.705
597 2.0326,0.707
598 2.0413,0.71
599 2.0499,0.712
600 2.0586,0.715
601 2.0674,0.717
602 2.0761,0.72
603 2.0849,0.722
604 2.0937,0.725
605 2.1025,0.727
606 2.1114,0.73
607 2.1202,0.732
608 2.1291,0.735
609 2.1379,0.737
610 2.1424,0.738
611 2.1509,0.741
612 2.1594,0.743
613 2.168,0.746
614 2.1766,0.748
615 2.1853,0.751
616 2.194,0.753
617 2.2027,0.756
618 2.2114,0.758
619 2.2202,0.761
620 2.229,0.763
621 2.2378,0.766
622 2.2466,0.768
623 2.2555,0.771
624 2.2643,0.773
625 2.2732,0.776
626 2.2821,0.778
627 2.2864,0.779
628 2.2947,0.782
629 2.3033,0.784
630 2.3119,0.787
631 2.3206,0.789
632 2.3292,0.792
633 2.338,0.794
634 2.3467,0.797
635 2.3555,0.799
636 2.3643,0.802
637 2.3731,0.804
638 2.3819,0.807
639 2.3907,0.809
640 2.3996,0.812
641 2.4084,0.814
642 2.4173,0.817
643 2.4217,0.818
644 2.43,0.821
645 2.4386,0.823
646 2.4472,0.826
647 2.4558,0.828
648 2.4645,0.831
649 2.4732,0.833
650 2.482,0.836
651 2.4907,0.838
652 2.4995,0.841
653 2.5083,0.844
654 2.5171,0.846
655 2.5259,0.849
656 2.5348,0.851
657 2.5436,0.854
658 2.5525,0.857
659 2.557,0.858
660 2.5654,0.86
661 2.5739,0.863
662 2.5825,0.865
663 2.5911,0.868
664 2.5998,0.871
665 2.6085,0.873
666 2.6172,0.876
667 2.626,0.879
668 2.6348,0.881
669 2.6436,0.884
670 2.6524,0.886
671 2.6612,0.889
672 2.6701,0.892
673 2.6789,0.894
674 2.6878,0.897
675 2.6923,0.899
676 2.7007,0.901
677 2.7092,0.904
678 2.7178,0.906
679 2.7265,0.909
680 2.7351,0.912
681 2.7438,0.914
682 2.7526,0.917
683 2.7614,0.92
684 2.7702,0.923
685 2.779,0.925
686 2.7878,0.928
687 2.7966,0.931
688 2.8055,0.934
689 2.8144,0.936
690 2.8233,0.939
691 2.8277,0.941
692 2.836,0.943
693 2.8446,0.946
694 2.8532,0.949
695 2.8618,0.951
696 2.8705,0.954
697 2.8793,0.957
698 2.8881,0.96
699 2.8969,0.963
700 2.9057,0.965
701 2.9145,0.968
702 2.9234,0.971
703 2.9322,0.974
704 2.9411,0.977
705 2.95,0.98
706 2.9545,0.981
707 2.9628,0.984
708 2.9713,0.987
709 2.98,0.99
710 2.9886,0.993
711 2.9974,0.995
712 3.0061,0.998
713 3.0149,1.001
714 3.0237,1.004
715 3.0325,1.007
716 3.0414,1.01
717 3.0503,1.013
718 3.0592,1.016
719 3.0681,1.019
720 3.0726,1.021
721 3.0811,1.024
722 3.0896,1.027
723 3.0982,1.029
724 3.1069,1.032
725 3.1156,1.035
726 3.1243,1.038
727 3.1331,1.041
728 3.1419,1.044
729 3.1507,1.048
730 3.1596,1.051
731 3.1685,1.054
732 3.1774,1.057
733 3.1863,1.06
734 3.1952,1.063
735 3.1996,1.065
736 3.2079,1.068
737 3.2165,1.071
738 3.2251,1.074
739 3.2338,1.077
740 3.2426,1.08
741 3.2514,1.083
742 3.2602,1.086
743 3.269,1.089
744 3.2779,1.092
745 3.2868,1.095
746 3.2957,1.099
747 3.3046,1.102
748 3.3092,1.103
749 3.3176,1.107
750 3.3261,1.11
751 3.3348,1.113
752 3.3434,1.116
753 3.3521,1.119
754 3.3609,1.122
755 3.3697,1.125
756 3.3785,1.129
757 3.3874,1.132
758 3.3963,1.135
759 3.4051,1.138
760 3.4141,1.141
761 3.423,1.145
762 3.4275,1.146
763 3.4359,1.149
764 3.4444,1.153
765 3.453,1.156
766 3.4617,1.159
767 3.4705,1.162
768 3.4792,1.165
769 3.488,1.169
770 3.4968,1.172
771 3.5057,1.175
772 3.5146,1.178
773 3.5235,1.182
774 3.5324,1.185
775 3.5413,1.188
776 3.5458,1.19
777 3.5541,1.193
778 3.5627,1.196
779 3.5713,1.199
780 3.58,1.202
781 3.5887,1.206
782 3.5975,1.209
783 3.6063,1.212
784 3.6151,1.216
785 3.6239,1.219
786 3.6328,1.222
787 3.6417,1.225
788 3.6506,1.229
789 3.6595,1.232
790 3.664,1.234
791 3.6723,1.237
792 3.6809,1.24
793 3.6895,1.243
794 3.6982,1.246
795 3.7069,1.25
796 3.7156,1.253
797 3.7244,1.256
798 3.7332,1.26
799 3.7421,1.263
800 3.7509,1.266
801 3.7598,1.269
802 3.7686,1.273
803 3.7775,1.276
804 3.7864,1.279
805 3.7908,1.281
806 3.799,1.284
807 3.8076,1.287
808 3.8163,1.29
809 3.8249,1.294
810 3.8337,1.297
811 3.8424,1.3
812 3.8512,1.303
813 3.86,1.307
814 3.8688,1.31
815 3.8776,1.313
816 3.8865,1.317
817 3.8953,1.32
818 3.9042,1.323
819 3.9131,1.327
820 3.9174,1.328
821 3.9257,1.331
822 3.9343,1.334
823 3.9429,1.338
824 3.9515,1.341
825 3.9602,1.344
826 3.9689,1.347
827 3.9777,1.35
828 3.9864,1.354
829 3.9952,1.357
830 4.004,1.36
831 4.0128,1.363
832 4.0217,1.367
833 4.0305,1.37
834 4.0393,1.373
835 4.0482,1.376
836 4.0525,1.378
837 4.0608,1.381
838 4.0693,1.384
839 4.0779,1.387
840 4.0866,1.391
841 4.0952,1.394
842 4.1039,1.397
843 4.1126,1.4
844 4.1213,1.403
845 4.1301,1.406
846 4.1388,1.41
847 4.1476,1.413
848 4.1564,1.416
849 4.1652,1.419
850 4.174,1.422
851 4.1828,1.426
852 4.1916,1.429
853 4.196,1.43
854 4.2043,1.433
855 4.2129,1.436
856 4.2214,1.44
857 4.23,1.443
858 4.2386,1.446
859 4.2473,1.449
860 4.256,1.452
861 4.2647,1.455
862 4.2734,1.458
863 4.2821,1.461
864 4.2908,1.465
865 4.2996,1.468
866 4.3083,1.471
867 4.3171,1.474
868 4.3259,1.477
869 4.3346,1.48
870 4.3434,1.483
871 4.3522,1.486
872 4.3566,1.488
873 4.3648,1.491
874 4.3734,1.494
875 4.3819,1.497
876 4.3905,1.5
877 4.3991,1.503
878 4.4078,1.506
879 4.4164,1.509
880 4.4251,1.512
881 4.4338,1.515
882 4.4425,1.518
883 4.4512,1.521
884 4.46,1.524
885 4.4687,1.527
886 4.4774,1.531
887 4.4862,1.534
888 4.495,1.537
889 4.5037,1.54
890 4.5125,1.543
891 4.5169,1.544
892 4.5253,1.547
893 4.5338,1.55
894 4.5424,1.553
895 4.5509,1.556
896 4.5595,1.559
897 4.5682,1.562
898 4.5768,1.565
899 4.5854,1.568
900 4.5941,1.571
901 4.6028,1.574
902 4.6115,1.577
903 4.6202,1.58
904 4.629,1.583
905 4.6377,1.586
906 4.6464,1.589
907 4.6552,1.592
908 4.664,1.595
909 4.6727,1.598
910 4.6815,1.601
911 4.6859,1.602
912 4.6943,1.605
913 4.7028,1.608
914 4.7114,1.611
915 4.7199,1.614
916 4.7285,1.617
917 4.7372,1.619
918 4.7458,1.622
919 4.7545,1.625
920 4.7631,1.628
921 4.7718,1.631
922 4.7806,1.634
923 4.7893,1.637
924 4.798,1.64
925 4.8068,1.643
926 4.8155,1.645
927 4.8243,1.648
928 4.8331,1.651
929 4.8418,1.654
930 4.8506,1.657
931 4.855,1.659
932 4.8634,1.661
933 4.8719,1.664
934 4.8805,1.667
935 4.889,1.67
936 4.8977,1.672
937 4.9063,1.675
938 4.915,1.678
939 4.9237,1.681
940 4.9324,1.684
941 4.9411,1.687
942 4.9498,1.689
943 4.9586,1.692
944 4.9673,1.695
945 4.9761,1.698
946 4.9849,1.701
947 4.9937,1.703
948 5.0025,1.706
949 5.0113,1.709
950 5.0157,1.71
951 5.024,1.713
952 5.0325,1.716
953 5.0411,1.719
954 5.0497,1.721
955 5.0584,1.724
956 5.0671,1.727
957 5.0758,1.729
958 5.0845,1.732
959 5.0932,1.735
960 5.102,1.738
961 5.1108,1.74
962 5.1196,1.743
963 5.1284,1.746
964 5.1372,1.749
965 5.146,1.751
966 5.1548,1.754
967 5.1593,1.756
968 5.1677,1.758
969 5.1762,1.761
970 5.1848,1.763
971 5.1934,1.766
972 5.2021,1.769
973 5.2108,1.771
974 5.2195,1.774
975 5.2282,1.777
976 5.237,1.779
977 5.2457,1.782
978 5.2545,1.785
979 5.2633,1.787
980 5.2722,1.79
981 5.281,1.793
982 5.2899,1.796
983 5.2987,1.798
984 5.3031,1.8
985 5.3115,1.802
986 5.32,1.805
987 5.3286,1.807
988 5.3373,1.81
989 5.346,1.812
990 5.3547,1.815
991 5.3634,1.818
992 5.3722,1.82
993 5.3809,1.823
994 5.3898,1.826
995 5.3986,1.828
996 5.4074,1.831
997 5.4163,1.834
998 5.4251,1.836
999 5.434,1.839
1000 5.4384,1.84
1001 5.4468,1.843
1002 5.4553,1.845
1003 5.464,1.848
1004 5.4726,1.85
1005 5.4813,1.853
1006 5.49,1.855
1007 5.4988,1.858
1008 5.5075,1.861
1009 5.5163,1.863
1010 5.5252,1.866
1011 5.534,1.868
1012 5.5429,1.871
1013 5.5517,1.874
1014 5.5606,1.876
1015 5.5695,1.879
1016 5.5739,1.88
1017 5.5822,1.883
1018 5.5907,1.885
1019 5.5994,1.888
1020 5.608,1.89
1021 5.6168,1.893
1022 5.6255,1.895
1023 5.6343,1.898
1024 5.6431,1.9
1025 5.6519,1.903
1026 5.6607,1.906
1027 5.6696,1.908
1028 5.6785,1.911
1029 5.6874,1.913
1030 5.6963,1.916
1031 5.7007,1.917
1032 5.709,1.92
1033 5.7176,1.922
1034 5.7262,1.925
1035 5.7349,1.927
1036 5.7436,1.93
1037 5.7523,1.932
1038 5.7611,1.935
1039 5.7699,1.937
1040 5.7787,1.94
1041 5.7876,1.942
1042 5.7964,1.945
1043 5.8053,1.948
1044 5.8142,1.95
1045 5.8231,1.953
1046 5.8276,1.954
1047 5.8359,1.956
1048 5.8445,1.959
1049 5.8531,1.961
1050 5.8618,1.964
1051 5.8705,1.966
1052 5.8792,1.969
1053 5.888,1.971
1054 5.8968,1.974
1055 5.9056,1.977
1056 5.9145,1.979
1057 5.9233,1.982
1058 5.9322,1.984
1059 5.9411,1.987
1060 5.95,1.989
1061 5.9545,1.991
1062 5.9628,1.993
1063 5.9713,1.995
1064 5.98,1.998
1065 5.9887,2
1066 5.9974,2.003
1067 x,green
1068 -3.9967,-4.04
1069 -3.9893,-4.033
1070 -3.9819,-4.025
1071 -3.9743,-4.017
1072 -3.9665,-4.01
1073 -3.955,-3.998
1074 -3.9476,-3.99
1075 -3.9402,-3.983
1076 -3.9327,-3.975
1077 -3.9251,-3.967
1078 -3.9173,-3.959
1079 -3.9059,-3.948
1080 -3.8985,-3.94
1081 -3.8911,-3.933
1082 -3.8836,-3.925
1083 -3.8759,-3.917
1084 -3.8681,-3.909
1085 -3.8567,-3.898
1086 -3.8494,-3.89
1087 -3.8419,-3.882
1088 -3.8344,-3.875
1089 -3.8267,-3.867
1090 -3.8189,-3.859
1091 -3.8076,-3.847
1092 -3.8002,-3.84
1093 -3.7928,-3.832
1094 -3.7852,-3.825
1095 -3.7775,-3.817
1096 -3.7696,-3.809
1097 -3.7585,-3.797
1098 -3.7511,-3.79
1099 -3.7436,-3.782
1100 -3.736,-3.775
1101 -3.7283,-3.767
1102 -3.7167,-3.755
1103 -3.7094,-3.747
1104 -3.702,-3.74
1105 -3.6945,-3.732
1106 -3.6869,-3.724
1107 -3.6791,-3.716
1108 -3.6676,-3.705
1109 -3.6602,-3.697
1110 -3.6528,-3.69
1111 -3.6453,-3.682
1112 -3.6377,-3.674
1113 -3.6299,-3.666
1114 -3.6184,-3.655
1115 -3.6111,-3.647
1116 -3.6036,-3.64
1117 -3.5961,-3.632
1118 -3.5885,-3.624
1119 -3.5806,-3.616
1120 -3.5693,-3.605
1121 -3.5619,-3.597
1122 -3.5545,-3.59
1123 -3.5469,-3.582
1124 -3.5392,-3.574
1125 -3.5314,-3.566
1126 -3.5201,-3.555
1127 -3.5127,-3.547
1128 -3.5053,-3.54
1129 -3.4977,-3.532
1130 -3.49,-3.524
1131 -3.4821,-3.516
1132 -3.471,-3.505
1133 -3.4636,-3.497
1134 -3.4561,-3.489
1135 -3.4485,-3.482
1136 -3.4408,-3.474
1137 -3.4291,-3.462
1138 -3.4218,-3.455
1139 -3.4144,-3.447
1140 -3.4069,-3.439
1141 -3.3993,-3.432
1142 -3.3915,-3.424
1143 -3.3799,-3.412
1144 -3.3726,-3.405
1145 -3.3651,-3.397
1146 -3.3576,-3.389
1147 -3.35,-3.382
1148 -3.3423,-3.374
1149 -3.3307,-3.362
1150 -3.3234,-3.355
1151 -3.3159,-3.347
1152 -3.3084,-3.339
1153 -3.3008,-3.332
1154 -3.293,-3.324
1155 -3.2815,-3.312
1156 -3.2741,-3.305
1157 -3.2667,-3.297
1158 -3.2592,-3.29
1159 -3.2515,-3.282
1160 -3.2437,-3.274
1161 -3.2323,-3.262
1162 -3.2249,-3.255
1163 -3.2174,-3.247
1164 -3.2099,-3.24
1165 -3.2023,-3.232
1166 -3.1944,-3.224
1167 -3.183,-3.212
1168 -3.1756,-3.205
1169 -3.1682,-3.197
1170 -3.1606,-3.19
1171 -3.153,-3.182
1172 -3.1451,-3.174
1173 -3.1337,-3.162
1174 -3.1263,-3.155
1175 -3.1189,-3.147
1176 -3.1113,-3.14
1177 -3.1037,-3.132
1178 -3.0958,-3.124
1179 -3.0844,-3.113
1180 -3.077,-3.105
1181 -3.0696,-3.098
1182 -3.062,-3.09
1183 -3.0544,-3.082
1184 -3.0465,-3.074
1185 -3.0351,-3.063
1186 -3.0277,-3.055
1187 -3.0203,-3.048
1188 -3.0127,-3.04
1189 -3.005,-3.032
1190 -2.9972,-3.024
1191 -2.9858,-3.013
1192 -2.9784,-3.005
1193 -2.9709,-2.998
1194 -2.9634,-2.99
1195 -2.9557,-2.983
1196 -2.9479,-2.975
1197 -2.9364,-2.963
1198 -2.929,-2.956
1199 -2.9216,-2.948
1200 -2.914,-2.941
1201 -2.9064,-2.933
1202 -2.8985,-2.925
1203 -2.8871,-2.913
1204 -2.8797,-2.906
1205 -2.8722,-2.898
1206 -2.8647,-2.891
1207 -2.857,-2.883
1208 -2.8492,-2.875
1209 -2.8377,-2.864
1210 -2.8303,-2.856
1211 -2.8228,-2.849
1212 -2.8153,-2.841
1213 -2.8076,-2.833
1214 -2.7998,-2.826
1215 -2.7883,-2.814
1216 -2.7809,-2.807
1217 -2.7734,-2.799
1218 -2.7659,-2.791
1219 -2.7583,-2.784
1220 -2.7505,-2.776
1221 -2.7388,-2.764
1222 -2.7315,-2.757
1223 -2.724,-2.749
1224 -2.7165,-2.742
1225 -2.7089,-2.734
1226 -2.7011,-2.726
1227 -2.6894,-2.715
1228 -2.682,-2.707
1229 -2.6746,-2.7
1230 -2.6671,-2.692
1231 -2.6595,-2.685
1232 -2.6517,-2.677
1233 -2.6438,-2.669
1234 -2.6326,-2.658
1235 -2.6252,-2.65
1236 -2.6177,-2.643
1237 -2.6101,-2.635
1238 -2.6023,-2.627
1239 -2.5944,-2.619
1240 -2.5831,-2.608
1241 -2.5757,-2.601
1242 -2.5682,-2.593
1243 -2.5606,-2.586
1244 -2.5529,-2.578
1245 -2.5451,-2.57
1246 -2.5337,-2.559
1247 -2.5263,-2.551
1248 -2.5188,-2.544
1249 -2.5112,-2.536
1250 -2.5035,-2.529
1251 -2.4957,-2.521
1252 -2.4843,-2.509
1253 -2.4768,-2.502
1254 -2.4694,-2.494
1255 -2.4618,-2.487
1256 -2.4541,-2.479
1257 -2.4463,-2.471
1258 -2.4348,-2.46
1259 -2.4274,-2.452
1260 -2.4199,-2.445
1261 -2.4124,-2.437
1262 -2.4047,-2.43
1263 -2.3969,-2.422
1264 -2.3854,-2.411
1265 -2.378,-2.403
1266 -2.3705,-2.396
1267 -2.363,-2.388
1268 -2.3553,-2.381
1269 -2.3475,-2.373
1270 -2.3359,-2.361
1271 -2.3285,-2.354
1272 -2.3211,-2.346
1273 -2.3135,-2.339
1274 -2.3059,-2.331
1275 -2.2981,-2.324
1276 -2.2865,-2.312
1277 -2.2791,-2.305
1278 -2.2717,-2.297
1279 -2.2641,-2.29
1280 -2.2565,-2.282
1281 -2.2488,-2.275
1282 -2.2371,-2.263
1283 -2.2297,-2.256
1284 -2.2222,-2.248
1285 -2.2147,-2.241
1286 -2.2071,-2.233
1287 -2.1994,-2.225
1288 -2.1877,-2.214
1289 -2.1803,-2.206
1290 -2.1728,-2.199
1291 -2.1653,-2.192
1292 -2.1577,-2.184
1293 -2.15,-2.176
1294 -2.1383,-2.165
1295 -2.1309,-2.157
1296 -2.1235,-2.15
1297 -2.116,-2.143
1298 -2.1084,-2.135
1299 -2.1006,-2.127
1300 -2.0889,-2.116
1301 -2.0815,-2.108
1302 -2.0741,-2.101
1303 -2.0666,-2.094
1304 -2.059,-2.086
1305 -2.0512,-2.079
1306 -2.0395,-2.067
1307 -2.0322,-2.06
1308 -2.0247,-2.052
1309 -2.0172,-2.045
1310 -2.0096,-2.037
1311 -2.0019,-2.03
1312 -1.9902,-2.018
1313 -1.9828,-2.011
1314 -1.9754,-2.003
1315 -1.9679,-1.996
1316 -1.9603,-1.989
1317 -1.9525,-1.981
1318 -1.9409,-1.969
1319 -1.9335,-1.962
1320 -1.9261,-1.955
1321 -1.9186,-1.947
1322 -1.911,-1.94
1323 -1.9032,-1.932
1324 -1.8916,-1.921
1325 -1.8842,-1.913
1326 -1.8768,-1.906
1327 -1.8693,-1.899
1328 -1.8616,-1.891
1329 -1.8538,-1.883
1330 -1.8423,-1.872
1331 -1.8349,-1.865
1332 -1.8275,-1.857
1333 -1.82,-1.85
1334 -1.8123,-1.842
1335 -1.8045,-1.835
1336 -1.7931,-1.823
1337 -1.7857,-1.816
1338 -1.7782,-1.809
1339 -1.7707,-1.801
1340 -1.763,-1.794
1341 -1.7552,-1.786
1342 -1.7438,-1.775
1343 -1.7364,-1.767
1344 -1.729,-1.76
1345 -1.7214,-1.753
1346 -1.7137,-1.745
1347 -1.7058,-1.737
1348 -1.6946,-1.726
1349 -1.6872,-1.719
1350 -1.6797,-1.712
1351 -1.6721,-1.704
1352 -1.6644,-1.696
1353 -1.6527,-1.685
1354 -1.6454,-1.678
1355 -1.638,-1.67
1356 -1.6305,-1.663
1357 -1.6229,-1.655
1358 -1.6151,-1.648
1359 -1.6035,-1.636
1360 -1.5962,-1.629
1361 -1.5887,-1.622
1362 -1.5812,-1.614
1363 -1.5736,-1.607
1364 -1.5658,-1.599
1365 -1.5543,-1.588
1366 -1.547,-1.58
1367 -1.5395,-1.573
1368 -1.532,-1.566
1369 -1.5243,-1.558
1370 -1.5165,-1.55
1371 -1.5052,-1.539
1372 -1.4978,-1.532
1373 -1.4903,-1.524
1374 -1.4828,-1.517
1375 -1.4751,-1.509
1376 -1.4672,-1.501
1377 -1.456,-1.49
1378 -1.4486,-1.483
1379 -1.4411,-1.475
1380 -1.4335,-1.468
1381 -1.4258,-1.46
1382 -1.4142,-1.449
1383 -1.4068,-1.441
1384 -1.3994,-1.434
1385 -1.3919,-1.427
1386 -1.3843,-1.419
1387 -1.3765,-1.411
1388 -1.365,-1.4
1389 -1.3576,-1.393
1390 -1.3502,-1.385
1391 -1.3427,-1.378
1392 -1.3351,-1.37
1393 -1.3272,-1.362
1394 -1.3158,-1.351
1395 -1.3085,-1.344
1396 -1.301,-1.336
1397 -1.2935,-1.329
1398 -1.2858,-1.321
1399 -1.2779,-1.313
1400 -1.2667,-1.302
1401 -1.2593,-1.294
1402 -1.2518,-1.287
1403 -1.2443,-1.279
1404 -1.2366,-1.272
1405 -1.2286,-1.264
1406 -1.2175,-1.253
1407 -1.2101,-1.245
1408 -1.2026,-1.238
1409 -1.195,-1.23
1410 -1.1873,-1.222
1411 -1.1757,-1.211
1412 -1.1683,-1.203
1413 -1.1609,-1.196
1414 -1.1534,-1.188
1415 -1.1458,-1.181
1416 -1.138,-1.173
1417 -1.1265,-1.161
1418 -1.1192,-1.154
1419 -1.1117,-1.146
1420 -1.1042,-1.139
1421 -1.0966,-1.131
1422 -1.0888,-1.123
1423 -1.0773,-1.112
1424 -1.07,-1.104
1425 -1.0625,-1.097
1426 -1.055,-1.089
1427 -1.0473,-1.081
1428 -1.0395,-1.074
1429 -1.0282,-1.062
1430 -1.0208,-1.055
1431 -1.0133,-1.047
1432 -1.0058,-1.039
1433 -0.9981,-1.032
1434 -0.9902,-1.024
1435 -0.979,-1.012
1436 -0.9716,-1.005
1437 -0.9641,-0.997
1438 -0.9566,-0.989
1439 -0.9489,-0.982
1440 -0.941,-0.973
1441 -0.9298,-0.962
1442 -0.9224,-0.955
1443 -0.9149,-0.947
1444 -0.9073,-0.939
1445 -0.8996,-0.931
1446 -0.8879,-0.919
1447 -0.8806,-0.912
1448 -0.8732,-0.904
1449 -0.8657,-0.897
1450 -0.8581,-0.889
1451 -0.8504,-0.881
1452 -0.8387,-0.869
1453 -0.8314,-0.861
1454 -0.824,-0.854
1455 -0.8165,-0.846
1456 -0.8089,-0.838
1457 -0.8011,-0.83
1458 -0.7895,-0.818
1459 -0.7822,-0.811
1460 -0.7747,-0.803
1461 -0.7672,-0.796
1462 -0.7596,-0.788
1463 -0.7519,-0.78
1464 -0.7403,-0.768
1465 -0.7329,-0.76
1466 -0.7255,-0.753
1467 -0.718,-0.745
1468 -0.7104,-0.737
1469 -0.7027,-0.729
1470 -0.6911,-0.717
1471 -0.6837,-0.71
1472 -0.6763,-0.702
1473 -0.6688,-0.694
1474 -0.6612,-0.686
1475 -0.6534,-0.678
1476 -0.6419,-0.666
1477 -0.6345,-0.659
1478 -0.6271,-0.651
1479 -0.6196,-0.643
1480 -0.612,-0.636
1481 -0.6042,-0.628
1482 -0.5927,-0.616
1483 -0.5853,-0.608
1484 -0.5779,-0.6
1485 -0.5704,-0.593
1486 -0.5627,-0.585
1487 -0.555,-0.577
1488 -0.5435,-0.565
1489 -0.5361,-0.557
1490 -0.5287,-0.549
1491 -0.5211,-0.542
1492 -0.5135,-0.534
1493 -0.5057,-0.526
1494 -0.4942,-0.514
1495 -0.4869,-0.506
1496 -0.4794,-0.499
1497 -0.4719,-0.491
1498 -0.4643,-0.483
1499 -0.4565,-0.475
1500 -0.4451,-0.463
1501 -0.4377,-0.455
1502 -0.4302,-0.448
1503 -0.4227,-0.44
1504 -0.4151,-0.432
1505 -0.4073,-0.424
1506 -0.3959,-0.412
1507 -0.3885,-0.405
1508 -0.381,-0.397
1509 -0.3735,-0.389
1510 -0.3659,-0.381
1511 -0.358,-0.373
1512 -0.3467,-0.361
1513 -0.3393,-0.354
1514 -0.3319,-0.346
1515 -0.3243,-0.338
1516 -0.3167,-0.331
1517 -0.3088,-0.322
1518 -0.2975,-0.311
1519 -0.2901,-0.303
1520 -0.2827,-0.295
1521 -0.2751,-0.288
1522 -0.2674,-0.28
1523 -0.2596,-0.272
1524 -0.2483,-0.26
1525 -0.241,-0.253
1526 -0.2335,-0.245
1527 -0.2259,-0.237
1528 -0.2182,-0.229
1529 -0.2104,-0.221
1530 -0.1992,-0.21
1531 -0.1918,-0.202
1532 -0.1843,-0.194
1533 -0.1768,-0.187
1534 -0.169,-0.179
1535 -0.1574,-0.167
1536 -0.1501,-0.159
1537 -0.1427,-0.152
1538 -0.1352,-0.144
1539 -0.1276,-0.136
1540 -0.1198,-0.128
1541 -0.1083,-0.116
1542 -0.1009,-0.109
1543 -0.0935,-0.101
1544 -0.086,-0.094
1545 -0.0784,-0.086
1546 -0.0706,-0.078
1547 -0.0592,-0.066
1548 -0.0518,-0.059
1549 -0.0444,-0.051
1550 -0.0369,-0.043
1551 -0.0292,-0.036
1552 -0.0214,-0.028
1553 -0.0101,-0.016
1554 -0.0027,-0.009
1555 0.0047,-0.001
1556 0.0123,0.006
1557 0.0199,0.014
1558 0.0278,0.022
1559 0.039,0.034
1560 0.0463,0.041
1561 0.0538,0.049
1562 0.0614,0.056
1563 0.0691,0.064
1564 0.0807,0.076
1565 0.088,0.083
1566 0.0954,0.091
1567 0.1029,0.098
1568 0.1105,0.106
1569 0.1183,0.114
1570 0.1297,0.125
1571 0.1371,0.133
1572 0.1445,0.14
1573 0.152,0.148
1574 0.1597,0.155
1575 0.1676,0.163
1576 0.1787,0.175
1577 0.1861,0.182
1578 0.1935,0.189
1579 0.2011,0.197
1580 0.2089,0.205
1581 0.2204,0.216
1582 0.2277,0.224
1583 0.2351,0.231
1584 0.2426,0.239
1585 0.2503,0.246
1586 0.2581,0.254
1587 0.2694,0.265
1588 0.2767,0.273
1589 0.2842,0.28
1590 0.2917,0.288
1591 0.2994,0.295
1592 0.311,0.307
1593 0.3183,0.314
1594 0.3257,0.322
1595 0.3332,0.329
1596 0.3408,0.337
1597 0.3486,0.345
1598 0.36,0.356
1599 0.3673,0.363
1600 0.3748,0.371
1601 0.3823,0.378
1602 0.39,0.386
1603 0.3978,0.394
1604 0.409,0.405
1605 0.4163,0.412
1606 0.4238,0.42
1607 0.4314,0.427
1608 0.4391,0.435
1609 0.4506,0.446
1610 0.4579,0.454
1611 0.4653,0.461
1612 0.4728,0.468
1613 0.4805,0.476
1614 0.4883,0.484
1615 0.4995,0.495
1616 0.5069,0.502
1617 0.5144,0.51
1618 0.5219,0.517
1619 0.5297,0.525
1620 0.5412,0.536
1621 0.5485,0.544
1622 0.5559,0.551
1623 0.5634,0.558
1624 0.571,0.566
1625 0.5789,0.574
1626 0.5901,0.585
1627 0.5975,0.592
1628 0.6049,0.6
1629 0.6125,0.607
1630 0.6202,0.615
1631 0.6318,0.627
1632 0.6391,0.634
1633 0.6465,0.641
1634 0.654,0.649
1635 0.6616,0.656
1636 0.6694,0.664
1637 0.6807,0.675
1638 0.6881,0.683
1639 0.6955,0.69
1640 0.7031,0.697
1641 0.7107,0.705
1642 0.7224,0.717
1643 0.7297,0.724
1644 0.7371,0.731
1645 0.7446,0.739
1646 0.7522,0.746
1647 0.7599,0.754
1648 0.7714,0.765
1649 0.7787,0.773
1650 0.7861,0.78
1651 0.7937,0.788
1652 0.8013,0.795
1653 0.8092,0.803
1654 0.8204,0.814
1655 0.8277,0.822
1656 0.8352,0.829
1657 0.8428,0.837
1658 0.8505,0.844
1659 0.862,0.856
1660 0.8694,0.863
1661 0.8768,0.871
1662 0.8843,0.878
1663 0.8919,0.886
1664 0.8997,0.894
1665 0.9111,0.905
1666 0.9184,0.912
1667 0.9258,0.92
1668 0.9334,0.927
1669 0.9411,0.935
1670 0.9489,0.943
1671 0.9601,0.954
1672 0.9675,0.962
1673 0.9749,0.969
1674 0.9825,0.977
1675 0.9903,0.985
1676 1.0018,0.996
1677 1.0092,1.004
1678 1.0166,1.011
1679 1.0241,1.019
1680 1.0317,1.026
1681 1.0395,1.034
1682 1.0509,1.046
1683 1.0582,1.053
1684 1.0657,1.061
1685 1.0732,1.068
1686 1.0809,1.076
1687 1.0887,1.084
1688 1.1,1.095
1689 1.1073,1.103
1690 1.1148,1.11
1691 1.1224,1.118
1692 1.1301,1.126
1693 1.1417,1.137
1694 1.1491,1.145
1695 1.1565,1.152
1696 1.164,1.16
1697 1.1715,1.168
1698 1.1793,1.176
1699 1.1909,1.187
1700 1.1982,1.195
1701 1.2056,1.202
1702 1.2131,1.21
1703 1.2207,1.218
1704 1.2285,1.225
1705 1.24,1.237
1706 1.2474,1.245
1707 1.2548,1.252
1708 1.2623,1.26
1709 1.2699,1.268
1710 1.2778,1.276
1711 1.2891,1.287
1712 1.2965,1.295
1713 1.304,1.302
1714 1.3115,1.31
1715 1.3192,1.318
1716 1.327,1.326
1717 1.3383,1.337
1718 1.3457,1.345
1719 1.3532,1.352
1720 1.3607,1.36
1721 1.3684,1.368
1722 1.3763,1.376
1723 1.3875,1.387
1724 1.3949,1.395
1725 1.4024,1.402
1726 1.4099,1.41
1727 1.4176,1.418
1728 1.4255,1.426
1729 1.4367,1.437
1730 1.4441,1.445
1731 1.4516,1.453
1732 1.4591,1.46
1733 1.4669,1.468
1734 1.4785,1.48
1735 1.4859,1.488
1736 1.4933,1.495
1737 1.5008,1.503
1738 1.5084,1.511
1739 1.5161,1.519
1740 1.5277,1.53
1741 1.5351,1.538
1742 1.5425,1.545
1743 1.55,1.553
1744 1.5576,1.561
1745 1.5654,1.569
1746 1.577,1.581
1747 1.5843,1.588
1748 1.5917,1.596
1749 1.5992,1.603
1750 1.6069,1.611
1751 1.6146,1.619
1752 1.6262,1.631
1753 1.6335,1.638
1754 1.641,1.646
1755 1.6485,1.654
1756 1.6561,1.661
1757 1.6639,1.669
1758 1.6754,1.681
1759 1.6828,1.689
1760 1.6902,1.696
1761 1.6977,1.704
1762 1.7054,1.712
1763 1.7132,1.72
1764 1.7246,1.731
1765 1.732,1.739
1766 1.7394,1.746
1767 1.747,1.754
1768 1.7546,1.762
1769 1.7624,1.77
1770 1.7739,1.781
1771 1.7812,1.789
1772 1.7887,1.796
1773 1.7962,1.804
1774 1.8039,1.812
1775 1.8117,1.82
1776 1.8231,1.831
1777 1.8305,1.839
1778 1.8379,1.847
1779 1.8455,1.854
1780 1.8531,1.862
1781 1.861,1.87
1782 1.8723,1.882
1783 1.8797,1.889
1784 1.8872,1.897
1785 1.8947,1.904
1786 1.9024,1.912
1787 1.9103,1.92
1788 1.9216,1.931
1789 1.929,1.939
1790 1.9364,1.947
1791 1.944,1.954
1792 1.9517,1.962
1793 1.9595,1.97
1794 1.9708,1.981
1795 1.9782,1.989
1796 1.9857,1.996
1797 1.9932,2.004
1798 2.0009,2.012
1799 2.0088,2.02
1800 2.02,2.031
1801 2.0274,2.039
1802 2.0349,2.046
1803 2.0425,2.054
1804 2.0502,2.061
1805 2.0619,2.073
1806 2.0693,2.081
1807 2.0767,2.088
1808 2.0842,2.096
1809 2.0918,2.103
1810 2.0995,2.111
1811 2.1111,2.123
1812 2.1185,2.13
1813 2.1259,2.138
1814 2.1334,2.145
1815 2.141,2.153
1816 2.1488,2.161
1817 2.1604,2.172
1818 2.1677,2.18
1819 2.1751,2.187
1820 2.1827,2.195
1821 2.1903,2.202
1822 2.1981,2.21
1823 2.2096,2.222
1824 2.2169,2.229
1825 2.2244,2.236
1826 2.2319,2.244
1827 2.2395,2.252
1828 2.2474,2.259
1829 2.2588,2.271
1830 2.2662,2.278
1831 2.2736,2.286
1832 2.2812,2.293
1833 2.2888,2.301
1834 2.2967,2.309
1835 2.308,2.32
1836 2.3154,2.327
1837 2.3228,2.335
1838 2.3304,2.342
1839 2.3381,2.35
1840 2.346,2.358
1841 2.3572,2.369
1842 2.3646,2.376
1843 2.3721,2.384
1844 2.3797,2.391
1845 2.3874,2.399
1846 2.3991,2.411
1847 2.4064,2.418
1848 2.4138,2.425
1849 2.4213,2.433
1850 2.4289,2.44
1851 2.4367,2.448
1852 2.4483,2.46
1853 2.4556,2.467
1854 2.4631,2.474
1855 2.4706,2.482
1856 2.4782,2.489
1857 2.486,2.497
1858 2.4975,2.508
1859 2.5048,2.516
1860 2.5123,2.523
1861 2.5198,2.531
1862 2.5274,2.538
1863 2.5353,2.546
1864 2.5467,2.557
1865 2.5541,2.565
1866 2.5615,2.572
1867 2.569,2.579
1868 2.5767,2.587
1869 2.5846,2.595
1870 2.5959,2.606
1871 2.6033,2.613
1872 2.6107,2.621
1873 2.6183,2.628
1874 2.626,2.636
1875 2.6339,2.644
1876 2.6451,2.655
1877 2.6525,2.662
1878 2.66,2.669
1879 2.6676,2.677
1880 2.6753,2.685
1881 2.6869,2.696
1882 2.6943,2.703
1883 2.7017,2.711
1884 2.7092,2.718
1885 2.7168,2.726
1886 2.7246,2.733
1887 2.7361,2.745
1888 2.7435,2.752
1889 2.7509,2.759
1890 2.7584,2.767
1891 2.7661,2.774
1892 2.7739,2.782
1893 2.7853,2.793
1894 2.7927,2.801
1895 2.8001,2.808
1896 2.8077,2.815
1897 2.8154,2.823
1898 2.8232,2.831
1899 2.8345,2.842
1900 2.8419,2.849
1901 2.8494,2.857
1902 2.8569,2.864
1903 2.8646,2.872
1904 2.8763,2.883
1905 2.8837,2.891
1906 2.8911,2.898
1907 2.8986,2.905
1908 2.9062,2.913
1909 2.9139,2.92
1910 2.9255,2.932
1911 2.9329,2.939
1912 2.9403,2.946
1913 2.9478,2.954
1914 2.9555,2.961
1915 2.9633,2.969
1916 2.9747,2.98
1917 2.9821,2.988
1918 2.9895,2.995
1919 2.9971,3.002
1920 3.0047,3.01
0 -errorreport ../test/extrapolate_relations_smooth.xml -regression
0 <ErrorReport>
1 <Application VersionNumber="8.2"/>
2 <Document AxesPointsRequired="0" VersionNumber="8.2">
3 <Image Height="252" Width="1221"><![CDATA[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]]></Image>
4 <CoordSystem>
5 <General ExtraPrecision="1" CursorSize="3"/>
6 <Coords ScaleYRadiusString="Linear" ScaleYRadius="0" UnitsDate="3" UnitsDateString="YYYY/MM/DD" UnitsRadius="0" UnitsThetaString="Degrees (DDD.DDDDD)" UnitsTimeString="HH:MM:SS" ScaleXThetaString="Linear" UnitsX="0" UnitsY="0" Coords="0" UnitsRadiusString="Number" Type="0" UnitsTime="2" ScaleXTheta="0" UnitsTheta="0" UnitsYString="Number" TypeString="Cartesian" UnitsXString="Number"/>
7 <DigitizeCurve CursorInnerRadius="5" CursorStandardCross="True" CursorSize="1" CursorLineWidth="2"/>
8 <Export DelimiterString="Commas" LayoutFunctionsString="OnePerLine" PointsIntervalRelations="1" Header="1" HeaderString="Simple" PointsSelectionRelationsString="Unknown" PointsSelectionFunctions="3" PointsIntervalUnitsFunctions="1" PointsSelectionFunctionsString="Raw" OverrideCsvTsv="True" LayoutFunctions="1" PointsIntervalFunctions="10" PointsSelectionRelations="3" PointsIntervalUnitsRelations="1" Delimiter="0" XLabel="x">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker LineColor="6" Mode="1" Seconds="3"/>
12 <GridDisplay ColorString="Black" Stable="False" DisableX="0" StepX="1" DisableY="0" StepY="1" CountX="2" StartX="0" Color="0" CountY="2" StartY="0" StopX="1" StopY="1"/>
13 <GridRemoval CoordDisableYString="Count" CoordDisableXString="Count" Stable="False" StepX="0" DefinedGridLines="False" StepY="0" CoordDisableX="0" CountX="2" StartX="0" CoordDisableY="0" CountY="2" StartY="0" StopX="0" CloseDistance="10" StopY="0"/>
14 <PointMatch ColorCandidateString="Yellow" ColorAcceptedString="Green" ColorCandidate="7" ColorRejectedString="Red" PointSize="48" ColorRejected="6" ColorAccepted="4"/>
15 <Segments FillCorners="False" LineColor="4" MinLength="2" LineWidth="4" LineColorString="Green" PointSeparation="25"/>
16 <Curve CurveName="Axes">
17 <ColorFilter CurveName="Axes" HueHigh="360" Mode="2" IntensityLow="0" SaturationLow="50" ForegroundLow="0" ModeString="Intensity" IntensityHigh="50" ValueHigh="50" ForegroundHigh="10" ValueLow="0" HueLow="180" SaturationHigh="100"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve" ConnectAs="4" Color="8" Width="0"/>
20 <PointStyle ShapeString="Cross" ColorString="Red" LineWidth="1" Shape="1" Radius="10" Color="6"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter CurveName="Curve1" HueHigh="360" Mode="2" IntensityLow="0" SaturationLow="50" ForegroundLow="0" ModeString="Intensity" IntensityHigh="50" ValueHigh="50" ForegroundHigh="10" ValueLow="0" HueLow="180" SaturationHigh="100"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
29 <PointStyle ShapeString="Cross" ColorString="Blue" LineWidth="1" Shape="1" Radius="10" Color="1"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem WordSize="32" Endian="LittleEndian"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd Description="Curve add/remove" Type="CmdSettingsCurveAddRemove">
39 <CurvesGraphs>
40 <Curve CurveName="Curve1">
41 <ColorFilter CurveName="Curve1" HueHigh="360" Mode="2" IntensityLow="0" SaturationLow="50" ForegroundLow="0" ModeString="Intensity" IntensityHigh="50" ValueHigh="50" ForegroundHigh="10" ValueLow="0" HueLow="180" SaturationHigh="100"/>
42 <CurveStyle CurveName="Curve1">
43 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
44 <PointStyle ShapeString="Cross" ColorString="Blue" LineWidth="1" Shape="1" Radius="10" Color="1"/>
45 </CurveStyle>
46 <CurvePoints/>
47 </Curve>
48 </CurvesGraphs>
49 <CurvesGraphs>
50 <Curve CurveName="red">
51 <ColorFilter CurveName="red" HueHigh="360" Mode="2" IntensityLow="0" SaturationLow="50" ForegroundLow="0" ModeString="Intensity" IntensityHigh="50" ValueHigh="50" ForegroundHigh="10" ValueLow="0" HueLow="180" SaturationHigh="100"/>
52 <CurveStyle CurveName="red">
53 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
54 <PointStyle ShapeString="Cross" ColorString="Blue" LineWidth="1" Shape="1" Radius="10" Color="1"/>
55 </CurveStyle>
56 <CurvePoints/>
57 </Curve>
58 <Curve CurveName="green">
59 <ColorFilter CurveName="green" HueHigh="360" Mode="2" IntensityLow="0" SaturationLow="50" ForegroundLow="0" ModeString="Intensity" IntensityHigh="50" ValueHigh="50" ForegroundHigh="10" ValueLow="0" HueLow="180" SaturationHigh="100"/>
60 <CurveStyle CurveName="green">
61 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
62 <PointStyle ShapeString="X" ColorString="Blue" LineWidth="1" Shape="5" Radius="10" Color="1"/>
63 </CurveStyle>
64 <CurvePoints/>
65 </Curve>
66 </CurvesGraphs>
67 </Cmd>
68 <Cmd Description="Curve Properties settings" Type="CmdSettingsCurveProperties">
69 <CurveStyles>
70 <CurveStyle CurveName="green">
71 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
72 <PointStyle ShapeString="X" ColorString="Blue" LineWidth="1" Shape="5" Radius="10" Color="1"/>
73 </CurveStyle>
74 <CurveStyle CurveName="red">
75 <LineStyle ColorString="Blue" ConnectAsString="FunctionSmooth" ConnectAs="0" Color="1" Width="1"/>
76 <PointStyle ShapeString="Cross" ColorString="Blue" LineWidth="1" Shape="1" Radius="10" Color="1"/>
77 </CurveStyle>
78 <CurveStyle CurveName="Axes">
79 <LineStyle ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve" ConnectAs="4" Color="8" Width="0"/>
80 <PointStyle ShapeString="Cross" ColorString="Red" LineWidth="1" Shape="1" Radius="10" Color="6"/>
81 </CurveStyle>
82 </CurveStyles>
83 <CurveStyles>
84 <CurveStyle CurveName="green">
85 <LineStyle ColorString="Green" ConnectAsString="RelationSmooth" ConnectAs="2" Color="4" Width="1"/>
86 <PointStyle ShapeString="X" ColorString="Green" LineWidth="1" Shape="5" Radius="10" Color="4"/>
87 </CurveStyle>
88 <CurveStyle CurveName="red">
89 <LineStyle ColorString="Red" ConnectAsString="RelationSmooth" ConnectAs="2" Color="6" Width="1"/>
90 <PointStyle ShapeString="Cross" ColorString="Red" LineWidth="1" Shape="1" Radius="10" Color="6"/>
91 </CurveStyle>
92 <CurveStyle CurveName="Axes">
93 <LineStyle ColorString="Transparent" ConnectAsString="ConnectSkipForAxisCurve" ConnectAs="4" Color="8" Width="0"/>
94 <PointStyle ShapeString="Cross" ColorString="Red" LineWidth="1" Shape="1" Radius="10" Color="6"/>
95 </CurveStyle>
96 </CurveStyles>
97 </Cmd>
98 <Cmd Description="Add axis point" Ordinal="1" IsXOnly="False" Type="CmdAddPointAxis" Identifier="Axes&#x9;point&#x9;1" ScreenX="493.404" GraphX="0" ScreenY="109.88" GraphY="0"/>
99 <Cmd Description="Add axis point" Ordinal="2" IsXOnly="False" Type="CmdAddPointAxis" Identifier="Axes&#x9;point&#x9;3" ScreenX="1200.85" GraphX="6" ScreenY="109.88" GraphY="0"/>
100 <Cmd Description="Add axis point" Ordinal="3" IsXOnly="False" Type="CmdAddPointAxis" Identifier="Axes&#x9;point&#x9;5" ScreenX="493.404" GraphX="0" ScreenY="20.7258" GraphY="3"/>
101 <Cmd Description="Add graph point" Ordinal="1" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;6" ScreenX="138.292" ScreenY="140.475"/>
102 <Cmd Description="Add graph point" Ordinal="1" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;7" ScreenX="257.126" ScreenY="129.619"/>
103 <Cmd Description="Add graph point" Ordinal="2.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;8" ScreenX="375.265" ScreenY="119.749"/>
104 <Cmd Description="Add graph point" Ordinal="3.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;9" ScreenX="494.098" ScreenY="109.551"/>
105 <Cmd Description="Add graph point" Ordinal="4.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;10" ScreenX="610.847" ScreenY="98.3655"/>
106 <Cmd Description="Add graph point" Ordinal="5.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;11" ScreenX="728.986" ScreenY="89.154"/>
107 <Cmd Description="Add graph point" Ordinal="6.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;12" ScreenX="847.125" ScreenY="80.2715"/>
108 <Cmd Description="Add graph point" Ordinal="7.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;13" ScreenX="965.959" ScreenY="69.4151"/>
109 <Cmd Description="Add graph point" Ordinal="8.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;14" ScreenX="1082.71" ScreenY="59.2167"/>
110 <Cmd Description="Add graph point" Ordinal="9.5" CurveName="red" Type="CmdAddPointGraph" Identifier="red&#x9;point&#x9;15" ScreenX="1200.85" ScreenY="50.3342"/>
111 <Cmd Description="Add graph point" Ordinal="1" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;16" ScreenX="20.848" ScreenY="230.287"/>
112 <Cmd Description="Add graph point" Ordinal="1" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;17" ScreenX="138.987" ScreenY="200.021"/>
113 <Cmd Description="Add graph point" Ordinal="2.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;18" ScreenX="257.821" ScreenY="170.084"/>
114 <Cmd Description="Add graph point" Ordinal="3.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;19" ScreenX="375.96" ScreenY="140.475"/>
115 <Cmd Description="Add graph point" Ordinal="4.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;20" ScreenX="494.098" ScreenY="109.88"/>
116 <Cmd Description="Add graph point" Ordinal="5.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;21" ScreenX="611.542" ScreenY="80.2715"/>
117 <Cmd Description="Add graph point" Ordinal="6.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;22" ScreenX="729.681" ScreenY="50.0052"/>
118 <Cmd Description="Add graph point" Ordinal="7.5" CurveName="green" Type="CmdAddPointGraph" Identifier="green&#x9;point&#x9;23" ScreenX="847.82" ScreenY="20.3969"/>
119 </CmdMediator>
120 <Error Line="1292" Context="Shift+Control+E" Comment="userTriggered" File="src/main/MainWindow.cpp"/>
121 </Document>
122 </ErrorReport>
0 x,red,x,green
1 -2.9716,-0.996,-3.9765,-3.996
2 -2.9632,-0.994,-3.9683,-3.988
3 -2.9548,-0.991,-3.9601,-3.98
4 -2.9463,-0.988,-3.952,-3.972
5 -2.9379,-0.985,-3.9438,-3.964
6 -2.9295,-0.983,-3.9356,-3.956
7 -2.9211,-0.98,-3.9274,-3.948
8 -2.9127,-0.977,-3.9192,-3.939
9 -2.9042,-0.975,-3.911,-3.931
10 -2.8958,-0.972,-3.9029,-3.923
11 -2.8874,-0.969,-3.8947,-3.915
12 -2.879,-0.966,-3.8865,-3.907
13 -2.8705,-0.964,-3.8783,-3.899
14 -2.8621,-0.961,-3.8701,-3.891
15 -2.8537,-0.958,-3.8619,-3.883
16 -2.8453,-0.955,-3.8538,-3.874
17 -2.8369,-0.953,-3.8456,-3.866
18 -2.8284,-0.95,-3.8374,-3.858
19 -2.82,-0.947,-3.8292,-3.85
20 -2.8116,-0.945,-3.821,-3.842
21 -2.8032,-0.942,-3.8128,-3.834
22 -2.7947,-0.939,-3.8046,-3.826
23 -2.7863,-0.936,-3.7965,-3.817
24 -2.7779,-0.934,-3.7883,-3.809
25 -2.7695,-0.931,-3.7801,-3.801
26 -2.761,-0.928,-3.7719,-3.793
27 -2.7526,-0.925,-3.7637,-3.785
28 -2.7442,-0.923,-3.7555,-3.777
29 -2.7358,-0.92,-3.7474,-3.769
30 -2.7274,-0.917,-3.7392,-3.761
31 -2.7189,-0.915,-3.731,-3.752
32 -2.7105,-0.912,-3.7228,-3.744
33 -2.7021,-0.909,-3.7146,-3.736
34 -2.6937,-0.906,-3.7064,-3.728
35 -2.6852,-0.904,-3.6983,-3.72
36 -2.6768,-0.901,-3.6901,-3.712
37 -2.6684,-0.898,-3.6819,-3.704
38 -2.66,-0.895,-3.6737,-3.696
39 -2.6516,-0.893,-3.6655,-3.687
40 -2.6431,-0.89,-3.6573,-3.679
41 -2.6347,-0.887,-3.6491,-3.671
42 -2.6263,-0.885,-3.641,-3.663
43 -2.6179,-0.882,-3.6328,-3.655
44 -2.6094,-0.879,-3.6246,-3.647
45 -2.601,-0.876,-3.6164,-3.639
46 -2.5926,-0.874,-3.6082,-3.63
47 -2.5842,-0.871,-3.6,-3.622
48 -2.5758,-0.868,-3.5919,-3.614
49 -2.5673,-0.865,-3.5837,-3.606
50 -2.5589,-0.863,-3.5755,-3.598
51 -2.5505,-0.86,-3.5673,-3.59
52 -2.5421,-0.857,-3.5591,-3.582
53 -2.5336,-0.855,-3.5509,-3.574
54 -2.5252,-0.852,-3.5428,-3.565
55 -2.5168,-0.849,-3.5346,-3.557
56 -2.5084,-0.846,-3.5264,-3.549
57 -2.4999,-0.844,-3.5182,-3.541
58 -2.4915,-0.841,-3.51,-3.533
59 -2.4831,-0.838,-3.5018,-3.525
60 -2.4747,-0.835,-3.4936,-3.517
61 -2.4663,-0.833,-3.4855,-3.509
62 -2.4578,-0.83,-3.4773,-3.5
63 -2.4494,-0.827,-3.4691,-3.492
64 -2.441,-0.825,-3.4609,-3.484
65 -2.4326,-0.822,-3.4527,-3.476
66 -2.4241,-0.819,-3.4445,-3.468
67 -2.4157,-0.816,-3.4364,-3.46
68 -2.4073,-0.814,-3.4282,-3.452
69 -2.3989,-0.811,-3.42,-3.443
70 -2.3905,-0.808,-3.4118,-3.435
71 -2.382,-0.805,-3.4036,-3.427
72 -2.3736,-0.803,-3.3954,-3.419
73 -2.3652,-0.8,-3.3873,-3.411
74 -2.3568,-0.797,-3.3791,-3.403
75 -2.3483,-0.795,-3.3709,-3.395
76 -2.3399,-0.792,-3.3627,-3.387
77 -2.3315,-0.789,-3.3545,-3.378
78 -2.3231,-0.786,-3.3463,-3.37
79 -2.3147,-0.784,-3.3381,-3.362
80 -2.3062,-0.781,-3.33,-3.354
81 -2.2978,-0.778,-3.3218,-3.346
82 -2.2894,-0.775,-3.3136,-3.338
83 -2.281,-0.773,-3.3054,-3.33
84 -2.2725,-0.77,-3.2972,-3.322
85 -2.2641,-0.767,-3.289,-3.313
86 -2.2557,-0.765,-3.2809,-3.305
87 -2.2473,-0.762,-3.2727,-3.297
88 -2.2388,-0.759,-3.2645,-3.289
89 -2.2304,-0.756,-3.2563,-3.281
90 -2.222,-0.754,-3.2481,-3.273
91 -2.2136,-0.751,-3.2399,-3.265
92 -2.2052,-0.748,-3.2318,-3.256
93 -2.1967,-0.745,-3.2236,-3.248
94 -2.1883,-0.743,-3.2154,-3.24
95 -2.1799,-0.74,-3.2072,-3.232
96 -2.1715,-0.737,-3.199,-3.224
97 -2.163,-0.735,-3.1908,-3.216
98 -2.1546,-0.732,-3.1826,-3.208
99 -2.1462,-0.729,-3.1745,-3.2
100 -2.1378,-0.726,-3.1663,-3.191
101 -2.1294,-0.724,-3.1581,-3.183
102 -2.1209,-0.721,-3.1499,-3.175
103 -2.1125,-0.718,-3.1417,-3.167
104 -2.1041,-0.715,-3.1335,-3.159
105 -2.0957,-0.713,-3.1254,-3.151
106 -2.0872,-0.71,-3.1172,-3.143
107 -2.0788,-0.707,-3.109,-3.135
108 -2.0704,-0.705,-3.1008,-3.126
109 -2.062,-0.702,-3.0926,-3.118
110 -2.0536,-0.699,-3.0844,-3.11
111 -2.0451,-0.696,-3.0763,-3.102
112 -2.0367,-0.694,-3.0681,-3.094
113 -2.0283,-0.691,-3.0599,-3.086
114 -2.0199,-0.688,-3.0517,-3.078
115 -2.0114,-0.686,-3.0435,-3.069
116 -2.003,-0.683,-3.0353,-3.061
117 -1.9946,-0.68,-3.0271,-3.053
118 -1.9862,-0.677,-3.019,-3.045
119 -1.9777,-0.675,-3.0108,-3.037
120 -1.9693,-0.672,-3.0026,-3.029
121 -1.9609,-0.669,-2.9944,-3.021
122 -1.9525,-0.667,-2.9862,-3.013
123 -1.9441,-0.664,-2.978,-3.004
124 -1.9356,-0.661,-2.9699,-2.996
125 -1.9272,-0.659,-2.9617,-2.988
126 -1.9188,-0.656,-2.9535,-2.98
127 -1.9104,-0.653,-2.9453,-2.972
128 -1.9019,-0.651,-2.9371,-2.964
129 -1.8935,-0.648,-2.9289,-2.956
130 -1.8851,-0.645,-2.9208,-2.947
131 -1.8767,-0.643,-2.9126,-2.939
132 -1.8682,-0.64,-2.9044,-2.931
133 -1.8598,-0.637,-2.8962,-2.923
134 -1.8514,-0.635,-2.888,-2.915
135 -1.843,-0.632,-2.8798,-2.907
136 -1.8345,-0.629,-2.8717,-2.899
137 -1.8261,-0.627,-2.8635,-2.891
138 -1.8177,-0.624,-2.8553,-2.882
139 -1.8093,-0.621,-2.8471,-2.874
140 -1.8008,-0.619,-2.8389,-2.866
141 -1.7924,-0.616,-2.8307,-2.858
142 -1.784,-0.613,-2.8225,-2.85
143 -1.7756,-0.611,-2.8144,-2.842
144 -1.7671,-0.608,-2.8062,-2.834
145 -1.7587,-0.605,-2.798,-2.825
146 -1.7503,-0.603,-2.7898,-2.817
147 -1.7419,-0.6,-2.7816,-2.809
148 -1.7335,-0.597,-2.7734,-2.801
149 -1.725,-0.595,-2.7653,-2.793
150 -1.7166,-0.592,-2.7571,-2.785
151 -1.7082,-0.589,-2.7489,-2.777
152 -1.6998,-0.587,-2.7407,-2.769
153 -1.6913,-0.584,-2.7325,-2.76
154 -1.6829,-0.581,-2.7243,-2.752
155 -1.6745,-0.579,-2.7162,-2.744
156 -1.6661,-0.576,-2.708,-2.736
157 -1.6576,-0.573,-2.6998,-2.728
158 -1.6492,-0.571,-2.6916,-2.72
159 -1.6408,-0.568,-2.6834,-2.712
160 -1.6324,-0.565,-2.6752,-2.703
161 -1.6239,-0.563,-2.6671,-2.695
162 -1.6155,-0.56,-2.6589,-2.687
163 -1.6071,-0.558,-2.6507,-2.679
164 -1.5987,-0.555,-2.6425,-2.671
165 -1.5902,-0.552,-2.6343,-2.663
166 -1.5818,-0.55,-2.6261,-2.655
167 -1.5734,-0.547,-2.618,-2.646
168 -1.565,-0.544,-2.6098,-2.638
169 -1.5565,-0.542,-2.6016,-2.63
170 -1.5481,-0.539,-2.5934,-2.622
171 -1.5397,-0.536,-2.5852,-2.614
172 -1.5313,-0.534,-2.577,-2.606
173 -1.5229,-0.531,-2.5688,-2.598
174 -1.5144,-0.528,-2.5607,-2.59
175 -1.506,-0.526,-2.5525,-2.581
176 -1.4976,-0.523,-2.5443,-2.573
177 -1.4892,-0.52,-2.5361,-2.565
178 -1.4807,-0.518,-2.5279,-2.557
179 -1.4723,-0.515,-2.5197,-2.549
180 -1.4639,-0.512,-2.5116,-2.541
181 -1.4555,-0.51,-2.5034,-2.533
182 -1.447,-0.507,-2.4952,-2.524
183 -1.4386,-0.504,-2.487,-2.516
184 -1.4302,-0.502,-2.4788,-2.508
185 -1.4218,-0.499,-2.4706,-2.5
186 -1.4133,-0.496,-2.4625,-2.492
187 -1.4049,-0.494,-2.4543,-2.484
188 -1.3965,-0.491,-2.4461,-2.476
189 -1.3881,-0.488,-2.4379,-2.467
190 -1.3796,-0.486,-2.4297,-2.459
191 -1.3712,-0.483,-2.4215,-2.451
192 -1.3628,-0.48,-2.4134,-2.443
193 -1.3544,-0.478,-2.4052,-2.435
194 -1.3459,-0.475,-2.397,-2.427
195 -1.3375,-0.472,-2.3888,-2.419
196 -1.3291,-0.47,-2.3806,-2.411
197 -1.3207,-0.467,-2.3724,-2.402
198 -1.3123,-0.464,-2.3643,-2.394
199 -1.3038,-0.462,-2.3561,-2.386
200 -1.2954,-0.459,-2.3479,-2.378
201 -1.287,-0.456,-2.3397,-2.37
202 -1.2786,-0.454,-2.3315,-2.362
203 -1.2701,-0.451,-2.3233,-2.354
204 -1.2617,-0.448,-2.3151,-2.345
205 -1.2533,-0.446,-2.307,-2.337
206 -1.2449,-0.443,-2.2988,-2.329
207 -1.2364,-0.44,-2.2906,-2.321
208 -1.228,-0.438,-2.2824,-2.313
209 -1.2196,-0.435,-2.2742,-2.305
210 -1.2112,-0.432,-2.266,-2.297
211 -1.2027,-0.43,-2.2579,-2.289
212 -1.1943,-0.427,-2.2497,-2.28
213 -1.1859,-0.424,-2.2415,-2.272
214 -1.1775,-0.422,-2.2333,-2.264
215 -1.169,-0.419,-2.2251,-2.256
216 -1.1606,-0.416,-2.2169,-2.248
217 -1.1522,-0.414,-2.2088,-2.24
218 -1.1438,-0.411,-2.2006,-2.232
219 -1.1353,-0.408,-2.1924,-2.223
220 -1.1269,-0.406,-2.1842,-2.215
221 -1.1185,-0.403,-2.176,-2.207
222 -1.1101,-0.4,-2.1678,-2.199
223 -1.1017,-0.398,-2.1597,-2.191
224 -1.0932,-0.395,-2.1515,-2.183
225 -1.0848,-0.392,-2.1433,-2.175
226 -1.0764,-0.39,-2.1351,-2.166
227 -1.068,-0.387,-2.1269,-2.158
228 -1.0595,-0.384,-2.1187,-2.15
229 -1.0511,-0.382,-2.1106,-2.142
230 -1.0427,-0.379,-2.1024,-2.134
231 -1.0343,-0.376,-2.0942,-2.126
232 -1.0258,-0.374,-2.086,-2.118
233 -1.0174,-0.371,-2.0778,-2.11
234 -1.009,-0.368,-2.0696,-2.101
235 -1.0006,-0.366,-2.0614,-2.093
236 -0.9921,-0.363,-2.0533,-2.085
237 -0.9837,-0.36,-2.0451,-2.077
238 -0.9753,-0.357,-2.0369,-2.069
239 -0.9669,-0.354,-2.0287,-2.061
240 -0.9585,-0.351,-2.0205,-2.053
241 -0.9501,-0.348,-2.0123,-2.044
242 -0.9416,-0.345,-2.0042,-2.036
243 -0.9332,-0.342,-1.996,-2.028
244 -0.9248,-0.339,-1.9878,-2.02
245 -0.9164,-0.336,-1.9796,-2.012
246 -0.908,-0.333,-1.9714,-2.004
247 -0.8996,-0.33,-1.9633,-1.995
248 -0.8912,-0.327,-1.9551,-1.987
249 -0.8827,-0.324,-1.9469,-1.979
250 -0.8743,-0.32,-1.9387,-1.971
251 -0.8659,-0.317,-1.9305,-1.963
252 -0.8575,-0.314,-1.9224,-1.954
253 -0.8491,-0.311,-1.9142,-1.946
254 -0.8407,-0.308,-1.906,-1.938
255 -0.8323,-0.305,-1.8978,-1.93
256 -0.8238,-0.302,-1.8896,-1.922
257 -0.8154,-0.299,-1.8815,-1.913
258 -0.807,-0.296,-1.8733,-1.905
259 -0.7986,-0.293,-1.8651,-1.897
260 -0.7902,-0.29,-1.8569,-1.889
261 -0.7818,-0.287,-1.8488,-1.88
262 -0.7734,-0.284,-1.8406,-1.872
263 -0.7649,-0.281,-1.8324,-1.864
264 -0.7565,-0.278,-1.8242,-1.856
265 -0.7481,-0.274,-1.816,-1.848
266 -0.7397,-0.271,-1.8079,-1.839
267 -0.7313,-0.268,-1.7997,-1.831
268 -0.7229,-0.265,-1.7915,-1.823
269 -0.7145,-0.262,-1.7833,-1.815
270 -0.706,-0.259,-1.7751,-1.806
271 -0.6976,-0.256,-1.767,-1.798
272 -0.6892,-0.253,-1.7588,-1.79
273 -0.6808,-0.25,-1.7506,-1.782
274 -0.6724,-0.247,-1.7424,-1.774
275 -0.664,-0.244,-1.7343,-1.765
276 -0.6556,-0.241,-1.7261,-1.757
277 -0.6471,-0.238,-1.7179,-1.749
278 -0.6387,-0.235,-1.7097,-1.741
279 -0.6303,-0.232,-1.7015,-1.733
280 -0.6219,-0.229,-1.6934,-1.724
281 -0.6135,-0.225,-1.6852,-1.716
282 -0.6051,-0.222,-1.677,-1.708
283 -0.5967,-0.219,-1.6688,-1.7
284 -0.5882,-0.216,-1.6606,-1.691
285 -0.5798,-0.213,-1.6525,-1.683
286 -0.5714,-0.21,-1.6443,-1.675
287 -0.563,-0.207,-1.6361,-1.667
288 -0.5546,-0.204,-1.6279,-1.659
289 -0.5462,-0.201,-1.6198,-1.65
290 -0.5378,-0.198,-1.6116,-1.642
291 -0.5293,-0.195,-1.6034,-1.634
292 -0.5209,-0.192,-1.5952,-1.626
293 -0.5125,-0.189,-1.587,-1.618
294 -0.5041,-0.186,-1.5789,-1.609
295 -0.4957,-0.183,-1.5707,-1.601
296 -0.4873,-0.18,-1.5625,-1.593
297 -0.4789,-0.176,-1.5543,-1.585
298 -0.4704,-0.173,-1.5461,-1.576
299 -0.462,-0.17,-1.538,-1.568
300 -0.4536,-0.167,-1.5298,-1.56
301 -0.4452,-0.164,-1.5216,-1.552
302 -0.4368,-0.161,-1.5134,-1.544
303 -0.4284,-0.158,-1.5053,-1.535
304 -0.4199,-0.155,-1.4971,-1.527
305 -0.4115,-0.152,-1.4889,-1.519
306 -0.4031,-0.149,-1.4807,-1.511
307 -0.3947,-0.146,-1.4725,-1.503
308 -0.3863,-0.143,-1.4644,-1.494
309 -0.3779,-0.14,-1.4562,-1.486
310 -0.3695,-0.137,-1.448,-1.478
311 -0.361,-0.134,-1.4398,-1.47
312 -0.3526,-0.131,-1.4316,-1.461
313 -0.3442,-0.127,-1.4235,-1.453
314 -0.3358,-0.124,-1.4153,-1.445
315 -0.3274,-0.121,-1.4071,-1.437
316 -0.319,-0.118,-1.3989,-1.429
317 -0.3106,-0.115,-1.3908,-1.42
318 -0.3021,-0.112,-1.3826,-1.412
319 -0.2937,-0.109,-1.3744,-1.404
320 -0.2853,-0.106,-1.3662,-1.396
321 -0.2769,-0.103,-1.358,-1.388
322 -0.2685,-0.1,-1.3499,-1.379
323 -0.2601,-0.097,-1.3417,-1.371
324 -0.2517,-0.094,-1.3335,-1.363
325 -0.2432,-0.091,-1.3253,-1.355
326 -0.2348,-0.088,-1.3171,-1.346
327 -0.2264,-0.085,-1.309,-1.338
328 -0.218,-0.082,-1.3008,-1.33
329 -0.2096,-0.078,-1.2926,-1.322
330 -0.2012,-0.075,-1.2844,-1.314
331 -0.1928,-0.072,-1.2763,-1.305
332 -0.1843,-0.069,-1.2681,-1.297
333 -0.1759,-0.066,-1.2599,-1.289
334 -0.1675,-0.063,-1.2517,-1.281
335 -0.1591,-0.06,-1.2435,-1.273
336 -0.1507,-0.057,-1.2354,-1.264
337 -0.1423,-0.054,-1.2272,-1.256
338 -0.1339,-0.051,-1.219,-1.248
339 -0.1254,-0.048,-1.2108,-1.24
340 -0.117,-0.045,-1.2026,-1.231
341 -0.1086,-0.042,-1.1945,-1.223
342 -0.1002,-0.039,-1.1863,-1.215
343 -0.0918,-0.036,-1.1781,-1.207
344 -0.0834,-0.032,-1.1699,-1.199
345 -0.075,-0.029,-1.1618,-1.19
346 -0.0665,-0.026,-1.1536,-1.182
347 -0.0581,-0.023,-1.1454,-1.174
348 -0.0497,-0.02,-1.1372,-1.166
349 -0.0413,-0.017,-1.129,-1.158
350 -0.0329,-0.014,-1.1209,-1.149
351 -0.0245,-0.011,-1.1127,-1.141
352 -0.0161,-0.008,-1.1045,-1.133
353 -0.0076,-0.005,-1.0963,-1.125
354 0.0008,-0.002,-1.0881,-1.116
355 0.0092,0.001,-1.08,-1.108
356 0.0176,0.005,-1.0718,-1.1
357 0.026,0.008,-1.0636,-1.092
358 0.0344,0.012,-1.0554,-1.084
359 0.0428,0.015,-1.0472,-1.075
360 0.0512,0.019,-1.0391,-1.067
361 0.0596,0.022,-1.0309,-1.059
362 0.068,0.026,-1.0227,-1.051
363 0.0764,0.029,-1.0145,-1.043
364 0.0848,0.033,-1.0064,-1.034
365 0.0932,0.036,-0.9982,-1.026
366 0.1016,0.04,-0.99,-1.018
367 0.11,0.043,-0.9818,-1.01
368 0.1184,0.047,-0.9736,-1.001
369 0.1268,0.05,-0.9655,-0.993
370 0.1352,0.054,-0.9573,-0.985
371 0.1436,0.057,-0.9491,-0.977
372 0.152,0.061,-0.941,-0.968
373 0.1604,0.064,-0.9328,-0.96
374 0.1688,0.068,-0.9246,-0.952
375 0.1772,0.071,-0.9164,-0.943
376 0.1856,0.074,-0.9083,-0.935
377 0.1941,0.078,-0.9001,-0.927
378 0.2025,0.081,-0.8919,-0.918
379 0.2109,0.085,-0.8837,-0.91
380 0.2193,0.088,-0.8756,-0.902
381 0.2277,0.092,-0.8674,-0.893
382 0.2361,0.095,-0.8592,-0.885
383 0.2445,0.099,-0.8511,-0.877
384 0.2529,0.102,-0.8429,-0.869
385 0.2613,0.106,-0.8347,-0.86
386 0.2697,0.109,-0.8265,-0.852
387 0.2781,0.113,-0.8184,-0.844
388 0.2865,0.116,-0.8102,-0.835
389 0.2949,0.12,-0.802,-0.827
390 0.3033,0.123,-0.7939,-0.819
391 0.3117,0.127,-0.7857,-0.81
392 0.3201,0.13,-0.7775,-0.802
393 0.3285,0.134,-0.7693,-0.794
394 0.3369,0.137,-0.7612,-0.785
395 0.3453,0.141,-0.753,-0.777
396 0.3537,0.144,-0.7448,-0.769
397 0.3621,0.148,-0.7366,-0.761
398 0.3705,0.151,-0.7285,-0.752
399 0.3789,0.155,-0.7203,-0.744
400 0.3873,0.158,-0.7121,-0.736
401 0.3957,0.162,-0.704,-0.727
402 0.4041,0.165,-0.6958,-0.719
403 0.4125,0.169,-0.6876,-0.711
404 0.4209,0.172,-0.6794,-0.702
405 0.4293,0.175,-0.6713,-0.694
406 0.4377,0.179,-0.6631,-0.686
407 0.4461,0.182,-0.6549,-0.678
408 0.4545,0.186,-0.6467,-0.669
409 0.463,0.189,-0.6386,-0.661
410 0.4714,0.193,-0.6304,-0.653
411 0.4798,0.196,-0.6222,-0.644
412 0.4882,0.2,-0.6141,-0.636
413 0.4966,0.203,-0.6059,-0.628
414 0.505,0.207,-0.5977,-0.619
415 0.5134,0.21,-0.5895,-0.611
416 0.5218,0.214,-0.5814,-0.603
417 0.5302,0.217,-0.5732,-0.594
418 0.5386,0.221,-0.565,-0.586
419 0.547,0.224,-0.5568,-0.578
420 0.5554,0.228,-0.5487,-0.57
421 0.5638,0.231,-0.5405,-0.561
422 0.5722,0.235,-0.5323,-0.553
423 0.5806,0.238,-0.5242,-0.545
424 0.589,0.242,-0.516,-0.536
425 0.5974,0.245,-0.5078,-0.528
426 0.6058,0.249,-0.4996,-0.52
427 0.6142,0.252,-0.4915,-0.511
428 0.6226,0.256,-0.4833,-0.503
429 0.631,0.259,-0.4751,-0.495
430 0.6394,0.263,-0.4669,-0.486
431 0.6478,0.266,-0.4588,-0.478
432 0.6562,0.269,-0.4506,-0.47
433 0.6646,0.273,-0.4424,-0.462
434 0.673,0.276,-0.4343,-0.453
435 0.6814,0.28,-0.4261,-0.445
436 0.6898,0.283,-0.4179,-0.437
437 0.6982,0.287,-0.4097,-0.428
438 0.7066,0.29,-0.4016,-0.42
439 0.715,0.294,-0.3934,-0.412
440 0.7234,0.297,-0.3852,-0.403
441 0.7319,0.301,-0.3771,-0.395
442 0.7403,0.304,-0.3689,-0.387
443 0.7487,0.308,-0.3607,-0.379
444 0.7571,0.311,-0.3525,-0.37
445 0.7655,0.315,-0.3444,-0.362
446 0.7739,0.318,-0.3362,-0.354
447 0.7823,0.322,-0.328,-0.345
448 0.7907,0.325,-0.3198,-0.337
449 0.7991,0.329,-0.3117,-0.329
450 0.8075,0.332,-0.3035,-0.32
451 0.8159,0.336,-0.2953,-0.312
452 0.8243,0.339,-0.2872,-0.304
453 0.8327,0.343,-0.279,-0.295
454 0.8411,0.346,-0.2708,-0.287
455 0.8495,0.35,-0.2626,-0.279
456 0.8579,0.353,-0.2545,-0.271
457 0.8663,0.357,-0.2463,-0.262
458 0.8747,0.36,-0.2381,-0.254
459 0.8831,0.363,-0.2299,-0.246
460 0.8915,0.367,-0.2218,-0.237
461 0.8999,0.37,-0.2136,-0.229
462 0.9083,0.374,-0.2054,-0.221
463 0.9167,0.377,-0.1973,-0.212
464 0.9251,0.381,-0.1891,-0.204
465 0.9335,0.384,-0.1809,-0.196
466 0.9419,0.388,-0.1727,-0.187
467 0.9503,0.391,-0.1646,-0.179
468 0.9587,0.395,-0.1564,-0.171
469 0.9671,0.398,-0.1482,-0.163
470 0.9755,0.402,-0.14,-0.154
471 0.9839,0.405,-0.1319,-0.146
472 0.9923,0.409,-0.1237,-0.138
473 1.0008,0.412,-0.1155,-0.129
474 1.0092,0.416,-0.1074,-0.121
475 1.0176,0.418,-0.0992,-0.113
476 1.026,0.42,-0.091,-0.104
477 1.0345,0.423,-0.0828,-0.096
478 1.0429,0.425,-0.0747,-0.088
479 1.0513,0.427,-0.0665,-0.08
480 1.0598,0.429,-0.0583,-0.071
481 1.0682,0.431,-0.0501,-0.063
482 1.0766,0.434,-0.042,-0.055
483 1.0851,0.436,-0.0338,-0.046
484 1.0935,0.438,-0.0256,-0.038
485 1.1019,0.44,-0.0175,-0.03
486 1.1103,0.442,-0.0093,-0.021
487 1.1188,0.445,-0.0011,-0.013
488 1.1272,0.447,0.0071,-0.005
489 1.1356,0.449,0.0152,0.003
490 1.1441,0.451,0.0234,0.012
491 1.1525,0.454,0.0316,0.02
492 1.1609,0.456,0.0398,0.028
493 1.1694,0.458,0.048,0.036
494 1.1778,0.46,0.0562,0.044
495 1.1862,0.462,0.0643,0.052
496 1.1947,0.465,0.0725,0.06
497 1.2031,0.467,0.0807,0.069
498 1.2115,0.469,0.0889,0.077
499 1.22,0.471,0.0971,0.085
500 1.2284,0.474,0.1053,0.093
501 1.2368,0.476,0.1134,0.101
502 1.2453,0.478,0.1216,0.109
503 1.2537,0.48,0.1298,0.117
504 1.2621,0.482,0.138,0.125
505 1.2706,0.485,0.1462,0.134
506 1.279,0.487,0.1544,0.142
507 1.2874,0.489,0.1626,0.15
508 1.2959,0.491,0.1707,0.158
509 1.3043,0.494,0.1789,0.166
510 1.3127,0.496,0.1871,0.174
511 1.3212,0.498,0.1953,0.182
512 1.3296,0.5,0.2035,0.19
513 1.338,0.502,0.2117,0.199
514 1.3465,0.505,0.2198,0.207
515 1.3549,0.507,0.228,0.215
516 1.3633,0.509,0.2362,0.223
517 1.3718,0.511,0.2444,0.231
518 1.3802,0.514,0.2526,0.239
519 1.3886,0.516,0.2608,0.247
520 1.3971,0.518,0.2689,0.256
521 1.4055,0.52,0.2771,0.264
522 1.4139,0.522,0.2853,0.272
523 1.4224,0.525,0.2935,0.28
524 1.4308,0.527,0.3017,0.288
525 1.4392,0.529,0.3099,0.296
526 1.4477,0.531,0.3181,0.304
527 1.4561,0.533,0.3262,0.312
528 1.4645,0.536,0.3344,0.321
529 1.473,0.538,0.3426,0.329
530 1.4814,0.54,0.3508,0.337
531 1.4898,0.542,0.359,0.345
532 1.4983,0.545,0.3672,0.353
533 1.5067,0.547,0.3753,0.361
534 1.5151,0.549,0.3835,0.369
535 1.5236,0.551,0.3917,0.377
536 1.532,0.553,0.3999,0.386
537 1.5404,0.556,0.4081,0.394
538 1.5489,0.558,0.4163,0.402
539 1.5573,0.56,0.4244,0.41
540 1.5657,0.562,0.4326,0.418
541 1.5742,0.565,0.4408,0.426
542 1.5826,0.567,0.449,0.434
543 1.591,0.569,0.4572,0.443
544 1.5995,0.571,0.4654,0.451
545 1.6079,0.573,0.4736,0.459
546 1.6163,0.576,0.4817,0.467
547 1.6248,0.578,0.4899,0.475
548 1.6332,0.58,0.4981,0.483
549 1.6416,0.582,0.5063,0.491
550 1.6501,0.585,0.5145,0.499
551 1.6585,0.587,0.5227,0.508
552 1.6669,0.589,0.5308,0.516
553 1.6754,0.591,0.539,0.524
554 1.6838,0.593,0.5472,0.532
555 1.6922,0.596,0.5554,0.54
556 1.7007,0.598,0.5636,0.548
557 1.7091,0.6,0.5718,0.556
558 1.7175,0.602,0.5799,0.564
559 1.726,0.604,0.5881,0.573
560 1.7344,0.607,0.5963,0.581
561 1.7428,0.609,0.6045,0.589
562 1.7513,0.611,0.6127,0.597
563 1.7597,0.613,0.6209,0.605
564 1.7681,0.616,0.6291,0.613
565 1.7766,0.618,0.6372,0.621
566 1.785,0.62,0.6454,0.63
567 1.7934,0.622,0.6536,0.638
568 1.8019,0.624,0.6618,0.646
569 1.8103,0.627,0.67,0.654
570 1.8187,0.629,0.6782,0.662
571 1.8272,0.631,0.6863,0.67
572 1.8356,0.633,0.6945,0.678
573 1.844,0.636,0.7027,0.686
574 1.8525,0.638,0.7109,0.695
575 1.8609,0.64,0.7191,0.703
576 1.8693,0.642,0.7273,0.711
577 1.8778,0.644,0.7354,0.719
578 1.8862,0.647,0.7436,0.727
579 1.8946,0.649,0.7518,0.735
580 1.9031,0.651,0.76,0.743
581 1.9115,0.653,0.7682,0.751
582 1.9199,0.656,0.7764,0.76
583 1.9284,0.658,0.7846,0.768
584 1.9368,0.66,0.7927,0.776
585 1.9452,0.662,0.8009,0.784
586 1.9537,0.664,0.8091,0.792
587 1.9621,0.667,0.8173,0.8
588 1.9705,0.669,0.8255,0.808
589 1.979,0.671,0.8337,0.817
590 1.9874,0.673,0.8418,0.825
591 1.9958,0.676,0.85,0.833
592 2.0043,0.678,0.8582,0.841
593 2.0127,0.68,0.8664,0.849
594 2.0211,0.683,0.8746,0.857
595 2.0295,0.685,0.8828,0.865
596 2.038,0.688,0.8909,0.873
597 2.0464,0.691,0.8991,0.882
598 2.0548,0.693,0.9073,0.89
599 2.0632,0.696,0.9155,0.898
600 2.0717,0.698,0.9237,0.906
601 2.0801,0.701,0.9319,0.914
602 2.0885,0.704,0.9401,0.922
603 2.0969,0.706,0.9482,0.93
604 2.1054,0.709,0.9564,0.938
605 2.1138,0.712,0.9646,0.947
606 2.1222,0.714,0.9728,0.955
607 2.1306,0.717,0.981,0.963
608 2.1391,0.719,0.9892,0.971
609 2.1475,0.722,0.9973,0.979
610 2.1559,0.725,1.0055,0.987
611 2.1643,0.727,1.0137,0.995
612 2.1728,0.73,1.0219,1.003
613 2.1812,0.733,1.0301,1.011
614 2.1896,0.735,1.0383,1.019
615 2.198,0.738,1.0465,1.027
616 2.2065,0.74,1.0547,1.035
617 2.2149,0.743,1.0629,1.043
618 2.2233,0.746,1.0711,1.051
619 2.2317,0.748,1.0792,1.059
620 2.2402,0.751,1.0874,1.067
621 2.2486,0.753,1.0956,1.075
622 2.257,0.756,1.1038,1.083
623 2.2654,0.759,1.112,1.091
624 2.2739,0.761,1.1202,1.099
625 2.2823,0.764,1.1284,1.107
626 2.2907,0.767,1.1366,1.115
627 2.2991,0.769,1.1448,1.123
628 2.3076,0.772,1.153,1.131
629 2.316,0.774,1.1612,1.139
630 2.3244,0.777,1.1694,1.148
631 2.3328,0.78,1.1776,1.156
632 2.3413,0.782,1.1857,1.164
633 2.3497,0.785,1.1939,1.172
634 2.3581,0.787,1.2021,1.18
635 2.3665,0.79,1.2103,1.188
636 2.375,0.793,1.2185,1.196
637 2.3834,0.795,1.2267,1.204
638 2.3918,0.798,1.2349,1.212
639 2.4002,0.801,1.2431,1.22
640 2.4087,0.803,1.2513,1.228
641 2.4171,0.806,1.2595,1.236
642 2.4255,0.808,1.2677,1.244
643 2.4339,0.811,1.2759,1.252
644 2.4424,0.814,1.2841,1.26
645 2.4508,0.816,1.2922,1.268
646 2.4592,0.819,1.3004,1.276
647 2.4676,0.822,1.3086,1.284
648 2.4761,0.824,1.3168,1.292
649 2.4845,0.827,1.325,1.3
650 2.4929,0.829,1.3332,1.308
651 2.5013,0.832,1.3414,1.316
652 2.5098,0.835,1.3496,1.324
653 2.5182,0.837,1.3578,1.332
654 2.5266,0.84,1.366,1.34
655 2.535,0.842,1.3742,1.348
656 2.5435,0.845,1.3824,1.356
657 2.5519,0.848,1.3906,1.364
658 2.5603,0.85,1.3987,1.372
659 2.5687,0.853,1.4069,1.38
660 2.5772,0.856,1.4151,1.388
661 2.5856,0.858,1.4233,1.396
662 2.594,0.861,1.4315,1.404
663 2.6024,0.863,1.4397,1.412
664 2.6109,0.866,1.4479,1.42
665 2.6193,0.869,1.4561,1.428
666 2.6277,0.871,1.4643,1.436
667 2.6361,0.874,1.4725,1.444
668 2.6446,0.876,1.4807,1.452
669 2.653,0.879,1.4889,1.46
670 2.6614,0.882,1.4971,1.468
671 2.6698,0.884,1.5052,1.476
672 2.6783,0.887,1.5134,1.484
673 2.6867,0.89,1.5216,1.492
674 2.6951,0.892,1.5298,1.5
675 2.7035,0.895,1.538,1.508
676 2.712,0.897,1.5462,1.516
677 2.7204,0.9,1.5544,1.524
678 2.7288,0.903,1.5626,1.532
679 2.7372,0.905,1.5708,1.54
680 2.7457,0.908,1.579,1.548
681 2.7541,0.911,1.5872,1.556
682 2.7625,0.913,1.5954,1.564
683 2.7709,0.916,1.6036,1.572
684 2.7794,0.918,1.6117,1.58
685 2.7878,0.921,1.6199,1.588
686 2.7962,0.924,1.6281,1.596
687 2.8046,0.926,1.6363,1.604
688 2.8131,0.929,1.6445,1.612
689 2.8215,0.931,1.6527,1.62
690 2.8299,0.934,1.6609,1.628
691 2.8383,0.937,1.6691,1.636
692 2.8468,0.939,1.6773,1.644
693 2.8552,0.942,1.6855,1.652
694 2.8636,0.945,1.6937,1.66
695 2.872,0.947,1.7019,1.668
696 2.8805,0.95,1.7101,1.676
697 2.8889,0.952,1.7182,1.684
698 2.8973,0.955,1.7264,1.692
699 2.9057,0.958,1.7346,1.7
700 2.9142,0.96,1.7428,1.708
701 2.9226,0.963,1.751,1.716
702 2.931,0.965,1.7592,1.724
703 2.9394,0.968,1.7674,1.732
704 2.9479,0.971,1.7756,1.74
705 2.9563,0.973,1.7838,1.748
706 2.9647,0.976,1.792,1.756
707 2.9731,0.979,1.8002,1.764
708 2.9816,0.981,1.8084,1.772
709 2.99,0.984,1.8166,1.78
710 2.9984,0.987,1.8247,1.788
711 3.0068,0.99,1.8329,1.796
712 3.0152,0.993,1.8411,1.804
713 3.0236,0.996,1.8493,1.812
714 3.0321,0.999,1.8575,1.82
715 3.0405,1.003,1.8657,1.828
716 3.0489,1.006,1.8739,1.836
717 3.0573,1.009,1.8821,1.844
718 3.0657,1.012,1.8903,1.852
719 3.0741,1.016,1.8985,1.86
720 3.0825,1.019,1.9067,1.868
721 3.0909,1.022,1.9149,1.876
722 3.0993,1.025,1.9231,1.884
723 3.1078,1.028,1.9312,1.892
724 3.1162,1.032,1.9394,1.9
725 3.1246,1.035,1.9476,1.908
726 3.133,1.038,1.9558,1.916
727 3.1414,1.041,1.964,1.924
728 3.1498,1.044,1.9722,1.932
729 3.1582,1.048,1.9804,1.94
730 3.1666,1.051,1.9886,1.948
731 3.175,1.054,1.9968,1.956
732 3.1835,1.057,2.005,1.964
733 3.1919,1.06,2.0132,1.972
734 3.2003,1.064,2.0213,1.98
735 3.2087,1.067,2.0295,1.989
736 3.2171,1.07,2.0377,1.997
737 3.2255,1.073,2.0459,2.005
738 3.2339,1.077,2.054,2.014
739 3.2423,1.08,2.0622,2.022
740 3.2507,1.083,2.0704,2.03
741 3.2591,1.086,2.0785,2.039
742 3.2676,1.089,2.0867,2.047
743 3.276,1.093,2.0949,2.055
744 3.2844,1.096,2.1031,2.064
745 3.2928,1.099,2.1112,2.072
746 3.3012,1.102,2.1194,2.08
747 3.3096,1.105,2.1276,2.088
748 3.318,1.109,2.1358,2.097
749 3.3264,1.112,2.1439,2.105
750 3.3348,1.115,2.1521,2.113
751 3.3433,1.118,2.1603,2.122
752 3.3517,1.121,2.1684,2.13
753 3.3601,1.125,2.1766,2.138
754 3.3685,1.128,2.1848,2.147
755 3.3769,1.131,2.193,2.155
756 3.3853,1.134,2.2011,2.163
757 3.3937,1.138,2.2093,2.172
758 3.4021,1.141,2.2175,2.18
759 3.4105,1.144,2.2257,2.188
760 3.419,1.147,2.2338,2.196
761 3.4274,1.15,2.242,2.205
762 3.4358,1.154,2.2502,2.213
763 3.4442,1.157,2.2583,2.221
764 3.4526,1.16,2.2665,2.23
765 3.461,1.163,2.2747,2.238
766 3.4694,1.166,2.2829,2.246
767 3.4778,1.17,2.291,2.255
768 3.4862,1.173,2.2992,2.263
769 3.4946,1.176,2.3074,2.271
770 3.5031,1.179,2.3156,2.279
771 3.5115,1.182,2.3237,2.288
772 3.5199,1.186,2.3319,2.296
773 3.5283,1.189,2.3401,2.304
774 3.5367,1.192,2.3482,2.313
775 3.5451,1.195,2.3564,2.321
776 3.5535,1.198,2.3646,2.329
777 3.5619,1.202,2.3728,2.338
778 3.5703,1.205,2.3809,2.346
779 3.5788,1.208,2.3891,2.354
780 3.5872,1.211,2.3973,2.363
781 3.5956,1.215,2.4055,2.371
782 3.604,1.218,2.4136,2.379
783 3.6124,1.221,2.4218,2.387
784 3.6208,1.224,2.43,2.396
785 3.6292,1.227,2.4381,2.404
786 3.6376,1.231,2.4463,2.412
787 3.646,1.234,2.4545,2.421
788 3.6544,1.237,2.4627,2.429
789 3.6629,1.24,2.4708,2.437
790 3.6713,1.243,2.479,2.446
791 3.6797,1.247,2.4872,2.454
792 3.6881,1.25,2.4953,2.462
793 3.6965,1.253,2.5035,2.471
794 3.7049,1.256,2.5117,2.479
795 3.7133,1.259,2.5199,2.487
796 3.7217,1.263,2.528,2.495
797 3.7301,1.266,2.5362,2.504
798 3.7386,1.269,2.5444,2.512
799 3.747,1.272,2.5526,2.52
800 3.7554,1.276,2.5607,2.529
801 3.7638,1.279,2.5689,2.537
802 3.7722,1.282,2.5771,2.545
803 3.7806,1.285,2.5852,2.554
804 3.789,1.288,2.5934,2.562
805 3.7974,1.292,2.6016,2.57
806 3.8058,1.295,2.6098,2.578
807 3.8143,1.298,2.6179,2.587
808 3.8227,1.301,2.6261,2.595
809 3.8311,1.304,2.6343,2.603
810 3.8395,1.308,2.6425,2.612
811 3.8479,1.311,2.6506,2.62
812 3.8563,1.314,2.6588,2.628
813 3.8647,1.317,2.667,2.637
814 3.8731,1.32,2.6751,2.645
815 3.8815,1.324,2.6833,2.653
816 3.8899,1.327,2.6915,2.662
817 3.8984,1.33,2.6997,2.67
818 3.9068,1.333,2.7078,2.678
819 3.9152,1.337,2.716,2.686
820 3.9236,1.34,2.7242,2.695
821 3.932,1.343,2.7324,2.703
822 3.9404,1.346,2.7405,2.711
823 3.9488,1.349,2.7487,2.72
824 3.9572,1.353,2.7569,2.728
825 3.9656,1.356,2.765,2.736
826 3.9741,1.359,2.7732,2.745
827 3.9825,1.362,2.7814,2.753
828 3.9909,1.365,2.7896,2.761
829 3.9993,1.369,2.7977,2.77
830 4.0077,1.371,2.8059,2.778
831 4.0161,1.374,2.8141,2.786
832 4.0246,1.377,2.8222,2.794
833 4.033,1.379,2.8304,2.803
834 4.0414,1.382,2.8386,2.811
835 4.0498,1.385,2.8468,2.819
836 4.0583,1.387,2.8549,2.828
837 4.0667,1.39,2.8631,2.836
838 4.0751,1.393,2.8713,2.844
839 4.0835,1.395,2.8795,2.853
840 4.0919,1.398,2.8876,2.861
841 4.1004,1.401,2.8958,2.869
842 4.1088,1.403,2.904,2.877
843 4.1172,1.406,2.9121,2.886
844 4.1256,1.409,2.9203,2.894
845 4.1341,1.411,2.9285,2.902
846 4.1425,1.414,2.9367,2.911
847 4.1509,1.417,2.9448,2.919
848 4.1593,1.419,2.953,2.927
849 4.1678,1.422,2.9612,2.936
850 4.1762,1.425,2.9694,2.944
851 4.1846,1.427,2.9775,2.952
852 4.193,1.43,2.9857,2.961
853 4.2015,1.433,2.9939,2.969
854 4.2099,1.435,3.002,2.977
855 4.2183,1.438,,
856 4.2267,1.441,,
857 4.2352,1.443,,
858 4.2436,1.446,,
859 4.252,1.449,,
860 4.2604,1.451,,
861 4.2689,1.454,,
862 4.2773,1.457,,
863 4.2857,1.459,,
864 4.2941,1.462,,
865 4.3025,1.464,,
866 4.311,1.467,,
867 4.3194,1.47,,
868 4.3278,1.472,,
869 4.3362,1.475,,
870 4.3447,1.478,,
871 4.3531,1.48,,
872 4.3615,1.483,,
873 4.3699,1.486,,
874 4.3784,1.488,,
875 4.3868,1.491,,
876 4.3952,1.494,,
877 4.4036,1.496,,
878 4.4121,1.499,,
879 4.4205,1.502,,
880 4.4289,1.504,,
881 4.4373,1.507,,
882 4.4458,1.51,,
883 4.4542,1.512,,
884 4.4626,1.515,,
885 4.471,1.518,,
886 4.4795,1.52,,
887 4.4879,1.523,,
888 4.4963,1.526,,
889 4.5047,1.528,,
890 4.5131,1.531,,
891 4.5216,1.534,,
892 4.53,1.536,,
893 4.5384,1.539,,
894 4.5468,1.542,,
895 4.5553,1.544,,
896 4.5637,1.547,,
897 4.5721,1.55,,
898 4.5805,1.552,,
899 4.589,1.555,,
900 4.5974,1.558,,
901 4.6058,1.56,,
902 4.6142,1.563,,
903 4.6227,1.566,,
904 4.6311,1.568,,
905 4.6395,1.571,,
906 4.6479,1.574,,
907 4.6564,1.576,,
908 4.6648,1.579,,
909 4.6732,1.582,,
910 4.6816,1.584,,
911 4.6901,1.587,,
912 4.6985,1.59,,
913 4.7069,1.592,,
914 4.7153,1.595,,
915 4.7237,1.598,,
916 4.7322,1.6,,
917 4.7406,1.603,,
918 4.749,1.606,,
919 4.7574,1.608,,
920 4.7659,1.611,,
921 4.7743,1.614,,
922 4.7827,1.616,,
923 4.7911,1.619,,
924 4.7996,1.622,,
925 4.808,1.624,,
926 4.8164,1.627,,
927 4.8248,1.63,,
928 4.8333,1.632,,
929 4.8417,1.635,,
930 4.8501,1.638,,
931 4.8585,1.64,,
932 4.867,1.643,,
933 4.8754,1.646,,
934 4.8838,1.648,,
935 4.8922,1.651,,
936 4.9007,1.654,,
937 4.9091,1.656,,
938 4.9175,1.659,,
939 4.9259,1.662,,
940 4.9343,1.664,,
941 4.9428,1.667,,
942 4.9512,1.67,,
943 4.9596,1.672,,
944 4.968,1.675,,
945 4.9765,1.678,,
946 4.9849,1.68,,
947 4.9933,1.683,,
948 5.0017,1.686,,
949 5.0102,1.688,,
950 5.0186,1.691,,
951 5.027,1.693,,
952 5.0354,1.696,,
953 5.0439,1.698,,
954 5.0523,1.701,,
955 5.0607,1.703,,
956 5.0692,1.706,,
957 5.0776,1.708,,
958 5.086,1.711,,
959 5.0944,1.713,,
960 5.1029,1.716,,
961 5.1113,1.718,,
962 5.1197,1.721,,
963 5.1281,1.723,,
964 5.1366,1.726,,
965 5.145,1.729,,
966 5.1534,1.731,,
967 5.1619,1.734,,
968 5.1703,1.736,,
969 5.1787,1.739,,
970 5.1871,1.741,,
971 5.1956,1.744,,
972 5.204,1.746,,
973 5.2124,1.749,,
974 5.2208,1.751,,
975 5.2293,1.754,,
976 5.2377,1.756,,
977 5.2461,1.759,,
978 5.2546,1.761,,
979 5.263,1.764,,
980 5.2714,1.766,,
981 5.2798,1.769,,
982 5.2883,1.771,,
983 5.2967,1.774,,
984 5.3051,1.776,,
985 5.3135,1.779,,
986 5.322,1.782,,
987 5.3304,1.784,,
988 5.3388,1.787,,
989 5.3472,1.789,,
990 5.3557,1.792,,
991 5.3641,1.794,,
992 5.3725,1.797,,
993 5.381,1.799,,
994 5.3894,1.802,,
995 5.3978,1.804,,
996 5.4062,1.807,,
997 5.4147,1.809,,
998 5.4231,1.812,,
999 5.4315,1.814,,
1000 5.4399,1.817,,
1001 5.4484,1.819,,
1002 5.4568,1.822,,
1003 5.4652,1.824,,
1004 5.4737,1.827,,
1005 5.4821,1.829,,
1006 5.4905,1.832,,
1007 5.4989,1.835,,
1008 5.5074,1.837,,
1009 5.5158,1.84,,
1010 5.5242,1.842,,
1011 5.5326,1.845,,
1012 5.5411,1.847,,
1013 5.5495,1.85,,
1014 5.5579,1.852,,
1015 5.5664,1.855,,
1016 5.5748,1.857,,
1017 5.5832,1.86,,
1018 5.5916,1.862,,
1019 5.6001,1.865,,
1020 5.6085,1.867,,
1021 5.6169,1.87,,
1022 5.6253,1.872,,
1023 5.6338,1.875,,
1024 5.6422,1.877,,
1025 5.6506,1.88,,
1026 5.659,1.883,,
1027 5.6675,1.885,,
1028 5.6759,1.888,,
1029 5.6843,1.89,,
1030 5.6928,1.893,,
1031 5.7012,1.895,,
1032 5.7096,1.898,,
1033 5.718,1.9,,
1034 5.7265,1.903,,
1035 5.7349,1.905,,
1036 5.7433,1.908,,
1037 5.7517,1.91,,
1038 5.7602,1.913,,
1039 5.7686,1.915,,
1040 5.777,1.918,,
1041 5.7855,1.92,,
1042 5.7939,1.923,,
1043 5.8023,1.925,,
1044 5.8107,1.928,,
1045 5.8192,1.93,,
1046 5.8276,1.933,,
1047 5.836,1.936,,
1048 5.8444,1.938,,
1049 5.8529,1.941,,
1050 5.8613,1.943,,
1051 5.8697,1.946,,
1052 5.8782,1.948,,
1053 5.8866,1.951,,
1054 5.895,1.953,,
1055 5.9034,1.956,,
1056 5.9119,1.958,,
1057 5.9203,1.961,,
1058 5.9287,1.963,,
1059 5.9371,1.966,,
1060 5.9456,1.968,,
1061 5.954,1.971,,
1062 5.9624,1.973,,
1063 5.9709,1.976,,
1064 5.9793,1.978,,
1065 5.9877,1.981,,
0 -errorreport ../test/extrapolate_relations_straight.xml -regression
0 <ErrorReport>
1 <Application VersionNumber="8.2"/>
2 <Document VersionNumber="8.2" AxesPointsRequired="0">
3 <Image Width="1221" Height="252"><![CDATA[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]]></Image>
4 <CoordSystem>
5 <General ExtraPrecision="1" CursorSize="3"/>
6 <Coords UnitsTimeString="HH:MM:SS" UnitsX="0" UnitsTheta="0" UnitsY="0" Type="0" ScaleYRadius="0" UnitsDate="3" Coords="0" ScaleXThetaString="Linear" TypeString="Cartesian" UnitsRadiusString="Number" UnitsRadius="0" UnitsTime="2" UnitsThetaString="Degrees (DDD.DDDDD)" UnitsYString="Number" ScaleYRadiusString="Linear" UnitsXString="Number" ScaleXTheta="0" UnitsDateString="YYYY/MM/DD"/>
7 <DigitizeCurve CursorStandardCross="True" CursorInnerRadius="5" CursorSize="1" CursorLineWidth="2"/>
8 <Export XLabel="x" PointsIntervalUnitsRelations="1" LayoutFunctionsString="OnePerLine" Delimiter="0" PointsSelectionRelations="3" Header="1" PointsIntervalFunctions="10" HeaderString="Simple" LayoutFunctions="1" PointsSelectionRelationsString="Unknown" PointsIntervalRelations="1" OverrideCsvTsv="True" PointsIntervalUnitsFunctions="1" PointsSelectionFunctions="3" DelimiterString="Commas" PointsSelectionFunctionsString="Raw">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker LineColor="6" Seconds="3" Mode="1"/>
12 <GridDisplay StopX="1" StopY="1" Stable="False" ColorString="Black" DisableX="0" CountX="2" StartX="0" DisableY="0" CountY="2" StartY="0" StepX="1" StepY="1" Color="0"/>
13 <GridRemoval CoordDisableXString="Count" StopX="0" StopY="0" Stable="False" DefinedGridLines="False" CoordDisableX="0" CoordDisableY="0" CountX="2" StartX="0" CountY="2" StartY="0" CloseDistance="10" StepX="0" StepY="0" CoordDisableYString="Count"/>
14 <PointMatch ColorAcceptedString="Green" ColorCandidateString="Yellow" ColorCandidate="7" ColorRejectedString="Red" ColorRejected="6" ColorAccepted="4" PointSize="48"/>
15 <Segments LineColorString="Green" LineColor="4" MinLength="2" FillCorners="False" LineWidth="4" PointSeparation="25"/>
16 <Curve CurveName="Axes">
17 <ColorFilter ValueLow="0" CurveName="Axes" SaturationLow="50" ModeString="Intensity" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10" IntensityLow="0" HueHigh="360" SaturationHigh="100" ValueHigh="50" Mode="2" HueLow="180"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle Width="0" ConnectAsString="ConnectSkipForAxisCurve" ColorString="Transparent" ConnectAs="4" Color="8"/>
20 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Red" Shape="1" Color="6"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter ValueLow="0" CurveName="Curve1" SaturationLow="50" ModeString="Intensity" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10" IntensityLow="0" HueHigh="360" SaturationHigh="100" ValueHigh="50" Mode="2" HueLow="180"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
29 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Blue" Shape="1" Color="1"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem Endian="LittleEndian" WordSize="32"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd ScreenX="492.014" ScreenY="110.209" Description="Add axis point" Identifier="Axes&#x9;point&#x9;1" Ordinal="1" GraphX="0" GraphY="0" Type="CmdAddPointAxis" IsXOnly="False"/>
39 <Cmd ScreenX="1201.54" ScreenY="110.209" Description="Add axis point" Identifier="Axes&#x9;point&#x9;3" Ordinal="2" GraphX="6" GraphY="0" Type="CmdAddPointAxis" IsXOnly="False"/>
40 <Cmd ScreenX="492.709" ScreenY="20.0679" Description="Add axis point" Identifier="Axes&#x9;point&#x9;5" Ordinal="3" GraphX="0" GraphY="3" Type="CmdAddPointAxis" IsXOnly="False"/>
41 <Cmd Description="Curve add/remove" Type="CmdSettingsCurveAddRemove">
42 <CurvesGraphs>
43 <Curve CurveName="Curve1">
44 <ColorFilter ValueLow="0" CurveName="Curve1" SaturationLow="50" ModeString="Intensity" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10" IntensityLow="0" HueHigh="360" SaturationHigh="100" ValueHigh="50" Mode="2" HueLow="180"/>
45 <CurveStyle CurveName="Curve1">
46 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
47 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Blue" Shape="1" Color="1"/>
48 </CurveStyle>
49 <CurvePoints/>
50 </Curve>
51 </CurvesGraphs>
52 <CurvesGraphs>
53 <Curve CurveName="red">
54 <ColorFilter ValueLow="0" CurveName="red" SaturationLow="50" ModeString="Intensity" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10" IntensityLow="0" HueHigh="360" SaturationHigh="100" ValueHigh="50" Mode="2" HueLow="180"/>
55 <CurveStyle CurveName="red">
56 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
57 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Blue" Shape="1" Color="1"/>
58 </CurveStyle>
59 <CurvePoints/>
60 </Curve>
61 <Curve CurveName="green">
62 <ColorFilter ValueLow="0" CurveName="green" SaturationLow="50" ModeString="Intensity" ForegroundLow="0" IntensityHigh="50" ForegroundHigh="10" IntensityLow="0" HueHigh="360" SaturationHigh="100" ValueHigh="50" Mode="2" HueLow="180"/>
63 <CurveStyle CurveName="green">
64 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
65 <PointStyle Radius="10" ShapeString="X" LineWidth="1" ColorString="Blue" Shape="5" Color="1"/>
66 </CurveStyle>
67 <CurvePoints/>
68 </Curve>
69 </CurvesGraphs>
70 </Cmd>
71 <Cmd Description="Curve Properties settings" Type="CmdSettingsCurveProperties">
72 <CurveStyles>
73 <CurveStyle CurveName="red">
74 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
75 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Blue" Shape="1" Color="1"/>
76 </CurveStyle>
77 <CurveStyle CurveName="Axes">
78 <LineStyle Width="0" ConnectAsString="ConnectSkipForAxisCurve" ColorString="Transparent" ConnectAs="4" Color="8"/>
79 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Red" Shape="1" Color="6"/>
80 </CurveStyle>
81 <CurveStyle CurveName="green">
82 <LineStyle Width="1" ConnectAsString="FunctionSmooth" ColorString="Blue" ConnectAs="0" Color="1"/>
83 <PointStyle Radius="10" ShapeString="X" LineWidth="1" ColorString="Blue" Shape="5" Color="1"/>
84 </CurveStyle>
85 </CurveStyles>
86 <CurveStyles>
87 <CurveStyle CurveName="red">
88 <LineStyle Width="1" ConnectAsString="RelationStraight" ColorString="Red" ConnectAs="3" Color="6"/>
89 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Red" Shape="1" Color="6"/>
90 </CurveStyle>
91 <CurveStyle CurveName="Axes">
92 <LineStyle Width="0" ConnectAsString="ConnectSkipForAxisCurve" ColorString="Transparent" ConnectAs="4" Color="8"/>
93 <PointStyle Radius="10" ShapeString="Cross" LineWidth="1" ColorString="Red" Shape="1" Color="6"/>
94 </CurveStyle>
95 <CurveStyle CurveName="green">
96 <LineStyle Width="1" ConnectAsString="RelationStraight" ColorString="Green" ConnectAs="3" Color="4"/>
97 <PointStyle Radius="10" ShapeString="X" LineWidth="1" ColorString="Green" Shape="5" Color="4"/>
98 </CurveStyle>
99 </CurveStyles>
100 </Cmd>
101 <Cmd ScreenX="140.377" ScreenY="140.146" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;6" Ordinal="1" Type="CmdAddPointGraph"/>
102 <Cmd ScreenX="256.431" ScreenY="130.606" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;7" Ordinal="1" Type="CmdAddPointGraph"/>
103 <Cmd ScreenX="375.265" ScreenY="121.065" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;8" Ordinal="2.5" Type="CmdAddPointGraph"/>
104 <Cmd ScreenX="492.709" ScreenY="110.209" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;9" Ordinal="3.5" Type="CmdAddPointGraph"/>
105 <Cmd ScreenX="611.542" ScreenY="97.7076" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;10" Ordinal="4.5" Type="CmdAddPointGraph"/>
106 <Cmd ScreenX="729.681" ScreenY="89.812" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;11" Ordinal="5.5" Type="CmdAddPointGraph"/>
107 <Cmd ScreenX="846.43" ScreenY="80.6005" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;12" Ordinal="6.5" Type="CmdAddPointGraph"/>
108 <Cmd ScreenX="965.264" ScreenY="69.0862" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;13" Ordinal="7.5" Type="CmdAddPointGraph"/>
109 <Cmd ScreenX="1084.1" ScreenY="59.5457" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;14" Ordinal="8.5" Type="CmdAddPointGraph"/>
110 <Cmd ScreenX="1200.85" ScreenY="50.6632" Description="Add graph point" CurveName="red" Identifier="red&#x9;point&#x9;15" Ordinal="9.5" Type="CmdAddPointGraph"/>
111 <Cmd ScreenX="20.848" ScreenY="230.287" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;16" Ordinal="1" Type="CmdAddPointGraph"/>
112 <Cmd ScreenX="139.682" ScreenY="200.35" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;17" Ordinal="1" Type="CmdAddPointGraph"/>
113 <Cmd ScreenX="257.126" ScreenY="170.742" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;18" Ordinal="2.5" Type="CmdAddPointGraph"/>
114 <Cmd ScreenX="375.96" ScreenY="140.475" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;19" Ordinal="3.5" Type="CmdAddPointGraph"/>
115 <Cmd ScreenX="493.404" ScreenY="110.209" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;20" Ordinal="4.5" Type="CmdAddPointGraph"/>
116 <Cmd ScreenX="612.237" ScreenY="80.2715" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;21" Ordinal="5.5" Type="CmdAddPointGraph"/>
117 <Cmd ScreenX="730.376" ScreenY="50.9922" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;22" Ordinal="6.5" Type="CmdAddPointGraph"/>
118 <Cmd ScreenX="847.82" ScreenY="20.7258" Description="Add graph point" CurveName="green" Identifier="green&#x9;point&#x9;23" Ordinal="7.5" Type="CmdAddPointGraph"/>
119 <Cmd Description="Export settings" Type="CmdSettingsExport">
120 <Export XLabel="x" PointsIntervalUnitsRelations="1" LayoutFunctionsString="OnePerLine" Delimiter="0" PointsSelectionRelations="3" Header="1" PointsIntervalFunctions="10" HeaderString="Simple" LayoutFunctions="1" PointsSelectionRelationsString="Unknown" PointsIntervalRelations="1" OverrideCsvTsv="True" PointsIntervalUnitsFunctions="1" PointsSelectionFunctions="3" DelimiterString="Commas" PointsSelectionFunctionsString="Raw">
121 <CurveNamesNotExported/>
122 </Export>
123 <Export XLabel="x" PointsIntervalUnitsRelations="1" LayoutFunctionsString="AllPerLine" Delimiter="0" PointsSelectionRelations="3" Header="1" PointsIntervalFunctions="10" HeaderString="Simple" LayoutFunctions="0" PointsSelectionRelationsString="Unknown" PointsIntervalRelations="1" OverrideCsvTsv="True" PointsIntervalUnitsFunctions="1" PointsSelectionFunctions="3" DelimiterString="Commas" PointsSelectionFunctionsString="Raw">
124 <CurveNamesNotExported/>
125 </Export>
126 </Cmd>
127 </CmdMediator>
128 <Error File="src/main/MainWindow.cpp" Line="1292" Context="Shift+Control+E" Comment="userTriggered"/>
129 </Document>
130 </ErrorReport>
0 # x, red
1 -9.961, -1.833
2 -9.852, -1.444
3 -9.721, -1.039
4 -9.613, -0.65
5 -9.482, -0.244
6 -9.351, 0.145
7 -9.22, 0.534
8 -9.09, 0.923
9 -8.959, 1.328
10 -8.828, 1.717
11 -8.676, 2.106
12 -8.523, 2.495
13 -8.349, 2.884
14 -8.174, 3.257
15 -8, 3.646
16 -7.782, 4.019
17 -7.542, 4.376
18 -7.302, 4.749
19 -6.974, 5.073
20 -6.581, 5.333
21 -6.057, 5.447
22 -5.379, 5.253
23 -4.986, 4.978
24 -4.657, 4.654
25 -4.351, 4.314
26 -4.067, 3.974
27 -3.804, 3.618
28 -3.541, 3.261
29 -3.279, 2.905
30 -3.016, 2.549
31 -2.775, 2.192
32 -2.491, 1.836
33 -2.207, 1.496
34 -1.922, 1.14
35 -1.594, 0.832
36 -1.244, 0.508
37 -0.85, 0.233
38 0.395, 0.056
39 0.876, 0.251
40 1.269, 0.527
41 1.618, 0.835
42 1.946, 1.159
43 2.23, 1.516
44 2.492, 1.856
45 2.775, 2.213
46 3.037, 2.57
47 3.277, 2.927
48 3.539, 3.283
49 3.801, 3.64
50 4.063, 3.997
51 4.346, 4.338
52 4.674, 4.678
53 5.001, 4.986
54 5.897, 5.457
55 6.421, 5.409
56 6.859, 5.166
57 7.209, 4.859
58 7.471, 4.502
59 7.712, 4.13
60 7.931, 3.773
61 8.128, 3.385
62 8.303, 3.012
63 8.479, 2.623
64 8.632, 2.234
65 8.785, 1.846
66 8.917, 1.457
67 9.048, 1.068
68 9.18, 0.663
69 9.311, 0.274
70 9.443, -0.115
71 9.574, -0.52
72 9.706, -0.909
73 9.816, -1.297
74 9.925, -1.703
75
76
77 # x, green
78 -9.969, 5.995
79 -9.707, 6.351
80 -9.38, 6.676
81 -9.03, 6.984
82 -8.572, 7.195
83 -8.047, 7.277
84 -7.523, 7.164
85 -7.085, 6.937
86 -6.976, 6.872
87 -6.604, 6.581
88 -6.276, 6.257
89 -5.948, 5.933
90 -5.664, 5.577
91 -5.379, 5.237
92 -5.095, 4.881
93 -4.854, 4.524
94 -4.591, 4.168
95 -4.329, 3.828
96 -4.066, 3.455
97 -3.825, 3.099
98 -3.563, 2.743
99 -3.278, 2.403
100 -3.016, 2.046
101 -2.709, 1.706
102 -2.403, 1.366
103 -2.075, 1.042
104 -1.725, 0.735
105 -1.353, 0.459
106 -0.916, 0.201
107 0.636, 0.105
108 1.116, 0.3
109 1.509, 0.559
110 1.903, 0.867
111 2.23, 1.176
112 2.536, 1.516
113 2.841, 1.857
114 3.125, 2.197
115 3.387, 2.554
116 3.671, 2.895
117 3.911, 3.268
118 4.172, 3.624
119 4.434, 3.981
120 4.696, 4.338
121 4.958, 4.695
122 5.198, 5.051
123 5.504, 5.392
124 5.765, 5.749
125 6.071, 6.073
126 6.399, 6.397
127 6.748, 6.722
128 7.032, 6.917
129 7.469, 7.16
130 7.971, 7.29
131 8.496, 7.226
132 8.955, 7.032
133 9.348, 6.74
134 9.655, 6.416
135 9.939, 6.06
136
137
138 # x, blue
139 -9.972, 9.09
140 -9.448, 8.961
141 -8.989, 8.75
142 -8.573, 8.492
143 -8.223, 8.2
144 -7.873, 7.876
145 -7.545, 7.552
146 -7.261, 7.212
147 -6.976, 6.856
148 -6.692, 6.516
149 -6.429, 6.16
150 -6.166, 5.803
151 -5.904, 5.447
152 -5.641, 5.091
153 -5.379, 4.734
154 -5.138, 4.378
155 -4.875, 4.022
156 -4.613, 3.666
157 -4.35, 3.309
158 -4.066, 2.969
159 -3.803, 2.613
160 -3.519, 2.273
161 -3.212, 1.933
162 -2.906, 1.593
163 -2.578, 1.269
164 -2.228, 0.961
165 -1.856, 0.67
166 -1.441, 0.411
167 -0.981, 0.201
168 -0.479, 0.055
169 0.068, 0.007
170 0.592, 0.072
171 1.095, 0.235
172 1.531, 0.462
173 1.946, 0.738
174 2.318, 1.03
175 2.667, 1.354
176 2.972, 1.679
177 3.278, 2.019
178 3.584, 2.344
179 3.867, 2.7
180 4.129, 3.057
181 4.391, 3.398
182 4.675, 3.754
183 4.915, 4.111
184 5.177, 4.468
185 5.439, 4.825
186 5.7, 5.181
187 5.962, 5.538
188 6.224, 5.895
189 6.486, 6.252
190 6.748, 6.608
191 7.032, 6.949
192 7.315, 7.306
193 7.621, 7.646
194 7.948, 7.971
195 8.276, 8.279
196 8.647, 8.571
197 9.062, 8.814
198 9.521, 9.009
0 -errorreport ../test/gnuplot_format.xml -regression
0 <ErrorReport>
1 <Application VersionNumber="8.2"/>
2 <Document VersionNumber="8.2" AxesPointsRequired="0">
3 <Image Height="800" Width="1000"><![CDATA[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]]></Image>
4 <CoordSystem>
5 <General ExtraPrecision="1" CursorSize="3"/>
6 <Coords UnitsDateString="YYYY/MM/DD" TypeString="Cartesian" ScaleXThetaString="Linear" UnitsX="0" UnitsY="0" UnitsTimeString="HH:MM:SS" UnitsThetaString="Degrees (DDD.DDDDD)" Type="0" UnitsRadiusString="Number" UnitsYString="Number" UnitsXString="Number" UnitsDate="3" UnitsRadius="0" Coords="0" ScaleYRadius="0" ScaleXTheta="0" UnitsTime="2" UnitsTheta="0" ScaleYRadiusString="Linear"/>
7 <DigitizeCurve CursorStandardCross="True" CursorLineWidth="2" CursorInnerRadius="5" CursorSize="1"/>
8 <Export PointsIntervalFunctions="10" PointsSelectionRelationsString="Unknown" PointsIntervalUnitsRelations="1" LayoutFunctions="1" LayoutFunctionsString="OnePerLine" XLabel="x" PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" PointsIntervalRelations="1" DelimiterString="Commas" Delimiter="0" Header="1" HeaderString="Simple" PointsSelectionRelations="3" PointsIntervalUnitsFunctions="1" OverrideCsvTsv="True">
9 <CurveNamesNotExported/>
10 </Export>
11 <AxesChecker Seconds="3" Mode="1" LineColor="6"/>
12 <GridDisplay StartX="0" CountX="2" StartY="0" CountY="2" DisableX="0" DisableY="0" StepX="1" StepY="1" Color="0" ColorString="Black" StopX="1" Stable="False" StopY="1"/>
13 <GridRemoval StartX="0" CoordDisableXString="Count" CountX="2" StartY="0" CountY="2" DefinedGridLines="False" CoordDisableX="0" StepX="0" CoordDisableY="0" StepY="0" CloseDistance="10" StopX="0" Stable="False" StopY="0" CoordDisableYString="Count"/>
14 <PointMatch ColorAcceptedString="Green" PointSize="48" ColorRejected="6" ColorRejectedString="Red" ColorAccepted="4" ColorCandidate="7" ColorCandidateString="Yellow"/>
15 <Segments PointSeparation="25" FillCorners="False" LineColor="4" LineColorString="Green" MinLength="2" LineWidth="4"/>
16 <Curve CurveName="Axes">
17 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
18 <CurveStyle CurveName="Axes">
19 <LineStyle ConnectAs="4" Color="8" ColorString="Transparent" Width="0" ConnectAsString="ConnectSkipForAxisCurve"/>
20 <PointStyle Shape="1" ShapeString="Cross" Color="6" ColorString="Red" Radius="10" LineWidth="1"/>
21 </CurveStyle>
22 <CurvePoints/>
23 </Curve>
24 <CurvesGraphs>
25 <Curve CurveName="Curve1">
26 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Curve1" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
27 <CurveStyle CurveName="Curve1">
28 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
29 <PointStyle Shape="1" ShapeString="Cross" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
30 </CurveStyle>
31 <CurvePoints/>
32 </Curve>
33 </CurvesGraphs>
34 </CoordSystem>
35 <OperatingSystem Endian="LittleEndian" WordSize="32"/>
36 <File Imported="True"/>
37 <CmdMediator>
38 <Cmd ScreenY="760.313" GraphX="-10" GraphY="-2" Ordinal="1" Description="Add axis point" IsXOnly="False" Identifier="Axes&#x9;point&#x9;1" Type="CmdAddPointAxis" ScreenX="55.2077"/>
39 <Cmd ScreenY="761.358" GraphX="10" GraphY="-2" Ordinal="2" Description="Add axis point" IsXOnly="False" Identifier="Axes&#x9;point&#x9;3" Type="CmdAddPointAxis" ScreenX="970.404"/>
40 <Cmd ScreenY="19.8433" GraphX="-10" GraphY="10" Ordinal="3" Description="Add axis point" IsXOnly="False" Identifier="Axes&#x9;point&#x9;5" Type="CmdAddPointAxis" ScreenX="55.7769"/>
41 <Cmd Description="Curve add/remove" Type="CmdSettingsCurveAddRemove">
42 <CurvesGraphs>
43 <Curve CurveName="Curve1">
44 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Curve1" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
45 <CurveStyle CurveName="Curve1">
46 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
47 <PointStyle Shape="1" ShapeString="Cross" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
48 </CurveStyle>
49 <CurvePoints/>
50 </Curve>
51 </CurvesGraphs>
52 <CurvesGraphs>
53 <Curve CurveName="red">
54 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="red" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
55 <CurveStyle CurveName="red">
56 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
57 <PointStyle Shape="1" ShapeString="Cross" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
58 </CurveStyle>
59 <CurvePoints/>
60 </Curve>
61 <Curve CurveName="green">
62 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="green" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
63 <CurveStyle CurveName="green">
64 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
65 <PointStyle Shape="5" ShapeString="X" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
66 </CurveStyle>
67 <CurvePoints/>
68 </Curve>
69 <Curve CurveName="blue">
70 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
71 <CurveStyle CurveName="blue">
72 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
73 <PointStyle Shape="2" ShapeString="Diamond" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
74 </CurveStyle>
75 <CurvePoints/>
76 </Curve>
77 </CurvesGraphs>
78 </Cmd>
79 <Cmd Description="Curve Properties settings" Type="CmdSettingsCurveProperties">
80 <CurveStyles>
81 <CurveStyle CurveName="green">
82 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
83 <PointStyle Shape="5" ShapeString="X" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
84 </CurveStyle>
85 <CurveStyle CurveName="Axes">
86 <LineStyle ConnectAs="4" Color="8" ColorString="Transparent" Width="0" ConnectAsString="ConnectSkipForAxisCurve"/>
87 <PointStyle Shape="1" ShapeString="Cross" Color="6" ColorString="Red" Radius="10" LineWidth="1"/>
88 </CurveStyle>
89 <CurveStyle CurveName="blue">
90 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
91 <PointStyle Shape="2" ShapeString="Diamond" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
92 </CurveStyle>
93 <CurveStyle CurveName="red">
94 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
95 <PointStyle Shape="1" ShapeString="Cross" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
96 </CurveStyle>
97 </CurveStyles>
98 <CurveStyles>
99 <CurveStyle CurveName="green">
100 <LineStyle ConnectAs="0" Color="4" ColorString="Green" Width="1" ConnectAsString="FunctionSmooth"/>
101 <PointStyle Shape="5" ShapeString="X" Color="4" ColorString="Green" Radius="10" LineWidth="1"/>
102 </CurveStyle>
103 <CurveStyle CurveName="Axes">
104 <LineStyle ConnectAs="4" Color="8" ColorString="Transparent" Width="0" ConnectAsString="ConnectSkipForAxisCurve"/>
105 <PointStyle Shape="1" ShapeString="Cross" Color="6" ColorString="Red" Radius="10" LineWidth="1"/>
106 </CurveStyle>
107 <CurveStyle CurveName="blue">
108 <LineStyle ConnectAs="0" Color="1" ColorString="Blue" Width="1" ConnectAsString="FunctionSmooth"/>
109 <PointStyle Shape="2" ShapeString="Diamond" Color="1" ColorString="Blue" Radius="10" LineWidth="1"/>
110 </CurveStyle>
111 <CurveStyle CurveName="red">
112 <LineStyle ConnectAs="0" Color="6" ColorString="Red" Width="1" ConnectAsString="FunctionSmooth"/>
113 <PointStyle Shape="1" ShapeString="Cross" Color="6" ColorString="Red" Radius="10" LineWidth="1"/>
114 </CurveStyle>
115 </CurveStyles>
116 </Cmd>
117 <Cmd Description="Filter settings" Type="CmdSettingsColorFilter">
118 <Filter>
119 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="green" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
120 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
121 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
122 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="red" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
123 </Filter>
124 <Filter>
125 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="green" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
126 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
127 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
128 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="0" ValueHigh="50" IntensityHigh="50" HueHigh="3" ValueLow="0" CurveName="red" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
129 </Filter>
130 </Cmd>
131 <Cmd Description="Add graph points" CurveName="red" Type="CmdAddPointsGraph">
132 <Point ScreenY="750" Ordinal="1" Identifier="red&#x9;point&#x9;6" ScreenX="57"/>
133 <Point ScreenY="726" Ordinal="1" Identifier="red&#x9;point&#x9;7" ScreenX="62"/>
134 <Point ScreenY="701" Ordinal="1" Identifier="red&#x9;point&#x9;8" ScreenX="68"/>
135 <Point ScreenY="677" Ordinal="1" Identifier="red&#x9;point&#x9;9" ScreenX="73"/>
136 <Point ScreenY="652" Ordinal="1" Identifier="red&#x9;point&#x9;10" ScreenX="79"/>
137 <Point ScreenY="628" Ordinal="1" Identifier="red&#x9;point&#x9;11" ScreenX="85"/>
138 <Point ScreenY="604" Ordinal="1" Identifier="red&#x9;point&#x9;12" ScreenX="91"/>
139 <Point ScreenY="580" Ordinal="1" Identifier="red&#x9;point&#x9;13" ScreenX="97"/>
140 <Point ScreenY="555" Ordinal="1" Identifier="red&#x9;point&#x9;14" ScreenX="103"/>
141 <Point ScreenY="531" Ordinal="1" Identifier="red&#x9;point&#x9;15" ScreenX="109"/>
142 <Point ScreenY="507" Ordinal="1" Identifier="red&#x9;point&#x9;16" ScreenX="116"/>
143 <Point ScreenY="483" Ordinal="1" Identifier="red&#x9;point&#x9;17" ScreenX="123"/>
144 <Point ScreenY="459" Ordinal="1" Identifier="red&#x9;point&#x9;18" ScreenX="131"/>
145 <Point ScreenY="436" Ordinal="1" Identifier="red&#x9;point&#x9;19" ScreenX="139"/>
146 <Point ScreenY="412" Ordinal="1" Identifier="red&#x9;point&#x9;20" ScreenX="147"/>
147 <Point ScreenY="389" Ordinal="1" Identifier="red&#x9;point&#x9;21" ScreenX="157"/>
148 <Point ScreenY="367" Ordinal="1" Identifier="red&#x9;point&#x9;22" ScreenX="168"/>
149 <Point ScreenY="344" Ordinal="1" Identifier="red&#x9;point&#x9;23" ScreenX="179"/>
150 <Point ScreenY="324" Ordinal="1" Identifier="red&#x9;point&#x9;24" ScreenX="194"/>
151 <Point ScreenY="308" Ordinal="1" Identifier="red&#x9;point&#x9;25" ScreenX="212"/>
152 <Point ScreenY="301" Ordinal="1" Identifier="red&#x9;point&#x9;26" ScreenX="236"/>
153 </Cmd>
154 <Cmd Description="Add graph points" CurveName="red" Type="CmdAddPointsGraph">
155 <Point ScreenY="313" Ordinal="21.5" Identifier="red&#x9;point&#x9;27" ScreenX="267"/>
156 <Point ScreenY="330" Ordinal="21.5" Identifier="red&#x9;point&#x9;28" ScreenX="285"/>
157 <Point ScreenY="350" Ordinal="21.5" Identifier="red&#x9;point&#x9;29" ScreenX="300"/>
158 <Point ScreenY="371" Ordinal="21.5" Identifier="red&#x9;point&#x9;30" ScreenX="314"/>
159 <Point ScreenY="392" Ordinal="21.5" Identifier="red&#x9;point&#x9;31" ScreenX="327"/>
160 <Point ScreenY="414" Ordinal="21.5" Identifier="red&#x9;point&#x9;32" ScreenX="339"/>
161 <Point ScreenY="436" Ordinal="21.5" Identifier="red&#x9;point&#x9;33" ScreenX="351"/>
162 <Point ScreenY="458" Ordinal="21.5" Identifier="red&#x9;point&#x9;34" ScreenX="363"/>
163 <Point ScreenY="480" Ordinal="21.5" Identifier="red&#x9;point&#x9;35" ScreenX="375"/>
164 <Point ScreenY="502" Ordinal="21.5" Identifier="red&#x9;point&#x9;36" ScreenX="386"/>
165 <Point ScreenY="524" Ordinal="13.5" Identifier="red&#x9;point&#x9;37" ScreenX="399"/>
166 <Point ScreenY="545" Ordinal="13.5" Identifier="red&#x9;point&#x9;38" ScreenX="412"/>
167 <Point ScreenY="567" Ordinal="12.5" Identifier="red&#x9;point&#x9;39" ScreenX="425"/>
168 <Point ScreenY="586" Ordinal="11.5" Identifier="red&#x9;point&#x9;40" ScreenX="440"/>
169 <Point ScreenY="606" Ordinal="11.5" Identifier="red&#x9;point&#x9;41" ScreenX="456"/>
170 <Point ScreenY="623" Ordinal="10.5" Identifier="red&#x9;point&#x9;42" ScreenX="474"/>
171 </Cmd>
172 <Cmd Description="Add graph points" CurveName="red" Type="CmdAddPointsGraph">
173 <Point ScreenY="634" Ordinal="37.5" Identifier="red&#x9;point&#x9;43" ScreenX="531"/>
174 <Point ScreenY="622" Ordinal="37.5" Identifier="red&#x9;point&#x9;44" ScreenX="553"/>
175 <Point ScreenY="605" Ordinal="37.5" Identifier="red&#x9;point&#x9;45" ScreenX="571"/>
176 <Point ScreenY="586" Ordinal="37.5" Identifier="red&#x9;point&#x9;46" ScreenX="587"/>
177 <Point ScreenY="566" Ordinal="37.5" Identifier="red&#x9;point&#x9;47" ScreenX="602"/>
178 <Point ScreenY="544" Ordinal="37.5" Identifier="red&#x9;point&#x9;48" ScreenX="615"/>
179 <Point ScreenY="523" Ordinal="37.5" Identifier="red&#x9;point&#x9;49" ScreenX="627"/>
180 <Point ScreenY="501" Ordinal="37.5" Identifier="red&#x9;point&#x9;50" ScreenX="640"/>
181 <Point ScreenY="479" Ordinal="37.5" Identifier="red&#x9;point&#x9;51" ScreenX="652"/>
182 <Point ScreenY="457" Ordinal="37.5" Identifier="red&#x9;point&#x9;52" ScreenX="663"/>
183 <Point ScreenY="435" Ordinal="37.5" Identifier="red&#x9;point&#x9;53" ScreenX="675"/>
184 <Point ScreenY="413" Ordinal="37.5" Identifier="red&#x9;point&#x9;54" ScreenX="687"/>
185 <Point ScreenY="391" Ordinal="37.5" Identifier="red&#x9;point&#x9;55" ScreenX="699"/>
186 <Point ScreenY="370" Ordinal="33.5" Identifier="red&#x9;point&#x9;56" ScreenX="712"/>
187 <Point ScreenY="349" Ordinal="32.5" Identifier="red&#x9;point&#x9;57" ScreenX="727"/>
188 <Point ScreenY="330" Ordinal="32.5" Identifier="red&#x9;point&#x9;58" ScreenX="742"/>
189 </Cmd>
190 <Cmd Description="Add graph points" CurveName="red" Type="CmdAddPointsGraph">
191 <Point ScreenY="301" Ordinal="53.5" Identifier="red&#x9;point&#x9;59" ScreenX="783"/>
192 <Point ScreenY="304" Ordinal="53.5" Identifier="red&#x9;point&#x9;60" ScreenX="807"/>
193 <Point ScreenY="319" Ordinal="53.5" Identifier="red&#x9;point&#x9;61" ScreenX="827"/>
194 <Point ScreenY="338" Ordinal="53.5" Identifier="red&#x9;point&#x9;62" ScreenX="843"/>
195 <Point ScreenY="360" Ordinal="53.5" Identifier="red&#x9;point&#x9;63" ScreenX="855"/>
196 <Point ScreenY="383" Ordinal="53.5" Identifier="red&#x9;point&#x9;64" ScreenX="866"/>
197 <Point ScreenY="405" Ordinal="53.5" Identifier="red&#x9;point&#x9;65" ScreenX="876"/>
198 <Point ScreenY="429" Ordinal="53.5" Identifier="red&#x9;point&#x9;66" ScreenX="885"/>
199 <Point ScreenY="452" Ordinal="52.5" Identifier="red&#x9;point&#x9;67" ScreenX="893"/>
200 <Point ScreenY="476" Ordinal="52.5" Identifier="red&#x9;point&#x9;68" ScreenX="901"/>
201 <Point ScreenY="500" Ordinal="51.5" Identifier="red&#x9;point&#x9;69" ScreenX="908"/>
202 <Point ScreenY="524" Ordinal="49.5" Identifier="red&#x9;point&#x9;70" ScreenX="915"/>
203 <Point ScreenY="548" Ordinal="48.5" Identifier="red&#x9;point&#x9;71" ScreenX="921"/>
204 <Point ScreenY="572" Ordinal="48.5" Identifier="red&#x9;point&#x9;72" ScreenX="927"/>
205 <Point ScreenY="597" Ordinal="47.5" Identifier="red&#x9;point&#x9;73" ScreenX="933"/>
206 <Point ScreenY="621" Ordinal="46.5" Identifier="red&#x9;point&#x9;74" ScreenX="939"/>
207 <Point ScreenY="645" Ordinal="45.5" Identifier="red&#x9;point&#x9;75" ScreenX="945"/>
208 <Point ScreenY="670" Ordinal="45.5" Identifier="red&#x9;point&#x9;76" ScreenX="951"/>
209 <Point ScreenY="694" Ordinal="44.5" Identifier="red&#x9;point&#x9;77" ScreenX="957"/>
210 <Point ScreenY="718" Ordinal="43.5" Identifier="red&#x9;point&#x9;78" ScreenX="962"/>
211 <Point ScreenY="743" Ordinal="43.5" Identifier="red&#x9;point&#x9;79" ScreenX="967"/>
212 </Cmd>
213 <Cmd Description="Filter settings" Type="CmdSettingsColorFilter">
214 <Filter>
215 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="green" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
216 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
217 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
218 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="0" ValueHigh="50" IntensityHigh="50" HueHigh="3" ValueLow="0" CurveName="red" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
219 </Filter>
220 <Filter>
221 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="115" ValueHigh="50" IntensityHigh="50" HueHigh="122" ValueLow="0" CurveName="green" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
222 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
223 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
224 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="0" ValueHigh="50" IntensityHigh="50" HueHigh="3" ValueLow="0" CurveName="red" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
225 </Filter>
226 </Cmd>
227 <Cmd Description="Add graph points" CurveName="green" Type="CmdAddPointsGraph">
228 <Point ScreenY="267" Ordinal="1" Identifier="green&#x9;point&#x9;80" ScreenX="57"/>
229 <Point ScreenY="245" Ordinal="1" Identifier="green&#x9;point&#x9;81" ScreenX="69"/>
230 <Point ScreenY="225" Ordinal="1" Identifier="green&#x9;point&#x9;82" ScreenX="84"/>
231 <Point ScreenY="206" Ordinal="1" Identifier="green&#x9;point&#x9;83" ScreenX="100"/>
232 <Point ScreenY="193" Ordinal="1" Identifier="green&#x9;point&#x9;84" ScreenX="121"/>
233 <Point ScreenY="188" Ordinal="1" Identifier="green&#x9;point&#x9;85" ScreenX="145"/>
234 <Point ScreenY="195" Ordinal="1" Identifier="green&#x9;point&#x9;86" ScreenX="169"/>
235 <Point ScreenY="209" Ordinal="1" Identifier="green&#x9;point&#x9;87" ScreenX="189"/>
236 </Cmd>
237 <Cmd Description="Add graph points" CurveName="green" Type="CmdAddPointsGraph">
238 <Point ScreenY="213" Ordinal="8.5" Identifier="green&#x9;point&#x9;88" ScreenX="194"/>
239 <Point ScreenY="231" Ordinal="8.5" Identifier="green&#x9;point&#x9;89" ScreenX="211"/>
240 <Point ScreenY="251" Ordinal="8.5" Identifier="green&#x9;point&#x9;90" ScreenX="226"/>
241 <Point ScreenY="271" Ordinal="8.5" Identifier="green&#x9;point&#x9;91" ScreenX="241"/>
242 <Point ScreenY="293" Ordinal="8.5" Identifier="green&#x9;point&#x9;92" ScreenX="254"/>
243 <Point ScreenY="314" Ordinal="8.5" Identifier="green&#x9;point&#x9;93" ScreenX="267"/>
244 <Point ScreenY="336" Ordinal="8.5" Identifier="green&#x9;point&#x9;94" ScreenX="280"/>
245 <Point ScreenY="358" Ordinal="8.5" Identifier="green&#x9;point&#x9;95" ScreenX="291"/>
246 <Point ScreenY="380" Ordinal="8.5" Identifier="green&#x9;point&#x9;96" ScreenX="303"/>
247 <Point ScreenY="401" Ordinal="8.5" Identifier="green&#x9;point&#x9;97" ScreenX="315"/>
248 <Point ScreenY="424" Ordinal="8.5" Identifier="green&#x9;point&#x9;98" ScreenX="327"/>
249 <Point ScreenY="446" Ordinal="8.5" Identifier="green&#x9;point&#x9;99" ScreenX="338"/>
250 <Point ScreenY="468" Ordinal="8.5" Identifier="green&#x9;point&#x9;100" ScreenX="350"/>
251 <Point ScreenY="489" Ordinal="8.5" Identifier="green&#x9;point&#x9;101" ScreenX="363"/>
252 <Point ScreenY="511" Ordinal="8.5" Identifier="green&#x9;point&#x9;102" ScreenX="375"/>
253 <Point ScreenY="532" Ordinal="8.5" Identifier="green&#x9;point&#x9;103" ScreenX="389"/>
254 <Point ScreenY="553" Ordinal="8.5" Identifier="green&#x9;point&#x9;104" ScreenX="403"/>
255 <Point ScreenY="573" Ordinal="8.5" Identifier="green&#x9;point&#x9;105" ScreenX="418"/>
256 <Point ScreenY="592" Ordinal="8.5" Identifier="green&#x9;point&#x9;106" ScreenX="434"/>
257 <Point ScreenY="609" Ordinal="8.5" Identifier="green&#x9;point&#x9;107" ScreenX="451"/>
258 <Point ScreenY="625" Ordinal="8.5" Identifier="green&#x9;point&#x9;108" ScreenX="471"/>
259 </Cmd>
260 <Cmd Description="Add graph points" CurveName="green" Type="CmdAddPointsGraph">
261 <Point ScreenY="631" Ordinal="29.5" Identifier="green&#x9;point&#x9;109" ScreenX="542"/>
262 <Point ScreenY="619" Ordinal="29.5" Identifier="green&#x9;point&#x9;110" ScreenX="564"/>
263 <Point ScreenY="603" Ordinal="29.5" Identifier="green&#x9;point&#x9;111" ScreenX="582"/>
264 <Point ScreenY="584" Ordinal="29.5" Identifier="green&#x9;point&#x9;112" ScreenX="600"/>
265 <Point ScreenY="565" Ordinal="29.5" Identifier="green&#x9;point&#x9;113" ScreenX="615"/>
266 <Point ScreenY="544" Ordinal="29.5" Identifier="green&#x9;point&#x9;114" ScreenX="629"/>
267 <Point ScreenY="523" Ordinal="29.5" Identifier="green&#x9;point&#x9;115" ScreenX="643"/>
268 <Point ScreenY="502" Ordinal="29.5" Identifier="green&#x9;point&#x9;116" ScreenX="656"/>
269 <Point ScreenY="480" Ordinal="29.5" Identifier="green&#x9;point&#x9;117" ScreenX="668"/>
270 <Point ScreenY="459" Ordinal="29.5" Identifier="green&#x9;point&#x9;118" ScreenX="681"/>
271 <Point ScreenY="436" Ordinal="29.5" Identifier="green&#x9;point&#x9;119" ScreenX="692"/>
272 <Point ScreenY="414" Ordinal="29.5" Identifier="green&#x9;point&#x9;120" ScreenX="704"/>
273 <Point ScreenY="392" Ordinal="29.5" Identifier="green&#x9;point&#x9;121" ScreenX="716"/>
274 <Point ScreenY="370" Ordinal="29.5" Identifier="green&#x9;point&#x9;122" ScreenX="728"/>
275 <Point ScreenY="348" Ordinal="29.5" Identifier="green&#x9;point&#x9;123" ScreenX="740"/>
276 <Point ScreenY="326" Ordinal="29.5" Identifier="green&#x9;point&#x9;124" ScreenX="751"/>
277 <Point ScreenY="305" Ordinal="29.5" Identifier="green&#x9;point&#x9;125" ScreenX="765"/>
278 <Point ScreenY="283" Ordinal="29.5" Identifier="green&#x9;point&#x9;126" ScreenX="777"/>
279 <Point ScreenY="263" Ordinal="29.5" Identifier="green&#x9;point&#x9;127" ScreenX="791"/>
280 <Point ScreenY="243" Ordinal="21.5" Identifier="green&#x9;point&#x9;128" ScreenX="806"/>
281 <Point ScreenY="223" Ordinal="21.5" Identifier="green&#x9;point&#x9;129" ScreenX="822"/>
282 </Cmd>
283 <Cmd Description="Add graph points" CurveName="green" Type="CmdAddPointsGraph">
284 <Point ScreenY="211" Ordinal="50.5" Identifier="green&#x9;point&#x9;130" ScreenX="835"/>
285 <Point ScreenY="196" Ordinal="50.5" Identifier="green&#x9;point&#x9;131" ScreenX="855"/>
286 <Point ScreenY="188" Ordinal="50.5" Identifier="green&#x9;point&#x9;132" ScreenX="878"/>
287 <Point ScreenY="192" Ordinal="50.5" Identifier="green&#x9;point&#x9;133" ScreenX="902"/>
288 <Point ScreenY="204" Ordinal="50.5" Identifier="green&#x9;point&#x9;134" ScreenX="923"/>
289 <Point ScreenY="222" Ordinal="50.5" Identifier="green&#x9;point&#x9;135" ScreenX="941"/>
290 <Point ScreenY="242" Ordinal="50.5" Identifier="green&#x9;point&#x9;136" ScreenX="955"/>
291 <Point ScreenY="264" Ordinal="50.5" Identifier="green&#x9;point&#x9;137" ScreenX="968"/>
292 </Cmd>
293 <Cmd Description="Filter settings" Type="CmdSettingsColorFilter">
294 <Filter>
295 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="115" ValueHigh="50" IntensityHigh="50" HueHigh="122" ValueLow="0" CurveName="green" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
296 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
297 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="blue" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
298 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="0" ValueHigh="50" IntensityHigh="50" HueHigh="3" ValueLow="0" CurveName="red" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
299 </Filter>
300 <Filter>
301 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="115" ValueHigh="50" IntensityHigh="50" HueHigh="122" ValueLow="0" CurveName="green" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
302 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="180" ValueHigh="50" IntensityHigh="50" HueHigh="360" ValueLow="0" CurveName="Axes" Mode="2" ModeString="Intensity" IntensityLow="0" ForegroundHigh="10"/>
303 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="204" ValueHigh="50" IntensityHigh="50" HueHigh="211" ValueLow="0" CurveName="blue" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
304 <ColorFilter SaturationLow="50" SaturationHigh="100" ForegroundLow="0" HueLow="0" ValueHigh="50" IntensityHigh="50" HueHigh="3" ValueLow="0" CurveName="red" Mode="1" ModeString="Hue" IntensityLow="0" ForegroundHigh="10"/>
305 </Filter>
306 </Cmd>
307 <Cmd Description="Add graph points" CurveName="blue" Type="CmdAddPointsGraph">
308 <Point ScreenY="76" Ordinal="1" Identifier="blue&#x9;point&#x9;138" ScreenX="57"/>
309 <Point ScreenY="84" Ordinal="1" Identifier="blue&#x9;point&#x9;139" ScreenX="81"/>
310 <Point ScreenY="97" Ordinal="1" Identifier="blue&#x9;point&#x9;140" ScreenX="102"/>
311 <Point ScreenY="113" Ordinal="1" Identifier="blue&#x9;point&#x9;141" ScreenX="121"/>
312 <Point ScreenY="131" Ordinal="1" Identifier="blue&#x9;point&#x9;142" ScreenX="137"/>
313 <Point ScreenY="151" Ordinal="1" Identifier="blue&#x9;point&#x9;143" ScreenX="153"/>
314 <Point ScreenY="171" Ordinal="1" Identifier="blue&#x9;point&#x9;144" ScreenX="168"/>
315 <Point ScreenY="192" Ordinal="1" Identifier="blue&#x9;point&#x9;145" ScreenX="181"/>
316 <Point ScreenY="214" Ordinal="1" Identifier="blue&#x9;point&#x9;146" ScreenX="194"/>
317 <Point ScreenY="235" Ordinal="1" Identifier="blue&#x9;point&#x9;147" ScreenX="207"/>
318 <Point ScreenY="257" Ordinal="1" Identifier="blue&#x9;point&#x9;148" ScreenX="219"/>
319 <Point ScreenY="279" Ordinal="1" Identifier="blue&#x9;point&#x9;149" ScreenX="231"/>
320 <Point ScreenY="301" Ordinal="1" Identifier="blue&#x9;point&#x9;150" ScreenX="243"/>
321 <Point ScreenY="323" Ordinal="1" Identifier="blue&#x9;point&#x9;151" ScreenX="255"/>
322 <Point ScreenY="345" Ordinal="1" Identifier="blue&#x9;point&#x9;152" ScreenX="267"/>
323 <Point ScreenY="367" Ordinal="1" Identifier="blue&#x9;point&#x9;153" ScreenX="278"/>
324 <Point ScreenY="389" Ordinal="1" Identifier="blue&#x9;point&#x9;154" ScreenX="290"/>
325 <Point ScreenY="411" Ordinal="1" Identifier="blue&#x9;point&#x9;155" ScreenX="302"/>
326 <Point ScreenY="433" Ordinal="1" Identifier="blue&#x9;point&#x9;156" ScreenX="314"/>
327 <Point ScreenY="454" Ordinal="1" Identifier="blue&#x9;point&#x9;157" ScreenX="327"/>
328 <Point ScreenY="476" Ordinal="1" Identifier="blue&#x9;point&#x9;158" ScreenX="339"/>
329 <Point ScreenY="497" Ordinal="1" Identifier="blue&#x9;point&#x9;159" ScreenX="352"/>
330 <Point ScreenY="518" Ordinal="1" Identifier="blue&#x9;point&#x9;160" ScreenX="366"/>
331 <Point ScreenY="539" Ordinal="1" Identifier="blue&#x9;point&#x9;161" ScreenX="380"/>
332 <Point ScreenY="559" Ordinal="1" Identifier="blue&#x9;point&#x9;162" ScreenX="395"/>
333 <Point ScreenY="578" Ordinal="1" Identifier="blue&#x9;point&#x9;163" ScreenX="411"/>
334 <Point ScreenY="596" Ordinal="1" Identifier="blue&#x9;point&#x9;164" ScreenX="428"/>
335 <Point ScreenY="612" Ordinal="1" Identifier="blue&#x9;point&#x9;165" ScreenX="447"/>
336 <Point ScreenY="625" Ordinal="1" Identifier="blue&#x9;point&#x9;166" ScreenX="468"/>
337 <Point ScreenY="634" Ordinal="1" Identifier="blue&#x9;point&#x9;167" ScreenX="491"/>
338 <Point ScreenY="637" Ordinal="1" Identifier="blue&#x9;point&#x9;168" ScreenX="516"/>
339 <Point ScreenY="633" Ordinal="1" Identifier="blue&#x9;point&#x9;169" ScreenX="540"/>
340 <Point ScreenY="623" Ordinal="1" Identifier="blue&#x9;point&#x9;170" ScreenX="563"/>
341 <Point ScreenY="609" Ordinal="1" Identifier="blue&#x9;point&#x9;171" ScreenX="583"/>
342 <Point ScreenY="592" Ordinal="1" Identifier="blue&#x9;point&#x9;172" ScreenX="602"/>
343 <Point ScreenY="574" Ordinal="1" Identifier="blue&#x9;point&#x9;173" ScreenX="619"/>
344 <Point ScreenY="554" Ordinal="1" Identifier="blue&#x9;point&#x9;174" ScreenX="635"/>
345 <Point ScreenY="534" Ordinal="1" Identifier="blue&#x9;point&#x9;175" ScreenX="649"/>
346 <Point ScreenY="513" Ordinal="1" Identifier="blue&#x9;point&#x9;176" ScreenX="663"/>
347 <Point ScreenY="493" Ordinal="1" Identifier="blue&#x9;point&#x9;177" ScreenX="677"/>
348 <Point ScreenY="471" Ordinal="1" Identifier="blue&#x9;point&#x9;178" ScreenX="690"/>
349 <Point ScreenY="449" Ordinal="1" Identifier="blue&#x9;point&#x9;179" ScreenX="702"/>
350 <Point ScreenY="428" Ordinal="1" Identifier="blue&#x9;point&#x9;180" ScreenX="714"/>
351 <Point ScreenY="406" Ordinal="1" Identifier="blue&#x9;point&#x9;181" ScreenX="727"/>
352 <Point ScreenY="384" Ordinal="1" Identifier="blue&#x9;point&#x9;182" ScreenX="738"/>
353 <Point ScreenY="362" Ordinal="1" Identifier="blue&#x9;point&#x9;183" ScreenX="750"/>
354 <Point ScreenY="340" Ordinal="1" Identifier="blue&#x9;point&#x9;184" ScreenX="762"/>
355 <Point ScreenY="318" Ordinal="1" Identifier="blue&#x9;point&#x9;185" ScreenX="774"/>
356 <Point ScreenY="296" Ordinal="1" Identifier="blue&#x9;point&#x9;186" ScreenX="786"/>
357 <Point ScreenY="274" Ordinal="1" Identifier="blue&#x9;point&#x9;187" ScreenX="798"/>
358 <Point ScreenY="252" Ordinal="1" Identifier="blue&#x9;point&#x9;188" ScreenX="810"/>
359 <Point ScreenY="230" Ordinal="1" Identifier="blue&#x9;point&#x9;189" ScreenX="822"/>
360 <Point ScreenY="209" Ordinal="1" Identifier="blue&#x9;point&#x9;190" ScreenX="835"/>
361 <Point ScreenY="187" Ordinal="1" Identifier="blue&#x9;point&#x9;191" ScreenX="848"/>
362 <Point ScreenY="166" Ordinal="1" Identifier="blue&#x9;point&#x9;192" ScreenX="862"/>
363 <Point ScreenY="146" Ordinal="1" Identifier="blue&#x9;point&#x9;193" ScreenX="877"/>
364 <Point ScreenY="127" Ordinal="1" Identifier="blue&#x9;point&#x9;194" ScreenX="892"/>
365 <Point ScreenY="109" Ordinal="1" Identifier="blue&#x9;point&#x9;195" ScreenX="909"/>
366 <Point ScreenY="94" Ordinal="1" Identifier="blue&#x9;point&#x9;196" ScreenX="928"/>
367 <Point ScreenY="82" Ordinal="1" Identifier="blue&#x9;point&#x9;197" ScreenX="949"/>
368 </Cmd>
369 <Cmd Description="Export settings" Type="CmdSettingsExport">
370 <Export PointsIntervalFunctions="10" PointsSelectionRelationsString="Unknown" PointsIntervalUnitsRelations="1" LayoutFunctions="1" LayoutFunctionsString="OnePerLine" XLabel="x" PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" PointsIntervalRelations="1" DelimiterString="Commas" Delimiter="0" Header="1" HeaderString="Simple" PointsSelectionRelations="3" PointsIntervalUnitsFunctions="1" OverrideCsvTsv="True">
371 <CurveNamesNotExported/>
372 </Export>
373 <Export PointsIntervalFunctions="10" PointsSelectionRelationsString="Unknown" PointsIntervalUnitsRelations="1" LayoutFunctions="1" LayoutFunctionsString="OnePerLine" XLabel="x" PointsSelectionFunctions="3" PointsSelectionFunctionsString="Raw" PointsIntervalRelations="1" DelimiterString="Commas" Delimiter="0" Header="2" HeaderString="Gnuplot" PointsSelectionRelations="3" PointsIntervalUnitsFunctions="1" OverrideCsvTsv="True">
374 <CurveNamesNotExported/>
375 </Export>
376 </Cmd>
377 </CmdMediator>
378 <Error File="src/main/MainWindow.cpp" Line="1292" Context="Shift+Control+E" Comment="userTriggered"/>
379 </Document>
380 </ErrorReport>
Binary diff not shown
0 -filecmdscript ../test/jpeg2000/jpeg2000.test.xml -regression
0 <Script>
1 <Cmd Type="CmdFileImport" FileName="../test/jpeg2000/jpeg2000.jp2" />
2 </Script>
0 pdf.csv_actual_1
Binary diff not shown
0 -filecmdscript ../test/pdf/pdf_one_page.test.xml -regression
0 <Script>
1 <Cmd Type="CmdFileImport" FileName="../test/pdf/pdf_one_page.pdf" />
2 </Script>
00 x,Curve1,Curve2,Curve3
1 -179.354,2.743,2.231,1.851
2 -179.191,2.743,2.231,1.854
1 -179.354,2.711,2.228,1.851
2 -179.191,2.716,2.231,1.854
33 -178.126,2.743,2.251,1.874
44 -173.822,2.852,2.336,1.954
55 -173.664,2.856,2.34,1.957
184184 169.035,2.442,1.972,1.629
185185 172.336,2.516,2.039,1.692
186186 173.754,2.548,2.068,1.72
187 175.172,2.581,2.097,1.72
188 177.215,2.627,2.097,1.72
187 175.172,2.581,2.097,1.747
188 177.215,2.627,2.138,1.786