diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp index 2d6d28f..7529e56 100644 --- a/src/Engine/Parameter/Parameter.cpp +++ b/src/Engine/Parameter/Parameter.cpp @@ -66,6 +66,12 @@ enzo::bt::String enzo::prm::Parameter::evalString(unsigned int index) const return stringValues_[index]; } +unsigned int enzo::prm::Parameter::getVectorSize() const +{ + return template_.getSize(); +} + + const enzo::prm::Template& enzo::prm::Parameter::getTemplate() { return template_; diff --git a/src/Engine/Parameter/Parameter.h b/src/Engine/Parameter/Parameter.h index 1862ad2..fa94c5a 100644 --- a/src/Engine/Parameter/Parameter.h +++ b/src/Engine/Parameter/Parameter.h @@ -11,6 +11,7 @@ public: Parameter(Template prmTemplate); std::string getName() const; enzo::prm::Type getType() const; + unsigned int getVectorSize() const; bt::floatT evalFloat(unsigned int index=0) const; bt::String evalString(unsigned int index=0) const; diff --git a/src/Engine/Parameter/Template.cpp b/src/Engine/Parameter/Template.cpp index 1502362..e6b443b 100644 --- a/src/Engine/Parameter/Template.cpp +++ b/src/Engine/Parameter/Template.cpp @@ -2,31 +2,43 @@ #include "Engine/Parameter/Default.h" #include "Engine/Parameter/Range.h" #include "Engine/Parameter/Type.h" +#include enzo::prm::Template::Template(enzo::prm::Type type, const char* name) : Template(type, name, prm::Default()) { - + ranges_.resize(vectorSize_); } enzo::prm::Template::Template(enzo::prm::Type type, const char* name, unsigned int vectorSize) : Template(type, name, prm::Default(), vectorSize) { - + ranges_.resize(vectorSize_); } enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vector defaults, unsigned int vectorSize, std::vector ranges) : type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize) { - ranges.resize(vectorSize); + if(ranges.size()=1) + { + ranges.resize(vectorSize_, ranges[0]); + } + else + { + ranges.resize(vectorSize_); + } + + } ranges_ = ranges; } enzo::prm::Template::Template(enzo::prm::Type type, const char* name, prm::Default theDefault, unsigned int vectorSize, Range range) : type_{type}, name_{name}, vectorSize_(vectorSize) { - defaults_.push_back(theDefault); - ranges_.push_back(range); + defaults_.resize(vectorSize_, theDefault); + ranges_.resize(vectorSize_, range); } enzo::prm::Template::Template() diff --git a/src/Gui/Parameters/FloatSliderParm.cpp b/src/Gui/Parameters/FloatSliderParm.cpp index e5334af..1156431 100644 --- a/src/Gui/Parameters/FloatSliderParm.cpp +++ b/src/Gui/Parameters/FloatSliderParm.cpp @@ -38,7 +38,7 @@ enzo::ui::FloatSliderParm::FloatSliderParm(std::weak_ptr paramet if(auto parameterShared=parameter_.lock()) { - auto range = parameterShared->getTemplate().getRange(); + auto range = parameterShared->getTemplate().getRange(vectorIndex); minValue_=range.getMin(); maxValue_=range.getMax(); clampMin_=range.getMinFlag()==prm::RangeFlag::LOCKED; @@ -59,7 +59,7 @@ void enzo::ui::FloatSliderParm::paintEvent(QPaintEvent *event) painter.setBrush(QColor("#383838")); const int valueRange = maxValue_-minValue_; - float fillPercent = std::min(static_cast(value_-minValue_)/valueRange, 1); + float fillPercent = std::clamp(static_cast(value_-minValue_)/valueRange, 0, 1); constexpr float margin = 3; float fillWidth = rect().width()-margin*2; diff --git a/src/Gui/Parameters/FormParm.cpp b/src/Gui/Parameters/FormParm.cpp index c11dece..8e00a48 100644 --- a/src/Gui/Parameters/FormParm.cpp +++ b/src/Gui/Parameters/FormParm.cpp @@ -42,17 +42,16 @@ enzo::ui::FormParm::FormParm(std::weak_ptr parameter) } case prm::Type::XYZ: { - FloatSliderParm* slider1 = new FloatSliderParm(parameter, 0); - FloatSliderParm* slider2 = new FloatSliderParm(parameter, 0); - FloatSliderParm* slider3 = new FloatSliderParm(parameter, 0); + const unsigned int vectorSize = sharedParameter->getVectorSize(); QHBoxLayout* vectorLayout = new QHBoxLayout(); - vectorLayout->addWidget(slider1); - vectorLayout->addWidget(slider2); - vectorLayout->addWidget(slider3); + for(int i=0; iaddWidget(slider); + connect(slider, &FloatSliderParm::valueChanged, this, [this, i](bt::floatT value){this->changeValue(value, i);}); + + } mainLayout_->addLayout(vectorLayout); - connect(slider1, &FloatSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 0);}); - connect(slider2, &FloatSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 1);}); - connect(slider3, &FloatSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 2);}); break; } case prm::Type::STRING: diff --git a/src/Gui/Parameters/IntSliderParm.cpp b/src/Gui/Parameters/IntSliderParm.cpp index 21e5739..d3c2934 100644 --- a/src/Gui/Parameters/IntSliderParm.cpp +++ b/src/Gui/Parameters/IntSliderParm.cpp @@ -61,8 +61,7 @@ void enzo::ui::IntSliderParm::paintEvent(QPaintEvent *event) painter.setRenderHint(QPainter::Antialiasing, true); const int valueRange = maxValue_-minValue_; - float fillPercent = std::min(static_cast(value_-minValue_)/valueRange, 1); - IC(value_, fillPercent); + float fillPercent = std::clamp(static_cast(value_-minValue_)/valueRange, 0, 1); float margin = 3; float fillWidth = rect().width()-margin*2; fillWidth *= fillPercent; diff --git a/src/OpDefs/GopGrid.cpp b/src/OpDefs/GopGrid.cpp index 01d2a51..37da484 100644 --- a/src/OpDefs/GopGrid.cpp +++ b/src/OpDefs/GopGrid.cpp @@ -21,8 +21,8 @@ void GopGrid::cookOp(enzo::op::Context context) if(outputRequested(0)) { geo::Geometry geo; - bt::floatT width = context.evalFloatParm("width"); - bt::floatT height = context.evalFloatParm("height"); + bt::floatT width = context.evalFloatParm("size", 0); + bt::floatT height = context.evalFloatParm("size", 1); const bt::intT columns = context.evalFloatParm("columns"); const bt::intT rows = context.evalFloatParm("rows"); @@ -74,8 +74,7 @@ void GopGrid::cookOp(enzo::op::Context context) enzo::prm::Template GopGrid::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::FLOAT, "width", enzo::prm::Default(10), 1, enzo::prm::Range(0, enzo::prm::RangeFlag::UNLOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)), - enzo::prm::Template(enzo::prm::Type::FLOAT, "height", enzo::prm::Default(10), 1, enzo::prm::Range(0, enzo::prm::RangeFlag::UNLOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)), + enzo::prm::Template(enzo::prm::Type::XYZ, "size", enzo::prm::Default(10), 2, enzo::prm::Range(0, enzo::prm::RangeFlag::UNLOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)), enzo::prm::Template( enzo::prm::Type::INT, "rows",