surface_render.h 3.67 KB
Newer Older
Pierre Kraemer's avatar
Pierre Kraemer committed
1
2
3
4
5
6
7
8
#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"
Pierre Kraemer's avatar
Pierre Kraemer committed
9
#include "Utils/Shaders/shaderColorPerVertex.h"
Pierre Kraemer's avatar
Pierre Kraemer committed
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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),
Pierre Kraemer's avatar
Pierre Kraemer committed
32
		colorVBO(NULL),
Pierre Kraemer's avatar
Pierre Kraemer committed
33
34
35
36
		verticesScaleFactor(1.0f),
		renderVertices(false),
		renderEdges(false),
		renderFaces(true),
37
		faceStyle(FLAT),
Pierre Kraemer's avatar
Pierre Kraemer committed
38
		diffuseColor(0.85f,0.25f,0.19f,0.0f),
Sylvain Thery's avatar
Sylvain Thery committed
39
40
		simpleColor(0.0f,0.0f,0.0f,0.0f),
		vertexColor(0.0f,0.0f,1.0f,0.0f)
Pierre Kraemer's avatar
Pierre Kraemer committed
41
42
43
44
	{}

	Utils::VBO* positionVBO;
	Utils::VBO* normalVBO;
Pierre Kraemer's avatar
Pierre Kraemer committed
45
46
	Utils::VBO* colorVBO;

Pierre Kraemer's avatar
Pierre Kraemer committed
47
48
49
50
	float verticesScaleFactor;
	bool renderVertices;
	bool renderEdges;
	bool renderFaces;
51
	bool renderBoundary;
Pierre Kraemer's avatar
Pierre Kraemer committed
52
	FaceShadingStyle faceStyle;
53
54
55
56

	Geom::Vec4f diffuseColor;
	Geom::Vec4f simpleColor;
	Geom::Vec4f vertexColor;
Pierre Kraemer's avatar
Pierre Kraemer committed
57
58
};

Pierre Kraemer's avatar
Pierre Kraemer committed
59
class Surface_Render_Plugin : public PluginInteraction
Pierre Kraemer's avatar
Pierre Kraemer committed
60
61
{
	Q_OBJECT
Pierre Kraemer's avatar
Pierre Kraemer committed
62

Pierre Kraemer's avatar
Pierre Kraemer committed
63
	Q_INTERFACES(CGoGN::SCHNApps::Plugin)
Sylvain Thery's avatar
Sylvain Thery committed
64
65
66
#if CGOGN_QT_DESIRED_VERSION == 5
	Q_PLUGIN_METADATA(IID "CGoGN.SCHNapps.Plugin")
#endif
Pierre Kraemer's avatar
Pierre Kraemer committed
67

Pierre Kraemer's avatar
Pierre Kraemer committed
68
	friend class Surface_Render_DockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
69
70

public:
Pierre Kraemer's avatar
Pierre Kraemer committed
71
	Surface_Render_Plugin()
Pierre Kraemer's avatar
Pierre Kraemer committed
72
73
	{}

Pierre Kraemer's avatar
Pierre Kraemer committed
74
	~Surface_Render_Plugin()
Pierre Kraemer's avatar
Pierre Kraemer committed
75
76
77
78
79
80
	{}

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

81
82
	virtual void draw(View *view) {}
	virtual void drawMap(View* view, MapHandlerGen* map);
Pierre Kraemer's avatar
Pierre Kraemer committed
83

Sylvain Thery's avatar
Sylvain Thery committed
84
85
86
87
88
89
	virtual void keyPress(View* , QKeyEvent* ) {}
	virtual void keyRelease(View* , QKeyEvent* ) {}
	virtual void mousePress(View* , QMouseEvent* ) {}
	virtual void mouseRelease(View* , QMouseEvent* ) {}
	virtual void mouseMove(View* , QMouseEvent* ) {}
	virtual void wheelEvent(View* , QWheelEvent* ) {}
Pierre Kraemer's avatar
Pierre Kraemer committed
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104

	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);

105
	void schnappsClosing();
Sylvain Thery's avatar
Sylvain Thery committed
106

Pierre Kraemer's avatar
Pierre Kraemer committed
107
108
109
110
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);
Pierre Kraemer's avatar
Pierre Kraemer committed
111
	void changeColorVBO(const QString& view, const QString& map, const QString& vbo);
Pierre Kraemer's avatar
Pierre Kraemer committed
112
113
114
115
	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);
Sylvain Thery's avatar
Sylvain Thery committed
116
	void changeFacesStyle(const QString& view, const QString& map, int);
117
	void changeRenderBoundary(const QString& view, const QString& map, bool b);
118
119
120
121
	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
122
protected:
Pierre Kraemer's avatar
Pierre Kraemer committed
123
	Surface_Render_DockTab* m_dockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
124
125
126
127
	QHash<View*, QHash<MapHandlerGen*, MapParameters> > h_viewParameterSet;

	CGoGN::Utils::ShaderFlat* m_flatShader;
	CGoGN::Utils::ShaderPhong* m_phongShader;
Pierre Kraemer's avatar
Pierre Kraemer committed
128
	CGoGN::Utils::ShaderColorPerVertex* m_colorPerVertexShader;
Pierre Kraemer's avatar
Pierre Kraemer committed
129
130
131
132
133
134
135
136
137
	CGoGN::Utils::ShaderSimpleColor* m_simpleColorShader;
	CGoGN::Utils::PointSprite* m_pointSprite;
};

} // namespace SCHNApps

} // namespace CGoGN

#endif