You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

66 lines
1.4 KiB

#pragma once
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#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<CPoint3D> points;
Color color;
float width;
bool closed;
};
struct DrawPointCloudDesc {
std::vector<CPoint3D> 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<Renderer> _instance;
vtkSmartPointer<vtkRenderWindow> _renwin;
vtkSmartPointer<vtkRenderer> _vtkRenderer;
vtkSmartPointer<vtkRenderWindowInteractor> _interactor;
Renderer();
};