feat: use XYZ parameter for grid size parameter

This commit is contained in:
parker
2025-08-11 23:09:30 +01:00
parent f7a96ae05d
commit a705b8bad4
7 changed files with 38 additions and 22 deletions

View File

@@ -66,6 +66,12 @@ enzo::bt::String enzo::prm::Parameter::evalString(unsigned int index) const
return stringValues_[index]; return stringValues_[index];
} }
unsigned int enzo::prm::Parameter::getVectorSize() const
{
return template_.getSize();
}
const enzo::prm::Template& enzo::prm::Parameter::getTemplate() const enzo::prm::Template& enzo::prm::Parameter::getTemplate()
{ {
return template_; return template_;

View File

@@ -11,6 +11,7 @@ public:
Parameter(Template prmTemplate); Parameter(Template prmTemplate);
std::string getName() const; std::string getName() const;
enzo::prm::Type getType() const; enzo::prm::Type getType() const;
unsigned int getVectorSize() const;
bt::floatT evalFloat(unsigned int index=0) const; bt::floatT evalFloat(unsigned int index=0) const;
bt::String evalString(unsigned int index=0) const; bt::String evalString(unsigned int index=0) const;

View File

@@ -2,31 +2,43 @@
#include "Engine/Parameter/Default.h" #include "Engine/Parameter/Default.h"
#include "Engine/Parameter/Range.h" #include "Engine/Parameter/Range.h"
#include "Engine/Parameter/Type.h" #include "Engine/Parameter/Type.h"
#include <icecream.hpp>
enzo::prm::Template::Template(enzo::prm::Type type, const char* name) enzo::prm::Template::Template(enzo::prm::Type type, const char* name)
: Template(type, name, prm::Default()) : Template(type, name, prm::Default())
{ {
ranges_.resize(vectorSize_);
} }
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, unsigned int vectorSize) enzo::prm::Template::Template(enzo::prm::Type type, const char* name, unsigned int vectorSize)
: Template(type, name, prm::Default(), vectorSize) : Template(type, name, prm::Default(), vectorSize)
{ {
ranges_.resize(vectorSize_);
} }
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vector<prm::Default> defaults, unsigned int vectorSize, std::vector<prm::Range> ranges) enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vector<prm::Default> defaults, unsigned int vectorSize, std::vector<prm::Range> ranges)
: type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize) : type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize)
{ {
ranges.resize(vectorSize); if(ranges.size()<vectorSize_)
{
if(ranges.size()>=1)
{
ranges.resize(vectorSize_, ranges[0]);
}
else
{
ranges.resize(vectorSize_);
}
}
ranges_ = ranges; ranges_ = ranges;
} }
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, prm::Default theDefault, unsigned int vectorSize, Range range) 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) : type_{type}, name_{name}, vectorSize_(vectorSize)
{ {
defaults_.push_back(theDefault); defaults_.resize(vectorSize_, theDefault);
ranges_.push_back(range); ranges_.resize(vectorSize_, range);
} }
enzo::prm::Template::Template() enzo::prm::Template::Template()

View File

@@ -38,7 +38,7 @@ enzo::ui::FloatSliderParm::FloatSliderParm(std::weak_ptr<prm::Parameter> paramet
if(auto parameterShared=parameter_.lock()) if(auto parameterShared=parameter_.lock())
{ {
auto range = parameterShared->getTemplate().getRange(); auto range = parameterShared->getTemplate().getRange(vectorIndex);
minValue_=range.getMin(); minValue_=range.getMin();
maxValue_=range.getMax(); maxValue_=range.getMax();
clampMin_=range.getMinFlag()==prm::RangeFlag::LOCKED; clampMin_=range.getMinFlag()==prm::RangeFlag::LOCKED;
@@ -59,7 +59,7 @@ void enzo::ui::FloatSliderParm::paintEvent(QPaintEvent *event)
painter.setBrush(QColor("#383838")); painter.setBrush(QColor("#383838"));
const int valueRange = maxValue_-minValue_; const int valueRange = maxValue_-minValue_;
float fillPercent = std::min<float>(static_cast<float>(value_-minValue_)/valueRange, 1); float fillPercent = std::clamp<float>(static_cast<float>(value_-minValue_)/valueRange, 0, 1);
constexpr float margin = 3; constexpr float margin = 3;
float fillWidth = rect().width()-margin*2; float fillWidth = rect().width()-margin*2;

View File

@@ -42,17 +42,16 @@ enzo::ui::FormParm::FormParm(std::weak_ptr<prm::Parameter> parameter)
} }
case prm::Type::XYZ: case prm::Type::XYZ:
{ {
FloatSliderParm* slider1 = new FloatSliderParm(parameter, 0); const unsigned int vectorSize = sharedParameter->getVectorSize();
FloatSliderParm* slider2 = new FloatSliderParm(parameter, 0);
FloatSliderParm* slider3 = new FloatSliderParm(parameter, 0);
QHBoxLayout* vectorLayout = new QHBoxLayout(); QHBoxLayout* vectorLayout = new QHBoxLayout();
vectorLayout->addWidget(slider1); for(int i=0; i<vectorSize; i++)
vectorLayout->addWidget(slider2); {
vectorLayout->addWidget(slider3); FloatSliderParm* slider = new FloatSliderParm(parameter, i);
vectorLayout->addWidget(slider);
connect(slider, &FloatSliderParm::valueChanged, this, [this, i](bt::floatT value){this->changeValue(value, i);});
}
mainLayout_->addLayout(vectorLayout); 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; break;
} }
case prm::Type::STRING: case prm::Type::STRING:

View File

@@ -61,8 +61,7 @@ void enzo::ui::IntSliderParm::paintEvent(QPaintEvent *event)
painter.setRenderHint(QPainter::Antialiasing, true); painter.setRenderHint(QPainter::Antialiasing, true);
const int valueRange = maxValue_-minValue_; const int valueRange = maxValue_-minValue_;
float fillPercent = std::min<float>(static_cast<float>(value_-minValue_)/valueRange, 1); float fillPercent = std::clamp<float>(static_cast<float>(value_-minValue_)/valueRange, 0, 1);
IC(value_, fillPercent);
float margin = 3; float margin = 3;
float fillWidth = rect().width()-margin*2; float fillWidth = rect().width()-margin*2;
fillWidth *= fillPercent; fillWidth *= fillPercent;

View File

@@ -21,8 +21,8 @@ void GopGrid::cookOp(enzo::op::Context context)
if(outputRequested(0)) if(outputRequested(0))
{ {
geo::Geometry geo; geo::Geometry geo;
bt::floatT width = context.evalFloatParm("width"); bt::floatT width = context.evalFloatParm("size", 0);
bt::floatT height = context.evalFloatParm("height"); bt::floatT height = context.evalFloatParm("size", 1);
const bt::intT columns = context.evalFloatParm("columns"); const bt::intT columns = context.evalFloatParm("columns");
const bt::intT rows = context.evalFloatParm("rows"); 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 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::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::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::Template(
enzo::prm::Type::INT, enzo::prm::Type::INT,
"rows", "rows",