diff --git a/.gitignore b/.gitignore
index 1090eec..a0d164f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,4 +29,10 @@
*moc_*
*GeneratedFiles*
*.unsuccessfulbuild
-*\Obj\*
\ No newline at end of file
+*\Obj\*
+Builds/MSVC/VS2010/Obj/x64/Debug/EmberCL_manifest.rc
+Builds/MSVC/VS2010/Obj/EmberTester/x64/Debug/EmberTester_manifest.rc
+Builds/MSVC/VS2010/Obj/EmberRender/x64/Debug/EmberRender_manifest.rc
+Builds/MSVC/VS2010/Obj/EmberGenome/x64/Debug/EmberGenome_manifest.rc
+Builds/MSVC/VS2010/Obj/EmberAnimate/x64/Debug/EmberAnimate_manifest.rc
+Builds/MSVC/VS2010/Obj/Ember/x64/Debug/Ember_manifest.rc
\ No newline at end of file
diff --git a/Builds/MSVC/VS2010/Fractorium.sln b/Builds/MSVC/VS2010/Fractorium.sln
index f126860..9ca557c 100644
--- a/Builds/MSVC/VS2010/Fractorium.sln
+++ b/Builds/MSVC/VS2010/Fractorium.sln
@@ -579,6 +579,7 @@ Global
{C8096C47-E358-438C-A520-146D46B0637D}.Release|Mixed Platforms.Build.0 = Release|x86
{C8096C47-E358-438C-A520-146D46B0637D}.Release|Win32.ActiveCfg = Release|x86
{C8096C47-E358-438C-A520-146D46B0637D}.Release|x64.ActiveCfg = Release|x64
+ {C8096C47-E358-438C-A520-146D46B0637D}.Release|x64.Build.0 = Release|x64
{C8096C47-E358-438C-A520-146D46B0637D}.Release|x86.ActiveCfg = Release|x86
{C8096C47-E358-438C-A520-146D46B0637D}.Release|x86.Build.0 = Release|x86
{C8096C47-E358-438C-A520-146D46B0637D}.Release-MT|Mixed Platforms.ActiveCfg = Release|x86
diff --git a/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj b/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj
index e8c2ec5..9902321 100644
--- a/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj
+++ b/Builds/MSVC/VS2010/FractoriumInstaller/FractoriumInstaller.wixproj
@@ -6,7 +6,7 @@
3.7
{c8096c47-e358-438c-a520-146d46b0637d}
2.0
- Fractorium_Beta_0.4.0.7
+ Fractorium_Beta_0.4.0.8
Package
$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets
$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets
diff --git a/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs b/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs
index 7ced111..d44f184 100644
--- a/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs
+++ b/Builds/MSVC/VS2010/FractoriumInstaller/Product.wxs
@@ -1,6 +1,6 @@
-
+
@@ -13,7 +13,7 @@
-
+
::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way.
#define ISAAC_SIZE 4
diff --git a/Source/Ember/Variations04.h b/Source/Ember/Variations04.h
index e8086d5..6d5b71a 100644
--- a/Source/Ember/Variations04.h
+++ b/Source/Ember/Variations04.h
@@ -4211,8 +4211,6 @@ public:
}
}
- helper.Out.x = 0;//Needed because of possible sum below.
- helper.Out.y = 0;
r = fabs(r0 - T(0.5)) * m_OneOverRmax;
if (r < 1)
@@ -4220,6 +4218,11 @@ public:
helper.Out.x = m_Size * (x + Floor(helper.In.x));
helper.Out.y = m_Size * (y + Floor(helper.In.y));
}
+ else
+ {
+ helper.Out.x = 0;//Needed because of possible sum below.
+ helper.Out.y = 0;
+ }
r = fabs(r1 - T(0.5)) * m_OneOverRmax;
@@ -4346,8 +4349,6 @@ public:
<< "\t\t }\n"
<< "\t\t}\n"
<< "\n"
- << "\t\tvOut.x = 0;\n"
- << "\t\tvOut.y = 0;\n"
<< "\t\tr = fabs(r0 - 0.5) * " << oneOverRmax << ";\n"
<< "\n"
<< "\t\tif (r < 1)\n"
@@ -4355,6 +4356,11 @@ public:
<< "\t\t vOut.x = " << size << " * (x + floor(vIn.x));\n"
<< "\t\t vOut.y = " << size << " * (y + floor(vIn.y));\n"
<< "\t\t}\n"
+ << "\t\telse\n"
+ << "\t\t{\n"
+ << "\t\t vOut.x = 0.0;\n"
+ << "\t\t vOut.y = 0.0;\n"
+ << "\t\t}\n"
<< "\n"
<< "\t\tr = fabs(r1 - 0.5) * " << oneOverRmax << ";\n"
<< "\n"
diff --git a/Source/Ember/Variations05.h b/Source/Ember/Variations05.h
index fe31342..c4d84e1 100644
--- a/Source/Ember/Variations05.h
+++ b/Source/Ember/Variations05.h
@@ -2117,12 +2117,12 @@ public:
void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand)
{
- const T ax = rand.Frand11();
- const T ay = rand.Frand11();
- const T az = rand.Frand11();
+ const T ax = rand.Frand(T(-0.5), T(0.5));
+ const T ay = rand.Frand(T(-0.5), T(0.5));
+ const T az = rand.Frand(T(-0.5), T(0.5));
const T r = sqrt(Sqr(helper.In.x - m_X0) + Sqr(helper.In.y - m_Y0) + Sqr(helper.In.z - m_Z0));
- const T rc = ((m_Invert != 0 ? min(1 - r, 0) : min(r, 0)) - m_MinDist) * m_InternalScatter;
- const T rs = min(rc, 0);
+ const T rc = ((m_Invert != 0 ? max(1 - r, 0) : max(r, 0)) - m_MinDist) * m_InternalScatter;//Original called a macro named min, which internally performed max.
+ const T rs = max(rc, 0);
T sigma, phi, rad, sigmas, sigmac, phis, phic;
T scale, denom;
@@ -2178,12 +2178,12 @@ public:
string internalScatter = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
ss << "\t{\n"
- << "\t\tconst real_t ax = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t ay = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t az = MwcNextNeg1Pos1(mwc);\n"
+ << "\t\tconst real_t ax = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t ay = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t az = MwcNext0505(mwc);\n"
<< "\t\tconst real_t r = sqrt(Sqr(vIn.x - " << x0 << ") + Sqr(vIn.y - " << y0 << ") + Sqr(vIn.z - " << z0 << "));\n"
- << "\t\tconst real_t rc = ((" << invert << " != 0 ? min(1 - r, 0.0) : min(r, 0.0)) - " << minDist << ") * " << internalScatter << ";\n"
- << "\t\tconst real_t rs = min(rc, 0.0);\n"
+ << "\t\tconst real_t rc = ((" << invert << " != 0 ? max(1 - r, 0.0) : max(r, 0.0)) - " << minDist << ") * " << internalScatter << ";\n"
+ << "\t\tconst real_t rs = max(rc, 0.0);\n"
<< "\n"
<< "\t\treal_t sigma, phi, rad, sigmas, sigmac, phis, phic;\n"
<< "\t\treal_t scale, denom;\n"
@@ -2278,10 +2278,10 @@ public:
void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand)
{
- const v4T random(rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11());
+ const v4T random(rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)));
const T distA = sqrt(Sqr(helper.In.x - m_X0) + Sqr(helper.In.y - m_Y0) + Sqr(helper.In.z - m_Z0));
- const T distB = m_Invert != 0 ? min(1 - distA, 0) : min(distA, 0);
- const T dist = min((distB - m_MinDist) * m_RMax, 0);
+ const T distB = m_Invert != 0 ? max(1 - distA, 0) : max(distA, 0);//Original called a macro named min, which internally performed max.
+ const T dist = max((distB - m_MinDist) * m_RMax, 0);
switch ((int)m_Type)
{
@@ -2356,13 +2356,13 @@ public:
string rMax = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
ss << "\t{\n"
- << "\t\tconst real_t randx = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randy = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randz = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randc = MwcNextNeg1Pos1(mwc);\n"
+ << "\t\tconst real_t randx = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randy = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randz = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randc = MwcNext0505(mwc);\n"
<< "\t\tconst real_t distA = sqrt(Sqr(vIn.x - " << x0 << ") + Sqr(vIn.y - " << y0 << ") + Sqr(vIn.z - " << z0 << "));\n"
- << "\t\tconst real_t distB = " << invert << " != 0 ? min(1 - distA, 0.0) : min(distA, 0.0);\n"
- << "\t\tconst real_t dist = min((distB - " << minDist << ") * " << rMax<< ", 0.0);\n"
+ << "\t\tconst real_t distB = " << invert << " != 0 ? max(1 - distA, 0.0) : max(distA, 0.0);\n"
+ << "\t\tconst real_t dist = max((distB - " << minDist << ") * " << rMax<< ", 0.0);\n"
<< "\n"
<< "\t\tswitch ((int)" << type << ")\n"
<< "\t\t{\n"
@@ -2474,7 +2474,7 @@ public:
void Func(IteratorHelper& helper, Point& outPoint, QTIsaac& rand)
{
- const v4T random(rand.Frand11(), rand.Frand11(), rand.Frand11(), rand.Frand11());
+ const v4T random(rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)), rand.Frand(T(-0.5), T(0.5)));
T radius;
switch ((int)m_BlurShape)
@@ -2483,11 +2483,11 @@ public:
radius = sqrt(Sqr(helper.In.x - m_CenterX) + Sqr(helper.In.y - m_CenterY) + Sqr(helper.In.z - m_CenterZ));
break;
case 1://Square.
- radius = min(fabs(helper.In.x - m_CenterX), min(fabs(helper.In.y - m_CenterY), (fabs(helper.In.z - m_CenterZ))));
+ radius = max(fabs(helper.In.x - m_CenterX), max(fabs(helper.In.y - m_CenterY), (fabs(helper.In.z - m_CenterZ))));//Original called a macro named min, which internally performed max.
break;
}
- const T dist = min(((m_InvertDistance != 0 ? min(1 - radius, 0) : min(radius, 0)) - m_MinDistance) * m_RMax, 0);
+ const T dist = max(((m_InvertDistance != 0 ? max(1 - radius, 0) : max(radius, 0)) - m_MinDistance) * m_RMax, 0);
switch ((int)m_BlurType)
{
@@ -2566,10 +2566,10 @@ public:
string rMax = "parVars[" + ToUpper(m_Params[i++].Name()) + index;
ss << "\t{\n"
- << "\t\tconst real_t randx = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randy = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randz = MwcNextNeg1Pos1(mwc);\n"
- << "\t\tconst real_t randc = MwcNextNeg1Pos1(mwc);\n"
+ << "\t\tconst real_t randx = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randy = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randz = MwcNext0505(mwc);\n"
+ << "\t\tconst real_t randc = MwcNext0505(mwc);\n"
<< "\t\treal_t radius;\n"
<< "\n"
<< "\t\tswitch ((int)" << blurShape << ")\n"
@@ -2578,11 +2578,11 @@ public:
<< "\t\t radius = sqrt(Sqr(vIn.x - " << centerX << ") + Sqr(vIn.y - " << centerY << ") + Sqr(vIn.z - " << centerZ << "));\n"
<< "\t\t break;\n"
<< "\t\t case 1:\n"
- << "\t\t radius = min(fabs(vIn.x - " << centerX << "), min(fabs(vIn.y - " << centerY << "), (fabs(vIn.z - " << centerZ << "))));\n"
+ << "\t\t radius = max(fabs(vIn.x - " << centerX << "), max(fabs(vIn.y - " << centerY << "), (fabs(vIn.z - " << centerZ << "))));\n"
<< "\t\t break;\n"
<< "\t\t}\n"
<< "\n"
- << "\t\tconst real_t dist = min(((" << invertDist << " != 0 ? min(1 - radius, 0.0) : min(radius, 0.0)) - " << minDist << ") * " << rMax << ", 0.0);\n"
+ << "\t\tconst real_t dist = max(((" << invertDist << " != 0 ? max(1 - radius, 0.0) : max(radius, 0.0)) - " << minDist << ") * " << rMax << ", 0.0);\n"
<< "\n"
<< "\t\tswitch ((int)" << blurType << ")\n"
<< "\t\t{\n"
diff --git a/Source/EmberAnimate/EmberAnimate.rc b/Source/EmberAnimate/EmberAnimate.rc
index b7bbd84..59941e7 100644
--- a/Source/EmberAnimate/EmberAnimate.rc
+++ b/Source/EmberAnimate/EmberAnimate.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,0,7
- PRODUCTVERSION 0,4,0,7
+ FILEVERSION 0,4,0,8
+ PRODUCTVERSION 0,4,0,8
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as animations with motion blur"
- VALUE "FileVersion", "0.4.0.7"
+ VALUE "FileVersion", "0.4.0.8"
VALUE "InternalName", "EmberAnimate.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberAnimate.rc"
VALUE "ProductName", "Ember Animate"
- VALUE "ProductVersion", "0.4.0.7"
+ VALUE "ProductVersion", "0.4.0.8"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/EmberCL/EmberCLFunctions.h b/Source/EmberCL/EmberCLFunctions.h
index bdd1782..f98ed31 100644
--- a/Source/EmberCL/EmberCLFunctions.h
+++ b/Source/EmberCL/EmberCLFunctions.h
@@ -171,6 +171,12 @@ static const char* RandFunctionString =
" real_t f = (real_t)MwcNext(s) / (real_t)UINT_MAX;\n"
" return -1.0 + (f * 2.0);\n"
"}\n"
+ "\n"
+ "inline real_t MwcNext0505(uint2* s)\n"
+ "{\n"
+ " real_t f = (real_t)MwcNext(s) / (real_t)UINT_MAX;\n"
+ " return -0.5 + f;\n"
+ "}\n"
"\n";
///
diff --git a/Source/EmberGenome/EmberGenome.rc b/Source/EmberGenome/EmberGenome.rc
index 9938fe1..df718e5 100644
--- a/Source/EmberGenome/EmberGenome.rc
+++ b/Source/EmberGenome/EmberGenome.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,0,7
- PRODUCTVERSION 0,4,0,7
+ FILEVERSION 0,4,0,8
+ PRODUCTVERSION 0,4,0,8
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Manipulates fractal flames parameter files"
- VALUE "FileVersion", "0.4.0.7"
+ VALUE "FileVersion", "0.4.0.8"
VALUE "InternalName", "EmberGenome.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberGenome.rc"
VALUE "ProductName", "Ember Genome"
- VALUE "ProductVersion", "0.4.0.7"
+ VALUE "ProductVersion", "0.4.0.8"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/EmberRender/EmberRender.rc b/Source/EmberRender/EmberRender.rc
index a15adc8..c7936b7 100644
--- a/Source/EmberRender/EmberRender.rc
+++ b/Source/EmberRender/EmberRender.rc
@@ -49,8 +49,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
- FILEVERSION 0,4,0,7
- PRODUCTVERSION 0,4,0,7
+ FILEVERSION 0,4,0,8
+ PRODUCTVERSION 0,4,0,8
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@@ -67,12 +67,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "Open Source"
VALUE "FileDescription", "Renders fractal flames as single images"
- VALUE "FileVersion", "0.4.0.7"
+ VALUE "FileVersion", "0.4.0.8"
VALUE "InternalName", "EmberRender.rc"
VALUE "LegalCopyright", "Copyright (C) Matt Feemster 2013, GPL v3"
VALUE "OriginalFilename", "EmberRender.rc"
VALUE "ProductName", "Ember Render"
- VALUE "ProductVersion", "0.4.0.7"
+ VALUE "ProductVersion", "0.4.0.8"
END
END
BLOCK "VarFileInfo"
diff --git a/Source/EmberTester/EmberTester.cpp b/Source/EmberTester/EmberTester.cpp
index f454006..0fc0e1d 100644
--- a/Source/EmberTester/EmberTester.cpp
+++ b/Source/EmberTester/EmberTester.cpp
@@ -1719,13 +1719,28 @@ void TestCross(T x, T y, T weight)
cout << "Second way, outX, outY == " << outX << ", " << outY << endl;
}
+double RandD(QTIsaac& rand)
+{
+ return ((((rand.Rand()^(rand.Rand()<<15))&0xfffffff)*3.72529e-09)-0.5);
+}
+
int _tmain(int argc, _TCHAR* argv[])
{
+ int i;
Timing t(4);
QTIsaac rand;
//cout << pow(-1, 5.1) << endl;
+ /*for (i = 0; i < 2500000000; i++)
+ {
+ double d = fabs(RandD(rand));
+
+ if (d >= 0.5)
+ cout << d << endl;
+ }
+
+ return 0;*/
//cout << "sizeof(Ember): " << sizeof(Ember) << endl;
//cout << "sizeof(Ember): " << sizeof(Ember) << endl;
//
diff --git a/Source/Fractorium/AboutDialog.ui b/Source/Fractorium/AboutDialog.ui
index 95933a5..f18e669 100644
--- a/Source/Fractorium/AboutDialog.ui
+++ b/Source/Fractorium/AboutDialog.ui
@@ -52,7 +52,7 @@
- <html><head/><body><p align="center"><br/><span style=" font-size:12pt;">Fractorium 0.4.0.7 Beta</span></p><p align="center"><span style=" font-size:10pt;"><br/>A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><span style=" font-size:10pt;">Matt Feemster</span></p></body></html>
+ <html><head/><body><p align="center"><br/><span style=" font-size:12pt;">Fractorium 0.4.0.8 Beta</span></p><p align="center"><span style=" font-size:10pt;"><br/>A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><span style=" font-size:10pt;">Matt Feemster</span></p></body></html>
Qt::RichText
diff --git a/Source/Fractorium/Fractorium.rc b/Source/Fractorium/Fractorium.rc
index cbc6af5..2e8866c 100644
Binary files a/Source/Fractorium/Fractorium.rc and b/Source/Fractorium/Fractorium.rc differ
diff --git a/Source/Fractorium/FractoriumParams.cpp b/Source/Fractorium/FractoriumParams.cpp
index e709723..3361c9d 100644
--- a/Source/Fractorium/FractoriumParams.cpp
+++ b/Source/Fractorium/FractoriumParams.cpp
@@ -25,7 +25,7 @@ void Fractorium::InitParamsUI()
//Color.
SetupSpinner(table, this, row, 1, m_BrightnessSpin, spinHeight, 0.05, 100, 1, SIGNAL(valueChanged(double)), SLOT(OnBrightnessChanged(double)), true, 4.0, 4.0, 4.0);
SetupSpinner(table, this, row, 1, m_GammaSpin, spinHeight, 1, 9999, 0.5, SIGNAL(valueChanged(double)), SLOT(OnGammaChanged(double)), true, 4.0, 4.0, 4.0);
- SetupSpinner(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, 10, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
+ SetupSpinner(table, this, row, 1, m_GammaThresholdSpin, spinHeight, 0, 10, 0.01, SIGNAL(valueChanged(double)), SLOT(OnGammaThresholdChanged(double)), true, 0.1, 0.1, 0.0);
SetupSpinner(table, this, row, 1, m_VibrancySpin, spinHeight, 0, 30, 0.01, SIGNAL(valueChanged(double)), SLOT(OnVibrancyChanged(double)), true, 1.0, 1.0, 0.0);
SetupSpinner(table, this, row, 1, m_HighlightSpin, spinHeight, -1.0, 2.0, 0.1, SIGNAL(valueChanged(double)), SLOT(OnHighlightPowerChanged(double)), true, -1.0, -1.0, -1.0);
@@ -47,10 +47,10 @@ void Fractorium::InitParamsUI()
table = ui.GeometryTable;
SetupSpinner (table, this, row, 1, m_WidthSpin, spinHeight, 10, 100000, 50, SIGNAL(valueChanged(int)), SLOT(OnWidthChanged(int)));
SetupSpinner (table, this, row, 1, m_HeightSpin, spinHeight, 10, 100000, 50, SIGNAL(valueChanged(int)), SLOT(OnHeightChanged(int)));
- SetupSpinner(table, this, row, 1, m_CenterXSpin, spinHeight, -10, 10, 0.05, SIGNAL(valueChanged(double)), SLOT(OnCenterXChanged(double)), true, 0, 0, 0);
- SetupSpinner(table, this, row, 1, m_CenterYSpin, spinHeight, -10, 10, 0.05, SIGNAL(valueChanged(double)), SLOT(OnCenterYChanged(double)), true, 0, 0, 0);
- SetupSpinner(table, this, row, 1, m_ScaleSpin, spinHeight, 10, 5000, 20, SIGNAL(valueChanged(double)), SLOT(OnScaleChanged(double)), true, 240, 240, 240);
- SetupSpinner(table, this, row, 1, m_ZoomSpin, spinHeight, 0, 5, 0.2, SIGNAL(valueChanged(double)), SLOT(OnZoomChanged(double)), true, 0, 0, 0);
+ SetupSpinner(table, this, row, 1, m_CenterXSpin, spinHeight, -dmax, dmax, 0.05, SIGNAL(valueChanged(double)), SLOT(OnCenterXChanged(double)), true, 0, 0, 0);
+ SetupSpinner(table, this, row, 1, m_CenterYSpin, spinHeight, -dmax, dmax, 0.05, SIGNAL(valueChanged(double)), SLOT(OnCenterYChanged(double)), true, 0, 0, 0);
+ SetupSpinner(table, this, row, 1, m_ScaleSpin, spinHeight, 10, dmax, 20, SIGNAL(valueChanged(double)), SLOT(OnScaleChanged(double)), true, 240, 240, 240);
+ SetupSpinner(table, this, row, 1, m_ZoomSpin, spinHeight, 0, 100, 0.2, SIGNAL(valueChanged(double)), SLOT(OnZoomChanged(double)), true, 0, 0, 0);
SetupSpinner(table, this, row, 1, m_RotateSpin, spinHeight, -180, 180, 10, SIGNAL(valueChanged(double)), SLOT(OnRotateChanged(double)), true, 0, 0, 0);
SetupSpinner(table, this, row, 1, m_ZPosSpin, spinHeight, -1000, 1000, 1, SIGNAL(valueChanged(double)), SLOT(OnZPosChanged(double)), true, 0, 1, 0);
SetupSpinner(table, this, row, 1, m_PerspectiveSpin, spinHeight, -500, 500, 0.01, SIGNAL(valueChanged(double)), SLOT(OnPerspectiveChanged(double)), true, 0, 1, 0);