tuto_histo.h 4.45 KB
Newer Older
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 35 36 37
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg           *
*                                                                              *
* This library is free software; you can redistribute it and/or modify it      *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your     *
* option) any later version.                                                   *
*                                                                              *
* This library is distributed in the hope that it will be useful, but WITHOUT  *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
* for more details.                                                            *
*                                                                              *
* You should have received a copy of the GNU Lesser General Public License     *
* along with this library; if not, write to the Free Software Foundation,      *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
*                                                                              *
* Web site: http://cgogn.unistra.fr/                                           *
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef _TUTO2_
#define _TUTO2_



#include "Utils/Qt/qtSimple.h"
#include "Utils/cgognStream.h"
#include "Topology/generic/parameters.h"
#include "Topology/map/embeddedMap2.h"

#include "Algo/Render/GL2/mapRender.h"
#include "Utils/Shaders/shaderSimpleColor.h"
#include "Utils/Shaders/shaderColorPerVertex.h"
Thery Sylvain's avatar
Thery Sylvain committed
38
#include "Utils/vbo.h"
39 40

#include "Algo/Histogram/histogram.h"
Sylvain Thery's avatar
Sylvain Thery committed
41 42
#include "Algo/Histogram/qthistodraw.h"
#include "Utils/Qt/qtpopup.h"
43 44 45 46 47 48 49

using namespace CGoGN ;

struct PFP: public PFP_STANDARD
{
	typedef EmbeddedMap2 MAP;
};
Pierre Kraemer's avatar
Pierre Kraemer committed
50

51 52 53 54 55 56 57 58 59
typedef PFP::MAP MAP ;
typedef PFP::VEC3 VEC3 ;

/*
 * color map class for histogram color
 */
class ColMap : public Algo::Histogram::HistoColorMap
{
public:
Pierre Kraemer's avatar
Pierre Kraemer committed
60
	Geom::Vec3f color(double f) const { return Utils::color_map_BCGYR(float(f)); }
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
};

/*
 * Attribute conversion to double
 */
//class AttConv: public Algo::Histogram::AttributeConvert
//{
////	VertexAttribute<float>& m_va;
//public:
//	/// constructor with attribute reference
//	AttConv(VertexAttribute<float>& va): m_va(va){}
//
//	/// just call begin of attribute handler
//	unsigned int begin() const { return m_va.begin();}
//
//	/// just call end of attribute handler
//	unsigned int end() const  { return m_va.end();}
//
//	/// just call next  of attribute handler
//	void next(unsigned int& i) const { m_va.next(i);}
//	unsigned int nbElements() const  { return m_va.nbElements();}
//	double operator[](unsigned int i) const { return double(m_va[i])*0.33;}
//};

85
class AttConv: public Algo::Histogram::AttributeConvert<VertexAttribute<float, MAP> >
86 87 88
{
public:
	/// constructor with attribute reference
89
	AttConv(VertexAttribute<float, MAP>& va): Algo::Histogram::AttributeConvert<VertexAttribute<float, MAP> >(va){}
Pierre Kraemer's avatar
Pierre Kraemer committed
90
	double operator[](unsigned int i) const { return double(attrib[i]) * 0.33; }
91 92 93 94 95
};

class MyQT: public Utils::QT::SimpleQT
{
	Q_OBJECT
Pierre Kraemer's avatar
Pierre Kraemer committed
96

97
public:
Pierre Kraemer's avatar
Pierre Kraemer committed
98 99 100 101 102 103 104 105 106
	MyQT():
		m_render(NULL),
		m_positionVBO(NULL),
		m_shader2(NULL),
		l_cm(NULL),
		l_histo(NULL),
		l_popup(NULL),
		l_histodraw(NULL)
	{}
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

	void cb_redraw();
	void cb_initGL();

protected:
	MAP myMap;

	// render, VBO & shader
	Algo::Render::GL2::MapRender* m_render;
	Utils::VBO* m_positionVBO;	// position 3D
	Utils::VBO* m_colorVBO2;	// color per vertex for edge drawing
	Utils::ShaderColorPerVertex* m_shader2;

	// some ptr
	ColMap*  l_cm;
	Algo::Histogram::Histogram* l_histo;
	Utils::QT::QtPopUp* l_popup;
Sylvain Thery's avatar
Sylvain Thery committed
124
	Algo::Histogram::RenderHistogram* l_histodraw;
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139

	unsigned int l_nbc;
	unsigned int l_nbq;

public:
	// example of simple map creation
	void createMap(const std::string& filename);

	void cb_Save();

	void cb_exit();

	void cb_keyPress(int keycode);

public slots:
Pierre Kraemer's avatar
Pierre Kraemer committed
140
	void clickHisto(unsigned int i, unsigned int j);
141 142 143
};

#endif