stuff-from-scratch/src/rendering/visual_elements/nodes/GeometryNode.h
2023-01-17 10:13:25 +00:00

46 lines
943 B
C++

#pragma once
#include "MaterialNode.h"
struct SceneInfo;
class SceneModel;
class GeometryNode : public MaterialNode
{
public:
enum class Type
{
Path,
Rectangle,
Circle,
Arc,
Line
};
public:
GeometryNode(const Point& location);
virtual ~GeometryNode();
virtual Type getType() = 0;
SceneItem* getSceneItem(std::size_t idx) const override;
std::size_t getNumSceneItems() const override;
double getStrokeThickness() const;
void setStrokeThickness(double thickness);
void update(SceneInfo* sceneInfo) override;
protected:
virtual void createOrUpdateGeometry(SceneInfo* sceneInfo) = 0;
virtual void updateMaterial();
virtual void updateTransform() = 0;
double mStrokeThickness{0};
Type mType;
bool mGeometryIsDirty{true};
std::unique_ptr<SceneModel> mBackgroundItem;
};
using GeometryNodePtr = std::unique_ptr<GeometryNode>;