#pragma once #include "Engine/Operator/GeometryConnection.h" #include "Engine/Operator/OpInfo.h" #include "Engine/Operator/GeometryOpDef.h" #include "Engine/Parameter/Parameter.h" #include "Engine/Types.h" #include #include namespace enzo::nt { void connectOperators(enzo::nt::OpId inputOpId, unsigned int inputIndex, enzo::nt::OpId outputOpId, unsigned int outputIndex); class GeometryOperator { public: GeometryOperator(enzo::nt::OpId opId, op::OpInfo opInfo); // disable copying GeometryOperator(const GeometryOperator&) = delete; GeometryOperator& operator=(const GeometryOperator&) = delete; void cookOp(op::Context context); geo::Geometry& getOutputGeo(unsigned outputIndex) const; void addInputConnection(std::shared_ptr connection); void addOutputConnection(std::shared_ptr connection); std::vector> getInputConnections() const; std::vector> getOutputConnections() const; std::optional getInputConnection(size_t index) const; std::vector> getParameters(); std::weak_ptr getParameter(std::string parameterName); std::string getTypeName(); void dirtyNode(bool dirtyDescendents=true); bool isDirty(); unsigned int getMinInputs() const; unsigned int getMaxInputs() const; unsigned int getMaxOutputs() const; // signals boost::signals2::signal nodeDirtied; private: void initParameters(); // TODO: avoid duplicate connections std::vector> inputConnections_; std::vector> outputConnections_; std::vector> parameters_; std::unique_ptr opDef_; enzo::nt::OpId opId_; enzo::op::OpInfo opInfo_; bool dirty_ = true; }; }