feat: add type agnostic parameter defaults
This commit is contained in:
@@ -22,6 +22,7 @@ set(ENGINE_SOURCES
|
|||||||
src/Engine/Operator/Context.cpp
|
src/Engine/Operator/Context.cpp
|
||||||
src/Engine/Parameter/Template.cpp
|
src/Engine/Parameter/Template.cpp
|
||||||
src/Engine/Parameter/Parameter.cpp
|
src/Engine/Parameter/Parameter.cpp
|
||||||
|
src/Engine/Parameter/Default.cpp
|
||||||
src/Engine/Network/NetworkManager.cpp
|
src/Engine/Network/NetworkManager.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
8
src/Engine/Parameter/Default.cpp
Normal file
8
src/Engine/Parameter/Default.cpp
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#include "Engine/Parameter/Default.h"
|
||||||
|
|
||||||
|
|
||||||
|
enzo::prm::Default::Default(bt::floatT floatDefault, const char *stringDefault)
|
||||||
|
: floatDefault_{floatDefault}, stringDefault_{stringDefault}
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
27
src/Engine/Parameter/Default.h
Normal file
27
src/Engine/Parameter/Default.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Engine/Types.h"
|
||||||
|
namespace enzo::prm
|
||||||
|
{
|
||||||
|
class Default
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Default(bt::floatT floatDefault=0, const char *stringDefault = ""
|
||||||
|
// TODO: add string meaning eg.
|
||||||
|
// , CH_StringMeaning string_meaning = CH_STRING_LITERAL
|
||||||
|
);
|
||||||
|
|
||||||
|
bt::floatT getFloat() const { return floatDefault_; }
|
||||||
|
bt::intT getInt() const { return (bt::intT)floatDefault_; }
|
||||||
|
const char *getString() const { return stringDefault_; }
|
||||||
|
|
||||||
|
void set(bt::floatT thefloat, const char *thestring);
|
||||||
|
void setFloat(bt::floatT value) { floatDefault_ = value; }
|
||||||
|
void setInt(bt::intT value) { floatDefault_ = (bt::intT)value; }
|
||||||
|
void setString(const char *value) { stringDefault_ = value; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
bt::floatT floatDefault_;
|
||||||
|
const char* stringDefault_;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "Engine/Parameter/Parameter.h"
|
#include "Engine/Parameter/Parameter.h"
|
||||||
|
#include "Engine/Parameter/Default.h"
|
||||||
#include "Engine/Types.h"
|
#include "Engine/Types.h"
|
||||||
|
#include <algorithm>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -7,8 +9,33 @@
|
|||||||
enzo::prm::Parameter::Parameter(Template prmTemplate)
|
enzo::prm::Parameter::Parameter(Template prmTemplate)
|
||||||
: template_{prmTemplate}
|
: template_{prmTemplate}
|
||||||
{
|
{
|
||||||
floatValues_ = std::vector<bt::floatT>(prmTemplate.getSize(), prmTemplate.getDefault());
|
floatValues_ = std::vector<bt::floatT>();
|
||||||
stringValues_ = std::vector<bt::String>(prmTemplate.getSize(), "default");
|
floatValues_.reserve(prmTemplate.getSize());
|
||||||
|
|
||||||
|
stringValues_ = std::vector<bt::String>(prmTemplate.getSize(), prmTemplate.getDefault().getString());
|
||||||
|
stringValues_.reserve(prmTemplate.getSize());
|
||||||
|
|
||||||
|
const unsigned int templateSize = prmTemplate.getSize();
|
||||||
|
const unsigned int numDefaults = prmTemplate.getNumDefaults();
|
||||||
|
|
||||||
|
if(numDefaults==1)
|
||||||
|
{
|
||||||
|
floatValues_ = std::vector<bt::floatT>(templateSize, prmTemplate.getDefault().getFloat());
|
||||||
|
stringValues_ = std::vector<bt::String>(templateSize, prmTemplate.getDefault().getString());
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0; i<templateSize; ++i)
|
||||||
|
{
|
||||||
|
prm::Default prmDefault;
|
||||||
|
if(i<numDefaults)
|
||||||
|
{
|
||||||
|
prmDefault = prmTemplate.getDefault(i);
|
||||||
|
}
|
||||||
|
floatValues_.push_back(prmDefault.getFloat());
|
||||||
|
stringValues_.push_back(prmDefault.getString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
std::cout << "created new parameter: " << prmTemplate.getName() << "\n";
|
std::cout << "created new parameter: " << prmTemplate.getName() << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,32 @@
|
|||||||
#include "Engine/Parameter/Template.h"
|
#include "Engine/Parameter/Template.h"
|
||||||
|
#include "Engine/Parameter/Default.h"
|
||||||
#include "Engine/Parameter/Type.h"
|
#include "Engine/Parameter/Type.h"
|
||||||
|
|
||||||
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, bt::floatT theDefault, unsigned int vectorSize)
|
enzo::prm::Template::Template(enzo::prm::Type type, const char* name)
|
||||||
: type_{type}, name_{name}, default_{theDefault}, vectorSize_(vectorSize)
|
: Template(type, name, prm::Default())
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, unsigned int vectorSize)
|
||||||
|
: Template(type, name, prm::Default(), vectorSize)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vector<prm::Default> defaults, unsigned int vectorSize)
|
||||||
|
: type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
enzo::prm::Template::Template(enzo::prm::Type type, const char* name, prm::Default theDefault, unsigned int vectorSize)
|
||||||
|
: type_{type}, name_{name}, vectorSize_(vectorSize)
|
||||||
|
{
|
||||||
|
defaults_.push_back(theDefault);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
enzo::prm::Template::Template()
|
enzo::prm::Template::Template()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -30,11 +50,17 @@ const unsigned int enzo::prm::Template::getSize() const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const enzo::bt::floatT enzo::prm::Template::getDefault() const
|
const enzo::prm::Default enzo::prm::Template::getDefault(unsigned int index) const
|
||||||
{
|
{
|
||||||
return default_;
|
return defaults_.at(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const unsigned int enzo::prm::Template::getNumDefaults() const
|
||||||
|
{
|
||||||
|
return defaults_.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const char* enzo::prm::Template::getName() const
|
const char* enzo::prm::Template::getName() const
|
||||||
{
|
{
|
||||||
return name_;
|
return name_;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include "Engine/Parameter/Default.h"
|
||||||
#include "Engine/Parameter/Type.h"
|
#include "Engine/Parameter/Type.h"
|
||||||
#include "Engine/Types.h"
|
#include "Engine/Types.h"
|
||||||
|
|
||||||
@@ -8,22 +9,37 @@ namespace enzo::prm
|
|||||||
class Template
|
class Template
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Template(
|
||||||
|
enzo::prm::Type type,
|
||||||
|
const char* name
|
||||||
|
);
|
||||||
Template(
|
Template(
|
||||||
enzo::prm::Type type,
|
enzo::prm::Type type,
|
||||||
const char* name,
|
const char* name,
|
||||||
// TODO: change default to class that can store multiple types
|
unsigned int vectorSize
|
||||||
bt::floatT theDefault,
|
);
|
||||||
|
Template(
|
||||||
|
enzo::prm::Type type,
|
||||||
|
const char* name,
|
||||||
|
std::vector<prm::Default> defaults,
|
||||||
|
unsigned int vectorSize = 1
|
||||||
|
);
|
||||||
|
Template(
|
||||||
|
enzo::prm::Type type,
|
||||||
|
const char* name,
|
||||||
|
prm::Default theDefault,
|
||||||
unsigned int vectorSize = 1
|
unsigned int vectorSize = 1
|
||||||
);
|
);
|
||||||
Template();
|
Template();
|
||||||
const char* getName() const;
|
const char* getName() const;
|
||||||
const bt::floatT getDefault() const;
|
const prm::Default getDefault(unsigned int index=0) const;
|
||||||
const prm::Type getType() const;
|
const prm::Type getType() const;
|
||||||
const unsigned int getSize() const;
|
const unsigned int getSize() const;
|
||||||
|
const unsigned int getNumDefaults() const;
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
private:
|
private:
|
||||||
enzo::prm::Type type_;
|
enzo::prm::Type type_;
|
||||||
bt::floatT default_;
|
std::vector<prm::Default> defaults_;
|
||||||
// TODO: make a class that holds token and name
|
// TODO: make a class that holds token and name
|
||||||
const char* name_;
|
const char* name_;
|
||||||
unsigned int vectorSize_;
|
unsigned int vectorSize_;
|
||||||
|
|||||||
@@ -28,18 +28,16 @@ enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr<prm::Parameter> param
|
|||||||
case prm::Type::FLOAT:
|
case prm::Type::FLOAT:
|
||||||
{
|
{
|
||||||
AbstractSliderParm* slider;
|
AbstractSliderParm* slider;
|
||||||
slider = new AbstractSliderParm();
|
slider = new AbstractSliderParm(sharedParameter->evalFloat());
|
||||||
slider->setValue(sharedParameter->evalFloat());
|
|
||||||
mainLayout_->addWidget(slider);
|
mainLayout_->addWidget(slider);
|
||||||
connect(slider, &AbstractSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 0);});
|
connect(slider, &AbstractSliderParm::valueChanged, this, [this](bt::floatT value){this->changeValue(value, 0);});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case prm::Type::XYZ:
|
case prm::Type::XYZ:
|
||||||
{
|
{
|
||||||
AbstractSliderParm* slider1 = new AbstractSliderParm();
|
AbstractSliderParm* slider1 = new AbstractSliderParm(sharedParameter->evalFloat(0));
|
||||||
AbstractSliderParm* slider2 = new AbstractSliderParm();
|
AbstractSliderParm* slider2 = new AbstractSliderParm(sharedParameter->evalFloat(1));
|
||||||
AbstractSliderParm* slider3 = new AbstractSliderParm();
|
AbstractSliderParm* slider3 = new AbstractSliderParm(sharedParameter->evalFloat(2));
|
||||||
slider1->setValue(sharedParameter->evalFloat());
|
|
||||||
QHBoxLayout* vectorLayout = new QHBoxLayout();
|
QHBoxLayout* vectorLayout = new QHBoxLayout();
|
||||||
vectorLayout->addWidget(slider1);
|
vectorLayout->addWidget(slider1);
|
||||||
vectorLayout->addWidget(slider2);
|
vectorLayout->addWidget(slider2);
|
||||||
@@ -52,7 +50,7 @@ enzo::ui::AbstractFormParm::AbstractFormParm(std::weak_ptr<prm::Parameter> param
|
|||||||
}
|
}
|
||||||
case prm::Type::STRING:
|
case prm::Type::STRING:
|
||||||
{
|
{
|
||||||
StringParm* stringParm = new StringParm();
|
StringParm* stringParm = new StringParm(sharedParameter->evalString());
|
||||||
|
|
||||||
connect(stringParm, &StringParm::valueChanged, this, [this](bt::String value){this->changeValue(value, 0);});
|
connect(stringParm, &StringParm::valueChanged, this, [this](bt::String value){this->changeValue(value, 0);});
|
||||||
|
|
||||||
|
|||||||
@@ -10,13 +10,13 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlags f)
|
enzo::ui::AbstractSliderParm::AbstractSliderParm(bt::floatT value, QWidget *parent, Qt::WindowFlags f)
|
||||||
: QWidget(parent, f)
|
: QWidget(parent, f)
|
||||||
{
|
{
|
||||||
// tells qt to style the widget even though it's a Q_OBJECT
|
// tells qt to style the widget even though it's a Q_OBJECT
|
||||||
setAttribute(Qt::WA_StyledBackground, true);
|
setAttribute(Qt::WA_StyledBackground, true);
|
||||||
setFixedHeight(24);
|
setFixedHeight(24);
|
||||||
value_ = defaultValue_;
|
|
||||||
|
|
||||||
mainLayout_ = new QVBoxLayout();
|
mainLayout_ = new QVBoxLayout();
|
||||||
setLayout(mainLayout_);
|
setLayout(mainLayout_);
|
||||||
@@ -34,7 +34,7 @@ enzo::ui::AbstractSliderParm::AbstractSliderParm(QWidget *parent, Qt::WindowFlag
|
|||||||
)");
|
)");
|
||||||
mainLayout_->addWidget(valueLabel_);
|
mainLayout_->addWidget(valueLabel_);
|
||||||
|
|
||||||
setValue(value_);
|
setValueImpl(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event)
|
void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event)
|
||||||
@@ -53,20 +53,24 @@ void enzo::ui::AbstractSliderParm::paintEvent(QPaintEvent *event)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void enzo::ui::AbstractSliderParm::setValue(bt::floatT value)
|
void enzo::ui::AbstractSliderParm::setValueImpl(bt::floatT value)
|
||||||
{
|
{
|
||||||
// if(value_==value)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
if(clampMin_ && value<minValue_) { value = minValue_; }
|
if(clampMin_ && value<minValue_) { value = minValue_; }
|
||||||
if(clampMax_ && value>maxValue_) { value = maxValue_; }
|
if(clampMax_ && value>maxValue_) { value = maxValue_; }
|
||||||
|
|
||||||
value_ = value;
|
value_ = value;
|
||||||
update();
|
QString valStr = QString::number(value_);
|
||||||
QString valStr = QString::number(value);
|
|
||||||
valStr.truncate(4);
|
valStr.truncate(4);
|
||||||
valueLabel_->setText(valStr);
|
valueLabel_->setText(valStr);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void enzo::ui::AbstractSliderParm::setValue(bt::floatT value)
|
||||||
|
{
|
||||||
|
|
||||||
|
setValueImpl(value);
|
||||||
|
update();
|
||||||
valueChanged(value_);
|
valueChanged(value_);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class AbstractSliderParm
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
AbstractSliderParm(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
AbstractSliderParm(bt::floatT value, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
|
||||||
void setValue(bt::floatT value);
|
void setValue(bt::floatT value);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
@@ -23,12 +23,13 @@ private:
|
|||||||
QVBoxLayout* mainLayout_;
|
QVBoxLayout* mainLayout_;
|
||||||
QLabel* valueLabel_;
|
QLabel* valueLabel_;
|
||||||
bt::floatT value_;
|
bt::floatT value_;
|
||||||
float defaultValue_=0;
|
|
||||||
bool clampMin_ = true;
|
bool clampMin_ = true;
|
||||||
bool clampMax_ = true;
|
bool clampMax_ = true;
|
||||||
bt::floatT minValue_=-5;
|
bt::floatT minValue_=-5;
|
||||||
bt::floatT maxValue_=10;
|
bt::floatT maxValue_=10;
|
||||||
|
|
||||||
|
void setValueImpl(bt::floatT value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *event) override;
|
void paintEvent(QPaintEvent *event) override;
|
||||||
void mouseMoveEvent(QMouseEvent *event) override;
|
void mouseMoveEvent(QMouseEvent *event) override;
|
||||||
|
|||||||
@@ -11,13 +11,16 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
enzo::ui::StringParm::StringParm(QWidget *parent)
|
enzo::ui::StringParm::StringParm(bt::String value, QWidget *parent)
|
||||||
: QLineEdit(parent)
|
: QLineEdit(parent)
|
||||||
{
|
{
|
||||||
// tells qt to style the widget even though it's a Q_OBJECT
|
// tells qt to style the widget even though it's a Q_OBJECT
|
||||||
setAttribute(Qt::WA_StyledBackground, true);
|
setAttribute(Qt::WA_StyledBackground, true);
|
||||||
setFixedHeight(24);
|
setFixedHeight(24);
|
||||||
|
|
||||||
|
value_ = value;
|
||||||
|
setText(QString::fromStdString(value_));
|
||||||
|
|
||||||
|
|
||||||
// setAlignment(Qt::AlignCenter);
|
// setAlignment(Qt::AlignCenter);
|
||||||
// setStyleSheet("background-color: none;");
|
// setStyleSheet("background-color: none;");
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class StringParm
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
StringParm(QWidget *parent = nullptr);
|
StringParm(bt::String value, QWidget *parent = nullptr);
|
||||||
void setValue(bt::String value);
|
void setValue(bt::String value);
|
||||||
void setValueQString(QString value);
|
void setValueQString(QString value);
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ add_library(${libName} SHARED
|
|||||||
../Engine/Network/NetworkManager.cpp
|
../Engine/Network/NetworkManager.cpp
|
||||||
../Engine/Parameter/Template.cpp
|
../Engine/Parameter/Template.cpp
|
||||||
../Engine/Parameter/Parameter.cpp
|
../Engine/Parameter/Parameter.cpp
|
||||||
|
../Engine/Parameter/Default.cpp
|
||||||
GopTransform.cpp
|
GopTransform.cpp
|
||||||
GopHouse.cpp
|
GopHouse.cpp
|
||||||
GopTestCube.cpp
|
GopTestCube.cpp
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ void GopGeometryImport::cookOp(enzo::op::Context context)
|
|||||||
|
|
||||||
enzo::prm::Template GopGeometryImport::parameterList[] =
|
enzo::prm::Template GopGeometryImport::parameterList[] =
|
||||||
{
|
{
|
||||||
enzo::prm::Template(enzo::prm::Type::STRING, "filePath", 1),
|
enzo::prm::Template(enzo::prm::Type::STRING, "filePath"),
|
||||||
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1),
|
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", enzo::prm::Default(1)),
|
||||||
enzo::prm::Terminator
|
enzo::prm::Terminator
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ void GopTransform::cookOp(enzo::op::Context context)
|
|||||||
|
|
||||||
enzo::prm::Template GopTransform::parameterList[] =
|
enzo::prm::Template GopTransform::parameterList[] =
|
||||||
{
|
{
|
||||||
enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 0, 3),
|
enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 3),
|
||||||
enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 0, 3),
|
enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 3),
|
||||||
enzo::prm::Terminator
|
enzo::prm::Terminator
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user