diff --git a/Ridges_3/demo/Ridges_3/README b/Ridges_3/demo/Ridges_3/README index 5220435dbf5..1e18cc24b23 100644 --- a/Ridges_3/demo/Ridges_3/README +++ b/Ridges_3/demo/Ridges_3/README @@ -11,3 +11,4 @@ it displays an OpenGL view of both the mesh and the ridge lines ./introspect-qt.exe ../../examples/Ridges_3/data/ellipe0.003.off ../../examples/Ridges_3/data_ellipe0.003.off.4ogl.txt +./introspect-qt.exe ../../examples/Ridges_3/data/poly2x^2+y^2-0.062500.off ../../examples/Ridges_3/data_poly2x^2+y^2-0.062500.off.4ogl.txt diff --git a/Ridges_3/demo/Ridges_3/SketchSample.C b/Ridges_3/demo/Ridges_3/SketchSample.C index 4b82fdc4fee..e4f4e9de86d 100644 --- a/Ridges_3/demo/Ridges_3/SketchSample.C +++ b/Ridges_3/demo/Ridges_3/SketchSample.C @@ -16,17 +16,17 @@ SketchSample::~SketchSample() { } void SketchSample::buildDisplayList(GLuint surf) { - glNewList(surf, GL_COMPILE); - - glShadeModel(GL_SMOOTH); - //mesh - //glMaterialfv is def in the mesh + + glEnable(GL_LIGHTING); + // glShadeModel(GL_SMOOTH); + glShadeModel(GL_FLAT); + //mesh glMaterialfv is def in the mesh with offset to see the lines z_buffered p_mesh->gl_draw_facets(true); - //ridges, drawn without light glDisable(GL_LIGHTING); + glColor3d(1., 1., 0.); for (DS_iterator it=p_ridge_data->begin();it!=p_ridge_data->end();it++) draw_one_ridge(*it); @@ -108,11 +108,11 @@ void SketchSample::draw_one_ridge(data_line* line) if (line->ridge_type == RH) glColor3f(1.,1.,0.); if (line->ridge_type == RC) glColor3f(1.,0.,0.); - std::list::iterator iter = line->ridge_points.begin(), + std::vector::iterator iter = line->ridge_points.begin(), ite = line->ridge_points.end(); glLineWidth(3 ); - glBegin(GL_LINES); - for (;iter!=ite;iter++) glVertex3d(iter->x(), iter->y(), iter->z()); + glBegin(GL_LINE_STRIP); + for (;iter!=ite;iter++) glVertex3d(iter->x(), iter->y(), iter->z()); glEnd(); } diff --git a/Ridges_3/demo/Ridges_3/SketchSample.h b/Ridges_3/demo/Ridges_3/SketchSample.h index 9030663ab78..801d9aab16e 100644 --- a/Ridges_3/demo/Ridges_3/SketchSample.h +++ b/Ridges_3/demo/Ridges_3/SketchSample.h @@ -17,9 +17,9 @@ enum Ridge_type {NONE=0, BLUE_RIDGE, RED_RIDGE, CREST, BE, BH, BC, RE, RH, RC}; struct data_line{ int ridge_type; double strength, sharpness; - std::list ridge_points; + std::vector ridge_points; data_line(int ridge_type, double strength, double sharpness, - std::list ridge_points): + std::vector ridge_points): ridge_type(ridge_type), strength(strength), sharpness(sharpness), ridge_points(ridge_points) {}; diff --git a/Ridges_3/demo/Ridges_3/enriched_polyhedron.h b/Ridges_3/demo/Ridges_3/enriched_polyhedron.h index 79f1c92f7a7..ec25706db0d 100644 --- a/Ridges_3/demo/Ridges_3/enriched_polyhedron.h +++ b/Ridges_3/demo/Ridges_3/enriched_polyhedron.h @@ -254,9 +254,12 @@ public : // draw edges void gl_draw_edges() { + ::glColor3f(1,0,0); + ::glBegin(GL_LINES); + Halfedge_iterator it; - for(it = edges_begin(); - it != edges_end(); + for(it = this->edges_begin(); + it != this->edges_end(); it++) { Halfedge_handle he = it; @@ -265,7 +268,8 @@ public : ::glVertex3d(p1[0],p1[1],p1[2]); ::glVertex3d(p2[0],p2[1],p2[2]); } - } + ::glEnd(); + } // draw vertices @@ -274,8 +278,8 @@ public : ::glPointSize(5.0f); ::glBegin(GL_POINTS); Point_iterator it; - for(it = points_begin(); - it != points_end(); + for(it = this->points_begin(); + it != this->points_end(); it++) { const Point& p = *it; @@ -291,16 +295,19 @@ public : static GLfloat agray[4] = {1,1,1, 1.0 }; glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, agray); - glPolygonOffset( 1.0, 1.0 ); - glPolygonMode(GL_FRONT, GL_FILL); - glEnable(GL_POLYGON_OFFSET_FILL); + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset( 1.0, 1.0 ); + glPolygonMode(GL_FRONT, GL_FILL); Facet_iterator hFacet; - for(hFacet = facets_begin(); - hFacet != facets_end(); + for(hFacet = this->facets_begin(); + hFacet != this->facets_end(); hFacet++) gl_draw_facet(hFacet,smooth); + glPolygonOffset( 0.0, 0.0 ); + glDisable(GL_POLYGON_OFFSET_FILL); + } void gl_draw_facet(Facet_handle hFacet, @@ -362,8 +369,8 @@ public : ::glBegin(GL_LINES); Facet_iterator hFacet; - for(hFacet = facets_begin(); - hFacet != facets_end(); + for(hFacet = this->facets_begin(); + hFacet != this->facets_end(); hFacet++) { Point p = iso_barycentre(hFacet); @@ -383,8 +390,8 @@ public : { ::glBegin(GL_LINES); Vertex_iterator it; - for(it = vertices_begin(); - it != vertices_end(); + for(it = this->vertices_begin(); + it != this->vertices_end(); it++) { const typename Vertex::Normal_3& normal = it->normal(); @@ -400,11 +407,11 @@ public : // normals (per facet, then per vertex) void compute_normals_per_facet() { - std::for_each(facets_begin(),facets_end(),Facet_normal()); + std::for_each(this->facets_begin(),this->facets_end(),Facet_normal()); } void compute_normals_per_vertex() { - std::for_each(vertices_begin(),vertices_end(),Vertex_normal()); + std::for_each(this->vertices_begin(),this->vertices_end(),Vertex_normal()); } void compute_normals() { @@ -419,7 +426,7 @@ int nb_component() unsigned int nb = 0; tag_facets(0); Facet_handle seed_facet = NULL; - while((seed_facet = get_facet_tag(0)) != NULL) + while((seed_facet = this->get_facet_tag(0)) != NULL) { nb++; tag_component(seed_facet,0,1); @@ -430,8 +437,8 @@ int nb_component() // tag all facets void tag_facets(const int tag) { - for(Facet_iterator pFace = facets_begin(); - pFace != facets_end(); + for(Facet_iterator pFace = this->facets_begin(); + pFace != this->facets_end(); pFace++) pFace->tag(tag); } @@ -467,8 +474,8 @@ void tag_component(Facet_handle pSeedFacet, // tag all halfedges void tag_halfedges(const int tag) { - for(Halfedge_iterator pHalfedge = halfedges_begin(); - pHalfedge != halfedges_end(); + for(Halfedge_iterator pHalfedge = this->halfedges_begin(); + pHalfedge != this->halfedges_end(); pHalfedge++) pHalfedge->tag(tag); } @@ -479,7 +486,7 @@ unsigned int nb_boundaries() unsigned int nb = 0; tag_halfedges(0); Halfedge_handle seed_halfedge = NULL; - while((seed_halfedge = get_border_halfedge_tag(0)) != NULL) + while((seed_halfedge = this->get_border_halfedge_tag(0)) != NULL) { nb++; seed_halfedge->tag(1); @@ -501,21 +508,21 @@ unsigned int nb_boundaries() void subdivide_sqrt3 () { // check for valid polygon mesh - if(size_of_facets() == 0) + if(this->size_of_facets() == 0) return; // subdivision // We use that new vertices/halfedges/facets are appended at the end. - std::size_t nv = size_of_vertices(); - Vertex_iterator last_v = vertices_end(); + std::size_t nv = this->size_of_vertices(); + Vertex_iterator last_v = this->vertices_end(); -- last_v; // the last of the old vertices - Edge_iterator last_e = edges_end(); + Edge_iterator last_e = this->edges_end(); -- last_e; // the last of the old edges - Facet_iterator last_f = facets_end(); + Facet_iterator last_f = this->facets_end(); -- last_f; // the last of the old facets - Facet_iterator f = facets_begin(); // create new centre vertices + Facet_iterator f = this->facets_begin(); // create new centre vertices do { star_facet( f); } while ( f++ != last_f); @@ -527,7 +534,7 @@ void subdivide_sqrt3 () // ++e; // careful, incr. before flip since flip destroys current edge // flip_edge( h); //}; - CGAL_postcondition(is_valid()); + CGAL_postcondition(this->is_valid()); } diff --git a/Ridges_3/demo/Ridges_3/makefile b/Ridges_3/demo/Ridges_3/makefile index cf1be9dbc39..47b72cd7928 100644 --- a/Ridges_3/demo/Ridges_3/makefile +++ b/Ridges_3/demo/Ridges_3/makefile @@ -3,7 +3,7 @@ #---------------------------------------------------------------------# # include platform specific settings -#---------------------------------------------------------------------# +#--------------------------------------------------------------------# # Choose the right include file from the /make directory. include $(CGAL_MAKEFILE) @@ -46,7 +46,7 @@ QTLDFLAGS = \ $(CGAL_QT_LDFLAGS) -lGL -lglut -INTRO_LD_FLAGS=-L$(INTROSPEC_DIR) -lInstrospect +INTRO_LD_FLAGS=-L$(INTROSPEC_DIR) -lIntrospect #---------------------------------------------------------------------# diff --git a/Ridges_3/demo/Ridges_3/visu.C b/Ridges_3/demo/Ridges_3/visu.C index 65560871b3d..61510915a42 100644 --- a/Ridges_3/demo/Ridges_3/visu.C +++ b/Ridges_3/demo/Ridges_3/visu.C @@ -16,6 +16,9 @@ #include #include +#include "jv_writer.h" + + Mesh m_mesh; DS ridge_data; @@ -36,7 +39,7 @@ void clean_DS(DS& L) void read_line(std::ifstream& stream_res, int& ridge_type, double& strength, double& sharpness, - std::list& ridge_points) + std::vector& ridge_points) { const int max_line_size = 100000; char cline[max_line_size]; @@ -74,7 +77,7 @@ void load_data_from_file(DS& l, const char* file_res) { int ridge_type; double strength, sharpness; - std::list ridge_points; + std::vector ridge_points; read_line(stream_res, ridge_type, strength, sharpness, ridge_points); @@ -115,6 +118,7 @@ int main(int argc, char** argv) { load_geom(argc, argv); QApplication app(argc, argv); + glutInit(&argc, argv); if ( !QGLFormat::hasOpenGL() ) { qWarning( "This system has no OpenGL support. Exiting." ); @@ -133,5 +137,45 @@ int main(int argc, char** argv) { main.show(); + //debug visu with a jvx file + std::cout << ridge_data.size() << std::endl; + DS_iterator iter_lines = ridge_data.begin(), iter_end = ridge_data.end(); + + std::ofstream out_jvx("debug.jvx"); + CGAL::Javaview_writer jvw(out_jvx); + jvw.set_title("ridges"); + jvw.write_header(); + +// //first the polysurf +// jvw.set_geometry_name("polysurf"); +// jvw.begin_geometry(); +// polyhedron_javaview_writer(jvw, P); +// jvw.end_geometry(); + + int compt = 0; + + for (;iter_lines!=iter_end;iter_lines++) { + compt++; + // create the name of the ridge + std::ostringstream str; + str << "ridge " << compt; + jvw.set_geometry_name(str.str()); + + //color + if ((*iter_lines)->ridge_type ==BC) jvw.set_color(CGAL::BLUE); + else jvw.set_color(CGAL::RED); + + //lines + jvw.begin_geometry(); + polyline_javaview_writer(jvw, (*iter_lines)->ridge_points.begin(), + (*iter_lines)->ridge_points.end()); + jvw.end_geometry(); + } + + jvw.write_footer(); + + + return app.exec(); + } diff --git a/Ridges_3/examples/Ridges_3/PolyhedralSurf.h b/Ridges_3/examples/Ridges_3/PolyhedralSurf.h index 879e218aa98..77a2097c7c0 100644 --- a/Ridges_3/examples/Ridges_3/PolyhedralSurf.h +++ b/Ridges_3/examples/Ridges_3/PolyhedralSurf.h @@ -17,7 +17,7 @@ //---------------------------------------------------------------- // A redefined items class for the Polyhedron_3 with // a refined vertex class that contains monge data and ring_tag -// a refined facet with a normal vector +// a refined facet with a normal vector + tag is_visited // a refined halfedge with length template < class Refs, class Tag, class Pt, class FGeomTraits > class My_vertex:public CGAL::HalfedgeDS_vertex_base < Refs, Tag, Pt > diff --git a/Ridges_3/examples/Ridges_3/README b/Ridges_3/examples/Ridges_3/README index b31215ef4aa..44dca7bddca 100644 --- a/Ridges_3/examples/Ridges_3/README +++ b/Ridges_3/examples/Ridges_3/README @@ -31,7 +31,7 @@ Note : if the nb of collected points is less than the required min number of - ./blind.exe -f data/ellipe0.003.off -d3 -m3 -a3 + ./blind.exe -f data/ellipe0.003.off -d4 -m4 -a3 -t4 ./blind.exe -f data/poly2x^2+y^2-0.062500.off -d4 -m4 -a0 -t4 ./blind.exe -f data/poly2x^2+y^2-0.062500.off -d4 -m4 -p20 -t4 diff --git a/Ridges_3/examples/Ridges_3/blind.C b/Ridges_3/examples/Ridges_3/blind.C index e1be2cec6a5..b5b02410751 100644 --- a/Ridges_3/examples/Ridges_3/blind.C +++ b/Ridges_3/examples/Ridges_3/blind.C @@ -383,19 +383,19 @@ int main(int argc, char *argv[]) - //UMBOLICS - Umbilic_approximation umbilic_approximation; - std::vector umbilics; - back_insert_iterator > umb_it(umbilics); - umbilic_approximation.compute(P, umb_it, umb_size); - std::vector::iterator iter_umb = umbilics.begin(), - iter_umb_end = umbilics.end(); - // output - std::cout << "nb of umbilics " << umbilics.size() << std::endl; - for (;iter_umb!=iter_umb_end;iter_umb++) - { - std::cout << "umbilic type " << (*iter_umb)->umb_type << std::endl; - } +// //UMBOLICS +// Umbilic_approximation umbilic_approximation; +// std::vector umbilics; +// back_insert_iterator > umb_it(umbilics); +// umbilic_approximation.compute(P, umb_it, umb_size); +// std::vector::iterator iter_umb = umbilics.begin(), +// iter_umb_end = umbilics.end(); +// // output +// std::cout << "nb of umbilics " << umbilics.size() << std::endl; +// for (;iter_umb!=iter_umb_end;iter_umb++) +// { +// std::cout << "umbilic type " << (*iter_umb)->umb_type << std::endl; +// } diff --git a/Ridges_3/include/CGAL/PolyhedralSurf_neighbors.h b/Ridges_3/include/CGAL/PolyhedralSurf_neighbors.h index addbd0438b1..c2a54cfd642 100644 --- a/Ridges_3/include/CGAL/PolyhedralSurf_neighbors.h +++ b/Ridges_3/include/CGAL/PolyhedralSurf_neighbors.h @@ -133,6 +133,7 @@ compute_one_ring(Vertex_handle v, Vector_3 p0p; FT d = OneRingSize; for (; itb != ite; itb++){ + p = (*itb)->point(); p0p = p0 - p; d = CGAL::sqrt(p0p*p0p); diff --git a/Ridges_3/include/CGAL/Ridges.h b/Ridges_3/include/CGAL/Ridges.h index bfb7a445bb6..b1f7f225e26 100644 --- a/Ridges_3/include/CGAL/Ridges.h +++ b/Ridges_3/include/CGAL/Ridges.h @@ -2,7 +2,7 @@ #define _RIDGE_3_H_ #include -#include +#include #include #include "PolyhedralSurf_neighbors.h" #include "Umbilic.h"