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)
size_t pos = filename.rfind("."); // position of "." in filename
std::string extension = filename.substr(pos);
if(extension == std::string(".tet"))
{
if(!Algo::Volume::Import::importTet<PFP>(myMap,filename.c_str(),attrNames))
{
CGoGNerr << "could not import " << filename << CGoGNendl ;
return;
}
else
position = myMap.getAttribute<VEC3, VERTEX>(attrNames[0]) ;
}
else if(extension == std::string(".ts"))
{
if(!Algo::Volume::Import::importTs<PFP>(myMap,filename.c_str(),attrNames))
{
CGoGNerr << "could not import " << filename << CGoGNendl ;
return;
}
else
position = myMap.getAttribute<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") ;
}
if(extension == std::string(".map"))
{
if(!myMap.loadMapBin(filename))
{
CGoGNerr << "could not import " << filename << CGoGNendl ;
return;
}
else
position = myMap.getAttribute<VEC3, VERTEX>("position") ;
}
else
{
if(!Algo::Volume::Import::importMesh<PFP>(myMap, filename, attrNames))
{
std::cerr << "could not import " << filename << std::endl ;
return ;
}
else
position = myMap.getAttribute<PFP::VEC3,VERTEX>(attrNames[0]) ;
}
updateVBOprimitives(Algo::Render::GL2::TRIANGLES | Algo::Render::GL2::LINES | Algo::Render::GL2::POINTS) ;
......
......@@ -30,87 +30,120 @@
SimpleGMap3::SimpleGMap3()
{
position = myMap.addAttribute<VEC3, VERTEX>("position");
normal = myMap.addAttribute<VEC3, VERTEX>("normal");
volume = myMap.addAttribute<VEC3, VOLUME>("volume");
position = myMap.addAttribute<VEC3, VERTEX>("position");
volume = myMap.addAttribute<VEC3, VOLUME>("volume");
CellMarker<EDGE> mE(myMap);
// CellMarker<EDGE> mE(myMap);
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position);
Dart d = primCat.hexaGrid_topo(3,1,1);
primCat.embedHexaGrid(2,1,1);
myMap.check();
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position);
Dart d = primCat.hexaGrid_topo(1,1,1);
primCat.embedHexaGrid(1,1,1);
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));
Algo::Volume::Modelisation::sliceConvexVolume<PFP>(myMap, position, d, pl);
Dart dp = Algo::Surface::Modelisation::createQuadrangularPyramid<PFP>(myMap);
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))
position[i] += VEC3(2,0,0);
Dart dtemp = myMap.beta1(myMap.beta0(myMap.beta1(myMap.beta2(myMap.beta1(myMap.beta0(myMap.beta1(myMap.beta2(d))))))));
Algo::Volume::Modelisation::Primitive3D<PFP> prim(myMap, position);
d = prim.hexaGrid_topo(2,2,1);
prim.embedHexaGrid(1,1,1);
myMap.sewVolumes(dtemp,dp);
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;
// Geom::Plane3D<PFP::REAL> pl(VEC3(-1,-0.5,-0.5),VEC3(-1,-0.5,0.5),VEC3(1,0.5,0.5));
// Algo::Volume::Modelisation::sliceConvexVolume<PFP>(myMap, position, d, pl);
VEC3 mid1 = (position[d] + position[myMap.phi1(d)]) / 2.0f;
myMap.cutEdge(d);
position[myMap.phi1(d)] = mid1;
// myMap.check();
d = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d)))));
VEC3 mid = (position[d] + position[myMap.phi1(d)]) / 2.0f;
myMap.cutEdge(d);
position[myMap.phi1(d)] = mid;
// for(unsigned int i = position.begin() ; i != position.end() ; position.next(i))
// position[i] += VEC3(2,0,0);
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))
position[i] += VEC3(0,2,0);
// VEC3 mid1 = (position[d] + position[myMap.phi1(d)]) / 2.0f;
// myMap.cutEdge(d);
// position[myMap.phi1(d)] = mid1;
Algo::Volume::Modelisation::Primitive3D<PFP> prim2(myMap,position);
d = prim2.hexaGrid_topo(2,1,1);
prim2.embedHexaGrid(1,1,1);
// d = myMap.phi1(myMap.phi1(myMap.phi2(myMap.phi1(myMap.phi1(d)))));
// VEC3 mid = (position[d] + position[myMap.phi1(d)]) / 2.0f;
// myMap.cutEdge(d);
// position[myMap.phi1(d)] = mid;
d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d))));
myMap.unsewVolumes(d);
// myMap.splitFace(d,myMap.phi1(myMap.phi1(myMap.phi1(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::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()
{
Utils::GLSLShader::setCurrentOGLVersion(2) ;
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());
m_render_topo = new Algo::Render::GL2::Topo3Render();
m_render_topo->setDartWidth(2.0f);
m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f);
m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.9f);
Utils::GLSLShader::setCurrentOGLVersion(2) ;
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());
m_render_topo = new Algo::Render::GL2::Topo3Render();
m_render_topo->setDartWidth(2.0f);
m_render_topo->setInitialDartsColor(1.0f,1.0f,1.0f);
m_render_topo->updateData<PFP>(myMap, position, 0.9f,0.9f,0.8f);
}
void SimpleGMap3::cb_redraw()
{
glDisable(GL_LIGHTING);
glLineWidth(1.0f);
m_render_topo->drawTopo();
glDisable(GL_LIGHTING);
glLineWidth(1.0f);
m_render_topo->drawTopo();
}
/**********************************************************************************************
......@@ -119,13 +152,13 @@ void SimpleGMap3::cb_redraw()
int main(int argc, char **argv)
{
QApplication app(argc, argv) ;
QApplication app(argc, argv) ;
SimpleGMap3 sqt ;
sqt.setGeometry(0, 0, 1000, 800) ;
sqt.show() ;
SimpleGMap3 sqt ;
sqt.setGeometry(0, 0, 1000, 800) ;
sqt.show() ;
sqt.initGUI() ;
sqt.initGUI() ;
return app.exec() ;
return app.exec() ;
}
......@@ -53,7 +53,6 @@ public:
MAP myMap ;
VertexAttribute<VEC3> position ;
VertexAttribute<VEC3> normal ;
VolumeAttribute<VEC3> volume ;
Algo::Render::GL2::Topo3Render* m_render_topo;
......@@ -64,4 +63,5 @@ public:
void cb_initGL() ;
void cb_redraw() ;
void cb_keyPress(int c);
};
......@@ -32,44 +32,62 @@ SimpleMap3::SimpleMap3()
{
position = myMap.addAttribute<VEC3, VERTEX>("position");
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap, position);
Dart d = primCat.hexaGrid_topo(2,1,1);
primCat.embedHexaGrid(1,1,1);
myMap.closeMap();
Algo::Volume::Modelisation::Primitive3D<PFP> primCat(myMap,position);
Dart d = primCat.hexaGrid_topo(1,1,1);
primCat.embedHexaGrid(1,1,1);
myMap.closeMap();
myMap.check();
unsigned int nb=0;
for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
nb++;
Dart dp = Algo::Surface::Modelisation::createQuadrangularPyramid<PFP>(myMap);
std::cout << "Nb vertices (equals 12) : " << nb << std::endl;
assert(nb==12);
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);
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;
assert(nb==16);
// d = myMap.phi2(myMap.phi1(myMap.phi1(myMap.phi2(d))));
myMap.sewVolumes(d,dd);
// Dart dd = myMap.phi3(d);
myMap.check();
// myMap.unsewVolumes(d);
nb=0;
for(unsigned int i = position.begin(); i!=position.end(); position.next(i))
nb++;
// myMap.check();
std::cout << "Nb vertices after resew (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;
// 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()
m_render_topo = new Algo::Render::GL2::Topo3Render();
m_render_topo->setDartWidth(2.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->setDartWidth(2.0f);
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_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()
{
glDisable(GL_LIGHTING);
glLineWidth(1.0f);
m_render_topo->drawTopo();
m_render_topo_boundary->drawTopo();
m_render_topo->drawTopo();
//m_render_topo_boundary->drawTopo();
//m_render_topo_primal->drawTopo();
}
/**********************************************************************************************
......
......@@ -33,6 +33,7 @@
#include "Geometry/vector_gen.h"
#include "Algo/Render/GL2/topo3Render.h"
#include "Algo/Render/GL2/topo3PrimalRender.h"
#include "Algo/Render/GL2/topoRender.h"
using namespace CGoGN ;
......@@ -58,6 +59,7 @@ public:
Algo::Render::GL2::Topo3Render* m_render_topo;
Algo::Render::GL2::TopoRender* m_render_topo_boundary;
Algo::Render::GL2::Topo3PrimalRender* m_render_topo_primal;
SimpleMap3() ;
......@@ -65,5 +67,6 @@ public:
void cb_initGL() ;
void cb_redraw() ;
void cb_keyPress(int code);
};
......@@ -136,7 +136,7 @@ void MyQT::slider_released()
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) ;
if (filename.empty())
return ;
......@@ -145,8 +145,8 @@ void MyQT::cb_Open()
std::vector<std::string> attrNames ;
size_t pos = filename.rfind("."); // position of "." in filename
std::string extension = filename.substr(pos);
//size_t pos = filename.rfind("."); // position of "." in filename
//std::string extension = filename.substr(pos);
// if(extension == std::string(".off"))
// {
......
......@@ -10,3 +10,6 @@ ADD_SUBDIRECTORY(surface_subdivision)
ADD_SUBDIRECTORY(surface_selection)
ADD_SUBDIRECTORY(surface_deformation)
ADD_SUBDIRECTORY(surface_modelisation)
ADD_SUBDIRECTORY(volume_import)
ADD_SUBDIRECTORY(volume_render)
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(
${PLUGIN_ROOT_DIR}/include
......@@ -25,7 +25,7 @@ file(
SET(
PLUGIN_QOBJECT_FILES
${PLUGIN_ROOT_DIR}/include/importVolume.h
${PLUGIN_ROOT_DIR}/include/volume_import.h
)
include( ${SCHNApps_ROOT_DIR}/Plugins/plugins_cmake.txt )
#ifndef _IMPORTVOLUME_PLUGIN_H_
#define _IMPORTVOLUME_PLUGIN_H_
#include "plugin.h"
#ifndef _VOLUME_IMPORT_PLUGIN_H_
#define _VOLUME_IMPORT_PLUGIN_H_
#include "plugin_processing.h"
namespace CGoGN
{
......@@ -10,32 +9,22 @@ namespace CGoGN
namespace SCHNApps
{
class ImportVolumePlugin : public Plugin
class Volume_Import_Plugin : public PluginProcessing
{
Q_OBJECT
Q_INTERFACES(CGoGN::SCHNApps::Plugin)
public:
ImportVolumePlugin()
{
setProvidesRendering(false);
}
Volume_Import_Plugin()
{}
~ImportVolumePlugin()
~Volume_Import_Plugin()
{}
private:
virtual bool enable();
virtual void disable() {}
virtual void redraw(View *view) {}
virtual void keyPress(View* view, QKeyEvent* event) {}
virtual void keyRelease(View* view, QKeyEvent* event) {}
virtual void mousePress(View* view, QMouseEvent* event) {}
virtual void mouseRelease(View* view, QMouseEvent* event) {}
virtual void mouseMove(View* view, QMouseEvent* event) {}
virtual void wheelEvent(View* view, QWheelEvent* event) {}
public slots:
MapHandlerGen* importFromFile(const QString& fileName);
void importFromFileDialog();
......
#include "importVolume.h"
#include "volume_import.h"
#include "schnapps.h"
#include "mapHandler.h"
#include "Algo/Import/import.h"
......@@ -13,20 +14,20 @@ namespace CGoGN
namespace SCHNApps
{
bool ImportVolumePlugin::enable()
bool Volume_Import_Plugin::enable()
{
importAction = new QAction("import", this);
addMenuAction("Volume;Import", importAction);
m_schnapps->addMenuAction(this, "Volume;Import", importAction);
connect(importAction, SIGNAL(triggered()), this, SLOT(importFromFileDialog()));
return true;
}
MapHandlerGen* ImportVolumePlugin::importFromFile(const QString& fileName)
MapHandlerGen* Volume_Import_Plugin::importFromFile(const QString& fileName)
{
QFileInfo fi(fileName);
if(fi.exists())
{
MapHandlerGen* mhg = m_window->addMap(fi.baseName(), 3);
MapHandlerGen* mhg = m_schnapps->addMap(fi.baseName(), 3);
if(mhg)
{
MapHandler<PFP3>* mh = static_cast<MapHandler<PFP3>*>(mhg);
......@@ -39,9 +40,6 @@ MapHandlerGen* ImportVolumePlugin::importFromFile(const QString& fileName)
VertexAttribute<PFP3::VEC3> position = map->getAttribute<PFP3::VEC3, VERTEX>(attrNames[0]);
mh->registerAttribute(position);
// create position VBO
mh->createVBO(position);
// update corresponding VBO & emit attribute update signal
mh->notifyAttributeModification(position);
......@@ -54,9 +52,9 @@ MapHandlerGen* ImportVolumePlugin::importFromFile(const QString& fileName)
return NULL;
}
void ImportVolumePlugin::importFromFileDialog()
void Volume_Import_Plugin::importFromFileDialog()
{
QStringList fileNames = QFileDialog::getOpenFileNames(m_window, "Import volumes", m_window->getAppPath(), "Volume mesh Files (*.node *.ts *.off *.tet)");
QStringList fileNames = QFileDialog::getOpenFileNames(m_schnapps, "Import volumes", m_schnapps->getAppPath(), "Volume mesh Files (*.msh *.vtu *.nas *.vbgz *.tetmesh *.node *.ts *.off *.tet)");
QStringList::Iterator it = fileNames.begin();
while(it != fileNames.end()) {
importFromFile(*it);
......@@ -65,9 +63,9 @@ void ImportVolumePlugin::importFromFileDialog()
}
#ifndef DEBUG
Q_EXPORT_PLUGIN2(ImportVolumePlugin, ImportVolumePlugin)
Q_EXPORT_PLUGIN2(Volume_Import_Plugin, Volume_Import_Plugin)
#else
Q_EXPORT_PLUGIN2(ImportVolumePluginD, ImportVolumePlugin)
Q_EXPORT_PLUGIN2(Volume_Import_PluginD, Volume_Import_Plugin)
#endif
} // namespace SCHNApps
......
cmake_minimum_required(VERSION 2.8)
SET( PLUGIN_NAME RenderExplod )
SET( PLUGIN_NAME Volume_Render )
SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/renderExplod )
SET( PLUGIN_ROOT_DIR ${SCHNApps_ROOT_DIR}/Plugins/volume_render )
INCLUDE_DIRECTORIES(
${PLUGIN_ROOT_DIR}/include
......@@ -25,8 +25,8 @@ file(
SET(
PLUGIN_QOBJECT_FILES
${PLUGIN_ROOT_DIR}/include/renderExplod.h
${PLUGIN_ROOT_DIR}/include/renderExplodDockTab.h
${PLUGIN_ROOT_DIR}/include/volume_render.h
${PLUGIN_ROOT_DIR}/include/volume_render_dockTab.h
)
include( ${SCHNApps_ROOT_DIR}/Plugins/plugins_cmake.txt )
#ifndef _VOLUME_RENDER_PLUGIN_H_
#define _VOLUME_RENDER_PLUGIN_H_
#include "plugin_interaction.h"
#include "volume_render_dockTab.h"
#include "Algo/Render/GL2/explodeVolumeRender.h"
namespace CGoGN
{
namespace SCHNApps
{
class MapHandlerGen;
struct MapParameters
{
enum FaceShadingStyle
{
FLAT = 0,
SMOOTH = 1
};
MapParameters():
m_renderExplod(NULL),
facesScaleFactor(1.0f),
volumesScaleFactor(1.0f),
renderEdges(false),
renderFaces(true),
faceStyle(FLAT)
{}
Algo::Render::GL2::ExplodeVolumeRender* m_renderExplod;
// VertexAttribute<PFP3::VEC3> positionAttribute;
// VolumeAttribute<PFP3::VEC3> colorAttribute;
float facesScaleFactor;
float volumesScaleFactor;
bool renderEdges;
bool renderFaces;
FaceShadingStyle faceStyle;
// void updateRender();
};
class Volume_Render_Plugin : public Plugin
{
Q_OBJECT
Q_INTERFACES(CGoGN::SCHNApps::Pl