#pragma once #include "SceneModel.h" #include "AbstractMesh.h" #include "Image.h" #include "Point.h" #include #include struct SceneInfo; class AbstractVisualNode { public: AbstractVisualNode(const Point& location, const std::string& name = {}); virtual ~AbstractVisualNode() = default; void addChild(AbstractVisualNode* child); virtual SceneItem* getSceneItem(std::size_t idx) const; virtual std::size_t getNumSceneItems() const; std::size_t getNumChildren() const; const std::vector& getChildren() const; const std::string& getName() const; Image* getImage() const; bool getIsVisible() const; void syncChildren(const std::vector& children); void setIsVisible(bool isVisible); void setName(const std::string& name); void setLocation(const Point& loc); virtual void update(SceneInfo* sceneInfo); protected: Point mLocation; std::vector > mSceneItems; std::unique_ptr mImage; std::vector mChildren; bool mIsVisible{true}; bool mTransformIsDirty{true}; std::string mName; };