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
66 lines
1.4 KiB
3 days ago
|
#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();
|
||
|
};
|