simpleMap3.cpp 6.48 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
* Copyright (C) 2009, 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.           *
*                                                                              *
20
* Web site: http://cgogn.unistra.fr/                                  *
21
22
23
24
25
26
27
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#include "simpleMap3.h"
#include "Utils/GLSLShader.h"
#include "Algo/Geometry/boundingbox.h"
untereiner's avatar
untereiner committed
28
#include "Algo/Tiling/Volume/cubic.h"
untereiner's avatar
untereiner committed
29
#include "Algo/Modelisation/subdivision3.h"
30
31
32

SimpleMap3::SimpleMap3()
{
33
	position = myMap.addAttribute<VEC3, VERTEX>("position");
34
35


untereiner's avatar
untereiner committed
36
37
38
      Algo::Volume::Tilings::Cubic::Grid<PFP> cubic(myMap, 1, 1, 1);
      cubic.embedIntoGrid(position, 1.0f, 1.0f, 1.0f);
      myMap.check();
39
40


untereiner's avatar
untereiner committed
41
//    Dart dp = Algo::Surface::Modelisation::createQuadrangularPyramid<PFP>(myMap);
Sylvain Thery's avatar
Sylvain Thery committed
42

untereiner's avatar
untereiner committed
43
44
45
46
47
//    position[dp] = typename PFP::VEC3(0.5,0.5,-0.5);
//    position[myMap.phi1(dp)] = typename PFP::VEC3(0.5,0.5,0.5);
//    position[myMap.phi1(myMap.phi1(dp))] = typename PFP::VEC3(0.5,-0.5,0.5);
//    position[myMap.phi_1(dp)] = typename PFP::VEC3(0.5,-0.5,-0.5);
//    position[myMap.phi_1(myMap.phi2(dp))] = typename PFP::VEC3(1.5f, 0.0f, 0.0f);
48

untereiner's avatar
untereiner committed
49
50
51
52
53
54
55
//    Dart dtemp = myMap.phi_1(myMap.phi2(myMap.phi_1(myMap.phi_1(myMap.phi2(d)))));

//    myMap.sewVolumes(dtemp,dp);

//      Algo::Volume::Tilings::Cubic::Grid<PFP> cubic(myMap, 2, 1, 1);
//      cubic.embedIntoGrid(position, 1.0f, 1.0f, 1.0f);
//      myMap.check();
56

57
58
59
//	unsigned int nb=0;
//	for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
//		nb++;
60

61
62
//	std::cout << "Nb vertices (equals 12) : " << nb << std::endl;
//	assert(nb==12);
63
64


65
//	d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d))));
66

67
//	Dart dd = myMap.phi3(d);
68

69
//	myMap.unsewVolumes(d);
70

71
//	myMap.check();
72

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//	nb=0;
//	for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
//		nb++;

//	std::cout << "Nb vertices after unsew (equals 16) : " << nb << std::endl;
//	assert(nb==16);

//	myMap.sewVolumes(d,dd);

//	myMap.check();

//	nb=0;
//	for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
//		nb++;

//	std::cout << "Nb vertices after resew (equals 12) : " << nb << std::endl;
//	assert(nb==12);
Sylvain Thery's avatar
Sylvain Thery committed
90

91
92
93
94
95
96
97
98
}

void SimpleMap3::initGUI()
{
}

void SimpleMap3::cb_initGL()
{
Sylvain Thery's avatar
Sylvain Thery committed
99
	Utils::GLSLShader::setCurrentOGLVersion(2) ;
100
101
102
103
104
105
106
107

	Geom::BoundingBox<PFP::VEC3> bb = Algo::Geometry::computeBoundingBox<PFP>(myMap, position) ;
	VEC3 gPosObj = bb.center() ;
	float tailleX = bb.size(0) ;
	float tailleY = bb.size(1) ;
	float tailleZ = bb.size(2) ;
	float gWidthObj = std::max<float>(std::max<float>(tailleX, tailleY), tailleZ) ;
	setParamObject(gWidthObj, gPosObj.data());
Sylvain Thery's avatar
Sylvain Thery committed
108

Pierre Kraemer's avatar
Pierre Kraemer committed
109
	m_render_topo = new Algo::Render::GL2::Topo3RenderMap<PFP>();
Sylvain Thery's avatar
Sylvain Thery committed
110
111
	m_render_topo->setDartWidth(2.0f);
	m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f);
Pierre Kraemer's avatar
Pierre Kraemer committed
112
	m_render_topo->updateData(myMap, position, 0.9f,0.9f,0.8f);
Sylvain Thery's avatar
Sylvain Thery committed
113

Pierre Kraemer's avatar
Pierre Kraemer committed
114
	m_render_topo_boundary = new Algo::Render::GL2::TopoRenderMap<PFP>();
Sylvain Thery's avatar
Sylvain Thery committed
115
116
	m_render_topo_boundary->setDartWidth(2.0f);
	m_render_topo_boundary->setInitialDartsColor(0.4f,0.8f,0.4f);
Pierre Kraemer's avatar
Pierre Kraemer committed
117
	m_render_topo_boundary->updateDataBoundary(myMap, position, 0.9f,0.9f,bb.maxSize()/50.0f);
118

Pierre Kraemer's avatar
Pierre Kraemer committed
119
	m_render_topo_primal = new Algo::Render::GL2::Topo3PrimalRender<PFP>();
120
121
    m_render_topo_primal->setDartWidth(2.0f);
    m_render_topo_primal->setInitialDartsColor(1.0f,1.0f,1.0f);
Pierre Kraemer's avatar
Pierre Kraemer committed
122
	m_render_topo_primal->updateData(myMap, position, 0.95f,0.85f);
123
124
}

125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
void SimpleMap3::cb_keyPress(int code)
{
    switch(code)
    {
        case 'e':
        {
            time_t rawtime;
            struct tm * timeinfo;
            char buffer[80];

            time (&rawtime);
            timeinfo = localtime (&rawtime);

            strftime (buffer,80,".%F.%H:%M:%S",timeinfo);

            std::string filename = std::string("topo_screenshot") + std::string(buffer) + std::string(".svg");
            m_render_topo->svgout2D(filename, modelViewMatrix(), projectionMatrix());
            break;
        }
        case 'E':
        {
            time_t rawtime;
            struct tm * timeinfo;
            char buffer[80];

            time (&rawtime);
            timeinfo = localtime (&rawtime);

            strftime (buffer,80,".%F.%H:%M:%S",timeinfo);

            std::string filename = std::string("topo_screenshot") + std::string(buffer) + std::string(".svg");
            m_render_topo_primal->svgout2D(filename, modelViewMatrix(), projectionMatrix());
            break;
        }
    }
}
Sylvain Thery's avatar
Sylvain Thery committed
161
162


163
164
165
166
void SimpleMap3::cb_redraw()
{
	glDisable(GL_LIGHTING);
	glLineWidth(1.0f);
167
168
169
    m_render_topo->drawTopo();
    //m_render_topo_boundary->drawTopo();
    //m_render_topo_primal->drawTopo();
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
}

/**********************************************************************************************
 *                                      MAIN FUNCTION                                         *
 **********************************************************************************************/

int main(int argc, char **argv)
{
	QApplication app(argc, argv) ;

	SimpleMap3 sqt ;
	sqt.setGeometry(0, 0, 1000, 800) ;
 	sqt.show() ;

	sqt.initGUI() ;

	return app.exec() ;
}