#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 mBackgroundItem; }; using GeometryNodePtr = std::unique_ptr;