#pragma once #include #include #include #include "ICH/BaseModel.h" #include "ICH/Point3D.h" struct Color { float r, g, b; }; constexpr Color RED{1.0f, 0.0f, 0.0f}; constexpr Color GREEN{0.0f, 1.0f, 0.0f}; constexpr Color BLUE{0.0f, 0.0f, 1.0f}; constexpr Color WHITE{1.0f, 1.0f, 1.0f}; constexpr Color BLACK{0.0f, 0.0f, 0.0f}; constexpr Color YELLOW{1.0f, 1.0f, 0.0f}; struct DrawMeshDesc { const CBaseModel* model = nullptr; Color color; float opacity = 1.0f; }; struct DrawPolylineDesc { std::vector points; Color color; float width; bool closed; }; struct DrawPointCloudDesc { std::vector points; Color color; float pointSize; }; class Renderer final { public: static Renderer &getInstance() { if (!_instance) { _instance.reset(new Renderer()); } return *_instance; } void render() { _renwin->Render(); _interactor->Start(); } void update() { _renwin->Render(); } void addMesh(const DrawMeshDesc &desc); void addPolyline(const DrawPolylineDesc &desc); void addPointCloud(const DrawPointCloudDesc &desc); private: static std::shared_ptr _instance; vtkSmartPointer _renwin; vtkSmartPointer _vtkRenderer; vtkSmartPointer _interactor; Renderer(); };