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/Default.cpp
src/Engine/Parameter/Range.cpp
src/Engine/Parameter/PrmName.cpp
src/Engine/Network/NetworkManager.cpp
)

View File

@@ -4,6 +4,7 @@
#include <iostream>
#include <memory>
#include <stdexcept>
#include <icecream.hpp>
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()
{
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
auto parameter = std::make_shared<prm::Parameter>(*t);
parameter->valueChanged.connect([this](){dirtyNode();});
IC(parameter);
parameters_.push_back(parameter);
}

View File

@@ -1,5 +1,6 @@
#include "Engine/Operator/OperatorTable.h"
#include "Engine/Operator/OpInfo.h"
#include "Engine/Types.h"
#include <boost/dll/import.hpp>
#include <iostream>
@@ -9,7 +10,7 @@ void enzo::op::OperatorTable::addOperator(enzo::op::OpInfo info)
std::cout << "OPERATOR TABLE ADDED\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";
}

View File

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

View File

@@ -10,6 +10,7 @@ class Parameter
public:
Parameter(Template prmTemplate);
std::string getName() const;
std::string getLabel() const;
enzo::prm::Type getType() 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/Default.h"
#include "Engine/Parameter/Range.h"
#include "Engine/Parameter/Type.h"
#include "Engine/Types.h"
#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())
{
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)
{
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)
{
if(ranges.size()<vectorSize_)
@@ -34,7 +34,7 @@ enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vecto
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)
{
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()
: type_{enzo::prm::Type::LIST_TERMINATOR}
{
}
bool enzo::prm::Template::isValid() const
{
return name_!=nullptr;
// bool enzo::prm::Template::isValid() const
// {
// return name_!=nullptr;
}
// }
const enzo::prm::Type enzo::prm::Template::getType() const
{
@@ -79,9 +80,18 @@ const unsigned int enzo::prm::Template::getNumDefaults() const
return defaults_.size();
}
const char* enzo::prm::Template::getName() const
enzo::bt::String 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
#include "Engine/Parameter/Default.h"
#include "Engine/Parameter/PrmName.h"
#include "Engine/Parameter/Range.h"
#include "Engine/Parameter/Type.h"
#include "Engine/Types.h"
namespace enzo::prm
@@ -12,41 +12,44 @@ class Template
public:
Template(
enzo::prm::Type type,
const char* name
prm::Name name
);
Template(
enzo::prm::Type type,
const char* name,
prm::Name name,
unsigned int vectorSize
);
Template(
enzo::prm::Type type,
const char* name,
prm::Name name,
std::vector<prm::Default> defaults,
unsigned int vectorSize = 1,
std::vector<prm::Range> ranges=std::vector<prm::Range>()
);
Template(
enzo::prm::Type type,
const char* name,
prm::Name name,
prm::Default theDefault,
unsigned int vectorSize = 1,
Range range=Range()
);
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::Range& getRange(unsigned int index=0) const;
const prm::Type getType() const;
const unsigned int getSize() const;
const unsigned int getNumDefaults() const;
bool isValid() const;
// bool isValid() const;
private:
enzo::prm::Type type_;
std::vector<prm::Default> defaults_;
std::vector<prm::Range> ranges_;
// TODO: make a class that holds token and name
const char* name_;
prm::Name name_;
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
{
LIST_TERMINATOR,
STRING,
XYZ,
FLOAT,

View File

@@ -8,6 +8,7 @@
#include <iostream>
#include <qlabel.h>
#include <string>
#include <icecream.hpp>
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())
{
std::string name = sharedParameter->getName();
std::string name = sharedParameter->getLabel();
label_ = new QLabel(QString::fromStdString(name+":"));
label_->setStyleSheet("QLabel{background: none}");
label_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);

View File

@@ -71,9 +71,11 @@ void enzo::ui::IntSliderParm::paintEvent(QPaintEvent *event)
painter.setPen(notchPen_);
QRectF markerLinesRect = rect();
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
const float y = markerLinesRect.bottom()-2;
painter.drawLine(x, y, x, y-5);

View File

@@ -21,11 +21,13 @@ add_library(${libName} SHARED
../Engine/Parameter/Parameter.cpp
../Engine/Parameter/Default.cpp
../Engine/Parameter/Range.cpp
../Engine/Parameter/PrmName.cpp
GopTransform.cpp
GopHouse.cpp
GopTestCube.cpp
GopGeometryImport.cpp
GopGrid.cpp
GopSineWave.cpp
)
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(enzo::prm::Type::STRING, "filePath"),
enzo::prm::Template(enzo::prm::Type::FLOAT, "size", enzo::prm::Default(1)),
enzo::prm::Template(enzo::prm::Type::STRING, enzo::prm::Name("filePath", "File Path")),
enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), enzo::prm::Default(1)),
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 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(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::Type::INT,
"rows",
enzo::prm::Name("rows", "Rows"),
enzo::prm::Default(10),
1,
enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)
),
enzo::prm::Template(
enzo::prm::Type::INT,
"columns",
enzo::prm::Name("columns", "Columns"),
enzo::prm::Default(10),
1,
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(enzo::prm::Type::FLOAT, "size", 1),
enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1),
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(enzo::prm::Type::FLOAT, "size", 1),
enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1),
enzo::prm::Terminator
};

View File

@@ -62,8 +62,8 @@ void GopTransform::cookOp(enzo::op::Context context)
enzo::prm::Template GopTransform::parameterList[] =
{
enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 3),
enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 3),
enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("translate", "Translate"), 3),
enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("rotate", "Rotate"), 3),
enzo::prm::Terminator
};

View File

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