Commit 0996dc3e authored by Thomas's avatar Thomas
Browse files

Merge branch 'master' of cgogn.u-strasbg.fr:~untereiner/CGoGN

parents 7f4059ea 64bd8a46
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(examplesD) project(examplesD)
......
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(examples) project(examples)
......
...@@ -186,10 +186,7 @@ void Clipping::slot_spinBox_GridResolution(int i) ...@@ -186,10 +186,7 @@ void Clipping::slot_spinBox_GridResolution(int i)
void Clipping::slot_pushButton_changePlanesColor() void Clipping::slot_pushButton_changePlanesColor()
{ {
QColor NewColor; QColor NewColor = QColorDialog::getColor();
QColorDialog ColDialog;
NewColor = ColDialog.getColor();
int r, g, b; int r, g, b;
NewColor.getRgb(&r, &g, &b); NewColor.getRgb(&r, &g, &b);
......
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(Tutos) project(Tutos)
......
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(CGoGN) project(CGoGN)
......
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(CGoGNDebug) project(CGoGNDebug)
......
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.8)
project(CGoGNRelease) project(CGoGNRelease)
......
...@@ -25,8 +25,7 @@ ...@@ -25,8 +25,7 @@
#ifndef __IMPLICIT_HIERARCHICAL_MAP__ #ifndef __IMPLICIT_HIERARCHICAL_MAP__
#define __IMPLICIT_HIERARCHICAL_MAP__ #define __IMPLICIT_HIERARCHICAL_MAP__
#include "Topology/map/map2.h" #include "Topology/map/embeddedMap2.h"
#include "Topology/generic/embeddedMap2.h"
namespace CGoGN namespace CGoGN
{ {
...@@ -39,7 +38,7 @@ namespace IHM ...@@ -39,7 +38,7 @@ namespace IHM
template<typename T> class AttributeHandler_IHM ; template<typename T> class AttributeHandler_IHM ;
class ImplicitHierarchicalMap : public EmbeddedMap2<Map2> class ImplicitHierarchicalMap : public EmbeddedMap2
{ {
template<typename T> friend class AttributeHandler_IHM ; template<typename T> friend class AttributeHandler_IHM ;
......
...@@ -253,7 +253,7 @@ inline bool ImplicitHierarchicalMap::foreach_dart_of_cc(Dart d, FunctorType& f, ...@@ -253,7 +253,7 @@ inline bool ImplicitHierarchicalMap::foreach_dart_of_cc(Dart d, FunctorType& f,
inline void ImplicitHierarchicalMap::splitFace(Dart d, Dart e) inline void ImplicitHierarchicalMap::splitFace(Dart d, Dart e)
{ {
EmbeddedMap2<Map2>::splitFace(d, e) ; EmbeddedMap2::splitFace(d, e) ;
if(isOrbitEmbedded(FACE)) if(isOrbitEmbedded(FACE))
{ {
unsigned int cur = m_curLevel ; unsigned int cur = m_curLevel ;
......
...@@ -297,354 +297,354 @@ Dart subdivideVolumeGen(typename PFP::MAP& map, Dart d, typename PFP::TVEC3& pos ...@@ -297,354 +297,354 @@ Dart subdivideVolumeGen(typename PFP::MAP& map, Dart d, typename PFP::TVEC3& pos
std::vector<Dart> newEdges; //save darts from inner edges std::vector<Dart> newEdges; //save darts from inner edges
newEdges.reserve(50); newEdges.reserve(50);
// //Second step : deconnect each corner, close each hole, subdivide each new face into 3 //Second step : deconnect each corner, close each hole, subdivide each new face into 3
// for (std::vector<Dart>::iterator edge = oldEdges.begin(); edge != oldEdges.end(); ++edge) for (std::vector<Dart>::iterator edge = oldEdges.begin(); edge != oldEdges.end(); ++edge)
// { {
// //std::vector<Dart>::iterator edge = oldEdges.begin(); //std::vector<Dart>::iterator edge = oldEdges.begin();
// Dart e = *edge; Dart e = *edge;
//
// Dart f1 = map.phi1(*edge); Dart f1 = map.phi1(*edge);
// //Dart f2 = map.phi2(f1); //Dart f2 = map.phi2(f1);
//
// do do
// { {
// if(map.phi1(map.phi1(map.phi1(e))) != e) if(map.phi1(map.phi1(map.phi1(e))) != e)
// { {
// map.unsewFaces(map.phi1(map.phi1(e))); //remplacer par une boucle qui découd toute la face et non juste une face carre (jusqu'a phi_1(e)) map.unsewFaces(map.phi1(map.phi1(e))); //remplacer par une boucle qui découd toute la face et non juste une face carre (jusqu'a phi_1(e))
// } }
//
// map.unsewFaces(map.phi1(e)); map.unsewFaces(map.phi1(e));
//
//
// e = map.phi2(map.phi_1(e)); e = map.phi2(map.phi_1(e));
// } }
// while(e != *edge); while(e != *edge);
//
// map.closeHole(f1); map.closeHole(f1);
//
// //degree du sommet exterieur //degree du sommet exterieur
// unsigned int cornerDegree = map.Map2::vertexDegree(*edge); unsigned int cornerDegree = map.Map2::vertexDegree(*edge);
//
// //tourner autour du sommet pour connaitre le brin d'un sommet de valence < cornerDegree //tourner autour du sommet pour connaitre le brin d'un sommet de valence < cornerDegree
// bool found = false; bool found = false;
// Dart stop = e; Dart stop = e;
// do do
// { {
//
// if(map.Map2::vertexDegree(map.phi2(map.phi1(e))) < cornerDegree) if(map.Map2::vertexDegree(map.phi2(map.phi1(e))) < cornerDegree)
// { {
// stop = map.phi2(map.phi1(e)); stop = map.phi2(map.phi1(e));
// found = true; found = true;
// } }
//
// e = map.phi2(map.phi_1(e)); e = map.phi2(map.phi_1(e));
// } }
// while(!found && e != *edge); while(!found && e != *edge);
//
// //si il existe un sommet de degre inferieur au degree du coin //si il existe un sommet de degre inferieur au degree du coin
// if(found) if(found)
// { {
// //chercher le brin de faible degree suivant //chercher le brin de faible degree suivant
// bool found2 = false; bool found2 = false;
// Dart dd = map.phi1(stop); Dart dd = map.phi1(stop);
//
// do do
// { {
// if(map.Map2::vertexDegree(dd) < cornerDegree) if(map.Map2::vertexDegree(dd) < cornerDegree)
// found2 = true; found2 = true;
// else else
// dd = map.phi1(dd); dd = map.phi1(dd);
// } }
// while(!found2); while(!found2);
//
// //cas de la pyramide //cas de la pyramide
// if(dd == stop) if(dd == stop)
// { {
// //std::cout << "pyramide" << std::endl; //std::cout << "pyramide" << std::endl;
// map.splitFace(dd, map.phi1(map.phi1(dd))); map.splitFace(dd, map.phi1(map.phi1(dd)));
// } }
// else else
// { {
// map.splitFace(dd, stop); map.splitFace(dd, stop);
//
// //calcul de la taille des faces de chaque cote de stop //calcul de la taille des faces de chaque cote de stop
// if(!( (map.Map2::faceDegree(map.phi_1(stop)) == 3 && map.Map2::faceDegree(map.phi2(map.phi_1(stop))) == 4) || if(!( (map.Map2::faceDegree(map.phi_1(stop)) == 3 && map.Map2::faceDegree(map.phi2(map.phi_1(stop))) == 4) ||
// (map.Map2::faceDegree(map.phi_1(stop)) == 4 && map.Map2::faceDegree(map.phi2(map.phi_1(stop))) == 3) )) (map.Map2::faceDegree(map.phi_1(stop)) == 4 && map.Map2::faceDegree(map.phi2(map.phi_1(stop))) == 3) ))
// { {
// //std::cout << "octaedre ou hexaedre" << std::endl; //std::cout << "octaedre ou hexaedre" << std::endl;
//
// Dart ne = map.phi_1(stop) ; Dart ne = map.phi_1(stop) ;
// map.cutEdge(ne); map.cutEdge(ne);
// position[map.phi1(ne)] = volCenter; position[map.phi1(ne)] = volCenter;
// stop = map.phi2(map.phi1(ne)); stop = map.phi2(map.phi1(ne));
//
// bool finished = false; bool finished = false;
// Dart it = map.phi2(ne); Dart it = map.phi2(ne);
//
// do do
// { {
// //chercher le brin de faible degree suivant //chercher le brin de faible degree suivant
// bool found2 = false; bool found2 = false;
// Dart dd = map.phi1(it); Dart dd = map.phi1(it);
//
// do do
// { {
// if(dd == stop) if(dd == stop)
// finished = true; finished = true;
// else if(map.Map2::vertexDegree(dd) < cornerDegree) else if(map.Map2::vertexDegree(dd) < cornerDegree)
// found2 = true; found2 = true;
// else else
// dd = map.phi1(dd); dd = map.phi1(dd);
// } }
// while(!found2 & !finished); while(!found2 & !finished);
//
// if(found2) if(found2)
// { {
// map.splitFace(it,dd); map.splitFace(it,dd);
// } }
//
// it = map.phi_1(dd); it = map.phi_1(dd);
//
// if(it == stop) if(it == stop)
// finished = true; finished = true;
//
// } }
// while(!finished); while(!finished);
//
// } }
// else else
// { {
// //std::cout << "prisme" << std::endl; //std::cout << "prisme" << std::endl;
// //tester si besoin de fermer f2 (par exemple pas besoin pour hexa... mais pour tet, octa, prisme oui) //tester si besoin de fermer f2 (par exemple pas besoin pour hexa... mais pour tet, octa, prisme oui)
// //map.closeHole(f2); //map.closeHole(f2);
// } }
//
// } }
//
// } }
// //sinon cas du tetraedre //sinon cas du tetraedre
// else else
// { {
// //std::cout << "tetraedre" << std::endl; //std::cout << "tetraedre" << std::endl;
// //tester si besoin de fermer f2 (par exemple pas besoin pour hexa... mais pour tet, octa, prisme oui) //tester si besoin de fermer f2 (par exemple pas besoin pour hexa... mais pour tet, octa, prisme oui)
// //map.closeHole(f2); //map.closeHole(f2);
// } }
//
// } }
//
// //std::cout << "1ere etape finished" << std::endl; //std::cout << "1ere etape finished" << std::endl;
//
// CellMarker mtf(map, FACE); CellMarker mtf(map, FACE);
//
// //Etape 2 //Etape 2
// for (std::vector<std::pair<Dart,Dart> >::iterator edges = subdividedfacesT.begin(); edges != subdividedfacesT.end(); ++edges) for (std::vector<std::pair<Dart,Dart> >::iterator edges = subdividedfacesT.begin(); edges != subdividedfacesT.end(); ++edges)
// { {
// Dart f1 = (*edges).first; Dart f1 = (*edges).first;
// Dart f2 = (*edges).second; Dart f2 = (*edges).second;
//
////Fonction isTetrahedron ?? //Fonction isTetrahedron ??
//// //if(Algo::Modelisation::Tetrahedron::isTetrahedron<PFP>(map,f2)) // //if(Algo::Modelisation::Tetrahedron::isTetrahedron<PFP>(map,f2))
// if( (map.Map2::faceDegree(f2) == 3 && map.Map2::faceDegree(map.phi2(f2)) == 3 && if( (map.Map2::faceDegree(f2) == 3 && map.Map2::faceDegree(map.phi2(f2)) == 3 &&
// map.Map2::faceDegree(map.phi2(map.phi_1(f2))) == 3) && map.Map2::vertexDegree(f2) == 3) map.Map2::faceDegree(map.phi2(map.phi_1(f2))) == 3) && map.Map2::vertexDegree(f2) == 3)
// { //cas du tetrahedre { //cas du tetrahedre
//
// //std::cout << "ajout d'une face" << std::endl; //std::cout << "ajout d'une face" << std::endl;
//
// if(map.phi3(map.phi2(f2)) == map.phi2(f2)) if(map.phi3(map.phi2(f2)) == map.phi2(f2))
// { {
// Dart nf = map.newFace(3); Dart nf = map.newFace(3);
// map.sewVolumes(map.phi2(f2),nf); map.sewVolumes(map.phi2(f2),nf);
// } }
//
// if(map.phi2(map.phi3(map.phi2(f2))) == map.phi3(map.phi2(f2))) if(map.phi2(map.phi3(map.phi2(f2))) == map.phi3(map.phi2(f2)))
// { {
// map.sewFaces(map.phi3(map.phi2(f2)), f1); map.sewFaces(map.phi3(map.phi2(f2)), f1);
// } }
// } }
// else else
// { {
// if(!mtf.isMarked(f1)) if(!mtf.isMarked(f1))
// { {
// mtf.mark(f1); mtf.mark(f1);
//
// map.closeHole(f1); map.closeHole(f1);
//
// if(map.Map2::faceDegree(map.phi2(f2)) == 3) if(map.Map2::faceDegree(map.phi2(f2)) == 3)
// { {
// //std::cout << "ajout d'un tetraedre" << std::endl; //std::cout << "ajout d'un tetraedre" << std::endl;
// Dart x = Algo::Modelisation::trianguleFace<PFP>(map, map.phi2(f1)); Dart x = Algo::Modelisation::trianguleFace<PFP>(map, map.phi2(f1));
// position[x] = volCenter; position[x] = volCenter;
// } }
// else else
// { {
// //std::cout << "ajout d'un prisme" << std::endl; //std::cout << "ajout d'un prisme" << std::endl;
// //Dart x = Algo::Modelisation::extrudeFace<PFP>(map,position,map.phi2(f1),5.0); //Dart x = Algo::Modelisation::extrudeFace<PFP>(map,position,map.phi2(f1),5.0);
// Dart c = Algo::Modelisation::trianguleFace<PFP>(map, map.phi2(f1)); Dart c = Algo::Modelisation::trianguleFace<PFP>(map, map.phi2(f1));
//
// Dart cc = c; Dart cc = c;
// // cut edges // cut edges
// do do
// { {
//
// typename PFP::VEC3 p1 = position[cc] ; typename PFP::VEC3 p1 = position[cc] ;
// typename PFP::VEC3 p2 = position[map.phi1(cc)] ; typename PFP::VEC3 p2 = position[map.phi1(cc)] ;
//
// map.cutEdge(cc); map.cutEdge(cc);
//
// position[map.phi1(cc)] = (p1 + p2) * typename PFP::REAL(0.5) ; position[map.phi1(cc)] = (p1 + p2) * typename PFP::REAL(0.5) ;
//
// cc = map.phi2(map.phi_1(cc)); cc = map.phi2(map.phi_1(cc));
// }while (cc != c); }while (cc != c);
//
// // cut faces // cut faces
// do do
// { {
// Dart d1 = map.phi1(cc); Dart d1 = map.phi1(cc);
// Dart d2 = map.phi_1(cc); Dart d2 = map.phi_1(cc);
// map.splitFace(d1,d2); map.splitFace(d1,d2);
// cc = map.phi2(map.phi_1(cc));//map.Map2::alpha1(cc); cc = map.phi2(map.phi_1(cc));//map.Map2::alpha1(cc);
// }while (cc != c); }while (cc != c);
//
// //merge central faces by removing edges //merge central faces by removing edges
// bool notFinished=true; bool notFinished=true;
// do do
// { {
// Dart d1 = map.Map2::alpha1(cc); Dart d1 = map.Map2::alpha1(cc);
// if (d1 == cc) // last edge is pending edge inside of face if (d1 == cc) // last edge is pending edge inside of face
// notFinished = false; notFinished = false;
// map.deleteFace(cc); map.deleteFace(cc);
// cc = d1; cc = d1;
// } while (notFinished); } while (notFinished);
//
//
// map.closeHole(map.phi1(map.phi1(map.phi2(f1)))); map.closeHole(map.phi1(map.phi1(map.phi2(f1))));
//
// } }
// } }
// } }
//
// } }
//
// //std::cout << "2e etape finished" << std::endl; //std::cout << "2e etape finished" << std::endl;
//
//
// { {
// //Third step : 3-sew internal faces //Third step : 3-sew internal faces
// for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedfacesT.begin(); it != subdividedfacesT.end(); ++it) for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedfacesT.begin(); it != subdividedfacesT.end(); ++it)
// { {
// Dart f1 = (*it).first; Dart f1 = (*it).first;
// Dart f2 = (*it).second; Dart f2 = (*it).second;
//
//
//
// if(map.phi3(map.phi2(f1)) == map.phi2(f1) && map.phi3(map.phi2(f2)) == map.phi2(f2)) if(map.phi3(map.phi2(f1)) == map.phi2(f1) && map.phi3(map.phi2(f2)) == map.phi2(f2))
// { {
// if(map.getEmbedding(VERTEX, map.phi_1(map.phi2(f2))) == map.getEmbedding(VERTEX, map.phi_1(map.phi2(f1)))) if(map.getEmbedding(VERTEX, map.phi_1(map.phi2(f2))) == map.getEmbedding(VERTEX, map.phi_1(map.phi2(f1))))
// { {
// map.Map3::sewVolumes(map.phi2(f2), map.phi2(f1)); map.Map3::sewVolumes(map.phi2(f2), map.phi2(f1));
// } }
// else else
// { {
//
// //id pour toutes les faces interieures //id pour toutes les faces interieures
// map.sewVolumes(map.phi2(f2), map.phi2(f1)); map.sewVolumes(map.phi2(f2), map.phi2(f1));
//
//
// } }
//
// //Fais a la couture !!!!! //Fais a la couture !!!!!
// unsigned int idface = map.getNewFaceId(); unsigned int idface = map.getNewFaceId();
// map.setFaceId(map.phi2(f1),idface, FACE); map.setFaceId(map.phi2(f1),idface, FACE);
// } }
//
//
// //FAIS a la couture !!!!!!! //FAIS a la couture !!!!!!!
// //id pour toutes les aretes exterieurs des faces quadrangulees //id pour toutes les aretes exterieurs des faces quadrangulees