diff --git a/Source/Fractorium/Fractorium.cpp b/Source/Fractorium/Fractorium.cpp
index d7eb312..f37508d 100644
--- a/Source/Fractorium/Fractorium.cpp
+++ b/Source/Fractorium/Fractorium.cpp
@@ -706,7 +706,8 @@ void Fractorium::SetTabOrders()
w = SetTabOrder(this, w, ui.SequenceStopFlameSpinBox);
w = SetTabOrder(this, w, ui.SequenceAllButton);
w = SetTabOrder(this, w, ui.SequenceRandomizeStaggerCheckBox);
- w = SetTabOrder(this, w, ui.SequenceStaggerCheckBox);
+ w = SetTabOrder(this, w, ui.SequenceStaggerSpinBox);
+ w = SetTabOrder(this, w, ui.SequenceRandomStaggerMaxSpinBox);
w = SetTabOrder(this, w, ui.SequenceRandomizeFramesPerRotCheckBox);
w = SetTabOrder(this, w, ui.SequenceFramesPerRotSpinBox);
w = SetTabOrder(this, w, ui.SequenceRandomFramesPerRotMaxSpinBox);
diff --git a/Source/Fractorium/Fractorium.h b/Source/Fractorium/Fractorium.h
index fea62e3..767b7f0 100644
--- a/Source/Fractorium/Fractorium.h
+++ b/Source/Fractorium/Fractorium.h
@@ -171,9 +171,12 @@ public slots:
void OnSequenceRenderButtonClicked(bool checked);
void OnSequenceSaveButtonClicked(bool checked);
void OnSequenceOpenButtonClicked(bool checked);
+ void OnSequenceRandomizeStaggerCheckBoxStateChanged(int state);
void OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state);
void OnSequenceRandomizeRotationsCheckBoxStateChanged(int state);
void OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state);
+ void OnSequenceStaggerSpinBoxChanged(double d);
+ void OnSequenceRandomStaggerMaxSpinBoxChanged(double d);
void OnSequenceStartFlameSpinBoxChanged(int d);
void OnSequenceStopFlameSpinBoxChanged(int d);
void OnSequenceFramesPerRotSpinBoxChanged(int d);
diff --git a/Source/Fractorium/Fractorium.ui b/Source/Fractorium/Fractorium.ui
index 86719ae..8c119da 100644
--- a/Source/Fractorium/Fractorium.ui
+++ b/Source/Fractorium/Fractorium.ui
@@ -3513,8 +3513,8 @@
0
0
- 263
- 700
+ 118
+ 672
@@ -5581,8 +5581,8 @@
0
0
- 259
- 652
+ 133
+ 52
@@ -6867,19 +6867,6 @@
- -
-
-
-
- 0
- 0
-
-
-
- Stagger
-
-
-
-
@@ -7186,6 +7173,50 @@
+ -
+
+
+
+ 0
+ 0
+
+
+
+ QAbstractSpinBox::NoButtons
+
+
+ Stagger:
+
+
+ 1.000000000000000
+
+
+ 0.100000000000000
+
+
+
+ -
+
+
+ false
+
+
+ QAbstractSpinBox::NoButtons
+
+
+ Stagger max:
+
+
+ 1.000000000000000
+
+
+ 0.100000000000000
+
+
+ 1.000000000000000
+
+
+
-
diff --git a/Source/Fractorium/FractoriumLibrary.cpp b/Source/Fractorium/FractoriumLibrary.cpp
index d9cad4d..03785d7 100644
--- a/Source/Fractorium/FractoriumLibrary.cpp
+++ b/Source/Fractorium/FractoriumLibrary.cpp
@@ -7,6 +7,8 @@
void Fractorium::InitLibraryUI()
{
ui.LibraryTree->SetMainWindow(this);
+ ui.SequenceStaggerSpinBox->setValue(m_Settings->Stagger());
+ ui.SequenceRandomStaggerMaxSpinBox->setValue(m_Settings->StaggerMax());
ui.SequenceFramesPerRotSpinBox->setValue(m_Settings->FramesPerRot());
ui.SequenceRandomFramesPerRotMaxSpinBox->setValue(m_Settings->FramesPerRotMax());
ui.SequenceRotationsSpinBox->setValue(m_Settings->Rotations());
@@ -24,9 +26,12 @@ void Fractorium::InitLibraryUI()
connect(ui.SequenceRenderButton, SIGNAL(clicked(bool)), this, SLOT(OnSequenceRenderButtonClicked(bool)), Qt::QueuedConnection);
connect(ui.SequenceSaveButton, SIGNAL(clicked(bool)), this, SLOT(OnSequenceSaveButtonClicked(bool)), Qt::QueuedConnection);
connect(ui.SequenceOpenButton, SIGNAL(clicked(bool)), this, SLOT(OnSequenceOpenButtonClicked(bool)), Qt::QueuedConnection);
+ connect(ui.SequenceRandomizeStaggerCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeStaggerCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeFramesPerRotCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeRotationsCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeRotationsCheckBoxStateChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceRandomizeBlendFramesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int)), Qt::QueuedConnection);
+ connect(ui.SequenceStaggerSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceStaggerSpinBoxChanged(double)), Qt::QueuedConnection);
+ connect(ui.SequenceRandomStaggerMaxSpinBox, SIGNAL(valueChanged(double)), this, SLOT(OnSequenceRandomStaggerMaxSpinBoxChanged(double)), Qt::QueuedConnection);
connect(ui.SequenceStartFlameSpinBox, SIGNAL(valueChanged(int)), this, SLOT(OnSequenceStartFlameSpinBoxChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceStopFlameSpinBox, SIGNAL(valueChanged(int)), this, SLOT(OnSequenceStopFlameSpinBoxChanged(int)), Qt::QueuedConnection);
connect(ui.SequenceFramesPerRotSpinBox, SIGNAL(valueChanged(int)), this, SLOT(OnSequenceFramesPerRotSpinBoxChanged(int)), Qt::QueuedConnection);
@@ -505,7 +510,8 @@ void FractoriumEmberController::SequenceGenerateButtonClicked()
bool randFramesRot = ui.SequenceRandomizeFramesPerRotCheckBox->isChecked();
bool randRot = ui.SequenceRandomizeRotationsCheckBox->isChecked();
bool randBlend = ui.SequenceRandomizeBlendFramesCheckBox->isChecked();
- bool stagger = ui.SequenceStaggerCheckBox->isChecked();
+ double stagger = ui.SequenceStaggerSpinBox->value();
+ double staggerMax = ui.SequenceRandomStaggerMaxSpinBox->value();
double rots = ui.SequenceRotationsSpinBox->value();
double rotsMax = ui.SequenceRandomRotationsMaxSpinBox->value();
int framesPerRot = ui.SequenceFramesPerRotSpinBox->value();
@@ -529,7 +535,7 @@ void FractoriumEmberController::SequenceGenerateButtonClicked()
#endif
SheepTools tools(palettePath, EmberCommon::CreateRenderer(eRendererType::CPU_RENDERER, devices, false, 0, emberReport));
tools.SetSpinParams(true,
- randStagger ? m_Rand.RandBit() : stagger,
+ stagger,//Will be set again below if random is used.
0,
0,
s->Nick().toStdString(),
@@ -601,15 +607,14 @@ void FractoriumEmberController::SequenceGenerateButtonClicked()
embers[1] = *(++it2);//Get the next ember to be used with blending below.
size_t blendFrames = randBlend ? m_Rand.Frand(framesBlend, framesBlendMax) : framesBlend;
+ if (randStagger)
+ tools.Stagger(m_Rand.Frand(stagger, staggerMax));
+
for (frame = 0; frame < blendFrames; frame++)
{
bool seqFlag = frame == 0 || (frame == blendFrames - 1);
blend = frame / double(blendFrames);
result.Clear();
-
- if (randStagger)
- tools.Stagger(m_Rand.RandBit());
-
tools.SpinInter(&embers[0], nullptr, result, startCount + frameCount++, seqFlag, blend);
FormatName(result, os, padding);
m_SequenceFile.m_Embers.push_back(result);
@@ -718,6 +723,7 @@ void FractoriumEmberController::SequenceOpenButtonClicked()
void Fractorium::OnSequenceOpenButtonClicked(bool checked) { m_Controller->SequenceOpenButtonClicked(); }
+void Fractorium::OnSequenceRandomizeStaggerCheckBoxStateChanged(int state) { ui.SequenceRandomStaggerMaxSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeFramesPerRotCheckBoxStateChanged(int state) { ui.SequenceRandomFramesPerRotMaxSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeRotationsCheckBoxStateChanged(int state) { ui.SequenceRandomRotationsMaxSpinBox->setEnabled(state); }
void Fractorium::OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state) { ui.SequenceRandomBlendMaxFramesSpinBox->setEnabled(state); }
@@ -725,20 +731,24 @@ void Fractorium::OnSequenceRandomizeBlendFramesCheckBoxStateChanged(int state) {
///
/// Constrain all min/max spinboxes.
///
-void Fractorium::OnSequenceStartFlameSpinBoxChanged(int d) { ConstrainLow(ui.SequenceStartFlameSpinBox, ui.SequenceStopFlameSpinBox); }
-void Fractorium::OnSequenceStopFlameSpinBoxChanged(int d) { ConstrainHigh(ui.SequenceStartFlameSpinBox, ui.SequenceStopFlameSpinBox); }
-void Fractorium::OnSequenceFramesPerRotSpinBoxChanged(int d) { if (ui.SequenceRandomizeFramesPerRotCheckBox->isChecked()) ConstrainLow(ui.SequenceFramesPerRotSpinBox, ui.SequenceRandomFramesPerRotMaxSpinBox); }
+void Fractorium::OnSequenceStaggerSpinBoxChanged(double d) { if (ui.SequenceRandomizeStaggerCheckBox->isChecked()) ConstrainLow(ui.SequenceStaggerSpinBox, ui.SequenceRandomStaggerMaxSpinBox); }
+void Fractorium::OnSequenceRandomStaggerMaxSpinBoxChanged(double d) { ConstrainHigh(ui.SequenceStaggerSpinBox, ui.SequenceRandomStaggerMaxSpinBox); }
+void Fractorium::OnSequenceStartFlameSpinBoxChanged(int d) { ConstrainLow(ui.SequenceStartFlameSpinBox, ui.SequenceStopFlameSpinBox); }
+void Fractorium::OnSequenceStopFlameSpinBoxChanged(int d) { ConstrainHigh(ui.SequenceStartFlameSpinBox, ui.SequenceStopFlameSpinBox); }
+void Fractorium::OnSequenceFramesPerRotSpinBoxChanged(int d) { if (ui.SequenceRandomizeFramesPerRotCheckBox->isChecked()) ConstrainLow(ui.SequenceFramesPerRotSpinBox, ui.SequenceRandomFramesPerRotMaxSpinBox); }
void Fractorium::OnSequenceRandomFramesPerRotMaxSpinBoxChanged(int d) { ConstrainHigh(ui.SequenceFramesPerRotSpinBox, ui.SequenceRandomFramesPerRotMaxSpinBox); }
-void Fractorium::OnSequenceRotationsSpinBoxChanged(double d) { if (ui.SequenceRandomizeRotationsCheckBox->isChecked()) ConstrainLow(ui.SequenceRotationsSpinBox, ui.SequenceRandomRotationsMaxSpinBox); }
+void Fractorium::OnSequenceRotationsSpinBoxChanged(double d) { if (ui.SequenceRandomizeRotationsCheckBox->isChecked()) ConstrainLow(ui.SequenceRotationsSpinBox, ui.SequenceRandomRotationsMaxSpinBox); }
void Fractorium::OnSequenceRandomRotationsMaxSpinBoxChanged(double d) { ConstrainHigh(ui.SequenceRotationsSpinBox, ui.SequenceRandomRotationsMaxSpinBox); }
-void Fractorium::OnSequenceBlendFramesSpinBoxChanged(int d) { if (ui.SequenceRandomizeBlendFramesCheckBox->isChecked()) ConstrainLow(ui.SequenceBlendFramesSpinBox, ui.SequenceRandomBlendMaxFramesSpinBox); }
-void Fractorium::OnSequenceRandomBlendMaxFramesSpinBoxChanged(int d) { ConstrainHigh(ui.SequenceBlendFramesSpinBox, ui.SequenceRandomBlendMaxFramesSpinBox); }
+void Fractorium::OnSequenceBlendFramesSpinBoxChanged(int d) { if (ui.SequenceRandomizeBlendFramesCheckBox->isChecked()) ConstrainLow(ui.SequenceBlendFramesSpinBox, ui.SequenceRandomBlendMaxFramesSpinBox); }
+void Fractorium::OnSequenceRandomBlendMaxFramesSpinBoxChanged(int d) { ConstrainHigh(ui.SequenceBlendFramesSpinBox, ui.SequenceRandomBlendMaxFramesSpinBox); }
///
/// Save all sequence settings to match the values in the controls.
///
void Fractorium::SyncSequenceSettings()
{
+ m_Settings->Stagger(ui.SequenceStaggerSpinBox->value());
+ m_Settings->StaggerMax(ui.SequenceRandomStaggerMaxSpinBox->value());
m_Settings->FramesPerRot(ui.SequenceFramesPerRotSpinBox->value());
m_Settings->FramesPerRotMax(ui.SequenceRandomFramesPerRotMaxSpinBox->value());
m_Settings->Rotations(ui.SequenceRotationsSpinBox->value());
diff --git a/Source/Fractorium/FractoriumSettings.cpp b/Source/Fractorium/FractoriumSettings.cpp
index 8cb5d09..12f72e0 100644
--- a/Source/Fractorium/FractoriumSettings.cpp
+++ b/Source/Fractorium/FractoriumSettings.cpp
@@ -138,16 +138,27 @@ void FractoriumSettings::RandomCount(uint i) { setValue(RANDOMCOUNT, i);
/// Sequence generation settings.
///
+double FractoriumSettings::Stagger() { return value(STAGGER).toDouble(); }
+void FractoriumSettings::Stagger(double d) { setValue(STAGGER, d); }
+
+double FractoriumSettings::StaggerMax() { return value(STAGGERMAX).toDouble(); }
+void FractoriumSettings::StaggerMax(double d) { setValue(STAGGERMAX, d); }
+
uint FractoriumSettings::FramesPerRot() { return value(FRAMESPERROT).toUInt(); }
void FractoriumSettings::FramesPerRot(uint i) { setValue(FRAMESPERROT, i); }
+
uint FractoriumSettings::FramesPerRotMax() { return value(FRAMESPERROTMAX).toUInt(); }
void FractoriumSettings::FramesPerRotMax(uint i) { setValue(FRAMESPERROTMAX, i); }
-uint FractoriumSettings::Rotations() { return value(ROTATIONS).toUInt(); }
-void FractoriumSettings::Rotations(uint i) { setValue(ROTATIONS, i); }
-uint FractoriumSettings::RotationsMax() { return value(ROTATIONSMAX).toUInt(); }
-void FractoriumSettings::RotationsMax(uint i) { setValue(ROTATIONSMAX, i); }
+
+uint FractoriumSettings::Rotations() { return value(ROTATIONS).toDouble(); }
+void FractoriumSettings::Rotations(double d) { setValue(ROTATIONS, d); }
+
+uint FractoriumSettings::RotationsMax() { return value(ROTATIONSMAX).toDouble(); }
+void FractoriumSettings::RotationsMax(double d) { setValue(ROTATIONSMAX, d); }
+
uint FractoriumSettings::BlendFrames() { return value(BLENDFRAMES).toUInt(); }
void FractoriumSettings::BlendFrames(uint i) { setValue(BLENDFRAMES, i); }
+
uint FractoriumSettings::BlendFramesMax() { return value(BLENDFRAMESMAX).toUInt(); }
void FractoriumSettings::BlendFramesMax(uint i) { setValue(BLENDFRAMESMAX, i); }
diff --git a/Source/Fractorium/FractoriumSettings.h b/Source/Fractorium/FractoriumSettings.h
index c0f3ffe..0a18a65 100644
--- a/Source/Fractorium/FractoriumSettings.h
+++ b/Source/Fractorium/FractoriumSettings.h
@@ -21,6 +21,8 @@
#define OPENCLSUBBATCH "render/openclsubbatch"
#define RANDOMCOUNT "render/randomcount"
+#define STAGGER "sequence/stagger"
+#define STAGGERMAX "sequence/staggermax"
#define FRAMESPERROT "sequence/framesperrot"
#define FRAMESPERROTMAX "sequence/framesperrotmax"
#define ROTATIONS "sequence/rotations"
@@ -133,16 +135,27 @@ public:
uint RandomCount();
void RandomCount(uint i);
+ double Stagger();
+ void Stagger(double i);
+
+ double StaggerMax();
+ void StaggerMax(double i);
+
uint FramesPerRot();
void FramesPerRot(uint i);
+
uint FramesPerRotMax();
void FramesPerRotMax(uint i);
+
uint Rotations();
- void Rotations(uint i);
+ void Rotations(double d);
+
uint RotationsMax();
- void RotationsMax(uint i);
+ void RotationsMax(double d);
+
uint BlendFrames();
void BlendFrames(uint i);
+
uint BlendFramesMax();
void BlendFramesMax(uint i);