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];
}
unsigned int enzo::prm::Parameter::getVectorSize() const
{
return template_.getSize();
}
const enzo::prm::Template& enzo::prm::Parameter::getTemplate()
{
return template_;

View File

@@ -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;

View File

@@ -2,31 +2,43 @@
#include "Engine/Parameter/Default.h"
#include "Engine/Parameter/Range.h"
#include "Engine/Parameter/Type.h"
#include <icecream.hpp>
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<prm::Default> defaults, unsigned int vectorSize, std::vector<prm::Range> ranges)
: 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;
}
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()

View File

@@ -38,7 +38,7 @@ enzo::ui::FloatSliderParm::FloatSliderParm(std::weak_ptr<prm::Parameter> 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<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;
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:
{
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; i<vectorSize; i++)
{
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);
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:

View File

@@ -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<float>(static_cast<float>(value_-minValue_)/valueRange, 1);
IC(value_, fillPercent);
float fillPercent = std::clamp<float>(static_cast<float>(value_-minValue_)/valueRange, 0, 1);
float margin = 3;
float fillWidth = rect().width()-margin*2;
fillWidth *= fillPercent;

View File

@@ -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",