Commit 16c584ca authored by CGoGN's avatar CGoGN

Merge /home/untereiner/CGoGN

parents 193852a3 fd9a5728
...@@ -790,36 +790,27 @@ void Clipping::importMesh(std::string& filename) ...@@ -790,36 +790,27 @@ void Clipping::importMesh(std::string& filename)
size_t pos = filename.rfind("."); // position of "." in filename size_t pos = filename.rfind("."); // position of "." in filename
std::string extension = filename.substr(pos); std::string extension = filename.substr(pos);
if(extension == std::string(".tet")) if(extension == std::string(".map"))
{ {
if(!Algo::Volume::Import::importTet<PFP>(myMap,filename.c_str(),attrNames)) if(!myMap.loadMapBin(filename))
{ {
CGoGNerr << "could not import " << filename << CGoGNendl ; CGoGNerr << "could not import " << filename << CGoGNendl ;
return; return;
} }
else else
position = myMap.getAttribute<VEC3, VERTEX>(attrNames[0]) ; position = myMap.getAttribute<VEC3, VERTEX>("position") ;
} }
else if(extension == std::string(".ts")) else
{ {
if(!Algo::Volume::Import::importTs<PFP>(myMap,filename.c_str(),attrNames)) if(!Algo::Volume::Import::importMesh<PFP>(myMap, filename, attrNames))
{ {
CGoGNerr << "could not import " << filename << CGoGNendl ; std::cerr << "could not import " << filename << std::endl ;
return; return ;
} }
else else
position = myMap.getAttribute<VEC3, VERTEX>(attrNames[0]) ; position = myMap.getAttribute<PFP::VEC3,VERTEX>(attrNames[0]) ;
} }
if(extension == std::string(".map"))
{
if(!myMap.loadMapBin(filename))
{
CGoGNerr << "could not import " << filename << CGoGNendl ;
return;
}
else
position = myMap.getAttribute<VEC3, VERTEX>("position") ;
}
updateVBOprimitives(Algo::Render::GL2::TRIANGLES | Algo::Render::GL2::LINES | Algo::Render::GL2::POINTS) ; updateVBOprimitives(Algo::Render::GL2::TRIANGLES | Algo::Render::GL2::LINES | Algo::Render::GL2::POINTS) ;
......
...@@ -30,87 +30,120 @@ ...@@ -30,87 +30,120 @@
SimpleGMap3::SimpleGMap3() SimpleGMap3::SimpleGMap3()
{ {
position = myMap.addAttribute<VEC3, VERTEX>("position"); position = myMap.addAttribute<VEC3, VERTEX>("position");
normal = myMap.addAttribute<VEC3, VERTEX>("normal"); volume = myMap.addAttribute<VEC3, VOLUME>("volume");
volume = myMap.addAttribute<VEC3, VOLUME>("volume");
CellMarker<EDGE> mE(myMap); // CellMarker<EDGE> mE(myMap);
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position); Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position);
Dart d = primCat.hexaGrid_topo(3,1,1); Dart d = primCat.hexaGrid_topo(1,1,1);
primCat.embedHexaGrid(2,1,1); primCat.embedHexaGrid(1,1,1);
myMap.check(); myMap.check();
Geom::Plane3D<PFP::REAL> pl(VEC3(-1,-0.5,-0.5),VEC3(-1,-0.5,0.5),VEC3(1,0.5,0.5)); Dart dp = Algo::Surface::Modelisation::createQuadrangularPyramid<PFP>(myMap);
Algo::Volume::Modelisation::sliceConvexVolume<PFP>(myMap, position, d, pl);
myMap.check(); 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);
for(unsigned int i = position.begin() ; i != position.end() ; position.next(i)) Dart dtemp = myMap.beta1(myMap.beta0(myMap.beta1(myMap.beta2(myMap.beta1(myMap.beta0(myMap.beta1(myMap.beta2(d))))))));
position[i] += VEC3(2,0,0);
Algo::Volume::Modelisation::Primitive3D<PFP> prim(myMap, position); myMap.sewVolumes(dtemp,dp);
d = prim.hexaGrid_topo(2,2,1);
prim.embedHexaGrid(1,1,1);
Dart d1 = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d))))); // Geom::Plane3D<PFP::REAL> pl(VEC3(-1,-0.5,-0.5),VEC3(-1,-0.5,0.5),VEC3(1,0.5,0.5));
VEC3 mid0 = (position[d1] + position[myMap.phi1(d1)]) / 2.0f; // Algo::Volume::Modelisation::sliceConvexVolume<PFP>(myMap, position, d, pl);
myMap.cutEdge(d1);
position[myMap.phi1(d1)] = mid0;
VEC3 mid1 = (position[d] + position[myMap.phi1(d)]) / 2.0f; // myMap.check();
myMap.cutEdge(d);
position[myMap.phi1(d)] = mid1;
d = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d))))); // for(unsigned int i = position.begin() ; i != position.end() ; position.next(i))
VEC3 mid = (position[d] + position[myMap.phi1(d)]) / 2.0f; // position[i] += VEC3(2,0,0);
myMap.cutEdge(d);
position[myMap.phi1(d)] = mid;
myMap.splitFace(d,myMap.phi1(myMap.phi1(myMap.phi1(d)))); // Algo::Volume::Modelisation::Primitive3D<PFP> prim(myMap, position);
// d = prim.hexaGrid_topo(2,2,1);
// prim.embedHexaGrid(1,1,1);
myMap.check(); // Dart d1 = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d)))));
// VEC3 mid0 = (position[d1] + position[myMap.phi1(d1)]) / 2.0f;
// myMap.cutEdge(d1);
// position[myMap.phi1(d1)] = mid0;
for(unsigned int i = position.begin() ; i != position.end() ; position.next(i)) // VEC3 mid1 = (position[d] + position[myMap.phi1(d)]) / 2.0f;
position[i] += VEC3(0,2,0); // myMap.cutEdge(d);
// position[myMap.phi1(d)] = mid1;
Algo::Volume::Modelisation::Primitive3D<PFP> prim2(myMap,position); // d = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d)))));
d = prim2.hexaGrid_topo(2,1,1); // VEC3 mid = (position[d] + position[myMap.phi1(d)]) / 2.0f;
prim2.embedHexaGrid(1,1,1); // myMap.cutEdge(d);
// position[myMap.phi1(d)] = mid;
d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d)))); // myMap.splitFace(d,myMap.phi1(myMap.phi1(myMap.phi1(d))));
myMap.unsewVolumes(d);
myMap.check(); // myMap.check();
// for(unsigned int i = position.begin() ; i != position.end() ; position.next(i))
// position[i] += VEC3(0,2,0);
// Algo::Volume::Modelisation::Primitive3D<PFP> prim2(myMap,position);
// d = prim2.hexaGrid_topo(2,1,1);
// prim2.embedHexaGrid(1,1,1);
// d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d))));
// myMap.unsewVolumes(d);
// myMap.check();
} }
void SimpleGMap3::initGUI() void SimpleGMap3::initGUI()
{ {
} }
void SimpleGMap3::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;
}
}
}
void SimpleGMap3::cb_initGL() void SimpleGMap3::cb_initGL()
{ {
Utils::GLSLShader::setCurrentOGLVersion(2) ; Utils::GLSLShader::setCurrentOGLVersion(2) ;
Geom::BoundingBox<PFP::VEC3> bb = Algo::Geometry::computeBoundingBox<PFP>(myMap, position) ; Geom::BoundingBox<PFP::VEC3> bb = Algo::Geometry::computeBoundingBox<PFP>(myMap, position) ;
VEC3 gPosObj = bb.center() ; VEC3 gPosObj = bb.center() ;
float tailleX = bb.size(0) ; float tailleX = bb.size(0) ;
float tailleY = bb.size(1) ; float tailleY = bb.size(1) ;
float tailleZ = bb.size(2) ; float tailleZ = bb.size(2) ;
float gWidthObj = std::max<float>(std::max<float>(tailleX, tailleY), tailleZ) ; float gWidthObj = std::max<float>(std::max<float>(tailleX, tailleY), tailleZ) ;
setParamObject(gWidthObj, gPosObj.data()); setParamObject(gWidthObj, gPosObj.data());
m_render_topo = new Algo::Render::GL2::Topo3Render(); m_render_topo = new Algo::Render::GL2::Topo3Render();
m_render_topo->setDartWidth(2.0f); m_render_topo->setDartWidth(2.0f);
m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f); m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f);
m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.9f); m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.8f);
} }
void SimpleGMap3::cb_redraw() void SimpleGMap3::cb_redraw()
{ {
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
glLineWidth(1.0f); glLineWidth(1.0f);
m_render_topo->drawTopo(); m_render_topo->drawTopo();
} }
/********************************************************************************************** /**********************************************************************************************
...@@ -119,13 +152,13 @@ void SimpleGMap3::cb_redraw() ...@@ -119,13 +152,13 @@ void SimpleGMap3::cb_redraw()
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
QApplication app(argc, argv) ; QApplication app(argc, argv) ;
SimpleGMap3 sqt ; SimpleGMap3 sqt ;
sqt.setGeometry(0, 0, 1000, 800) ; sqt.setGeometry(0, 0, 1000, 800) ;
sqt.show() ; sqt.show() ;
sqt.initGUI() ; sqt.initGUI() ;
return app.exec() ; return app.exec() ;
} }
...@@ -53,7 +53,6 @@ public: ...@@ -53,7 +53,6 @@ public:
MAP myMap ; MAP myMap ;
VertexAttribute<VEC3> position ; VertexAttribute<VEC3> position ;
VertexAttribute<VEC3> normal ;
VolumeAttribute<VEC3> volume ; VolumeAttribute<VEC3> volume ;
Algo::Render::GL2::Topo3Render* m_render_topo; Algo::Render::GL2::Topo3Render* m_render_topo;
...@@ -64,4 +63,5 @@ public: ...@@ -64,4 +63,5 @@ public:
void cb_initGL() ; void cb_initGL() ;
void cb_redraw() ; void cb_redraw() ;
void cb_keyPress(int c);
}; };
...@@ -32,44 +32,62 @@ SimpleMap3::SimpleMap3() ...@@ -32,44 +32,62 @@ SimpleMap3::SimpleMap3()
{ {
position = myMap.addAttribute<VEC3, VERTEX>("position"); position = myMap.addAttribute<VEC3, VERTEX>("position");
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap, position); Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position);
Dart d = primCat.hexaGrid_topo(2,1,1); Dart d = primCat.hexaGrid_topo(1,1,1);
primCat.embedHexaGrid(1,1,1); primCat.embedHexaGrid(1,1,1);
myMap.closeMap(); myMap.closeMap();
myMap.check();
unsigned int nb=0; Dart dp = Algo::Surface::Modelisation::createQuadrangularPyramid<PFP>(myMap);
for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
nb++;
std::cout << "Nb vertices (equals 12) : " << nb << std::endl; position[dp] = typename PFP::VEC3(0.5,0.5,-0.5);
assert(nb==12); 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);
Dart dtemp = myMap.phi_1(myMap.phi2(myMap.phi_1(myMap.phi_1(myMap.phi2(d)))));
d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d)))); myMap.sewVolumes(dtemp,dp);
Dart dd = myMap.phi3(d); // Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap, position);
// Dart d = primCat.hexaGrid_topo(2,1,1);
// primCat.embedHexaGrid(1,1,1);
// myMap.closeMap();
myMap.unsewVolumes(d); // unsigned int nb=0;
// for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
// nb++;
myMap.check(); // std::cout << "Nb vertices (equals 12) : " << nb << std::endl;
// assert(nb==12);
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; // d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d))));
assert(nb==16);
myMap.sewVolumes(d,dd); // Dart dd = myMap.phi3(d);
myMap.check(); // myMap.unsewVolumes(d);
nb=0; // myMap.check();
for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
nb++;
std::cout << "Nb vertices after resew (equals 12) : " << nb << std::endl; // nb=0;
assert(nb==12); // 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);
} }
...@@ -92,22 +110,64 @@ void SimpleMap3::cb_initGL() ...@@ -92,22 +110,64 @@ void SimpleMap3::cb_initGL()
m_render_topo = new Algo::Render::GL2::Topo3Render(); m_render_topo = new Algo::Render::GL2::Topo3Render();
m_render_topo->setDartWidth(2.0f); m_render_topo->setDartWidth(2.0f);
m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f); m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f);
m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.9f); m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.8f);
m_render_topo_boundary = new Algo::Render::GL2::TopoRender(); m_render_topo_boundary = new Algo::Render::GL2::TopoRender();
m_render_topo_boundary->setDartWidth(2.0f); m_render_topo_boundary->setDartWidth(2.0f);
m_render_topo_boundary->setInitialDartsColor(0.4f,0.8f,0.4f); m_render_topo_boundary->setInitialDartsColor(0.4f,0.8f,0.4f);
m_render_topo_boundary->updateDataBoundary<PFP>(myMap, position, 0.9f,0.9f,bb.maxSize()/50.0f); m_render_topo_boundary->updateDataBoundary<PFP>(myMap, position, 0.9f,0.9f,bb.maxSize()/50.0f);
m_render_topo_primal = new Algo::Render::GL2::Topo3PrimalRender();
m_render_topo_primal->setDartWidth(2.0f);
m_render_topo_primal->setInitialDartsColor(1.0f,1.0f,1.0f);
m_render_topo_primal->updateData<PFP>(myMap, position, 0.95f,0.85f);
} }
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;
}
}
}
void SimpleMap3::cb_redraw() void SimpleMap3::cb_redraw()
{ {
glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);
glLineWidth(1.0f); glLineWidth(1.0f);
m_render_topo->drawTopo(); m_render_topo->drawTopo();
m_render_topo_boundary->drawTopo(); //m_render_topo_boundary->drawTopo();
//m_render_topo_primal->drawTopo();
} }
/********************************************************************************************** /**********************************************************************************************
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "Geometry/vector_gen.h" #include "Geometry/vector_gen.h"
#include "Algo/Render/GL2/topo3Render.h" #include "Algo/Render/GL2/topo3Render.h"
#include "Algo/Render/GL2/topo3PrimalRender.h"
#include "Algo/Render/GL2/topoRender.h" #include "Algo/Render/GL2/topoRender.h"
using namespace CGoGN ; using namespace CGoGN ;
...@@ -58,6 +59,7 @@ public: ...@@ -58,6 +59,7 @@ public:
Algo::Render::GL2::Topo3Render* m_render_topo; Algo::Render::GL2::Topo3Render* m_render_topo;
Algo::Render::GL2::TopoRender* m_render_topo_boundary; Algo::Render::GL2::TopoRender* m_render_topo_boundary;
Algo::Render::GL2::Topo3PrimalRender* m_render_topo_primal;
SimpleMap3() ; SimpleMap3() ;
...@@ -65,5 +67,6 @@ public: ...@@ -65,5 +67,6 @@ public:
void cb_initGL() ; void cb_initGL() ;
void cb_redraw() ; void cb_redraw() ;
void cb_keyPress(int code);
}; };
...@@ -136,7 +136,7 @@ void MyQT::slider_released() ...@@ -136,7 +136,7 @@ void MyQT::slider_released()
void MyQT::cb_Open() void MyQT::cb_Open()
{ {
std::string filters("all (*.*);; trian (*.trian);; ctm (*.ctm);; off (*.off);; ply (*.ply)") ; std::string filters("all (*.*)") ;
std::string filename = selectFile("Open Mesh", "", filters) ; std::string filename = selectFile("Open Mesh", "", filters) ;
if (filename.empty()) if (filename.empty())
return ; return ;
...@@ -145,8 +145,8 @@ void MyQT::cb_Open() ...@@ -145,8 +145,8 @@ void MyQT::cb_Open()
std::vector<std::string> attrNames ; std::vector<std::string> attrNames ;
size_t pos = filename.rfind("."); // position of "." in filename //size_t pos = filename.rfind("."); // position of "." in filename
std::string extension = filename.substr(pos); //std::string extension = filename.substr(pos);
// if(extension == std::string(".off")) // if(extension == std::string(".off"))
// { // {
......
...@@ -10,3 +10,6 @@ ADD_SUBDIRECTORY(surface_subdivision) ...@@ -10,3 +10,6 @@ ADD_SUBDIRECTORY(surface_subdivision)
ADD_SUBDIRECTORY(surface_selection) ADD_SUBDIRECTORY(surface_selection)
ADD_SUBDIRECTORY(surface_deformation) ADD_SUBDIRECTORY(surface_deformation)
ADD_SUBDIRECTORY(surface_modelisation) ADD_SUBDIRECTORY(surface_modelisation)
ADD_SUBDIRECTORY(volume_import)
ADD_SUBDIRECTORY(volume_render)
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
SET( PLUGIN_NAME ImportVolume ) SET( PLUGIN_NAME Volume_Import )
SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/importVolume ) SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/volume_import )
INCLUDE_DIRECTORIES( INCLUDE_DIRECTORIES(
${PLUGIN_ROOT_DIR}/include ${PLUGIN_ROOT_DIR}/include
...@@ -25,7 +25,7 @@ file( ...@@ -25,7 +25,7 @@ file(
SET( SET(
PLUGIN_QOBJECT_FILES PLUGIN_QOBJECT_FILES
${PLUGIN_ROOT_DIR}/include/importVolume.h ${PLUGIN_ROOT_DIR}/include/volume_import.h
) )
include( ${SCHNApps_ROOT_DIR}/Plugins/plugins_cmake.txt ) include( ${SCHNApps_ROOT_DIR}/Plugins/plugins_cmake.txt )
#ifndef _IMPORTVOLUME_PLUGIN_H_ #ifndef _VOLUME_IMPORT_PLUGIN_H_
#define _IMPORTVOLUME_PLUGIN_H_ #define _VOLUME_IMPORT_PLUGIN_H_
#include "plugin.h"
#include "plugin_processing.h"
namespace CGoGN namespace CGoGN
{ {
...@@ -10,32 +9,22 @@ namespace CGoGN ...@@ -10,32 +9,22 @@ namespace CGoGN