surface_render.h 3.82 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
		simpleColor(0.0f,0.0f,0.0f,0.0f),
40
41
		vertexColor(0.0f,0.0f,1.0f,0.0f),
		backColor(0.85f, 0.25f, 0.19f, 0.0f)
Pierre Kraemer's avatar
Pierre Kraemer committed
42
43
44
45
	{}

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

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

	Geom::Vec4f diffuseColor;
	Geom::Vec4f simpleColor;
	Geom::Vec4f vertexColor;
58
	Geom::Vec4f backColor;
Pierre Kraemer's avatar
Pierre Kraemer committed
59
60
};

Pierre Kraemer's avatar
Pierre Kraemer committed
61
class Surface_Render_Plugin : public PluginInteraction
Pierre Kraemer's avatar
Pierre Kraemer committed
62
63
{
	Q_OBJECT
Pierre Kraemer's avatar
Pierre Kraemer committed
64

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

Pierre Kraemer's avatar
Pierre Kraemer committed
70
	friend class Surface_Render_DockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
71
72

public:
Pierre Kraemer's avatar
Pierre Kraemer committed
73
	Surface_Render_Plugin()
Pierre Kraemer's avatar
Pierre Kraemer committed
74
75
	{}

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

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

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

Sylvain Thery's avatar
Sylvain Thery committed
86
87
88
89
90
91
	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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106

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

107
	void schnappsClosing();
Sylvain Thery's avatar
Sylvain Thery committed
108

Pierre Kraemer's avatar
Pierre Kraemer committed
109
110
111
112
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
113
	void changeColorVBO(const QString& view, const QString& map, const QString& vbo);
Pierre Kraemer's avatar
Pierre Kraemer committed
114
115
116
117
	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
118
	void changeFacesStyle(const QString& view, const QString& map, int);
119
	void changeRenderBoundary(const QString& view, const QString& map, bool b);
120
121
122
	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);
123
124
	void changeBackColor(const QString& view, const QString& map, float r, float g, float b);

125

Pierre Kraemer's avatar
Pierre Kraemer committed
126
protected:
Pierre Kraemer's avatar
Pierre Kraemer committed
127
	Surface_Render_DockTab* m_dockTab;
Pierre Kraemer's avatar
Pierre Kraemer committed
128
129
130
131
	QHash<View*, QHash<MapHandlerGen*, MapParameters> > h_viewParameterSet;

	CGoGN::Utils::ShaderFlat* m_flatShader;
	CGoGN::Utils::ShaderPhong* m_phongShader;
Pierre Kraemer's avatar
Pierre Kraemer committed
132
	CGoGN::Utils::ShaderColorPerVertex* m_colorPerVertexShader;
Pierre Kraemer's avatar
Pierre Kraemer committed
133
134
135
136
137
138
139
140
141
	CGoGN::Utils::ShaderSimpleColor* m_simpleColorShader;
	CGoGN::Utils::PointSprite* m_pointSprite;
};

} // namespace SCHNApps

} // namespace CGoGN

#endif