surface_render.h 3.42 KB
Newer Older
Pierre Kraemer's avatar
Pierre Kraemer committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef _SURFACE_RENDER_PLUGIN_H_
#define _SURFACE_RENDER_PLUGIN_H_

#include "plugin_interaction.h"
#include "surface_render_dockTab.h"

#include "Utils/Shaders/shaderFlat.h"
#include "Utils/Shaders/shaderPhong.h"
#include "Utils/Shaders/shaderSimpleColor.h"
#include "Utils/pointSprite.h"

namespace CGoGN
{

namespace SCHNApps
{

class MapHandlerGen;

struct MapParameters
{
	enum FaceShadingStyle
	{
		FLAT = 0,
		PHONG = 1
	};

	MapParameters() :
		positionVBO(NULL),
		normalVBO(NULL),
		verticesScaleFactor(1.0f),
		renderVertices(false),
		renderEdges(false),
		renderFaces(true),
35
36
37
38
39
		faceStyle(FLAT),
		diffuseColor(0.8,0.9,0.7,0.0),
		simpleColor(0.0,0.0,0.0,0.0),
		vertexColor(0.0,0.0,1.0,0.0)

Pierre Kraemer's avatar
Pierre Kraemer committed
40
41
42
43
44
45
46
47
	{}

	Utils::VBO* positionVBO;
	Utils::VBO* normalVBO;
	float verticesScaleFactor;
	bool renderVertices;
	bool renderEdges;
	bool renderFaces;
48
	bool renderBoundary;
Pierre Kraemer's avatar
Pierre Kraemer committed
49
	FaceShadingStyle faceStyle;
50
51
52
53

	Geom::Vec4f diffuseColor;
	Geom::Vec4f simpleColor;
	Geom::Vec4f vertexColor;
Pierre Kraemer's avatar
Pierre Kraemer committed
54
55
};

Pierre Kraemer's avatar
Pierre Kraemer committed
56
class Surface_Render_Plugin : public PluginInteraction
Pierre Kraemer's avatar
Pierre Kraemer committed
57
58
59
60
{
	Q_OBJECT
	Q_INTERFACES(CGoGN::SCHNApps::Plugin)

Pierre Kraemer's avatar
Pierre Kraemer committed
61
	friend class Surface_Render_DockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
62
63

public:
Pierre Kraemer's avatar
Pierre Kraemer committed
64
	Surface_Render_Plugin()
Pierre Kraemer's avatar
Pierre Kraemer committed
65
66
	{}

Pierre Kraemer's avatar
Pierre Kraemer committed
67
	~Surface_Render_Plugin()
Pierre Kraemer's avatar
Pierre Kraemer committed
68
69
70
71
72
73
	{}

private:
	virtual bool enable();
	virtual void disable();

74
75
	virtual void draw(View *view) {}
	virtual void drawMap(View* view, MapHandlerGen* map);
Pierre Kraemer's avatar
Pierre Kraemer committed
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

	virtual void keyPress(View* view, QKeyEvent* event) {}
	virtual void keyRelease(View* view, QKeyEvent* event) {}
	virtual void mousePress(View* view, QMouseEvent* event) {}
	virtual void mouseRelease(View* view, QMouseEvent* event) {}
	virtual void mouseMove(View* view, QMouseEvent* event) {}
	virtual void wheelEvent(View* view, QWheelEvent* event) {}

	virtual void viewLinked(View *view) {}
	virtual void viewUnlinked(View *view) {}

private slots:
	// slots called from SCHNApps signals
	void selectedViewChanged(View* prev, View* cur);
	void selectedMapChanged(MapHandlerGen* prev, MapHandlerGen* cur);
	void mapAdded(MapHandlerGen* map);
	void mapRemoved(MapHandlerGen* map);

	// slots called from MapHandler signals
	void vboAdded(Utils::VBO* vbo);
	void vboRemoved(Utils::VBO* vbo);

Sylvain Thery's avatar
Sylvain Thery committed
98
99
	void appsFinished();

Pierre Kraemer's avatar
Pierre Kraemer committed
100
101
102
103
104
105
106
107
108
public slots:
	// slots for Python calls
	void changePositionVBO(const QString& view, const QString& map, const QString& vbo);
	void changeNormalVBO(const QString& view, const QString& map, const QString& vbo);
	void changeRenderVertices(const QString& view, const QString& map, bool b);
	void changeVerticesScaleFactor(const QString&view, const QString& map, float f);
	void changeRenderEdges(const QString& view, const QString& map, bool b);
	void changeRenderFaces(const QString& view, const QString& map, bool b);
	void changeFacesStyle(const QString& view, const QString& map, MapParameters::FaceShadingStyle style);
109
	void changeRenderBoundary(const QString& view, const QString& map, bool b);
110
111
112
113
	void changeFaceColor(const QString& view, const QString& map, float r, float g, float b);
	void changeEdgeColor(const QString& view, const QString& map, float r, float g, float b);
	void changeVertexColor(const QString& view, const QString& map, float r, float g, float b);

Pierre Kraemer's avatar
Pierre Kraemer committed
114
protected:
Pierre Kraemer's avatar
Pierre Kraemer committed
115
	Surface_Render_DockTab* m_dockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
116
117
118
119
120
121
122
123
124
125
126
127
128
	QHash<View*, QHash<MapHandlerGen*, MapParameters> > h_viewParameterSet;

	CGoGN::Utils::ShaderFlat* m_flatShader;
	CGoGN::Utils::ShaderPhong* m_phongShader;
	CGoGN::Utils::ShaderSimpleColor* m_simpleColorShader;
	CGoGN::Utils::PointSprite* m_pointSprite;
};

} // namespace SCHNApps

} // namespace CGoGN

#endif