feat: add parameter name class

This commit is contained in:
parker
2025-08-12 00:12:06 +01:00
parent a705b8bad4
commit 185d09b79a
23 changed files with 182 additions and 59 deletions

View File

@@ -24,6 +24,7 @@ set(ENGINE_SOURCES
src/Engine/Parameter/Parameter.cpp src/Engine/Parameter/Parameter.cpp
src/Engine/Parameter/Default.cpp src/Engine/Parameter/Default.cpp
src/Engine/Parameter/Range.cpp src/Engine/Parameter/Range.cpp
src/Engine/Parameter/PrmName.cpp
src/Engine/Network/NetworkManager.cpp src/Engine/Network/NetworkManager.cpp
) )

View File

@@ -4,6 +4,7 @@
#include <iostream> #include <iostream>
#include <memory> #include <memory>
#include <stdexcept> #include <stdexcept>
#include <icecream.hpp>
enzo::op::Context::Context(enzo::nt::OpId opId, enzo::nt::NetworkManager& networkManager) enzo::op::Context::Context(enzo::nt::OpId opId, enzo::nt::NetworkManager& networkManager)

View File

@@ -35,12 +35,12 @@ nt::GeometryOperator::GeometryOperator(enzo::nt::OpId opId, op::OpInfo opInfo)
void nt::GeometryOperator::initParameters() void nt::GeometryOperator::initParameters()
{ {
for(const prm::Template* t = opInfo_.templates; t->isValid(); ++t) for(const prm::Template* t = opInfo_.templates; t->getType()!=prm::Type::LIST_TERMINATOR; ++t)
{ {
std::cout << "name: " << t->getName() << "\n";
// create parameter // create parameter
auto parameter = std::make_shared<prm::Parameter>(*t); auto parameter = std::make_shared<prm::Parameter>(*t);
parameter->valueChanged.connect([this](){dirtyNode();}); parameter->valueChanged.connect([this](){dirtyNode();});
IC(parameter);
parameters_.push_back(parameter); parameters_.push_back(parameter);
} }

View File

@@ -1,5 +1,6 @@
#include "Engine/Operator/OperatorTable.h" #include "Engine/Operator/OperatorTable.h"
#include "Engine/Operator/OpInfo.h" #include "Engine/Operator/OpInfo.h"
#include "Engine/Types.h"
#include <boost/dll/import.hpp> #include <boost/dll/import.hpp>
#include <iostream> #include <iostream>
@@ -9,7 +10,7 @@ void enzo::op::OperatorTable::addOperator(enzo::op::OpInfo info)
std::cout << "OPERATOR TABLE ADDED\n"; std::cout << "OPERATOR TABLE ADDED\n";
std::cout << "adding operator: " << info.displayName << "\n"; std::cout << "adding operator: " << info.displayName << "\n";
for(const prm::Template* t = info.templates; t->isValid(); ++t) for(const prm::Template* t = info.templates; t->getType()!=prm::Type::LIST_TERMINATOR; ++t)
{ {
std::cout << "name: " << t->getName() << "\n"; std::cout << "name: " << t->getName() << "\n";
} }

View File

@@ -45,6 +45,11 @@ std::string enzo::prm::Parameter::getName() const
return template_.getName(); return template_.getName();
} }
std::string enzo::prm::Parameter::getLabel() const
{
return template_.getLabel();
}
enzo::bt::floatT enzo::prm::Parameter::evalFloat(unsigned int index) const enzo::bt::floatT enzo::prm::Parameter::evalFloat(unsigned int index) const
{ {
if(index >= floatValues_.size()) if(index >= floatValues_.size())

View File

@@ -10,6 +10,7 @@ class Parameter
public: public:
Parameter(Template prmTemplate); Parameter(Template prmTemplate);
std::string getName() const; std::string getName() const;
std::string getLabel() const;
enzo::prm::Type getType() const; enzo::prm::Type getType() const;
unsigned int getVectorSize() const; unsigned int getVectorSize() const;

View File

@@ -0,0 +1,23 @@
#include "Engine/Parameter/PrmName.h"
enzo::prm::Name::Name(bt::String token, bt::String label)
: token_{token}, label_{label}
{
}
enzo::prm::Name::Name()
: token_{""}, label_{""}
{
}
enzo::bt::String enzo::prm::Name::getToken() const
{
return token_;
}
enzo::bt::String enzo::prm::Name::getLabel() const
{
return label_;
}

View File

@@ -0,0 +1,19 @@
#pragma once
#include "Engine/Types.h"
namespace enzo::prm
{
class Name
{
public:
Name(bt::String token, bt::String label);
Name();
bt::String getToken() const;
bt::String getLabel() const;
private:
bt::String token_;
bt::String label_;
};
}

View File

@@ -1,22 +1,22 @@
#include "Engine/Parameter/Template.h" #include "Engine/Parameter/Template.h"
#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/Types.h"
#include <icecream.hpp> #include <icecream.hpp>
enzo::prm::Template::Template(enzo::prm::Type type, const char* name) enzo::prm::Template::Template(enzo::prm::Type type, prm::Name name)
: Template(type, name, prm::Default()) : Template(type, name, prm::Default())
{ {
ranges_.resize(vectorSize_); 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, prm::Name name, unsigned int vectorSize)
: Template(type, name, prm::Default(), vectorSize) : Template(type, name, prm::Default(), vectorSize)
{ {
ranges_.resize(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, prm::Name 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)
{ {
if(ranges.size()<vectorSize_) if(ranges.size()<vectorSize_)
@@ -34,7 +34,7 @@ enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vecto
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, prm::Name name, prm::Default theDefault, unsigned int vectorSize, Range range)
: type_{type}, name_{name}, vectorSize_(vectorSize) : type_{type}, name_{name}, vectorSize_(vectorSize)
{ {
defaults_.resize(vectorSize_, theDefault); defaults_.resize(vectorSize_, theDefault);
@@ -42,15 +42,16 @@ enzo::prm::Template::Template(enzo::prm::Type type, const char* name, prm::Defau
} }
enzo::prm::Template::Template() enzo::prm::Template::Template()
: type_{enzo::prm::Type::LIST_TERMINATOR}
{ {
} }
bool enzo::prm::Template::isValid() const // bool enzo::prm::Template::isValid() const
{ // {
return name_!=nullptr; // return name_!=nullptr;
} // }
const enzo::prm::Type enzo::prm::Template::getType() const const enzo::prm::Type enzo::prm::Template::getType() const
{ {
@@ -79,9 +80,18 @@ const unsigned int enzo::prm::Template::getNumDefaults() const
return defaults_.size(); return defaults_.size();
} }
enzo::bt::String enzo::prm::Template::getName() const
const char* enzo::prm::Template::getName() const
{ {
return name_; return name_.getToken();
}
enzo::bt::String enzo::prm::Template::getToken() const
{
return name_.getToken();
}
enzo::bt::String enzo::prm::Template::getLabel() const
{
return name_.getLabel();
} }

View File

@@ -1,7 +1,7 @@
#pragma once #pragma once
#include "Engine/Parameter/Default.h" #include "Engine/Parameter/Default.h"
#include "Engine/Parameter/PrmName.h"
#include "Engine/Parameter/Range.h" #include "Engine/Parameter/Range.h"
#include "Engine/Parameter/Type.h"
#include "Engine/Types.h" #include "Engine/Types.h"
namespace enzo::prm namespace enzo::prm
@@ -12,41 +12,44 @@ class Template
public: public:
Template( Template(
enzo::prm::Type type, enzo::prm::Type type,
const char* name prm::Name name
); );
Template( Template(
enzo::prm::Type type, enzo::prm::Type type,
const char* name, prm::Name name,
unsigned int vectorSize unsigned int vectorSize
); );
Template( Template(
enzo::prm::Type type, enzo::prm::Type type,
const char* name, prm::Name name,
std::vector<prm::Default> defaults, std::vector<prm::Default> defaults,
unsigned int vectorSize = 1, unsigned int vectorSize = 1,
std::vector<prm::Range> ranges=std::vector<prm::Range>() std::vector<prm::Range> ranges=std::vector<prm::Range>()
); );
Template( Template(
enzo::prm::Type type, enzo::prm::Type type,
const char* name, prm::Name name,
prm::Default theDefault, prm::Default theDefault,
unsigned int vectorSize = 1, unsigned int vectorSize = 1,
Range range=Range() Range range=Range()
); );
Template(); Template();
const char* getName() const; // get name and get token are identical
enzo::bt::String getName() const;
enzo::bt::String getToken() const;
enzo::bt::String getLabel() const;
const prm::Default getDefault(unsigned int index=0) const; const prm::Default getDefault(unsigned int index=0) const;
const prm::Range& getRange(unsigned int index=0) const; const prm::Range& getRange(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; const unsigned int getNumDefaults() const;
bool isValid() const; // bool isValid() const;
private: private:
enzo::prm::Type type_; enzo::prm::Type type_;
std::vector<prm::Default> defaults_; std::vector<prm::Default> defaults_;
std::vector<prm::Range> ranges_; std::vector<prm::Range> ranges_;
// TODO: make a class that holds token and name // TODO: make a class that holds token and name
const char* name_; prm::Name name_;
unsigned int vectorSize_; unsigned int vectorSize_;
}; };

View File

@@ -1,23 +0,0 @@
#pragma once
namespace enzo::prm
{
// enum class Type
// {
// STRING,
// FLOAT,
// INT,
// };
// class Type
// {
// };
// const extern prm::Type FlOAT_TYPE;
// const extern prm::Type STRING_TYPE;
}

View File

@@ -39,6 +39,7 @@ namespace enzo
{ {
enum class Type enum class Type
{ {
LIST_TERMINATOR,
STRING, STRING,
XYZ, XYZ,
FLOAT, FLOAT,

View File

@@ -8,6 +8,7 @@
#include <iostream> #include <iostream>
#include <qlabel.h> #include <qlabel.h>
#include <string> #include <string>
#include <icecream.hpp>
enzo::ui::FormParm::FormParm(std::weak_ptr<prm::Parameter> parameter) enzo::ui::FormParm::FormParm(std::weak_ptr<prm::Parameter> parameter)
@@ -15,7 +16,7 @@ enzo::ui::FormParm::FormParm(std::weak_ptr<prm::Parameter> parameter)
{ {
if(auto sharedParameter=parameter_.lock()) if(auto sharedParameter=parameter_.lock())
{ {
std::string name = sharedParameter->getName(); std::string name = sharedParameter->getLabel();
label_ = new QLabel(QString::fromStdString(name+":")); label_ = new QLabel(QString::fromStdString(name+":"));
label_->setStyleSheet("QLabel{background: none}"); label_->setStyleSheet("QLabel{background: none}");
label_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); label_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);

View File

@@ -71,9 +71,11 @@ void enzo::ui::IntSliderParm::paintEvent(QPaintEvent *event)
painter.setPen(notchPen_); painter.setPen(notchPen_);
QRectF markerLinesRect = rect(); QRectF markerLinesRect = rect();
markerLinesRect.adjust(margin, margin, -margin, -margin); markerLinesRect.adjust(margin, margin, -margin, -margin);
for(int i=minValue_+1;i<maxValue_; ++i)
const int notchCount = std::min<int>(valueRange, 100);
for(int i=1;i<notchCount; ++i)
{ {
float x = ((i-minValue_)*markerLinesRect.width())/valueRange; float x = ((i-1)*markerLinesRect.width())/notchCount;
x += notchWidth+4; // offset x += notchWidth+4; // offset
const float y = markerLinesRect.bottom()-2; const float y = markerLinesRect.bottom()-2;
painter.drawLine(x, y, x, y-5); painter.drawLine(x, y, x, y-5);

View File

@@ -21,11 +21,13 @@ add_library(${libName} SHARED
../Engine/Parameter/Parameter.cpp ../Engine/Parameter/Parameter.cpp
../Engine/Parameter/Default.cpp ../Engine/Parameter/Default.cpp
../Engine/Parameter/Range.cpp ../Engine/Parameter/Range.cpp
../Engine/Parameter/PrmName.cpp
GopTransform.cpp GopTransform.cpp
GopHouse.cpp GopHouse.cpp
GopTestCube.cpp GopTestCube.cpp
GopGeometryImport.cpp GopGeometryImport.cpp
GopGrid.cpp GopGrid.cpp
GopSineWave.cpp
) )
target_link_libraries(${libName} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets glm::glm Eigen3::Eigen TBB::tbb) target_link_libraries(${libName} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets glm::glm Eigen3::Eigen TBB::tbb)

View File

@@ -127,7 +127,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"), enzo::prm::Template(enzo::prm::Type::STRING, enzo::prm::Name("filePath", "File Path")),
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", enzo::prm::Default(1)), enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), enzo::prm::Default(1)),
enzo::prm::Terminator enzo::prm::Terminator
}; };

View File

@@ -42,7 +42,7 @@ void GopGrid::cookOp(enzo::op::Context context)
{ {
const bt::floatT x = static_cast<bt::floatT>(i)/columns*width-centerOffsetX; const bt::floatT x = static_cast<bt::floatT>(i)/columns*width-centerOffsetX;
const bt::floatT z = static_cast<bt::floatT>(j)/rows*height-centerOffsetY; const bt::floatT z = static_cast<bt::floatT>(j)/rows*height-centerOffsetY;
geo.addPoint(bt::Vector3(x, sin(i+j)/10, z)); geo.addPoint(bt::Vector3(x, 0, z));
} }
} }
@@ -74,17 +74,17 @@ void GopGrid::cookOp(enzo::op::Context context)
enzo::prm::Template GopGrid::parameterList[] = enzo::prm::Template GopGrid::parameterList[] =
{ {
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::XYZ, enzo::prm::Name("size", "Size"), enzo::prm::Default(10), 2, 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", enzo::prm::Name("rows", "Rows"),
enzo::prm::Default(10), enzo::prm::Default(10),
1, 1,
enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED) enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)
), ),
enzo::prm::Template( enzo::prm::Template(
enzo::prm::Type::INT, enzo::prm::Type::INT,
"columns", enzo::prm::Name("columns", "Columns"),
enzo::prm::Default(10), enzo::prm::Default(10),
1, 1,
enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED) enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)

View File

@@ -76,6 +76,6 @@ void GOP_house::cookOp(enzo::op::Context context)
enzo::prm::Template GOP_house::parameterList[] = enzo::prm::Template GOP_house::parameterList[] =
{ {
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1), enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1),
enzo::prm::Terminator enzo::prm::Terminator
}; };

View File

@@ -0,0 +1,46 @@
#include "OpDefs/GopSineWave.h"
#include "Engine/Parameter/Range.h"
#include "Engine/Types.h"
#include <cmath>
#include <cstdio>
#include <oneapi/tbb/blocked_range.h>
#include <oneapi/tbb/parallel_for.h>
#include <fstream>
#include <string>
#include <boost/algorithm/string.hpp>
GopSineWave::GopSineWave(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo)
: GeometryOpDef(network, opInfo)
{
}
void GopSineWave::cookOp(enzo::op::Context context)
{
using namespace enzo;
if(outputRequested(0))
{
geo::Geometry geo = context.cloneInputGeo(0);
const ga::Offset pointCount = geo.getNumPoints();
const bt::floatT frequency = context.evalFloatParm("frequency");
tbb::parallel_for(tbb::blocked_range<ga::Offset>(0, pointCount), [&geo, frequency](tbb::blocked_range<ga::Offset> range){
for(ga::Offset i=range.begin(); i!=range.end(); ++i)
{
bt::Vector3 pos = geo.getPointPos(i);
pos += bt::Vector3(0, sin(pos.x()*frequency), 0);
geo.setPointPos(i, pos);
}
});
setOutputGeometry(0, geo);
}
}
enzo::prm::Template GopSineWave::parameterList[] =
{
enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("frequency", "Frequency"), enzo::prm::Default(1), 1),
enzo::prm::Terminator
};

18
src/OpDefs/GopSineWave.h Normal file
View File

@@ -0,0 +1,18 @@
#pragma once
#include "Engine/Operator/GeometryOpDef.h"
#include "Engine/Parameter/Template.h"
class GopSineWave
: public enzo::nt::GeometryOpDef
{
public:
GopSineWave(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo);
virtual void cookOp(enzo::op::Context context);
static enzo::nt::GeometryOpDef* ctor(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo)
{
return new GopSineWave(network, opInfo);
}
static BOOST_SYMBOL_EXPORT enzo::prm::Template parameterList[];
};

View File

@@ -67,6 +67,6 @@ void GopTestGeoCube::cookOp(enzo::op::Context context)
enzo::prm::Template GopTestGeoCube::parameterList[] = enzo::prm::Template GopTestGeoCube::parameterList[] =
{ {
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1), enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1),
enzo::prm::Terminator enzo::prm::Terminator
}; };

View File

@@ -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", 3), enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("translate", "Translate"), 3),
enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 3), enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("rotate", "Rotate"), 3),
enzo::prm::Terminator enzo::prm::Terminator
}; };

View File

@@ -5,6 +5,7 @@
#include "GopTestCube.h" #include "GopTestCube.h"
#include "OpDefs/GopTransform.hpp" #include "OpDefs/GopTransform.hpp"
#include "OpDefs/GopGrid.h" #include "OpDefs/GopGrid.h"
#include "OpDefs/GopSineWave.h"
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/dll.hpp> #include <boost/dll.hpp>
@@ -67,6 +68,17 @@ extern "C"
1, 1,
} }
); );
addOperator(
enzo::op::OpInfo {
"sineWave",
"Sine Wave",
&GopSineWave::ctor,
GopSineWave::parameterList,
1,
1,
1,
}
);
} }
} }