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