From 5201dea35f30b68e88f8a2def8a69b3dbea36306 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 18 Jan 2010 16:45:54 +0000 Subject: [PATCH 002/128] Merge from trunk: | New Revision: 53648 | Author: stayeb | Date: 2010-01-18 10:22:51 +0100 (Mon, 18 Jan 2010) | | Log message: | | Remove useless expensive preconditions. --- Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h | 2 -- Mesh_3/include/CGAL/Mesh_3/Sliver_perturber.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h index 1542f2052a5..74b991e89ea 100644 --- a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h @@ -1193,8 +1193,6 @@ C3T3_helpers:: min_incident_value(const Vertex_handle& vh, const SliverCriterion& criterion) const { - CGAL_precondition(tr_.is_vertex(vh)); - Cell_vector incident_cells; tr_.finite_incident_cells(vh,std::back_inserter(incident_cells)); diff --git a/Mesh_3/include/CGAL/Mesh_3/Sliver_perturber.h b/Mesh_3/include/CGAL/Mesh_3/Sliver_perturber.h index 7e439994dda..b022dc4c897 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Sliver_perturber.h +++ b/Mesh_3/include/CGAL/Mesh_3/Sliver_perturber.h @@ -658,8 +658,6 @@ make_pvertex(const Vertex_handle& vh, const FT& sliver_bound, const typename PVertex::id_type& pv_id) const { - CGAL_precondition(tr_.is_vertex(vh)); - // Make pvertex in all cases PVertex pv(vh,pv_id); pv.set_perturbation(&perturbation_vector_.front()); From 9a3bb95d5c5d08dc3568cd468992642f28c3240c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 18 Jan 2010 16:47:27 +0000 Subject: [PATCH 003/128] Merge from trunk: | New Revision: 53650 | Author: sloriot | Date: 2010-01-18 16:04:21 +0100 (Mon, 18 Jan 2010) | | Log message: | | New demo for CK3 using libQGLviewer | --- .gitattributes | 11 +- .../demo/Circular_kernel_3/CMakeLists.txt | 70 ++-- .../Circular_kernel_3/Circular_kernel_3.cpp | 52 +-- .../Circular_kernel_3/Circular_kernel_3.h | 375 ------------------ .../demo/Circular_kernel_3/README | 6 - .../demo/Circular_kernel_3/Viewer.cpp | 155 ++++++++ .../demo/Circular_kernel_3/Viewer.h | 17 + .../images/arrow_01_down.xpm | 289 -------------- .../images/arrow_01_left.xpm | 290 -------------- .../images/arrow_01_right.xpm | 290 -------------- .../Circular_kernel_3/images/arrow_01_up.xpm | 289 -------------- .../Circular_kernel_3/images/button_axis.gif | Bin 239 -> 0 bytes .../Circular_kernel_3/images/button_light.gif | Bin 500 -> 0 bytes .../Circular_kernel_3/images/button_line.gif | Bin 238 -> 0 bytes .../Circular_kernel_3/images/button_pivot.gif | Bin 452 -> 0 bytes .../Circular_kernel_3/images/button_solid.gif | Bin 323 -> 0 bytes .../Circular_kernel_3/images/button_solid.xpm | 35 -- .../images/button_texture.gif | Bin 343 -> 0 bytes .../Circular_kernel_3/images/button_wire.gif | Bin 255 -> 0 bytes .../Circular_kernel_3/images/button_wire.xpm | 32 -- .../Circular_kernel_3/images/d_solid_b.gif | Bin 1009 -> 0 bytes .../Circular_kernel_3/images/d_solid_b.xpm | 286 ------------- .../Circular_kernel_3/images/d_wire_b.gif | Bin 1008 -> 0 bytes .../Circular_kernel_3/images/d_wire_b.xpm | 286 ------------- .../demo/Circular_kernel_3/images/zoom_in.xpm | 129 ------ .../Circular_kernel_3/images/zoom_out.xpm | 133 ------- .../include/CGAL/IO/Spherical_circle_gl.h | 83 ---- 27 files changed, 221 insertions(+), 2607 deletions(-) delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.h delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/README create mode 100644 Circular_kernel_3/demo/Circular_kernel_3/Viewer.cpp create mode 100644 Circular_kernel_3/demo/Circular_kernel_3/Viewer.h delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_down.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_left.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_right.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_up.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_axis.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_light.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_line.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_pivot.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_texture.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/d_solid_b.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/d_solid_b.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/d_wire_b.gif delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/d_wire_b.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/zoom_in.xpm delete mode 100644 Circular_kernel_3/demo/Circular_kernel_3/images/zoom_out.xpm delete mode 100644 Circular_kernel_3/include/CGAL/IO/Spherical_circle_gl.h diff --git a/.gitattributes b/.gitattributes index 2210175e1fb..b28618c82a2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1091,15 +1091,8 @@ Circular_kernel_2/include/CGAL/global_functions_circular_kernel_2.h -text Circular_kernel_2/test/Circular_kernel_2/test_Circular_kernel_basic.cpp -text Circular_kernel_2/test/Circular_kernel_2/test_Exact_circular_kernel_basic.cpp -text Circular_kernel_3/changes -text -Circular_kernel_3/demo/Circular_kernel_3/images/button_axis.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_light.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_line.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_pivot.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_texture.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/d_solid_b.gif -text svneol=unset#image/gif -Circular_kernel_3/demo/Circular_kernel_3/images/d_wire_b.gif -text svneol=unset#image/gif +Circular_kernel_3/demo/Circular_kernel_3/Viewer.cpp -text +Circular_kernel_3/demo/Circular_kernel_3/Viewer.h -text Circular_kernel_3/doc_tex/Circular_kernel_3/def_circles_extreme_pt.pdf -text Circular_kernel_3/doc_tex/Circular_kernel_3/def_circles_extreme_pt.png -text Circular_kernel_3/doc_tex/Circular_kernel_3/def_meridian.pdf -text diff --git a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt index 94daf3a44bd..4748b784142 100644 --- a/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt +++ b/Circular_kernel_3/demo/Circular_kernel_3/CMakeLists.txt @@ -1,54 +1,42 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. +project (Circular_kernel_3) - -project( Circular_kernel_3_demo ) - -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5) +cmake_minimum_required(VERSION 2.4.5) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) - + if ( COMMAND cmake_policy ) cmake_policy( SET CMP0003 NEW ) endif() -find_package(CGAL COMPONENTS Core Qt3 ) +find_package(CGAL COMPONENTS Qt4) +include(${CGAL_USE_FILE}) -if ( CGAL_FOUND ) +set( QT_USE_QTXML TRUE ) +set( QT_USE_QTMAIN TRUE ) +set( QT_USE_QTSCRIPT TRUE ) +set( QT_USE_QTOPENGL TRUE ) +find_package(Qt4) - include( ${CGAL_USE_FILE} ) - - find_package(Qt3-patched ) - # FindQt3-patched.cmake is FindQt3.cmake patched by CGAL developers, so - # that it can be used together with FindQt4: all its variables are prefixed - # by "QT3_" instead of "QT_". - - if(CGAL_Qt3_FOUND AND QT3_FOUND) - - include( Qt3Macros-patched ) - qt3_automoc( Circular_kernel_3.cpp ) +find_package(OpenGL) +find_package(QGLViewer) - # Make sure the compiler can find generated .moc files - include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - - include_directories( ${QT3_INCLUDE_DIR} ) +if ( CGAL_FOUND AND CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND ) + + include(${QT_USE_FILE}) + + include_directories (${QGLVIEWER_INCLUDE_DIR}) + include_directories (BEFORE ../../include ./ ) + + add_executable ( Circular_kernel_3 Circular_kernel_3.cpp Viewer.cpp ) + + add_to_cached_list( CGAL_EXECUTABLE_TARGETS Alpha_shape_3 ) + + target_link_libraries( Circular_kernel_3 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) + target_link_libraries( Circular_kernel_3 ${QT_LIBRARIES} ${QGLVIEWER_LIBRARIES} ) + target_link_libraries( Circular_kernel_3 ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ) - add_executable (Circular_kernel_3 Circular_kernel_3.cpp) - - add_to_cached_list( CGAL_EXECUTABLE_TARGETS Circular_kernel_3 ) - - - # Link the executable to CGAL and third-party libraries - target_link_libraries(Circular_kernel_3 ${QT3_LIBRARIES} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) - else() - - message(STATUS "NOTICE: This demo requires Qt3 and the CGAL Qt3 library, and will not be compiled.") - - endif() - else() - - message(STATUS "NOTICE: This demo requires the CGAL library, and will not be compiled.") - -endif() + message(STATUS "NOTICE: This demo requires CGAL, the QGLViewer, OpenGL and Qt4, and will not be compiled.") + +endif() diff --git a/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.cpp b/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.cpp index 2e80fe761b0..79d42eb9c74 100644 --- a/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.cpp +++ b/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.cpp @@ -1,40 +1,24 @@ -// Copyright (c) 2008 INRIA Sophia-Antipolis (France). -// All rights reserved. -// -// $URL -// $Id -// -// Author(s) : Monique Teillaud, Sylvain Pion, Pedro Machado, -// Julien Hazebrouck, Damien Leroy +#include "Viewer.h" +#include -// Partially supported by the IST Programme of the EU as a -// STREP (FET Open) Project under Contract No IST-006413 -// (ACS -- Algorithms for Complex Shapes) +int main(int argc, char** argv) +{ + // Read command lines arguments. + QApplication application(argc,argv); -#include + // Instantiate the viewer. + Viewer viewer; -#include "Circular_kernel_3.moc" +#if QT_VERSION < 0x040000 + // Set the viewer as the application main widget. + application.setMainWidget(&viewer); +#else + viewer.setWindowTitle("Intersection points of randomly generated circles."); +#endif -int main (int argc, char** argv) { - QApplication app(argc, argv); - MyWindow *windows = new MyWindow(1100, 1100); + // Make the viewer window visible on screen. + viewer.show(); - Sphere_3 laSphere(Point_3(0.,0.,0.), 1.5*1.5); - Plane_3 plan; - plan = Plane_3(Point_3(1., -1., 1.), Point_3(1., 1., 0.), Point_3(1., -1., -1.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - plan = Plane_3(Point_3(-1., 1.2, 1.), Point_3( 1., 1.2, -1.), Point_3( 1., 1.2, 1.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - plan = Plane_3(Point_3(-1., -1., 1.), Point_3( 1., -1., 1.), Point_3( 1., -1., -1.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - plan = Plane_3(Point_3(-1., 1., 0.), Point_3( 1., -1., 1.), Point_3( 1., -1., -1.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - plan = Plane_3(Point_3(-1., -1., 1.), Point_3(-1., -1., 0.), Point_3(-1., 1., -1.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - plan = Plane_3(Point_3( 1., 0., 0.), Point_3(-1., 1., 0.), Point_3(-1., -1., 0.)); - windows->add_cercle(Circle_3(laSphere, plan), 100); - - app.setMainWidget(windows); - windows->show(); - return app.exec(); + // Run main loop. + return application.exec(); } diff --git a/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.h b/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.h deleted file mode 100644 index 58c6f82efa2..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/Circular_kernel_3.h +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright (c) 2008 INRIA Sophia-Antipolis (France). -// All rights reserved. -// -// $URL -// $Id -// -// Author(s) : Monique Teillaud, Sylvain Pion, Pedro Machado, -// Julien Hazebrouck, Damien Leroy - -// Partially supported by the IST Programme of the EU as a -// STREP (FET Open) Project under Contract No IST-006413 -// (ACS -- Algorithms for Complex Shapes) - -#include -#include -#include - -// INCLUDES DE QT -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// INCLUDES DES IMAGES - -#include "images/button_solid.xpm" -#include "images/button_wire.xpm" -#include "images/arrow_01_down.xpm" -#include "images/arrow_01_up.xpm" -#include "images/arrow_01_left.xpm" -#include "images/arrow_01_right.xpm" -#include "images/zoom_in.xpm" -#include "images/zoom_out.xpm" - -#include -#include -#include -//#include // Header File For sleeping. -#include - -// INCLUDES D'OPENGL -//#include // Header File For The GLUT Library -#include // Header File For The OpenGL32 Library -#include // Header File For The GLu32 Library - -#include -#include -#include -#include -#include -#include - -// DEFINITION DES TYPES -typedef double NT; -typedef CGAL::Cartesian Linear_k1; -typedef CGAL::Algebraic_kernel_for_spheres_2_3 Algebraic_k1; -typedef CGAL::Spherical_kernel_3 SK; -typedef SK::Plane_3 Plane_3; -typedef SK::Point_3 Point_3; -typedef SK::Sphere_3 Sphere_3; -typedef SK::Circle_3 Circle_3; - -class MyGLDrawer : public QGLWidget { - - Q_OBJECT - - public: - - MyGLDrawer (QWidget* parent, const char* name) - : QGLWidget(parent, name), showContour(false) { - this->x = 0.f; - this->y = 0.f; - this->z = -6.f; - this->rx = 0.f; - this->ry = 0.f; - this->rz = 0.f; - this->list_cercle = 0; - } - - void paintGL () { - //std::cout << "MyGLDrawer.paintGL();" << std::endl; - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer - glLoadIdentity(); // Reset The View - glTranslatef(this->x, this->y, this->z); - glRotatef(this->rx, 1.0f, 0.0f, 0.0f); - glRotatef(this->ry, 0.0f, 1.0f, 0.0f); - glRotatef(this->rz, 0.0f, 0.0f, 1.0f); - glCallList(this->list_cercle); - this->swapBuffers(); - } - - void initializeGL () { - glClearColor(1.0f, 1.0f, 1.0f, 0.0f); // This Will Clear The Background Color To Black - glClearDepth(1.0); // Enables Clearing Of The Depth Buffer - glDepthFunc(GL_LESS); // The Type Of Depth Test To Do - glEnable(GL_DEPTH_TEST); // Enables Depth Testing - glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); // Reset The Projection Matrix - glMatrixMode(GL_MODELVIEW); - - // creation de la liste openGL - if (this->list_cercle != 0) glDeleteLists(this->list_cercle, 1); - this->list_cercle = glGenLists(1); - //On cree une liste dans laquelle on met l'objet 3ds - //On cree une liste dans laquelle on met l'objet 3ds - glNewList(this->list_cercle, GL_COMPILE); - for (std::size_t i = 0; i < this->cercles.size(); i++) { - CGAL::dessiner_spherical_circle(this->cercles[i].first, this->cercles[i].second); - } - glEndList(); - - } - - void resizeGL (int w, int h) { - glViewport(0, 0, w, h); // Reset The Current Viewport And Perspective Transformation - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluPerspective(45.0f, (GLfloat) w / (GLfloat) w, 0.1f, 100.0f); - glMatrixMode(GL_MODELVIEW); - } - - inline void add_cercle (const Circle_3& c, int precision) { - this->cercles.push_back(std::pair(c, precision)); - } - - public slots: - - void wire_display () { - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - this->paintGL(); - } - - void surface_display () { - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - this->paintGL(); - } - - void translate(float x, float y, float z){ - this->x = x; - this->y = y; - this->z = z; - } - - void rotate(float rx, float ry, float rz){ - this->rx = rx; - this->ry = ry; - this->rz = rz; - } - - inline void show_contour () {this->showContour = true; paintGL();} - inline void hide_contour () {this->showContour = false; paintGL();} - - private: - float x, y, z, rx, ry, rz; - int list_cercle; - bool showContour; - std::vector > cercles; - -}; - - -class MyWindow : public QMainWindow { - Q_OBJECT - - public: - - MyWindow (int w, int h) { - //initialization of coordonnate of camera - this->x = 0.f; - this->y = 0.f; - this->z = -6.f; - this->rx = 0.f; - this->ry = 0.f; - this->rz = 0.f; - - this->resize(w, h); - wGL = new MyGLDrawer(this, "Demo Circle 3D"); - this->setCentralWidget(wGL); - this->setCaption("Demo Circle 3D"); - //File Menu - QPopupMenu* file = new QPopupMenu(this); - file->insertItem("&Quit", qApp, SLOT(closeAllWindows()),''); - //Display Menu - QPopupMenu * affichage = new QPopupMenu(this); - affichage->insertItem("&Wire Mode",this,SLOT(mode_wire()), 'r'); - affichage->insertItem("&Surface Mode",this,SLOT(mode_surface()),'t'); - affichage->insertItem("Show &Border",this,SLOT(show_contour()),'f'); - affichage->insertItem("&Hide Border",this,SLOT(hide_contour()),'g'); - //Move Menu - QPopupMenu * move = new QPopupMenu(this); - move->insertItem("Rotate &Left",this,SLOT(rotate_left()), 4116); - move->insertItem("Rotate &Right",this,SLOT(rotate_right()), 4114); - move->insertItem("Rotate Z Left",this,SLOT(rotate_tonneau_left()),'q'); - move->insertItem("Rotate Z Right",this,SLOT(rotate_tonneau_right()), 'e'); - move->insertItem("Rotate &Up",this,SLOT(rotate_up()),4115); - move->insertItem("Rotate &Down",this,SLOT(rotate_down()), 4117); - move->insertItem("Zoom &In",this,SLOT(zoom_in()), 4118); - move->insertItem("Zoom &Out",this,SLOT(zoom_out()), 4119); - //Menu bar - this->menuBar()->insertItem("&File", file); - this->menuBar()->insertItem("&Display", affichage); - this->menuBar()->insertItem("&Move", move); - //tool bar - this->layers_toolbar = new QToolBar("Tools", this, - QMainWindow::Top, TRUE, "Tools"); - //buttons in tool bar - this->show_wire_button = - new QToolButton(QPixmap((const char**)::button_wire_xpm), - "Wire Mode", - 0, - this, - SLOT(mode_wire()), - this->layers_toolbar, - "Wire Mode"); - this->show_wire_button->setToggleButton(true); - this->show_surface_button = - new QToolButton(QPixmap((const char**)::button_solid_xpm), - "Surface Mode", - 0, - this, - SLOT(mode_surface()), - this->layers_toolbar, - "Mode Surface"); - this->show_surface_button->setToggleButton(true); - this->show_surface_button->toggle(); - this->layers_toolbar->addSeparator(); - this->rotate_left_button = - new QToolButton(QPixmap((const char**)::arrow_01_left_xpm), - "Rotate Left", - 0, - this, - SLOT(rotate_left()), - this->layers_toolbar, - "Rotate Left"); - this->rotate_right_button = - new QToolButton(QPixmap((const char**)::arrow_01_right_xpm), - "Rotate Right", - 0, - this, - SLOT(rotate_right()), - layers_toolbar, - "Rotate Right"); - - this->rotate_up_button = - new QToolButton(QPixmap((const char**)::arrow_01_up_xpm), - "Rotate Up", - 0, - this, - SLOT(rotate_up()), - this->layers_toolbar, - "Rotate UP"); - this->rotate_down_button = - new QToolButton(QPixmap((const char**)::arrow_01_down_xpm), - "Rotate Down", - 0, - this, - SLOT(rotate_down()), - this->layers_toolbar, - "Rotate Down"); - this->zoom_in_button = - new QToolButton(QPixmap((const char**)::zoom_in_xpm), - "Zoom In", - 0, - this, - SLOT(zoom_in()), - this->layers_toolbar, - "Zoom In"); - this->zoom_out_button = - new QToolButton(QPixmap((const char**)::zoom_out_xpm), - "Zoom Out", - 0, - this, - SLOT(zoom_out()), - this->layers_toolbar, - "Zoom Out"); - } - - protected: - - void keyPressEvent (QKeyEvent* /*qke*/) { - //std::cout << "Key ascii<" << qke->ascii() << "> key<" << qke->key() << ">" << std::endl; - } - - public slots: - - inline void show_contour() {this->wGL->show_contour();} - inline void hide_contour() {this->wGL->hide_contour();} - - void mode_wire () { - std::cout << "Mode Wire" << std::endl; - this->show_wire_button->setOn(true); - this->show_surface_button->setOn(false); - this->wGL->wire_display(); - } - - void mode_surface () { - std::cout << "Mode Surface" << std::endl; - this->show_wire_button->setOn(false); - this->show_surface_button->setOn(true); - this->wGL->surface_display(); - } - - inline void add_cercle (const Circle_3& p, int i) { - this->wGL->add_cercle(p,i); - } - - void rotate_tonneau_right () { - //std::cout << "Rotation en tonneau a droite" << std::endl; - this->rz -= 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void rotate_tonneau_left () { - //std::cout << "Rotation en tonneau a gauche" << std::endl; - this->rz += 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void rotate_right(){ - //std::cout << "Rotation a droite" << std::endl; - this->ry += 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void rotate_left(){ - //std::cout << "Rotation a gauche" << std::endl; - this->ry -= 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void rotate_up(){ - //std::cout << "Rotation vers le haut" << std::endl; - this->rx -= 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void rotate_down(){ - //std::cout << "Rotation vers le bas" << std::endl; - this->rx += 1.f; - this->wGL->rotate(this->rx, this->ry, this->rz); - this->wGL->paintGL(); - } - void zoom_in(){ - //std::cout << "Augmentation du zoom" << std::endl; - this->z += 0.1f; - this->wGL->translate(this->x, this->y, this->z); - this->wGL->paintGL(); - } - void zoom_out(){ - //std::cout << "Diminution du zoom" << std::endl; - this->z -= 0.1f; - this->wGL->translate(this->x, this->y, this->z); - this->wGL->paintGL(); - } - - private: - MyGLDrawer* wGL; - QToolBar* layers_toolbar; - QToolButton* show_wire_button; - QToolButton* show_surface_button; - QToolButton* rotate_right_button; - QToolButton* rotate_left_button; - QToolButton* rotate_up_button; - QToolButton* rotate_down_button; - QToolButton* zoom_in_button; - QToolButton* zoom_out_button; - float x, y, z, rx, ry, rz; //coordinate of camera - -}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/README b/Circular_kernel_3/demo/Circular_kernel_3/README deleted file mode 100644 index c5ef2b79c34..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/README +++ /dev/null @@ -1,6 +0,0 @@ -To compile this demo you need to have an OpenGL library, like: -freeglut-2.4.0 -You have to set the option: --I{your OpenGL folder}/freeglut-2.4.0/include (to compile) [The include files] --L{your OpenGL folder}/freeglut-2.4.0/src/.libs/ (to link) [The lib files] - diff --git a/Circular_kernel_3/demo/Circular_kernel_3/Viewer.cpp b/Circular_kernel_3/demo/Circular_kernel_3/Viewer.cpp new file mode 100644 index 00000000000..0bcab40685c --- /dev/null +++ b/Circular_kernel_3/demo/Circular_kernel_3/Viewer.cpp @@ -0,0 +1,155 @@ +#include "Viewer.h" +#include +#include +#include +#include + + +template +void Viewer::draw_circle_on_unit_sphere(const typename CGAL::Point_3& center) const { + const typename Kernel::Point_3 origin(0,0,0); + const typename Kernel::Plane_3 plane(center, center-origin); + typename Kernel::Vector_3 base1=plane.base1(); + typename Kernel::Vector_3 base2=plane.base2(); + base1=base1/CGAL::sqrt(base1.squared_length()); + base2=base2/CGAL::sqrt(base2.squared_length()); + const double radius=CGAL::sqrt( CGAL::to_double( 1 - CGAL::squared_distance(origin,center) ) ); + const double nb_pt_per_circle=100; + const double step=2 * CGAL_PI / nb_pt_per_circle; + ::glDisable(GL_LIGHTING); + ::glBegin(GL_LINE_LOOP); + for (double theta = 0; theta < 2 * CGAL_PI ; theta += step) { + const typename Kernel::Point_3 point=center + ( radius*cos(theta)*base1 + radius*sin(theta)*base2 ); + ::glVertex3f( point.x(),point.y(),point.z() ); + } + ::glEnd(); + ::glEnable(GL_LIGHTING); +} + +void Viewer::draw() +{ + const int sphere_res=30; + + //draw central sphere + ::glPushMatrix(); + ::glColor3f(1,1,1); + ::gluSphere(qsphere,0.999,sphere_res,sphere_res); + ::glCallList(dl_nb); + ::glCallList(dl_nb+1); + ::glPopMatrix(); +} + +void Viewer::init() +{ + // Restore previous viewer state. + restoreStateFromFile(); + + //init quadric to store sphere. + qsphere=gluNewQuadric(); + gluQuadricOrientation(qsphere,GLU_OUTSIDE); + + //code for antialiasing + ::glEnable(GL_BLEND); + ::glEnable(GL_LINE_SMOOTH); + ::glEnable(GL_POINT_SMOOTH); + ::glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); + ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + + //set intersection point size + ::glPointSize(5); + + //random generator of points within a sphere + typedef CGAL::Creator_uniform_3 Creator; + CGAL::Random_points_in_sphere_3 gen; + + const unsigned nb_circles=20; + + //vector to store input points + std::vector points; + points.reserve(nb_circles); + + //disable lighting before drawing segments and points + ::glEnable(GL_LIGHTING); + + //init call lists + dl_nb=::glGenLists(2); + + //store circles in a display list + ::glNewList(dl_nb,GL_COMPILE); + ::glColor3f(1,0,0); + + for (unsigned i=0;i intersections; + naive_compute_intersection_points(points,std::back_inserter(intersections)); + + ::glNewList(dl_nb+1,GL_COMPILE); + ::glColor3f(0,1,0); + //draw points as small spheres + for (std::vector::const_iterator it=intersections.begin();it!=intersections.end();++it){ + glPushMatrix(); + glTranslatef(it->x(),it->y(),it->z()); + gluSphere(qsphere,0.005,10,10); + glPopMatrix(); + } + ::glEndList(); + + //lighting + ::glEnable(GL_LIGHT0); + ::glEnable(GL_LIGHTING); + float lpos[4] = { -.2f, .2f, .9797958971f, 0.0f }; + ::glLightfv(GL_LIGHT0,GL_POSITION,lpos); + ::glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.0f); + + ::glEnable(GL_NORMALIZE); + ::glShadeModel(GL_SMOOTH); +} + + +template +void Viewer::naive_compute_intersection_points(const std::vector& points,Output_iterator out) const { + typedef CGAL::Exact_spherical_kernel_3 SK; + SK::Sphere_3 sphere(SK::Point_3(0,0,0),1); + + //converter point to exact SK point type + CGAL::Cartesian_converter to_exact; + std::vector circles; + + //create circles from points: need to use a converter to change floating points coordinates into an exact NT. + for (std::vector::const_iterator it=points.begin();it!=points.end();++it){ + const SK::Point_3 center=to_exact(*it); + circles.push_back( SK::Circle_3(sphere,SK::Plane_3(center,center-CGAL::ORIGIN) ) ); + } + + + //Look for intersection points among pair of circles: use a naive and quadratic way + for (std::vector::const_iterator it_f=circles.begin();it_f!=--circles.end();++it_f){ + std::vector::const_iterator it_s=it_f; + ++it_s; + for (;it_s!=circles.end();++it_s){ + std::vector intersections; + //ensure_circles are different + CGAL_precondition(*it_s!=*it_f); + CGAL::intersection(*it_f,*it_s,std::back_inserter(intersections)); + if (!intersections.empty()){ + for (std::vector ::const_iterator it_pt=intersections.begin();it_pt!=intersections.end();++it_pt){ + const std::pair* pt= + CGAL::object_cast< std::pair > (&(*it_pt)); + assert(pt!=NULL); + *out++=EPIC::Point_3( CGAL::to_double(pt->first.x()), + CGAL::to_double(pt->first.y()), + CGAL::to_double(pt->first.z()) + ); + } + } + } + } +} diff --git a/Circular_kernel_3/demo/Circular_kernel_3/Viewer.h b/Circular_kernel_3/demo/Circular_kernel_3/Viewer.h new file mode 100644 index 00000000000..66a8e711002 --- /dev/null +++ b/Circular_kernel_3/demo/Circular_kernel_3/Viewer.h @@ -0,0 +1,17 @@ +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel EPIC; + +class Viewer : public QGLViewer +{ + GLUquadricObj *qsphere; + GLuint dl_nb; +protected : + virtual void draw(); + virtual void init(); + template + void draw_circle_on_unit_sphere(const typename CGAL::Point_3&) const; + template + void naive_compute_intersection_points(const std::vector&,Output_iterator) const; +}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_down.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_down.xpm deleted file mode 100644 index 77b762bb25d..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_down.xpm +++ /dev/null @@ -1,289 +0,0 @@ -/* XPM */ -static const char * arrow_01_down_xpm[] = { -"30 29 257 2", -" c None", -". c #000000", -"+ c #0C0C0C", -"@ c #008000", -"# c #808000", -"$ c #000080", -"% c #800080", -"& c #008080", -"* c #BFBFBF", -"= c #0C0C0C", -"- c #A4C8F0", -"; c #550000", -"> c #AA0000", -", c #D50000", -"' c #002B00", -") c #552B00", -"! c #802B00", -"~ c #AA2B00", -"{ c #D52B00", -"] c #FF2B00", -"^ c #005500", -"/ c #555500", -"( c #805500", -"_ c #AA5500", -": c #D55500", -"< c #FF5500", -"[ c #558000", -"} c #AA8000", -"| c #D58000", -"1 c #FF8000", -"2 c #00AA00", -"3 c #55AA00", -"4 c #80AA00", -"5 c #AAAA00", -"6 c #D5AA00", -"7 c #FFAA00", -"8 c #00D500", -"9 c #55D500", -"0 c #80D500", -"a c #AAD500", -"b c #D5D500", -"c c #FFD500", -"d c #55FF00", -"e c #80FF00", -"f c #AAFF00", -"g c #D5FF00", -"h c #000055", -"i c #550055", -"j c #800055", -"k c #AA0055", -"l c #D50055", -"m c #FF0055", -"n c #002B55", -"o c #552B55", -"p c #802B55", -"q c #AA2B55", -"r c #D52B55", -"s c #FF2B55", -"t c #005555", -"u c #555555", -"v c #805555", -"w c #AA5555", -"x c #D55555", -"y c #FF5555", -"z c #008055", -"A c #558055", -"B c #808055", -"C c #AA8055", -"D c #D58055", -"E c #FF8055", -"F c #00AA55", -"G c #55AA55", -"H c #80AA55", -"I c #AAAA55", -"J c #D5AA55", -"K c #FFAA55", -"L c #00D555", -"M c #55D555", -"N c #80D555", -"O c #AAD555", -"P c #D5D555", -"Q c #FFD555", -"R c #00FF55", -"S c #55FF55", -"T c #80FF55", -"U c #AAFF55", -"V c #D5FF55", -"W c #FFFF55", -"X c #550080", -"Y c #AA0080", -"Z c #D50080", -"` c #FF0080", -" . c #002B80", -".. c #552B80", -"+. c #802B80", -"@. c #AA2B80", -"#. c #D52B80", -"$. c #FF2B80", -"%. c #005580", -"&. c #555580", -"*. c #805580", -"=. c #AA5580", -"-. c #D55580", -";. c #FF5580", -">. c #558080", -",. c #AA8080", -"'. c #D58080", -"). c #FF8080", -"!. c #00AA80", -"~. c #55AA80", -"{. c #80AA80", -"]. c #AAAA80", -"^. c #D5AA80", -"/. c #FFAA80", -"(. c #00D580", -"_. c #55D580", -":. c #80D580", -"<. c #AAD580", -"[. c #D5D580", -"}. c #FFD580", -"|. c #00FF80", -"1. c #55FF80", -"2. c #80FF80", -"3. c #AAFF80", -"4. c #D5FF80", -"5. c #FFFF80", -"6. c #0000AA", -"7. c #5500AA", -"8. c #8000AA", -"9. c #AA00AA", -"0. c #D500AA", -"a. c #FF00AA", -"b. c #002BAA", -"c. c #552BAA", -"d. c #802BAA", -"e. c #AA2BAA", -"f. c #D52BAA", -"g. c #FF2BAA", -"h. c #0055AA", -"i. c #5555AA", -"j. c #8055AA", -"k. c #AA55AA", -"l. c #D555AA", -"m. c #FF55AA", -"n. c #0080AA", -"o. c #5580AA", -"p. c #8080AA", -"q. c #AA80AA", -"r. c #D580AA", -"s. c #FF80AA", -"t. c #00AAAA", -"u. c #55AAAA", -"v. c #80AAAA", -"w. c #AAAAAA", -"x. c #D5AAAA", -"y. c #FFAAAA", -"z. c #00D5AA", -"A. c #55D5AA", -"B. c #80D5AA", -"C. c #AAD5AA", -"D. c #D5D5AA", -"E. c #FF8020", -"F. c #00FFAA", -"G. c #55FFAA", -"H. c #80FFAA", -"I. c #AAFFAA", -"J. c #D5FFAA", -"K. c #FFFFAA", -"L. c #0000D5", -"M. c #5500D5", -"N. c #8000D5", -"O. c #AA00D5", -"P. c #D500D5", -"Q. c #FF00D5", -"R. c #002BD5", -"S. c #552BD5", -"T. c #802BD5", -"U. c #AA2BD5", -"V. c #D52BD5", -"W. c #FF2BD5", -"X. c #0055D5", -"Y. c #5555D5", -"Z. c #8055D5", -"`. c #AA55D5", -" + c #D555D5", -".+ c #FF55D5", -"++ c #0080D5", -"@+ c #5580D5", -"#+ c #8080D5", -"$+ c #AA80D5", -"%+ c #D580D5", -"&+ c #FF80D5", -"*+ c #00AAD5", -"=+ c #55AAD5", -"-+ c #80AAD5", -";+ c #AAAAD5", -">+ c #D5AAD5", -",+ c #FFAAD5", -"'+ c #00D5D5", -")+ c #55D5D5", -"!+ c #80D5D5", -"~+ c #AAD5D5", -"{+ c #D5D5D5", -"]+ c #FFD5D5", -"^+ c #00FFD5", -"/+ c #55FFD5", -"(+ c #80FFD5", -"_+ c #AAFFD5", -":+ c #D5FFD5", -"<+ c #FFFFD5", -"[+ c #5500FF", -"}+ c #8000FF", -"|+ c #AA00FF", -"1+ c #D500FF", -"2+ c #002BFF", -"3+ c #552BFF", -"4+ c #802BFF", -"5+ c #AA2BFF", -"6+ c #D52BFF", -"7+ c #FF2BFF", -"8+ c #0055FF", -"9+ c #5555FF", -"0+ c #8055FF", -"a+ c #AA55FF", -"b+ c #D555FF", -"c+ c #FF55FF", -"d+ c #0080FF", -"e+ c #5580FF", -"f+ c #8080FF", -"g+ c #AA80FF", -"h+ c #D580FF", -"i+ c #FF80FF", -"j+ c #00AAFF", -"k+ c #55AAFF", -"l+ c #80AAFF", -"m+ c #AAAAFF", -"n+ c #D5AAFF", -"o+ c #FFAAFF", -"p+ c #00D5FF", -"q+ c #55D5FF", -"r+ c #80D5FF", -"s+ c #AAD5FF", -"t+ c #D5D5FF", -"u+ c #FFD5FF", -"v+ c #55FFFF", -"w+ c #80FFFF", -"x+ c #AAFFFF", -"y+ c #FFFBF0", -"z+ c #A0A0A4", -"A+ c #808080", -"B+ c #FF0000", -"C+ c #00FF00", -"D+ c #FFFF00", -"E+ c #0000FF", -"F+ c #FF00FF", -"G+ c #00FFFF", -"H+ c #FFFFFF", -" ", -" . . . . . . . . . . . ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . . . . . . . . H+H+H+H+H+H+H+H+H+H+H+. . . . . . . . . ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . H+H+H+H+. ", -" . H+H+. ", -" . . ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_left.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_left.xpm deleted file mode 100644 index 7c1600ef486..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_left.xpm +++ /dev/null @@ -1,290 +0,0 @@ -/* XPM */ -static const char * arrow_01_left_xpm[] = { -"29 30 257 2", -" c None", -". c #000000", -"+ c #0C0C0C", -"@ c #008000", -"# c #808000", -"$ c #000080", -"% c #800080", -"& c #008080", -"* c #BFBFBF", -"= c #0C0C0C", -"- c #A4C8F0", -"; c #550000", -"> c #AA0000", -", c #D50000", -"' c #002B00", -") c #552B00", -"! c #802B00", -"~ c #AA2B00", -"{ c #D52B00", -"] c #FF2B00", -"^ c #005500", -"/ c #555500", -"( c #805500", -"_ c #AA5500", -": c #D55500", -"< c #FF5500", -"[ c #558000", -"} c #AA8000", -"| c #D58000", -"1 c #FF8000", -"2 c #00AA00", -"3 c #55AA00", -"4 c #80AA00", -"5 c #AAAA00", -"6 c #D5AA00", -"7 c #FFAA00", -"8 c #00D500", -"9 c #55D500", -"0 c #80D500", -"a c #AAD500", -"b c #D5D500", -"c c #FFD500", -"d c #55FF00", -"e c #80FF00", -"f c #AAFF00", -"g c #D5FF00", -"h c #000055", -"i c #550055", -"j c #800055", -"k c #AA0055", -"l c #D50055", -"m c #FF0055", -"n c #002B55", -"o c #552B55", -"p c #802B55", -"q c #AA2B55", -"r c #D52B55", -"s c #FF2B55", -"t c #005555", -"u c #555555", -"v c #805555", -"w c #AA5555", -"x c #D55555", -"y c #FF5555", -"z c #008055", -"A c #558055", -"B c #808055", -"C c #AA8055", -"D c #D58055", -"E c #FF8055", -"F c #00AA55", -"G c #55AA55", -"H c #80AA55", -"I c #AAAA55", -"J c #D5AA55", -"K c #FFAA55", -"L c #00D555", -"M c #55D555", -"N c #80D555", -"O c #AAD555", -"P c #D5D555", -"Q c #FFD555", -"R c #00FF55", -"S c #55FF55", -"T c #80FF55", -"U c #AAFF55", -"V c #D5FF55", -"W c #FFFF55", -"X c #550080", -"Y c #AA0080", -"Z c #D50080", -"` c #FF0080", -" . c #002B80", -".. c #552B80", -"+. c #802B80", -"@. c #AA2B80", -"#. c #D52B80", -"$. c #FF2B80", -"%. c #005580", -"&. c #555580", -"*. c #805580", -"=. c #AA5580", -"-. c #D55580", -";. c #FF5580", -">. c #558080", -",. c #AA8080", -"'. c #D58080", -"). c #FF8080", -"!. c #00AA80", -"~. c #55AA80", -"{. c #80AA80", -"]. c #AAAA80", -"^. c #D5AA80", -"/. c #FFAA80", -"(. c #00D580", -"_. c #55D580", -":. c #80D580", -"<. c #AAD580", -"[. c #D5D580", -"}. c #FFD580", -"|. c #00FF80", -"1. c #55FF80", -"2. c #80FF80", -"3. c #AAFF80", -"4. c #D5FF80", -"5. c #FFFF80", -"6. c #0000AA", -"7. c #5500AA", -"8. c #8000AA", -"9. c #AA00AA", -"0. c #D500AA", -"a. c #FF00AA", -"b. c #002BAA", -"c. c #552BAA", -"d. c #802BAA", -"e. c #AA2BAA", -"f. c #D52BAA", -"g. c #FF2BAA", -"h. c #0055AA", -"i. c #5555AA", -"j. c #8055AA", -"k. c #AA55AA", -"l. c #D555AA", -"m. c #FF55AA", -"n. c #0080AA", -"o. c #5580AA", -"p. c #8080AA", -"q. c #AA80AA", -"r. c #D580AA", -"s. c #FF80AA", -"t. c #00AAAA", -"u. c #55AAAA", -"v. c #80AAAA", -"w. c #AAAAAA", -"x. c #D5AAAA", -"y. c #FFAAAA", -"z. c #00D5AA", -"A. c #55D5AA", -"B. c #80D5AA", -"C. c #AAD5AA", -"D. c #D5D5AA", -"E. c #FF8020", -"F. c #00FFAA", -"G. c #55FFAA", -"H. c #80FFAA", -"I. c #AAFFAA", -"J. c #D5FFAA", -"K. c #FFFFAA", -"L. c #0000D5", -"M. c #5500D5", -"N. c #8000D5", -"O. c #AA00D5", -"P. c #D500D5", -"Q. c #FF00D5", -"R. c #002BD5", -"S. c #552BD5", -"T. c #802BD5", -"U. c #AA2BD5", -"V. c #D52BD5", -"W. c #FF2BD5", -"X. c #0055D5", -"Y. c #5555D5", -"Z. c #8055D5", -"`. c #AA55D5", -" + c #D555D5", -".+ c #FF55D5", -"++ c #0080D5", -"@+ c #5580D5", -"#+ c #8080D5", -"$+ c #AA80D5", -"%+ c #D580D5", -"&+ c #FF80D5", -"*+ c #00AAD5", -"=+ c #55AAD5", -"-+ c #80AAD5", -";+ c #AAAAD5", -">+ c #D5AAD5", -",+ c #FFAAD5", -"'+ c #00D5D5", -")+ c #55D5D5", -"!+ c #80D5D5", -"~+ c #AAD5D5", -"{+ c #D5D5D5", -"]+ c #FFD5D5", -"^+ c #00FFD5", -"/+ c #55FFD5", -"(+ c #80FFD5", -"_+ c #AAFFD5", -":+ c #D5FFD5", -"<+ c #FFFFD5", -"[+ c #5500FF", -"}+ c #8000FF", -"|+ c #AA00FF", -"1+ c #D500FF", -"2+ c #002BFF", -"3+ c #552BFF", -"4+ c #802BFF", -"5+ c #AA2BFF", -"6+ c #D52BFF", -"7+ c #FF2BFF", -"8+ c #0055FF", -"9+ c #5555FF", -"0+ c #8055FF", -"a+ c #AA55FF", -"b+ c #D555FF", -"c+ c #FF55FF", -"d+ c #0080FF", -"e+ c #5580FF", -"f+ c #8080FF", -"g+ c #AA80FF", -"h+ c #D580FF", -"i+ c #FF80FF", -"j+ c #00AAFF", -"k+ c #55AAFF", -"l+ c #80AAFF", -"m+ c #AAAAFF", -"n+ c #D5AAFF", -"o+ c #FFAAFF", -"p+ c #00D5FF", -"q+ c #55D5FF", -"r+ c #80D5FF", -"s+ c #AAD5FF", -"t+ c #D5D5FF", -"u+ c #FFD5FF", -"v+ c #55FFFF", -"w+ c #80FFFF", -"x+ c #AAFFFF", -"y+ c #FFFBF0", -"z+ c #A0A0A4", -"A+ c #808080", -"B+ c #FF0000", -"C+ c #00FF00", -"D+ c #FFFF00", -"E+ c #0000FF", -"F+ c #FF00FF", -"G+ c #00FFFF", -"H+ c #FFFFFF", -" ", -" . . ", -" . H+. ", -" . H+H+. ", -" . H+H+H+. ", -" . H+H+H+H+. ", -" . H+H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+. . . . . . . . . . . . ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+. . . . . . . . . . . . ", -" . H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . H+H+H+H+H+. ", -" . H+H+H+H+. ", -" . H+H+H+. ", -" . H+H+. ", -" . H+. ", -" . . ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_right.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_right.xpm deleted file mode 100644 index 0f0f25e395f..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_right.xpm +++ /dev/null @@ -1,290 +0,0 @@ -/* XPM */ -static const char * arrow_01_right_xpm[] = { -"29 30 257 2", -" c None", -". c #000000", -"+ c #0C0C0C", -"@ c #008000", -"# c #808000", -"$ c #000080", -"% c #800080", -"& c #008080", -"* c #BFBFBF", -"= c #0C0C0C", -"- c #A4C8F0", -"; c #550000", -"> c #AA0000", -", c #D50000", -"' c #002B00", -") c #552B00", -"! c #802B00", -"~ c #AA2B00", -"{ c #D52B00", -"] c #FF2B00", -"^ c #005500", -"/ c #555500", -"( c #805500", -"_ c #AA5500", -": c #D55500", -"< c #FF5500", -"[ c #558000", -"} c #AA8000", -"| c #D58000", -"1 c #FF8000", -"2 c #00AA00", -"3 c #55AA00", -"4 c #80AA00", -"5 c #AAAA00", -"6 c #D5AA00", -"7 c #FFAA00", -"8 c #00D500", -"9 c #55D500", -"0 c #80D500", -"a c #AAD500", -"b c #D5D500", -"c c #FFD500", -"d c #55FF00", -"e c #80FF00", -"f c #AAFF00", -"g c #D5FF00", -"h c #000055", -"i c #550055", -"j c #800055", -"k c #AA0055", -"l c #D50055", -"m c #FF0055", -"n c #002B55", -"o c #552B55", -"p c #802B55", -"q c #AA2B55", -"r c #D52B55", -"s c #FF2B55", -"t c #005555", -"u c #555555", -"v c #805555", -"w c #AA5555", -"x c #D55555", -"y c #FF5555", -"z c #008055", -"A c #558055", -"B c #808055", -"C c #AA8055", -"D c #D58055", -"E c #FF8055", -"F c #00AA55", -"G c #55AA55", -"H c #80AA55", -"I c #AAAA55", -"J c #D5AA55", -"K c #FFAA55", -"L c #00D555", -"M c #55D555", -"N c #80D555", -"O c #AAD555", -"P c #D5D555", -"Q c #FFD555", -"R c #00FF55", -"S c #55FF55", -"T c #80FF55", -"U c #AAFF55", -"V c #D5FF55", -"W c #FFFF55", -"X c #550080", -"Y c #AA0080", -"Z c #D50080", -"` c #FF0080", -" . c #002B80", -".. c #552B80", -"+. c #802B80", -"@. c #AA2B80", -"#. c #D52B80", -"$. c #FF2B80", -"%. c #005580", -"&. c #555580", -"*. c #805580", -"=. c #AA5580", -"-. c #D55580", -";. c #FF5580", -">. c #558080", -",. c #AA8080", -"'. c #D58080", -"). c #FF8080", -"!. c #00AA80", -"~. c #55AA80", -"{. c #80AA80", -"]. c #AAAA80", -"^. c #D5AA80", -"/. c #FFAA80", -"(. c #00D580", -"_. c #55D580", -":. c #80D580", -"<. c #AAD580", -"[. c #D5D580", -"}. c #FFD580", -"|. c #00FF80", -"1. c #55FF80", -"2. c #80FF80", -"3. c #AAFF80", -"4. c #D5FF80", -"5. c #FFFF80", -"6. c #0000AA", -"7. c #5500AA", -"8. c #8000AA", -"9. c #AA00AA", -"0. c #D500AA", -"a. c #FF00AA", -"b. c #002BAA", -"c. c #552BAA", -"d. c #802BAA", -"e. c #AA2BAA", -"f. c #D52BAA", -"g. c #FF2BAA", -"h. c #0055AA", -"i. c #5555AA", -"j. c #8055AA", -"k. c #AA55AA", -"l. c #D555AA", -"m. c #FF55AA", -"n. c #0080AA", -"o. c #5580AA", -"p. c #8080AA", -"q. c #AA80AA", -"r. c #D580AA", -"s. c #FF80AA", -"t. c #00AAAA", -"u. c #55AAAA", -"v. c #80AAAA", -"w. c #AAAAAA", -"x. c #D5AAAA", -"y. c #FFAAAA", -"z. c #00D5AA", -"A. c #55D5AA", -"B. c #80D5AA", -"C. c #AAD5AA", -"D. c #D5D5AA", -"E. c #FF8020", -"F. c #00FFAA", -"G. c #55FFAA", -"H. c #80FFAA", -"I. c #AAFFAA", -"J. c #D5FFAA", -"K. c #FFFFAA", -"L. c #0000D5", -"M. c #5500D5", -"N. c #8000D5", -"O. c #AA00D5", -"P. c #D500D5", -"Q. c #FF00D5", -"R. c #002BD5", -"S. c #552BD5", -"T. c #802BD5", -"U. c #AA2BD5", -"V. c #D52BD5", -"W. c #FF2BD5", -"X. c #0055D5", -"Y. c #5555D5", -"Z. c #8055D5", -"`. c #AA55D5", -" + c #D555D5", -".+ c #FF55D5", -"++ c #0080D5", -"@+ c #5580D5", -"#+ c #8080D5", -"$+ c #AA80D5", -"%+ c #D580D5", -"&+ c #FF80D5", -"*+ c #00AAD5", -"=+ c #55AAD5", -"-+ c #80AAD5", -";+ c #AAAAD5", -">+ c #D5AAD5", -",+ c #FFAAD5", -"'+ c #00D5D5", -")+ c #55D5D5", -"!+ c #80D5D5", -"~+ c #AAD5D5", -"{+ c #D5D5D5", -"]+ c #FFD5D5", -"^+ c #00FFD5", -"/+ c #55FFD5", -"(+ c #80FFD5", -"_+ c #AAFFD5", -":+ c #D5FFD5", -"<+ c #FFFFD5", -"[+ c #5500FF", -"}+ c #8000FF", -"|+ c #AA00FF", -"1+ c #D500FF", -"2+ c #002BFF", -"3+ c #552BFF", -"4+ c #802BFF", -"5+ c #AA2BFF", -"6+ c #D52BFF", -"7+ c #FF2BFF", -"8+ c #0055FF", -"9+ c #5555FF", -"0+ c #8055FF", -"a+ c #AA55FF", -"b+ c #D555FF", -"c+ c #FF55FF", -"d+ c #0080FF", -"e+ c #5580FF", -"f+ c #8080FF", -"g+ c #AA80FF", -"h+ c #D580FF", -"i+ c #FF80FF", -"j+ c #00AAFF", -"k+ c #55AAFF", -"l+ c #80AAFF", -"m+ c #AAAAFF", -"n+ c #D5AAFF", -"o+ c #FFAAFF", -"p+ c #00D5FF", -"q+ c #55D5FF", -"r+ c #80D5FF", -"s+ c #AAD5FF", -"t+ c #D5D5FF", -"u+ c #FFD5FF", -"v+ c #55FFFF", -"w+ c #80FFFF", -"x+ c #AAFFFF", -"y+ c #FFFBF0", -"z+ c #A0A0A4", -"A+ c #808080", -"B+ c #FF0000", -"C+ c #00FF00", -"D+ c #FFFF00", -"E+ c #0000FF", -"F+ c #FF00FF", -"G+ c #00FFFF", -"H+ c #FFFFFF", -" ", -" . . ", -" . H+. ", -" . H+H+. ", -" . H+H+H+. ", -" . H+H+H+H+. ", -" . H+H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . . . . . . . . . . . . H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . . . . . . . . . . . . H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . H+H+H+H+H+. ", -" . H+H+H+H+. ", -" . H+H+H+. ", -" . H+H+. ", -" . H+. ", -" . . ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_up.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_up.xpm deleted file mode 100644 index 502bcb33a87..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/arrow_01_up.xpm +++ /dev/null @@ -1,289 +0,0 @@ -/* XPM */ -static const char * arrow_01_up_xpm[] = { -"30 29 257 2", -" c None", -". c #000000", -"+ c #0C0C0C", -"@ c #008000", -"# c #808000", -"$ c #000080", -"% c #800080", -"& c #008080", -"* c #BFBFBF", -"= c #0C0C0C", -"- c #A4C8F0", -"; c #550000", -"> c #AA0000", -", c #D50000", -"' c #002B00", -") c #552B00", -"! c #802B00", -"~ c #AA2B00", -"{ c #D52B00", -"] c #FF2B00", -"^ c #005500", -"/ c #555500", -"( c #805500", -"_ c #AA5500", -": c #D55500", -"< c #FF5500", -"[ c #558000", -"} c #AA8000", -"| c #D58000", -"1 c #FF8000", -"2 c #00AA00", -"3 c #55AA00", -"4 c #80AA00", -"5 c #AAAA00", -"6 c #D5AA00", -"7 c #FFAA00", -"8 c #00D500", -"9 c #55D500", -"0 c #80D500", -"a c #AAD500", -"b c #D5D500", -"c c #FFD500", -"d c #55FF00", -"e c #80FF00", -"f c #AAFF00", -"g c #D5FF00", -"h c #000055", -"i c #550055", -"j c #800055", -"k c #AA0055", -"l c #D50055", -"m c #FF0055", -"n c #002B55", -"o c #552B55", -"p c #802B55", -"q c #AA2B55", -"r c #D52B55", -"s c #FF2B55", -"t c #005555", -"u c #555555", -"v c #805555", -"w c #AA5555", -"x c #D55555", -"y c #FF5555", -"z c #008055", -"A c #558055", -"B c #808055", -"C c #AA8055", -"D c #D58055", -"E c #FF8055", -"F c #00AA55", -"G c #55AA55", -"H c #80AA55", -"I c #AAAA55", -"J c #D5AA55", -"K c #FFAA55", -"L c #00D555", -"M c #55D555", -"N c #80D555", -"O c #AAD555", -"P c #D5D555", -"Q c #FFD555", -"R c #00FF55", -"S c #55FF55", -"T c #80FF55", -"U c #AAFF55", -"V c #D5FF55", -"W c #FFFF55", -"X c #550080", -"Y c #AA0080", -"Z c #D50080", -"` c #FF0080", -" . c #002B80", -".. c #552B80", -"+. c #802B80", -"@. c #AA2B80", -"#. c #D52B80", -"$. c #FF2B80", -"%. c #005580", -"&. c #555580", -"*. c #805580", -"=. c #AA5580", -"-. c #D55580", -";. c #FF5580", -">. c #558080", -",. c #AA8080", -"'. c #D58080", -"). c #FF8080", -"!. c #00AA80", -"~. c #55AA80", -"{. c #80AA80", -"]. c #AAAA80", -"^. c #D5AA80", -"/. c #FFAA80", -"(. c #00D580", -"_. c #55D580", -":. c #80D580", -"<. c #AAD580", -"[. c #D5D580", -"}. c #FFD580", -"|. c #00FF80", -"1. c #55FF80", -"2. c #80FF80", -"3. c #AAFF80", -"4. c #D5FF80", -"5. c #FFFF80", -"6. c #0000AA", -"7. c #5500AA", -"8. c #8000AA", -"9. c #AA00AA", -"0. c #D500AA", -"a. c #FF00AA", -"b. c #002BAA", -"c. c #552BAA", -"d. c #802BAA", -"e. c #AA2BAA", -"f. c #D52BAA", -"g. c #FF2BAA", -"h. c #0055AA", -"i. c #5555AA", -"j. c #8055AA", -"k. c #AA55AA", -"l. c #D555AA", -"m. c #FF55AA", -"n. c #0080AA", -"o. c #5580AA", -"p. c #8080AA", -"q. c #AA80AA", -"r. c #D580AA", -"s. c #FF80AA", -"t. c #00AAAA", -"u. c #55AAAA", -"v. c #80AAAA", -"w. c #AAAAAA", -"x. c #D5AAAA", -"y. c #FFAAAA", -"z. c #00D5AA", -"A. c #55D5AA", -"B. c #80D5AA", -"C. c #AAD5AA", -"D. c #D5D5AA", -"E. c #FF8020", -"F. c #00FFAA", -"G. c #55FFAA", -"H. c #80FFAA", -"I. c #AAFFAA", -"J. c #D5FFAA", -"K. c #FFFFAA", -"L. c #0000D5", -"M. c #5500D5", -"N. c #8000D5", -"O. c #AA00D5", -"P. c #D500D5", -"Q. c #FF00D5", -"R. c #002BD5", -"S. c #552BD5", -"T. c #802BD5", -"U. c #AA2BD5", -"V. c #D52BD5", -"W. c #FF2BD5", -"X. c #0055D5", -"Y. c #5555D5", -"Z. c #8055D5", -"`. c #AA55D5", -" + c #D555D5", -".+ c #FF55D5", -"++ c #0080D5", -"@+ c #5580D5", -"#+ c #8080D5", -"$+ c #AA80D5", -"%+ c #D580D5", -"&+ c #FF80D5", -"*+ c #00AAD5", -"=+ c #55AAD5", -"-+ c #80AAD5", -";+ c #AAAAD5", -">+ c #D5AAD5", -",+ c #FFAAD5", -"'+ c #00D5D5", -")+ c #55D5D5", -"!+ c #80D5D5", -"~+ c #AAD5D5", -"{+ c #D5D5D5", -"]+ c #FFD5D5", -"^+ c #00FFD5", -"/+ c #55FFD5", -"(+ c #80FFD5", -"_+ c #AAFFD5", -":+ c #D5FFD5", -"<+ c #FFFFD5", -"[+ c #5500FF", -"}+ c #8000FF", -"|+ c #AA00FF", -"1+ c #D500FF", -"2+ c #002BFF", -"3+ c #552BFF", -"4+ c #802BFF", -"5+ c #AA2BFF", -"6+ c #D52BFF", -"7+ c #FF2BFF", -"8+ c #0055FF", -"9+ c #5555FF", -"0+ c #8055FF", -"a+ c #AA55FF", -"b+ c #D555FF", -"c+ c #FF55FF", -"d+ c #0080FF", -"e+ c #5580FF", -"f+ c #8080FF", -"g+ c #AA80FF", -"h+ c #D580FF", -"i+ c #FF80FF", -"j+ c #00AAFF", -"k+ c #55AAFF", -"l+ c #80AAFF", -"m+ c #AAAAFF", -"n+ c #D5AAFF", -"o+ c #FFAAFF", -"p+ c #00D5FF", -"q+ c #55D5FF", -"r+ c #80D5FF", -"s+ c #AAD5FF", -"t+ c #D5D5FF", -"u+ c #FFD5FF", -"v+ c #55FFFF", -"w+ c #80FFFF", -"x+ c #AAFFFF", -"y+ c #FFFBF0", -"z+ c #A0A0A4", -"A+ c #808080", -"B+ c #FF0000", -"C+ c #00FF00", -"D+ c #FFFF00", -"E+ c #0000FF", -"F+ c #FF00FF", -"G+ c #00FFFF", -"H+ c #FFFFFF", -" ", -" . . ", -" . H+H+. ", -" . H+H+H+H+. ", -" . H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+H+. ", -" . . . . . . . . H+H+H+H+H+H+H+H+H+H+H+. . . . . . . . . ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . H+H+H+H+H+H+H+H+H+H+H+. ", -" . . . . . . . . . . . ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_axis.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/button_axis.gif deleted file mode 100644 index 5240d5951242ae95c25f04e64436042e5a94ba17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmZ?wbhEHb)L_tH*v!Ddp^~lWxt5`cL1L4{wae%JGcYV=VEFRo%bh!SE?l@UWy+L- zf&vC4paWuq^fIt4nQ+2$_1=g@lXoBI`qcY)(u9n(WjR~7efZ7GWOGt3*Sli*`@Lt* ziyh%fUVd?7=pLO&-_ypTYkdMkPfeXNH^=*AB(KD|-pF1&j=AEv;?sEe)CCP1fe!qP=}K6ND#CW(k}=!*}+a3G?QQGtB5(ny@^7>dO8# k<*V0~%;(_Z-nMjzPI=Ax#yq% zzyJRK`TOtRfB!#s`}wuU@9zOs?mKqx`TJ}4pC7w?Z|S-Xj?Tf6u8 zxuvVtZr!!_{qO(Z|Nl2MF$@X~x_0^8|NsBLeED+c&YcSvE=-v+rJ$gIfl5FJWDdwL z3~c`oOepZsk?QwQ%$$;AHBs$Sv6b!A6*rccp4QFV{Xl<)wp{Y*^ZiwGUDdBE`7b`W zF7C4Y#JGEr8du7KE31@>xfuoc%F7iM zPn<8#DY)2ohO7LlHYV1!Vr(0tmgcXjVG?d(IX0S4JbSp3f9AOGn>gWy8NxE{wp!-ONym#8c89_@Wr|U}|onkpT#CMkY p>8D$EZWia16jpEIlJ(lM;^N{!w+R{tx2(LpJYca`tPl%>H2^&f%%}hW diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_line.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/button_line.gif deleted file mode 100644 index cd41d35841fac6726c960d809c4e58e5a073e675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmVB$$g+$!F%iv(-g=909=t&x^0jgK)E^PNzGG2>!lZUMb46sAdW{aV# zSPC+fN8k>rfHIg5C(YDTP@_KV_Sq#yWMUszjpKZ+XZQMQ`NqlYdu%?|*ZE$58*gQH zd4frWh>HMl5QbTRW^IF#kbR6wmy>mbS&*Arc#n35q7Fk2OjM^3sh@$Z6|bae7qmvR oWx2Pzyt=dZ}3@xP$ z#i>AD0?*GIKEG`F{Ib*Y%UIKQC@5f{ z0O)}9g8ah3_R?W;frpM%zlY+hDLGaXwXPIf#V%cOV~Oc$-Mrlo^k-WBy{E6VYRGPU}bxeE!i3dr+vi%F=q1?vbZ z3n=i(ic3h!O!A%Ls-vVRzkH>n6zAHgb`KqXIo=g)>{1-kyGr-C>#*=}uROxR$#ueg zy(_cm-0d7H(u@lhGOaqwDa~;8+Nr&&GS9deU%rZ|{B*Kp^6MYY*MI;0@&5%&kMRdz yM>F=zDkhr?d=4A@`ZjYzlhe_zZVBV8J0~_KPZ8D#>X7l=wB+Pujp;0m4AubD1fQ1x diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.gif deleted file mode 100644 index 9ed779017c92a8772ca2ef43ddb590c2f2a158d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmZ?wbhEHb)L_tH*v!CCTv!|w7}V0%a_#cDFJHdgxpU{jg$q-rOerWRV88}+K!PB> z3@kqiPI#`~8zDAn_i^`+y~;@wGSZgiY~A+Zv|35isrb1ZdmN@O?_1~o=Bm|>lN(Ox z$mx1U6?^>+T*RPR`g*h9hK4tN-fLKywq*xM=4G$mvf1WuthdnHKer{O|9&ZyP?=}N zS=XN4z}(cF*U_J$SH@h?TQ#Aht7lrP`)o!7ZQWYOZK%VtepHD_7zik!tu zHZ9LuxNZB6b-VYhnYVxCp2!^&cO5-=;)vIV=0g+W8Yh=u*n9a(siaBorHtEKB<}SU zKN9zRGPTWL<<;GHnjZ}0zkKz$_CxOb@0Y*+8O+cqU}!wp%pt55bHae7k%>*oYmUdp MMMt}(l^7VT0bnbZApigX diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.xpm deleted file mode 100644 index e90a356b889..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/button_solid.xpm +++ /dev/null @@ -1,35 +0,0 @@ -/* XPM */ -static const char * button_solid_xpm[] = { -"28 27 5 1", -" c None", -". c #000000", -"+ c #848684", -"@ c #737173", -"# c #525152", -" .... ", -" ....++++.. ", -" ....++++++++++... ", -" ....+++++++++++++++++... ", -"..++++++++++++++++++++++++..", -".@..+++++++++++++++++++++...", -".@@@..++++++++++++++++...##.", -".@@@@@..+++++++++++...#####.", -".@@@@@@@..++++++...########.", -".@@@@@@@@@......###########.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -".@@@@@@@@@@@.##############.", -"..@@@@@@@@@@.#############..", -" ..@@@@@@@@.##########... ", -" ..@@@@@@.#######... ", -" ..@@@@.####... ", -" ..@@.#... ", -" .... "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_texture.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/button_texture.gif deleted file mode 100644 index a59cda75c3b79e86cfacac45e64e5f15297644f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jT~*Nk%w1VJHA70J8u97%vJ4b_IBidXR{UjFyI&f07jo1D1}S zbD$KW1EZX#0t5t_ld7w%myoczvZ1xTw|=?7v8YPD#$lbW!os_$#?K4O(!*-J&%M#p z%*1!s*xK9GskGPG;IYl2B$$g+$!F%iv(-g=909=t&x^0jgK)0xsKqmFE#eJbgturtU_A~o zxJ1^L52(V(a2BOS=Bx>vG9g=Ew%Vmdq12tJjP1$VW^&NNgLCJ(F?fw1>Z5!NaB+ly za)NY!YKMx8VulM=IX;hwj9zDzNqq{ES9M@Sca~|5f?I)EZG&c`S9vk6r+Y)107$c( zpB1=Yf2BVglx`utp|%&sC>F}g!Oq2H(9F`)KLP{=+S}aS-rwLE0RjW%=I7|?>gy8; F06U2BciaE~ diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.xpm deleted file mode 100644 index 6353c2df19d..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/button_wire.xpm +++ /dev/null @@ -1,32 +0,0 @@ -/* XPM */ -static const char * button_wire_xpm[] = { -"28 27 2 1", -" c None", -". c #000000", -" .... ", -" .... . .. ", -" .... . ... ", -" .... . ... ", -".. . ..", -". .. . ...", -". .. . ... .", -". .. . ... .", -". .. ... .", -". ....... .", -". . . .", -". . . .", -". . . .", -". . . .", -". . . .", -". . .. .", -". ... .. .", -". .... .. .", -". ... . .. .", -". ... . .. .", -". . . . .", -".. . ..", -" .. . ... ", -" .. . ... ", -" .. . ... ", -" .. . ... ", -" .... "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/d_solid_b.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/d_solid_b.gif deleted file mode 100644 index 9ffe46d875aef519c15aef1e8a7b60cafd73c99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1009 zcmZ?wbh9u|RAEqJ_|52S|KHNma_rc#d-v`E*`r`I z1cqJ+{Qj_D!IFlChX25H{-5DLm;%y377*wF1sOnjfq~;1gEWVX$A$$5o7ovn0uF3g zc(`3a+3v{lfP; c #C6C6C6", -", c #DEDEDE", -"' c #FFFFFF", -") c #FFFFFF", -"! c #FFFFFF", -"~ c #FFFFFF", -"{ c #FFFFFF", -"] c #FFFFFF", -"^ c #FFFFFF", -"/ c #FFFFFF", -"( c #FFFFFF", -"_ c #FFFFFF", -": c #FFFFFF", -"< c #FFFFFF", -"[ c #FFFFFF", -"} c #FFFFFF", -"| c #FFFFFF", -"1 c #FFFFFF", -"2 c #FFFFFF", -"3 c #FFFFFF", -"4 c #FFFFFF", -"5 c #FFFFFF", -"6 c #FFFFFF", -"7 c #FFFFFF", -"8 c #FFFFFF", -"9 c #FFFFFF", -"0 c #FFFFFF", -"a c #FFFFFF", -"b c #FFFFFF", -"c c #FFFFFF", -"d c #FFFFFF", -"e c #FFFFFF", -"f c #FFFFFF", -"g c #FFFFFF", -"h c #FFFFFF", -"i c #FFFFFF", -"j c #FFFFFF", -"k c #FFFFFF", -"l c #FFFFFF", -"m c #FFFFFF", -"n c #FFFFFF", -"o c #FFFFFF", -"p c #FFFFFF", -"q c #FFFFFF", -"r c #FFFFFF", -"s c #FFFFFF", -"t c #FFFFFF", -"u c #FFFFFF", -"v c #FFFFFF", -"w c #FFFFFF", -"x c #FFFFFF", -"y c #FFFFFF", -"z c #FFFFFF", -"A c #FFFFFF", -"B c #FFFFFF", -"C c #FFFFFF", -"D c #FFFFFF", -"E c #FFFFFF", -"F c #FFFFFF", -"G c #FFFFFF", -"H c #FFFFFF", -"I c #FFFFFF", -"J c #FFFFFF", -"K c #FFFFFF", -"L c #FFFFFF", -"M c #FFFFFF", -"N c #FFFFFF", -"O c #FFFFFF", -"P c #FFFFFF", -"Q c #FFFFFF", -"R c #FFFFFF", -"S c #FFFFFF", -"T c #FFFFFF", -"U c #FFFFFF", -"V c #FFFFFF", -"W c #FFFFFF", -"X c #FFFFFF", -"Y c #FFFFFF", -"Z c #FFFFFF", -"` c #FFFFFF", -" . c #FFFFFF", -".. c #FFFFFF", -"+. c #FFFFFF", -"@. c #FFFFFF", -"#. c #FFFFFF", -"$. c #FFFFFF", -"%. c #FFFFFF", -"&. c #FFFFFF", -"*. c #FFFFFF", -"=. c #FFFFFF", -"-. c #FFFFFF", -";. c #FFFFFF", -">. c #FFFFFF", -",. c #FFFFFF", -"'. c #FFFFFF", -"). c #FFFFFF", -"!. c #FFFFFF", -"~. c #FFFFFF", -"{. c #FFFFFF", -"]. c #FFFFFF", -"^. c #FFFFFF", -"/. c #FFFFFF", -"(. c #FFFFFF", -"_. c #FFFFFF", -":. c #FFFFFF", -"<. c #FFFFFF", -"[. c #FFFFFF", -"}. c #FFFFFF", -"|. c #FFFFFF", -"1. c #FFFFFF", -"2. c #FFFFFF", -"3. c #FFFFFF", -"4. c #FFFFFF", -"5. c #FFFFFF", -"6. c #FFFFFF", -"7. c #FFFFFF", -"8. c #FFFFFF", -"9. c #FFFFFF", -"0. c #FFFFFF", -"a. c #FFFFFF", -"b. c #FFFFFF", -"c. c #FFFFFF", -"d. c #FFFFFF", -"e. c #FFFFFF", -"f. c #FFFFFF", -"g. c #FFFFFF", -"h. c #FFFFFF", -"i. c #FFFFFF", -"j. c #FFFFFF", -"k. c #FFFFFF", -"l. c #FFFFFF", -"m. c #FFFFFF", -"n. c #FFFFFF", -"o. c #FFFFFF", -"p. c #FFFFFF", -"q. c #FFFFFF", -"r. c #FFFFFF", -"s. c #FFFFFF", -"t. c #FFFFFF", -"u. c #FFFFFF", -"v. c #FFFFFF", -"w. c #FFFFFF", -"x. c #FFFFFF", -"y. c #FFFFFF", -"z. c #FFFFFF", -"A. c #FFFFFF", -"B. c #FFFFFF", -"C. c #FFFFFF", -"D. c #FFFFFF", -"E. c #FFFFFF", -"F. c #FFFFFF", -"G. c #FFFFFF", -"H. c #FFFFFF", -"I. c #FFFFFF", -"J. c #FFFFFF", -"K. c #FFFFFF", -"L. c #FFFFFF", -"M. c #FFFFFF", -"N. c #FFFFFF", -"O. c #FFFFFF", -"P. c #FFFFFF", -"Q. c #FFFFFF", -"R. c #FFFFFF", -"S. c #FFFFFF", -"T. c #FFFFFF", -"U. c #FFFFFF", -"V. c #FFFFFF", -"W. c #FFFFFF", -"X. c #FFFFFF", -"Y. c #FFFFFF", -"Z. c #FFFFFF", -"`. c #FFFFFF", -" + c #FFFFFF", -".+ c #FFFFFF", -"++ c #FFFFFF", -"@+ c #FFFFFF", -"#+ c #FFFFFF", -"$+ c #FFFFFF", -"%+ c #FFFFFF", -"&+ c #FFFFFF", -"*+ c #FFFFFF", -"=+ c #FFFFFF", -"-+ c #FFFFFF", -";+ c #FFFFFF", -">+ c #FFFFFF", -",+ c #FFFFFF", -"'+ c #FFFFFF", -")+ c #FFFFFF", -"!+ c #FFFFFF", -"~+ c #FFFFFF", -"{+ c #FFFFFF", -"]+ c #FFFFFF", -"^+ c #FFFFFF", -"/+ c #FFFFFF", -"(+ c #FFFFFF", -"_+ c #FFFFFF", -":+ c #FFFFFF", -"<+ c #FFFFFF", -"[+ c #FFFFFF", -"}+ c #FFFFFF", -"|+ c #FFFFFF", -"1+ c #FFFFFF", -"2+ c #FFFFFF", -"3+ c #FFFFFF", -"4+ c #FFFFFF", -"5+ c #FFFFFF", -"6+ c #FFFFFF", -"7+ c #FFFFFF", -"8+ c #FFFFFF", -"9+ c #FFFFFF", -"0+ c #FFFFFF", -"a+ c #FFFFFF", -"b+ c #FFFFFF", -"c+ c #FFFFFF", -"d+ c #FFFFFF", -"e+ c #FFFFFF", -"f+ c #FFFFFF", -"g+ c #FFFFFF", -"h+ c #FFFFFF", -"i+ c #FFFFFF", -"j+ c #FFFFFF", -"k+ c #FFFFFF", -"l+ c #FFFFFF", -"m+ c #FFFFFF", -"n+ c #FFFFFF", -"o+ c #FFFFFF", -"p+ c #FFFFFF", -"q+ c #FFFFFF", -"r+ c #FFFFFF", -"s+ c #FFFFFF", -"t+ c #FFFFFF", -"u+ c #FFFFFF", -"v+ c #FFFFFF", -"w+ c #FFFFFF", -"x+ c #FFFBF0", -"y+ c #A0A0A4", -"z+ c #808080", -", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ", -", - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & - & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+z+z+z+z+z+z+z+z+- & & & & & & & & & z+ ", -", - & & & & & & & & & & z+z+z+z+z+z+z+z+z+- z+ & & & & & & & & & z+ ", -", - & & & & & & & & & z+z+z+z+z+z+z+z+z+- z+& & & & & & & & & & z+ ", -", - & & & & & & & & z+- - - - - - - - - - z+& z+ & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - & z+& & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - z+& z+ & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - & z+& & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - z+& z+ & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - & z+& & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - z+& z+ & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - & z+ & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - z+ & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & - & & & & & & & & & & & & z+ ", -", - & & & & & & & & - & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+ ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/d_wire_b.gif b/Circular_kernel_3/demo/Circular_kernel_3/images/d_wire_b.gif deleted file mode 100644 index c5c3acc8845fc3b396551bcf07b791427510e0f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1008 zcmZ?wbh9u|RAEqJ_|52S|KHNma_rc#d-v`E*`r`I z1cqJ+{Qj_D!IFlChX25H{-5DLm;%y377*wF1sOnjfq~;HgEWVX$A$$5o7ovn0uF3g zc(`3a+3v{lfP; c #C6C6C6", -", c #DEDEDE", -"' c #FFFFFF", -") c #FFFFFF", -"! c #FFFFFF", -"~ c #FFFFFF", -"{ c #FFFFFF", -"] c #FFFFFF", -"^ c #FFFFFF", -"/ c #FFFFFF", -"( c #FFFFFF", -"_ c #FFFFFF", -": c #FFFFFF", -"< c #FFFFFF", -"[ c #FFFFFF", -"} c #FFFFFF", -"| c #FFFFFF", -"1 c #FFFFFF", -"2 c #FFFFFF", -"3 c #FFFFFF", -"4 c #FFFFFF", -"5 c #FFFFFF", -"6 c #FFFFFF", -"7 c #FFFFFF", -"8 c #FFFFFF", -"9 c #FFFFFF", -"0 c #FFFFFF", -"a c #FFFFFF", -"b c #FFFFFF", -"c c #FFFFFF", -"d c #FFFFFF", -"e c #FFFFFF", -"f c #FFFFFF", -"g c #FFFFFF", -"h c #FFFFFF", -"i c #FFFFFF", -"j c #FFFFFF", -"k c #FFFFFF", -"l c #FFFFFF", -"m c #FFFFFF", -"n c #FFFFFF", -"o c #FFFFFF", -"p c #FFFFFF", -"q c #FFFFFF", -"r c #FFFFFF", -"s c #FFFFFF", -"t c #FFFFFF", -"u c #FFFFFF", -"v c #FFFFFF", -"w c #FFFFFF", -"x c #FFFFFF", -"y c #FFFFFF", -"z c #FFFFFF", -"A c #FFFFFF", -"B c #FFFFFF", -"C c #FFFFFF", -"D c #FFFFFF", -"E c #FFFFFF", -"F c #FFFFFF", -"G c #FFFFFF", -"H c #FFFFFF", -"I c #FFFFFF", -"J c #FFFFFF", -"K c #FFFFFF", -"L c #FFFFFF", -"M c #FFFFFF", -"N c #FFFFFF", -"O c #FFFFFF", -"P c #FFFFFF", -"Q c #FFFFFF", -"R c #FFFFFF", -"S c #FFFFFF", -"T c #FFFFFF", -"U c #FFFFFF", -"V c #FFFFFF", -"W c #FFFFFF", -"X c #FFFFFF", -"Y c #FFFFFF", -"Z c #FFFFFF", -"` c #FFFFFF", -" . c #FFFFFF", -".. c #FFFFFF", -"+. c #FFFFFF", -"@. c #FFFFFF", -"#. c #FFFFFF", -"$. c #FFFFFF", -"%. c #FFFFFF", -"&. c #FFFFFF", -"*. c #FFFFFF", -"=. c #FFFFFF", -"-. c #FFFFFF", -";. c #FFFFFF", -">. c #FFFFFF", -",. c #FFFFFF", -"'. c #FFFFFF", -"). c #FFFFFF", -"!. c #FFFFFF", -"~. c #FFFFFF", -"{. c #FFFFFF", -"]. c #FFFFFF", -"^. c #FFFFFF", -"/. c #FFFFFF", -"(. c #FFFFFF", -"_. c #FFFFFF", -":. c #FFFFFF", -"<. c #FFFFFF", -"[. c #FFFFFF", -"}. c #FFFFFF", -"|. c #FFFFFF", -"1. c #FFFFFF", -"2. c #FFFFFF", -"3. c #FFFFFF", -"4. c #FFFFFF", -"5. c #FFFFFF", -"6. c #FFFFFF", -"7. c #FFFFFF", -"8. c #FFFFFF", -"9. c #FFFFFF", -"0. c #FFFFFF", -"a. c #FFFFFF", -"b. c #FFFFFF", -"c. c #FFFFFF", -"d. c #FFFFFF", -"e. c #FFFFFF", -"f. c #FFFFFF", -"g. c #FFFFFF", -"h. c #FFFFFF", -"i. c #FFFFFF", -"j. c #FFFFFF", -"k. c #FFFFFF", -"l. c #FFFFFF", -"m. c #FFFFFF", -"n. c #FFFFFF", -"o. c #FFFFFF", -"p. c #FFFFFF", -"q. c #FFFFFF", -"r. c #FFFFFF", -"s. c #FFFFFF", -"t. c #FFFFFF", -"u. c #FFFFFF", -"v. c #FFFFFF", -"w. c #FFFFFF", -"x. c #FFFFFF", -"y. c #FFFFFF", -"z. c #FFFFFF", -"A. c #FFFFFF", -"B. c #FFFFFF", -"C. c #FFFFFF", -"D. c #FFFFFF", -"E. c #FFFFFF", -"F. c #FFFFFF", -"G. c #FFFFFF", -"H. c #FFFFFF", -"I. c #FFFFFF", -"J. c #FFFFFF", -"K. c #FFFFFF", -"L. c #FFFFFF", -"M. c #FFFFFF", -"N. c #FFFFFF", -"O. c #FFFFFF", -"P. c #FFFFFF", -"Q. c #FFFFFF", -"R. c #FFFFFF", -"S. c #FFFFFF", -"T. c #FFFFFF", -"U. c #FFFFFF", -"V. c #FFFFFF", -"W. c #FFFFFF", -"X. c #FFFFFF", -"Y. c #FFFFFF", -"Z. c #FFFFFF", -"`. c #FFFFFF", -" + c #FFFFFF", -".+ c #FFFFFF", -"++ c #FFFFFF", -"@+ c #FFFFFF", -"#+ c #FFFFFF", -"$+ c #FFFFFF", -"%+ c #FFFFFF", -"&+ c #FFFFFF", -"*+ c #FFFFFF", -"=+ c #FFFFFF", -"-+ c #FFFFFF", -";+ c #FFFFFF", -">+ c #FFFFFF", -",+ c #FFFFFF", -"'+ c #FFFFFF", -")+ c #FFFFFF", -"!+ c #FFFFFF", -"~+ c #FFFFFF", -"{+ c #FFFFFF", -"]+ c #FFFFFF", -"^+ c #FFFFFF", -"/+ c #FFFFFF", -"(+ c #FFFFFF", -"_+ c #FFFFFF", -":+ c #FFFFFF", -"<+ c #FFFFFF", -"[+ c #FFFFFF", -"}+ c #FFFFFF", -"|+ c #FFFFFF", -"1+ c #FFFFFF", -"2+ c #FFFFFF", -"3+ c #FFFFFF", -"4+ c #FFFFFF", -"5+ c #FFFFFF", -"6+ c #FFFFFF", -"7+ c #FFFFFF", -"8+ c #FFFFFF", -"9+ c #FFFFFF", -"0+ c #FFFFFF", -"a+ c #FFFFFF", -"b+ c #FFFFFF", -"c+ c #FFFFFF", -"d+ c #FFFFFF", -"e+ c #FFFFFF", -"f+ c #FFFFFF", -"g+ c #FFFFFF", -"h+ c #FFFFFF", -"i+ c #FFFFFF", -"j+ c #FFFFFF", -"k+ c #FFFFFF", -"l+ c #FFFFFF", -"m+ c #FFFFFF", -"n+ c #FFFFFF", -"o+ c #FFFFFF", -"p+ c #FFFFFF", -"q+ c #FFFFFF", -"r+ c #FFFFFF", -"s+ c #FFFFFF", -"t+ c #FFFFFF", -"u+ c #FFFFFF", -"v+ c #FFFFFF", -"w+ c #FFFFFF", -"x+ c #FFFBF0", -"y+ c #A0A0A4", -"z+ c #808080", -", , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ", -", - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+& & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & z+z+z+z+z+z+ z+z+z+ & & & & & & & & & z+ ", -", - & & & & & & & & & & z+& & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & z+& & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & z+& & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", - & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & z+ ", -", z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+ ", -" "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_in.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_in.xpm deleted file mode 100644 index 40e894abfb0..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_in.xpm +++ /dev/null @@ -1,129 +0,0 @@ -/* XPM */ -static const char * zoom_in_xpm[] = { -"16 16 110 2", -" c None", -". c #000000", -"+ c #B7B7B7", -"@ c #090909", -"# c #060606", -"$ c #CFCFFF", -"% c #F0F0F0", -"& c #4E4E5B", -"* c #ECECEF", -"= c #6C6CFF", -"- c #D7D7FF", -"; c #EDEDEF", -"> c #CDCDFF", -", c #7A7AAE", -"' c #6E6EFF", -") c #D5D5FF", -"! c #D2D2D6", -"~ c #6B6B73", -"{ c #F9F9F9", -"] c #5151A1", -"^ c #CCCCD0", -"/ c #6161AC", -"( c #ADADFF", -"_ c #484861", -": c #C0C0F0", -"< c #6464FF", -"[ c #AAAAFF", -"} c #EBEBFF", -"| c #6262FF", -"1 c #9898A9", -"2 c #5C5C8D", -"3 c #595981", -"4 c #FBFBFB", -"5 c #8E8EA1", -"6 c #E2E2FF", -"7 c #AFAFC9", -"8 c #434363", -"9 c #555566", -"0 c #B0B0DF", -"a c #9696FF", -"b c #F8F8FB", -"c c #3D3DAF", -"d c #D8D8FF", -"e c #B6B6FF", -"f c #3838A1", -"g c #A2A2FF", -"h c #8E8ECC", -"i c #8080C6", -"j c #26265B", -"k c #8B8BFF", -"l c #585870", -"m c #3F3F3F", -"n c #484848", -"o c #6565F9", -"p c #71717E", -"q c #7272DA", -"r c #464686", -"s c #E2E2E3", -"t c #9F9FFF", -"u c #7676F5", -"v c #8B8BA1", -"w c #4C4C5B", -"x c #686871", -"y c #B7B7DF", -"z c #030314", -"A c #3A3A76", -"B c #ABABE6", -"C c #DDDDFF", -"D c #4C4C7C", -"E c #9999FF", -"F c #CECED6", -"G c #6565AE", -"H c #5D5D6E", -"I c #D0D0FF", -"J c #6969FF", -"K c #2C2C6A", -"L c #9C9C9C", -"M c #AEAEB6", -"N c #28286D", -"O c #A4A4AA", -"P c #262667", -"Q c #E2E2ED", -"R c #8686F0", -"S c #AFAFE7", -"T c #7C7CAC", -"U c #C0C0E1", -"V c #464673", -"W c #5454E0", -"X c #2B2B61", -"Y c #434377", -"Z c #8787BE", -"` c #6B6B75", -" . c #DBDBF0", -".. c #B3B3D8", -"+. c #C6C6C6", -"@. c #8282FF", -"#. c #6E6EFB", -"$. c #25255D", -"%. c #373799", -"&. c #CECEF0", -"*. c #8C8CB6", -"=. c #6868EB", -"-. c #FDFDFF", -";. c #C0C0C0", -">. c #6F6F8B", -",. c #5454D0", -"'. c #6868E0", -"). c #8686A9", -"!. c #BCBCF0", -"~. c #A1A1B8", -" 4 M p 9 l >.7 -. ", -" s x v ..!.B h 2 3 Q ", -"{ ~ ~.) : . . [ t G V b ", -"O 5 d > .. . C a k ] *. ", -"` U I } % . . - @.'.Y ", -"& y . . . . . . . . #.j ", -"w 0 . . . . . . . . o $. ", -"H S e 6 % . . $ J W A ", -"1 T ( g &.. . $ = | f , ", -"; _ i E R . . ' < c N ^ ", -" F 8 / q u =.,.%.P z @ + ", -" * ).D X K r Z ! # . @ + ", -" + # . @ + ", -" + # . @ ;.", -" + # . m ", -" +.n L "}; diff --git a/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_out.xpm b/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_out.xpm deleted file mode 100644 index 371ad2e2565..00000000000 --- a/Circular_kernel_3/demo/Circular_kernel_3/images/zoom_out.xpm +++ /dev/null @@ -1,133 +0,0 @@ -/* XPM */ -static const char * zoom_out_xpm[] = { -"16 16 114 2", -" c None", -". c #000000", -"+ c #B7B7B7", -"@ c #060606", -"# c #090909", -"$ c #FDFDFF", -"% c #CFCFFF", -"& c #B6B6FF", -"* c #4C4C5B", -"= c #4E4E5B", -"- c #8383FF", -"; c #ECECEF", -"> c #E9E9FF", -", c #555566", -"' c #EBEBFF", -") c #8282FF", -"! c #CDCDFF", -"~ c #FEFEFF", -"{ c #686871", -"] c #6E6EFF", -"^ c #8B8BA1", -"/ c #D8D8FF", -"( c #464673", -"_ c #FBFBFB", -": c #F9F9F9", -"< c #6F6F8B", -"[ c #6565AE", -"} c #6161AC", -"| c #2C2C6A", -"1 c #484861", -"2 c #434363", -"3 c #CBCBFF", -"4 c #D2D2D6", -"5 c #6262FF", -"6 c #C6C6C6", -"7 c #DDDDFF", -"8 c #AAAAFF", -"9 c #9999FF", -"0 c #6868EB", -"a c #3A3A76", -"b c #7676F5", -"c c #3F3F3F", -"d c #595981", -"e c #5C5C8D", -"f c #F8F8FB", -"g c #5D5D6E", -"h c #CCCCD0", -"i c #9696FF", -"j c #3838A1", -"k c #8686A9", -"l c #A1A1B8", -"m c #A2A2FF", -"n c #D5D5FF", -"o c #DBDBFF", -"p c #5454E0", -"q c #71717E", -"r c #7272DA", -"s c #D0D0FF", -"t c #2B2B61", -"u c #484848", -"v c #BCBCF0", -"w c #C1C1FF", -"x c #BABAEC", -"y c #E2E2ED", -"z c #E2E2E3", -"A c #6C6CFF", -"B c #7A7AAE", -"C c #B5B5FF", -"D c #9898A9", -"E c #8E8EFF", -"F c #ABABE6", -"G c #AFAFE7", -"H c #C0C0C0", -"I c #4C4C7C", -"J c #5151A1", -"K c #8E8EA1", -"L c #3D3DAF", -"M c #6868E0", -"N c #AFAFC9", -"O c #C0C0E1", -"P c #CECED6", -"Q c #6969FF", -"R c #B3B3D8", -"S c #030314", -"T c #8080C6", -"U c #464686", -"V c #5454D0", -"W c #373799", -"X c #262667", -"Y c #6B6B73", -"Z c #8B8BFF", -"` c #AEAEB6", -" . c #585870", -".. c #434377", -"+. c #7C7CAC", -"@. c #6B6B75", -"#. c #C3C3EC", -"$. c #9F9FFF", -"%. c #8C8CB6", -"&. c #E2E2FF", -"*. c #8E8ECC", -"=. c #26265B", -"-. c #D7D7FF", -";. c #EDEDEF", -">. c #9C9C9C", -",. c #28286D", -"'. c #A4A4AA", -"). c #6E6EFB", -"!. c #7979FF", -"~. c #ADADFF", -"{. c #6565F9", -"]. c #8787BE", -"^. c #25255D", -"/. c #6464FF", -" _ ` q , .< N $ ", -" z { ^ R v F *.e d y ", -": Y l n 3 w C 8 $.[ ( f ", -"'.K / ! > $ $ 7 i Z J %. ", -"@.O s ' -.) M .. ", -"= #.. . . . . . . . ).=. ", -"* x . . . . . . . . {.^. ", -"g G & &. % Q p a ", -"D +.~.m o ~ % A 5 j B ", -";.1 T 9 E - !.] /.L ,.h ", -" P 2 } r b 0 V W X S # + ", -" ; k I t | U ].4 @ . # + ", -" + @ . # + ", -" + @ . # H ", -" + @ . c ", -" 6 u >."}; diff --git a/Circular_kernel_3/include/CGAL/IO/Spherical_circle_gl.h b/Circular_kernel_3/include/CGAL/IO/Spherical_circle_gl.h deleted file mode 100644 index 8bd651bd085..00000000000 --- a/Circular_kernel_3/include/CGAL/IO/Spherical_circle_gl.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2005-2006 INRIA Sophia-Antipolis (France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. -// See the file LICENSE.LGPL distributed with CGAL. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Partially supported by the IST Programme of the EU as a Shared-cost -// RTD (FET Open) Project under Contract No IST-2000-26473 -// (ECG - Effective Computational Geometry for Curves and Surfaces) -// and a STREP (FET Open) Project under Contract No IST-006413 -// (ACS -- Algorithms for Complex Shapes) -// -// $URL$ -// $Id$ -// -// Author(s) : Monique Teillaud -// Sylvain Pion -// Julien Hazebrouck -// Damien Leroy - -#ifndef CGAL_SPHERICAL_CIRCLE_GL__H -#define CGAL_SPHERICAL_CIRCLE_GL__H - -#include - -namespace CGAL { - -#define COLOR_POINT(p) glColor3f(abs(p.x()),abs(p.y()),abs(p.z())) -#define AFFICHER_POINT_CONTOUR(p) COLOR_POINT(p),glVertex3f(CGAL::to_double(p.x()),CGAL::to_double(p.y()),CGAL::to_double(p.z())) -#define TRACE_SEGMENT(p1,p2) AFFICHER_POINT_CONTOUR(p1),AFFICHER_POINT_CONTOUR(p2) -#define COLOR_ROUGE glColor3f(1.0, 0.0, 0.0) -#define COLOR_POINT(p) glColor3f(abs(p.x()),abs(p.y()),abs(p.z())) -#define IMPRIMER_POINT(n,p) std::cout << n << " = (" << p.x() << ", " << p.y() << ", " << p.z() << ")" << std::endl -#define VECTOR_LENGTH(v) sqrt((v.x()*v.x())+(v.y()*v.y())+(v.z()*v.z())) - -/** - * Function drawing the contour of the 3D circle passed as argument with the desired precision. - */ -template -void dessiner_spherical_circle (const typename SK::Circle_3& circle, int precision) { - typedef typename SK::Point_3 Point_3; - typedef typename SK::Vector_3 Vector_3; - typedef typename SK::Has_on_3 Has_on_3; - const Point_3& centre = circle.center(); - //IMPRIMER_POINT("centre", centre); - Vector_3 u = circle.supporting_plane().base1(); - u = u / VECTOR_LENGTH(u); - //IMPRIMER_POINT("u", u); - Vector_3 v = circle.supporting_plane().base2(); - v = v / VECTOR_LENGTH(v); - //IMPRIMER_POINT("v", v); - double rayon = sqrt(CGAL::to_double(circle.squared_radius())); - double pas = 2 * CGAL_PI / precision; - glLineWidth(5.0); - glDisable(GL_LIGHTING); // desactive la gestion de la lumiere - - Point_3 pprec = centre + rayon * u; - Point_3 pcour; - glBegin(GL_LINES); - COLOR_ROUGE; - for (double theta = pas; theta < 2 * CGAL_PI + pas; theta = theta + pas) { - pcour = Point_3( - centre.x() + rayon * (u.x() * cos(theta) + v.x() * sin(theta)), - centre.y() + rayon * (u.y() * cos(theta) + v.y() * sin(theta)), - centre.z() + rayon * (u.z() * cos(theta) + v.z() * sin(theta)) - ); - TRACE_SEGMENT(pprec, pcour); - pprec = pcour; - } - glEnd(); -} - -} - -#endif // CGAL_SPHERICAL_CIRCLE_GL__H From 1d597603d770fc420db4d6164321c7addac19355 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 18 Jan 2010 16:49:07 +0000 Subject: [PATCH 004/128] Merge from trunk: | New Revision: 53651 | Author: penarand | Date: 2010-01-18 16:20:55 +0100 (Mon, 18 Jan 2010) | | Log message: | | corrected bug in RS detection (old library name) | --- Installation/cmake/modules/FindRS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/cmake/modules/FindRS.cmake b/Installation/cmake/modules/FindRS.cmake index 6995c311523..d6e357d01d2 100644 --- a/Installation/cmake/modules/FindRS.cmake +++ b/Installation/cmake/modules/FindRS.cmake @@ -17,7 +17,7 @@ if( MPFI_FOUND ) ) find_library(RS_LIBRARIES - NAMES rsexport + NAMES rsexport_rs PATHS ENV RS_LIB_DIR DOC "Path to the RS library" ) From 9a3d22ef230a47dc0737032c16334f7c62fb18c1 Mon Sep 17 00:00:00 2001 From: Mariette Yvinec Date: Tue, 19 Jan 2010 10:00:41 +0000 Subject: [PATCH 005/128] added changes for Mesh_3 --- Installation/CHANGES | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Installation/CHANGES b/Installation/CHANGES index 308fb00b2f0..9e925a33194 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -39,6 +39,13 @@ CGAL 3.6 offers the following improvements and new functionality : - The package can now be used together with the 3D Periodic Triangulation package to compute periodic alpha shapes. +* 3D Mesh Generation +- The mesh generator has been enriched which an optimisation phase to provide 3D meshes + with well shaped tetrahedra (and in particular no slivers). The optimization phase +involves four different optimization processes: two global opitimization processes (ODT anf Lloyd), +a pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users +needs and to available computer resources. + * Arrangement_on_surface_2: - Fixed passing a (const) traits object to the constructor of Arrangement_2. - Introduced Arrangement_2::fictitious_face(), which returns the fictitious From 45d4f16130c19eb225d5673f7ea965c239313130 Mon Sep 17 00:00:00 2001 From: Mariette Yvinec Date: Tue, 19 Jan 2010 10:04:38 +0000 Subject: [PATCH 006/128] fixed page layout in Changes for Mesh_3 --- Installation/CHANGES | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 9e925a33194..3c245870182 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -40,11 +40,11 @@ CGAL 3.6 offers the following improvements and new functionality : package to compute periodic alpha shapes. * 3D Mesh Generation -- The mesh generator has been enriched which an optimisation phase to provide 3D meshes - with well shaped tetrahedra (and in particular no slivers). The optimization phase -involves four different optimization processes: two global opitimization processes (ODT anf Lloyd), -a pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users -needs and to available computer resources. + - The mesh generator has been enriched which an optimisation phase to provide 3D meshes + with well shaped tetrahedra (and in particular no slivers). The optimization phase + involves four different optimization processes: two global opitimization processes (ODT anf Lloyd), + a pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users + needs and to available computer resources. * Arrangement_on_surface_2: - Fixed passing a (const) traits object to the constructor of Arrangement_2. From 0166b5c6e3f4ac7521512e85b2a52e3b01833fde Mon Sep 17 00:00:00 2001 From: Sylvain Pion Date: Wed, 20 Jan 2010 12:32:36 +0000 Subject: [PATCH 007/128] Link AK_d and reorder to have Modular close to NT. --- Manual/doc_tex/cgal_manual.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Manual/doc_tex/cgal_manual.tex b/Manual/doc_tex/cgal_manual.tex index d24c353036a..317624e3af6 100644 --- a/Manual/doc_tex/cgal_manual.tex +++ b/Manual/doc_tex/cgal_manual.tex @@ -45,8 +45,9 @@ \packageleftright{Algebraic_foundations}{Algebraic_foundations_ref} \packageleftright{NumberTypeSupport}{NumberTypeSupport_ref} - \packageleftright{Polynomial}{Polynomial_ref} \packageleftright{Modular_arithmetic}{Modular_arithmetic_ref} + \packageleftright{Polynomial}{Polynomial_ref} + \packageleftright{Algebraic_kernel_d}{Algebraic_kernel_d_ref} % Combinatorial Algorithms: % ----------- From 53fe791f0d16a1f1cacaa2b64bf395759a8961d6 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 12:37:23 +0000 Subject: [PATCH 008/128] Merge from trunk: | New Revision: 53666 | Author: sloriot | Date: 2010-01-19 08:41:16 +0100 (Tue, 19 Jan 2010) | | Log message: | | remove warnings --- .../functor_compare_theta_3.cpp | 2 +- ..._function_compare_to_right_spherical_kernel.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Circular_kernel_3/examples/Circular_kernel_3/functor_compare_theta_3.cpp b/Circular_kernel_3/examples/Circular_kernel_3/functor_compare_theta_3.cpp index c2f85dfc488..ee12337caa6 100644 --- a/Circular_kernel_3/examples/Circular_kernel_3/functor_compare_theta_3.cpp +++ b/Circular_kernel_3/examples/Circular_kernel_3/functor_compare_theta_3.cpp @@ -36,4 +36,4 @@ int main(){ assert(cmp(t_extreme[1],p2.first)==CGAL::LARGER); return 0; -} \ No newline at end of file +} diff --git a/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_function_compare_to_right_spherical_kernel.h b/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_function_compare_to_right_spherical_kernel.h index 42b4c508962..a770315d7ad 100644 --- a/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_function_compare_to_right_spherical_kernel.h +++ b/Circular_kernel_3/include/CGAL/Circular_kernel_3/internal_function_compare_to_right_spherical_kernel.h @@ -142,7 +142,7 @@ Compare_to_right_of_arcs::square_norm_tk_normal( typename SK::FT ak2; typename SK::FT gk=gamma_k(c,rk,R,ak2); return ak2 * (R - gk * gk * ak2); -}; +} template typename SK::FT @@ -154,7 +154,7 @@ Compare_to_right_of_arcs::square_norm_tk_threaded( typename SK::FT ak2; typename SK::FT gk=gamma_k(c,rk,R,ak2); return ak2 * (R - gk * gk * ak2); -}; +} template void @@ -200,7 +200,7 @@ Compare_to_right_of_arcs::fill_tzk_n( arc.supporting_circle().squared_radius(), sphere_.squared_radius()); } -}; +} template @@ -223,7 +223,7 @@ Compare_to_right_of_arcs::sign_of_delta( if (CGAL_NTS sign(tz1)!=CGAL_NTS sign(tz2)) return CGAL_NTS sign(tz2); return CGAL_NTS sign(tz2)*CGAL_NTS sign(n1*CGAL::square(tz2)-n2*CGAL::square(tz1)); -}; +} template @@ -232,7 +232,7 @@ Compare_to_right_of_arcs::give_rk( const typename SK::Circular_arc_3& arc) const { return (is_arc_an_upper_one(arc,sphere_)?(1):(-1))*arc.supporting_circle().squared_radius(); -}; +} template int @@ -244,7 +244,7 @@ Compare_to_right_of_arcs::compare_for_delta_eq_0_threaded( if (!is_supporting_circle_threaded) return ( is_upper_arc(arc,sphere_) )?(-1):(1); //IN THAT CASE WE CAN OPTIMIZE AND USE THE Z-COORDINATES OF THE POINT AND CIRCLE THETA-EXTREMAL PT return (-CGAL_NTS sign(arc_threaded.supporting_circle().center().z()-arc.supporting_circle().center().z())); -}; +} template int @@ -264,7 +264,7 @@ Compare_to_right_of_arcs::compare_for_delta_eq_0( if(CGAL_NTS sign(rc1)*CGAL_NTS sign(rc2)<0) return (CGAL_NTS sign(rc1)>0)?(1):(-1); return (rc1 @@ -283,7 +283,7 @@ CGAL::Comparison_result Compare_to_right_of_arcs::operator()( CGAL_precondition(res!=0); if (res<0) return CGAL::LARGER; return CGAL::SMALLER; -}; +} } } From ba1aef04076cb3599ad318dd3220f0e32eda2d03 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 13:31:41 +0000 Subject: [PATCH 009/128] Simplify the URL to CORE, so that "_" is not in the URL (Pb with manual tools) --- Installation/doc_tex/Installation/installation.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index 3d49a15a03f..e4a71b40c04 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -54,7 +54,7 @@ \newcommand{\mpfrpage}{\path'http://www.mpfr.org/'} \newcommand{\mpfipage}{\path'http://gforge.inria.fr/projects/mpfi/'} \newcommand{\boostpage}{\path'http://www.boost.org/'} -\newcommand{\corepage}{\path'http://www.cs.nyu.edu/exact/core_pages/'} +\newcommand{\corepage}{\path'http://www.cs.nyu.edu/exact/'} \newcommand{\ledapage}{\path'http://www.algorithmic-solutions.com/leda/index.html'} \newcommand{\qtpage}{\path'http://qt.nokia.com'} \newcommand{\blaspage}{\path'http://www.netlib.org/blas/'} From 6015ac75e115ca9efd43afe646a40b5e9455a504 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 13:42:23 +0000 Subject: [PATCH 010/128] Fix the package description of AK (fix the bib label and the version of CGAL) --- .../doc_tex/Algebraic_kernel_d/PkgDescription.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex index 6920ad2411f..ff5b767bbde 100644 --- a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex +++ b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Algebraic Kernel \label{Pkg:AlgebraicKerneld}} -\ccPkgHowToCiteCgal{cgal:ak-bht} +\ccPkgHowToCiteCgal{cgal:bht-ak-09} \ccPkgSummary{The package introduces a concept for a univariate \ccc{AlgebraicKernel_d_1} and a concept for bivariate \ccc{AlgebraicKernel_d_2}. \ccc{AlgebraicKernel_d_1} provides univariate root solving as well as comparison @@ -10,6 +10,6 @@ particular possible to solve a $2\times2$ system and to compare and approximate the resulting intersection points. The computation of the sign of a polynomial at given point is also provide.} -\ccPkgIntroducedInCGAL{3.X} +\ccPkgIntroducedInCGAL{3.6} \ccPkgLicense{LGPL} \end{ccPkgDescription} From 33eb026bb9bd9c0cfb6480e3b02260bb1b9c30e3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 13:45:53 +0000 Subject: [PATCH 011/128] clean PkgDescription.tex --- Mesh_3/doc_tex/Mesh_3/PkgDescription.tex | 2 -- 1 file changed, 2 deletions(-) diff --git a/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex b/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex index 989316c1ded..436787bb960 100644 --- a/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex +++ b/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex @@ -1,5 +1,4 @@ \begin{ccPkgDescription}{3D Mesh Generation \label{Pkg:Mesh_3}} -%\ccPkgHowToCiteCgal{cgal:y-t2-09} \ccPkgSummary{ The generated meshes are 3 dimensional isotropic simplicial meshes. The discretized region @@ -24,7 +23,6 @@ surfaces. } \ccPkgIntroducedInCGAL{3.5} \ccPkgLicense{\ccLicenseQPL} -%\ccPkgDemo{Mesh_3}{mesh_3.zip} \ccPkgIllustration{Mesh_3/pictures/multilabel_mesher_small.jpg}{Mesh_3/pictures/multilabel_mesher.jpg} \end{ccPkgDescription} From 9b745b1668993c991d17eb6646c312a3224b312b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 14:01:09 +0000 Subject: [PATCH 012/128] - Update PkgDexcription.tex to year 2010. - Add manual-3.6.bib --- .../doc_tex/AABB_tree/PkgDescription.tex | 2 +- .../Algebraic_foundations/PkgDescription.tex | 2 +- .../Algebraic_kernel_d/PkgDescription.tex | 2 +- .../doc_tex/Alpha_shapes_2/PkgDescription.tex | 2 +- .../doc_tex/Alpha_shapes_3/PkgDescription.tex | 2 +- .../Apollonius_graph_2/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/Sweep_line_2/PkgDescription.tex | 2 +- BGL/doc_tex/BGL/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../Box_intersection_d/PkgDescription.tex | 2 +- .../doc_tex/CGAL_ipelets/PkgDescription.tex | 2 +- .../Circular_kernel_2/PkgDescription.tex | 2 +- .../Circular_kernel_3/PkgDescription.tex | 2 +- .../doc_tex/Circulator/PkgDescription.tex | 2 +- .../Convex_decomposition_3/PkgDescription.tex | 2 +- .../doc_tex/Convex_hull_2/PkgDescription.tex | 2 +- .../doc_tex/Convex_hull_3/PkgDescription.tex | 2 +- .../doc_tex/Convex_hull_d/PkgDescription.tex | 2 +- .../doc_tex/Envelope_2/PkgDescription.tex | 2 +- .../doc_tex/Envelope_3/PkgDescription.tex | 2 +- .../doc_tex/Generator/PkgDescription.tex | 2 +- Geomview/doc_tex/Geomview/PkgDescription.tex | 2 +- .../doc_tex/GraphicsView/PkgDescription.tex | 2 +- .../doc_tex/HalfedgeDS/PkgDescription.tex | 2 +- .../doc_tex/Installation/PkgDescription.tex | 2 +- .../doc_tex/Interpolation/PkgDescription.tex | 2 +- .../Interval_skip_list/PkgDescription.tex | 2 +- .../doc_tex/Jet_fitting_3/PkgDescription.tex | 2 +- .../doc_tex/Kernel_23/PkgDescription.tex | 2 +- Kernel_d/doc_tex/Kernel_d/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../Kinetic_framework/PkgDescription.tex | 2 +- .../doc_tex/Introduction/PkgDescription.tex | 2 +- Manual/doc_tex/Manual/manual-3.6.bib | 822 ++++++++++++++++++ Manual/doc_tex/Miscellany/PkgDescription.tex | 2 +- .../doc_tex/Preliminaries/PkgDescription.tex | 2 +- .../doc_tex/Matrix_search/PkgDescription.tex | 2 +- Mesh_2/doc_tex/Mesh_2/PkgDescription.tex | 2 +- Mesh_3/doc_tex/Mesh_3/PkgDescription.tex | 2 +- .../Minkowski_sum_2/PkgDescription.tex | 2 +- .../Minkowski_sum_3/PkgDescription.tex | 2 +- .../Modular_arithmetic/PkgDescription.tex | 2 +- Nef_2/doc_tex/Nef_2/PkgDescription.tex | 2 +- Nef_3/doc_tex/Nef_3/PkgDescription.tex | 2 +- Nef_S2/doc_tex/Nef_S2/PkgDescription.tex | 2 +- .../NumberTypeSupport/PkgDescription.tex | 2 +- .../Bounding_volumes/PkgDescription.tex | 2 +- .../Inscribed_areas/PkgDescription.tex | 2 +- .../doc_tex/Partition_2/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/Point_set_2/PkgDescription.tex | 2 +- .../Point_set_processing_3/PkgDescription.tex | 2 +- .../doc_tex/Property_map/PkgDescription.tex | 2 +- Polygon/doc_tex/Polygon/PkgDescription.tex | 2 +- .../doc_tex/Polyhedron/PkgDescription.tex | 2 +- .../doc_tex/Polynomial/PkgDescription.tex | 2 +- .../Polytope_distance_d/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/QP_solver/PkgDescription.tex | 2 +- Ridges_3/doc_tex/Ridges_3/PkgDescription.tex | 2 +- .../doc_tex/STL_Extension/PkgDescription.tex | 2 +- .../SearchStructures/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/Skin_surface_3/PkgDescription.tex | 2 +- .../Snap_rounding_2/PkgDescription.tex | 2 +- .../Spatial_searching/PkgDescription.tex | 2 +- .../Spatial_sorting/PkgDescription.tex | 2 +- .../Straight_skeleton_2/PkgDescription.tex | 2 +- .../doc_tex/Stream_lines_2/PkgDescription.tex | 2 +- .../Subdivision_method_3/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/Surface_mesher/PkgDescription.tex | 2 +- .../PkgDescription.tex | 2 +- .../doc_tex/TDS_2/PkgDescription.tex | 2 +- .../Triangulation_2/PkgDescription.tex | 2 +- .../TriangulationDS_3/PkgDescription.tex | 2 +- .../Triangulation_3/PkgDescription.tex | 2 +- .../Voronoi_diagram_2/PkgDescription.tex | 2 +- iostream/doc_tex/IOstream/PkgDescription.tex | 2 +- 81 files changed, 902 insertions(+), 80 deletions(-) create mode 100644 Manual/doc_tex/Manual/manual-3.6.bib diff --git a/AABB_tree/doc_tex/AABB_tree/PkgDescription.tex b/AABB_tree/doc_tex/AABB_tree/PkgDescription.tex index 40374e8508a..9e2e2e1aeb8 100644 --- a/AABB_tree/doc_tex/AABB_tree/PkgDescription.tex +++ b/AABB_tree/doc_tex/AABB_tree/PkgDescription.tex @@ -2,7 +2,7 @@ %\ccPkgHowToCiteCgal{cgal:} \ccPkgSummary{The AABB (axis-aligned bounding box) tree component offers a static data structure and algorithms to perform efficient intersection and distance queries on sets of finite 3D geometric objects.} -\ccPkgHowToCiteCgal{cgal:atw-aabb-09} +\ccPkgHowToCiteCgal{cgal:atw-aabb-10} \ccPkgIntroducedInCGAL{3.5} \ccPkgDemo{AABB Tree}{AABB_demo.zip} \ccPkgIllustration{AABB_tree/figs/teaser-thumb.png}{AABB_tree/figs/teaser.png} diff --git a/Algebraic_foundations/doc_tex/Algebraic_foundations/PkgDescription.tex b/Algebraic_foundations/doc_tex/Algebraic_foundations/PkgDescription.tex index 4cbee4d5eea..0a76d5f969d 100644 --- a/Algebraic_foundations/doc_tex/Algebraic_foundations/PkgDescription.tex +++ b/Algebraic_foundations/doc_tex/Algebraic_foundations/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Algebraic Foundations\label{Pkg:AlgebraicFoundations}} -\ccPkgHowToCiteCgal{cgal:h-af-09} +\ccPkgHowToCiteCgal{cgal:h-af-10} \ccPkgSummary{ This package defines what algebra means for \cgal, in terms of concepts, classes and functions. The main features are: diff --git a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex index ff5b767bbde..81bc1089651 100644 --- a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex +++ b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Algebraic Kernel \label{Pkg:AlgebraicKerneld}} -\ccPkgHowToCiteCgal{cgal:bht-ak-09} +\ccPkgHowToCiteCgal{cgal:bht-ak-10} \ccPkgSummary{The package introduces a concept for a univariate \ccc{AlgebraicKernel_d_1} and a concept for bivariate \ccc{AlgebraicKernel_d_2}. \ccc{AlgebraicKernel_d_1} provides univariate root solving as well as comparison diff --git a/Alpha_shapes_2/doc_tex/Alpha_shapes_2/PkgDescription.tex b/Alpha_shapes_2/doc_tex/Alpha_shapes_2/PkgDescription.tex index 4ec67780ca3..0c30c9be778 100644 --- a/Alpha_shapes_2/doc_tex/Alpha_shapes_2/PkgDescription.tex +++ b/Alpha_shapes_2/doc_tex/Alpha_shapes_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Alpha Shapes\label{Pkg:AlphaShape2}} -\ccPkgHowToCiteCgal{cgal:d-as2-09} +\ccPkgHowToCiteCgal{cgal:d-as2-10} \ccPkgSummary{ This package offers a data structure encoding the whole family of alpha-complexes related to a given 2D Delaunay or regular triangulation. In particular, the data structure diff --git a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex index 015331c5214..96e1ec184de 100644 --- a/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex +++ b/Alpha_shapes_3/doc_tex/Alpha_shapes_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Alpha Shapes\label{Pkg:AlphaShapes3}} -\ccPkgHowToCiteCgal{cgal:dy-as3-09} +\ccPkgHowToCiteCgal{cgal:dy-as3-10} \ccPkgSummary{This package offers a data structure encoding the whole family of alpha-complexes related to a given 3D Delaunay or regular triangulation. In particular, the data structure allows to retrieve the alpha-complex for any alpha value, the whole spectrum of critical diff --git a/Apollonius_graph_2/doc_tex/Apollonius_graph_2/PkgDescription.tex b/Apollonius_graph_2/doc_tex/Apollonius_graph_2/PkgDescription.tex index b1beb49244d..c34ec704600 100644 --- a/Apollonius_graph_2/doc_tex/Apollonius_graph_2/PkgDescription.tex +++ b/Apollonius_graph_2/doc_tex/Apollonius_graph_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Apollonius Graphs (Delaunay Graphs of Disks)\label{Pkg:ApolloniusGraph2}} -\ccPkgHowToCiteCgal{cgal:ky-ag2-09} +\ccPkgHowToCiteCgal{cgal:ky-ag2-10} \ccPkgSummary{ Algorithms for computing the Apollonius graph in two dimensions. The Apollonius graph is the dual of the diff --git a/Arrangement_on_surface_2/doc_tex/Arrangement_on_surface_2/PkgDescription.tex b/Arrangement_on_surface_2/doc_tex/Arrangement_on_surface_2/PkgDescription.tex index 250b804cf83..ac93905293c 100644 --- a/Arrangement_on_surface_2/doc_tex/Arrangement_on_surface_2/PkgDescription.tex +++ b/Arrangement_on_surface_2/doc_tex/Arrangement_on_surface_2/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{2D Arrangement\label{Pkg:Arrangement2}} -\ccPkgHowToCiteCgal{cgal:wfzh-a2-09} +\ccPkgHowToCiteCgal{cgal:wfzh-a2-10} \ccPkgSummary{ This package can be used to construct, maintain, alter, and display arrangements in the plane. Once an arrangement is constructed, the diff --git a/Arrangement_on_surface_2/doc_tex/Sweep_line_2/PkgDescription.tex b/Arrangement_on_surface_2/doc_tex/Sweep_line_2/PkgDescription.tex index c715bac7d7d..840f82ec76f 100644 --- a/Arrangement_on_surface_2/doc_tex/Sweep_line_2/PkgDescription.tex +++ b/Arrangement_on_surface_2/doc_tex/Sweep_line_2/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{2D Intersection of Curves\label{Pkg:IntersectionOfCurves2}} -\ccPkgHowToCiteCgal{cgal:wfz-ic2-09} +\ccPkgHowToCiteCgal{cgal:wfz-ic2-10} \ccPkgSummary{This package provides three free functions implemented based on the sweep-line paradigm: given a collection of input curves, compute all intersection points, compute the set of subcurves that are diff --git a/BGL/doc_tex/BGL/PkgDescription.tex b/BGL/doc_tex/BGL/PkgDescription.tex index a08aa596b4c..66d69a40720 100644 --- a/BGL/doc_tex/BGL/PkgDescription.tex +++ b/BGL/doc_tex/BGL/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{CGAL and the Boost Graph Library\label{Pkg:BGL}} -\ccPkgHowToCiteCgal{cgal:cfw-cbgl-09} +\ccPkgHowToCiteCgal{cgal:cfw-cbgl-10} \ccPkgSummary{This package provides a framework for interfacing \cgal\ data structures with the algorithms of the {\sc BGL}. It allows to run diff --git a/Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/PkgDescription.tex b/Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/PkgDescription.tex index 8aac41e411b..c28120ee8df 100644 --- a/Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/PkgDescription.tex +++ b/Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Regularized Boolean Set-Operations\label{Pkg:BooleanSetOperations2}} -\ccPkgHowToCiteCgal{cgal:fwzh-rbso2-09} +\ccPkgHowToCiteCgal{cgal:fwzh-rbso2-10} \ccPkgSummary{ This package consists of the implementation of Boolean set-operations on point sets bounded by weakly x-monotone curves in 2-dimensional diff --git a/Box_intersection_d/doc_tex/Box_intersection_d/PkgDescription.tex b/Box_intersection_d/doc_tex/Box_intersection_d/PkgDescription.tex index 2850a2bc3d4..c970af5f8e5 100644 --- a/Box_intersection_d/doc_tex/Box_intersection_d/PkgDescription.tex +++ b/Box_intersection_d/doc_tex/Box_intersection_d/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Intersecting Sequences of dD Iso-oriented Boxes\label{Pkg:BoxIntersectionD}} -\ccPkgHowToCiteCgal{cgal:kmz-isiobd-09} +\ccPkgHowToCiteCgal{cgal:kmz-isiobd-10} \ccPkgSummary{ An efficient algorithm for finding all intersecting pairs for large numbers of iso-oriented boxes, in order to apply a user defined callback diff --git a/CGAL_ipelets/doc_tex/CGAL_ipelets/PkgDescription.tex b/CGAL_ipelets/doc_tex/CGAL_ipelets/PkgDescription.tex index 91788b3887b..e9e9daefdb5 100644 --- a/CGAL_ipelets/doc_tex/CGAL_ipelets/PkgDescription.tex +++ b/CGAL_ipelets/doc_tex/CGAL_ipelets/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{CGAL Ipelets \label{Pkg:CGALIpelets}} -\ccPkgHowToCiteCgal{cgal:lp-gi-09} +\ccPkgHowToCiteCgal{cgal:lp-gi-10} \ccPkgSummary{This package provides a generic framework to easily write ipelets (plug-in's) using \cgal{} for the the Ipe extensible drawing editor.} diff --git a/Circular_kernel_2/doc_tex/Circular_kernel_2/PkgDescription.tex b/Circular_kernel_2/doc_tex/Circular_kernel_2/PkgDescription.tex index c5130096c4e..d189a2b4a02 100644 --- a/Circular_kernel_2/doc_tex/Circular_kernel_2/PkgDescription.tex +++ b/Circular_kernel_2/doc_tex/Circular_kernel_2/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{2D Circular Geometry Kernel \label{Pkg:CircularKernel2}} -\ccPkgHowToCiteCgal{cgal:cpt-cgk2-09} +\ccPkgHowToCiteCgal{cgal:cpt-cgk2-10} \ccPkgSummary{ This package is an extension of the linear \cgal\ kernel. It offers functionalities on circles, circular arcs and line segments in the diff --git a/Circular_kernel_3/doc_tex/Circular_kernel_3/PkgDescription.tex b/Circular_kernel_3/doc_tex/Circular_kernel_3/PkgDescription.tex index a86b9534124..4c9382eede2 100644 --- a/Circular_kernel_3/doc_tex/Circular_kernel_3/PkgDescription.tex +++ b/Circular_kernel_3/doc_tex/Circular_kernel_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{3D Spherical Geometry Kernel \label{Pkg:SphericalKernel3}} -\ccPkgHowToCiteCgal{cgal:cclt-sgk3-09} +\ccPkgHowToCiteCgal{cgal:cclt-sgk3-10} \ccPkgSummary{ This package is an extension of the linear \cgal\ Kernel. It offers functionalities on spheres, circles, circular arcs and line segments, diff --git a/Circulator/doc_tex/Circulator/PkgDescription.tex b/Circulator/doc_tex/Circulator/PkgDescription.tex index 82825a47a14..fd3a0dfc060 100644 --- a/Circulator/doc_tex/Circulator/PkgDescription.tex +++ b/Circulator/doc_tex/Circulator/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Handles and Circulators\label{Pkg:HandlesAndCirculators}} -\ccPkgHowToCiteCgal{cgal:dksy-hc-09} +\ccPkgHowToCiteCgal{cgal:dksy-hc-10} \ccPkgSummary{This package descibes handles and circulators. They are related to iterators. Handles allow to dereference but neither to increment nor to decrement. diff --git a/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex b/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex index f5a897478ed..bee669587c7 100644 --- a/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex +++ b/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Convex Decomposition of Polyhedra\label{Pkg:ConvexDecomposition3}} -\ccPkgHowToCiteCgal{cgal:h-emspe-09} +\ccPkgHowToCiteCgal{cgal:h-emspe-10} \ccPkgSummary{ This packages provides a function for decomposing a bounded polyhedron into convex sub-polyhedra. The decomposition yields $O(r^2)$ convex diff --git a/Convex_hull_2/doc_tex/Convex_hull_2/PkgDescription.tex b/Convex_hull_2/doc_tex/Convex_hull_2/PkgDescription.tex index 1a0062fc9c2..0c80f7fa84b 100644 --- a/Convex_hull_2/doc_tex/Convex_hull_2/PkgDescription.tex +++ b/Convex_hull_2/doc_tex/Convex_hull_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Convex Hulls and Extreme Points \label{Pkg:ConvexHull2}} -\ccPkgHowToCiteCgal{cgal:hs-chep2-09} +\ccPkgHowToCiteCgal{cgal:hs-chep2-10} \ccPkgSummary{This package provides functions for computing convex hulls in two dimensions as well as functions for checking if sets of points are strongly convex are not. There are also diff --git a/Convex_hull_3/doc_tex/Convex_hull_3/PkgDescription.tex b/Convex_hull_3/doc_tex/Convex_hull_3/PkgDescription.tex index a93034103e1..000ff78b492 100644 --- a/Convex_hull_3/doc_tex/Convex_hull_3/PkgDescription.tex +++ b/Convex_hull_3/doc_tex/Convex_hull_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Convex Hulls\label{Pkg:ConvexHull3}} -\ccPkgHowToCiteCgal{cgal:hs-ch3-09} +\ccPkgHowToCiteCgal{cgal:hs-ch3-10} \ccPkgSummary{This package provides functions for computing convex hulls in three dimensions as well as functions for checking if sets of points are strongly convex or not. One can diff --git a/Convex_hull_d/doc_tex/Convex_hull_d/PkgDescription.tex b/Convex_hull_d/doc_tex/Convex_hull_d/PkgDescription.tex index 9c8d8bcefc6..73c6108a1a5 100644 --- a/Convex_hull_d/doc_tex/Convex_hull_d/PkgDescription.tex +++ b/Convex_hull_d/doc_tex/Convex_hull_d/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{dD Convex Hulls and Delaunay Triangulations\label{Pkg:ConvexHullD}} -\ccPkgHowToCiteCgal{cgal:hs-chdt3-09} +\ccPkgHowToCiteCgal{cgal:hs-chdt3-10} \ccPkgSummary{This package provides functions for computing convex hulls and Delaunay triangulations in $d$-dimensional Euclidean space.} diff --git a/Envelope_2/doc_tex/Envelope_2/PkgDescription.tex b/Envelope_2/doc_tex/Envelope_2/PkgDescription.tex index f7a9eed3525..46ec99decec 100644 --- a/Envelope_2/doc_tex/Envelope_2/PkgDescription.tex +++ b/Envelope_2/doc_tex/Envelope_2/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{2D Envelopes\label{Pkg:Envelope2}} -\ccPkgHowToCiteCgal{cgal:w-e2-09} +\ccPkgHowToCiteCgal{cgal:w-e2-10} \ccPkgSummary{ This package consits of functions that computes the lower (or upper) envelope of a set of arbitrary curves in 2D. The output is diff --git a/Envelope_3/doc_tex/Envelope_3/PkgDescription.tex b/Envelope_3/doc_tex/Envelope_3/PkgDescription.tex index cc14c58b024..3589934833e 100644 --- a/Envelope_3/doc_tex/Envelope_3/PkgDescription.tex +++ b/Envelope_3/doc_tex/Envelope_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{3D Envelopes\label{Pkg:Envelope3}} -\ccPkgHowToCiteCgal{cgal:mwz-e3-09} +\ccPkgHowToCiteCgal{cgal:mwz-e3-10} \ccPkgSummary{ This package consits of functions that compute the lower (or upper) envelope of a set of arbitrary surfaces in 3D. The output is diff --git a/Generator/doc_tex/Generator/PkgDescription.tex b/Generator/doc_tex/Generator/PkgDescription.tex index 53bba4fc46e..f607246ba71 100644 --- a/Generator/doc_tex/Generator/PkgDescription.tex +++ b/Generator/doc_tex/Generator/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Geometric Object Generators\label{Pkg:Generators}} -\ccPkgHowToCiteCgal{cgal:hhk-gog-09} +\ccPkgHowToCiteCgal{cgal:hhk-gog-10} \ccPkgSummary{This package provides a variety of generators for geometric objects. They are useful as synthetic test data sets, e.g.~for testing diff --git a/Geomview/doc_tex/Geomview/PkgDescription.tex b/Geomview/doc_tex/Geomview/PkgDescription.tex index 6fa783365f7..0b10e5067c8 100644 --- a/Geomview/doc_tex/Geomview/PkgDescription.tex +++ b/Geomview/doc_tex/Geomview/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Geomview\label{Pkg:Geomview}} -\ccPkgHowToCiteCgal{cgal:fp-gv-09} +\ccPkgHowToCiteCgal{cgal:fp-gv-10} \ccPkgSummary{ This package implements an interface to Geomview, an interactive 3D viewing program, diff --git a/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex b/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex index 0150b8bbbd2..b70c895f184 100644 --- a/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex +++ b/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{CGAL and the Qt Graphics View Framework \label{Pkg:GraphicsView}} -\ccPkgHowToCiteCgal{cgal:fr-cqgvf-09} +\ccPkgHowToCiteCgal{cgal:fr-cqgvf-10} \ccPkgSummary{This package provides classes for displaying \cgal\ objects and data structures in the \ccAnchor{http://doc.trolltech.com/4.4/graphicsview.html}{Qt 4 Graphics View Framework}.} diff --git a/HalfedgeDS/doc_tex/HalfedgeDS/PkgDescription.tex b/HalfedgeDS/doc_tex/HalfedgeDS/PkgDescription.tex index a78637f922a..995ded6a773 100644 --- a/HalfedgeDS/doc_tex/HalfedgeDS/PkgDescription.tex +++ b/HalfedgeDS/doc_tex/HalfedgeDS/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Halfedge Data Structures \label{Pkg:HDS}} -\ccPkgHowToCiteCgal{cgal:k-hds-09} +\ccPkgHowToCiteCgal{cgal:k-hds-10} \ccPkgSummary{A halfedge data structure is an edge-centered data structure capable of maintaining incidence information of vertices, edges and faces, for example for planar maps, polyhedra, or other orientable, diff --git a/Installation/doc_tex/Installation/PkgDescription.tex b/Installation/doc_tex/Installation/PkgDescription.tex index 08bf68c03d7..51286f0a2cf 100644 --- a/Installation/doc_tex/Installation/PkgDescription.tex +++ b/Installation/doc_tex/Installation/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Installation\label{Pkg:Installation}} -\ccPkgHowToCiteCgal{cgal:cr-i-09} +\ccPkgHowToCiteCgal{cgal:cr-i-10} \ccPkgSummary{ This chapter describes how to install CGAL. } diff --git a/Interpolation/doc_tex/Interpolation/PkgDescription.tex b/Interpolation/doc_tex/Interpolation/PkgDescription.tex index 675b326897b..c5832b20975 100644 --- a/Interpolation/doc_tex/Interpolation/PkgDescription.tex +++ b/Interpolation/doc_tex/Interpolation/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D and Surface Function Interpolation\label{Pkg:Interpolation2}} -\ccPkgHowToCiteCgal{cgal:f-i-09} +\ccPkgHowToCiteCgal{cgal:f-i-10} \ccPkgSummary{ This package implements different methods for scattered data interpolation: Given measures of a function on a set of discrete data diff --git a/Interval_skip_list/doc_tex/Interval_skip_list/PkgDescription.tex b/Interval_skip_list/doc_tex/Interval_skip_list/PkgDescription.tex index add2f111cd7..10f53112859 100644 --- a/Interval_skip_list/doc_tex/Interval_skip_list/PkgDescription.tex +++ b/Interval_skip_list/doc_tex/Interval_skip_list/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Interval Skip List\label{Pkg:IntervalSkipList}} -\ccPkgHowToCiteCgal{cgal:f-isl-09} +\ccPkgHowToCiteCgal{cgal:f-isl-10} \ccPkgSummary{An interval skip list is a data structure for finding all intervals that contain a point, and for stabbing queries, that is for answering the question whether a given point is contained in an diff --git a/Jet_fitting_3/doc_tex/Jet_fitting_3/PkgDescription.tex b/Jet_fitting_3/doc_tex/Jet_fitting_3/PkgDescription.tex index 8818b25ab0b..4e4e634fcd1 100644 --- a/Jet_fitting_3/doc_tex/Jet_fitting_3/PkgDescription.tex +++ b/Jet_fitting_3/doc_tex/Jet_fitting_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Estimation of Local Differential Properties \label{Pkg:Jet_fitting_3}} -\ccPkgHowToCiteCgal{cgal:pc-eldp-09} +\ccPkgHowToCiteCgal{cgal:pc-eldp-10} \ccPkgSummary{For a surface discretized as a point cloud or a mesh, it is desirable to estimate pointwise differential quantities. More diff --git a/Kernel_23/doc_tex/Kernel_23/PkgDescription.tex b/Kernel_23/doc_tex/Kernel_23/PkgDescription.tex index 2029db26b46..d8b23f767c8 100644 --- a/Kernel_23/doc_tex/Kernel_23/PkgDescription.tex +++ b/Kernel_23/doc_tex/Kernel_23/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D and 3D Linear Geometry Kernel\label{Pkg:Kernel23}} -\ccPkgHowToCiteCgal{cgal:bfghhkps-lgk23-09} +\ccPkgHowToCiteCgal{cgal:bfghhkps-lgk23-10} \ccPkgSummary{ This package contains kernels each containing objects of constant size, such as point, vector, direction, line, ray, segment, circle as well as predicates and constructions for these objects. The kernels diff --git a/Kernel_d/doc_tex/Kernel_d/PkgDescription.tex b/Kernel_d/doc_tex/Kernel_d/PkgDescription.tex index f0daa83cf67..dada96047e8 100644 --- a/Kernel_d/doc_tex/Kernel_d/PkgDescription.tex +++ b/Kernel_d/doc_tex/Kernel_d/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{dD Geometry Kernel\label{Pkg:KernelD}} -\ccPkgHowToCiteCgal{cgal:s-gkd-09} +\ccPkgHowToCiteCgal{cgal:s-gkd-10} \ccPkgSummary{The dD Kernel contains objects of constant size, such as point, vector, direction, line, ray, segment, circle in d dimensional Euclidean space, as well as predicates and constructions for these objects.} diff --git a/Kinetic_data_structures/doc_tex/Kinetic_data_structures/PkgDescription.tex b/Kinetic_data_structures/doc_tex/Kinetic_data_structures/PkgDescription.tex index 3c1b93bcff6..c55d9bb8f16 100644 --- a/Kinetic_data_structures/doc_tex/Kinetic_data_structures/PkgDescription.tex +++ b/Kinetic_data_structures/doc_tex/Kinetic_data_structures/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Kinetic Data Structures\label{Pkg:Kds}} -\ccPkgHowToCiteCgal{cgal:r-kds-09} +\ccPkgHowToCiteCgal{cgal:r-kds-10} \ccPkgSummary{ Kinetic data structures allow combinatorial structures to be maintained as the primitives move. The package provides implementations of kinetic data structures for Delaunay triangulations diff --git a/Kinetic_data_structures/doc_tex/Kinetic_framework/PkgDescription.tex b/Kinetic_data_structures/doc_tex/Kinetic_framework/PkgDescription.tex index 871b977c058..3f2cc03d537 100644 --- a/Kinetic_data_structures/doc_tex/Kinetic_framework/PkgDescription.tex +++ b/Kinetic_data_structures/doc_tex/Kinetic_framework/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Kinetic Framework\label{Pkg:KdsFramework}} -\ccPkgHowToCiteCgal{cgal:r-kdsf-09} +\ccPkgHowToCiteCgal{cgal:r-kdsf-10} \ccPkgSummary{ Kinetic data structures allow combinatorial geometric structures to be maintained as the primitives move. The package provides a framework to diff --git a/Manual/doc_tex/Introduction/PkgDescription.tex b/Manual/doc_tex/Introduction/PkgDescription.tex index 46a12662277..b85b7e71818 100644 --- a/Manual/doc_tex/Introduction/PkgDescription.tex +++ b/Manual/doc_tex/Introduction/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Introduction\label{Pkg:GeneralIntroduction}} -\ccPkgHowToCiteCgal{cgal:eb-gi-09} +\ccPkgHowToCiteCgal{cgal:eb-gi-10} \ccPkgSummary{ This chapter explains how the manual is organized, presents a ``Hello World'' program, and gives recommendations for further readings.} diff --git a/Manual/doc_tex/Manual/manual-3.6.bib b/Manual/doc_tex/Manual/manual-3.6.bib new file mode 100644 index 00000000000..98c1dbdfdf5 --- /dev/null +++ b/Manual/doc_tex/Manual/manual-3.6.bib @@ -0,0 +1,822 @@ +% please dont't modify the "arobase" string commands +% they are used by the scripts to create the "How to cite CGAL" web page +% thanks - Monique + +@string{ author_create_page = 0 } +@string{ category_create_page = 0 } +@string{ reduced_year_create_page = 0 } +@string{ complete_year_create_page = 0 } + +@string{ index_file_title = "How to cite CGAL" } +@string{ index_page_title = "How to cite CGAL" } + +@string{ complete_biblio_file_title = "CGAL Publications sorted by year" } +@string{ complete_biblio_page_title = "CGAL Publications sorted by year" } +@string{ filename_complete_biblio = "how_to_cite_cgal" } + +@string{ head_tag.end = "layout.html" } +%@string{ header_of_contents = "header_of_contents" } + +@string{ keyword_build_initials_index = 0 } +@string{ keyword_put_initials_in_index = 0 } + +@string{ keyword_write_bibtex_abstract = 0 } +@string{ complete_biblio_write_bibtex_abstract = 0 } + +@string{ disclaimer_2 = ""} +@STRING{ default_header_of_body = "" } +@STRING{ default_footer_of_contents = ""} +@string{ index_write_author = 0 } +@string{ keyword_write_author = 0 } +@string{ complete_biblio_write_author = 0 } + +@string{ index_write_date = 0 } +@string{ keyword_write_date = 0 } +@string{ complete_biblio_write_date = 0 } + +% ------------------------------------ +% almost the same as manual.bib, changed for 2007/CGAL 3.3 ... +% ------------------------------------ + + + +@book{ cgal:eb-10 +, title = "{CGAL} User and Reference Manual" +, author = "{The CGAL Project}" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, year = 2010 +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html" +} + + +@incollection{cgal:h-af-10 +, author = "Michael Hemmer" +, title = "Algebraic Foundations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations" +, year = 2010 +} + +@incollection{cgal:bht-ak-10 +, author = "Eric Berberich and Michael Hemmer and Sylvain Lazard and Luis Pe\~{n}aranda and Monique Teillaud" +, title = "Algebraic Kernel" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations" +, year = 2010 +} + +@incollection{cgal:hhkps-nt-10 +, author = "Michael Hemmer and Susan Hert and Lutz Kettner and Sylvain Pion and Stefan Schirra" +, title = "Number Types" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:NumberTypes" +, year = 2010 +} + +@incollection{cgal:h-p-10 +, author = "Michael Hemmer" +, title = "Polynomial" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polynomial" +, year = 2010 +} + +@incollection{cgal:h-ma-10 +, author = "Michael Hemmer" +, title = "Modular Arithmetic" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ModularArithmetic" +, year = 2010 +} + +@incollection{cgal:bfghhkps-lgk23-10 +, author = "Herv{\'e} Br{\"o}nnimann and Andreas Fabri and Geert-Jan Giezeman and Susan Hert and Michael Hoffmann and Lutz Kettner and Sylvain Pion and Stefan Schirra" +, title = "{2D} and {3D} Geometry Kernel" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Kernel23" +, year = 2010 +} + +@incollection{cgal:s-gkd-10 +, author = "Michael Seel" +, title = "{dD} Geometry Kernel" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:KernelD" +, year = 2010 +} + +@incollection{cgal:cpt-cgk2-10 +, author = "Pedro Machado Manh\~{a}es de Castro and Sylvain Pion and Monique Teillaud" +, title = "{2D} Circular Geometry Kernel" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:CircularKernel2" +, year = 2010 +} + +@incollection{cgal:cclt-sgk3-10 +, author = "Pedro Machado Manh\~{a}es de Castro and Fr{\'e}d{\'e}ric Cazals and S{\'e}bastien Loriot and Monique Teillaud" +, title = "{3D} Spherical Geometry Kernel" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SphericalKernel3" +, year = 2010 +} + +@incollection{cgal:hs-chep2-10 +, author = "Susan Hert and Stefan Schirra" +, title = "{2D} Convex Hulls and Extreme Points" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHull2" +, year = 2010 +} + +@incollection{cgal:hs-ch3-10 +, author = "Susan Hert and Stefan Schirra" +, title = "{3D} Convex Hulls" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHull3" +, year = 2010 +} + +@incollection{cgal:gw-p2-10 +, author = "Geert-Jan Giezeman and Wieger Wesselink" +, title = "{2D} Polygons" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polygon2" +, year = 2010 +} + +@incollection{cgal:h-pp2-10 +, author = "Susan Hert" +, title = "{2D} Polygon Partitioning" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PolygonPartitioning2" +, year = 2010 +} + +@incollection{cgal:hs-chdt3-10 +, author = "Susan Hert and Michael Seel" +, title = "{dD} Convex Hulls and {Delaunay} Triangulations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHullD" +, year = 2010 +} + +@incollection{cgal:k-ps-10 +, author = "Lutz Kettner" +, title = "{3D} Polyhedral Surfaces" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polyhedron" +, year = 2010 +} + +@incollection{cgal:k-hds-10 +, author = "Lutz Kettner" +, title = "Halfedge Data Structures" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:HDS" +, year = 2010 +} + +@incollection{cgal:fwzh-rbso2-10 +, author = "Efi Fogel and Ron Wein and Baruch Zukerman and Dan Halperin" +, title = "{2D} Regularized {Boolean} Set-Operations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BooleanSetOperations2" +, year = 2010 +} + +@incollection{cgal:w-rms2-10 +, author = "Ron Wein" +, title = "{2D} {Minkowski} Sums" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum2" +, year = 2010 +} + +@incollection{cgal:s-bonp2-10 +, author = "Michael Seel" +, title = "{2D} {Boolean} Operations on {Nef} Polygons" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Nef2" +, year = 2010 +} + +@incollection{cgal:hk-bonpes2-10 +, author = "Peter Hachenberger and Lutz Kettner" +, title = "{2D} {Boolean} Operations on {Nef} Polygons Embedded on the Sphere" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:NefS2" +, year = 2010 +} + +@incollection{cgal:hk-bonp3-10 +, author = "Peter Hachenberger and Lutz Kettner" +, title = "{3D} {Boolean} Operations on {Nef} Polyhedra" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Nef3" +, year = 2010 +} + +@incollection{cgal:h-emspe-10 +, author = "Peter Hachenberger" +, title = "Convex Decomposition of Polyhedra" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexDecomposition3" +, year = 2010 +} + +@incollection{cgal:h-msp3-10 +, author = "Peter Hachenberger" +, title = "{3D} {Minkowski} Sum of Polyhedra" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum3" +, year = 2010 +} + +@incollection{cgal:c-sspo2-10 +, author = "Fernando Cacciola" +, title = "{2D} Straight Skeleton and Polygon Offsetting" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:StraightSkeleton2" +, year = 2010 +} + +@incollection{cgal:wfzh-a2-10 +, author = "Ron Wein and Efi Fogel and Baruch Zukerman and Dan Halperin" +, title = "{2D} Arrangements" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Arrangement2" +, year = 2010 +} + +@incollection{cgal:wfz-ic2-10 +, author = "Baruch Zukerman and Ron Wein and Efi Fogel" +, title = "{2D} Intersection of Curves" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IntersectionOfCurves2" +, year = 2010 +} + +@incollection{cgal:p-sr2-10 +, author = "Eli Packer" +, title = "{2D} Snap Rounding" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SnapRounding2" +, year = 2010 +} + +@incollection{cgal:w-e2-10 +, author = "Ron Wein" +, title = "{2D} Envelopes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Envelope2" +, year = 2010 +} + +@incollection{cgal:mwz-e3-10 +, author = "Michal Meyerovitch and Ron Wein and Baruch Zukerman" +, title = "{3D} Envelopes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Envelope3" +, year = 2010 +} + +@incollection{cgal:y-t2-10 +, author = "Mariette Yvinec" +, title = "{2D} Triangulations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Triangulation2" +, year = 2010 +} + +@incollection{cgal:py-tds2-10 +, author = "Sylvain Pion and Mariette Yvinec" +, title = "{2D} Triangulation Data Structure" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:TDS2" +, year = 2010 +} + +@incollection{cgal:pt-t3-10 +, author = "Sylvain Pion and Monique Teillaud" +, title = "{3D} Triangulations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Triangulation3" +, year = 2010 +} + +@incollection{cgal:pt-tds3-10 +, author = "Sylvain Pion and Monique Teillaud" +, title = "{3D} Triangulation Data Structure" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:TDS3" +, year = 2010 +} + +@incollection{cgal:ct-pt3-10 +, author = "Manuel Caroli and Monique Teillaud" +, title = "{3D} Periodic Triangulations" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Periodic3Triangulation3" +, year = 2010 +} + +@incollection{cgal:d-as2-10 +, author = "Tran Kai Frank Da" +, title = "{2D} Alpha Shapes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlphaShape2" +, year = 2010 +} + +@incollection{cgal:dy-as3-10 +, author = "Tran Kai Frank Da and Mariette Yvinec" +, title = "{3D} Alpha Shapes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlphaShapes3" +, year = 2010 +} + +@incollection{cgal:k-sdg2-10 +, author = "Menelaos Karavelas" +, title = "{2D} Segment {Delaunay} Graphs" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SegmentDelaunayGraph2" +, year = 2010 +} + +@incollection{cgal:ky-ag2-10 +, author = "Menelaos Karavelas and Mariette Yvinec" +, title = "{2D} {Apollonius} Graphs ({Delaunay} Graphs of Disks)" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ApolloniusGraph2" +, year = 2010 +} + +@incollection{cgal:k-vda2-10 +, author = "Menelaos Karavelas" +, title = "{2D} {Voronoi} Diagram Adaptor" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:VoronoiDiagramAdaptor2" +, Year = 2010 +} + +@incollection{cgal:r-ctm2-10 +, author = "Laurent Rineau" +, title = "{2D} Conforming Triangulations and Meshes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Mesh2" +, year = 2010 +} + +@incollection{cgal:ry-smg-10 +, author = "Laurent Rineau and Mariette Yvinec" +, title = "{3D} Surface Mesh Generation" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceMesher3" +, year = 2010 +} + +@incollection{cgal:asg-srps-10 +, author = "Pierre Alliez and Laurent Saboret and Gael Guennebaud" +, title = "Surface Reconstruction from Point Sets" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceReconstructionFromPointSets" +, year = 2010 +} + +@incollection{cgal:k-ssm3-10 +, author = "Nico Kruithof" +, title = "{3D} Skin Surface Meshing" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SkinSurface3" +, year = 2010 +} + +@incollection{cgal:rty-m3-10 +, author = "Laurent Rineau and St\'ephane Tayeb and Mariette Yvinec" +, title = "{3D} Mesh Generation" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Mesh_3" +, year = 2010 +} + +@incollection{cgal:s-ssm2-10 +, author = "Le-Jeng Andy Shiue" +, title = "{3D} Surface Subdivision Methods" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceSubdivisionMethods3" +, year = 2010 +} + +@incollection{cgal:c-tsms-10 +, author = "Fernando Cacciola" +, title = "Triangulated Surface Mesh Simplification" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceMeshSimplification" +, year = 2010 +} + +@incollection{cgal:sal-pptsm2-10 +, author = "Laurent Saboret and Pierre Alliez and Bruno L\'evy" +, title = "Planar Parameterization of Triangulated Surface Meshes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceParameterization" +, year = 2010 +} + +@incollection{cgal:b-ss2-10 +, author = "Matthias B\"asken" +, title = "{2D} Range and Neighbor Search" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PointSet2" +, year = 2010 +} + +@incollection{cgal:n-rstd-10 +, author = "Gabriele Neyer" +, title = "{dD} Range and Segment Trees" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:RangeSegmentTreesD" +, year = 2010 +} + +@incollection{cgal:f-isl-10 +, author = "Andreas Fabri" +, title = "Interval Skip List" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IntervalSkipList" +, year = 2010 +} + +@incollection{cgal:tf-ssd-10 +, author = "Hans Tangelder and Andreas Fabri" +, title = "{dD} Spatial Searching" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SpatialSearchingD" +, year = 2010 +} + +@incollection{cgal:kmz-isiobd-10 +, author = "Lutz Kettner and Andreas Meyer and Afra Zomorodian" +, title = "Intersecting Sequences of {dD} Iso-oriented Boxes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BoxIntersectionD" +, year = 2010 +} + +@incollection{cgal:fghhs-bv-10 +, author = "Kaspar Fischer and Bernd G{\"a}rtner and Thomas Herrmann and Michael Hoffmann and Sven Sch{\"o}nherr" +, title = "Bounding Volumes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BoundingVolumes" +, year = 2010 +} + +@incollection{cgal:fgsw-lqps-10 +, author = "Kaspar Fischer and Bernd G{\"a}rtner and Sven Sch{\"o}nherr and Frans Wessendorp" +, title = "Linear and Quadratic Programming Solver" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:QPSolver" +, year = 2010 +} + +@incollection{cgal:hp-ia-10 +, author = "Michael Hoffmann and Eli Packer" +, title = "Inscribed Areas" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:InscribedAreas" +, year = 2010 +} + +@incollection{cgal:fghhs-od-10 +, author = "Kaspar Fischer and Bernd G{\"a}rtner and Thomas Herrmann and Michael Hoffmann + and Sven Sch{\"o}nherr" +, title = "Optimal Distances" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:OptimalDistances" +, year = 2010 +} + +@incollection{cgal:f-i-10 +, author = "Julia Fl{\"o}totto" +, title = "{2D} and Surface Function Interpolation" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Interpolation2" +, year = 2010 +} + +@incollection{cgal:ap-pcad-10 +, author = "Pierre Alliez and Sylvain Pion and Ankit Gupta" +, title = "Principal Component Analysis" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PrincipalComponentAnalysisD" +, year = 2010 +} + +@incollection{cgal:m-ps-10 +, author = "Abdelkrim Mebarki" +, title = "{2D} Placement of Streamlines" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PlacementOfStreamlines2" +, year = 2010 +} + +@incollection{cgal:cp-arutsm-10 +, author = "Marc Pouget and Fr\'ed\'eric Cazals" +, title = "Approximation of Ridges and Umbilics on Triangulated Surface Meshes" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Ridges_3" +, year = 2010 +} + +@incollection{cgal:pc-eldp-10 +, author = "Marc Pouget and Fr\'ed\'eric Cazals" +, title = "Estimation of Local Differential Properties" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Jet_fitting_3" +, year = 2010 +} + +@incollection{cgal:ass-psp-10 +, author = "Pierre Alliez and Laurent Saboret and Nader Salman" +, title = "Point Set Processing" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PointSetProcessing" +, year = 2010 +} + +@incollection{cgal:r-kds-10 +, author = "Daniel Russel" +, title = "Kinetic Data Structures" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Kds" +, year = 2010 +} + +@incollection{cgal:r-kdsf-10 +, author = "Daniel Russel" +, title = "Kinetic Framework" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:KdsFramework" +, year = 2010 +} + +@incollection{cgal:cfw-cbgl-10 +, author = "Andreas Fabri and Fernando Cacciola and Ron Wein" +, title = "{CGAL} and the {Boost} Graph Library" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BGL" +, year = 2010 +} + +@incollection{cgal:fs-cbpm-10 +, author = "Andreas Fabri and Laurent Saboret" +, title = "{CGAL} and {Boost} Property Maps" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Property_map" +, year = 2010 +} + +@incollection{cgal:d-ss-10 +, author = "Christophe Delage" +, title = "Spatial Sorting" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SpatialSorting" +, year = 2010 +} + +@incollection{cgal:atw-aabb-10 +, author = "Pierre Alliez and St\'ephane Tayeb and Camille Wormser" +, title = "AABB Tree" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AABB_tree" +, year = 2010 +} + +@incollection{cgal:h-msms-10 +, author = "Michael Hoffmann" +, title = "Monotone and Sorted Matrix Search" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MatrixSearch" +, year = 2010 +} + +@incollection{cgal:hkpw-se-10 +, author = "Michael Hoffmann and Lutz Kettner and Sylvain Pion and Ron Wein" +, title = "STL Extensions for {CGAL}" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:StlExtension" +, year = 2010 +} + +@incollection{cgal:dksy-hc-10 +, author = "Olivier Devillers and Lutz Kettner and Michael Seel and Mariette Yvinec" +, title = "Handles and Circulators" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:HandlesAndCirculators" +, year = 2010 +} + +@incollection{cgal:hhk-gog-10 +, author = "Susan Hert and Michael Hoffmann and Lutz Kettner and Sven Sch\"onherr" +, title = "Geometric Object Generators" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Generators" +, year = 2010 +} + +@incollection{cgal:kps-pthum-10 +, author = "Lutz Kettner and Sylvain Pion and Michael Seel" +, title = "Profiling Tools Timers, Hash Map, Union-find, Modifiers" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ProfilingTools" +, year = 2010 +} + +@incollection{cgal:fgk-ios-10 +, author = "Andreas Fabri and Geert-Jan Giezeman and Lutz Kettner" +, title = "IO Streams" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IOstreams" +, year = 2010 +} + +@incollection{cgal:fp-gv-10 +, author = "Andreas Fabri and Sylvain Pion" +, title = "Geomview" +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Geomview" +, year = 2010 +} + +@incollection{cgal:fr-cqgvf-10 +, author = "Andreas Fabri and Laurent Rineau" +, title = "{CGAL} and the Qt Graphics View Framework " +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:GraphicsView" +, year = 2010 +} + +@incollection{cgal:lp-gi-10 +, author = "S\'ebastien Loriot and Sylvain Pion" +, title = "{CGAL} Ipelets " +, publisher = "{CGAL Editorial Board}" +, edition = "{3.6}" +, booktitle = "{CGAL} User and Reference Manual" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:CGALIpelets" +, year = 2010 +} diff --git a/Manual/doc_tex/Miscellany/PkgDescription.tex b/Manual/doc_tex/Miscellany/PkgDescription.tex index 3ed7ec60a87..7d58595516c 100644 --- a/Manual/doc_tex/Miscellany/PkgDescription.tex +++ b/Manual/doc_tex/Miscellany/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Profiling tools, Hash Map, Union-find, Modifiers \label{Pkg:ProfilingTools}} -\ccPkgHowToCiteCgal{cgal:kps-pthum-09} +\ccPkgHowToCiteCgal{cgal:kps-pthum-10} \ccPkgSummary{This package provides classes for profiling time and memory consumption, a hash map, a union find data structure and a modifier.} diff --git a/Manual/doc_tex/Preliminaries/PkgDescription.tex b/Manual/doc_tex/Preliminaries/PkgDescription.tex index 657840c21d3..8bbb66d14a9 100644 --- a/Manual/doc_tex/Preliminaries/PkgDescription.tex +++ b/Manual/doc_tex/Preliminaries/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Preliminaries\label{Pkg:Preliminaries}} -\ccPkgHowToCiteCgal{cgal:eb-gi-09} +\ccPkgHowToCiteCgal{cgal:eb-gi-10} \ccPkgSummary{ This chapter lists the licenses under which the \cgal\ datastructures and algorithms are distributed, diff --git a/Matrix_search/doc_tex/Matrix_search/PkgDescription.tex b/Matrix_search/doc_tex/Matrix_search/PkgDescription.tex index 2a65e994724..43ed10e9d60 100644 --- a/Matrix_search/doc_tex/Matrix_search/PkgDescription.tex +++ b/Matrix_search/doc_tex/Matrix_search/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Monotone and Sorted Matrix Search \label{Pkg:MatrixSearch}} -\ccPkgHowToCiteCgal{cgal:h-msms-09} +\ccPkgHowToCiteCgal{cgal:h-msms-10} \ccPkgSummary{ This package provides a matrix search framework, which is the underlying technique for the computation of all furthest neighbors for the vertices of a convex polygon, diff --git a/Mesh_2/doc_tex/Mesh_2/PkgDescription.tex b/Mesh_2/doc_tex/Mesh_2/PkgDescription.tex index 9b3fd772a76..3cfe3cca190 100644 --- a/Mesh_2/doc_tex/Mesh_2/PkgDescription.tex +++ b/Mesh_2/doc_tex/Mesh_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Conforming Triangulations and Meshes\label{Pkg:Mesh2}} -\ccPkgHowToCiteCgal{cgal:r-ctm2-09} +\ccPkgHowToCiteCgal{cgal:r-ctm2-10} \ccPkgSummary{ This package implements a Delaunay refinement algorithm to construct conforming triangulations and 2D meshes. diff --git a/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex b/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex index 436787bb960..30413a2aa0e 100644 --- a/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex +++ b/Mesh_3/doc_tex/Mesh_3/PkgDescription.tex @@ -15,7 +15,7 @@ The output is a 3D mesh of the domain volume and conformal surface meshes for all the boundary and subdividing surfaces. } -\ccPkgHowToCiteCgal{cgal:rty-m3-09} +\ccPkgHowToCiteCgal{cgal:rty-m3-10} \ccPkgDependsOn{\ccRef[3D Triangulations]{Pkg:Triangulation3}, \ccRef[2D Meshes]{Pkg:Mesh2}, \ccRef[3D Surface Mesh Generation]{Pkg:SurfaceMesher3} diff --git a/Minkowski_sum_2/doc_tex/Minkowski_sum_2/PkgDescription.tex b/Minkowski_sum_2/doc_tex/Minkowski_sum_2/PkgDescription.tex index bdd329dacb3..0987cba8c12 100644 --- a/Minkowski_sum_2/doc_tex/Minkowski_sum_2/PkgDescription.tex +++ b/Minkowski_sum_2/doc_tex/Minkowski_sum_2/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{2D Minkowski Sums\label{Pkg:MinkowskiSum2}} -\ccPkgHowToCiteCgal{cgal:w-rms2-09} +\ccPkgHowToCiteCgal{cgal:w-rms2-10} \ccPkgSummary{ This package consists of functions that compute the Minkowski sum of two simple straight-edge polygons in the plane. It also contains diff --git a/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex b/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex index a05e788dec0..3118d05e6b9 100644 --- a/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex +++ b/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{3D Minkowski Sum of Polyhedra\label{Pkg:MinkowskiSum3}} -\ccPkgHowToCiteCgal{cgal:h-msp3-09} +\ccPkgHowToCiteCgal{cgal:h-msp3-10} \ccPkgSummary{ This package provides a function, which computes the Minkowski sum of two point sets in $\mathbb{R}^3$. These point sets may consist of diff --git a/Modular_arithmetic/doc_tex/Modular_arithmetic/PkgDescription.tex b/Modular_arithmetic/doc_tex/Modular_arithmetic/PkgDescription.tex index ebb90b115d5..eca63b274d4 100644 --- a/Modular_arithmetic/doc_tex/Modular_arithmetic/PkgDescription.tex +++ b/Modular_arithmetic/doc_tex/Modular_arithmetic/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Modular Arithmetic \label{Pkg:ModularArithmetic}} -\ccPkgHowToCiteCgal{cgal:h-ma-09} +\ccPkgHowToCiteCgal{cgal:h-ma-10} \ccPkgSummary{ This package provides arithmetic over finite fields. The provided tools are in particular useful for filters based on diff --git a/Nef_2/doc_tex/Nef_2/PkgDescription.tex b/Nef_2/doc_tex/Nef_2/PkgDescription.tex index a64ad63f692..fad7c76a61b 100644 --- a/Nef_2/doc_tex/Nef_2/PkgDescription.tex +++ b/Nef_2/doc_tex/Nef_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Boolean Operations on Nef Polygons \label{Pkg:Nef2}} -\ccPkgHowToCiteCgal{cgal:s-bonp2-09} +\ccPkgHowToCiteCgal{cgal:s-bonp2-10} \ccPkgSummary{ A Nef polygon is any set that can be obtained from a finite set of open halfspaces by set complement and set intersection diff --git a/Nef_3/doc_tex/Nef_3/PkgDescription.tex b/Nef_3/doc_tex/Nef_3/PkgDescription.tex index 4bb58847978..2729ca678a0 100644 --- a/Nef_3/doc_tex/Nef_3/PkgDescription.tex +++ b/Nef_3/doc_tex/Nef_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Boolean Operations on Nef Polyhedra\label{Pkg:Nef3}} -\ccPkgHowToCiteCgal{cgal:hk-bonp3-09} +\ccPkgHowToCiteCgal{cgal:hk-bonp3-10} \ccPkgSummary{ 3D Nef polyhedra, are a boundary representation for cell-complexes bounded by halfspaces that diff --git a/Nef_S2/doc_tex/Nef_S2/PkgDescription.tex b/Nef_S2/doc_tex/Nef_S2/PkgDescription.tex index 3e7e6d51f1d..7b092691246 100644 --- a/Nef_S2/doc_tex/Nef_S2/PkgDescription.tex +++ b/Nef_S2/doc_tex/Nef_S2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Boolean Operations on Nef Polygons Embedded on the Sphere \label{Pkg:NefS2}} -\ccPkgHowToCiteCgal{cgal:hk-bonpes2-09} +\ccPkgHowToCiteCgal{cgal:hk-bonpes2-10} \ccPkgSummary{This package offers the equivalent to 2D Nef Polygons in the plane. Here halfplanes correspond to half spheres delimited by great circles. } diff --git a/Number_types/doc_tex/NumberTypeSupport/PkgDescription.tex b/Number_types/doc_tex/NumberTypeSupport/PkgDescription.tex index a8f813e3ad4..e146417e0e5 100644 --- a/Number_types/doc_tex/NumberTypeSupport/PkgDescription.tex +++ b/Number_types/doc_tex/NumberTypeSupport/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Number Types\label{Pkg:NumberTypes}} -\ccPkgHowToCiteCgal{cgal:hhkps-nt-09} +\ccPkgHowToCiteCgal{cgal:hhkps-nt-10} \ccPkgSummary{ This package provides number type concepts as well as number type classes and wrapper classes for third party number type libraries. diff --git a/Optimisation_doc/doc_tex/Bounding_volumes/PkgDescription.tex b/Optimisation_doc/doc_tex/Bounding_volumes/PkgDescription.tex index d46c2aed485..d6ad79ae92a 100644 --- a/Optimisation_doc/doc_tex/Bounding_volumes/PkgDescription.tex +++ b/Optimisation_doc/doc_tex/Bounding_volumes/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Bounding Volumes \label{Pkg:BoundingVolumes}} - \ccPkgHowToCiteCgal{cgal:fghhs-bv-09} + \ccPkgHowToCiteCgal{cgal:fghhs-bv-10} \ccPkgSummary{ This package provides algorithms for computing optimal bounding volumes of point sets. In d-dimensional space, the smallest enclosing sphere, diff --git a/Optimisation_doc/doc_tex/Inscribed_areas/PkgDescription.tex b/Optimisation_doc/doc_tex/Inscribed_areas/PkgDescription.tex index 056e14cd531..a61dc0a8252 100644 --- a/Optimisation_doc/doc_tex/Inscribed_areas/PkgDescription.tex +++ b/Optimisation_doc/doc_tex/Inscribed_areas/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Inscribed Areas \label{Pkg:InscribedAreas}} -\ccPkgHowToCiteCgal{cgal:hp-ia-09} +\ccPkgHowToCiteCgal{cgal:hp-ia-10} \ccPkgSummary{ This package provides algorithms for computing inscribed areas. The algorithms for computing inscribed areas are: the largest inscribed diff --git a/Partition_2/doc_tex/Partition_2/PkgDescription.tex b/Partition_2/doc_tex/Partition_2/PkgDescription.tex index 4c881a2cdf3..400f59f9cef 100644 --- a/Partition_2/doc_tex/Partition_2/PkgDescription.tex +++ b/Partition_2/doc_tex/Partition_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Polygon Partitioning \label{Pkg:PolygonPartitioning2}} -\ccPkgHowToCiteCgal{cgal:h-pp2-09} +\ccPkgHowToCiteCgal{cgal:h-pp2-10} \ccPkgSummary{This package provides functions for partitioning polygons in monotone or convex polygons. The algorithms can produce results with the minimal number of diff --git a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3/PkgDescription.tex b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3/PkgDescription.tex index fc4e26cf13f..83c7b17c6a4 100644 --- a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3/PkgDescription.tex +++ b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{3D Periodic Triangulations\label{Pkg:Periodic3Triangulation3}} -\ccPkgHowToCiteCgal{cgal:ct-pt3-09} +\ccPkgHowToCiteCgal{cgal:ct-pt3-10} \ccPkgSummary{ This package allows to build and handle triangulations of point sets in the three dimensional flat torus. Triangulations are built diff --git a/Point_set_2/doc_tex/Point_set_2/PkgDescription.tex b/Point_set_2/doc_tex/Point_set_2/PkgDescription.tex index 471b6c0fed4..f03d9d59c6e 100644 --- a/Point_set_2/doc_tex/Point_set_2/PkgDescription.tex +++ b/Point_set_2/doc_tex/Point_set_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Range and Neighbor Search\label{Pkg:PointSet2}} -\ccPkgHowToCiteCgal{cgal:b-ss2-09} +\ccPkgHowToCiteCgal{cgal:b-ss2-10} \ccPkgSummary{ This package supports circular, triangular, and isorectangular range search queries as well as (k) nearest neighbor search queries on 2D point sets. diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex index 380ab827f54..b5c9724b428 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Point Set Processing\label{Pkg:PointSetProcessing}} -\ccPkgHowToCiteCgal{cgal:ass-psp-09} +\ccPkgHowToCiteCgal{cgal:ass-psp-10} \ccPkgSummary{This \cgal\ component implements methods to analyze and process unorganized point sets. The input is an unorganized point set, possibly with normal attributes (unoriented or oriented). The point set can be analyzed to measure its average spacing, and processed through functions devoted diff --git a/Point_set_processing_3/doc_tex/Property_map/PkgDescription.tex b/Point_set_processing_3/doc_tex/Property_map/PkgDescription.tex index 6a2b7004f38..383b3693049 100644 --- a/Point_set_processing_3/doc_tex/Property_map/PkgDescription.tex +++ b/Point_set_processing_3/doc_tex/Property_map/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{CGAL and Boost Property Maps\label{Pkg:Property_map}} -\ccPkgHowToCiteCgal{cgal:fs-cbpm-09} +\ccPkgHowToCiteCgal{cgal:fs-cbpm-10} \ccPkgSummary{This package provides a framework for interfacing \cgal\ data structures with algorithms expecting Boost Property Maps.} diff --git a/Polygon/doc_tex/Polygon/PkgDescription.tex b/Polygon/doc_tex/Polygon/PkgDescription.tex index f5c9d07122d..e8398317127 100644 --- a/Polygon/doc_tex/Polygon/PkgDescription.tex +++ b/Polygon/doc_tex/Polygon/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Polygon\label{Pkg:Polygon2}} -\ccPkgHowToCiteCgal{cgal:gw-p2-09} +\ccPkgHowToCiteCgal{cgal:gw-p2-10} \ccPkgSummary{ This package provides a 2D polygon class and operations on sequences diff --git a/Polyhedron/doc_tex/Polyhedron/PkgDescription.tex b/Polyhedron/doc_tex/Polyhedron/PkgDescription.tex index 281bfa8160a..23d1a3a59e0 100644 --- a/Polyhedron/doc_tex/Polyhedron/PkgDescription.tex +++ b/Polyhedron/doc_tex/Polyhedron/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Polyhedral Surface \label{Pkg:Polyhedron}} -\ccPkgHowToCiteCgal{cgal:k-ps-09} +\ccPkgHowToCiteCgal{cgal:k-ps-10} \ccPkgSummary{Polyhedral surfaces in three dimensions are composed of vertices, edges, facets and an incidence relationship on them. The organization beneath is a halfedge data structure, which restricts the diff --git a/Polynomial/doc_tex/Polynomial/PkgDescription.tex b/Polynomial/doc_tex/Polynomial/PkgDescription.tex index 931d73bc73e..884cd5ed1e5 100644 --- a/Polynomial/doc_tex/Polynomial/PkgDescription.tex +++ b/Polynomial/doc_tex/Polynomial/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Polynomial \label{Pkg:Polynomial}} -\ccPkgHowToCiteCgal{cgal:h-p-09} +\ccPkgHowToCiteCgal{cgal:h-p-10} \ccPkgSummary{ This package introduces a concept \ccc{Polynomial_d}, a concept for multivariate polynomials in $d$ variables. Though the concept is written for an arbitrary diff --git a/Polytope_distance_d/doc_tex/Polytope_distance_d/PkgDescription.tex b/Polytope_distance_d/doc_tex/Polytope_distance_d/PkgDescription.tex index 8ef3747f4ce..59c9cdc7562 100644 --- a/Polytope_distance_d/doc_tex/Polytope_distance_d/PkgDescription.tex +++ b/Polytope_distance_d/doc_tex/Polytope_distance_d/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Optimal Distances \label{Pkg:OptimalDistances}} -\ccPkgHowToCiteCgal{cgal:fghhs-od-09} +\ccPkgHowToCiteCgal{cgal:fghhs-od-10} \ccPkgSummary{ This package provides algorithms for computing the distance between the convex hulls of two point sets in d-dimensional space, without diff --git a/Principal_component_analysis/doc_tex/Principal_component_analysis/PkgDescription.tex b/Principal_component_analysis/doc_tex/Principal_component_analysis/PkgDescription.tex index 2e2842785c8..8b2116a8671 100644 --- a/Principal_component_analysis/doc_tex/Principal_component_analysis/PkgDescription.tex +++ b/Principal_component_analysis/doc_tex/Principal_component_analysis/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Principal Component Analysis\label{Pkg:PrincipalComponentAnalysisD}} -\ccPkgHowToCiteCgal{cgal:ap-pcad-09} +\ccPkgHowToCiteCgal{cgal:ap-pcad-10} \ccPkgSummary{This package provides functions to compute global information about the shape of a set of 2D or 3D objects. It provides the computation of axis-aligned bounding boxes for point sets, and barycenters of weighted point sets. In addition, it provides computation of centroids (center of mass) and linear least squares fitting for point sets as well as for sets of other bounded objects. More specifically, it is possible to fit 2D lines to 2D segments, circles, disks, iso rectangles and triangles, as well as to fit 3D lines or 3D planes to 3D segments, triangles, iso cuboids, tetrahedra, spheres and balls. The common interface to these functions takes an iterator range of objects.} %\ccPkgDependsOn{} diff --git a/QP_solver/doc_tex/QP_solver/PkgDescription.tex b/QP_solver/doc_tex/QP_solver/PkgDescription.tex index 9a5f1701191..90b4159ce7d 100644 --- a/QP_solver/doc_tex/QP_solver/PkgDescription.tex +++ b/QP_solver/doc_tex/QP_solver/PkgDescription.tex @@ -1,7 +1,7 @@ \begin{ccPkgDescription}{Linear and Quadratic Programming Solver \label{Pkg:QPSolver}} -\ccPkgHowToCiteCgal{cgal:fgsw-lqps-09} +\ccPkgHowToCiteCgal{cgal:fgsw-lqps-10} \ccPkgSummary{This package contains algorithms for minimizing linear and convex quadratic functions over polyhedral domains, described by linear equations and inequalities. The algorithms are exact, i.e. the solution diff --git a/Ridges_3/doc_tex/Ridges_3/PkgDescription.tex b/Ridges_3/doc_tex/Ridges_3/PkgDescription.tex index f1291c68e2c..2bb8b84e590 100644 --- a/Ridges_3/doc_tex/Ridges_3/PkgDescription.tex +++ b/Ridges_3/doc_tex/Ridges_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Approximation of Ridges and Umbilics on Triangulated Surface Meshes \label{Pkg:Ridges_3}} - \ccPkgHowToCiteCgal{cgal:cp-arutsm-09} + \ccPkgHowToCiteCgal{cgal:cp-arutsm-10} \ccPkgSummary{Global features related to curvature extrema encode important informations used in segmentation, registration, diff --git a/STL_Extension/doc_tex/STL_Extension/PkgDescription.tex b/STL_Extension/doc_tex/STL_Extension/PkgDescription.tex index c3798e1acfb..7803a249413 100644 --- a/STL_Extension/doc_tex/STL_Extension/PkgDescription.tex +++ b/STL_Extension/doc_tex/STL_Extension/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{STL Extensions for CGAL\label{Pkg:StlExtension}} -\ccPkgHowToCiteCgal{cgal:hkpw-se-09} +\ccPkgHowToCiteCgal{cgal:hkpw-se-10} \ccPkgSummary{\cgal\ is designed in the spirit of the generic programming paradigm to work together with the Standard Template Library (\stl). This package provides diff --git a/SearchStructures/doc_tex/SearchStructures/PkgDescription.tex b/SearchStructures/doc_tex/SearchStructures/PkgDescription.tex index f3d4c5e44dc..c59ffef58d6 100644 --- a/SearchStructures/doc_tex/SearchStructures/PkgDescription.tex +++ b/SearchStructures/doc_tex/SearchStructures/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{dD Range and Segment Trees \label{Pkg:RangeSegmentTreesD}} -\ccPkgHowToCiteCgal{cgal:n-rstd-09} +\ccPkgHowToCiteCgal{cgal:n-rstd-10} \ccPkgSummary{Range and segment trees allow to perform window queries on point sets, and to enumerate all ranges enclosing a query point. The provided data structures are static and they are optimized for fast queries.} diff --git a/Segment_Delaunay_graph_2/doc_tex/Segment_Delaunay_graph_2/PkgDescription.tex b/Segment_Delaunay_graph_2/doc_tex/Segment_Delaunay_graph_2/PkgDescription.tex index a7c4040b277..b151ea6d256 100644 --- a/Segment_Delaunay_graph_2/doc_tex/Segment_Delaunay_graph_2/PkgDescription.tex +++ b/Segment_Delaunay_graph_2/doc_tex/Segment_Delaunay_graph_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Segment Delaunay Graphs \label{Pkg:SegmentDelaunayGraph2}} -\ccPkgHowToCiteCgal{cgal:k-sdg2-09} +\ccPkgHowToCiteCgal{cgal:k-sdg2-10} \ccPkgSummary{ An algorithm for computing the dual of a Voronoi diagram of a set of segments under the Euclidean metric. It is a generalization of the diff --git a/Skin_surface_3/doc_tex/Skin_surface_3/PkgDescription.tex b/Skin_surface_3/doc_tex/Skin_surface_3/PkgDescription.tex index 43e128e59a0..1c1d317ba92 100644 --- a/Skin_surface_3/doc_tex/Skin_surface_3/PkgDescription.tex +++ b/Skin_surface_3/doc_tex/Skin_surface_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{3D Skin Surface Meshing \label{Pkg:SkinSurface3}} -\ccPkgHowToCiteCgal{cgal:k-ssm3-09} +\ccPkgHowToCiteCgal{cgal:k-ssm3-10} \ccPkgSummary{ % This package allows to build a triangular mesh of a skin surface. Skin surfaces are used for modeling large molecules in biological diff --git a/Snap_rounding_2/doc_tex/Snap_rounding_2/PkgDescription.tex b/Snap_rounding_2/doc_tex/Snap_rounding_2/PkgDescription.tex index 2e58f202d6d..a00b2e9ef29 100644 --- a/Snap_rounding_2/doc_tex/Snap_rounding_2/PkgDescription.tex +++ b/Snap_rounding_2/doc_tex/Snap_rounding_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Snap Rounding \label{Pkg:SnapRounding2}} -\ccPkgHowToCiteCgal{cgal:p-sr2-09} +\ccPkgHowToCiteCgal{cgal:p-sr2-10} \ccPkgSummary{ Snap Rounding is a well known method for converting arbitrary-precision arrangements of segments into a fixed-precision diff --git a/Spatial_searching/doc_tex/Spatial_searching/PkgDescription.tex b/Spatial_searching/doc_tex/Spatial_searching/PkgDescription.tex index 940ce3ab9b4..36ed1e96be0 100644 --- a/Spatial_searching/doc_tex/Spatial_searching/PkgDescription.tex +++ b/Spatial_searching/doc_tex/Spatial_searching/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{dD Spatial Searching\label{Pkg:SpatialSearchingD}} -\ccPkgHowToCiteCgal{cgal:tf-ssd-09} +\ccPkgHowToCiteCgal{cgal:tf-ssd-10} \ccPkgSummary{ This package implements exact and approximate distance browsing by diff --git a/Spatial_sorting/doc_tex/Spatial_sorting/PkgDescription.tex b/Spatial_sorting/doc_tex/Spatial_sorting/PkgDescription.tex index e19199b0448..28e300e128c 100644 --- a/Spatial_sorting/doc_tex/Spatial_sorting/PkgDescription.tex +++ b/Spatial_sorting/doc_tex/Spatial_sorting/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Spatial Sorting \label{Pkg:SpatialSorting}} -\ccPkgHowToCiteCgal{cgal:d-ss-09} +\ccPkgHowToCiteCgal{cgal:d-ss-10} \ccPkgSummary{This package provides functions for sorting geometric objects in two and three dimensions, in order to improve efficiency of incremental geometric algorithms.} diff --git a/Straight_skeleton_2/doc_tex/Straight_skeleton_2/PkgDescription.tex b/Straight_skeleton_2/doc_tex/Straight_skeleton_2/PkgDescription.tex index 983b0251f8a..7da2b872ca6 100644 --- a/Straight_skeleton_2/doc_tex/Straight_skeleton_2/PkgDescription.tex +++ b/Straight_skeleton_2/doc_tex/Straight_skeleton_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Straight Skeleton and Polygon Offsetting \label{Pkg:StraightSkeleton2}} -\ccPkgHowToCiteCgal{cgal:c-sspo2-09} +\ccPkgHowToCiteCgal{cgal:c-sspo2-10} \ccPkgSummary{This package implements an algorithm to construct a halfedge data structure representing the straight skeleton in the interior of 2D polygons with holes and an algorithm to construct inward offset diff --git a/Stream_lines_2/doc_tex/Stream_lines_2/PkgDescription.tex b/Stream_lines_2/doc_tex/Stream_lines_2/PkgDescription.tex index 2c6b7e7b776..be4ffce7494 100644 --- a/Stream_lines_2/doc_tex/Stream_lines_2/PkgDescription.tex +++ b/Stream_lines_2/doc_tex/Stream_lines_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Placement of Streamlines\label{Pkg:PlacementOfStreamlines2}} -\ccPkgHowToCiteCgal{cgal:m-ps-09} +\ccPkgHowToCiteCgal{cgal:m-ps-10} \ccPkgSummary{ Visualizing vector fields is important for many application domains. A good way to do it is to generate streamlines that describe the flow diff --git a/Subdivision_method_3/doc_tex/Subdivision_method_3/PkgDescription.tex b/Subdivision_method_3/doc_tex/Subdivision_method_3/PkgDescription.tex index e784cebd092..61a3d668a0f 100644 --- a/Subdivision_method_3/doc_tex/Subdivision_method_3/PkgDescription.tex +++ b/Subdivision_method_3/doc_tex/Subdivision_method_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Surface Subdivision Methods\label{Pkg:SurfaceSubdivisionMethods3}} -\ccPkgHowToCiteCgal{cgal:s-ssm2-09} +\ccPkgHowToCiteCgal{cgal:s-ssm2-10} \ccPkgSummary{ Subdivision methods recursively refine a control mesh and generate points approximating the limit surface. This package consists of four diff --git a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/PkgDescription.tex b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/PkgDescription.tex index f2d54189459..0575b3d561d 100644 --- a/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/PkgDescription.tex +++ b/Surface_mesh_parameterization/doc_tex/Surface_mesh_parameterization/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Planar Parameterization of Triangulated Surface Meshes\label{Pkg:SurfaceParameterization}} -\ccPkgHowToCiteCgal{cgal:sal-pptsm2-09} +\ccPkgHowToCiteCgal{cgal:sal-pptsm2-10} \ccPkgSummary{Parameterizing a surface amounts to finding a one-to-one mapping from a suitable domain to the surface. In this package, we focus on triangulated surfaces that are homeomorphic to a disk and on piecewise diff --git a/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/PkgDescription.tex b/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/PkgDescription.tex index 9c414ebc52e..2cdb419b8c8 100644 --- a/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/PkgDescription.tex +++ b/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{Triangulated Surface Mesh Simplification\label{Pkg:SurfaceMeshSimplification}} -\ccPkgHowToCiteCgal{cgal:c-tsms-09} +\ccPkgHowToCiteCgal{cgal:c-tsms-10} \ccPkgSummary{This package provides an algorithm to simplify a triangulated surface mesh by edge collapsing. It is an implementation of the Turk/Lindstrom {\em memoryless} mesh simplification algorithm.} diff --git a/Surface_mesher/doc_tex/Surface_mesher/PkgDescription.tex b/Surface_mesher/doc_tex/Surface_mesher/PkgDescription.tex index d2fa0c8f12c..0e0956bbcf8 100644 --- a/Surface_mesher/doc_tex/Surface_mesher/PkgDescription.tex +++ b/Surface_mesher/doc_tex/Surface_mesher/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Surface Mesh Generation\label{Pkg:SurfaceMesher3}} -\ccPkgHowToCiteCgal{cgal:ry-smg-09} +\ccPkgHowToCiteCgal{cgal:ry-smg-10} \ccPkgSummary{ This package provides functions to generate surface meshes that interpolate diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex index 1d1a270f02f..06fa8dec4ef 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{Surface Reconstruction from Point Sets\label{Pkg:SurfaceReconstructionFromPointSets}} -\ccPkgHowToCiteCgal{cgal:asg-srps-09} +\ccPkgHowToCiteCgal{cgal:asg-srps-10} \ccPkgSummary{ This \cgal\ package implements two surface reconstruction methods. Both take as input a set of points with oriented normals and compute an implicit function. The \cgal\ surface mesh generator can then be used to extract an diff --git a/Triangulation_2/doc_tex/TDS_2/PkgDescription.tex b/Triangulation_2/doc_tex/TDS_2/PkgDescription.tex index a05f1d47690..bc0b9b8a1d1 100644 --- a/Triangulation_2/doc_tex/TDS_2/PkgDescription.tex +++ b/Triangulation_2/doc_tex/TDS_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Triangulation Data Structure \label{Pkg:TDS2}} -\ccPkgHowToCiteCgal{cgal:py-tds2-09} +\ccPkgHowToCiteCgal{cgal:py-tds2-10} \ccPkgSummary{ This package provides a data structure to store a two-dimensional triangulation that has the topology of a two-dimensional sphere. diff --git a/Triangulation_2/doc_tex/Triangulation_2/PkgDescription.tex b/Triangulation_2/doc_tex/Triangulation_2/PkgDescription.tex index a9d88eec76a..64be5236177 100644 --- a/Triangulation_2/doc_tex/Triangulation_2/PkgDescription.tex +++ b/Triangulation_2/doc_tex/Triangulation_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Triangulation \label{Pkg:Triangulation2}} -\ccPkgHowToCiteCgal{cgal:y-t2-09} +\ccPkgHowToCiteCgal{cgal:y-t2-10} \ccPkgSummary{This package allows to build and handle various triangulations for point sets two dimensions. Any CGAL triangulation covers the convex hull of its diff --git a/Triangulation_3/doc_tex/TriangulationDS_3/PkgDescription.tex b/Triangulation_3/doc_tex/TriangulationDS_3/PkgDescription.tex index 41212f73d61..c881d1bd775 100644 --- a/Triangulation_3/doc_tex/TriangulationDS_3/PkgDescription.tex +++ b/Triangulation_3/doc_tex/TriangulationDS_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Triangulation Data Structure \label{Pkg:TDS3}} -\ccPkgHowToCiteCgal{cgal:pt-tds3-09} +\ccPkgHowToCiteCgal{cgal:pt-tds3-10} \ccPkgSummary{ This package provides a data structure to store a three-dimensional triangulation that has the topology of a three-dimensional sphere. diff --git a/Triangulation_3/doc_tex/Triangulation_3/PkgDescription.tex b/Triangulation_3/doc_tex/Triangulation_3/PkgDescription.tex index 66b597f3d33..bf5ce84c5bb 100644 --- a/Triangulation_3/doc_tex/Triangulation_3/PkgDescription.tex +++ b/Triangulation_3/doc_tex/Triangulation_3/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{3D Triangulations\label{Pkg:Triangulation3}} -\ccPkgHowToCiteCgal{cgal:pt-t3-09} +\ccPkgHowToCiteCgal{cgal:pt-t3-10} \ccPkgSummary{ This package allows to build and handle triangulations for point sets in three dimensions. diff --git a/Voronoi_diagram_2/doc_tex/Voronoi_diagram_2/PkgDescription.tex b/Voronoi_diagram_2/doc_tex/Voronoi_diagram_2/PkgDescription.tex index cccb63cfdd0..7f2ac152999 100644 --- a/Voronoi_diagram_2/doc_tex/Voronoi_diagram_2/PkgDescription.tex +++ b/Voronoi_diagram_2/doc_tex/Voronoi_diagram_2/PkgDescription.tex @@ -1,6 +1,6 @@ \begin{ccPkgDescription}{2D Voronoi Diagram Adaptor \label{Pkg:VoronoiDiagramAdaptor2}} -\ccPkgHowToCiteCgal{cgal:k-vda2-09} +\ccPkgHowToCiteCgal{cgal:k-vda2-10} \ccPkgSummary{ The 2D Voronoi diagram adaptor package provides an adaptor that adapts a 2-dimensional triangulated Delaunay graph to the corresponding diff --git a/iostream/doc_tex/IOstream/PkgDescription.tex b/iostream/doc_tex/IOstream/PkgDescription.tex index 0b83e27f9f9..b1c1956ae60 100644 --- a/iostream/doc_tex/IOstream/PkgDescription.tex +++ b/iostream/doc_tex/IOstream/PkgDescription.tex @@ -1,5 +1,5 @@ \begin{ccPkgDescription}{IO Streams\label{Pkg:IOstreams}} -\ccPkgHowToCiteCgal{cgal:fgk-ios-09} +\ccPkgHowToCiteCgal{cgal:fgk-ios-10} \ccPkgSummary{All classes in the \cgal\ kernel provide input and output operators for IO streams. From a18dd5cd8118f60456a10a2d520476762b718fd6 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 14:03:10 +0000 Subject: [PATCH 013/128] Update the biblio shipped in manual tools, using manual-3.6.bib --- .../html/Biblio/how_to_cite_cgal.bib | 786 +++++++++--------- .../html/Biblio/how_to_cite_cgal.html | 634 +++++++------- 2 files changed, 725 insertions(+), 695 deletions(-) diff --git a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib index 34211b46c09..a18b0cab0ae 100644 --- a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib +++ b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib @@ -5,8 +5,8 @@ % % % automatically generated -% % bibtex2html /home/lrineau/trunk/Manual/doc_tex/Manual/manual-3.5.bib -% Date: Fri Dec 18 14:05:01 2009 +% % bibtex2html ../../../../Manual/doc_tex/Manual/manual-3.6.bib +% Date: Wed Jan 20 15:02:42 2010 % Author: lrineau % @@ -22,865 +22,877 @@ -@BOOK{cgal:eb-09, +@BOOK{cgal:eb-10, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{CGAL} User and Reference Manual}, - YEAR = {2009}, + YEAR = {2010}, AUTHOR = {{The CGAL Project}}, ALTEDITOR = {}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html}}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html}}, } -@INCOLLECTION{cgal:h-af-09, +@INCOLLECTION{cgal:h-af-10, AUTHOR = {Michael Hemmer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Algebraic Foundations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:AlgebraicFoundations}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlgebraicFoundations}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations}}, } -@INCOLLECTION{cgal:hhkps-nt-09, +@INCOLLECTION{cgal:bht-ak-10, + AUTHOR = {Eric Berberich and Michael Hemmer and Sylvain Lazard and + Luis Peñaranda and Monique Teillaud}, + BOOKTITLE = {{CGAL} User and Reference Manual}, + PUBLISHER = {{CGAL Editorial Board}}, + TITLE = {Algebraic Kernel}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlgebraicFoundations}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations}}, +} + +@INCOLLECTION{cgal:hhkps-nt-10, AUTHOR = {Michael Hemmer and Susan Hert and Lutz Kettner and Sylvain Pion and Stefan Schirra}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Number Types}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:NumberTypes}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:NumberTypes}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:NumberTypes}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:NumberTypes}}, } -@INCOLLECTION{cgal:h-p-09, +@INCOLLECTION{cgal:h-p-10, AUTHOR = {Michael Hemmer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Polynomial}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Polynomial}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Polynomial}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Polynomial}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polynomial}}, } -@INCOLLECTION{cgal:h-ma-09, +@INCOLLECTION{cgal:h-ma-10, AUTHOR = {Michael Hemmer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Modular Arithmetic}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ModularArithmetic}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ModularArithmetic}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ModularArithmetic}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ModularArithmetic}}, } -@INCOLLECTION{cgal:bfghhkps-lgk23-09, +@INCOLLECTION{cgal:bfghhkps-lgk23-10, AUTHOR = {Hervé Brönnimann and Andreas Fabri and Geert-Jan Giezeman and Susan Hert and Michael Hoffmann and Lutz Kettner and Sylvain Pion and Stefan Schirra}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} and {3D} Geometry Kernel}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Kernel23}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Kernel23}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Kernel23}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Kernel23}}, } -@INCOLLECTION{cgal:s-gkd-09, +@INCOLLECTION{cgal:s-gkd-10, AUTHOR = {Michael Seel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{dD} Geometry Kernel}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:KernelD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:KernelD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:KernelD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:KernelD}}, } -@INCOLLECTION{cgal:cpt-cgk2-09, +@INCOLLECTION{cgal:cpt-cgk2-10, AUTHOR = {de Castro, Pedro Machado Manhães and Sylvain Pion and Monique Teillaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Circular Geometry Kernel}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:CircularKernel2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:CircularKernel2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:CircularKernel2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:CircularKernel2}}, } -@INCOLLECTION{cgal:cclt-sgk3-09, +@INCOLLECTION{cgal:cclt-sgk3-10, AUTHOR = {de Castro, Pedro Machado Manhães and Frédéric Cazals and Sébastien Loriot and Monique Teillaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Spherical Geometry Kernel}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SphericalKernel3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SphericalKernel3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SphericalKernel3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SphericalKernel3}}, } -@INCOLLECTION{cgal:hs-chep2-09, +@INCOLLECTION{cgal:hs-chep2-10, AUTHOR = {Susan Hert and Stefan Schirra}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Convex Hulls and Extreme Points}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHull2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ConvexHull2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHull2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHull2}}, } -@INCOLLECTION{cgal:hs-ch3-09, +@INCOLLECTION{cgal:hs-ch3-10, AUTHOR = {Susan Hert and Stefan Schirra}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Convex Hulls}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHull3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ConvexHull3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHull3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHull3}}, } -@INCOLLECTION{cgal:gw-p2-09, +@INCOLLECTION{cgal:gw-p2-10, AUTHOR = {Geert-Jan Giezeman and Wieger Wesselink}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Polygons}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Polygon2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Polygon2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Polygon2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polygon2}}, } -@INCOLLECTION{cgal:h-pp2-09, +@INCOLLECTION{cgal:h-pp2-10, AUTHOR = {Susan Hert}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Polygon Partitioning}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:PolygonPartitioning2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:PolygonPartitioning2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:PolygonPartitioning2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PolygonPartitioning2}}, } -@INCOLLECTION{cgal:hs-chdt3-09, +@INCOLLECTION{cgal:hs-chdt3-10, AUTHOR = {Susan Hert and Michael Seel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{dD} Convex Hulls and {Delaunay} Triangulations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHullD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ConvexHullD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexHullD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexHullD}}, } -@INCOLLECTION{cgal:k-ps-09, +@INCOLLECTION{cgal:k-ps-10, AUTHOR = {Lutz Kettner}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Polyhedral Surfaces}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Polyhedron}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Polyhedron}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Polyhedron}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Polyhedron}}, } -@INCOLLECTION{cgal:k-hds-09, +@INCOLLECTION{cgal:k-hds-10, AUTHOR = {Lutz Kettner}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Halfedge Data Structures}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:HDS}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:HDS}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:HDS}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:HDS}}, } -@INCOLLECTION{cgal:fwzh-rbso2-09, +@INCOLLECTION{cgal:fwzh-rbso2-10, AUTHOR = {Efi Fogel and Ron Wein and Baruch Zukerman and Dan Halperin}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Regularized {Boolean} Set-Operations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:BooleanSetOperations2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:BooleanSetOperations2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:BooleanSetOperations2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BooleanSetOperations2}}, } -@INCOLLECTION{cgal:w-rms2-09, +@INCOLLECTION{cgal:w-rms2-10, AUTHOR = {Ron Wein}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} {Minkowski} Sums}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:MinkowskiSum2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:MinkowskiSum2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum2}}, } -@INCOLLECTION{cgal:s-bonp2-09, +@INCOLLECTION{cgal:s-bonp2-10, AUTHOR = {Michael Seel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} {Boolean} Operations on {Nef} Polygons}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Nef2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Nef2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Nef2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Nef2}}, } -@INCOLLECTION{cgal:hk-bonpes2-09, +@INCOLLECTION{cgal:hk-bonpes2-10, AUTHOR = {Peter Hachenberger and Lutz Kettner}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} {Boolean} Operations on {Nef} Polygons Embedded on the Sphere}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:NefS2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:NefS2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:NefS2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:NefS2}}, } -@INCOLLECTION{cgal:hk-bonp3-09, +@INCOLLECTION{cgal:hk-bonp3-10, AUTHOR = {Peter Hachenberger and Lutz Kettner}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} {Boolean} Operations on {Nef} Polyhedra}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Nef3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Nef3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Nef3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Nef3}}, } -@INCOLLECTION{cgal:h-emspe-09, +@INCOLLECTION{cgal:h-emspe-10, AUTHOR = {Peter Hachenberger}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Convex Decomposition of Polyhedra}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexDecomposition3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ConvexDecomposition3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ConvexDecomposition3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ConvexDecomposition3}}, } -@INCOLLECTION{cgal:h-msp3-09, +@INCOLLECTION{cgal:h-msp3-10, AUTHOR = {Peter Hachenberger}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} {Minkowski} Sum of Polyhedra}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:MinkowskiSum3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:MinkowskiSum3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MinkowskiSum3}}, } -@INCOLLECTION{cgal:c-sspo2-09, +@INCOLLECTION{cgal:c-sspo2-10, AUTHOR = {Fernando Cacciola}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Straight Skeleton and Polygon Offsetting}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:StraightSkeleton2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:StraightSkeleton2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:StraightSkeleton2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:StraightSkeleton2}}, } -@INCOLLECTION{cgal:wfzh-a2-09, +@INCOLLECTION{cgal:wfzh-a2-10, AUTHOR = {Ron Wein and Efi Fogel and Baruch Zukerman and Dan Halperin}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Arrangements}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Arrangement2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Arrangement2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Arrangement2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Arrangement2}}, } -@INCOLLECTION{cgal:wfz-ic2-09, +@INCOLLECTION{cgal:wfz-ic2-10, AUTHOR = {Baruch Zukerman and Ron Wein and Efi Fogel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Intersection of Curves}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:IntersectionOfCurves2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:IntersectionOfCurves2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:IntersectionOfCurves2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IntersectionOfCurves2}}, } -@INCOLLECTION{cgal:p-sr2-09, +@INCOLLECTION{cgal:p-sr2-10, AUTHOR = {Eli Packer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Snap Rounding}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SnapRounding2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SnapRounding2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SnapRounding2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SnapRounding2}}, } -@INCOLLECTION{cgal:w-e2-09, +@INCOLLECTION{cgal:w-e2-10, AUTHOR = {Ron Wein}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Envelopes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Envelope2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Envelope2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Envelope2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Envelope2}}, } -@INCOLLECTION{cgal:mwz-e3-09, +@INCOLLECTION{cgal:mwz-e3-10, AUTHOR = {Michal Meyerovitch and Ron Wein and Baruch Zukerman}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Envelopes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Envelope3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Envelope3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Envelope3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Envelope3}}, } -@INCOLLECTION{cgal:y-t2-09, +@INCOLLECTION{cgal:y-t2-10, AUTHOR = {Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Triangulations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Triangulation2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Triangulation2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Triangulation2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Triangulation2}}, } -@INCOLLECTION{cgal:py-tds2-09, +@INCOLLECTION{cgal:py-tds2-10, AUTHOR = {Sylvain Pion and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Triangulation Data Structure}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:TDS2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:TDS2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:TDS2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:TDS2}}, } -@INCOLLECTION{cgal:pt-t3-09, +@INCOLLECTION{cgal:pt-t3-10, AUTHOR = {Sylvain Pion and Monique Teillaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Triangulations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Triangulation3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Triangulation3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Triangulation3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Triangulation3}}, } -@INCOLLECTION{cgal:pt-tds3-09, +@INCOLLECTION{cgal:pt-tds3-10, AUTHOR = {Sylvain Pion and Monique Teillaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Triangulation Data Structure}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:TDS3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:TDS3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:TDS3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:TDS3}}, } -@INCOLLECTION{cgal:ct-pt3-09, +@INCOLLECTION{cgal:ct-pt3-10, AUTHOR = {Manuel Caroli and Monique Teillaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Periodic Triangulations}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Periodic3Triangulation3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Periodic3Triangulation3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Periodic3Triangulation3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Periodic3Triangulation3}}, } -@INCOLLECTION{cgal:d-as2-09, +@INCOLLECTION{cgal:d-as2-10, AUTHOR = {Tran Kai Frank Da}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Alpha Shapes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:AlphaShape2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:AlphaShape2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlphaShape2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlphaShape2}}, } -@INCOLLECTION{cgal:dy-as3-09, +@INCOLLECTION{cgal:dy-as3-10, AUTHOR = {Tran Kai Frank Da and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Alpha Shapes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:AlphaShapes3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:AlphaShapes3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlphaShapes3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlphaShapes3}}, } -@INCOLLECTION{cgal:k-sdg2-09, +@INCOLLECTION{cgal:k-sdg2-10, AUTHOR = {Menelaos Karavelas}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Segment {Delaunay} Graphs}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SegmentDelaunayGraph2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SegmentDelaunayGraph2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SegmentDelaunayGraph2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SegmentDelaunayGraph2}}, } -@INCOLLECTION{cgal:ky-ag2-09, +@INCOLLECTION{cgal:ky-ag2-10, AUTHOR = {Menelaos Karavelas and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} {Apollonius} Graphs ({Delaunay} Graphs of Disks)}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ApolloniusGraph2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ApolloniusGraph2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ApolloniusGraph2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ApolloniusGraph2}}, } -@INCOLLECTION{cgal:k-vda2-09, +@INCOLLECTION{cgal:k-vda2-10, AUTHOR = {Menelaos Karavelas}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} {Voronoi} Diagram Adaptor}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:VoronoiDiagramAdaptor2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:VoronoiDiagramAdaptor2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:VoronoiDiagramAdaptor2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:VoronoiDiagramAdaptor2}}, } -@INCOLLECTION{cgal:r-ctm2-09, +@INCOLLECTION{cgal:r-ctm2-10, AUTHOR = {Laurent Rineau}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Conforming Triangulations and Meshes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Mesh2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Mesh2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Mesh2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Mesh2}}, } -@INCOLLECTION{cgal:ry-smg-09, +@INCOLLECTION{cgal:ry-smg-10, AUTHOR = {Laurent Rineau and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Surface Mesh Generation}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceMesher3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SurfaceMesher3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceMesher3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceMesher3}}, } -@INCOLLECTION{cgal:asg-srps-09, +@INCOLLECTION{cgal:asg-srps-10, AUTHOR = {Pierre Alliez and Laurent Saboret and Gael Guennebaud}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Surface Reconstruction from Point Sets}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceReconstructionFromPointSets}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SurfaceReconstructionFromPointSets}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceReconstructionFromPointSets}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceReconstructionFromPointSets}}, } -@INCOLLECTION{cgal:k-ssm3-09, +@INCOLLECTION{cgal:k-ssm3-10, AUTHOR = {Nico Kruithof}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Skin Surface Meshing}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SkinSurface3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SkinSurface3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SkinSurface3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SkinSurface3}}, } -@INCOLLECTION{cgal:rty-m3-09, +@INCOLLECTION{cgal:rty-m3-10, AUTHOR = {Laurent Rineau and Stéphane Tayeb and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Mesh Generation}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Mesh\_3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Mesh_3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Mesh\_3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Mesh_3}}, } -@INCOLLECTION{cgal:s-ssm2-09, +@INCOLLECTION{cgal:s-ssm2-10, AUTHOR = {Le-Jeng Andy Shiue}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{3D} Surface Subdivision Methods}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceSubdivisionMethods3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SurfaceSubdivisionMethods3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceSubdivisionMethods3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceSubdivisionMethods3}}, } -@INCOLLECTION{cgal:c-tsms-09, +@INCOLLECTION{cgal:c-tsms-10, AUTHOR = {Fernando Cacciola}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Triangulated Surface Mesh Simplification}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceMeshSimplification}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SurfaceMeshSimplification}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceMeshSimplification}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceMeshSimplification}}, } -@INCOLLECTION{cgal:sal-pptsm2-09, +@INCOLLECTION{cgal:sal-pptsm2-10, AUTHOR = {Laurent Saboret and Pierre Alliez and Bruno Lévy}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Planar Parameterization of Triangulated Surface Meshes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceParameterization}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SurfaceParameterization}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SurfaceParameterization}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SurfaceParameterization}}, } -@INCOLLECTION{cgal:b-ss2-09, +@INCOLLECTION{cgal:b-ss2-10, AUTHOR = {Matthias Bäsken}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Range and Neighbor Search}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:PointSet2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:PointSet2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:PointSet2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PointSet2}}, } -@INCOLLECTION{cgal:n-rstd-09, +@INCOLLECTION{cgal:n-rstd-10, AUTHOR = {Gabriele Neyer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{dD} Range and Segment Trees}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:RangeSegmentTreesD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:RangeSegmentTreesD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:RangeSegmentTreesD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:RangeSegmentTreesD}}, } -@INCOLLECTION{cgal:f-isl-09, +@INCOLLECTION{cgal:f-isl-10, AUTHOR = {Andreas Fabri}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Interval Skip List}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:IntervalSkipList}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:IntervalSkipList}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:IntervalSkipList}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IntervalSkipList}}, } -@INCOLLECTION{cgal:tf-ssd-09, +@INCOLLECTION{cgal:tf-ssd-10, AUTHOR = {Hans Tangelder and Andreas Fabri}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{dD} Spatial Searching}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SpatialSearchingD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SpatialSearchingD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SpatialSearchingD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SpatialSearchingD}}, } -@INCOLLECTION{cgal:kmz-isiobd-09, +@INCOLLECTION{cgal:kmz-isiobd-10, AUTHOR = {Lutz Kettner and Andreas Meyer and Afra Zomorodian}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Intersecting Sequences of {dD} Iso-oriented Boxes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:BoxIntersectionD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:BoxIntersectionD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:BoxIntersectionD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BoxIntersectionD}}, } -@INCOLLECTION{cgal:fghhs-bv-09, +@INCOLLECTION{cgal:fghhs-bv-10, AUTHOR = {Kaspar Fischer and Bernd Gärtner and Thomas Herrmann and Michael Hoffmann and Sven Schönherr}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Bounding Volumes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:BoundingVolumes}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:BoundingVolumes}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:BoundingVolumes}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BoundingVolumes}}, } -@INCOLLECTION{cgal:fgsw-lqps-09, +@INCOLLECTION{cgal:fgsw-lqps-10, AUTHOR = {Kaspar Fischer and Bernd Gärtner and Sven Schönherr and Frans Wessendorp}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Linear and Quadratic Programming Solver}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:QPSolver}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:QPSolver}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:QPSolver}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:QPSolver}}, } -@INCOLLECTION{cgal:hp-ia-09, +@INCOLLECTION{cgal:hp-ia-10, AUTHOR = {Michael Hoffmann and Eli Packer}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Inscribed Areas}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:InscribedAreas}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:InscribedAreas}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:InscribedAreas}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:InscribedAreas}}, } -@INCOLLECTION{cgal:fghhs-od-09, +@INCOLLECTION{cgal:fghhs-od-10, AUTHOR = {Kaspar Fischer and Bernd Gärtner and Thomas Herrmann and Michael Hoffmann and Sven Schönherr}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Optimal Distances}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:OptimalDistances}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:OptimalDistances}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:OptimalDistances}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:OptimalDistances}}, } -@INCOLLECTION{cgal:f-i-09, +@INCOLLECTION{cgal:f-i-10, AUTHOR = {Julia Flötotto}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} and Surface Function Interpolation}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Interpolation2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Interpolation2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Interpolation2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Interpolation2}}, } -@INCOLLECTION{cgal:ap-pcad-09, +@INCOLLECTION{cgal:ap-pcad-10, AUTHOR = {Pierre Alliez and Sylvain Pion and Ankit Gupta}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Principal Component Analysis}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:PrincipalComponentAnalysisD}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:PrincipalComponentAnalysisD}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:PrincipalComponentAnalysisD}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PrincipalComponentAnalysisD}}, } -@INCOLLECTION{cgal:m-ps-09, +@INCOLLECTION{cgal:m-ps-10, AUTHOR = {Abdelkrim Mebarki}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{2D} Placement of Streamlines}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:PlacementOfStreamlines2}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:PlacementOfStreamlines2}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:PlacementOfStreamlines2}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PlacementOfStreamlines2}}, } -@INCOLLECTION{cgal:cp-arutsm-09, +@INCOLLECTION{cgal:cp-arutsm-10, AUTHOR = {Marc Pouget and Frédéric Cazals}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Approximation of Ridges and Umbilics on Triangulated Surface Meshes}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Ridges\_3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Ridges_3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Ridges\_3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Ridges_3}}, } -@INCOLLECTION{cgal:pc-eldp-09, +@INCOLLECTION{cgal:pc-eldp-10, AUTHOR = {Marc Pouget and Frédéric Cazals}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Estimation of Local Differential Properties}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Jet\_fitting\_3}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Jet_fitting_3}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Jet\_fitting\_3}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Jet_fitting_3}}, } -@INCOLLECTION{cgal:ass-psp-09, +@INCOLLECTION{cgal:ass-psp-10, AUTHOR = {Pierre Alliez and Laurent Saboret and Nader Salman}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Point Set Processing}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:PointSetProcessing}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:PointSetProcessing}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:PointSetProcessing}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:PointSetProcessing}}, } -@INCOLLECTION{cgal:r-kds-09, +@INCOLLECTION{cgal:r-kds-10, AUTHOR = {Daniel Russel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Kinetic Data Structures}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Kds}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Kds}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Kds}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Kds}}, } -@INCOLLECTION{cgal:r-kdsf-09, +@INCOLLECTION{cgal:r-kdsf-10, AUTHOR = {Daniel Russel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Kinetic Framework}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:KdsFramework}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:KdsFramework}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:KdsFramework}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:KdsFramework}}, } -@INCOLLECTION{cgal:cfw-cbgl-09, +@INCOLLECTION{cgal:cfw-cbgl-10, AUTHOR = {Andreas Fabri and Fernando Cacciola and Ron Wein}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{CGAL} and the Boost Graph Library}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:BGL}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:BGL}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:BGL}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:BGL}}, } -@INCOLLECTION{cgal:fs-cbpm-09, +@INCOLLECTION{cgal:fs-cbpm-10, AUTHOR = {Andreas Fabri and Laurent Saboret}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{CGAL} and Boost Property Maps}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Property\_map}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Property_map}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Property\_map}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Property_map}}, } -@INCOLLECTION{cgal:d-ss-09, +@INCOLLECTION{cgal:d-ss-10, AUTHOR = {Christophe Delage}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Spatial Sorting}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:SpatialSorting}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:SpatialSorting}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:SpatialSorting}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:SpatialSorting}}, } -@INCOLLECTION{cgal:atw-aabb-09, +@INCOLLECTION{cgal:atw-aabb-10, AUTHOR = {Pierre Alliez and Stéphane Tayeb and Camille Wormser}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {AABB Tree}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:AABB\_tree}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:AABB_tree}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AABB\_tree}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AABB_tree}}, } -@INCOLLECTION{cgal:h-msms-09, +@INCOLLECTION{cgal:h-msms-10, AUTHOR = {Michael Hoffmann}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Monotone and Sorted Matrix Search}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:MatrixSearch}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:MatrixSearch}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:MatrixSearch}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:MatrixSearch}}, } -@INCOLLECTION{cgal:hkpw-se-09, +@INCOLLECTION{cgal:hkpw-se-10, AUTHOR = {Michael Hoffmann and Lutz Kettner and Sylvain Pion and Ron Wein}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {STL Extensions for CGAL}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:StlExtension}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:StlExtension}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:StlExtension}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:StlExtension}}, } -@INCOLLECTION{cgal:dksy-hc-09, +@INCOLLECTION{cgal:dksy-hc-10, AUTHOR = {Olivier Devillers and Lutz Kettner and Michael Seel and Mariette Yvinec}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Handles and Circulators}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:HandlesAndCirculators}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:HandlesAndCirculators}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:HandlesAndCirculators}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:HandlesAndCirculators}}, } -@INCOLLECTION{cgal:hhk-gog-09, +@INCOLLECTION{cgal:hhk-gog-10, AUTHOR = {Susan Hert and Michael Hoffmann and Lutz Kettner and Sven Schönherr}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Geometric Object Generators}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Generators}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Generators}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Generators}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Generators}}, } -@INCOLLECTION{cgal:kps-pthum-09, +@INCOLLECTION{cgal:kps-pthum-10, AUTHOR = {Lutz Kettner and Sylvain Pion and Michael Seel}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Profiling Tools Timers, Hash Map, Union-find, Modifiers}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:ProfilingTools}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:ProfilingTools}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:ProfilingTools}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:ProfilingTools}}, } -@INCOLLECTION{cgal:fgk-ios-09, +@INCOLLECTION{cgal:fgk-ios-10, AUTHOR = {Andreas Fabri and Geert-Jan Giezeman and Lutz Kettner}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {IO Streams}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:IOstreams}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:IOstreams}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:IOstreams}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:IOstreams}}, } -@INCOLLECTION{cgal:fp-gv-09, +@INCOLLECTION{cgal:fp-gv-10, AUTHOR = {Andreas Fabri and Sylvain Pion}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {Geomview}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:Geomview}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:Geomview}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:Geomview}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:Geomview}}, } -@INCOLLECTION{cgal:fr-cqgvf-09, +@INCOLLECTION{cgal:fr-cqgvf-10, AUTHOR = {Andreas Fabri and Laurent Rineau}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{CGAL} and the Qt Graphics View Framework}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:GraphicsView}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:GraphicsView}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:GraphicsView}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:GraphicsView}}, } -@INCOLLECTION{cgal:lp-gi-09, +@INCOLLECTION{cgal:lp-gi-10, AUTHOR = {Sébastien Loriot and Sylvain Pion}, BOOKTITLE = {{CGAL} User and Reference Manual}, PUBLISHER = {{CGAL Editorial Board}}, TITLE = {{CGAL} Ipelets}, - YEAR = {2009}, - EDITION = {{3.5}}, - NOTE = {http\://www.cgal.org/Manual/3.5/doc\_html/cgal\_manual/packages.html\#Pkg\:CGALIpelets}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.5/doc_html/cgal_manual/packages.html#Pkg:CGALIpelets}}, + YEAR = {2010}, + EDITION = {{3.6}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:CGALIpelets}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:CGALIpelets}}, } diff --git a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html index eeb1c776d5b..1659c0d0a02 100644 --- a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html +++ b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html @@ -21,34 +21,52 @@ CGAL Manual Chapters
  1. -The CGAL Project. +The CGAL Project. CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:eb-09 - bibtex file] +[bibtex-key = cgal:eb-10 - bibtex file]


  2. -Michael Hemmer. +Michael Hemmer. Algebraic Foundations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-af-09 - bibtex file] +[bibtex-key = cgal:h-af-10 - bibtex file]


  3. -Michael Hemmer, +Eric Berberich, +Michael Hemmer, +Sylvain Lazard, +Luis Peñaranda, + and Monique Teillaud. +Algebraic Kernel. +In CGAL User and Reference Manual. +CGAL Editorial Board, +3.6 edition, +2010. +[WWW] +[bibtex-key = cgal:bht-ak-10 - bibtex file] + +
  4. +

    + + +
  5. +Michael Hemmer, Susan Hert, Lutz Kettner, Sylvain Pion, @@ -56,45 +74,45 @@ Sylvain Pion, Number Types. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hhkps-nt-09 - bibtex file] +[bibtex-key = cgal:hhkps-nt-10 - bibtex file]


  6. -Michael Hemmer. +Michael Hemmer. Polynomial. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-p-09 - bibtex file] +[bibtex-key = cgal:h-p-10 - bibtex file]


  7. -Michael Hemmer. +Michael Hemmer. Modular Arithmetic. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-ma-09 - bibtex file] +[bibtex-key = cgal:h-ma-10 - bibtex file]


  8. -Hervé Brönnimann, +Hervé Brönnimann, Andreas Fabri, Geert-Jan Giezeman, Susan Hert, @@ -105,684 +123,684 @@ Sylvain Pion, 2D and 3D Geometry Kernel. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:bfghhkps-lgk23-09 - bibtex file] +[bibtex-key = cgal:bfghhkps-lgk23-10 - bibtex file]


  9. -Michael Seel. +Michael Seel. dD Geometry Kernel. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:s-gkd-09 - bibtex file] +[bibtex-key = cgal:s-gkd-10 - bibtex file]


  10. -Pedro Machado Manhães de Castro, +Pedro Machado Manhães de Castro, Sylvain Pion, and Monique Teillaud. 2D Circular Geometry Kernel. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:cpt-cgk2-09 - bibtex file] +[bibtex-key = cgal:cpt-cgk2-10 - bibtex file]


  11. -Pedro Machado Manhães de Castro, +Pedro Machado Manhães de Castro, Frédéric Cazals, Sébastien Loriot, and Monique Teillaud. 3D Spherical Geometry Kernel. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:cclt-sgk3-09 - bibtex file] +[bibtex-key = cgal:cclt-sgk3-10 - bibtex file]


  12. -Susan Hert and Stefan Schirra. +Susan Hert and Stefan Schirra. 2D Convex Hulls and Extreme Points. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hs-chep2-09 - bibtex file] +[bibtex-key = cgal:hs-chep2-10 - bibtex file]


  13. -Susan Hert and Stefan Schirra. +Susan Hert and Stefan Schirra. 3D Convex Hulls. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hs-ch3-09 - bibtex file] +[bibtex-key = cgal:hs-ch3-10 - bibtex file]


  14. -Geert-Jan Giezeman and Wieger Wesselink. +Geert-Jan Giezeman and Wieger Wesselink. 2D Polygons. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:gw-p2-09 - bibtex file] +[bibtex-key = cgal:gw-p2-10 - bibtex file]


  15. -Susan Hert. +Susan Hert. 2D Polygon Partitioning. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-pp2-09 - bibtex file] +[bibtex-key = cgal:h-pp2-10 - bibtex file]


  16. -Susan Hert and Michael Seel. +Susan Hert and Michael Seel. dD Convex Hulls and Delaunay Triangulations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hs-chdt3-09 - bibtex file] +[bibtex-key = cgal:hs-chdt3-10 - bibtex file]


  17. -Lutz Kettner. +Lutz Kettner. 3D Polyhedral Surfaces. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:k-ps-09 - bibtex file] +[bibtex-key = cgal:k-ps-10 - bibtex file]


  18. -Lutz Kettner. +Lutz Kettner. Halfedge Data Structures. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:k-hds-09 - bibtex file] +[bibtex-key = cgal:k-hds-10 - bibtex file]


  19. -Efi Fogel, +Efi Fogel, Ron Wein, Baruch Zukerman, and Dan Halperin. 2D Regularized Boolean Set-Operations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fwzh-rbso2-09 - bibtex file] +[bibtex-key = cgal:fwzh-rbso2-10 - bibtex file]


  20. -Ron Wein. +Ron Wein. 2D Minkowski Sums. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:w-rms2-09 - bibtex file] +[bibtex-key = cgal:w-rms2-10 - bibtex file]


  21. -Michael Seel. +Michael Seel. 2D Boolean Operations on Nef Polygons. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:s-bonp2-09 - bibtex file] +[bibtex-key = cgal:s-bonp2-10 - bibtex file]


  22. -Peter Hachenberger and Lutz Kettner. +Peter Hachenberger and Lutz Kettner. 2D Boolean Operations on Nef Polygons Embedded on the Sphere. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hk-bonpes2-09 - bibtex file] +[bibtex-key = cgal:hk-bonpes2-10 - bibtex file]


  23. -Peter Hachenberger and Lutz Kettner. +Peter Hachenberger and Lutz Kettner. 3D Boolean Operations on Nef Polyhedra. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hk-bonp3-09 - bibtex file] +[bibtex-key = cgal:hk-bonp3-10 - bibtex file]


  24. -Peter Hachenberger. +Peter Hachenberger. Convex Decomposition of Polyhedra. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-emspe-09 - bibtex file] +[bibtex-key = cgal:h-emspe-10 - bibtex file]


  25. -Peter Hachenberger. +Peter Hachenberger. 3D Minkowski Sum of Polyhedra. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-msp3-09 - bibtex file] +[bibtex-key = cgal:h-msp3-10 - bibtex file]


  26. -Fernando Cacciola. +Fernando Cacciola. 2D Straight Skeleton and Polygon Offsetting. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:c-sspo2-09 - bibtex file] +[bibtex-key = cgal:c-sspo2-10 - bibtex file]


  27. -Ron Wein, +Ron Wein, Efi Fogel, Baruch Zukerman, and Dan Halperin. 2D Arrangements. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:wfzh-a2-09 - bibtex file] +[bibtex-key = cgal:wfzh-a2-10 - bibtex file]


  28. -Baruch Zukerman, +Baruch Zukerman, Ron Wein, and Efi Fogel. 2D Intersection of Curves. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:wfz-ic2-09 - bibtex file] +[bibtex-key = cgal:wfz-ic2-10 - bibtex file]


  29. -Eli Packer. +Eli Packer. 2D Snap Rounding. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:p-sr2-09 - bibtex file] +[bibtex-key = cgal:p-sr2-10 - bibtex file]


  30. -Ron Wein. +Ron Wein. 2D Envelopes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:w-e2-09 - bibtex file] +[bibtex-key = cgal:w-e2-10 - bibtex file]


  31. -Michal Meyerovitch, +Michal Meyerovitch, Ron Wein, and Baruch Zukerman. 3D Envelopes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:mwz-e3-09 - bibtex file] +[bibtex-key = cgal:mwz-e3-10 - bibtex file]


  32. -Mariette Yvinec. +Mariette Yvinec. 2D Triangulations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:y-t2-09 - bibtex file] +[bibtex-key = cgal:y-t2-10 - bibtex file]


  33. -Sylvain Pion and Mariette Yvinec. +Sylvain Pion and Mariette Yvinec. 2D Triangulation Data Structure. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:py-tds2-09 - bibtex file] +[bibtex-key = cgal:py-tds2-10 - bibtex file]


  34. -Sylvain Pion and Monique Teillaud. +Sylvain Pion and Monique Teillaud. 3D Triangulations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:pt-t3-09 - bibtex file] +[bibtex-key = cgal:pt-t3-10 - bibtex file]


  35. -Sylvain Pion and Monique Teillaud. +Sylvain Pion and Monique Teillaud. 3D Triangulation Data Structure. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:pt-tds3-09 - bibtex file] +[bibtex-key = cgal:pt-tds3-10 - bibtex file]


  36. -Manuel Caroli and Monique Teillaud. +Manuel Caroli and Monique Teillaud. 3D Periodic Triangulations. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:ct-pt3-09 - bibtex file] +[bibtex-key = cgal:ct-pt3-10 - bibtex file]


  37. -Tran Kai Frank Da. +Tran Kai Frank Da. 2D Alpha Shapes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:d-as2-09 - bibtex file] +[bibtex-key = cgal:d-as2-10 - bibtex file]


  38. -Tran Kai Frank Da and Mariette Yvinec. +Tran Kai Frank Da and Mariette Yvinec. 3D Alpha Shapes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:dy-as3-09 - bibtex file] +[bibtex-key = cgal:dy-as3-10 - bibtex file]


  39. -Menelaos Karavelas. +Menelaos Karavelas. 2D Segment Delaunay Graphs. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:k-sdg2-09 - bibtex file] +[bibtex-key = cgal:k-sdg2-10 - bibtex file]


  40. -Menelaos Karavelas and Mariette Yvinec. +Menelaos Karavelas and Mariette Yvinec. 2D Apollonius Graphs (Delaunay Graphs of Disks). In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:ky-ag2-09 - bibtex file] +[bibtex-key = cgal:ky-ag2-10 - bibtex file]


  41. -Menelaos Karavelas. +Menelaos Karavelas. 2D Voronoi Diagram Adaptor. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:k-vda2-09 - bibtex file] +[bibtex-key = cgal:k-vda2-10 - bibtex file]


  42. -Laurent Rineau. +Laurent Rineau. 2D Conforming Triangulations and Meshes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:r-ctm2-09 - bibtex file] +[bibtex-key = cgal:r-ctm2-10 - bibtex file]


  43. -Laurent Rineau and Mariette Yvinec. +Laurent Rineau and Mariette Yvinec. 3D Surface Mesh Generation. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:ry-smg-09 - bibtex file] +[bibtex-key = cgal:ry-smg-10 - bibtex file]


  44. -Pierre Alliez, +Pierre Alliez, Laurent Saboret, and Gael Guennebaud. Surface Reconstruction from Point Sets. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:asg-srps-09 - bibtex file] +[bibtex-key = cgal:asg-srps-10 - bibtex file]


  45. -Nico Kruithof. +Nico Kruithof. 3D Skin Surface Meshing. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:k-ssm3-09 - bibtex file] +[bibtex-key = cgal:k-ssm3-10 - bibtex file]


  46. -Laurent Rineau, +Laurent Rineau, Stéphane Tayeb, and Mariette Yvinec. 3D Mesh Generation. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:rty-m3-09 - bibtex file] +[bibtex-key = cgal:rty-m3-10 - bibtex file]


  47. -Le-Jeng Andy Shiue. +Le-Jeng Andy Shiue. 3D Surface Subdivision Methods. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:s-ssm2-09 - bibtex file] +[bibtex-key = cgal:s-ssm2-10 - bibtex file]


  48. -Fernando Cacciola. +Fernando Cacciola. Triangulated Surface Mesh Simplification. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:c-tsms-09 - bibtex file] +[bibtex-key = cgal:c-tsms-10 - bibtex file]


  49. -Laurent Saboret, +Laurent Saboret, Pierre Alliez, and Bruno Lévy. Planar Parameterization of Triangulated Surface Meshes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:sal-pptsm2-09 - bibtex file] +[bibtex-key = cgal:sal-pptsm2-10 - bibtex file]


  50. -Matthias Bäsken. +Matthias Bäsken. 2D Range and Neighbor Search. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:b-ss2-09 - bibtex file] +[bibtex-key = cgal:b-ss2-10 - bibtex file]


  51. -Gabriele Neyer. +Gabriele Neyer. dD Range and Segment Trees. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:n-rstd-09 - bibtex file] +[bibtex-key = cgal:n-rstd-10 - bibtex file]


  52. -Andreas Fabri. +Andreas Fabri. Interval Skip List. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:f-isl-09 - bibtex file] +[bibtex-key = cgal:f-isl-10 - bibtex file]


  53. -Hans Tangelder and Andreas Fabri. +Hans Tangelder and Andreas Fabri. dD Spatial Searching. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:tf-ssd-09 - bibtex file] +[bibtex-key = cgal:tf-ssd-10 - bibtex file]


  54. -Lutz Kettner, +Lutz Kettner, Andreas Meyer, and Afra Zomorodian. Intersecting Sequences of dD Iso-oriented Boxes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:kmz-isiobd-09 - bibtex file] +[bibtex-key = cgal:kmz-isiobd-10 - bibtex file]


  55. -Kaspar Fischer, +Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, @@ -790,48 +808,48 @@ Michael Hoffmann, Bounding Volumes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fghhs-bv-09 - bibtex file] +[bibtex-key = cgal:fghhs-bv-10 - bibtex file]


  56. -Kaspar Fischer, +Kaspar Fischer, Bernd Gärtner, Sven Schönherr, and Frans Wessendorp. Linear and Quadratic Programming Solver. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fgsw-lqps-09 - bibtex file] +[bibtex-key = cgal:fgsw-lqps-10 - bibtex file]


  57. -Michael Hoffmann and Eli Packer. +Michael Hoffmann and Eli Packer. Inscribed Areas. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hp-ia-09 - bibtex file] +[bibtex-key = cgal:hp-ia-10 - bibtex file]


  58. -Kaspar Fischer, +Kaspar Fischer, Bernd Gärtner, Thomas Herrmann, Michael Hoffmann, @@ -839,325 +857,325 @@ Michael Hoffmann, Optimal Distances. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fghhs-od-09 - bibtex file] +[bibtex-key = cgal:fghhs-od-10 - bibtex file]


  59. -Julia Flötotto. +Julia Flötotto. 2D and Surface Function Interpolation. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:f-i-09 - bibtex file] +[bibtex-key = cgal:f-i-10 - bibtex file]


  60. -Pierre Alliez, +Pierre Alliez, Sylvain Pion, and Ankit Gupta. Principal Component Analysis. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:ap-pcad-09 - bibtex file] +[bibtex-key = cgal:ap-pcad-10 - bibtex file]


  61. -Abdelkrim Mebarki. +Abdelkrim Mebarki. 2D Placement of Streamlines. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:m-ps-09 - bibtex file] +[bibtex-key = cgal:m-ps-10 - bibtex file]


  62. -Marc Pouget and Frédéric Cazals. +Marc Pouget and Frédéric Cazals. Approximation of Ridges and Umbilics on Triangulated Surface Meshes. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:cp-arutsm-09 - bibtex file] +[bibtex-key = cgal:cp-arutsm-10 - bibtex file]


  63. -Marc Pouget and Frédéric Cazals. +Marc Pouget and Frédéric Cazals. Estimation of Local Differential Properties. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:pc-eldp-09 - bibtex file] +[bibtex-key = cgal:pc-eldp-10 - bibtex file]


  64. -Pierre Alliez, +Pierre Alliez, Laurent Saboret, and Nader Salman. Point Set Processing. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:ass-psp-09 - bibtex file] +[bibtex-key = cgal:ass-psp-10 - bibtex file]


  65. -Daniel Russel. +Daniel Russel. Kinetic Data Structures. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:r-kds-09 - bibtex file] +[bibtex-key = cgal:r-kds-10 - bibtex file]


  66. -Daniel Russel. +Daniel Russel. Kinetic Framework. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:r-kdsf-09 - bibtex file] +[bibtex-key = cgal:r-kdsf-10 - bibtex file]


  67. -Andreas Fabri, +Andreas Fabri, Fernando Cacciola, and Ron Wein. CGAL and the Boost Graph Library. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:cfw-cbgl-09 - bibtex file] +[bibtex-key = cgal:cfw-cbgl-10 - bibtex file]


  68. -Andreas Fabri and Laurent Saboret. +Andreas Fabri and Laurent Saboret. CGAL and Boost Property Maps. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fs-cbpm-09 - bibtex file] +[bibtex-key = cgal:fs-cbpm-10 - bibtex file]


  69. -Christophe Delage. +Christophe Delage. Spatial Sorting. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:d-ss-09 - bibtex file] +[bibtex-key = cgal:d-ss-10 - bibtex file]


  70. -Pierre Alliez, +Pierre Alliez, Stéphane Tayeb, and Camille Wormser. AABB Tree. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:atw-aabb-09 - bibtex file] +[bibtex-key = cgal:atw-aabb-10 - bibtex file]


  71. -Michael Hoffmann. +Michael Hoffmann. Monotone and Sorted Matrix Search. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:h-msms-09 - bibtex file] +[bibtex-key = cgal:h-msms-10 - bibtex file]


  72. -Michael Hoffmann, +Michael Hoffmann, Lutz Kettner, Sylvain Pion, and Ron Wein. STL Extensions for CGAL. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hkpw-se-09 - bibtex file] +[bibtex-key = cgal:hkpw-se-10 - bibtex file]


  73. -Olivier Devillers, +Olivier Devillers, Lutz Kettner, Michael Seel, and Mariette Yvinec. Handles and Circulators. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:dksy-hc-09 - bibtex file] +[bibtex-key = cgal:dksy-hc-10 - bibtex file]


  74. -Susan Hert, +Susan Hert, Michael Hoffmann, Lutz Kettner, and Sven Schönherr. Geometric Object Generators. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:hhk-gog-09 - bibtex file] +[bibtex-key = cgal:hhk-gog-10 - bibtex file]


  75. -Lutz Kettner, +Lutz Kettner, Sylvain Pion, and Michael Seel. Profiling Tools Timers, Hash Map, Union-find, Modifiers. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:kps-pthum-09 - bibtex file] +[bibtex-key = cgal:kps-pthum-10 - bibtex file]


  76. -Andreas Fabri, +Andreas Fabri, Geert-Jan Giezeman, and Lutz Kettner. IO Streams. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fgk-ios-09 - bibtex file] +[bibtex-key = cgal:fgk-ios-10 - bibtex file]


  77. -Andreas Fabri and Sylvain Pion. +Andreas Fabri and Sylvain Pion. Geomview. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fp-gv-09 - bibtex file] +[bibtex-key = cgal:fp-gv-10 - bibtex file]


  78. -Andreas Fabri and Laurent Rineau. +Andreas Fabri and Laurent Rineau. CGAL and the Qt Graphics View Framework. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:fr-cqgvf-09 - bibtex file] +[bibtex-key = cgal:fr-cqgvf-10 - bibtex file]


  79. -Sébastien Loriot and Sylvain Pion. +Sébastien Loriot and Sylvain Pion. CGAL Ipelets. In CGAL User and Reference Manual. CGAL Editorial Board, -3.5 edition, -2009. +3.6 edition, +2010. [WWW] -[bibtex-key = cgal:lp-gi-09 - bibtex file] +[bibtex-key = cgal:lp-gi-10 - bibtex file]


  80. From 7ac430569d321dc922f6ed7948e1d6487aeb0a8b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 15:15:09 +0000 Subject: [PATCH 014/128] Merge from trunk: | New Revision: 53691 | Author: afabri | Date: 2010-01-20 16:12:13 +0100 (Wed, 20 Jan 2010) | | Log message: | | VC mixes up the local Ambient_dimension and CGAL::Ambient_dimension --- Triangulation_2/include/CGAL/Weighted_point.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Triangulation_2/include/CGAL/Weighted_point.h b/Triangulation_2/include/CGAL/Weighted_point.h index dca7a1cb6d5..5a574e32e6f 100644 --- a/Triangulation_2/include/CGAL/Weighted_point.h +++ b/Triangulation_2/include/CGAL/Weighted_point.h @@ -66,7 +66,7 @@ public: Weighted_point (const Tx &x, const Ty &y, typename boost::enable_if< boost::mpl::and_, boost::is_convertible, - boost::mpl::bool_::value == 2> > >::type* = 0) + boost::mpl::bool_::value == 2> > >::type* = 0) : Point(x, y), _weight(0) {} template < typename Tx, typename Ty, typename Tz > @@ -74,7 +74,7 @@ public: typename boost::enable_if< boost::mpl::and_, boost::is_convertible, boost::is_convertible, - boost::mpl::bool_::value == 3> > >::type* = 0) + boost::mpl::bool_::value == 3> > >::type* = 0) : Point(x, y, z), _weight(0) {} const Point & point() const From d3a7a479adc1fa9871b23715895d3e89456ce939 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 15:46:34 +0000 Subject: [PATCH 015/128] Fix the URL to Boost property map. --- .../doc_tex/Surface_mesh_simplification_ref/edge_collapse.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification_ref/edge_collapse.tex b/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification_ref/edge_collapse.tex index d26362b05df..4d04be64656 100644 --- a/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification_ref/edge_collapse.tex +++ b/Surface_mesh_simplification/doc_tex/Surface_mesh_simplification_ref/edge_collapse.tex @@ -98,7 +98,7 @@ Maps each {\em directed} edge in the surface into an unsigned integer number in the range \ccc{[0,num_edges(surface))}. \ccc{EdgeIndexMap} must be a -\ccAnchor{http://www.boost.org/libs/property_map/ReadablePropertyMap.html}{ReadablePropertyMap} +\ccAnchor{http://www.boost.org/libs/property_map/doc/ReadablePropertyMap.html}{ReadablePropertyMap} whose \ccc{key_type} is \ccc{boost::graph_traits::edge_descriptor} and whose \ccc{value_type} is @@ -118,7 +118,7 @@ Maps each {\em directed} edge in the surface into a Boolean value which indicates if the edge belongs to the boundary of the surface (facing the outside). \ccc{EdgeIsBorderMap} must be a -\ccAnchor{http://www.boost.org/libs/property_map/ReadablePropertyMap.html}{ReadablePropertyMap} +\ccAnchor{http://www.boost.org/libs/property_map/doc/ReadablePropertyMap.html}{ReadablePropertyMap} whose \ccc{key_type} is \ccc{boost::graph_traits::edge_descriptor} and whose \ccc{value_type} is \ccc{bool}. From d1313bd578750d58554f66510955fd38a863c5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Wed, 20 Jan 2010 16:01:31 +0000 Subject: [PATCH 016/128] Merge r53681 from trunk | Author: stayeb | Date: 2010-01-20 13:51:32 +0100 (Wed, 20 Jan 2010) | | Log message: | Fix FindBoost.cmake: | + fix compiler name (cmake 2.4.x) | + boost search is now performed in user defined directories first | (instead of in system default directories first) --- Installation/cmake/modules/FindBoost.cmake | 65 ++++++++++++++++------ 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/Installation/cmake/modules/FindBoost.cmake b/Installation/cmake/modules/FindBoost.cmake index 2ceec0a676c..cf29c31376d 100644 --- a/Installation/cmake/modules/FindBoost.cmake +++ b/Installation/cmake/modules/FindBoost.cmake @@ -254,7 +254,11 @@ MACRO(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION) STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION}) - SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) + IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) + SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION}) + ELSE (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) + SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) + ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) ENDMACRO() # @@ -484,12 +488,19 @@ ELSE (_boost_IN_CACHE) " _boost_PATH_SUFFIXES = ${_boost_PATH_SUFFIXES}") endif() - # Look for a standard boost header file. + # Look for a standard boost header file (search in user defined directories first) FIND_PATH(Boost_INCLUDE_DIR NAMES boost/config.hpp PATHS ${_boost_INCLUDE_SEARCH_DIRS} PATH_SUFFIXES ${_boost_PATH_SUFFIXES} - ) + NO_DEFAULT_PATH + ) + + FIND_PATH(Boost_INCLUDE_DIR + NAMES boost/config.hpp + PATH_SUFFIXES ${_boost_PATH_SUFFIXES} + ) + ENDIF( NOT Boost_INCLUDE_DIR ) # ------------------------------------------------------------------------ @@ -693,26 +704,46 @@ ELSE (_boost_IN_CACHE) ENDIF(WIN32) ENDIF( Boost_USE_STATIC_LIBS ) + # Find libraries (search in user defined directories first) + SET ( _boost_${UPPERCOMPONENT}_LIBRARY_RELEASE_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT} + ) + FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE - NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT} + NAMES ${_boost_${UPPERCOMPONENT}_LIBRARY_RELEASE_NAMES} PATHS ${_boost_LIBRARIES_SEARCH_DIRS} + NO_DEFAULT_PATH + ) + + FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE + NAMES ${_boost_${UPPERCOMPONENT}_LIBRARY_RELEASE_NAMES} + ) + + + SET ( _boost_${UPPERCOMPONENT}_LIBRARY_DEBUG_NAMES + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG} + ${Boost_LIB_PREFIX}boost_${COMPONENT}-${_boost_ABI_TAG} ) FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG - NAMES ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_COMPILER}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG}-${Boost_LIB_VERSION} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}-${_boost_ABI_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT}${_boost_MULTITHREADED}${_boost_STATIC_TAG}${_boost_ABI_TAG} - ${Boost_LIB_PREFIX}boost_${COMPONENT}-${_boost_ABI_TAG} + NAMES ${_boost_${UPPERCOMPONENT}_LIBRARY_DEBUG_NAMES} PATHS ${_boost_LIBRARIES_SEARCH_DIRS} + NO_DEFAULT_PATH + ) + + FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG + NAMES ${_boost_${UPPERCOMPONENT}_LIBRARY_DEBUG_NAMES} ) _Boost_ADJUST_LIB_VARS(${UPPERCOMPONENT}) From 73ae17cddbbe40037c3d206404553747f9b38eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Wed, 20 Jan 2010 16:29:25 +0000 Subject: [PATCH 017/128] Intersections_3 changes: new do_intersect() and intersection() overloads. --- Installation/CHANGES | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Installation/CHANGES b/Installation/CHANGES index 3c245870182..77b7df95a2c 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -13,6 +13,11 @@ CGAL 3.6 offers the following improvements and new functionality : * 2D/3D Regular triangulations : Weighted_point now has a constructor from Cartesian coordinates. +* 2D and 3D Geometry Kernel: + - Add new do_intersect() and intersection() overloads: + + do_intersect(Bbox_3, Bbox_3/Line_3/Ray_3/Segment_3) + + intersection(Triangle_3, Line_3/Ray_3/Segment_3) + * 3D Triangulations : - Regular_triangulation_3 : semi-static floating-point filters are now used in its predicates, which can speed up its construction by a factor of about 3 From c41516fd6f71877c607fcb4015b29a874130c600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Wed, 20 Jan 2010 16:37:26 +0000 Subject: [PATCH 018/128] Update history.tex: do_intersect(Bbox_3,...) and intersection(Triangle_3,...) contributors. --- Kernel_23/doc_tex/Kernel_23/history.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Kernel_23/doc_tex/Kernel_23/history.tex b/Kernel_23/doc_tex/Kernel_23/history.tex index 94a635cce8c..47059e252cf 100644 --- a/Kernel_23/doc_tex/Kernel_23/history.tex +++ b/Kernel_23/doc_tex/Kernel_23/history.tex @@ -48,7 +48,9 @@ kernel. Philippe Guigue has provided efficient intersection tests for 3D triangles. Andreas Fabri, Michael Hoffmann and Sylvain Pion have improved the support for the extensibility and adaptability of the kernel. Pedro Machado -Manh\~{a}es de Castro and Monique Teillaud introduced 3D circles. +Manh\~{a}es de Castro and Monique Teillaud introduced 3D circles. In 2010, +Pierre Alliez, St\'ephane Tayeb and Camille Wormser added intersection constructions +for 3D triangles and efficient intersection tests for bounding boxes. \subsection{Acknowledgment} From 6dabea1055d7eac5cd0349b854e189a32dc67018 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 16:38:53 +0000 Subject: [PATCH 019/128] merge from trunk: | ------------------------------------------------------------------------ | r53667 | penarand | 2010-01-19 10:37:26 +0100 (Tue, 19 Jan 2010) | 3 lines | | eliminated unused parameter warning | | | ------------------------------------------------------------------------ | r53670 | penarand | 2010-01-19 11:34:58 +0100 (Tue, 19 Jan 2010) | 4 lines | | eliminated unused parameter warning, by replacing Gmpfi::divides(n) by | !(Gmpfi::is_zero()) | | | ------------------------------------------------------------------------ | r53673 | penarand | 2010-01-20 11:53:32 +0100 (Wed, 20 Jan 2010) | 3 lines | | mentioned that RS depends on GMP 4.2 | | | ------------------------------------------------------------------------ | r53675 | hemmer | 2010-01-20 13:11:12 +0100 (Wed, 20 Jan 2010) | 2 lines | | typo | | ------------------------------------------------------------------------ | r53694 | hemmer | 2010-01-20 16:26:14 +0100 (Wed, 20 Jan 2010) | 2 lines | | added package illustration | | ------------------------------------------------------------------------ | r53695 | hemmer | 2010-01-20 16:33:57 +0100 (Wed, 20 Jan 2010) | 2 lines | | update | | ------------------------------------------------------------------------ | r53700 | teillaud | 2010-01-20 16:47:11 +0100 (Wed, 20 Jan 2010) | 2 lines | | small fixes | | ------------------------------------------------------------------------ | r53702 | hemmer | 2010-01-20 16:53:08 +0100 (Wed, 20 Jan 2010) | 2 lines | | 120x120120x120120x120120x120120x120120x120120x120120x120120x120120x120120x120120x120 | | ------------------------------------------------------------------------ --- .gitattributes | 1 + .../Algebraic_kernel_d/Algebraic_kernel_d.png | Bin 0 -> 1132 bytes .../Algebraic_kernel_d/PkgDescription.tex | 18 ++++++++-------- .../doc_tex/Algebraic_kernel_d/intro.tex | 8 +++---- .../include/CGAL/RS/algebraic_1.h | 13 +++--------- .../CGAL/RS/algebraic_1_constructors.h | 8 ++----- Algebraic_kernel_d/include/CGAL/RS/functors.h | 20 +++--------------- .../doc_tex/Installation/installation.tex | 4 ++-- .../doc_tex/NumberTypeSupport_ref/Gmpfi.tex | 8 ------- Number_types/include/CGAL/GMP/Gmpfi_type.h | 10 --------- Number_types/include/CGAL/Gmpfi.h | 2 +- 11 files changed, 25 insertions(+), 67 deletions(-) create mode 100644 Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/Algebraic_kernel_d.png diff --git a/.gitattributes b/.gitattributes index b28618c82a2..fcd6cc984d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -95,6 +95,7 @@ Algebraic_foundations/examples/Algebraic_foundations/interoperable.cpp -text Algebraic_foundations/include/CGAL/ipower.h -text Algebraic_foundations/package_info/Algebraic_foundations/maintainer -text Algebraic_foundations/test/Algebraic_foundations/ipower.cpp -text +Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/Algebraic_kernel_d.png -text Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/akrs1.tex -text Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/examples.tex -text Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/history.tex -text diff --git a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/Algebraic_kernel_d.png b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/Algebraic_kernel_d.png new file mode 100644 index 0000000000000000000000000000000000000000..dffb7849b2e1b9487a4e837d9f28edd954cb8988 GIT binary patch literal 1132 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(z7>k44ofy`glX(ebHw5^ExB>;a zxVQub1%-u$#l^*CWMmW+6qJ;dR8>_qG&J<|^z`-hjf{+pjg8IC&F$^&W2~(+&CN@V zj2s*soSd9oTwL7T+`PTL0~{PeLqj7XB2rRP($doM^76{d%lkAnXRE62W?)z#bEJ8jyunKNhZ?&{h-ZQA0+i&w2$ zwSN8j-Rsxy2a>yYpY7^8vUu_Tj*kB`XZ~Nc>i_QDXU?3tc=6)hyLa#3zyJTtng4h1 zzI*rXKM?%~x?*6!B|Xb;K${tpyxm;OkH}&M25w;xW@MN(M*=9wUgGKN z%6^Mcgx`eeu+YkK1_q{7PZ!6KjC*fqo%cIzz;kS^XNJ1Kbh!xv`U#pr#h%iI4-O<= z+NH4N!k+)L4gO8#6Ec@we1GBB)LGM>n%|x;yIhL3<))bc%bCQygk~md5sQWcVyt?B z32u$N968?=HaM-E6$q55j$meN)a5!;%)EU?fb^6d60FxW3Yh0OC_DfQzSrf5S$O1V zVxHXMR~79{pYI&t)w-hU71P5M{Xw|#5*jRICC?T|i6);z}tT%mqEOy;~m`E#L%^`8khOS0-YCb+fkVrjJX zic#fwlPwUj^wo{p&9}UEXWs1BIce+7(wfX_g@d<- zzbiRo{B%i$tF6J_FC`k4f0aZP0>j!~E@WQczwe?~-1;!4ipf`PxLzID^3T%v%FDa* z!SmN>hF_Y^_vedu-^oXdmYjaS>ZI1A*$zi%$JXqTxos*QsH`RA7JmG_<<1FQUB_P- z2bp<0uDqqQSHWr0_oVOa1yKt_cp9Cr_AutRoqwobTbEO$F0%aQ(`Nn6OtN{qi-dMN zt!3MC`(|yuw5~%a^OQZOfXJuE0C}Z%(*PmfpYHxgQJe y8(*_bH(fn3e(v@97vdk7;tp_EFzP2 #include #include -#include namespace CGAL{ @@ -77,19 +76,13 @@ public: Algebraic_1(const Gmpq&); Algebraic_1(const Gmpfr&); - // the only interesting constructor, parameterized with the gcd - // policy - Algebraic_1( - mpfi_srcptr, + // the only interesting constructor + Algebraic_1(mpfi_srcptr, const RS_polynomial_1&, int, int, mpfi_ptr, - mpfi_ptr, - boost::function2< - RS_polynomial_1, - RS_polynomial_1, - RS_polynomial_1>); + mpfi_ptr); // the another interesting variant Algebraic_1(mpfi_srcptr, diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h index d3f079b310c..30809b0c25f 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h @@ -202,11 +202,7 @@ Algebraic_1::Algebraic_1( int n, int m, mpfi_ptr prevroot, - mpfi_ptr nextroot, - boost::function2< - RS_polynomial_1, - RS_polynomial_1, - RS_polynomial_1> Gcd){ + mpfi_ptr nextroot){ mpfi_init(mpfi()); set_mpfi_ptr(i); set_pol(p); @@ -215,7 +211,7 @@ Algebraic_1::Algebraic_1( set_prev(prevroot); set_next(nextroot); // we don't evaluate in the sf part of p, since p is sf - //set_lefteval(RSSign::signat(sfpart_1(p),&i->left)); + // TODO: add assertion set_lefteval(RSSign::signat(p,&i->left)); } diff --git a/Algebraic_kernel_d/include/CGAL/RS/functors.h b/Algebraic_kernel_d/include/CGAL/RS/functors.h index 252c6fa05e3..8353b65e958 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/functors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/functors.h @@ -136,10 +136,6 @@ struct Solve_RS_1{ OutputIterator operator()(const Polynomial &p,OutputIterator res)const{ int nr,*m; mpfi_ptr *x; - boost::function2< - RS_polynomial_1, - RS_polynomial_1, - RS_polynomial_1> Gcd_fun=Gcd(); sqfrvec sfv=Sqfr()(p); x=(mpfi_ptr*)malloc(Sfpart()(p).get_degree()*sizeof(mpfi_ptr)); m=(int*)calloc(Sfpart()(p).get_degree(),sizeof(int)); @@ -161,8 +157,7 @@ struct Solve_RS_1{ for(int i=0;i Gcd_fun=Gcd(); if(known_to_be_square_free){ p.set_sf(); x=(mpfi_ptr*)malloc(p.get_degree()*sizeof(mpfi_ptr)); @@ -195,8 +186,7 @@ struct Solve_RS_1{ for(int i=0;i Gcd_fun=Gcd(); mpfi_init(i); mpfr_set(&i->left,l.fr(),GMP_RNDD); mpfr_set(&i->right,u.fr(),GMP_RNDU); - return Algebraic(i,convert()(p),0,0,NULL,NULL,Gcd_fun); + return Algebraic(i,convert()(p),0,0,NULL,NULL); } }; // Construct_alg_1 diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index e4a71b40c04..2f45c0e44b9 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -1050,8 +1050,8 @@ Cmake will try to find RS in the standard header and library directories. When it is not automatically detected, the locations of the headers and library files must be specified using environment variables. -Given that RS depends on MPFI, the variables related to the latter -library may also need to be defined. +RS needs GMP 4.2 or later and MPFI 1.3.4 or later. The variables related +to the latter library may also need to be defined. {\ccTexHtml{\small}{} \renewcommand{\arraystretch}{1.3} diff --git a/Number_types/doc_tex/NumberTypeSupport_ref/Gmpfi.tex b/Number_types/doc_tex/NumberTypeSupport_ref/Gmpfi.tex index ad2d7f4194e..13e870e465d 100644 --- a/Number_types/doc_tex/NumberTypeSupport_ref/Gmpfi.tex +++ b/Number_types/doc_tex/NumberTypeSupport_ref/Gmpfi.tex @@ -273,14 +273,6 @@ of comparisons: % of all of them, and \ccc{false} otherwise.} %-------------------------------------------------- -%-------------------------------------------------- -% \ccMethod{Uncertain divides(const Gmpfi &n)const;} -% {Returns \ccc{true} if \ccVar~divides \ccc{n} (in the interval -% case, if it contains only positive or negative numbers), -% \ccc{false} if \ccc{n} is zero and \ccc{indeterminate} of \ccc{n} -% contains zero and other numbers.} -%-------------------------------------------------- - %-------------------------------------------------- % \ccMethod{Uncertain divides(const Gmpfi &n,Gmpfi &c, % Precision_type p=Gmpfr::get_default_precision())const;} diff --git a/Number_types/include/CGAL/GMP/Gmpfi_type.h b/Number_types/include/CGAL/GMP/Gmpfi_type.h index ff75e8b5e1a..4422788f848 100644 --- a/Number_types/include/CGAL/GMP/Gmpfi_type.h +++ b/Number_types/include/CGAL/GMP/Gmpfi_type.h @@ -310,7 +310,6 @@ _GMPFI_CONSTRUCTOR_FROM_SCALAR(Gmpq); Uncertain is_negative()const; Uncertain is_square()const; Uncertain is_square(Gmpfi&)const; - Uncertain divides(const Gmpfi&)const; Uncertain divides(const Gmpfi&, Gmpfi&, Gmpfi::Precision_type= @@ -655,15 +654,6 @@ Uncertain Gmpfi::is_square(Gmpfi &y)const{ return Uncertain::indeterminate(); } -inline -Uncertain Gmpfi::divides(const Gmpfi &n)const{ - if(mpfr_zero_p(&mpfi()->left)!=0 && mpfr_zero_p(&mpfi()->right)!=0) - return false; - if(mpfi_has_zero(mpfi())!=0) - return Uncertain::indeterminate(); - return true; -} - inline Uncertain Gmpfi::divides(const Gmpfi &n,Gmpfi &c,Gmpfi::Precision_type p )const{ diff --git a/Number_types/include/CGAL/Gmpfi.h b/Number_types/include/CGAL/Gmpfi.h index d7c84aed50e..fe1e173acf4 100644 --- a/Number_types/include/CGAL/Gmpfi.h +++ b/Number_types/include/CGAL/Gmpfi.h @@ -80,7 +80,7 @@ public Algebraic_structure_traits_base{ struct Divides: public std::binary_function{ Boolean operator()(const Type &d,const Type &n)const{ - return d.divides(n); + return !(d.is_zero()); }; Boolean operator()(const Type &d,const Type &n,Type &c)const{ return d.divides(n,c); From 93d6efd3ef8992f8987195d1c658b8d8e9a420c4 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 20 Jan 2010 20:36:47 +0000 Subject: [PATCH 020/128] Fix for Debian: Qt4 QGLViewer library is /usr/lib*/libqglviewer-qt4.so --- Installation/cmake/modules/FindQGLViewer.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/cmake/modules/FindQGLViewer.cmake b/Installation/cmake/modules/FindQGLViewer.cmake index 9904eed4eb2..9fc8955902b 100644 --- a/Installation/cmake/modules/FindQGLViewer.cmake +++ b/Installation/cmake/modules/FindQGLViewer.cmake @@ -15,7 +15,7 @@ find_path(QGLVIEWER_INCLUDE_DIR ) find_library(QGLVIEWER_LIBRARY_RELEASE - NAMES qglviewer QGLViewer QGLViewer2 + NAMES qglviewer-qt4 qglviewer QGLViewer QGLViewer2 PATHS /usr/lib /usr/local/lib ENV QGLVIEWERROOT From f165352d382626ee17a26e37d5ec45763a8810ae Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 21 Jan 2010 16:57:41 +0000 Subject: [PATCH 021/128] Merge from trunk: | New Revision: 53717 | Author: afabri | Date: 2010-01-21 17:51:49 +0100 (Thu, 21 Jan 2010) | | Log message: | | Add operator for MSVC 2005/2008 to avoid a matching ambiguity --- .../Regular_triangulation_filtered_traits_3.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Triangulation_3/include/CGAL/internal/Regular_triangulation_filtered_traits_3.h b/Triangulation_3/include/CGAL/internal/Regular_triangulation_filtered_traits_3.h index 3f8033907e0..bb44079366d 100644 --- a/Triangulation_3/include/CGAL/internal/Regular_triangulation_filtered_traits_3.h +++ b/Triangulation_3/include/CGAL/internal/Regular_triangulation_filtered_traits_3.h @@ -40,11 +40,20 @@ struct Weighted_converter_3 typedef typename Converter::Target_kernel Target_kernel; typedef typename Source_traits::Weighted_point_3 Source_wp; - typedef typename Target_traits::Weighted_point_3 Target_wp; + typedef typename Source_kernel::Point_3 Source_p; + typedef typename Target_kernel::Point_3 Target_p; + using Converter::operator(); + // Needed for MSVC 2005/2008 to avoid a matching ambiguity + Target_p + operator()(const Source_p &p) const + { + return Converter::operator()(p); + } + Target_wp operator()(const Source_wp &wp) const { From 1ae7ad873f87c41e3187e88beb9452c9f9c25b5c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 21 Jan 2010 17:06:33 +0000 Subject: [PATCH 022/128] Merge r53719 from trunk (VC workaround) --- Skin_surface_3/include/CGAL/Skin_surface_traits_3.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h b/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h index 29aee27bda5..45972919a54 100644 --- a/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h +++ b/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h @@ -177,12 +177,12 @@ template < typename FK > class Skin_surface_traits_3 < FK,true > : public Skin_surface_filtered_traits_3 < FK > { - typedef Skin_surface_filtered_traits_3 < FK > Base; + typedef Skin_surface_filtered_traits_3 < FK > Base_; public: typedef FK Kernel; Skin_surface_traits_3() {} - Skin_surface_traits_3(typename Base::FT s) : Base(s) {} + Skin_surface_traits_3(typename Base_::FT s) : Base_(s) {} }; From ab590f579910daddaf6692d80fba23223c8fca53 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 12:34:50 +0000 Subject: [PATCH 023/128] Merge from trunk: | New Revision: 53723 | Author: afabri | Date: 2010-01-22 13:28:06 +0100 (Fri, 22 Jan 2010) | | Log message: | | Just FK would be nicer, but VC 2005 messes it up with an FK in a base class when compiling degenerate_test.cpp | --- .../include/CGAL/Skin_surface_traits_3.h | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h b/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h index 45972919a54..71d524968be 100644 --- a/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h +++ b/Skin_surface_3/include/CGAL/Skin_surface_traits_3.h @@ -173,18 +173,21 @@ CGAL_END_NAMESPACE CGAL_BEGIN_NAMESPACE -template < typename FK > -class Skin_surface_traits_3 < FK,true > - : public Skin_surface_filtered_traits_3 < FK > +// Just FK would be nicer, but VC 2005 messes it up with an "FK" in a base class when compiling degenerate_test.cpp +template < typename Sst3FK > +class Skin_surface_traits_3 < Sst3FK,true > + : public Skin_surface_filtered_traits_3 < Sst3FK > { - typedef Skin_surface_filtered_traits_3 < FK > Base_; + typedef Skin_surface_filtered_traits_3 < Sst3FK > Base; public: - typedef FK Kernel; + typedef Sst3FK Kernel; Skin_surface_traits_3() {} - Skin_surface_traits_3(typename Base_::FT s) : Base_(s) {} + Skin_surface_traits_3(typename Base::FT s) : Base(s) {} + }; + CGAL_END_NAMESPACE #endif // CGAL_SKIN_SURFACE_TRAITS_3_H From 4c022eaa1301f4e2bee05706eae43a9409ba380b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 12:44:11 +0000 Subject: [PATCH 024/128] Cartesian gives warnings (about truncation from double to float). --- .../test/Surface_mesher/implicit_surface_mesher_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp b/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp index 6e69b26a82f..4e0148caeee 100644 --- a/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp +++ b/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp @@ -178,8 +178,8 @@ void test_with_tag(Tag = CGAL::Non_manifold_tag()) Tag>()(); #ifndef CGAL_SURFACE_MESHER_SINGLE_TEST - std::cout << "\nKERNEL CGAL::Filtered_kernel >...\n"; - Test_with_kernel >,Tag>()(); + std::cout << "\nKERNEL CGAL::Filtered_kernel >...\n"; + Test_with_kernel >,Tag>()(); Test_with_kernel >, Tag >()(DO_NOT_RUN); From c2c951118da88f62c400276f7e42557c21834642 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 13:11:32 +0000 Subject: [PATCH 025/128] Merge from CGAL-3.5-branch: | ------------------------------------------------------------------------ | r50580 | lsaboret | 2009-07-13 11:50:06 +0200 (Mon, 13 Jul 2009) | 1 line | | Removed APSS from CGAL 3.5 | ------------------------------------------------------------------------ --- .gitattributes | 3 - .../Surface_reconstruction_points_3/APSS.jpg | Bin 176952 -> 0 bytes .../PkgDescription.tex | 6 +- .../Surface_reconstruction_points_3/apss.tex | 106 --- .../introduction.tex | 4 +- .../Surface_reconstruction_points_3/main.tex | 1 - .../APSS_reconstruction_function.tex | 188 ----- .../Poisson_reconstruction_function.tex | 4 - .../intro.tex | 3 +- .../main.tex | 1 - .../CMakeLists.txt | 4 - .../cgal_test_with_cmake | 8 - .../CGAL/APSS_reconstruction_function.h | 741 ------------------ .../description.txt | 3 +- .../long_description.txt | 2 +- .../APSS_reconstruction_test.cmd | 1 - .../APSS_reconstruction_test.cpp | 346 -------- .../CMakeLists.txt | 3 - .../cgal_test_with_cmake | 4 - 19 files changed, 8 insertions(+), 1420 deletions(-) delete mode 100644 Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/APSS.jpg delete mode 100644 Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/apss.tex delete mode 100644 Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/APSS_reconstruction_function.tex delete mode 100644 Surface_reconstruction_points_3/include/CGAL/APSS_reconstruction_function.h delete mode 100644 Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cmd delete mode 100644 Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cpp diff --git a/.gitattributes b/.gitattributes index fcd6cc984d5..c3a915938f2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3633,10 +3633,8 @@ Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/resources/m Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/resources/plus.png -text svneol=unset#image/png Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/resources/simplification.png -text svneol=unset#image/png Surface_reconstruction_points_3/doc/reconstruction.pdf -text svneol=unset#application/pdf -Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/APSS.jpg -text svneol=unset#image/jpeg Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/Surface_reconstruction_images.ppt -text svneol=unset#application/vnd.ms-powerpoint Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/Surface_reconstruction_statistics.xls -text -Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/apss.tex -text Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/bimba.jpg -text svneol=unset#image/jpeg Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/contouring.tex -text Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/contouring_bad.jpg -text svneol=unset#image/jpeg @@ -3664,7 +3662,6 @@ Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_te Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/data/kitten.xyz -text Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/data/sphere926.pwn -text Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/poisson_reconstruction.cmd eol=lf -Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cmd eol=lf Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake eol=lf Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake.bat eol=crlf Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/data/ChineseDragon-10kv.off -text svneol=unset#application/octet-stream diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/APSS.jpg b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/APSS.jpg deleted file mode 100644 index 98e477c41524fce72803bf2dbf5553bfccd88287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176952 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
  81. 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

    9tVwDsMjikWd3hWiiT52c3 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

    - \end{ccHtmlOnly} - % Title - \begin{figure}[h] - \caption{APSS surface reconstruction from 10K - points sampled with a Minolta laser scanner.} - % later: add computed function - \label{Surface_reconstruction_points_3-fig-APSS} - \end{figure} -\end{center} - -\subsection{Interface} - -The class template declaration is: - -template$<$ \\ -class Gt$>$ \\ -class \ccc{APSS_reconstruction_function}; - -with \\ -\ccc{Gt}: Geometric traits class. - - -Creation: - -% Reduce left margin -\ccTwo{1234567890123456789012}{} - -\ccFunction{template APSS_reconstruction_function(InputIterator first, InputIterator beyond, PointPMap point_pmap, NormalPMap normal_pmap, RadiusPMap radius_pmap, FT smoothness);} -{ -Creates a APSS implicit function from the [first, beyond) range of points. -\ccCommentHeading{Template Parameters} \\ -\ccc{InputIterator}: iterator over input points. - -\ccc{PointPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Point_3}. It can be omitted if \ccc{InputIterator} \ccc{value_type} is convertible to \ccc{Point_3}. - -\ccc{NormalPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Vector_3}. - -\ccc{RadiusPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{FT}. It is optional (see below). - -\ccCommentHeading{Parameters} \\ -\ccc{first}: iterator over the first input point. - -\ccc{beyond}: past-the-end iterator over the input points. - -\ccc{point_pmap}: property map to access the position of an input point. - -\ccc{normal_pmap}: property map to access the {\bf oriented} normal of an input point. - -\ccc{radius_pmap}: property map to access the influence radius of an input point. It can be omitted, in which case the influence radius of each point is automatically computed from a basic estimate of the local density using the 16 nearest neighbors. -} - - -The main operations are: - -\ccFunction{Sphere bounding_sphere() const;} -{ -Returns a sphere bounding the inferred surface. -} -\ccGlue -\ccFunction{FT value(const Point& p, bool* ok = 0) const;} -{ -Evaluates the implicit function at a given 3D query point. The optional parameter \ccc{ok} returns true if the evaluation succeeded and false otherwise. -} -% \ccGlue -% \ccFunction{void project(Point& p, Vector& n, unsigned int maxNofIterations = 20) const;} -% { -% Iteratively projects a point onto the underlying implicit surface until convergence or a maximal number of iteration (\ccc{maxNofIterations}). The optional parameter \ccc{n} returns the surface normal at the projection point. -% } -\ccGlue -\ccFunction{Point get_inner_point() const;} -{ -Returns a point located inside the inferred surface. -} - - -See details in \\ -\ccc{CGAL::APSS_reconstruction_function} - - -% falls into the category of so-called point set surfaces, where the approximate signed distance function to the inferred surface can be evaluated at any query point, on the fly during iso-contouring: \\ -% \ccc{CGAL::APSS_reconstruction_function} \\ - - -\subsection{Example} - -\ccc{APSS_reconstruction_example.cpp} reads a point set, creates a APSS implicit function and extract the $0$-isosurface as a triangle mesh. - -\ccIncludeExampleCode{Surface_reconstruction_points_3/APSS_reconstruction_example.cpp} diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/introduction.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/introduction.tex index 36d66e0be63..5a218c24a7b 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/introduction.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/introduction.tex @@ -1,6 +1,6 @@ \section{Introduction} -This \cgal\ component implements two surface reconstruction methods which take as input point sets with oriented normals and compute an implicit function. We assume that the input points contain no outliers and little noise. The output surface mesh is generated by extracting an isosurface of this function with the \cgal\ Surface Mesh Generator~\cite{cgal:ry-gsddrm-06} or potentially with any other surface contouring algorithm. +This \cgal\ component implements a surface reconstruction method which takes as input point sets with oriented normals and computes an implicit function. We assume that the input points contain no outliers and little noise. The output surface mesh is generated by extracting an isosurface of this function with the \cgal\ Surface Mesh Generator~\cite{cgal:ry-gsddrm-06} or potentially with any other surface contouring algorithm. % Insert image introduction.jpg/eps \begin{center} @@ -21,7 +21,7 @@ This \cgal\ component implements two surface reconstruction methods which take a \end{figure} \end{center} -More specifically, the core surface reconstruction algorithms consist of computing implicit functions which are either an approximate signed distance function to the inferred surface (Algebraic Point Set Surface - referred to as APSS in the sequel) or an approximate indicator function of the inferred solid (Poisson Surface Reconstruction - referred to as Poisson). Another distinction between the APSS and Poisson algorithms lies into the fact that APSS evaluates the function on the fly at any query point while Poisson requires solving for the implicit function before evaluation. +More specifically, the core surface reconstruction algorithm consists of computing an implicit function which is an approximate indicator function of the inferred solid (Poisson Surface Reconstruction - referred to as Poisson). Poisson is a two steps process: it requires solving for the implicit function before function evaluation. \section{Common Reconstruction Pipeline} diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/main.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/main.tex index ec1783c9df3..b5175370ed9 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/main.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/main.tex @@ -10,7 +10,6 @@ \input{Surface_reconstruction_points_3/introduction} \input{Surface_reconstruction_points_3/poisson} -\input{Surface_reconstruction_points_3/apss} \input{Surface_reconstruction_points_3/contouring} \input{Surface_reconstruction_points_3/output} \input{Surface_reconstruction_points_3/case_studies} diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/APSS_reconstruction_function.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/APSS_reconstruction_function.tex deleted file mode 100644 index 4b67ab850bc..00000000000 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/APSS_reconstruction_function.tex +++ /dev/null @@ -1,188 +0,0 @@ -% +------------------------------------------------------------------------+ -% | Reference manual page: APSS_reconstruction_function.tex -% +------------------------------------------------------------------------+ -% | 02.06.2008 Pierre Alliez, Laurent Saboret, Gael Guennebaud -% | Package: Surface_reconstruction_points_3 -% | -\RCSdef{\RCSAPSSreconstructionfunctionRev}{$Id$} -\RCSdefDate{\RCSAPSSreconstructionfunctionDate}{$Date$} -% | -\ccRefPageBegin -%%RefPage: end of header, begin of main body -% +------------------------------------------------------------------------+ - - -\begin{ccRefClass}{APSS_reconstruction_function} - -%% \ccHtmlCrossLink{} %% add further rules for cross referencing links -%% \ccHtmlIndexC[class]{} %% add further index entries - -\ccDefinition - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccDefinition) - -\ccc{APSS_reconstruction_function} computes a signed distance field that defines a Point Set Surface (PSS) based on moving least squares (MLS) fitting of algebraic spheres. - -This class implements a variant of the {\em Algebraic Point Set Surfaces} method by Guennebaud and Gross \cite{Guennebaud07}. - -The quality of the reconstruction highly depends on both the quality of input normals and the smoothness parameter. Whereas the algorithm can tolerate a little noise in the normal direction, the normals must be consistently oriented. The smoothness parameter controls the width of the underlying low-pass filter as a factor of the local point spacing. Larger value leads to smoother surfaces and longer computation times. For clean datasets, this value should be set between 1.5 and 2.5. On the other hand, as the amount of noise increases, this value should be increased as well. For these reasons, we do not provide any default value for this parameter. - -The radius property should correspond to the local point spacing which can be intuitively defined as the average distance to its {\em natural} one ring neighbors. It defines the {\em surface definition domain} as the union of these balls. Outside this union of balls, the surface is not defined. Therefore, if the balls do not overlap enough, then some holes might appear. If no radius is provided, then they are automatically computed from a basic estimate of the local density based on the 16 nearest neighbors. - -APSS reconstruction may create small {\em ghost} connected components close to the reconstructed surface that you should delete with e.g. \ccc{Polyhedron_3::keep_largest_connected_components}(). - -%END-AUTO(\ccDefinition) - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccInclude) - -\ccInclude{CGAL/APSS_reconstruction_function.h} - -%END-AUTO(\ccInclude) - -\ccParameters - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccParameters) - -template$<$ \\ -class Gt$>$ \\ -class \ccc{APSS_reconstruction_function}; - -\ccCommentHeading{Parameters} \\ -\ccc{Gt}: Geometric traits class. - -%END-AUTO(\ccParameters) - -\ccIsModel - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccIsModel) - -Model of the \ccc{ImplicitFunction} concept. - -%END-AUTO(\ccIsModel) - -\ccTypes - -% Enlarge left margin -\ccTwo{123456789012345678901234567890123456789012345678}{} - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccTypes) - -\ccNestedType{Geom_traits} -{ -Geometric traits class. -} -\ccGlue -\ccNestedType{FT} -{ -typedef to \ccc{Geom_traits::FT} -} -\ccGlue -\ccNestedType{Point} -{ -typedef to \ccc{Geom_traits::Point_3} -} -\ccGlue -\ccNestedType{Vector} -{ -typedef to \ccc{Geom_traits::Vector_3} -} -\ccGlue -\ccNestedType{Sphere} -{ -typedef to \ccc{Geom_traits::Sphere_3} -} -\ccGlue -\ccNestedType{BBox} -{ -typedef to \ccc{Bbox_3} -} -\ccGlue - -%END-AUTO(\ccTypes) - -\ccCreation -\ccCreationVariable{fct} %% variable name for \ccMethod below - -% Reduce left margin -\ccTwo{1234567890123456789012}{} - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccCreation) - -\ccConstructor{template APSS_reconstruction_function(InputIterator first, InputIterator beyond, PointPMap point_pmap, NormalPMap normal_pmap, RadiusPMap radius_pmap, FT smoothness);} -{ -Creates an APSS implicit function from the [first, beyond) range of points. -\ccCommentHeading{Template Parameters} \\ -\ccc{InputIterator}: iterator over input points. \ccc{PointPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Point_3}. It can be omitted if \ccc{InputIterator} \ccc{value_type} is convertible to \ccc{Point_3}. \ccc{NormalPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = \ccc{Vector_3}. \ccc{RadiusPMap}: is a model of \ccc{boost::ReadablePropertyMap} with a \ccc{value_type} = FT. If it is omitted, a default radius is computed. -\ccCommentHeading{Parameters} \\ -\ccc{first}: iterator over the first input point. \ccc{beyond}: past-the-end iterator. \ccc{point_pmap}: property map to access the position of an input point. \ccc{normal_pmap}: property map to access the {\bf oriented} normal of an input point. \ccc{radius_pmap}: property map to access the local point spacing of an input point. \ccc{smoothness}: smoothness factor. Typical choices are in the range 2 (clean datasets) and 8 (noisy datasets). -} -\ccGlue -\ccConstructor{APSS_reconstruction_function(const APSS_reconstruction_function& other);} -{ -Copy constructor -} -\ccGlue - -%END-AUTO(\ccCreation) - -\ccOperations - -% Workaround bug in cgal_manual which, by default, -% removes "const" from "Reconstruction" in return values. -\ccTagFullDeclarations - -% Enlarge left margin -\ccThree{1234567890}{12345678901234567890123}{} - -% The section below is automatically generated. Do not edit! -%START-AUTO(\ccOperations) - -\ccMethod{void set_smoothness_factor(FT smoothness);} -{ -Sets smoothness factor. Typical choices are in the range 2 (clean datasets) and 8 (noisy datasets). -} -\ccGlue -\ccMethod{Sphere bounding_sphere() const;} -{ -Returns a sphere bounding the inferred surface. -} -\ccGlue -\ccMethod{BBox bounding_box() const;} -{ -} -\ccGlue -\ccMethod{FT operator()(const Point& p, bool * ok = 0) const;} -{ -\ccc{ImplicitFunction} interface: evaluates the implicit function at a given 3D query point. -} -\ccGlue -\ccMethod{Point get_inner_point() const;} -{ -Returns a point located inside the inferred surface. -} -\ccGlue - -%END-AUTO(\ccOperations) - -\ccSeeAlso - -\ccRefIdfierPage{CGAL::Poisson_reconstruction_function} \\ - -\ccExample - -See \ccc{APSS_reconstruction.cpp} example. - -\end{ccRefClass} - -% +------------------------------------------------------------------------+ -%%RefPage: end of main body, begin of footer -\ccRefPageEnd -% EOF -% +------------------------------------------------------------------------+ - diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex index b8670295601..ec2a4b96a72 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex @@ -151,10 +151,6 @@ Returns a point located inside the inferred surface. %END-AUTO(\ccOperations) -\ccSeeAlso - -\ccRefIdfierPage{CGAL::APSS_reconstruction_function} \\ - \ccExample See \ccc{poisson_reconstruction_example.cpp}. diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/intro.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/intro.tex index 6c8353f664e..e2747650480 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/intro.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/intro.tex @@ -12,7 +12,7 @@ \ccChapterAuthor{Pierre Alliez, Laurent Saboret, Gael Guennebaud} -This \cgal\ component implements two state-of-the-art surface reconstruction methods. The input is an unorganized point set, possibly with attributes such as unoriented or oriented normals. The output is either an implicit function (ready for evaluation by any contouring algorithm), or a surface mesh generated by the \cgal\ surface mesh generator. +This \cgal\ component implements a state-of-the-art surface reconstruction method: Poisson Surface Reconstruction. The input is an unorganized point set, possibly with attributes such as unoriented or oriented normals. The output is either an implicit function (ready for evaluation by any contouring algorithm), or a surface mesh generated by the \cgal\ surface mesh generator. Note that since reconstruction methods often require pre-processing a point set (through reduction, smoothing, outlier removal, normal estimation, normal orientation), we provide components devoted to these tasks in the Point Set Processing component. @@ -21,5 +21,4 @@ Note that since reconstruction methods often require pre-processing a point set \subsection{Classes} \ccRefIdfierPage{CGAL::Poisson_reconstruction_function} \\ -\ccRefIdfierPage{CGAL::APSS_reconstruction_function} \\ diff --git a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/main.tex b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/main.tex index beca1229f35..e45285d230a 100644 --- a/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/main.tex +++ b/Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3_ref/main.tex @@ -7,7 +7,6 @@ \input{Surface_reconstruction_points_3_ref/intro.tex} -\input{Surface_reconstruction_points_3_ref/APSS_reconstruction_function.tex} \input{Surface_reconstruction_points_3_ref/Poisson_reconstruction_function.tex} %% EOF diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt index 793b1482b24..03d585aff61 100644 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/CMakeLists.txt @@ -55,10 +55,6 @@ if ( CGAL_FOUND ) # Temporary debugging stuff ADD_DEFINITIONS( "-DDEBUG_TRACE" ) # turn on traces - # Executables that do *not* require BLAS, LAPACK nor TAUCS - create_single_source_cgal_program( "APSS_reconstruction.cpp" ) - create_single_source_cgal_program( "APSS_reconstruction_example.cpp" ) - # Link with BLAS, LAPACK and TAUCS (optional) find_package(TAUCS) if(TAUCS_FOUND) diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake index 20400fff6f4..44227c35228 100755 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake @@ -164,14 +164,6 @@ if [ $# -ne 0 ] ; then done else echo "Run all tests." - if [ `can_compile APSS_reconstruction` == "y" ]; then - compile_and_run APSS_reconstruction - [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y - fi - if [ `can_compile APSS_reconstruction_example` == "y" ]; then - compile_and_run APSS_reconstruction_example - [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y - fi if [ `can_compile poisson_reconstruction` == "y" ]; then compile_and_run poisson_reconstruction [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y diff --git a/Surface_reconstruction_points_3/include/CGAL/APSS_reconstruction_function.h b/Surface_reconstruction_points_3/include/CGAL/APSS_reconstruction_function.h deleted file mode 100644 index 036ec92b702..00000000000 --- a/Surface_reconstruction_points_3/include/CGAL/APSS_reconstruction_function.h +++ /dev/null @@ -1,741 +0,0 @@ -// Copyright (c) 2007-09 ETH Zurich (France). -// All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you may redistribute it under -// the terms of the Q Public License version 1.0. -// See the file LICENSE.QPL distributed with CGAL. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// Author(s) : Gael Guennebaud, Laurent Saboret - -#ifndef CGAL_APSS_RECONSTRUCTION_FUNCTION_H -#define CGAL_APSS_RECONSTRUCTION_FUNCTION_H - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -CGAL_BEGIN_NAMESPACE - - -/// APSS_reconstruction_function computes a signed distance field -/// that defines a Point Set Surface (PSS) based on -/// moving least squares (MLS) fitting of algebraic spheres. -/// -/// This class implements a variant of the "Algebraic Point Set Surfaces" method -/// by Guennebaud and Gross [Guennebaud07]. -/// -/// The quality of the reconstruction highly depends on both the quality of input -/// normals and the smoothness parameter. Whereas the algorithm can tolerate -/// a little noise in the normal direction, the normals must be consistently oriented. -/// The smoothness parameter controls the width of the underlying low-pass filter as a factor -/// of the local point spacing. Larger value leads to smoother surfaces and longer computation -/// times. For clean datasets, this value should be set between 1.5 and 2.5. On the other hand, -/// as the amount of noise increases, this value should be increased as well. For these reasons, -/// we do not provide any default value for this parameter. -/// -/// The radius property should correspond to the local point spacing which can be intuitively -/// defined as the average distance to its "natural" one ring neighbors. It -/// defines the "surface definition domain" as the union of -/// these balls. Outside this union of balls, the surface is not defined. Therefore, if the balls -/// do not overlap enough, then some holes might appear. If no radius is provided, then they are -/// automatically computed from a basic estimate of the local density based on the 16 nearest -/// neighbors. -/// -/// APSS reconstruction may create small "ghost" connected components -/// close to the reconstructed surface that you should delete with e.g. -/// Polyhedron_3::keep_largest_connected_components(). -/// -/// @heading Is Model for the Concepts: -/// Model of the ImplicitFunction concept. -/// -/// @heading Parameters: -/// @param Gt Geometric traits class. - -template -class APSS_reconstruction_function -{ -// Public types -public: - - typedef Gt Geom_traits; ///< Geometric traits class - - // Geometric types - typedef typename Geom_traits::FT FT; ///< typedef to Geom_traits::FT - typedef typename Geom_traits::Point_3 Point; ///< typedef to Geom_traits::Point_3 - typedef typename Geom_traits::Vector_3 Vector; ///< typedef to Geom_traits::Vector_3 - typedef typename Geom_traits::Sphere_3 Sphere; ///< typedef to Geom_traits::Sphere_3 - typedef CGAL::Bbox_3 BBox; ///< typedef to CGAL::Bbox_3 - -// Private types -private: - - // Item in the Kd-tree: position (Point_3) + normal + index - class KdTreeElement : public Point_with_normal_3 - { - typedef Point_with_normal_3 Base; ///< base class - - public: - unsigned int index; - - KdTreeElement(const Origin& o = ORIGIN, unsigned int id=0) - : Base(o), index(id) - {} - KdTreeElement(const Point& p, const Vector& n = NULL_VECTOR, unsigned int id=0) - : Base(p, n), index(id) - {} - }; - - // Helper class for the Kd-tree - class KdTreeGT : public Geom_traits - { - public: - typedef KdTreeElement Point_3; - }; - - class TreeTraits : public Search_traits_3 - { - public: - typedef Point PointType; - }; - - typedef Fast_orthogonal_k_neighbor_search Neighbor_search; - typedef typename Neighbor_search::Tree Tree; - typedef typename Neighbor_search::Point_ptr_with_transformed_distance - Point_ptr_with_transformed_distance; - -// Private initialization method -private: - - /// Creates an APSS implicit function from the [first, beyond) range of points. - /// - /// @commentheading Template Parameters: - /// @param InputIterator iterator over input points. - /// @param PointPMap is a model of boost::ReadablePropertyMap with a value_type = Point_3. - /// @param NormalPMap is a model of boost::ReadablePropertyMap with a value_type = Vector_3. - /// @param RadiusPMap is a model of boost::ReadablePropertyMap with a value_type = FT. - /// If it is boost::dummy_property_map, a default radius is computed. - template - void init( - InputIterator first, ///< iterator over the first input point. - InputIterator beyond, ///< past-the-end iterator. - PointPMap point_pmap, ///< property map to access the position of an input point. - NormalPMap normal_pmap, ///< property map to access the *oriented* normal of an input point. - RadiusPMap radius_pmap, ///< property map to access the local point spacing of an input point. - FT smoothness) ///< smoothness factor. - { - // Allocate smart pointer to data - m = new Private; - m->cached_nearest_neighbor.first = 0; - - int nb_points = std::distance(first, beyond); - - set_smoothness_factor(smoothness); - - // Creates kd-tree - m->treeElements.reserve(nb_points); - unsigned int i=0; - for (InputIterator it=first ; it != beyond ; ++it,++i) - { - m->treeElements.push_back(KdTreeElement(get(point_pmap,it), get(normal_pmap,it), i)); - } - m->tree = new Tree(m->treeElements.begin(), m->treeElements.end()); - - m->radii.resize(nb_points); - if (boost::is_same::value) - { - // Compute the radius of each point = (distance to 16th nearest neighbor)/2. - // The union of these balls defines the surface definition domain. - int i=0; - for (InputIterator it=first ; it != beyond ; ++it, ++i) - { - Neighbor_search search(*(m->tree), get(point_pmap,it), 16); - FT maxdist2 = search.begin()->second; // squared distance to furthest neighbor - m->radii[i] = sqrt(maxdist2)/2.; - } - } - else - { - // Copy the radii from given input data - int i=0; - for (InputIterator it=first ; it != beyond ; ++it, ++i) - { - m->radii[i] = boost::get(radius_pmap,*it); - } - } - - // Computes bounding sphere - typedef Min_sphere_of_spheres_d_traits_3 Traits; - typedef Min_sphere_of_spheres_d Min_sphere; - typedef typename Traits::Sphere Traits_sphere; - // - // Represents points by a set of spheres with 0 radius - std::vector spheres; - for (InputIterator it=first ; it != beyond ; ++it) - spheres.push_back(Traits_sphere(*it,0)); - // - // Computes min sphere - Min_sphere ms(spheres.begin(),spheres.end()); - typename Min_sphere::Cartesian_const_iterator coord = ms.center_cartesian_begin(); - FT cx = *coord++; - FT cy = *coord++; - FT cz = *coord++; - m->bounding_sphere = Sphere(Point(cx,cy,cz), ms.radius()*ms.radius()); - - // Computes axis aligned bounding box - // FIXME: I cannot believe there is nothing better to compute the bbox: - { - Point p = get(point_pmap,first); - m->bounding_box = BBox(p.x(), p.y(), p.z(), p.x(), p.y(), p.z()); - } - for (InputIterator it=first ; it != beyond ; ++it) - { - Point p = get(point_pmap,it); - m->bounding_box = m->bounding_box + BBox(p.x(), p.y(), p.z(), p.x(), p.y(), p.z()); - } - - // Find a point inside the surface. - find_inner_point(); - - // Dichotomy error when projecting point (squared) - m->sqError = 1e-7 * Gt().compute_squared_radius_3_object()(m->bounding_sphere); - } - -// Public methods -public: - - /// Creates an APSS implicit function from the [first, beyond) range of points. - /// - /// @commentheading Template Parameters: - /// @param InputIterator iterator over input points. - /// @param PointPMap is a model of boost::ReadablePropertyMap with a value_type = Point_3. - /// It can be omitted if InputIterator value_type is convertible to Point_3. - /// @param NormalPMap is a model of boost::ReadablePropertyMap with a value_type = Vector_3. - /// @param RadiusPMap is a model of boost::ReadablePropertyMap with a value_type = FT. - /// If it is omitted, a default radius is computed. - - // This variant requires all parameters. - template - APSS_reconstruction_function( - InputIterator first, ///< iterator over the first input point. - InputIterator beyond, ///< past-the-end iterator. - PointPMap point_pmap, ///< property map to access the position of an input point. - NormalPMap normal_pmap, ///< property map to access the *oriented* normal of an input point. - RadiusPMap radius_pmap, ///< property map to access the local point spacing of an input point. - FT smoothness) ///< smoothness factor. Typical choices are in the range 2 (clean datasets) and 8 (noisy datasets). - { - init( - first, beyond, - point_pmap, - normal_pmap, - radius_pmap, - smoothness); - } - - /// @cond SKIP_IN_MANUAL - // This variant creates a default radius property map = boost::dummy_property_map. - template - APSS_reconstruction_function( - InputIterator first, ///< iterator over the first input point. - InputIterator beyond, ///< past-the-end iterator over the input points. - PointPMap point_pmap, ///< property map to access the position of an input point. - NormalPMap normal_pmap, ///< property map to access the *oriented* normal of an input point. - FT smoothness) ///< smoothness factor. - { - init( - first, beyond, - point_pmap, - normal_pmap, - boost::dummy_property_map(), - smoothness); - } - /// @endcond - - /// @cond SKIP_IN_MANUAL - // This variant creates a default point property map = Dereference_property_map, - // and a dummy radius property map - template - APSS_reconstruction_function( - InputIterator first, ///< iterator over the first input point. - InputIterator beyond, ///< past-the-end iterator over the input points. - NormalPMap normal_pmap, ///< property map to access the *oriented* normal of an input point. - FT smoothness) ///< smoothness factor. - { - init( - first, beyond, - make_dereference_property_map(first), - normal_pmap, - boost::dummy_property_map(), - smoothness); - } - /// @endcond - - /// Copy constructor - APSS_reconstruction_function(const APSS_reconstruction_function& other) { - m = other.m; - m->count++; - } - - /// operator =() - APSS_reconstruction_function& operator = (const APSS_reconstruction_function& other) { - m = other.m; - m->count++; - } - - /// Destructor - ~APSS_reconstruction_function() { - if (--(m->count)==0) - delete m; - } - - /// Sets smoothness factor. Typical choices are in the range 2 (clean datasets) and 8 (noisy datasets). - void set_smoothness_factor(FT smoothness) { m->nofNeighbors = 6*smoothness*smoothness; } - - /// Returns a sphere bounding the inferred surface. - Sphere bounding_sphere() const - { - return m->bounding_sphere; - } - - BBox bounding_box() const - { - return m->bounding_box; - } - -private: - - /** Fit an algebraic sphere on a set of neigbors in a Moving Least Square sense. - The weight function is scaled such that the weight of the furthest neighbor is 0. - */ - void fit(const Neighbor_search& search) const - { - FT r2 = search.begin()->second; // squared distance to furthest neighbor - - Vector sumP(0,0,0); - Vector sumN(0,0,0); - FT sumDotPP = 0.; - FT sumDotPN = 0.; - FT sumW = 0.; - - r2 *= 1.001; - FT invr2 = 1./r2; - for (typename Neighbor_search::iterator it = search.begin(); it != search.end(); ++it) - { - Vector p = *(it->first) - CGAL::ORIGIN; - const Vector& n = it->first->normal(); - FT w = 1. - it->second*invr2; - w = w*w; w = w*w; - - sumP = add(sumP,mul(w,p)); - sumN = add(sumN,mul(w,n)); - sumDotPP += w * dot(p,p); - sumDotPN += w * dot(p,n); - sumW += w; - } - - FT invSumW = 1./sumW; - m->as.u4 = 0.5 * (sumDotPN - invSumW*dot(sumP,sumN))/(sumDotPP - invSumW*dot(sumP,sumP)); - m->as.u13 = mul(invSumW,add(sumN,mul(-2.*m->as.u4,sumP))); - m->as.u0 = -invSumW*(dot(m->as.u13,sumP)+m->as.u4*sumDotPP); - m->as.finalize(); - } - - /** Check whether the point 'p' is close to the input points or not. - We assume that it's not if it is far from its nearest neighbor. - */ - inline bool isValid(const Point_ptr_with_transformed_distance& nearest_neighbor, const Point& /* p */) const - { - FT r = FT(2) * m->radii[nearest_neighbor.first->index]; - return (r*r > nearest_neighbor.second); - } - -public: - - /// 'ImplicitFunction' interface: evaluates the implicit function at a given 3D query point. - // - // Implementation note: this function is called a large number of times, - // thus us heavily optimized. The bottleneck is Neighbor_search's constructor, - // which we try to avoid calling. - FT operator()(const Point& p, bool* ok = 0) const - { - if (ok) - *ok = true; - // Is 'p' close to the surface? - // Optimization: test first if 'p' is close to one of the neighbors - // computed during the previous call. - typename Geom_traits::Compute_squared_distance_3 sqd; - if (m->cached_nearest_neighbor.first) - m->cached_nearest_neighbor.second = sqd(p, *m->cached_nearest_neighbor.first); - if (!(m->cached_nearest_neighbor.first && isValid(m->cached_nearest_neighbor, p))) - { - // Compute the nearest neighbor and cache it - KdTreeElement query(p); - Neighbor_search search_1nn(*(m->tree), query, 1); - m->cached_nearest_neighbor = *(search_1nn.begin()); - - // Is 'p' close to the surface? - if (!isValid(m->cached_nearest_neighbor, p)) - { - // If 'p' is far from the surface, project its nearest neighbor onto the surface... - Vector n; - Point pp = *m->cached_nearest_neighbor.first; - project(pp,n,1); - // ...and return the (signed) distance to the surface - Vector h = sub(p,pp); - return length(h) * ( dot(n,h)>0. ? 1. : -1.); - } - } - - // Compute k nearest neighbors and cache the nearest one - KdTreeElement query(p); - Neighbor_search search_knn(*(m->tree), query, m->nofNeighbors); - m->cached_nearest_neighbor = search_nearest(search_knn); - - // If 'p' is close to the surface, fit an algebraic sphere - // on a set of neigbors in a Moving Least Square sense. - fit(search_knn); - - // return the distance to the sphere - return m->as.euclideanDistance(p, *(m->cached_nearest_neighbor.first)); - } - - /// Returns a point located inside the inferred surface. - Point get_inner_point() const - { - return m->inner_point; - } - -// Private methods: -private: - - const Point_ptr_with_transformed_distance& search_nearest(const Neighbor_search& search) const - { - typename Neighbor_search::iterator last=search.end(); --last; - typename Neighbor_search::iterator nearest_it = last; - for (typename Neighbor_search::iterator it = search.begin(); it != last; ++it) - if (it->second < nearest_it->second) - nearest_it = it; - return *nearest_it; - } - - /** Projects the point p onto the MLS surface. - */ - void project(Point& p, unsigned int maxNofIterations = 20) const - { - Vector n; - project(p,n,maxNofIterations); - } - - /** Projects the point p onto the MLS surface, and returns an approximate normal. - */ - void project(Point& p, Vector& n, unsigned int maxNofIterations = 20) const - { - Point source = p; - - FT delta2 = 0.; - unsigned int countIter = 0; - do { - - Neighbor_search search(*(m->tree), p, m->nofNeighbors); - - // neighbors are not sorted anymore, - // let's find the nearest - Point_ptr_with_transformed_distance nearest = search_nearest(search); - // if p is far away the input point cloud, start with the closest point. - if (!isValid(nearest,p)) - { - p = *nearest.first; - n = nearest.first->normal(); - delta2 = nearest.second; - } - else - { - fit(search); - - Point oldP = p; - m->as.project(p,n,*(nearest.first)); - - if (!isValid(nearest,p)) - { - std::cout << "Invalid projection\n"; - } - - Vector diff = sub(oldP,p); - delta2 = dot(diff,diff); - } - - } while ( ((++countIter)sqError) ); - } - - inline static FT dot(const Vector& a, const Vector& b) { - return a.x()*b.x() + a.y()*b.y() + a.z()*b.z(); - } - inline static FT length(const Vector& a) { - return sqrt(dot(a,a)); - } - inline static Vector mul(FT s, const Vector& p) { - return Vector(p.x()*s, p.y()*s, p.z()*s); - } - inline static Point add(FT s, const Point& p) { - return Point(p.x()+s, p.y()+s, p.z()+s); - } - inline static Point add(const Point& a, const Vector& b) { - return Point(a.x()+b.x(), a.y()+b.y(), a.z()+b.z()); - } - inline static Vector add(const Vector& a, const Vector& b) { - return Vector(a.x()+b.x(), a.y()+b.y(), a.z()+b.z()); - } - inline static Point sub(const Point& a, const Vector& b) { - return Point(a.x()-b.x(), a.y()-b.y(), a.z()-b.z()); - } - inline static Vector sub(const Point& a, const Point& b) { - return Vector(a.x()-b.x(), a.y()-b.y(), a.z()-b.z()); - } - inline static Vector normalize(const Vector& p) { - FT s = 1. / length(p); - return mul(s,p); - } - inline static Vector cross(const Vector& a, const Vector& b) { - return Vector(a.y()*b.z() - a.z()*b.y(), - a.z()*b.x() - a.x()*b.z(), - a.x()*b.y() - a.y()*b.x()); - } - -private: - - struct AlgebraicSphere { - FT u0, u4; - Vector u13; - enum State {UNDETERMINED=0,PLANE=1,SPHERE=2}; - State state; - Point center; - FT radius; - Vector normal; - FT d; - - AlgebraicSphere() : state(UNDETERMINED) {} - - /** Converts the algebraic sphere to an explicit sphere or plane. - */ - void finalize(void) { - if (fabs(u4)>1e-9) - { - state = SPHERE; - FT b = 1./u4; - center = CGAL::ORIGIN + mul(-0.5*b,u13); - radius = sqrt(dot(center - CGAL::ORIGIN,center - CGAL::ORIGIN) - b*u0); - } - else if (u4==0.) - { - state = PLANE; - FT s = 1./length(u13); - normal = mul(s,u13); - d = u0*s; - } - else - { - state = UNDETERMINED; - } - } - - /** Projects a point onto the surface of the sphere. - * This function considers the projection which is the closest - * to a given reference point. - */ - void project(Point& p, Vector& n, const Point& reference_point) { - if (state==AlgebraicSphere::SPHERE) - { - Vector dir = sub(p,center); - FT l = length(dir); - dir = dir * (1./l); - p = add(center,mul( radius,dir)); - FT flip = u4<0. ? -1. : 1.; - n = mul(flip,dir); - - Point other = add(center,mul(-radius,dir)); - typename Geom_traits::Compute_squared_distance_3 sqd; - if (sqd(reference_point,other) < 0.9*sqd(reference_point,p)) - { - p = other; - n = -n; - } - } - else if (state==AlgebraicSphere::PLANE) - { - // projection onto a plane. - p = sub(p, mul(dot(normal,p-CGAL::ORIGIN) + d, normal)); - n = normal; - } - else - { - // iterative projection onto the algebraic sphere. - p = iProject(p); - } - } - - /** Compute the Euclidean distance between the algebraic surface and a point 'p'. - * This function uses the closest intersection to a given reference point. - */ - FT euclideanDistance(const Point& p, const Point& reference_point) { - if (state==SPHERE) - { - // tricky case because we have to pick to best intersection - // that is the closest to the reference point - Vector dir = sub(p,center); - FT l = length(dir); - FT inside = l < radius ? -1. : 1; - dir = dir * (1./l); - Point proj0 = add(center,mul( radius,dir)); - Point proj1 = add(center,mul(-radius,dir)); - FT flip = u4<0. ? -1. : 1.; - - typename Geom_traits::Compute_squared_distance_3 sqd; - if (sqd(reference_point,proj1) < 0.9*sqd(reference_point,proj0)) - { - proj0 = proj1; - inside = -1; - } - - return length(sub(p,proj0)) * flip * inside; - } - - if (state==PLANE) - return dot(p - CGAL::ORIGIN,normal) + d; - - // else, tedious case, fall back to an iterative method: - return iEuclideanDistance(p); - } - - /** Euclidean distance via an iterative projection procedure. - This is an optimized version of distance(x,iProject(x)). - */ - inline FT iEuclideanDistance(const Point& x) const - { - FT d = 0.; - Vector grad; - Vector dir = add(mul(2.*u4,x-CGAL::ORIGIN),u13); - FT ilg = 1./length(dir); - dir = mul(ilg,dir); - FT ad = u0 + dot(u13,x-CGAL::ORIGIN) + u4 * dot(x-CGAL::ORIGIN,x-CGAL::ORIGIN); - FT delta = -ad*(ilg<1.?ilg:1.); - Point p = add(x, mul(delta,dir)); - d += delta; - for (int i=0 ; i<5 ; ++i) - { - grad = add(mul(2.*u4,p-CGAL::ORIGIN),u13); - ilg = 1./length(grad); - delta = -(u0 + dot(u13,p-CGAL::ORIGIN) + u4 * dot(p-CGAL::ORIGIN,p-CGAL::ORIGIN))*(ilg<1.?ilg:1.); - p = add(p,mul(delta,dir)); - d += delta; - } - return -d; - } - - /** Iterative projection. - */ - inline Point iProject(const Point& x) const - { - Vector grad; - Vector dir = add(mul(2.*u4,x-CGAL::ORIGIN),u13); - FT ilg = 1./length(dir); - dir = mul(ilg,dir); - FT ad = u0 + dot(u13,x-CGAL::ORIGIN) + u4 * dot(x-CGAL::ORIGIN,x-CGAL::ORIGIN); - FT delta = -ad*(ilg<1.?ilg:1.); - Point p = add(x, mul(delta,dir)); - for (int i=0 ; i<5 ; ++i) - { - grad = add(mul(2.*u4,p-CGAL::ORIGIN),u13); - ilg = 1./length(grad); - delta = -(u0 + dot(u13,p-CGAL::ORIGIN) + u4 * dot(p-CGAL::ORIGIN,p-CGAL::ORIGIN))*(ilg<1.?ilg:1.); - p = add(p,mul(delta,dir)); - } - return p; - } - }; - - /// Find a point inside the surface - void find_inner_point() - { - m->inner_point = CGAL::ORIGIN; // security - - // Try random points and keep point with minimal value - FT min_f = 1e38; - Point center = m->bounding_sphere.center(); - FT radius = sqrt(m->bounding_sphere.squared_radius()); - CGAL::Random_points_in_sphere_3 rnd(radius); - for (int i=0; i < 10000 ; i++) - { - Point p = center + (*rnd++ - CGAL::ORIGIN); // random point in bounding sphere - FT value = (*this)(p); - if(value < min_f) - { - m->inner_point = p; - min_f = value; - } - } - } - -// Data members -private: - - struct Private - { - Private() - : tree(NULL), count(1) - {} - - ~Private() - { - delete tree; tree = NULL; - } - - Tree* tree; - std::vector treeElements; - std::vector radii; - Sphere bounding_sphere; // Points' bounding sphere - BBox bounding_box; // Points' bounding box - FT sqError; // Dichotomy error when projecting point (squared) - unsigned int nofNeighbors; // Number of nearest neighbors - Point inner_point; // Point inside the surface - mutable AlgebraicSphere as; - mutable Point_ptr_with_transformed_distance cached_nearest_neighbor; - int count; // reference counter - }; - - Private* m; // smart pointer to data - -}; // end of APSS_reconstruction_function - - -CGAL_END_NAMESPACE - -#endif // CGAL_APSS_RECONSTRUCTION_FUNCTION_H diff --git a/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/description.txt b/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/description.txt index 0a9b445021b..2439207a78d 100644 --- a/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/description.txt +++ b/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/description.txt @@ -1,3 +1,4 @@ + Surface Reconstruction from Point Sets -This CGAL package implements two implicit surface reconstruction methods (Poisson Surface Reconstruction and Algebraic Point Set Surfaces). The input is an unorganized point set with oriented normals. +This CGAL package implements an implicit surface reconstruction method: Poisson Surface Reconstruction. The input is an unorganized point set with oriented normals. diff --git a/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/long_description.txt b/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/long_description.txt index f053037e1f1..17dbfe7be3c 100644 --- a/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/long_description.txt +++ b/Surface_reconstruction_points_3/package_info/Surface_reconstruction_points_3/long_description.txt @@ -2,5 +2,5 @@ Surface Reconstruction from Point Sets Pierre Alliez, Laurent Saboret, Gael Guennebaud -This CGAL package implements two implicit surface reconstruction methods (Poisson Surface Reconstruction and Algebraic Point Set Surfaces). The input is an unorganized point set with oriented normals. The output is either an implicit function (ready for evaluation by any contouring algorithm), or a surface mesh generated by the CGAL surface mesh generator. +This CGAL package implements an implicit surface reconstruction method: Poisson Surface Reconstruction. The input is an unorganized point set with oriented normals. The output is either an implicit function (ready for evaluation by any contouring algorithm), or a surface mesh generated by the CGAL surface mesh generator. diff --git a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cmd b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cmd deleted file mode 100644 index eebab00aae9..00000000000 --- a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cmd +++ /dev/null @@ -1 +0,0 @@ -data/*.off data/*.xyz data/*.pwn diff --git a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cpp b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cpp deleted file mode 100644 index 0d3276f4dee..00000000000 --- a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/APSS_reconstruction_test.cpp +++ /dev/null @@ -1,346 +0,0 @@ -// APSS_reconstruction_test.cpp - -//---------------------------------------------------------- -// Test the APSS reconstruction method. -// For each input point set or mesh's set of vertices, reconstruct a surface. -// No output. -//---------------------------------------------------------- -// APSS_reconstruction_test mesh1.off point_set2.xyz... - -// CGAL -#include // must be included before kernel -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "compute_normal.h" - -#include -#include -#include -#include - - -// ---------------------------------------------------------------------------- -// Types -// ---------------------------------------------------------------------------- - -// kernel -typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; - -// Simple geometric types -typedef Kernel::FT FT; -typedef Kernel::Point_3 Point; -typedef Kernel::Vector_3 Vector; -typedef CGAL::Point_with_normal_3 Point_with_normal; -typedef Kernel::Sphere_3 Sphere; -typedef std::deque PointList; - -// polyhedron -typedef CGAL::Polyhedron_3 Polyhedron; - -// APSS implicit function -typedef CGAL::APSS_reconstruction_function APSS_reconstruction_function; - -// Surface mesher -typedef CGAL::Surface_mesh_default_triangulation_3 STr; -typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; -typedef CGAL::Implicit_surface_3 Surface_3; - -// AABB tree -typedef CGAL::AABB_polyhedron_triangle_primitive Primitive; -typedef CGAL::AABB_traits AABB_traits; -typedef CGAL::AABB_tree AABB_tree; - - -// ---------------------------------------------------------------------------- -// main() -// ---------------------------------------------------------------------------- - -int main(int argc, char * argv[]) -{ - std::cerr << "Test the APSS reconstruction method" << std::endl; - - //*************************************** - // decode parameters - //*************************************** - - // usage - if (argc-1 == 0) - { - std::cerr << "For each input point set or mesh's set of vertices, reconstruct a surface.\n"; - std::cerr << "\n"; - std::cerr << "Usage: " << argv[0] << " mesh1.off point_set2.xyz..." << std::endl; - std::cerr << "Input file formats are .off (mesh) and .xyz or .pwn (point set).\n"; - std::cerr << "No output" << std::endl; - return EXIT_FAILURE; - } - - // APSS options - FT sm_angle = 20.0; // Min triangle angle (degrees). - FT sm_radius = 100; // Max triangle size w.r.t. point set average spacing. - FT sm_distance = 0.5; // Approximation error w.r.t. point set average spacing. - FT smoothness = 6; // Smoothness factor. In the range 2 (clean datasets) to 8 (noisy datasets). - - // Accumulated errors - int accumulated_fatal_err = EXIT_SUCCESS; - - // Process each input file - for (int i = 1; i <= argc-1; i++) - { - CGAL::Timer task_timer; task_timer.start(); - - std::cerr << std::endl; - - //*************************************** - // Loads mesh/point set - //*************************************** - - // File name is: - std::string input_filename = argv[i]; - - PointList points; - - // If OFF file format - std::cerr << "Open " << input_filename << " for reading..." << std::endl; - std::string extension = input_filename.substr(input_filename.find_last_of('.')); - if (extension == ".off" || extension == ".OFF") - { - // Reads the mesh file in a polyhedron - std::ifstream stream(input_filename.c_str()); - Polyhedron input_mesh; - CGAL::scan_OFF(stream, input_mesh, true /* verbose */); - if(!stream || !input_mesh.is_valid() || input_mesh.empty()) - { - std::cerr << "Error: cannot read file " << input_filename << std::endl; - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - - // Converts Polyhedron vertices to point set. - // Computes vertices normal from connectivity. - Polyhedron::Vertex_const_iterator v; - for (v = input_mesh.vertices_begin(); v != input_mesh.vertices_end(); v++) - { - const Point& p = v->point(); - Vector n = compute_vertex_normal(*v); - points.push_back(Point_with_normal(p,n)); - } - } - // If XYZ file format - else if (extension == ".xyz" || extension == ".XYZ" || - extension == ".pwn" || extension == ".PWN") - { - // Reads the point set file in points[]. - // Note: read_xyz_points_and_normals() requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - std::ifstream stream(input_filename.c_str()); - if (!stream || - !CGAL::read_xyz_points_and_normals( - stream, - std::back_inserter(points), - CGAL::make_normal_of_point_with_normal_pmap(std::back_inserter(points)))) - { - std::cerr << "Error: cannot read file " << input_filename << std::endl; - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - } - else - { - std::cerr << "Error: cannot read file " << input_filename << std::endl; - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - - // Prints status - long memory = CGAL::Memory_sizer().virtual_size(); - int nb_points = points.size(); - std::cerr << "Reads file " << input_filename << ": " << nb_points << " points, " - << task_timer.time() << " seconds, " - << (memory>>20) << " Mb allocated" - << std::endl; - task_timer.reset(); - - //*************************************** - // Checks requirements - //*************************************** - - if (nb_points == 0) - { - std::cerr << "Error: empty point set" << std::endl; - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - - bool points_have_normals = (points.begin()->normal() != CGAL::NULL_VECTOR); - if ( ! points_have_normals ) - { - std::cerr << "Input point set not supported: this reconstruction method requires oriented normals" << std::endl; - // this is not a bug => do not set accumulated_fatal_err - continue; - } - - CGAL::Timer reconstruction_timer; reconstruction_timer.start(); - - //*************************************** - // Creates implicit function - //*************************************** - - std::cerr << "Creates APSS implicit function (smoothness=" << smoothness << ")...\n"; - - // Creates implicit function from the read points. - // Note: this method requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - APSS_reconstruction_function function( - points.begin(), points.end(), - CGAL::make_normal_of_point_with_normal_pmap(points.begin()), - smoothness); - - // Prints status - /*long*/ memory = CGAL::Memory_sizer().virtual_size(); - std::cerr << "Creates implicit function: " << task_timer.time() << " seconds, " - << (memory>>20) << " Mb allocated" - << std::endl; - task_timer.reset(); - - //*************************************** - // Surface mesh generation - //*************************************** - - std::cerr << "Surface meshing...\n"; - - // Computes average spacing - FT average_spacing = CGAL::compute_average_spacing(points.begin(), points.end(), - 6 /* knn = 1 ring */); - - // Gets one point inside the implicit surface - Point inner_point = function.get_inner_point(); - FT inner_point_value = function(inner_point); - if(inner_point_value >= 0.0) - { - std::cerr << "Error: unable to seed (" << inner_point_value << " at inner_point)" << std::endl; - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - - // Gets implicit function's radius - Sphere bsphere = function.bounding_sphere(); - FT radius = std::sqrt(bsphere.squared_radius()); - - // Defines the implicit surface: requires defining a - // conservative bounding sphere centered at inner point. - FT sm_sphere_radius = 5.0 * radius; - FT sm_dichotomy_error = sm_distance*average_spacing/1000.0; // Dichotomy error must be << sm_distance - Surface_3 surface(function, - Sphere(inner_point,sm_sphere_radius*sm_sphere_radius), - sm_dichotomy_error/sm_sphere_radius); - - // Defines surface mesh generation criteria - CGAL::Surface_mesh_default_criteria_3 criteria(sm_angle, // Min triangle angle (degrees) - sm_radius*average_spacing, // Max triangle size - sm_distance*average_spacing); // Approximation error - - CGAL_TRACE_STREAM << " make_surface_mesh(sphere center=("<>20) << " Mb allocated" - << std::endl; - task_timer.reset(); - - if(tr.number_of_vertices() == 0) { - accumulated_fatal_err = EXIT_FAILURE; - continue; - } - - // Converts to polyhedron - Polyhedron output_mesh; - CGAL::output_surface_facets_to_polyhedron(c2t3, output_mesh); - - //*************************************** - // Erases small connected components - //*************************************** - - std::cerr << "Erases small connected components...\n"; - - unsigned int nb_erased_components = - output_mesh.keep_largest_connected_components( 1 /* keep largest component only*/ ); - - // Prints status - /*long*/ memory = CGAL::Memory_sizer().virtual_size(); - std::cerr << "Erases small connected components: " << task_timer.time() << " seconds, " - << nb_erased_components << " component(s) erased, " - << (memory>>20) << " Mb allocated" - << std::endl; - task_timer.reset(); - - // Prints total reconstruction duration - std::cerr << "Total reconstruction (implicit function + meshing + erase small components): " << reconstruction_timer.time() << " seconds\n"; - - //*************************************** - // Computes reconstruction error - //*************************************** - - // Constructs AABB tree and computes internal KD-tree - // data structure to accelerate distance queries - AABB_tree tree(output_mesh.facets_begin(), output_mesh.facets_end()); - tree.accelerate_distance_queries(); - - // Computes distance from each input point to reconstructed mesh - double max_distance = DBL_MIN; - double avg_distance = 0; - for (PointList::const_iterator p=points.begin(); p!=points.end(); p++) - { - double distance = std::sqrt(tree.squared_distance(*p)); - - max_distance = (std::max)(max_distance, distance); - avg_distance += distance; - } - avg_distance /= double(points.size()); - - std::cerr << "Reconstruction error:\n" - << " max = " << max_distance << " = " << max_distance/average_spacing << " * average spacing\n" - << " avg = " << avg_distance << " = " << avg_distance/average_spacing << " * average spacing\n"; - - } // for each input file - - std::cerr << std::endl; - - // Returns accumulated fatal error - std::cerr << "Tool returned " << accumulated_fatal_err << std::endl; - return accumulated_fatal_err; -} - diff --git a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/CMakeLists.txt b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/CMakeLists.txt index 35e54e9afaf..a80e3c03893 100644 --- a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/CMakeLists.txt +++ b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/CMakeLists.txt @@ -51,9 +51,6 @@ if ( CGAL_FOUND ) # Temporary debugging stuff ADD_DEFINITIONS( "-DDEBUG_TRACE" ) # turn on traces - # Executables that do *not* require BLAS, LAPACK nor TAUCS - create_single_source_cgal_program( "APSS_reconstruction_test.cpp" ) - # Link with BLAS, LAPACK and TAUCS (optional) find_package(TAUCS) if(TAUCS_FOUND) diff --git a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake index 063b8316fea..38f8b1a6d28 100755 --- a/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake +++ b/Surface_reconstruction_points_3/test/Surface_reconstruction_points_3/cgal_test_with_cmake @@ -164,10 +164,6 @@ if [ $# -ne 0 ] ; then done else echo "Run all tests." - if [ `can_compile APSS_reconstruction_test` == "y" ]; then - compile_and_run APSS_reconstruction_test - [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y - fi if [ `can_compile poisson_reconstruction_test` == "y" ]; then compile_and_run poisson_reconstruction_test [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y From 10fc4bb8bfefeb1a1b9b7259b2f811cc65a1d870 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 13:18:09 +0000 Subject: [PATCH 026/128] I forgot those files (remove APSS). --- .gitattributes | 2 - .../APSS_reconstruction.cmd | 1 - .../APSS_reconstruction.cpp | 341 ------------------ .../APSS_reconstruction_example.cpp | 106 ------ 4 files changed, 450 deletions(-) delete mode 100644 Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cmd delete mode 100644 Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cpp delete mode 100644 Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction_example.cpp diff --git a/.gitattributes b/.gitattributes index c3a915938f2..840dbfe1ccf 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3655,8 +3655,6 @@ Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/poisson_ Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/sampling.jpg -text svneol=unset#image/jpeg Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/sharp_features.jpg -text svneol=unset#image/jpeg Surface_reconstruction_points_3/doc_tex/Surface_reconstruction_points_3/simplification_bench.jpg -text svneol=unset#image/jpeg -Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cmd eol=lf -Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction_example.cpp -text Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake eol=lf Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake.bat eol=crlf Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/data/kitten.xyz -text diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cmd b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cmd deleted file mode 100644 index 7635d925612..00000000000 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cmd +++ /dev/null @@ -1 +0,0 @@ -data/kitten.xyz kitten_apss-20-100-0.5.off -sm_distance 0.5 -smooth 2 diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cpp b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cpp deleted file mode 100644 index 4d01b688358..00000000000 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/APSS_reconstruction.cpp +++ /dev/null @@ -1,341 +0,0 @@ -// APSS_reconstruction.cpp - -//---------------------------------------------------------- -// APSS reconstruction method: -// Reads a point set or a mesh's set of vertices, reconstructs a surface using APSS, -// and saves the surface. -// Output format is .off. -//---------------------------------------------------------- -// APSS_reconstruction file_in file_out [options] - -// CGAL -#include // must be included before kernel -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "compute_normal.h" - -#include -#include -#include -#include - - -// ---------------------------------------------------------------------------- -// Types -// ---------------------------------------------------------------------------- - -// kernel -typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; - -// Simple geometric types -typedef Kernel::FT FT; -typedef Kernel::Point_3 Point; -typedef Kernel::Vector_3 Vector; -typedef CGAL::Point_with_normal_3 Point_with_normal; -typedef Kernel::Sphere_3 Sphere; -typedef std::deque PointList; - -// polyhedron -typedef CGAL::Polyhedron_3 Polyhedron; - -// APSS implicit function -typedef CGAL::APSS_reconstruction_function APSS_reconstruction_function; - -// Surface mesher -typedef CGAL::Surface_mesh_default_triangulation_3 STr; -typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; -typedef CGAL::Implicit_surface_3 Surface_3; - -// AABB tree -typedef CGAL::AABB_polyhedron_triangle_primitive Primitive; -typedef CGAL::AABB_traits AABB_traits; -typedef CGAL::AABB_tree AABB_tree; - - -// ---------------------------------------------------------------------------- -// main() -// ---------------------------------------------------------------------------- - -int main(int argc, char * argv[]) -{ - std::cerr << "APSS reconstruction method." << std::endl; - - //*************************************** - // decode parameters - //*************************************** - - // usage - if (argc-1 < 2) - { - std::cerr << "Reads a point set or a mesh's set of vertices, reconstructs a surface using APSS,\n"; - std::cerr << "and saves the surface.\n"; - std::cerr << "\n"; - std::cerr << "Usage: " << argv[0] << " file_in file_out [options]\n"; - std::cerr << "Input file formats are .off (mesh) and .xyz or .pwn (point set).\n"; - std::cerr << "Output file format is .off.\n"; - std::cerr << "Options:\n"; - std::cerr << " -sm_radius Radius upper bound (default=100 * average spacing)\n"; - std::cerr << " -sm_distance Distance upper bound (default=0.25 * average spacing)\n"; - std::cerr << " -smooth Smoothness factor (default = 2)\n"; - std::cerr << " - should be greater than 1,\n"; - std::cerr << " - high numbers lead to smoother surfaces.\n"; - return EXIT_FAILURE; - } - - // APSS options - FT sm_angle = 20.0; // Min triangle angle (degrees). - FT sm_radius = 100; // Max triangle size w.r.t. point set average spacing. - FT sm_distance = 0.25; // Approximation error w.r.t. point set average spacing. - FT smoothness = 2; // Smoothness factor. In the range 2 (clean datasets) to 8 (noisy datasets). - - // decode parameters - std::string input_filename = argv[1]; - std::string output_filename = argv[2]; - for (int i=3; i+1point(); - Vector n = compute_vertex_normal(*v); - points.push_back(Point_with_normal(p,n)); - } - } - // If XYZ file format - else if (extension == ".xyz" || extension == ".XYZ" || - extension == ".pwn" || extension == ".PWN") - { - // Reads the point set file in points[]. - // Note: read_xyz_points_and_normals() requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - std::ifstream stream(input_filename.c_str()); - if (!stream || - !CGAL::read_xyz_points_and_normals( - stream, - std::back_inserter(points), - CGAL::make_normal_of_point_with_normal_pmap(std::back_inserter(points)))) - { - std::cerr << "Error: cannot read file " << input_filename << std::endl; - return EXIT_FAILURE; - } - } - else - { - std::cerr << "Error: cannot read file " << input_filename << std::endl; - return EXIT_FAILURE; - } - - // Prints status - int nb_points = points.size(); - std::cerr << "Reads file " << input_filename << ": " << nb_points << " points, " - << task_timer.time() << " seconds" - << std::endl; - task_timer.reset(); - - //*************************************** - // Checks requirements - //*************************************** - - if (nb_points == 0) - { - std::cerr << "Error: empty point set" << std::endl; - return EXIT_FAILURE; - } - - bool points_have_normals = (points.begin()->normal() != CGAL::NULL_VECTOR); - if ( ! points_have_normals ) - { - std::cerr << "Input point set not supported: this reconstruction method requires oriented normals" << std::endl; - return EXIT_FAILURE; - } - - CGAL::Timer reconstruction_timer; reconstruction_timer.start(); - - //*************************************** - // Creates implicit function - //*************************************** - - std::cerr << "Creates APSS implicit function (smoothness=" << smoothness << ")...\n"; - - // Creates implicit function from the read points. - // Note: this method requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - APSS_reconstruction_function function( - points.begin(), points.end(), - CGAL::make_normal_of_point_with_normal_pmap(points.begin()), - smoothness); - - // Prints status - std::cerr << "Creates implicit function: " << task_timer.time() << " seconds\n"; - task_timer.reset(); - - //*************************************** - // Surface mesh generation - //*************************************** - - std::cerr << "Surface meshing...\n"; - - // Computes average spacing - FT average_spacing = CGAL::compute_average_spacing(points.begin(), points.end(), - 6 /* knn = 1 ring */); - - // Gets one point inside the implicit surface - Point inner_point = function.get_inner_point(); - FT inner_point_value = function(inner_point); - if(inner_point_value >= 0.0) - { - std::cerr << "Error: unable to seed (" << inner_point_value << " at inner_point)" << std::endl; - return EXIT_FAILURE; - } - - // Gets implicit function's radius - Sphere bsphere = function.bounding_sphere(); - FT radius = std::sqrt(bsphere.squared_radius()); - - // Defines the implicit surface: requires defining a - // conservative bounding sphere centered at inner point. - FT sm_sphere_radius = 5.0 * radius; - FT sm_dichotomy_error = sm_distance*average_spacing/1000.0; // Dichotomy error must be << sm_distance - Surface_3 surface(function, - Sphere(inner_point,sm_sphere_radius*sm_sphere_radius), - sm_dichotomy_error/sm_sphere_radius); - - // Defines surface mesh generation criteria - CGAL::Surface_mesh_default_criteria_3 criteria(sm_angle, // Min triangle angle (degrees) - sm_radius*average_spacing, // Max triangle size - sm_distance*average_spacing); // Approximation error - - CGAL_TRACE_STREAM << " make_surface_mesh(sphere center=("< -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -// Types -typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; -typedef Kernel::FT FT; -typedef Kernel::Point_3 Point; -typedef CGAL::Point_with_normal_3 Point_with_normal; -typedef Kernel::Sphere_3 Sphere; -typedef std::vector PointList; -typedef CGAL::Polyhedron_3 Polyhedron; -typedef CGAL::APSS_reconstruction_function APSS_reconstruction_function; -typedef CGAL::Surface_mesh_default_triangulation_3 STr; -typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; -typedef CGAL::Implicit_surface_3 Surface_3; - -int main(void) -{ - // APSS options - FT sm_angle = 20.0; // Min triangle angle in degrees. - FT sm_radius = 100; // Max triangle size w.r.t. point set average spacing. - FT sm_distance = 0.5; // Approximation error w.r.t. point set average spacing. - const FT smoothness = (FT)4.0; - // Smoothness factor: ranges from 2 for clean datasets to 8 for noisy datasets. - - // Reads the point set file in points[]. - // Note: read_xyz_points_and_normals() requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - PointList points; - std::ifstream stream("data/kitten.xyz"); - if (!stream || - !CGAL::read_xyz_points_and_normals( - stream, - std::back_inserter(points), - CGAL::make_normal_of_point_with_normal_pmap(std::back_inserter(points)))) - { - std::cerr << "Error: cannot read file data/kitten.xyz" << std::endl; - return EXIT_FAILURE; - } - - // Creates implicit function from the read points. - // Note: this method requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - APSS_reconstruction_function function( - points.begin(), points.end(), - CGAL::make_normal_of_point_with_normal_pmap(points.begin()), - smoothness); - - // Computes average spacing - FT average_spacing = CGAL::compute_average_spacing(points.begin(), points.end(), - 6 /* knn = 1 ring */); - - // Gets one point inside the implicit surface - // and computes implicit function bounding sphere radius. - Point inner_point = function.get_inner_point(); - Sphere bsphere = function.bounding_sphere(); - FT radius = std::sqrt(bsphere.squared_radius()); - - // Defines the implicit surface: requires defining a - // conservative bounding sphere centered at inner point. - FT sm_sphere_radius = 5.0 * radius; - FT sm_dichotomy_error = sm_distance*average_spacing/1000.0; // Dichotomy error must be << sm_distance - Surface_3 surface(function, - Sphere(inner_point,sm_sphere_radius*sm_sphere_radius), - sm_dichotomy_error/sm_sphere_radius); - - // Defines surface mesh generation criteria - CGAL::Surface_mesh_default_criteria_3 criteria(sm_angle, // Min triangle angle (degrees) - sm_radius*average_spacing, // Max triangle size - sm_distance*average_spacing); // Approximation error - - // Generates surface mesh with manifold option - STr tr; // 3D Delaunay triangulation for surface mesh generation - C2t3 c2t3(tr); // 2D complex in 3D Delaunay triangulation - CGAL::make_surface_mesh(c2t3, // reconstructed mesh - surface, // implicit surface - criteria, // meshing criteria - CGAL::Manifold_with_boundary_tag()); // require manifold mesh - - if(tr.number_of_vertices() == 0) - return EXIT_FAILURE; - - // saves reconstructed surface mesh - std::ofstream out("kitten_apss-20-100-0.5.off"); - Polyhedron output_mesh; - CGAL::output_surface_facets_to_polyhedron(c2t3, output_mesh); - out << output_mesh; - - return EXIT_SUCCESS; -} From 068ec0d48f2db3d76ceddb0b00d2d91f651eba51 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 13:26:40 +0000 Subject: [PATCH 027/128] Fix bashism == --- .../Surface_reconstruction_points_3/cgal_test_with_cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake index 44227c35228..029daedb03e 100755 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake @@ -1,4 +1,4 @@ -#! /bin/sh +e#! /bin/sh # # This script is a modified version of cgal_test_with_cmake which: @@ -164,11 +164,11 @@ if [ $# -ne 0 ] ; then done else echo "Run all tests." - if [ `can_compile poisson_reconstruction` == "y" ]; then + if [ `can_compile poisson_reconstruction` = "y" ]; then compile_and_run poisson_reconstruction [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y fi - if [ `can_compile poisson_reconstruction_example` == "y" ]; then + if [ `can_compile poisson_reconstruction_example` = "y" ]; then compile_and_run poisson_reconstruction_example [ -z "${NEED_CLEAN}" ] && NEED_CLEAN=y fi @@ -178,7 +178,7 @@ fi # The clean target generated by CMake under cygwin # always fails for some reason # -if [ "${NEED_CLEAN}" == "y" ]; then +if [ "${NEED_CLEAN}" = "y" ]; then if ! ( uname | grep -q "CYGWIN" ) ; then ${MAKE_CLEAN_CMD} fi From be86016f6e6bb02ffd05d21528df2c1bff22b8ff Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 14:10:25 +0000 Subject: [PATCH 028/128] Re-add g++-3.4 in the list of supported compilers (to be synced with the testsuite and the CGAL web site). --- Installation/doc_tex/Installation/installation.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index 2f45c0e44b9..ac14b773ce5 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -114,7 +114,7 @@ In order to build the \cgal\ libraries, you need a \CC\ compiler. \gdef\lcTabularBorder{2} \begin{tabular}{|l|l|} \hline \textbf{compiler} & \textbf{operating system}\\\hline\hline - \Gcc{4.0, 4.1, 4.2, 4.3} \footnotemark[10] + \Gcc{3.4, 4.0, 4.1, 4.2, 4.3} \footnotemark[10] & Solaris 2.6+ / Linux 2.x / MacOS X \\ & \mswin\ 95/98/2000/XP/NT4\footnotemark[11]\\\hline \msvc{8.0, 9.0} (\textsc{Visual Studio 2005 and 2008}) \footnotemark[12] From c62b750470155d6b329db05b74142470f369eab1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 15:09:52 +0000 Subject: [PATCH 029/128] Merge fmo trunk: | ------------------------------------------------------------------------ | r53730 | afabri | 2010-01-22 16:07:59 +0100 (Fri, 22 Jan 2010) | 1 line | Changed paths: | M /trunk/Spatial_searching/doc_tex/Spatial_searching/intro.tex | M /trunk/Spatial_searching/doc_tex/Spatial_searching/main.tex | | Moved ccAuthor right after the title | ------------------------------------------------------------------------ | --- Installation/CHANGES | 94 +++++++++++++------ .../doc_tex/Spatial_searching/intro.tex | 2 +- .../doc_tex/Spatial_searching/main.tex | 2 + 3 files changed, 66 insertions(+), 32 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 77b7df95a2c..bf3a0c79f5b 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -2,72 +2,104 @@ Release notes of CGAL. ----------------------------- Release 3.6 ---------------------------------- -******* -NOTE: The section "Release 3.6" of the current file Will be re-formatted -by the release manager a few days before the release. For the moment, you -can simply add your changes with the formating you want. -******* - CGAL 3.6 offers the following improvements and new functionality : -* 2D/3D Regular triangulations : Weighted_point now has a constructor - from Cartesian coordinates. +

    Geometry Kernels

    -* 2D and 3D Geometry Kernel: +

    2D and 3D Geometry Kernel

    - Add new do_intersect() and intersection() overloads: + do_intersect(Bbox_3, Bbox_3/Line_3/Ray_3/Segment_3) + intersection(Triangle_3, Line_3/Ray_3/Segment_3) -* 3D Triangulations : + +

    Polygons

    + +

    2D Regularized Boolean Set-Operations

    + + - Fixed General_polygon_set_2::arrangement() to return the proper type + of object. + + +

    Arrangement

    + +

    2D Arrangements

    + + - Fixed passing a (const) traits object to the constructor of Arrangement_2. + + - Introduced Arrangement_2::fictitious_face(), which returns the fictitious + face in case of an unbounded arrangement. + + - Fixed a bug in Bezier-curve handling. + + - Added (back) iterator, number_of_holes(), holes_begin(), and holes_end() + to the default DCEL for backward compatibility. + + - Added (simple) versions of the free overlay() function. It employs the + default overlay-traits, which practically does nothing. + + + +

    Triangulations and Delaunay Triangulations

    + +

    2D/3D Regular triangulations

    + + - Weighted_point now has a constructor from Cartesian coordinates. + +

    3D Triangulations

    + - Regular_triangulation_3 : semi-static floating-point filters are now used in its predicates, which can speed up its construction by a factor of about 3 when Exact_predicates_inexact_constructions_kernel is used. + - The class Regular_triangulation_filtered_traits_3 is deprecated, the class Regular_triangulation_euclidean_traits_3 must be used instead. The predicates of that traits will be filtered if the kernel given as template parameter of that traits is itself a filtered kernel. + - Triangulation_hierarchy_3 is now deprecated, and replaced by a simpler CGAL::Fast_location policy template parameter of Delaunay_triangulation_3. + - The old version of remove() (enabled with CGAL_DELAUNAY_3_OLD_REMOVE) has been deleted. -* 3D Periodic triangulations: +

    3D Periodic triangulations

    + - New demo: 3D periodic Lloyd algorithm. + - New functionality for Voronoi diagrams: dual of an edge and of a vertex, volume and centroid of the dual of a vertex. + - The package can now be used with the 3D Alpha Shapes package to compute periodic alpha shapes. -* 3D Alpha shapes: +

    3D Alpha shapes

    + - The class Weighted_alpha_shape_euclidean_traits_3 is deprecated, the class Regular_triangulation_euclidean_traits_3 must be used instead. + - The package can now be used together with the 3D Periodic Triangulation package to compute periodic alpha shapes. -* 3D Mesh Generation - - The mesh generator has been enriched which an optimisation phase to provide 3D meshes - with well shaped tetrahedra (and in particular no slivers). The optimization phase - involves four different optimization processes: two global opitimization processes (ODT anf Lloyd), - a pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users - needs and to available computer resources. -* Arrangement_on_surface_2: - - Fixed passing a (const) traits object to the constructor of Arrangement_2. - - Introduced Arrangement_2::fictitious_face(), which returns the fictitious - face in case of an unbounded arrangement. - - Fixed a bug in Bezier-curve handling. - - Added (back) iterator, number_of_holes(), holes_begin(), and holes_end() - to the default DCEL for backward compatibility. - - Added (simple) versions of the free overlay() function. It employs the - default overlay-traits, which practically does nothing. +

    Mesh Generation

    -* Boolean_set_operations_2: - - Fixed General_polygon_set_2::arranngement() to return the proper type - of object. +

    3D Mesh Generation

    + + - The mesh generator has been enriched which an optimization phase to + provide 3D meshes with well shaped tetrahedra (and in particular no + slivers). The optimization phase involves four different optimization + processes: two global optimization processes (ODT anf Lloyd), a + pertuber and an exuder. Each of these processes can be activated or + not, and tuned to the users needs and to available computer resources. + +

    Support library

    + +

    CGAL ipelets

    -* CGAL_ipelets: - Add support for version 7 of Ipe. + + ----------------------------- Release 3.5 ---------------------------------- CGAL releases will now be published about every six months. As a transition release, CGAL-3.5 has been developed during 9 months from the release diff --git a/Spatial_searching/doc_tex/Spatial_searching/intro.tex b/Spatial_searching/doc_tex/Spatial_searching/intro.tex index dae9a900976..19c921cd506 100644 --- a/Spatial_searching/doc_tex/Spatial_searching/intro.tex +++ b/Spatial_searching/doc_tex/Spatial_searching/intro.tex @@ -1,5 +1,5 @@ -\ccChapterAuthor{Hans Tangelder \and Andreas Fabri} + \section{Introduction} diff --git a/Spatial_searching/doc_tex/Spatial_searching/main.tex b/Spatial_searching/doc_tex/Spatial_searching/main.tex index d6cf2169293..3bd151669c4 100644 --- a/Spatial_searching/doc_tex/Spatial_searching/main.tex +++ b/Spatial_searching/doc_tex/Spatial_searching/main.tex @@ -1,5 +1,7 @@ \ccUserChapter{dD Spatial Searching\label{ChapterUserSpatialSearching}} +\ccChapterAuthor{Hans Tangelder \and Andreas Fabri} + \input{Spatial_searching/PkgDescription.tex} \minitoc From 8a68854bedd9e315dda7575bdd40ef577fa683e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Fri, 22 Jan 2010 15:45:00 +0000 Subject: [PATCH 030/128] Typo. --- Installation/CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index bf3a0c79f5b..5dad111f76a 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -85,7 +85,7 @@ CGAL 3.6 offers the following improvements and new functionality :

    3D Mesh Generation

    - - The mesh generator has been enriched which an optimization phase to + - The mesh generator has been enriched with an optimization phase to provide 3D meshes with well shaped tetrahedra (and in particular no slivers). The optimization phase involves four different optimization processes: two global optimization processes (ODT anf Lloyd), a From 11830561ae87cd8ea21de649b259ebfc9abcec54 Mon Sep 17 00:00:00 2001 From: Monique Teillaud Date: Fri, 22 Jan 2010 16:05:39 +0000 Subject: [PATCH 031/128] bug fix --- Manual/doc_tex/Manual/manual-3.6.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/doc_tex/Manual/manual-3.6.bib b/Manual/doc_tex/Manual/manual-3.6.bib index 98c1dbdfdf5..64e17ff5cda 100644 --- a/Manual/doc_tex/Manual/manual-3.6.bib +++ b/Manual/doc_tex/Manual/manual-3.6.bib @@ -66,7 +66,7 @@ , publisher = "{CGAL Editorial Board}" , edition = "{3.6}" , booktitle = "{CGAL} User and Reference Manual" -, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations" +, url = "http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicKerneld" , year = 2010 } From f2ebe25ff41eb65cb0a3836e8452a06523334f7c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 16:32:59 +0000 Subject: [PATCH 032/128] update Biblio/how_to_cite_cgal.bib --- .../latex_converter_config/html/Biblio/how_to_cite_cgal.bib | 6 +++--- .../html/Biblio/how_to_cite_cgal.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib index a18b0cab0ae..797f02dc995 100644 --- a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib +++ b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.bib @@ -6,7 +6,7 @@ % % automatically generated % % bibtex2html ../../../../Manual/doc_tex/Manual/manual-3.6.bib -% Date: Wed Jan 20 15:02:42 2010 +% Date: Fri Jan 22 17:32:48 2010 % Author: lrineau % @@ -52,8 +52,8 @@ TITLE = {Algebraic Kernel}, YEAR = {2010}, EDITION = {{3.6}}, - NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlgebraicFoundations}, - ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicFoundations}}, + NOTE = {http\://www.cgal.org/Manual/3.6/doc\_html/cgal\_manual/packages.html\#Pkg\:AlgebraicKerneld}, + ALTNOTE = {\url{http://www.cgal.org/Manual/3.6/doc_html/cgal_manual/packages.html#Pkg:AlgebraicKerneld}}, } @INCOLLECTION{cgal:hhkps-nt-10, diff --git a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html index 1659c0d0a02..256797864eb 100644 --- a/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html +++ b/Manual_tools/src/latex_converter_config/html/Biblio/how_to_cite_cgal.html @@ -58,7 +58,7 @@ In CGAL User and Reference Manual. CGAL Editorial Board, 3.6 edition, 2010. -[WWW] +[WWW] [bibtex-key = cgal:bht-ak-10 - bibtex file]
  82. From 2669cc74fa589c339b3feb5772bd622877b65ea8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:13:08 +0000 Subject: [PATCH 033/128] Add a check about Boost version, before mesh_3_plugin is compiled. --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 4c50eb1d70e..8314bbf0436 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -56,6 +56,8 @@ find_package(TAUCS) if(CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) + find_package(Boost) + include_directories ( ${QGLVIEWER_INCLUDE_DIR} ) # Link with BLAS, LAPACK and TAUCS (optional) @@ -214,11 +216,15 @@ if(CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) polyhedron_demo_plugin(remeshing_plugin Polyhedron_demo_remeshing_plugin Polyhedron_demo_remeshing_plugin_cgal_code.cpp Polyhedron_demo_remeshing_plugin_cgal_code.moc ${remeshingUI_FILES}) target_link_libraries(remeshing_plugin scene_polyhedron_item polygon_soup scene_c2t3_item) - qt4_generate_moc("${CMAKE_CURRENT_SOURCE_DIR}/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp" Scene_c3t3_item.moc ) + if ( Boost_VERSION GREATER 103400 ) + qt4_generate_moc("${CMAKE_CURRENT_SOURCE_DIR}/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp" Scene_c3t3_item.moc ) - polyhedron_demo_plugin(mesh_3_plugin Polyhedron_demo_mesh_3_plugin - Polyhedron_demo_mesh_3_plugin_cgal_code.cpp Scene_c3t3_item.moc) - target_link_libraries(mesh_3_plugin scene_polyhedron_item ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) + polyhedron_demo_plugin(mesh_3_plugin Polyhedron_demo_mesh_3_plugin + Polyhedron_demo_mesh_3_plugin_cgal_code.cpp Scene_c3t3_item.moc) + target_link_libraries(mesh_3_plugin scene_polyhedron_item ${QGLVIEWER_LIBRARIES} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}) + else( Boost_VERSION GREATER 103400 ) + message(STATUS "warning: the plugin mesh_3_plugin requires Boost>=1.34.1 and will not be compiled.") + endif( Boost_VERSION GREATER 103400 ) polyhedron_demo_plugin(inside_out_plugin Polyhedron_demo_inside_out_plugin) target_link_libraries(inside_out_plugin scene_polyhedron_item polygon_soup) From 781d70788750bca51d528356817180bdc9b48ce4 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:14:27 +0000 Subject: [PATCH 034/128] typo --- Installation/CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 5dad111f76a..587b863beea 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -88,7 +88,7 @@ CGAL 3.6 offers the following improvements and new functionality : - The mesh generator has been enriched with an optimization phase to provide 3D meshes with well shaped tetrahedra (and in particular no slivers). The optimization phase involves four different optimization - processes: two global optimization processes (ODT anf Lloyd), a + processes: two global optimization processes (ODT and Lloyd), a pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users needs and to available computer resources. From f634946912aa14ff74d15b6fb300868eff35ffa0 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:21:46 +0000 Subject: [PATCH 035/128] Now Boost>=1.34.1 is required. --- Installation/INSTALL | 2 +- Installation/doc_tex/Installation/installation.tex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/INSTALL b/Installation/INSTALL index c67927340d0..31a19cf7926 100644 --- a/Installation/INSTALL +++ b/Installation/INSTALL @@ -32,7 +32,7 @@ CGAL packages, some are only needed for demos. CMake >= 2.6 is recommended, since it supports a cross platform GUI http://www.cmake.org/ - * Boost (>= 1.33.1) + * Boost (>= 1.34.1) Required for building CGAL and for applications using CGAL Required compiled Boost library: Boost.Threads Optional compiled Boost library: Boost.Program_options diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index ac14b773ce5..8fa93ff39cc 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -140,7 +140,7 @@ using \cmake\ version~2.6 or higher. \subsection{boost} \cgal\ requires a working installation of the \boost\ libraries. In particular the header files and the threading library -binaries. Version 1.33.1 (or higher) is needed. In case +binaries. Version 1.34.1 (or higher) is needed. In case the \boost\ libraries are not installed on your system already, you can obtain them from \boostpage. For Windows you can download an installer from \path'http://www.boostpro.com/products/free'. From 34a67b4e4ef1f8a7e99d624379ed91124f60e7d7 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:25:18 +0000 Subject: [PATCH 036/128] Now Boost>=1.34.1 is required. + Merge from trunk: | New Revision: 53739 | Author: penarand | Date: 2010-01-22 17:58:21 +0100 (Fri, 22 Jan 2010) | | Log message: | | added paragraphs on the Algebraic Kernel and on the new number types Gmpfr | and Gmpfi --- Installation/CHANGES | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Installation/CHANGES b/Installation/CHANGES index 587b863beea..4a26b189284 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -4,6 +4,11 @@ Release notes of CGAL. CGAL 3.6 offers the following improvements and new functionality : +

    General

    + + - Boost version 1.34.1 at least is now required. + +

    Geometry Kernels

    2D and 3D Geometry Kernel

    @@ -12,6 +17,23 @@ CGAL 3.6 offers the following improvements and new functionality : + intersection(Triangle_3, Line_3/Ray_3/Segment_3) +

    Arithmetic and Algebra

    + +

    Algebraic Kernel (new package)

    + + - This new package is targeted to provide black-box implementations of + state-of-the-art algorithms to determine, compare and approximate real + roots of univariate polynomials and bivariate polynomial systems. It + includes models of the univariate algebraic kernel concept, based on + the library RS. + +

    Number Types

    + + - Two new arbitrary fixed-precision floating-point number types have been + added: the scalar type Gmpfr and the interval type Gmpfi, based on the + MPFR and MPFI libraries respectively. + +

    Polygons

    2D Regularized Boolean Set-Operations

    From b5763b990732c64286815065a2a1f0770941bc5f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:35:03 +0000 Subject: [PATCH 037/128] Final (I hope) version of CHANGES. --- Installation/CHANGES | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 4a26b189284..47780c24f5f 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -4,22 +4,22 @@ Release notes of CGAL. CGAL 3.6 offers the following improvements and new functionality : -

    General

    +1 General - Boost version 1.34.1 at least is now required. -

    Geometry Kernels

    +2 Geometry Kernels -

    2D and 3D Geometry Kernel

    +2.1 2D and 3D Geometry Kernel - Add new do_intersect() and intersection() overloads: + do_intersect(Bbox_3, Bbox_3/Line_3/Ray_3/Segment_3) + intersection(Triangle_3, Line_3/Ray_3/Segment_3) -

    Arithmetic and Algebra

    +3 Arithmetic and Algebra -

    Algebraic Kernel (new package)

    +3.1 Algebraic Kernel (new package) - This new package is targeted to provide black-box implementations of state-of-the-art algorithms to determine, compare and approximate real @@ -27,24 +27,24 @@ CGAL 3.6 offers the following improvements and new functionality : includes models of the univariate algebraic kernel concept, based on the library RS. -

    Number Types

    +3.2 Number Types - Two new arbitrary fixed-precision floating-point number types have been added: the scalar type Gmpfr and the interval type Gmpfi, based on the MPFR and MPFI libraries respectively. -

    Polygons

    +4 Polygons -

    2D Regularized Boolean Set-Operations

    +4.1 2D Regularized Boolean Set-Operations - Fixed General_polygon_set_2::arrangement() to return the proper type of object. -

    Arrangement

    +5 Arrangement -

    2D Arrangements

    +5.1 2D Arrangements - Fixed passing a (const) traits object to the constructor of Arrangement_2. @@ -61,13 +61,13 @@ CGAL 3.6 offers the following improvements and new functionality : -

    Triangulations and Delaunay Triangulations

    +6 Triangulations and Delaunay Triangulations -

    2D/3D Regular triangulations

    +6.1 2D/3D Regular triangulations - Weighted_point now has a constructor from Cartesian coordinates. -

    3D Triangulations

    +6.2 3D Triangulations - Regular_triangulation_3 : semi-static floating-point filters are now used in its predicates, which can speed up its construction by a factor of about 3 @@ -84,7 +84,7 @@ CGAL 3.6 offers the following improvements and new functionality : - The old version of remove() (enabled with CGAL_DELAUNAY_3_OLD_REMOVE) has been deleted. -

    3D Periodic triangulations

    +6.3 3D Periodic triangulations - New demo: 3D periodic Lloyd algorithm. @@ -94,7 +94,7 @@ CGAL 3.6 offers the following improvements and new functionality : - The package can now be used with the 3D Alpha Shapes package to compute periodic alpha shapes. -

    3D Alpha shapes

    +6.4 3D Alpha shapes - The class Weighted_alpha_shape_euclidean_traits_3 is deprecated, the class Regular_triangulation_euclidean_traits_3 must be used instead. @@ -103,9 +103,9 @@ CGAL 3.6 offers the following improvements and new functionality : package to compute periodic alpha shapes. -

    Mesh Generation

    +7 Mesh Generation -

    3D Mesh Generation

    +7.1 3D Mesh Generation - The mesh generator has been enriched with an optimization phase to provide 3D meshes with well shaped tetrahedra (and in particular no @@ -114,9 +114,9 @@ CGAL 3.6 offers the following improvements and new functionality : pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users needs and to available computer resources. -

    Support library

    +8 Support library

    -

    CGAL ipelets

    +8.1 CGAL ipelets - Add support for version 7 of Ipe. From 58ad9c8db1897bd43e5004be9deb08647be4468d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:36:49 +0000 Subject: [PATCH 038/128] s/Trolltech/nokia --- Manual/doc_tex/Preliminaries/thirdparty.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/doc_tex/Preliminaries/thirdparty.tex b/Manual/doc_tex/Preliminaries/thirdparty.tex index 60ef823ff6d..76c15d68ff8 100644 --- a/Manual/doc_tex/Preliminaries/thirdparty.tex +++ b/Manual/doc_tex/Preliminaries/thirdparty.tex @@ -121,7 +121,7 @@ it is used for many \cgal\ 2D as well as 3D demos. As Qt is the layer underneath {\sc Kde}, Qt is installed on many Linux systems. Otherwise you can download it from - \path'http://www.trolltech.com'. + \path'http://qt.nokia.com'. \subsection{libQGLViewer \label{thirdparty:libQGLViewer}} From 77f577403d78141dbdbdef156c142cfbb709abc0 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:37:01 +0000 Subject: [PATCH 039/128] Typo --- Manual/doc_tex/Preliminaries/thirdparty.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Manual/doc_tex/Preliminaries/thirdparty.tex b/Manual/doc_tex/Preliminaries/thirdparty.tex index 76c15d68ff8..853a699b8c8 100644 --- a/Manual/doc_tex/Preliminaries/thirdparty.tex +++ b/Manual/doc_tex/Preliminaries/thirdparty.tex @@ -121,7 +121,7 @@ it is used for many \cgal\ 2D as well as 3D demos. As Qt is the layer underneath {\sc Kde}, Qt is installed on many Linux systems. Otherwise you can download it from - \path'http://qt.nokia.com'. + \path'http://qt.nokia.com/'. \subsection{libQGLViewer \label{thirdparty:libQGLViewer}} @@ -132,5 +132,5 @@ A 3D widget based on \qt~4's \ccc{QGLWidget}. It can be downloaded from An implementation of Open Inventor. It is used in the demo of the \ccRef[Kinetic Data Structures]{Pkg:Kds} package. You can download -it from \path'http://www.coin3d.org'. +it from \path'http://www.coin3d.org/'. From a487c660e4cf0482b62e938204f72a1a122b926d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 22 Jan 2010 17:42:06 +0000 Subject: [PATCH 040/128] s/Trolltech/Qt.Nokia/ --- .../doc_tex/GraphicsView/GraphicsView.tex | 22 +++++++++---------- .../doc_tex/GraphicsView/PkgDescription.tex | 2 +- .../doc_tex/GraphicsView_ref/intro.tex | 2 +- Manual/doc_tex/Preliminaries/licenses.tex | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/GraphicsView/doc_tex/GraphicsView/GraphicsView.tex b/GraphicsView/doc_tex/GraphicsView/GraphicsView.tex index f50a4972a68..558b4a44b56 100644 --- a/GraphicsView/doc_tex/GraphicsView/GraphicsView.tex +++ b/GraphicsView/doc_tex/GraphicsView/GraphicsView.tex @@ -1,17 +1,17 @@ -\ccAnchor{http://trolltech.com/products/qt}{Qt} is a {\sc Gui} toolkit for +\ccAnchor{http://qt.nokia.com/}{Qt} is a {\sc Gui} toolkit for cross-platform application development. % +-----------------------------------------------------+ \section{Introduction} This chapter describes classes that help to visualize two dimensional \cgal\ objects -with the \ccAnchor{http://doc.trolltech.com/4.4/graphicsview.html}{Qt Graphics View Framework}. +with the \ccAnchor{http://doc.qt.nokia.com/4.4/graphicsview.html}{Qt Graphics View Framework}. -This framework uses the model view paradigm. \ccAnchor{http://doc.trolltech.com/4.4/qgraphicsitem.html}{\ccc{QGraphicsItem}}s are stored in a -\ccAnchor{http://doc.trolltech.com/4.4/qgraphicsscene.html}{\ccc{QGraphicsScene}} -and are displayed in a \ccAnchor{http://doc.trolltech.com/4.4/qgraphicsview.html}{\ccc{QGraphicsView}}. The items +This framework uses the model view paradigm. \ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsitem.html}{\ccc{QGraphicsItem}}s are stored in a +\ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsscene.html}{\ccc{QGraphicsScene}} +and are displayed in a \ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsview.html}{\ccc{QGraphicsView}}. The items have a paint method which is called when an item is in the visible area of a view. The framework is also responsible for dispatching events from the view via the scene to the items. The framework is extensible in the sense @@ -46,14 +46,14 @@ brings them together we adopted the following, hybrid naming conventions. \section{Overall Design} In Figure~\ref{graphicsview:uml} you see four classes depicted in grey, -that come from the Qt Graphics View Framework. The \ccAnchor{http://doc.trolltech.com/4.4/qgraphicsscene.html}{\ccc{QGraphicsScene}} -contains \ccAnchor{http://doc.trolltech.com/4.4/qgraphicsitem.html}{\ccc{QGraphicsItem}}s, which get displayed in any number -of \ccAnchor{http://doc.trolltech.com/4.4/qgraphicsview.html}{\ccc{QGraphicsView}}s. The views are widgets, that is they take screen space +that come from the Qt Graphics View Framework. The \ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsscene.html}{\ccc{QGraphicsScene}} +contains \ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsitem.html}{\ccc{QGraphicsItem}}s, which get displayed in any number +of \ccAnchor{http://doc.qt.nokia.com/4.4/qgraphicsview.html}{\ccc{QGraphicsView}}s. The views are widgets, that is they take screen space in an application. -The fourth class is the \ccAnchor{http://doc.trolltech.com/4.4/qobject.html}{\ccc{QObject}}. It plays an important role in Qt for -event handling and memory management. First, it allows to add \ccAnchor{http://doc.trolltech.com/4.4/signalsandslots.html}{signals and -slots}, and to connect them. Second, it allows to install \ccAnchor{http://doc.trolltech.com/4.4/eventsandfilters.html}{event filters}. +The fourth class is the \ccAnchor{http://doc.qt.nokia.com/4.4/qobject.html}{\ccc{QObject}}. It plays an important role in Qt for +event handling and memory management. First, it allows to add \ccAnchor{http://doc.qt.nokia.com/4.4/signalsandslots.html}{signals and +slots}, and to connect them. Second, it allows to install \ccAnchor{http://doc.qt.nokia.com/4.4/eventsandfilters.html}{event filters}. \begin{figure}[t] diff --git a/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex b/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex index b70c895f184..330bc3aed64 100644 --- a/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex +++ b/GraphicsView/doc_tex/GraphicsView/PkgDescription.tex @@ -2,7 +2,7 @@ \begin{ccPkgDescription}{CGAL and the Qt Graphics View Framework \label{Pkg:GraphicsView}} \ccPkgHowToCiteCgal{cgal:fr-cqgvf-10} \ccPkgSummary{This package provides classes for displaying \cgal\ objects -and data structures in the \ccAnchor{http://doc.trolltech.com/4.4/graphicsview.html}{Qt 4 Graphics View Framework}.} +and data structures in the \ccAnchor{http://doc.qt.nokia.com/4.4/graphicsview.html}{Qt 4 Graphics View Framework}.} \ccPkgDependsOn{Qt 4} \ccPkgIntroducedInCGAL{3.4} diff --git a/GraphicsView/doc_tex/GraphicsView_ref/intro.tex b/GraphicsView/doc_tex/GraphicsView_ref/intro.tex index 7a9c0f29550..3740d6b93cf 100644 --- a/GraphicsView/doc_tex/GraphicsView_ref/intro.tex +++ b/GraphicsView/doc_tex/GraphicsView_ref/intro.tex @@ -6,7 +6,7 @@ This package provides some classes which allow to use \cgal\ classes in -\qt\ applications which make use of the \ccAnchor{http://doc.trolltech.com/4.4/graphicsview.html}{Qt Graphics View Framework}. +\qt\ applications which make use of the \ccAnchor{http://doc.qt.nokia.com/4.4/graphicsview.html}{Qt Graphics View Framework}. \section{Classified Reference Pages} diff --git a/Manual/doc_tex/Preliminaries/licenses.tex b/Manual/doc_tex/Preliminaries/licenses.tex index 4a7fe16233c..699bf1964c1 100644 --- a/Manual/doc_tex/Preliminaries/licenses.tex +++ b/Manual/doc_tex/Preliminaries/licenses.tex @@ -25,7 +25,7 @@ sources of your changes as well. The exact license terms can be -found at the Trolltech web site: \path'http://doc.trolltech.com/4.3/qpl.html'. +found at the Trolltech web site: \path'http://doc.qt.nokia.com/4.3/qpl.html'. \subsection{LGPL \label{licenses:LGPL}} The {\sc Lgpl} is an Open Source license that obliges you to distribute From e639718d585898fab2a8bb6e6099034f3cd99ef8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 25 Jan 2010 10:03:44 +0000 Subject: [PATCH 041/128] Add GMP and MPFR version to CGALConfig.cmake --- Installation/cmake/modules/CGALConfig_binary.cmake.in | 2 ++ Installation/cmake/modules/CGALConfig_install.cmake.fhs.in | 2 ++ Installation/cmake/modules/CGALConfig_install.cmake.source.in | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Installation/cmake/modules/CGALConfig_binary.cmake.in b/Installation/cmake/modules/CGALConfig_binary.cmake.in index 3d64e7ce2d7..f93be2faaa0 100644 --- a/Installation/cmake/modules/CGALConfig_binary.cmake.in +++ b/Installation/cmake/modules/CGALConfig_binary.cmake.in @@ -78,6 +78,8 @@ set(CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS "@CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS@" ) set(CGAL_Qt4_3RD_PARTY_LIBRARIES "@CGAL_Qt4_3RD_PARTY_LIBRARIES@" ) set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUILD_VERSION}") +set(CGAL_GMP_VERSION "@GMP_VERSION@") +set(CGAL_MPFR_VERSION "@MPFR_VERSION@") set(CGAL_USE_FILE "${CGAL_CMAKE_MODULE_PATH}/UseCGAL.cmake" ) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.fhs.in b/Installation/cmake/modules/CGALConfig_install.cmake.fhs.in index 4a993539d5d..e3ee5e43ec8 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.fhs.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.fhs.in @@ -80,6 +80,8 @@ set(CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS "@CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS@" ) set(CGAL_Qt4_3RD_PARTY_LIBRARIES "@CGAL_Qt4_3RD_PARTY_LIBRARIES@" ) set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUILD_VERSION}") +set(CGAL_GMP_VERSION "@GMP_VERSION@") +set(CGAL_MPFR_VERSION "@MPFR_VERSION@") set(CGAL_USE_FILE "${CGAL_CMAKE_MODULE_PATH}/UseCGAL.cmake" ) diff --git a/Installation/cmake/modules/CGALConfig_install.cmake.source.in b/Installation/cmake/modules/CGALConfig_install.cmake.source.in index b642e7e48e5..3afb0f9a150 100644 --- a/Installation/cmake/modules/CGALConfig_install.cmake.source.in +++ b/Installation/cmake/modules/CGALConfig_install.cmake.source.in @@ -78,6 +78,8 @@ set(CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS "@CGAL_Qt4_3RD_PARTY_LIBRARIES_DIRS@" ) set(CGAL_Qt4_3RD_PARTY_LIBRARIES "@CGAL_Qt4_3RD_PARTY_LIBRARIES@" ) set(CGAL_VERSION "${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}.${CGAL_BUILD_VERSION}") +set(CGAL_GMP_VERSION "@GMP_VERSION@") +set(CGAL_MPFR_VERSION "@MPFR_VERSION@") set(CGAL_USE_FILE "${CGAL_CMAKE_MODULE_PATH}/UseCGAL.cmake" ) From 2d40c555d7cc0e2b6fea2c2bd0201efda5e4c777 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 25 Jan 2010 10:24:16 +0000 Subject: [PATCH 042/128] GMP >= 4.2 is required. --- Installation/doc_tex/Installation/installation.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index 8fa93ff39cc..d3f63b5b125 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -157,7 +157,7 @@ in order to be efficient and reliable. \cgal\ offers support for exact number type used when none of the above is installed on your system. -Having \gmp\ version 4.1.4 or higher and \mpfr\ version 2.2.1 or higher +Having \gmp\ version 4.2 or higher and \mpfr\ version 2.2.1 or higher installed is highly recommended. These libraries can be obtained from \gmppage\ and \mpfrpage, respectively. As Visual \CC\ is not properly support by the \gmp\ and \mpfr\ projects, we provide precompiled versions From 24753034cceff68ecd90934d10924317f8116373 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 25 Jan 2010 10:36:06 +0000 Subject: [PATCH 043/128] Check if the GMP version is >= 4.2. --- .../Algebraic_kernel_d/CMakeLists.txt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt b/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt index 8f5037f7776..5234c70dd90 100644 --- a/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt +++ b/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt @@ -13,16 +13,22 @@ find_package( CGAL QUIET ) if ( CGAL_FOUND ) include( ${CGAL_USE_FILE} ) + include( CGAL_VersionUtils ) include( CGAL_CreateSingleSourceCGALProgram ) find_package( RS ) if( RS_FOUND ) - include( ${RS_USE_FILE} ) - include_directories( BEFORE ../../include ) - create_single_source_cgal_program( "Construct_algebraic_real_1.cpp" ) - create_single_source_cgal_program( "Solve_1.cpp" ) - create_single_source_cgal_program( "Compare_1.cpp" ) - create_single_source_cgal_program( "Isolate_1.cpp" ) - create_single_source_cgal_program( "Sign_at_1.cpp" ) + IS_VERSION_LESS("${CGAL_GMP_VERSION}" "4.2.0" _IS_GMP_VERSION_TO_LOW) + if(_IS_GMP_VERSION_TO_LOW) + message(STATUS "NOTICE: These program uses the CGAL Algebraic Kernel, and its implementation using RS needs GMP>=4.2. Your GMP version is ${CGAL_GMP_VERSION}.") + else() + include( ${RS_USE_FILE} ) + include_directories( BEFORE ../../include ) + create_single_source_cgal_program( "Construct_algebraic_real_1.cpp" ) + create_single_source_cgal_program( "Solve_1.cpp" ) + create_single_source_cgal_program( "Compare_1.cpp" ) + create_single_source_cgal_program( "Isolate_1.cpp" ) + create_single_source_cgal_program( "Sign_at_1.cpp" ) + endif() else( RS_FOUND ) message(STATUS "NOTICE: This program requires RS and will not be compiled.") endif( RS_FOUND ) From b0872e3590a5836c39cbc7e19f57e9b237059594 Mon Sep 17 00:00:00 2001 From: Sylvain Pion Date: Mon, 25 Jan 2010 12:15:16 +0000 Subject: [PATCH 044/128] Improve locate() reproducibility. (backport of trunk's revision 53763). --- Triangulation_3/include/CGAL/Triangulation_3.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index 46b59a232cd..9f2c07b260e 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -214,7 +214,6 @@ protected: Tds _tds; GT _gt; Vertex_handle infinite; //infinite vertex - mutable Random rng; Comparison_result compare_xyz(const Point &p, const Point &q) const @@ -1569,6 +1568,8 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, start = start->neighbor(ind_inf); } + Random rng (0L); + switch (dimension()) { case 3: { From afd6cbdcca9315024810054c87c9d6c498297b40 Mon Sep 17 00:00:00 2001 From: Manuel Caroli Date: Mon, 25 Jan 2010 12:33:15 +0000 Subject: [PATCH 045/128] Remove iterator range removal: The implementation was inefficient and cannot be made efficient easily because there is a problem with the iterator consistency while computing in 27-sheeted covering: One call to remove removes all 27 copies of a point which might make the iterator invalid. --- .../Periodic_3_Delaunay_triangulation_3.tex | 7 ------- .../CGAL/Periodic_3_Delaunay_triangulation_3.h | 14 ++------------ .../include/CGAL/Periodic_3_triangulation_3.h | 1 - .../CGAL/Periodic_3_triangulation_hierarchy_3.h | 17 ++--------------- .../CGAL/_test_cls_periodic_3_delaunay_3.h | 12 ------------ 5 files changed, 4 insertions(+), 47 deletions(-) diff --git a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex index 4399d4a9f28..72dbe5599d5 100644 --- a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex +++ b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex @@ -142,13 +142,6 @@ proposes a vertex removal. \ccMethod{void remove(Vertex_handle v);} {Removes the vertex \ccc{v} from the triangulation.} -\ccMethod{template < class InputIterator > - int remove(InputIterator first, InputIterator beyond);} -{Removes the vertices specified by the iterator range [\ccStyle{first, beyond}) -of value type \ccc{Vertex_handle}. -\ccc{remove()} is called over each element of the range. -The number of vertices removed is returned.} - \ccHeading{Queries} \ccMethod{Bounded_side diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h index 3ebb2f85171..47d5f6c4fce 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h @@ -223,16 +223,6 @@ public: public: /** @name Removal */ //@{ void remove(Vertex_handle v); - - template < typename InputIterator > - int remove(InputIterator first, InputIterator beyond) { - int n = number_of_vertices(); - while (first != beyond) { - remove(*first); - ++first; - } - return n - number_of_vertices(); - } //@} public: @@ -340,7 +330,7 @@ public: c->vertex(2)->point(), c->vertex(3)->point(), get_offset(c,0), get_offset(c,1), get_offset(c,2), get_offset(c,3)); - + // check that v lies within the domain. If not: translate Covering_sheets nos = number_of_sheets(); Iso_cuboid dom = domain(); @@ -794,7 +784,7 @@ move_point(Vertex_handle v, const Point & p) { template < class Gt, class Tds > void Periodic_3_Delaunay_triangulation_3::remove(Vertex_handle v) { - if ( !is_vertex(v) ) return; + CGAL_assertion(is_vertex(v)); typedef CGAL::Periodic_3_triangulation_remove_traits_3< Gt > P3removeT; typedef CGAL::Delaunay_triangulation_3< P3removeT > Euclidean_triangulation; diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h index 2b7c862a246..081eca0a9b9 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h @@ -2440,7 +2440,6 @@ template < class GT, class TDS > template < class PointRemover, class Conflict_tester> inline void Periodic_3_triangulation_3::remove(Vertex_handle v, PointRemover &r, Conflict_tester &t) { - CGAL_triangulation_assertion(is_vertex(v)); std::vector vhrem; if (!is_1_cover()) { if (number_of_vertices() == 1) { diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h index bfa0ed7a4f3..7771a8f07a5 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h @@ -139,19 +139,7 @@ public: return number_of_vertices() - n; } - // bool only for backward compatibility, we document void. - bool remove(Vertex_handle v); - - template < typename InputIterator > - int remove(InputIterator first, InputIterator beyond) - { - int n = number_of_vertices(); - while (first != beyond) { - remove(*first); - ++first; - } - return n - number_of_vertices(); - } + void remove(Vertex_handle v); Vertex_handle move_point(Vertex_handle v, const Point & p); @@ -371,7 +359,7 @@ insert(const Point &p, Locate_type lt, Cell_handle loc, int li, int lj) } template -bool +void Periodic_3_triangulation_hierarchy_3:: remove(Vertex_handle v) { @@ -383,7 +371,6 @@ remove(Vertex_handle v) break; v = u; } - return true; } template < class PTr > diff --git a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_delaunay_3.h b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_delaunay_3.h index 1cfcb3f61fb..6ae0d661a04 100644 --- a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_delaunay_3.h +++ b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_delaunay_3.h @@ -287,18 +287,6 @@ _test_cls_periodic_3_delaunay_3(const Periodic_3Triangulation_3 &, assert(PT1_deg.number_of_sheets() == CGAL::make_array(3,3,3)); assert(PT1_deg.is_valid()); - std::cout << " Iterator range removal" << std::endl; - P3T3 PT_remall(PT); - std::vector vvh; - for (Vertex_iterator vit = PT_remall.vertices_begin() ; - vit != PT_remall.vertices_end() ; ++vit) { - vvh.push_back(vit); - } - - PT_remall.remove(vvh.begin(),vvh.end()); - assert(PT_remall.number_of_vertices() == 0); - assert(PT_remall.is_valid()); - std::cout << "Queries" << std::endl; std::cout << "Side of sphere" << std::endl; From 56ad0a76863de8bd5865f909771ce2b7df7d5b9e Mon Sep 17 00:00:00 2001 From: Manuel Caroli Date: Mon, 25 Jan 2010 14:08:56 +0000 Subject: [PATCH 046/128] cleanup in the preconditions --- .../include/CGAL/Periodic_3_Delaunay_triangulation_3.h | 1 - .../include/CGAL/Periodic_3_triangulation_3.h | 1 + .../include/CGAL/Periodic_3_triangulation_hierarchy_3.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h index 47d5f6c4fce..e0d227b8ede 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_Delaunay_triangulation_3.h @@ -784,7 +784,6 @@ move_point(Vertex_handle v, const Point & p) { template < class Gt, class Tds > void Periodic_3_Delaunay_triangulation_3::remove(Vertex_handle v) { - CGAL_assertion(is_vertex(v)); typedef CGAL::Periodic_3_triangulation_remove_traits_3< Gt > P3removeT; typedef CGAL::Delaunay_triangulation_3< P3removeT > Euclidean_triangulation; diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h index 081eca0a9b9..d4595c74b0b 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h @@ -2440,6 +2440,7 @@ template < class GT, class TDS > template < class PointRemover, class Conflict_tester> inline void Periodic_3_triangulation_3::remove(Vertex_handle v, PointRemover &r, Conflict_tester &t) { + CGAL_precondition(is_vertex(v)); std::vector vhrem; if (!is_1_cover()) { if (number_of_vertices() == 1) { diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h index 7771a8f07a5..952381bdde6 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h @@ -364,6 +364,7 @@ Periodic_3_triangulation_hierarchy_3:: remove(Vertex_handle v) { CGAL_triangulation_precondition(v != Vertex_handle()); + CGAL_precondition(is_vertex(v)); for (int l = 0; l < maxlevel; ++l) { Vertex_handle u = v->up(); hierarchy[l]->remove(v); From 2aa02454ef69b92209594542a9273b6ff1a0dfc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 25 Jan 2010 14:35:43 +0000 Subject: [PATCH 047/128] moved GMP version check to FindRS.cmake --- Installation/cmake/modules/FindRS.cmake | 50 ++++++++++++++++--------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/Installation/cmake/modules/FindRS.cmake b/Installation/cmake/modules/FindRS.cmake index d6e357d01d2..0d2424e65f8 100644 --- a/Installation/cmake/modules/FindRS.cmake +++ b/Installation/cmake/modules/FindRS.cmake @@ -1,8 +1,12 @@ +# RS needs GMP 4.2 or newer, this script will fail if an old version is +# detected + find_package( MPFI ) if( MPFI_FOUND ) include( ${MPFI_USE_FILE} ) + include( CGAL_VersionUtils ) find_path(RS_INCLUDE_DIR NAMES rs_exports.h @@ -28,28 +32,40 @@ if( MPFI_FOUND ) DOC "Path to the RS3 library" ) - if( RS_INCLUDE_DIR AND RS_LIBRARIES ) - set(RS_FOUND TRUE) - endif( RS_INCLUDE_DIR AND RS_LIBRARIES ) + IS_VERSION_LESS("${CGAL_GMP_VERSION}" "4.2.0" _IS_GMP_VERSION_TO_LOW) - if( RS3_INCLUDE_DIR AND RS3_LIBRARIES ) - set(RS3_FOUND TRUE) - endif( RS3_INCLUDE_DIR AND RS3_LIBRARIES ) + if(_IS_GMP_VERSION_TO_LOW) - if( RS_LIBRARIES ) - get_filename_component(RS_LIBRARIES_DIR ${RS_LIBRARIES} PATH CACHE ) - endif( RS_LIBRARIES ) + message( STATUS + "RS needs GMP>=4.2. Your GMP version is ${CGAL_GMP_VERSION}." ) - if( NOT RS_INCLUDE_DIR OR NOT RS_LIBRARIES_DIR ) - include( RSConfig OPTIONAL ) - endif( NOT RS_INCLUDE_DIR OR NOT RS_LIBRARIES_DIR ) + else(_IS_GMP_VERSION_TO_LOW) - include(CGAL_FindPackageHandleStandardArgs) + if( RS_INCLUDE_DIR AND RS_LIBRARIES ) + set(RS_FOUND TRUE) + endif( RS_INCLUDE_DIR AND RS_LIBRARIES ) + + if( RS3_INCLUDE_DIR AND RS3_LIBRARIES ) + set(RS3_FOUND TRUE) + endif( RS3_INCLUDE_DIR AND RS3_LIBRARIES ) + + if( RS_LIBRARIES ) + get_filename_component(RS_LIBRARIES_DIR ${RS_LIBRARIES} PATH CACHE ) + endif( RS_LIBRARIES ) + + if( NOT RS_INCLUDE_DIR OR NOT RS_LIBRARIES_DIR ) + include( RSConfig OPTIONAL ) + endif( NOT RS_INCLUDE_DIR OR NOT RS_LIBRARIES_DIR ) + + include(CGAL_FindPackageHandleStandardArgs) + + find_package_handle_standard_args( RS + "DEFAULT_MSG" + RS_LIBRARIES + RS_INCLUDE_DIR ) + + endif(_IS_GMP_VERSION_TO_LOW) - find_package_handle_standard_args( RS - "DEFAULT_MSG" - RS_LIBRARIES - RS_INCLUDE_DIR ) else( MPFI_FOUND ) message( STATUS "RS requires MPFI" ) From 2ff91853e4910f3bd15e02a686136288d0f87114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 25 Jan 2010 14:37:33 +0000 Subject: [PATCH 048/128] moved GMP version check from CMakeLists.txt to FindRS.cmake --- .../Algebraic_kernel_d/CMakeLists.txt | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt b/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt index 5234c70dd90..8f5037f7776 100644 --- a/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt +++ b/Algebraic_kernel_d/examples/Algebraic_kernel_d/CMakeLists.txt @@ -13,22 +13,16 @@ find_package( CGAL QUIET ) if ( CGAL_FOUND ) include( ${CGAL_USE_FILE} ) - include( CGAL_VersionUtils ) include( CGAL_CreateSingleSourceCGALProgram ) find_package( RS ) if( RS_FOUND ) - IS_VERSION_LESS("${CGAL_GMP_VERSION}" "4.2.0" _IS_GMP_VERSION_TO_LOW) - if(_IS_GMP_VERSION_TO_LOW) - message(STATUS "NOTICE: These program uses the CGAL Algebraic Kernel, and its implementation using RS needs GMP>=4.2. Your GMP version is ${CGAL_GMP_VERSION}.") - else() - include( ${RS_USE_FILE} ) - include_directories( BEFORE ../../include ) - create_single_source_cgal_program( "Construct_algebraic_real_1.cpp" ) - create_single_source_cgal_program( "Solve_1.cpp" ) - create_single_source_cgal_program( "Compare_1.cpp" ) - create_single_source_cgal_program( "Isolate_1.cpp" ) - create_single_source_cgal_program( "Sign_at_1.cpp" ) - endif() + include( ${RS_USE_FILE} ) + include_directories( BEFORE ../../include ) + create_single_source_cgal_program( "Construct_algebraic_real_1.cpp" ) + create_single_source_cgal_program( "Solve_1.cpp" ) + create_single_source_cgal_program( "Compare_1.cpp" ) + create_single_source_cgal_program( "Isolate_1.cpp" ) + create_single_source_cgal_program( "Sign_at_1.cpp" ) else( RS_FOUND ) message(STATUS "NOTICE: This program requires RS and will not be compiled.") endif( RS_FOUND ) From e9d4d53e0a4fb322c5314804d966daa00bdbf6da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 25 Jan 2010 15:07:11 +0000 Subject: [PATCH 049/128] added GMP version check in Gmpfi testsuite (because the testsuite runs mostly with the version of MPFI shipped with RS, which needs GMP>=4.2) --- Number_types/test/Number_types/CMakeLists.txt | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Number_types/test/Number_types/CMakeLists.txt b/Number_types/test/Number_types/CMakeLists.txt index 7f087487dc6..f6c40bb0cf5 100644 --- a/Number_types/test/Number_types/CMakeLists.txt +++ b/Number_types/test/Number_types/CMakeLists.txt @@ -19,7 +19,9 @@ if ( CGAL_FOUND ) include( ${CGAL_USE_FILE} ) include( CGAL_CreateSingleSourceCGALProgram ) + include( CGAL_VersionUtils ) find_package( MPFI ) + IS_VERSION_LESS("${CGAL_GMP_VERSION}" "4.2.0" _IS_GMP_VERSION_TO_LOW) include_directories( BEFORE ../../include include ) create_single_source_cgal_program( "bench_interval.cpp" ) create_single_source_cgal_program( "Coercion_traits.cpp" ) @@ -76,12 +78,20 @@ if ( CGAL_FOUND ) create_single_source_cgal_program( "to_interval_test.cpp" ) create_single_source_cgal_program( "utilities.cpp" ) if( MPFI_FOUND ) - include( ${MPFI_USE_FILE} ) - create_single_source_cgal_program( "Gmpfi.cpp" ) - create_single_source_cgal_program( "Gmpfi_test_arithmetic.cpp" ) - create_single_source_cgal_program( "Gmpfi_test_io.cpp" ) - create_single_source_cgal_program( "Gmpfi_test_operators.cpp" ) - create_single_source_cgal_program( "Gmpfi_test_precision.cpp" ) + # for the testsuite, the version of MPFI shipped with RS is used; this + # version needs GMP>=4.2, so we require this dependency only here and + # not in FindMPFI.cmake + if( _IS_GMP_VERSION_TO_LOW ) + message( STATUS + "MPFI tests need GMP>=4.2, some of the tests will not be compiled" ) + else( _IS_GMP_VERSION_TO_LOW ) + include( ${MPFI_USE_FILE} ) + create_single_source_cgal_program( "Gmpfi.cpp" ) + create_single_source_cgal_program( "Gmpfi_test_arithmetic.cpp" ) + create_single_source_cgal_program( "Gmpfi_test_io.cpp" ) + create_single_source_cgal_program( "Gmpfi_test_operators.cpp" ) + create_single_source_cgal_program( "Gmpfi_test_precision.cpp" ) + endif( _IS_GMP_VERSION_TO_LOW ) else( MPFI_FOUND ) message( STATUS "MPFI is not present, some of the tests will not be compiled." ) From 96f1fcc83aba81bd64fdf3b7b11eaa4d6a0bccb3 Mon Sep 17 00:00:00 2001 From: Manuel Caroli Date: Mon, 25 Jan 2010 15:31:25 +0000 Subject: [PATCH 050/128] Precision on the behavior of remove --- .../Periodic_3_Delaunay_triangulation_3.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex index 72dbe5599d5..029022c249f 100644 --- a/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex +++ b/Periodic_3_triangulation_3/doc_tex/Periodic_3_triangulation_3_ref/Periodic_3_Delaunay_triangulation_3.tex @@ -140,7 +140,8 @@ polyhedra that cannot be re-triangulated cannot happen, so \cgal\ proposes a vertex removal. \ccMethod{void remove(Vertex_handle v);} -{Removes the vertex \ccc{v} from the triangulation.} +{Removes the vertex \ccc{v} from the triangulation. When computing in + 27-sheeted covering space it removes all 27 copies of \ccc{v}.} \ccHeading{Queries} From 715d458aa6d57a8f35c786a845df0b8a0ef3588b Mon Sep 17 00:00:00 2001 From: Manuel Caroli Date: Mon, 25 Jan 2010 16:15:21 +0000 Subject: [PATCH 051/128] change O(sqrt n) check into expensive_precondition --- .../include/CGAL/Periodic_3_triangulation_3.h | 2 +- .../include/CGAL/Periodic_3_triangulation_hierarchy_3.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h index d4595c74b0b..760cc166a98 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h @@ -2440,7 +2440,7 @@ template < class GT, class TDS > template < class PointRemover, class Conflict_tester> inline void Periodic_3_triangulation_3::remove(Vertex_handle v, PointRemover &r, Conflict_tester &t) { - CGAL_precondition(is_vertex(v)); + CGAL_expensive_precondition(is_vertex(v)); std::vector vhrem; if (!is_1_cover()) { if (number_of_vertices() == 1) { diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h index 952381bdde6..28eef3bfc9a 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h @@ -364,7 +364,7 @@ Periodic_3_triangulation_hierarchy_3:: remove(Vertex_handle v) { CGAL_triangulation_precondition(v != Vertex_handle()); - CGAL_precondition(is_vertex(v)); + CGAL_expensive_precondition(is_vertex(v)); for (int l = 0; l < maxlevel; ++l) { Vertex_handle u = v->up(); hierarchy[l]->remove(v); From f50a83ab29ea2d37f4f49f1f42dd1ebaf58fd7f5 Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Mon, 25 Jan 2010 21:44:06 +0000 Subject: [PATCH 052/128] Fixed buggy testsuite --- .../test_edge_collapse_Polyhedron_3.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp index df53cd8ffdd..1ab447ce46e 100644 --- a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp +++ b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp @@ -308,7 +308,7 @@ public : { TEST_TRACE( str ( format("S %1% - Collapsing %2% : placement=%3%") % mStep % edge2str(aProfile.v0_v1()) % optpoint2str(aP) ) ) ; - mBefore = create_edge_link(aProfile); + //mBefore = create_edge_link(aProfile); } virtual void OnCollapsed( Profile const& aProfile, Vertex_handle const& aV ) const From 73a088d25356de4fd8e04af8515a4f405e999760 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 25 Jan 2010 22:36:18 +0000 Subject: [PATCH 053/128] Remove APSS from CGAL-3.6. The old code is now in /branches/unsorted-branches/Surface_reconstruction_points_3-with-APSS/ --- .gitattributes | 2 - .../CMakeLists.txt | 8 - .../PS_demo_APSS_plugin.cpp | 145 --------- .../PS_demo_APSS_plugin.ui | 286 ------------------ .../PS_demo_APSS_plugin_cgal_code.cpp | 198 ------------ .../PS_demo_APSS_plugin_cgal_mc.cpp | 79 ----- .../PS_demo_normal_estimation_plugin.cpp | 2 +- 7 files changed, 1 insertion(+), 719 deletions(-) delete mode 100644 Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.cpp delete mode 100644 Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.ui delete mode 100644 Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_code.cpp delete mode 100644 Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_mc.cpp diff --git a/.gitattributes b/.gitattributes index 840dbfe1ccf..1a631b15e32 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3608,8 +3608,6 @@ Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/GlSplat/gls Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/GlSplat/shaders/Finalization.glsl -text Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/GlSplat/shaders/Raycasting.glsl -text Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/MainWindow.ui -text -Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.ui -text -Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_mc.cpp -text Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_cleaning_plugin.cpp -text Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_cleaning_plugin.ui -text Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_local_spacing_plugin.cpp -text diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/CMakeLists.txt b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/CMakeLists.txt index fca1bcd08ef..964e3a7acc0 100644 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/CMakeLists.txt +++ b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/CMakeLists.txt @@ -231,14 +231,6 @@ if(CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) target_link_libraries( ${plugin_name} ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES} ) endmacro(point_set_demo_plugin) - qt4_wrap_ui( APSS_UI_FILES PS_demo_APSS_plugin.ui) - point_set_demo_plugin(PS_demo_APSS_plugin - PS_demo_APSS_plugin - PS_demo_APSS_plugin_cgal_code.cpp - PS_demo_APSS_plugin_cgal_mc.cpp - ${APSS_UI_FILES}) - target_link_libraries(PS_demo_APSS_plugin PS_demo_scene_polyhedron_item point_set) - if(TAUCS_FOUND) qt4_wrap_ui( POISSON_UI_FILES PS_demo_poisson_plugin.ui) point_set_demo_plugin(PS_demo_poisson_plugin diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.cpp b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.cpp deleted file mode 100644 index 31f44209131..00000000000 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#include "config.h" -#include "Point_set_scene_item.h" -#include "Polyhedron_demo_plugin_helper.h" -#include "Polyhedron_demo_plugin_interface.h" -#include "Scene_polyhedron_item.h" - -#include -#include -#include -#include -#include -#include - -#include "ui_PS_demo_APSS_plugin.h" - -// APSS reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -Polyhedron* APSS_reconstruct(const Point_set& points, - FT sm_angle, // Min triangle angle (degrees). - FT sm_radius, // Max triangle size w.r.t. point set average spacing. - FT sm_distance, // Approximation error w.r.t. point set average spacing. - FT smoothness = 2); // Smoothness factor. In the range 2 (clean datasets) and 8 (noisy datasets). - -// same but using a marching cube -Polyhedron* APSS_reconstruct_mc(const Point_set& points, - FT smoothness, // Smoothness factor. In the range 2 (clean datasets) and 8 (noisy datasets). - int grid_size); // size of the grid - -class PS_demo_APSS_plugin : - public QObject, - protected Polyhedron_demo_plugin_helper -{ - Q_OBJECT - Q_INTERFACES(Polyhedron_demo_plugin_interface); - -public: - void init(QMainWindow* mainWindow, Scene_interface* scene_interface) { - this->scene = scene_interface; - this->mw = mainWindow; - actionAPSSReconstruction = this->getActionFromMainWindow(mw, "actionAPSSReconstruction"); - if(actionAPSSReconstruction) { - connect(actionAPSSReconstruction, SIGNAL(triggered()), - this, SLOT(reconstruct())); - } - } - - QList actions() const { - return QList() << actionAPSSReconstruction; - } - -public slots: - void reconstruct(); - -private: - QAction* actionAPSSReconstruction; - -}; // end class PS_demo_APSS_plugin - - -class PS_demo_APSS_plugin_dialog : public QDialog, private Ui::ApssDialog -{ - Q_OBJECT - public: - PS_demo_APSS_plugin_dialog(QWidget *parent = 0) - { - setupUi(this); - } - - double triangleAngle() const { return m_inputAngle->value(); } - double triangleRadius() const { return m_inputRadius->value(); } - double triangleError() const { return m_inputDistance->value(); } - double mlsSmoothness() const { return m_inputSmoothness->value(); } - bool useMarchingCube() const { return m_inputUseMC->isChecked(); } - int mcGridSize() const { return m_inputMcGridSize->value(); } - - private slots: - void on_buttonBox_accepted() - { - } -}; - -void PS_demo_APSS_plugin::reconstruct() -{ - const Scene_interface::Item_id index = scene->mainSelectionIndex(); - - Point_set_scene_item* point_set_item = - qobject_cast(scene->item(index)); - - if(point_set_item) - { - // Gets point set - Point_set* points = point_set_item->point_set(); - if(!points) return; - - // Gets options - PS_demo_APSS_plugin_dialog dialog; - if(!dialog.exec()) - return; - const double sm_angle = dialog.triangleAngle(); - const double sm_radius = dialog.triangleRadius(); - const double sm_distance = dialog.triangleError(); - const double smoothness = dialog.mlsSmoothness(); - - QApplication::setOverrideCursor(Qt::WaitCursor); - - // Reconstruct point set as a polyhedron - Polyhedron* pRemesh = 0; - - if (dialog.useMarchingCube()) - pRemesh = APSS_reconstruct_mc(*points, smoothness, dialog.mcGridSize()); - else - pRemesh = APSS_reconstruct(*points, sm_angle, sm_radius, sm_distance, smoothness); - - if(pRemesh) - { - // Add polyhedron to scene - Scene_polyhedron_item* new_item = new Scene_polyhedron_item(pRemesh); - if (dialog.useMarchingCube()) { - new_item->setName(tr("%1 APSS MC (%2 %3)") - .arg(point_set_item->name()) - .arg(smoothness) - .arg(dialog.mcGridSize())); - } else { - new_item->setName(tr("%1 APSS (%2 %3 %4 %5)") - .arg(point_set_item->name()) - .arg(sm_angle) - .arg(sm_radius) - .arg(sm_distance) - .arg(smoothness)); - } - new_item->setColor(Qt::lightGray); - scene->addItem(new_item); - - // Hide point set - point_set_item->setVisible(false); - scene->itemChanged(index); - } - - QApplication::restoreOverrideCursor(); - } -} - -Q_EXPORT_PLUGIN2(PS_demo_APSS_plugin, PS_demo_APSS_plugin); - -#include "PS_demo_APSS_plugin.moc" diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.ui b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.ui deleted file mode 100644 index a16760e413b..00000000000 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin.ui +++ /dev/null @@ -1,286 +0,0 @@ - - ApssDialog - - - - 0 - 0 - 300 - 210 - - - - Dialog - - - - - - Min triangle angle: - - - - - - - ° - - - 1.000000000000000 - - - 30.000000000000000 - - - 20.000000000000000 - - - - - - - Max triangle size: - - - - - - - * average spacing - - - 0 - - - 1.000000000000000 - - - 1000.000000000000000 - - - 1.000000000000000 - - - 100.000000000000000 - - - - - - - Approximation error: - - - - - - - * average spacing - - - 6 - - - 0.010000000000000 - - - 100.000000000000000 - - - 0.010000000000000 - - - 0.25000000000000 - - - - - - - Smoothness: - - - - - - - 1.000000000000000 - - - 100.000000000000000 - - - 0.200000000000000 - - - 2.000000000000000 - - - - - - - true - - - Use Marching Cubes instead of CGAL Mesh Generator - - - - - - - false - - - Marching cubes resolution: - - - - - - - false - - - 1 - - - 2000 - - - 50 - - - 300 - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - ApssDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - ApssDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - m_inputUseMC - toggled(bool) - m_inputMcGridSize - setEnabled(bool) - - - 131 - 261 - - - 206 - 312 - - - - - m_inputUseMC - toggled(bool) - label_6 - setEnabled(bool) - - - 149 - 135 - - - 106 - 163 - - - - - m_inputUseMC - toggled(bool) - m_inputAngle - setDisabled(bool) - - - 149 - 135 - - - 210 - 16 - - - - - m_inputUseMC - toggled(bool) - m_inputDistance - setDisabled(bool) - - - 149 - 135 - - - 210 - 76 - - - - - m_inputUseMC - toggled(bool) - m_inputRadius - setDisabled(bool) - - - 149 - 135 - - - 210 - 46 - - - - - diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_code.cpp b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_code.cpp deleted file mode 100644 index b2c3b03a818..00000000000 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_code.cpp +++ /dev/null @@ -1,198 +0,0 @@ -//---------------------------------------------------------- -// APSS reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -//---------------------------------------------------------- - -// CGAL -#include -#include // must be included before kernel -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "Kernel_type.h" -#include "Polyhedron_type.h" -#include "Point_set_scene_item.h" - - -// APSS implicit function -typedef CGAL::APSS_reconstruction_function APSS_reconstruction_function; - -// Surface mesher -typedef CGAL::Surface_mesh_default_triangulation_3 STr; -typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; -typedef CGAL::Implicit_surface_3 Surface_3; - -// AABB tree -typedef CGAL::AABB_polyhedron_triangle_primitive Primitive; -typedef CGAL::AABB_traits AABB_traits; -typedef CGAL::AABB_tree AABB_tree; - - -// APSS reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -Polyhedron* APSS_reconstruct(const Point_set& points, - FT sm_angle, // Min triangle angle (degrees). - FT sm_radius, // Max triangle size w.r.t. point set average spacing. - FT sm_distance, // Approximation error w.r.t. point set average spacing. - FT smoothness = 2) // smoothness factor -{ - CGAL::Timer task_timer; task_timer.start(); - - //*************************************** - // Checks requirements - //*************************************** - - int nb_points = points.size(); - if (nb_points == 0) - { - std::cerr << "Error: empty point set" << std::endl; - return NULL; - } - - bool points_have_normals = (points.begin()->normal() != CGAL::NULL_VECTOR); - if ( ! points_have_normals ) - { - std::cerr << "Input point set not supported: this reconstruction method requires oriented normals" << std::endl; - return NULL; - } - - CGAL::Timer reconstruction_timer; reconstruction_timer.start(); - - //*************************************** - // Creates implicit function - //*************************************** - - std::cerr << "Creates APSS implicit function (smoothness=" << smoothness << ")...\n"; - - // Creates implicit function from the point set. - // Note: this method requires an iterator over points - // + property maps to access each point's position and normal. - // The position property map can be omitted here as we use iterators over Point_3 elements. - APSS_reconstruction_function function(points.begin(), points.end(), - CGAL::make_normal_of_point_with_normal_pmap(points.begin()), - smoothness); - - // Prints status - std::cerr << "Creates implicit function: " << task_timer.time() << " seconds\n"; - task_timer.reset(); - - //*************************************** - // Surface mesh generation - //*************************************** - - std::cerr << "Surface meshing...\n"; - - // Computes average spacing - FT average_spacing = CGAL::compute_average_spacing(points.begin(), points.end(), - 6 /* knn = 1 ring */); - - // Gets one point inside the implicit surface - Point inner_point = function.get_inner_point(); - FT inner_point_value = function(inner_point); - if(inner_point_value >= 0.0) - { - std::cerr << "Error: unable to seed (" << inner_point_value << " at inner_point)" << std::endl; - return NULL; - } - - // Gets implicit function's radius - Sphere bsphere = function.bounding_sphere(); - FT radius = std::sqrt(bsphere.squared_radius()); - - // Defines the implicit surface: requires defining a - // conservative bounding sphere centered at inner point. - FT sm_sphere_radius = 5.0 * radius; - FT sm_dichotomy_error = sm_distance*average_spacing/1000.0; // Dichotomy error must be << sm_distance - Surface_3 surface(function, - Sphere(inner_point,sm_sphere_radius*sm_sphere_radius), - sm_dichotomy_error/sm_sphere_radius); - - // Defines surface mesh generation criteria - CGAL::Surface_mesh_default_criteria_3 criteria(sm_angle, // Min triangle angle (degrees) - sm_radius*average_spacing, // Max triangle size - sm_distance*average_spacing); // Approximation error - - CGAL_TRACE_STREAM << " make_surface_mesh(sphere center=("<keep_largest_connected_components( 1 /* keep largest component only*/ ); - - // Prints status - std::cerr << "Erases small connected components: " << task_timer.time() << " seconds, " - << nb_erased_components << " component(s) erased" - << std::endl; - task_timer.reset(); - - // Prints total reconstruction duration - std::cerr << "Total reconstruction (implicit function + meshing + erase small components): " << reconstruction_timer.time() << " seconds\n"; - - //*************************************** - // Computes reconstruction error - //*************************************** - - // Constructs AABB tree and computes internal KD-tree - // data structure to accelerate distance queries - AABB_tree tree(output_mesh->facets_begin(), output_mesh->facets_end()); - tree.accelerate_distance_queries(); - - // Computes distance from each input point to reconstructed mesh - double max_distance = DBL_MIN; - double avg_distance = 0; - for (Point_set::const_iterator p=points.begin(); p!=points.end(); p++) - { - double distance = std::sqrt(tree.squared_distance(*p)); - - max_distance = (std::max)(max_distance, distance); - avg_distance += distance; - } - avg_distance /= double(points.size()); - - std::cerr << "Reconstruction error:\n" - << " max = " << max_distance << " = " << max_distance/average_spacing << " * average spacing\n" - << " avg = " << avg_distance << " = " << avg_distance/average_spacing << " * average spacing\n"; - - return output_mesh; -} - diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_mc.cpp b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_mc.cpp deleted file mode 100644 index db75e34695c..00000000000 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_APSS_plugin_cgal_mc.cpp +++ /dev/null @@ -1,79 +0,0 @@ -//---------------------------------------------------------- -// APSS reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -//---------------------------------------------------------- - -#include "Kernel_type.h" -#include "Polyhedron_type.h" -#include "Point_set_scene_item.h" -#include "marching_cubes.h" - -// CGAL -#include - -// This package -#include - - -// APSS implicit function -typedef CGAL::APSS_reconstruction_function APSS_reconstruction_function; - -// APSS reconstruction method: -// Reconstructs a surface mesh from a point set and returns it as a polyhedron. -Polyhedron* APSS_reconstruct_mc(const Point_set& points, - FT smoothness, // smoothness factor - int grid_size) -{ - CGAL::Timer task_timer; task_timer.start(); - - //*************************************** - // Checks requirements - //*************************************** - - int nb_points = points.size(); - if (nb_points == 0) - { - std::cerr << "Error: empty point set" << std::endl; - return NULL; - } - - bool points_have_normals = (points.begin()->normal() != CGAL::NULL_VECTOR); - if ( ! points_have_normals ) - { - std::cerr << "Input point set not supported: this reconstruction method requires oriented normals" << std::endl; - return NULL; - } - - //*************************************** - // Creates implicit function - //*************************************** - - std::cerr << "Creates APSS implicit function (smoothness=" << smoothness << ")...\n"; - - // Creates implicit function - APSS_reconstruction_function function(points.begin(), points.end(), - CGAL::make_normal_of_point_with_normal_pmap(points.begin()), - smoothness); - - // Prints status - std::cerr << "Creates implicit function: " << task_timer.time() << " seconds\n"; - task_timer.reset(); - - //*************************************** - // Surface mesh generation - //*************************************** - - std::cerr << "Marching cubes...\n"; - - Polyhedron* output_mesh = new Polyhedron; - marching_cubes(function, grid_size, *output_mesh); - - // Prints status - std::cerr << "Marching cubes: " << task_timer.time() << " seconds, " - << output_mesh->size_of_vertices() << " output vertices" - << std::endl; - task_timer.reset(); - - return output_mesh; -} - diff --git a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_normal_estimation_plugin.cpp b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_normal_estimation_plugin.cpp index 60a0cfa7652..4b8300aefa5 100644 --- a/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_normal_estimation_plugin.cpp +++ b/Surface_reconstruction_points_3/demo/Surface_reconstruction_points_3/PS_demo_normal_estimation_plugin.cpp @@ -162,7 +162,7 @@ void PS_demo_normal_estimation_plugin::on_actionNormalEstimation_triggered() { QMessageBox::information(NULL, tr("Points with an unoriented normal"), - tr("%1 point(s) with an unoriented normal are selected.\nPlease orient them or remove them before running Poisson or APSS reconstruction.") + tr("%1 point(s) with an unoriented normal are selected.\nPlease orient them or remove them before running Poisson reconstruction.") .arg(nb_unoriented_normals)); } } From 814a969ddc1d3bbc9dc1f0195ddeaff198538f12 Mon Sep 17 00:00:00 2001 From: Sylvain Pion Date: Tue, 26 Jan 2010 10:02:56 +0000 Subject: [PATCH 054/128] Undo revision 53764, since it triggered problems in the Surface_mesher test-suite (probably a bug there, but it's a bit late to investigate before 3.6-beta) : Improve locate() reproducibility. (backport of trunk's revision 53763). --- Triangulation_3/include/CGAL/Triangulation_3.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index 9f2c07b260e..46b59a232cd 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -214,6 +214,7 @@ protected: Tds _tds; GT _gt; Vertex_handle infinite; //infinite vertex + mutable Random rng; Comparison_result compare_xyz(const Point &p, const Point &q) const @@ -1568,8 +1569,6 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, start = start->neighbor(ind_inf); } - Random rng (0L); - switch (dimension()) { case 3: { From 5b707f594ad85d1f2c5f1004831f2c64319bfcf7 Mon Sep 17 00:00:00 2001 From: Sylvain Pion Date: Tue, 26 Jan 2010 16:09:59 +0000 Subject: [PATCH 055/128] Backport trunk revisions 53799 and 53804 : Make locate() deterministic using Boost RNGs. The previous approach using a local CGAL::Random failed because it still uses a global state through drand48()... Replace CGAL::Random by Boost RNG (with geometric distribution) in the hierarchy as well, to avoid global state sharing issues. --- .../include/CGAL/Triangulation_3.h | 21 +++++++++++++----- .../include/CGAL/Triangulation_hierarchy_3.h | 22 ++++++++++--------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index 46b59a232cd..a89c7338b2f 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -41,11 +41,13 @@ #include #include #include -#include #include #include #include +#include +#include +#include CGAL_BEGIN_NAMESPACE @@ -214,7 +216,6 @@ protected: Tds _tds; GT _gt; Vertex_handle infinite; //infinite vertex - mutable Random rng; Comparison_result compare_xyz(const Point &p, const Point &q) const @@ -1569,6 +1570,8 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, start = start->neighbor(ind_inf); } + boost::rand48 rng; + switch (dimension()) { case 3: { @@ -1585,6 +1588,9 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, // at the end to decide if p lies on a face/edge/vertex/interior. Orientation o[4]; + boost::uniform_smallint<> four(0, 3); + boost::variate_generator > die4(rng, four); + // Now treat the cell c. try_next_cell: @@ -1599,9 +1605,9 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, // For the remembering stochastic walk, // we need to start trying with a random index : - int i = rng.template get_bits<2>(); - // For the remembering visibility walk (Delaunay only), we don't : - // int i = 0; + int i = die4(); + // For the remembering visibility walk (Delaunay and Regular only), we don't : + // int i = 0; for (int j=0; j != 4; ++j, i = (i+1)&3) { Cell_handle next = c->neighbor(i); @@ -1675,6 +1681,9 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, CGAL_triangulation_precondition( ! start->has_vertex(infinite) ); Cell_handle c = start; + boost::uniform_smallint<> three(0, 2); + boost::variate_generator > die3(rng, three); + //first tests whether p is coplanar with the current triangulation if ( orientation( c->vertex(0)->point(), c->vertex(1)->point(), @@ -1699,7 +1708,7 @@ locate(const Point & p, Locate_type & lt, int & li, int & lj, // else c is finite // we test its edges in a random order until we find a // neighbor to go further - int i = rng.get_int(0, 3); + int i = die3(); const Point & p0 = c->vertex( i )->point(); const Point & p1 = c->vertex( ccw(i) )->point(); const Point & p2 = c->vertex( cw(i) )->point(); diff --git a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h index 28f0e6a8617..20ecf0f2d8b 100644 --- a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h @@ -21,11 +21,14 @@ #define CGAL_TRIANGULATION_HIERARCHY_3_H #include -#include #include #include #include +#include +#include +#include + CGAL_BEGIN_NAMESPACE // This class is deprecated, but must be kept for backward compatibility. @@ -68,8 +71,8 @@ public: private: // here is the stack of triangulations which form the hierarchy - Tr_Base* hierarchy[maxlevel]; - Random random; // random generator + Tr_Base* hierarchy[maxlevel]; + boost::rand48 random; void set_up_down(Vertex_handle up, Vertex_handle down) { @@ -86,7 +89,7 @@ public: template < typename InputIterator > Triangulation_hierarchy_3(InputIterator first, InputIterator last, const Geom_traits& traits = Geom_traits()) - : Tr_Base(traits), random(0L) + : Tr_Base(traits) { hierarchy[0] = this; for(int i=1; i Triangulation_hierarchy_3:: Triangulation_hierarchy_3(const Geom_traits& traits) - : Tr_Base(traits), random(0L) + : Tr_Base(traits) { hierarchy[0] = this; for(int i=1;i Triangulation_hierarchy_3:: Triangulation_hierarchy_3(const Triangulation_hierarchy_3 &tr) - : Tr_Base(tr), random(0L) + : Tr_Base(tr) { hierarchy[0] = this; for(int i=1; i:: random_level() { - int l = 0; - while ( ! random(ratio) && l < maxlevel-1 ) - ++l; + boost::geometric_distribution<> proba(1.0/ratio); + boost::variate_generator > die(random, proba); - return l; + return std::min(die(), (int)maxlevel)-1; } CGAL_END_NAMESPACE From 706b899ecf38235615f57e5375db5b23078bd434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Tue, 26 Jan 2010 18:32:31 +0000 Subject: [PATCH 056/128] set RS compilation flag in Mac OS when using g++<4.3 --- Installation/cmake/modules/CGAL_UseRS.cmake | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Installation/cmake/modules/CGAL_UseRS.cmake b/Installation/cmake/modules/CGAL_UseRS.cmake index 8e84aba3753..544a4392229 100644 --- a/Installation/cmake/modules/CGAL_UseRS.cmake +++ b/Installation/cmake/modules/CGAL_UseRS.cmake @@ -9,10 +9,18 @@ if( NOT CGAL_RS_SETUP ) message( STATUS "RS definitions: ${RS_DEFINITIONS}" ) message( STATUS "RS libraries: ${RS_LIBRARIES}" ) - if(CMAKE_OSX_ARCHITECTURES STREQUAL "ppc") - message( STATUS "TLS is not supported on this architecture" ) - add_definitions( "-DCGAL_RS_NO_TLS" ) - endif(CMAKE_OSX_ARCHITECTURES STREQUAL "ppc") + if( APPLE AND CMAKE_COMPILER_IS_GNUCXX ) + include( CGAL_VersionUtils ) + EXEC_PROGRAM( ${CMAKE_CXX_COMPILER} + ARGS -dumpversion + OUTPUT_VARIABLE RS_GXX_VERSION ) + VERSION_DECOMPOSE( ${RS_GXX_VERSION} GXX_MAJ GXX_MIN GXX_PAT GXX_TWE ) + IS_VERSION_LESS( "${GXX_MAJ}.${GXX_MIN}" "4.3" IS_OLD_GXX ) + if( IS_OLD_GXX ) + message( STATUS "TLS is not supported by g++<4.3 on Mac OS X" ) + add_definitions( "-DCGAL_RS_NO_TLS" ) + endif( IS_OLD_GXX ) + endif( APPLE AND CMAKE_COMPILER_IS_GNUCXX ) include_directories ( ${RS_INCLUDE_DIR} ) add_definitions( ${RS_DEFINITIONS} "-DCGAL_USE_RS" ) From f7b453ce6af64650c9ee7d5885a110e5eb65ef5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Wed, 27 Jan 2010 08:32:13 +0000 Subject: [PATCH 057/128] removed extra ';' from _test_polynomial_traits_d.h --- Polynomial/include/CGAL/Test/_test_polynomial_traits_d.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Polynomial/include/CGAL/Test/_test_polynomial_traits_d.h b/Polynomial/include/CGAL/Test/_test_polynomial_traits_d.h index 74481054c4a..c8dd78e2e6f 100644 --- a/Polynomial/include/CGAL/Test/_test_polynomial_traits_d.h +++ b/Polynomial/include/CGAL/Test/_test_polynomial_traits_d.h @@ -15,7 +15,7 @@ #include -CGAL_BEGIN_NAMESPACE; +namespace CGAL { namespace Test_Pol { @@ -74,7 +74,7 @@ generate_sparse_random_polynomial(int max_degree = 10){ template class Construct_test_polynomial { - CGAL_SNAP_CGALi_TRAITS_D(Polynomial_traits_d); + CGAL_SNAP_CGALi_TRAITS_D(Polynomial_traits_d) typedef typename PT::Construct_polynomial Constructor; public: @@ -1823,6 +1823,7 @@ template< class PT > void test_polynomial_traits_d(const PT& traits){ Test_Pol::test_polynomial_traits_d(traits); } -CGAL_END_NAMESPACE; + +} // namespace CGAL #endif From 296abdc49d8bd9d50c33aa5b39abf0cf926311fd Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 13:43:08 +0000 Subject: [PATCH 058/128] Merge from trunk: | ------------------------------------------------------------------------ | r53811 | afabri | 2010-01-27 09:20:18 +0100 (Wed, 27 Jan 2010) | 1 line | | Switch from CGAL::Random to boost::rand48 as T3 did so | ------------------------------------------------------------------------ --- Skin_surface_3/include/CGAL/Skin_surface_base_3.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h index 5e243ca2ba7..424cc9708c7 100644 --- a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h +++ b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h @@ -26,6 +26,10 @@ #include +#include +#include +#include + // For the Weighted_converter #include @@ -180,9 +184,6 @@ private: // Triangulated mixed complex or Voronoi diagram: TMC _tmc; - // Used for random walk in locate_in_tmc - mutable Random rng; - bool verbose; }; @@ -682,7 +683,10 @@ locate_in_tmc(const Bare_point &p0, // For the remembering stochastic walk, // we need to start trying with a random index : - int i = rng.template get_bits<2>(); + boost::rand48 rng; + boost::uniform_smallint<> four(0, 3); + boost::variate_generator > die4(rng, four); + int i = die4(); // For the remembering visibility walk (Delaunay only), we don't : // int i = 0; From d38a05f3e0b01335c74d5069b9eb308d4b6e0736 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 14:35:38 +0000 Subject: [PATCH 059/128] Merge from trunk: | ------------------------------------------------------------------------ | r53821 | afabri | 2010-01-27 14:48:02 +0100 (Wed, 27 Jan 2010) | 1 line | | Add random_shuffle to the high level functions | ------------------------------------------------------------------------ | r53823 | afabri | 2010-01-27 14:50:23 +0100 (Wed, 27 Jan 2010) | 1 line | | Remove random_shuffle from insert(b,e) functions as spatial_sort does it now | ------------------------------------------------------------------------ | r53826 | afabri | 2010-01-27 15:24:29 +0100 (Wed, 27 Jan 2010) | 1 line | | Remove random_shuffle from insert(b,e) functions as spatial_sort does it now | ------------------------------------------------------------------------ --- Spatial_sorting/include/CGAL/hilbert_sort.h | 9 +++++++++ Spatial_sorting/include/CGAL/spatial_sort.h | 13 +++++++++++++ .../include/CGAL/Delaunay_triangulation_3.h | 1 - .../include/CGAL/Regular_triangulation_3.h | 1 - Triangulation_3/include/CGAL/Triangulation_3.h | 1 - .../include/CGAL/Triangulation_hierarchy_3.h | 1 - 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Spatial_sorting/include/CGAL/hilbert_sort.h b/Spatial_sorting/include/CGAL/hilbert_sort.h index 6fcc363c2c1..552d5295db1 100644 --- a/Spatial_sorting/include/CGAL/hilbert_sort.h +++ b/Spatial_sorting/include/CGAL/hilbert_sort.h @@ -25,6 +25,11 @@ #include #include +#include +#include + +#include + CGAL_BEGIN_NAMESPACE namespace internal { @@ -33,6 +38,8 @@ namespace internal { void hilbert_sort (RandomAccessIterator begin, RandomAccessIterator end, const Kernel &k, typename Kernel::Point_2 *) { + boost::random_number_generator rng(boost::rand48(0L)); + std::random_shuffle(begin,end, rng); (Hilbert_sort_2 (k)) (begin, end); } @@ -40,6 +47,8 @@ namespace internal { void hilbert_sort (RandomAccessIterator begin, RandomAccessIterator end, const Kernel &k, typename Kernel::Point_3 *) { + boost::random_number_generator rng(boost::rand48(0L)); + std::random_shuffle(begin,end, rng); (Hilbert_sort_3 (k)) (begin, end); } } diff --git a/Spatial_sorting/include/CGAL/spatial_sort.h b/Spatial_sorting/include/CGAL/spatial_sort.h index f171e0a62ab..da4d56cc1e0 100644 --- a/Spatial_sorting/include/CGAL/spatial_sort.h +++ b/Spatial_sorting/include/CGAL/spatial_sort.h @@ -27,6 +27,11 @@ #include +#include +#include + +#include + CGAL_BEGIN_NAMESPACE namespace internal { @@ -36,6 +41,10 @@ namespace internal { const Kernel &k, typename Kernel::Point_2 *) { typedef Hilbert_sort_2 Sort; + + boost::random_number_generator rng(boost::rand48(0L)); + std::random_shuffle(begin,end,rng); + (Multiscale_sort (Sort (k, 4), 16, 0.25)) (begin, end); } @@ -44,6 +53,10 @@ namespace internal { const Kernel &k, typename Kernel::Point_3 *) { typedef Hilbert_sort_3 Sort; + + boost::random_number_generator rng(boost::rand48(0L)); + std::random_shuffle(begin,end, rng); + (Multiscale_sort (Sort (k, 8), 64, 0.125)) (begin, end); } } diff --git a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h index 9d81142116a..3c09a186c42 100644 --- a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h @@ -199,7 +199,6 @@ public: int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Vertex_handle hint; diff --git a/Triangulation_3/include/CGAL/Regular_triangulation_3.h b/Triangulation_3/include/CGAL/Regular_triangulation_3.h index 2668e486ba3..6da0d6bde9d 100644 --- a/Triangulation_3/include/CGAL/Regular_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Regular_triangulation_3.h @@ -142,7 +142,6 @@ public: int n = number_of_vertices(); std::vector points(first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Cell_handle hint; diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index a89c7338b2f..c46655525bc 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -607,7 +607,6 @@ public: int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Vertex_handle hint; diff --git a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h index 20ecf0f2d8b..6877e103909 100644 --- a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h @@ -130,7 +130,6 @@ public: int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); // hints[i] is the vertex of the previously inserted point in level i. From ced028967a0b62669ac6115b818a94c7cf33b6ef Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 14:37:25 +0000 Subject: [PATCH 060/128] Merge from trunk: | ------------------------------------------------------------------------ | r53822 | hemmer | 2010-01-27 14:50:01 +0100 (Wed, 27 Jan 2010) | 2 lines | | use CGAL::cpp0x for tuple | | ------------------------------------------------------------------------ --- Mesh_3/applications/lanteri_utils.h | 6 ++-- Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h | 4 +-- .../CGAL/Mesh_3/Labeled_mesh_domain_3.h | 6 ++-- Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h | 28 +++++++++---------- .../include/CGAL/Polyhedral_mesh_domain_3.h | 4 +-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Mesh_3/applications/lanteri_utils.h b/Mesh_3/applications/lanteri_utils.h index 52d4f7cc3fa..4658fd45a17 100644 --- a/Mesh_3/applications/lanteri_utils.h +++ b/Mesh_3/applications/lanteri_utils.h @@ -5,14 +5,14 @@ #include // std::accumulate #include // arcsin -#include +#include #include "lanteri_process_results.h" #include template // better be RandomAccessIterator, because // std::distance() is used -boost::tuple< +CGAL::cpp0x::tuple< typename std::iterator_traits::value_type, typename std::iterator_traits::value_type, typename std::iterator_traits::value_type, @@ -40,7 +40,7 @@ compute_max_min_sum_size(Iterator begin, Iterator end) const size_type size = std::distance(begin, end); - return boost::make_tuple(maximum, minimum, sum, size); + return CGAL::cpp0x::make_tuple(maximum, minimum, sum, size); } void output_legend(std::ostream* out_stream = &std::cout, std::string prefix = "") diff --git a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h index 74b991e89ea..15de9bc9fe9 100644 --- a/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h +++ b/Mesh_3/include/CGAL/Mesh_3/C3T3_helpers.h @@ -413,7 +413,7 @@ private: typename MeshDomain::Construct_intersection intersection = domain_.construct_intersection_object(); - Point_3 surface_center = boost::get<0>(intersection(dual)); + Point_3 surface_center = CGAL::cpp0x::get<0>(intersection(dual)); facet.first->set_facet_surface_center(facet.second,surface_center); // Update status in c3t3 @@ -1111,7 +1111,7 @@ project_on_surface_aux(const Point_3& p, return ref_point; if ( do_intersect(proj_segment) ) - return boost::get<0>(intersection(proj_segment)); + return CGAL::cpp0x::get<0>(intersection(proj_segment)); else return ref_point; } diff --git a/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h index 55fe4e93777..3e7d07db168 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Labeled_mesh_domain_3.h @@ -33,7 +33,7 @@ #include #include #include -#include +#include namespace CGAL { @@ -98,7 +98,7 @@ public: // Internal_index index_; // }; typedef boost::variant Index; - typedef boost::tuple Intersection; + typedef CGAL::cpp0x::tuple Intersection; typedef typename BGT::FT FT; @@ -565,7 +565,7 @@ Labeled_mesh_domain_3::Construct_initial_points::operator()( Surface_patch surface = r_domain_.do_intersect_surface_object()(random_seg); if ( surface ) { - const Point_3 intersect_pt = boost::get<0>( + const Point_3 intersect_pt = CGAL::cpp0x::get<0>( r_domain_.construct_intersection_object()(random_seg)); *pts++ = std::make_pair(intersect_pt, r_domain_.index_from_surface_index(*surface)); diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h index e0f952869d0..3290263a281 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_3.h @@ -32,7 +32,7 @@ #include #include -#include +#include #include namespace CGAL { @@ -179,7 +179,7 @@ private: typedef typename Gt::Ray_3 Ray_3; typedef typename Gt::Line_3 Line_3; - typedef typename boost::optional > + typedef typename boost::optional > Facet_properties; private: @@ -601,9 +601,9 @@ treat_new_facet(Facet& facet) Facet_properties properties = compute_facet_properties(facet); if ( properties ) { - const Surface_index& surface_index = boost::get<0>(*properties); - const Index& surface_center_index = boost::get<1>(*properties); - const Point& surface_center = boost::get<2>(*properties); + const Surface_index& surface_index = CGAL::cpp0x::get<0>(*properties); + const Index& surface_center_index = CGAL::cpp0x::get<1>(*properties); + const Point& surface_center = CGAL::cpp0x::get<2>(*properties); // Facet is on surface: set facet properties set_facet_surface_center(facet, surface_center, surface_center_index); @@ -677,9 +677,9 @@ compute_facet_properties(const Facet& facet) const } Intersection intersect = construct_intersection(segment); - return Facet_properties(boost::make_tuple(*surface, - boost::get<1>(intersect), - boost::get<0>(intersect))); + return Facet_properties(CGAL::cpp0x::make_tuple(*surface, + CGAL::cpp0x::get<1>(intersect), + CGAL::cpp0x::get<0>(intersect))); } } // If the dual is a ray @@ -700,9 +700,9 @@ compute_facet_properties(const Facet& facet) const r_oracle_.construct_intersection_object(); Intersection intersect = construct_intersection(*p_ray); - return Facet_properties(boost::make_tuple(*surface, - boost::get<1>(intersect), - boost::get<0>(intersect))); + return Facet_properties(CGAL::cpp0x::make_tuple(*surface, + CGAL::cpp0x::get<1>(intersect), + CGAL::cpp0x::get<0>(intersect))); } } // If the dual is a line @@ -727,9 +727,9 @@ compute_facet_properties(const Facet& facet) const } Intersection intersect = construct_intersection(line); - return Facet_properties(boost::make_tuple(*surface, - boost::get<1>(intersect), - boost::get<0>(intersect))); + return Facet_properties(CGAL::cpp0x::make_tuple(*surface, + CGAL::cpp0x::get<1>(intersect), + CGAL::cpp0x::get<0>(intersect))); } } else diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h index c0e19443f4a..c0d2955f4b7 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h @@ -38,7 +38,7 @@ #include #include #include -#include +#include #include namespace CGAL { @@ -92,7 +92,7 @@ public: /// complex on which a vertex lie typedef boost::variant Index; - typedef boost::tuple Intersection; + typedef CGAL::cpp0x::tuple Intersection; typedef typename IGT::FT FT; From a59ecfdcf48974515aded46dcece8f925d70d8fa Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 16:15:22 +0000 Subject: [PATCH 061/128] Fix FindMKL: mkl_intel_thread does not have the suffix lp64 on Intel 64. --- Installation/cmake/modules/FindMKL.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/cmake/modules/FindMKL.cmake b/Installation/cmake/modules/FindMKL.cmake index 3c8ef288c22..8cc3ccebb52 100644 --- a/Installation/cmake/modules/FindMKL.cmake +++ b/Installation/cmake/modules/FindMKL.cmake @@ -183,7 +183,7 @@ else() MKL SGEMM "" - "mkl_solver_lp64;mkl_intel_lp64;mkl_intel_thread_lp64;mkl_core;libiomp5md" + "mkl_solver_lp64;mkl_intel_lp64;mkl_intel_thread;mkl_core;libiomp5md" #"mkl_solver_ilp64_sequential;mkl_intel_ilp64;mkl_sequential;mkl_core" "${MKL_LIB_DIR}" ) @@ -210,7 +210,7 @@ else() MKL sgemm "" - "mkl_solver_lp64;mkl_intel_lp64;mkl_intel_thread_lp64;mkl_core;iomp5;pthread" + "mkl_solver_lp64;mkl_intel_lp64;mkl_intel_thread;mkl_core;iomp5;pthread" "${MKL_LIB_DIR}" ) endif() From 6c1fb71478d1d3a9affa1d37f5de56e2d72d39c1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 16:16:34 +0000 Subject: [PATCH 062/128] Fix FindTAUCS: if TAUCS_INCLUDE_DIR is set to "", then the following find_path(TAUCS_INCLUDE_DIR ...) does nothing. --- Installation/cmake/modules/FindTAUCS.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Installation/cmake/modules/FindTAUCS.cmake b/Installation/cmake/modules/FindTAUCS.cmake index 8ca3ba3f3f8..4c35c3e6e3d 100644 --- a/Installation/cmake/modules/FindTAUCS.cmake +++ b/Installation/cmake/modules/FindTAUCS.cmake @@ -37,7 +37,6 @@ elseif (TAUCS_INCLUDE_DIR AND TAUCS_LIBRARIES) else() # reset variables - set( TAUCS_INCLUDE_DIR "" ) set( TAUCS_DEFINITIONS "" ) # unused (yet) set( TAUCS_LIBRARIES "" ) set( TAUCS_LIBRARIES_DIR "" ) From 30ffeada93c5f12d2bca2c18a544342de2462de5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 16:17:38 +0000 Subject: [PATCH 063/128] Fix the detection of configured programs. --- .../Surface_reconstruction_points_3/cgal_test_with_cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake index 029daedb03e..dfce0ae3c19 100755 --- a/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake +++ b/Surface_reconstruction_points_3/examples/Surface_reconstruction_points_3/cgal_test_with_cmake @@ -1,4 +1,4 @@ -e#! /bin/sh +#! /bin/sh # # This script is a modified version of cgal_test_with_cmake which: @@ -83,7 +83,7 @@ can_compile() fi ;; * ) # if make or nmake - if ${MAKE_CMD} help | grep "$1" > /dev/null; then + if ${MAKE_CMD} help | grep "$1\$" > /dev/null; then echo y else echo n From 4d77183b3e19dafec31b2280bc1c8b150e81168a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 16:43:40 +0000 Subject: [PATCH 064/128] Merge from trunk: | ------------------------------------------------------------------------ | r53829 | afabri | 2010-01-27 15:49:38 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h | | std::min -> (std::min) for VC++ | ------------------------------------------------------------------------ | r53832 | spion | 2010-01-27 16:18:45 +0100 (Wed, 27 Jan 2010) | 2 lines | Changed paths: | M /trunk/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h | | Add regression test for the iterator order determinism. "Tout ca pour ca"... | | ------------------------------------------------------------------------ | r53833 | afabri | 2010-01-27 16:19:08 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h | | Add #include to testfile | ------------------------------------------------------------------------ | r53834 | afabri | 2010-01-27 16:22:31 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Triangulation_2/include/CGAL/Constrained_Delaunay_triangulation_2.h | M /trunk/Triangulation_2/include/CGAL/Constrained_triangulation_2.h | M /trunk/Triangulation_2/include/CGAL/Constrained_triangulation_plus_2.h | M /trunk/Triangulation_2/include/CGAL/Delaunay_triangulation_2.h | M /trunk/Triangulation_2/include/CGAL/Regular_triangulation_2.h | M /trunk/Triangulation_2/include/CGAL/Triangulation_2.h | M /trunk/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h | | Change rng; Remove random_shuffle | ------------------------------------------------------------------------ | r53837 | afabri | 2010-01-27 17:04:42 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Triangulation_2/include/CGAL/Triangulation_2.h | | luckily Sylvain reads my commits, and luckily I switched from release to debug mode in my local testsuite | ------------------------------------------------------------------------ | r53842 | afabri | 2010-01-27 17:20:32 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h | M /trunk/Apollonius_graph_2/include/CGAL/Apollonius_graph_hierarchy_2.h | | Change rng | ------------------------------------------------------------------------ --- .../Apollonius_graph_hierarchy_2_impl.h | 14 ++++------ .../CGAL/Apollonius_graph_hierarchy_2.h | 6 ++-- .../Constrained_Delaunay_triangulation_2.h | 1 - .../CGAL/Constrained_triangulation_2.h | 1 - .../CGAL/Constrained_triangulation_plus_2.h | 1 - .../include/CGAL/Delaunay_triangulation_2.h | 1 - .../include/CGAL/Regular_triangulation_2.h | 1 - .../include/CGAL/Triangulation_2.h | 22 ++++++++++----- .../include/CGAL/Triangulation_hierarchy_2.h | 28 +++++++++---------- .../CGAL/_test_cls_regular_hierarchy_2.h | 1 + .../include/CGAL/Triangulation_hierarchy_3.h | 2 +- .../include/CGAL/_test_cls_delaunay_3.h | 21 ++++++++++++++ 12 files changed, 61 insertions(+), 38 deletions(-) diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h index 5da045dee34..085d4b72800 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h @@ -428,15 +428,11 @@ template int Apollonius_graph_hierarchy_2:: random_level() -{ - unsigned int l = 0; - while (1) { - if ( random(ag_hierarchy_2__ratio) ) break; - ++l; - } - if (l >= ag_hierarchy_2__maxlevel) - l = ag_hierarchy_2__maxlevel -1; - return l; +{ + boost::geometric_distribution<> proba(1.0/ag_hierarchy_2__ratio); + boost::variate_generator > die(random, proba); + + return (std::min)(die(), (int)ag_hierarchy_2__maxlevel)-1; } template diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_hierarchy_2.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_hierarchy_2.h index 7d7a0bbbed6..68f3145bc61 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_hierarchy_2.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_hierarchy_2.h @@ -22,7 +22,9 @@ #include -#include +#include +#include +#include #include #include @@ -200,7 +202,7 @@ private: // class variables // here is the stack of graphs which form the hierarchy Apollonius_graph_base* hierarchy[ag_hierarchy_2__maxlevel]; - Random random; // random generator + boost::rand48 random; // random generator public: template points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle f; for (typename std::vector::const_iterator p = points.begin(), end = points.end(); diff --git a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h index c1ec747d702..5ea0243fafb 100644 --- a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h @@ -248,7 +248,6 @@ public: int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); CGAL::spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle hint; diff --git a/Triangulation_2/include/CGAL/Constrained_triangulation_plus_2.h b/Triangulation_2/include/CGAL/Constrained_triangulation_plus_2.h index 271c190909b..4719b222f84 100644 --- a/Triangulation_2/include/CGAL/Constrained_triangulation_plus_2.h +++ b/Triangulation_2/include/CGAL/Constrained_triangulation_plus_2.h @@ -204,7 +204,6 @@ public: std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle hint; diff --git a/Triangulation_2/include/CGAL/Delaunay_triangulation_2.h b/Triangulation_2/include/CGAL/Delaunay_triangulation_2.h index 943107dead3..f422dc73615 100644 --- a/Triangulation_2/include/CGAL/Delaunay_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Delaunay_triangulation_2.h @@ -163,7 +163,6 @@ public: int n = this->number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle f; for (typename std::vector::const_iterator p = points.begin(), end = points.end(); diff --git a/Triangulation_2/include/CGAL/Regular_triangulation_2.h b/Triangulation_2/include/CGAL/Regular_triangulation_2.h index 0d577dbb8e7..8276ba8f61c 100644 --- a/Triangulation_2/include/CGAL/Regular_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Regular_triangulation_2.h @@ -332,7 +332,6 @@ public: int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle hint; diff --git a/Triangulation_2/include/CGAL/Triangulation_2.h b/Triangulation_2/include/CGAL/Triangulation_2.h index 60775e615ed..54a9be45eda 100644 --- a/Triangulation_2/include/CGAL/Triangulation_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_2.h @@ -38,10 +38,12 @@ #include #include #include -#include - #include +#include +#include +#include + CGAL_BEGIN_NAMESPACE template < class Gt, class Tds > class Triangulation_2; template < class Gt, class Tds > std::istream& operator>> @@ -179,7 +181,6 @@ protected: Gt _gt; Tds _tds; Vertex_handle _infinite_vertex; - mutable Random rng; public: // CONSTRUCTORS @@ -437,7 +438,6 @@ int insert(InputIterator first, InputIterator last) int n = number_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); spatial_sort (points.begin(), points.end(), geom_traits()); Face_handle f; for (typename std::vector::const_iterator p = points.begin(), end = points.end(); @@ -1813,6 +1813,11 @@ march_locate_2D(Face_handle c, { CGAL_triangulation_assertion(! is_infinite(c)); + boost::rand48 rng; + + boost::uniform_smallint<> two(0, 1); + boost::variate_generator > coin(rng, two); + Face_handle prev = Face_handle(); bool first = true; while (1) { @@ -1832,7 +1837,7 @@ march_locate_2D(Face_handle c, // We do loop unrolling in order to find out if this is faster. // In the very beginning we do not have a prev, but for the first step // we do not need randomness - int left_first = rng.template get_bits<1>(); + int left_first = coin()%2; const Point & p0 = c->vertex( 0 )->point(); const Point & p1 = c->vertex( 1 )->point(); @@ -1985,7 +1990,10 @@ march_locate_2D(Face_handle c, int& li) const { CGAL_triangulation_assertion(! is_infinite(c)); - + + boost::uniform_smallint<> three(0, 2); + boost::variate_generator > die3(rng, three); + Face_handle prev = Face_handle(); while (1) { if ( is_infinite(c) ) { @@ -1999,7 +2007,7 @@ march_locate_2D(Face_handle c, // we test its edges in a random order until we find a // neighbor to go further - int i = rng.template get_bits<2>(); + int i = die3(); int ccwi = ccw(i); int cwi = cw(i); const Point & p0 = c->vertex( i )->point(); diff --git a/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h b/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h index d9319eca7d8..5d213aa05c2 100644 --- a/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_hierarchy_2.h @@ -22,10 +22,13 @@ #define CGAL_TRIANGULATION_HIERARCHY_2_H #include -#include #include #include +#include +#include +#include + CGAL_BEGIN_NAMESPACE // parameterization of the hierarchy @@ -60,7 +63,7 @@ class Triangulation_hierarchy_2 private: // here is the stack of triangulations which form the hierarchy Tr_Base* hierarchy[Triangulation_hierarchy_2__maxlevel]; - Random random; // random generator + boost::rand48 random; public: Triangulation_hierarchy_2(const Geom_traits& traits = Geom_traits()); @@ -69,7 +72,7 @@ public: template Triangulation_hierarchy_2(InputIterator first, InputIterator beyond, const Geom_traits& traits = Geom_traits()) - : Tr_Base(traits), random((long)0) + : Tr_Base(traits) { hierarchy[0] = this; for(int i=1;inumber_of_vertices(); std::vector points (first, last); - std::random_shuffle (points.begin(), points.end()); CGAL::spatial_sort (points.begin(), points.end(), geom_traits()); // hints[i] is the face of the previously inserted point in level i. @@ -205,7 +207,7 @@ private: template Triangulation_hierarchy_2:: Triangulation_hierarchy_2(const Geom_traits& traits) - : Tr_Base(traits), random((long)0) + : Tr_Base(traits) { hierarchy[0] = this; for(int i=1;i Triangulation_hierarchy_2:: Triangulation_hierarchy_2(const Triangulation_hierarchy_2 &tr) - : Tr_Base(), random((long)0) + : Tr_Base() { // create an empty triangulation to be able to delete it ! hierarchy[0] = this; @@ -564,16 +566,14 @@ int Triangulation_hierarchy_2:: random_level() { - int l = 0; - while (1) { - if ( random(Triangulation_hierarchy_2__ratio) ) break; - ++l; - } - if (l >= Triangulation_hierarchy_2__maxlevel) - l = Triangulation_hierarchy_2__maxlevel -1; - return l; + boost::geometric_distribution<> proba(1.0/Triangulation_hierarchy_2__ratio); + boost::variate_generator > die(random, proba); + + return (std::min)(die(), Triangulation_hierarchy_2__maxlevel)-1; + } CGAL_END_NAMESPACE #endif // CGAL_TRIANGULATION_HIERARCHY_2_H + diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h index f96c9be82cd..72ad4e037f3 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h @@ -1,5 +1,6 @@ //#include //#include +#include #include #include diff --git a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h index 6877e103909..7a2e81e5ebb 100644 --- a/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_hierarchy_3.h @@ -506,7 +506,7 @@ random_level() boost::geometric_distribution<> proba(1.0/ratio); boost::variate_generator > die(random, proba); - return std::min(die(), (int)maxlevel)-1; + return (std::min)(die(), (int)maxlevel)-1; } CGAL_END_NAMESPACE diff --git a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h index 57b3ebfda72..eabb22b77a0 100644 --- a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h +++ b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_delaunay_3.h @@ -875,6 +875,27 @@ _test_cls_delaunay_3(const Triangulation &) assert(T3_0.dimension()==-1); assert(T3_0.number_of_vertices()==0); + // "Determinism" test : + // Triangulations built with the same order of input points + // must have the same order of the vertex and cell iterator. + { + Cls Ta (q, q+22), Tb(q, q+22); + assert(Ta == Tb); + for (Finite_vertices_iterator ita = Ta.finite_vertices_begin(), + itb = Tb.finite_vertices_begin(), + end = Ta.finite_vertices_end(); + ita != end; ++ita, ++itb) + assert(ita->point() == itb->point()); + for (Finite_cells_iterator ita = Ta.finite_cells_begin(), + itb = Tb.finite_cells_begin(), + end = Ta.finite_cells_end(); + ita != end; ++ita, ++itb) { + assert(ita->vertex(0)->point() == itb->vertex(0)->point()); + assert(ita->vertex(1)->point() == itb->vertex(1)->point()); + assert(ita->vertex(2)->point() == itb->vertex(2)->point()); + assert(ita->vertex(3)->point() == itb->vertex(3)->point()); + } + } } #endif // CGAL_TEST_CLS_DELAUNAY_C From 7c8da98d4efe88fc1f6603d6843ee416e71ee14f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 27 Jan 2010 17:05:30 +0000 Subject: [PATCH 065/128] Bump SONAME and SOVERSION. --- Installation/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/CMakeLists.txt b/Installation/CMakeLists.txt index 7b5eec26cd6..26c9afc6dc8 100644 --- a/Installation/CMakeLists.txt +++ b/Installation/CMakeLists.txt @@ -48,8 +48,8 @@ message( STATUS "CGAL_MAJOR_VERSION=${CGAL_MAJOR_VERSION}" ) message( STATUS "CGAL_MINOR_VERSION=${CGAL_MINOR_VERSION}" ) message( STATUS "CGAL_BUILD_VERSION=${CGAL_BUILD_VERSION}" ) -set( CGAL_SONAME_VERSION "4" CACHE STRING "soname-version" ) -set( CGAL_SOVERSION "4.0.1" CACHE STRING "soversion" ) +set( CGAL_SONAME_VERSION "5" CACHE STRING "soname-version" ) +set( CGAL_SOVERSION "5.0.0" CACHE STRING "soversion" ) mark_as_advanced(CGAL_SONAME_VERSION) mark_as_advanced(CGAL_SOVERSION) From 1722af72fb54f4aae948095bd0b40029083fbd29 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Jan 2010 09:24:30 +0000 Subject: [PATCH 066/128] CMake needs CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS. --- CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt b/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt index 7a8e66b4336..d49fdca4603 100644 --- a/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt +++ b/CGAL_ipelets/demo/CGAL_ipelets/CMakeLists.txt @@ -1,5 +1,7 @@ cmake_minimum_required(VERSION 2.4.5) +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) + #path where to build libraries set(CMAKE_LIBRARY_OUTPUT_DIRECTORY .build/ipelets) From c6a21267a4ce16531ea5d023656500f350906def Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Jan 2010 09:26:49 +0000 Subject: [PATCH 067/128] The full demo/ directory is to be ignored. --- Partition_2/dont_submit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Partition_2/dont_submit b/Partition_2/dont_submit index f2172c60379..1549b67ca59 100644 --- a/Partition_2/dont_submit +++ b/Partition_2/dont_submit @@ -1 +1 @@ -qt3 \ No newline at end of file +demo From d85a3fc17f6fdbf8ccf42412c6d37166236eda23 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Jan 2010 12:18:19 +0000 Subject: [PATCH 068/128] Merge from trunk: | ------------------------------------------------------------------------ | r53846 | afabri | 2010-01-27 17:44:13 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_hierarchy_2.h | | Change rng and use rng in random_shuffle | ------------------------------------------------------------------------ | r53859 | afabri | 2010-01-28 08:48:26 +0100 (Thu, 28 Jan 2010) | 1 line | Changed paths: | M /trunk/Spatial_sorting/include/CGAL/hilbert_sort.h | M /trunk/Spatial_sorting/include/CGAL/spatial_sort.h | | Default constructor of boost::rand48 is good enough | ------------------------------------------------------------------------ | r53860 | afabri | 2010-01-28 08:50:26 +0100 (Thu, 28 Jan 2010) | 1 line | Changed paths: | M /trunk/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h | | Switch to boost::rand48 | ------------------------------------------------------------------------ | r53861 | afabri | 2010-01-28 09:29:45 +0100 (Thu, 28 Jan 2010) | 1 line | Changed paths: | M /trunk/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/grid_simplify_point_set.tex | M /trunk/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/random_simplify_point_set.tex | | Remove repeated words | ------------------------------------------------------------------------ | r53864 | afabri | 2010-01-28 10:48:59 +0100 (Thu, 28 Jan 2010) | 1 line | Changed paths: | M /trunk/Interval_skip_list/include/CGAL/Interval_skip_list.h | | switch to boost::rand48 | ------------------------------------------------------------------------ | --- .../include/CGAL/Interval_skip_list.h | 21 +++++++-------- .../include/CGAL/Periodic_3_triangulation_3.h | 11 +++++--- .../grid_simplify_point_set.tex | 2 +- .../random_simplify_point_set.tex | 2 +- .../CGAL/Segment_Delaunay_graph_hierarchy_2.h | 27 ++++++++++--------- Spatial_sorting/include/CGAL/hilbert_sort.h | 6 +++-- Spatial_sorting/include/CGAL/spatial_sort.h | 8 +++--- 7 files changed, 42 insertions(+), 35 deletions(-) diff --git a/Interval_skip_list/include/CGAL/Interval_skip_list.h b/Interval_skip_list/include/CGAL/Interval_skip_list.h index 8bf16100ee7..ac87c104fcb 100644 --- a/Interval_skip_list/include/CGAL/Interval_skip_list.h +++ b/Interval_skip_list/include/CGAL/Interval_skip_list.h @@ -24,7 +24,10 @@ #include #include #include -#include + +#include +#include +#include //#define CGAL_ISL_USE_CCC @@ -126,7 +129,7 @@ class Interval_for_container : public Interval_ private: typedef Interval_ Interval; typedef typename Interval::Value Value; - Random rand; + boost::rand48 random; #ifdef CGAL_ISL_USE_LIST std::list container; @@ -1193,15 +1196,11 @@ template int Interval_skip_list::randomLevel() { - const float P = 0.5; - - int levels = 0; - while( P < rand.get_double(0,1)) levels++; - if ( levels <= maxLevel) - return(levels); - else - return(maxLevel+1); - } + boost::geometric_distribution<> proba(0.5); + boost::variate_generator > die(random, proba); + + return (std::min)(die(), (int)maxLevel)+1; +} template diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h index 760cc166a98..3a0ceee3f36 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h @@ -32,6 +32,9 @@ #include #include +#include +#include +#include #include @@ -43,7 +46,6 @@ #include -#include #include CGAL_BEGIN_NAMESPACE @@ -178,7 +180,6 @@ private: Geometric_traits _gt; Triangulation_data_structure _tds; Iso_cuboid _domain; - mutable Random rng; /// This threshold should be chosen such that if all edges are shorter, /// we can be sure that there are no self-edges anymore. FT edge_length_threshold; @@ -1510,12 +1511,16 @@ Periodic_3_triangulation_3::locate(const Point & p, const Offset &o_p, // at the end to decide if p lies on a face/edge/vertex/interior. Orientation o[4]; + boost::rand48 rng; + boost::uniform_smallint<> four(0, 3); + boost::variate_generator > die4(rng, four); + // Now treat the cell c. try_next_cell: // For the remembering stochastic walk, // we need to start trying with a random index : - int i = rng.template get_bits<2>(); + int i = die4(); // For the remembering visibility walk (Delaunay only), we don't : // int i = 0; diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/grid_simplify_point_set.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/grid_simplify_point_set.tex index 34fbd614a2b..fae43d427d7 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/grid_simplify_point_set.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/grid_simplify_point_set.tex @@ -21,7 +21,7 @@ Function \ccc{CGAL::grid_simplify_point_set()} considers a regular grid covering the bounding box of the input point set, and clusters all points sharing the same cell of the grid by picking as representant one arbitrarily chosen point. -This method modifies the order of input points so as to pack all remaining points first, and returns and returns an iterator over the first point to remove (see erase-remove idiom). For this reason it should not be called on sorted containers. +This method modifies the order of input points so as to pack all remaining points first, and returns an iterator over the first point to remove (see erase-remove idiom). For this reason it should not be called on sorted containers. \ccInclude{CGAL/grid_simplify_point_set.h} diff --git a/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/random_simplify_point_set.tex b/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/random_simplify_point_set.tex index bb2d0c521ff..7ee8ba0f240 100644 --- a/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/random_simplify_point_set.tex +++ b/Point_set_processing_3/doc_tex/Point_set_processing_3_ref/random_simplify_point_set.tex @@ -19,7 +19,7 @@ \ccDefinition -\ccc{CGAL::random_simplify_point_set()} randomly deletes a user-specified fraction of the input points. This method modifies the order of input points so as to pack all remaining points first, and returns and returns an iterator over the first point to remove (see erase-remove idiom). For this reason it should not be called on sorted containers. +\ccc{CGAL::random_simplify_point_set()} randomly deletes a user-specified fraction of the input points. This method modifies the order of input points so as to pack all remaining points first, and returns an iterator over the first point to remove (see erase-remove idiom). For this reason it should not be called on sorted containers. \ccInclude{CGAL/random_simplify_point_set.h} diff --git a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_hierarchy_2.h b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_hierarchy_2.h index f137fbe40db..a573be6a8d9 100644 --- a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_hierarchy_2.h +++ b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_hierarchy_2.h @@ -24,9 +24,13 @@ #include +#include +#include +#include +#include + #include -#include #include #include #include @@ -129,8 +133,7 @@ protected: // here is the stack of triangulations which form the hierarchy Base* hierarchy[sdg_hierarchy_2__maxlevel]; - Random random; // random number generator - + boost::rand48 random; // random generator public: // CONSTRUCTORS //------------- @@ -140,7 +143,7 @@ public: Segment_Delaunay_graph_hierarchy_2(Input_iterator first, Input_iterator beyond, const Gt& gt=Gt()) - : Base(gt), random((long)0) + : Base(gt) { init_hierarchy(gt); insert(first, beyond); @@ -176,7 +179,9 @@ public: for (Input_iterator it = first; it != beyond; ++it) { site_vec.push_back(Site_2(*it)); } - std::random_shuffle(site_vec.begin(), site_vec.end()); + + boost::random_number_generator rng(random); + std::random_shuffle(site_vec.begin(), site_vec.end(),rng); return insert(site_vec.begin(), site_vec.end(), Tag_false()); } @@ -423,14 +428,10 @@ protected: // LOCAL HELPER METHODS //--------------------- int random_level() { - unsigned int l = 0; - while ( true ) { - if ( random(sdg_hierarchy_2__ratio) ) break; - ++l; - } - if (l >= sdg_hierarchy_2__maxlevel) - l = sdg_hierarchy_2__maxlevel - 1; - return l; + boost::geometric_distribution<> proba(1.0/sdg_hierarchy_2__ratio); + boost::variate_generator > die(random, proba); + + return (std::min)(die(), (int)sdg_hierarchy_2__maxlevel)-1; } size_type find_level(Vertex_handle v) const { diff --git a/Spatial_sorting/include/CGAL/hilbert_sort.h b/Spatial_sorting/include/CGAL/hilbert_sort.h index 552d5295db1..92498a7a397 100644 --- a/Spatial_sorting/include/CGAL/hilbert_sort.h +++ b/Spatial_sorting/include/CGAL/hilbert_sort.h @@ -38,7 +38,8 @@ namespace internal { void hilbert_sort (RandomAccessIterator begin, RandomAccessIterator end, const Kernel &k, typename Kernel::Point_2 *) { - boost::random_number_generator rng(boost::rand48(0L)); + boost::rand48 random; + boost::random_number_generator rng(random); std::random_shuffle(begin,end, rng); (Hilbert_sort_2 (k)) (begin, end); } @@ -47,7 +48,8 @@ namespace internal { void hilbert_sort (RandomAccessIterator begin, RandomAccessIterator end, const Kernel &k, typename Kernel::Point_3 *) { - boost::random_number_generator rng(boost::rand48(0L)); + boost::rand48 random; + boost::random_number_generator rng(random); std::random_shuffle(begin,end, rng); (Hilbert_sort_3 (k)) (begin, end); } diff --git a/Spatial_sorting/include/CGAL/spatial_sort.h b/Spatial_sorting/include/CGAL/spatial_sort.h index da4d56cc1e0..e6b424b4152 100644 --- a/Spatial_sorting/include/CGAL/spatial_sort.h +++ b/Spatial_sorting/include/CGAL/spatial_sort.h @@ -41,8 +41,8 @@ namespace internal { const Kernel &k, typename Kernel::Point_2 *) { typedef Hilbert_sort_2 Sort; - - boost::random_number_generator rng(boost::rand48(0L)); + boost::rand48 random; + boost::random_number_generator rng(random); std::random_shuffle(begin,end,rng); (Multiscale_sort (Sort (k, 4), 16, 0.25)) (begin, end); @@ -53,8 +53,8 @@ namespace internal { const Kernel &k, typename Kernel::Point_3 *) { typedef Hilbert_sort_3 Sort; - - boost::random_number_generator rng(boost::rand48(0L)); + boost::rand48 random; + boost::random_number_generator rng(random); std::random_shuffle(begin,end, rng); (Multiscale_sort (Sort (k, 8), 64, 0.125)) (begin, end); From d4085f8e2458dc7143492dcc806cdbea9e6483c8 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Jan 2010 12:42:10 +0000 Subject: [PATCH 069/128] Merge from trunk: | ------------------------------------------------------------------------ | r53850 | stayeb | 2010-01-27 18:09:55 +0100 (Wed, 27 Jan 2010) | 1 line | Changed paths: | M /trunk/Mesh_2/include/CGAL/Double_map.h | A /trunk/Mesh_2/include/CGAL/internal | A /trunk/Mesh_2/include/CGAL/internal/container_fwd_fixed.hpp | | Fix a bug concerning Boost.Bimap (boost 1.41.0) and _GLIBCXX_PARALLEL g++ flag. | ------------------------------------------------------------------------ --- Mesh_2/include/CGAL/Double_map.h | 4 + .../CGAL/internal/container_fwd_fixed.hpp | 103 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 Mesh_2/include/CGAL/internal/container_fwd_fixed.hpp diff --git a/Mesh_2/include/CGAL/Double_map.h b/Mesh_2/include/CGAL/Double_map.h index 8bfa21321b4..c75f77b1f40 100644 --- a/Mesh_2/include/CGAL/Double_map.h +++ b/Mesh_2/include/CGAL/Double_map.h @@ -31,6 +31,10 @@ # define CGAL_USE_BOOST_BIMAP #endif +#if defined(CGAL_USE_BOOST_BIMAP) && BOOST_VERSION == 104100 +#include +#endif + #ifdef CGAL_USE_BOOST_BIMAP #include #include diff --git a/Mesh_2/include/CGAL/internal/container_fwd_fixed.hpp b/Mesh_2/include/CGAL/internal/container_fwd_fixed.hpp new file mode 100644 index 00000000000..91d9f5fb3de --- /dev/null +++ b/Mesh_2/include/CGAL/internal/container_fwd_fixed.hpp @@ -0,0 +1,103 @@ +// --------- +// NOTE: +// This file is a patched copy of boost/detail/container_fwd.hpp +// --------- + +// Copyright 2005-2008 Daniel James. +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +#if !defined(BOOST_DETAIL_CONTAINER_FWD_HPP) +#define BOOST_DETAIL_CONTAINER_FWD_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1020) +# pragma once +#endif + +#include +#include + +#if ((defined(__GLIBCPP__) || defined(__GLIBCXX__)) && (defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_PARALLEL))) \ + || BOOST_WORKAROUND(__BORLANDC__, > 0x551) \ + || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x842)) \ + || (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) + +#include +#include +#include +#include +#include +#include +#include +#include + +#else + +#include + +#if !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && \ + defined(__STL_CONFIG_H) + +#define BOOST_CONTAINER_FWD_BAD_BITSET + +#if !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) +#define BOOST_CONTAINER_FWD_BAD_DEQUE +#endif + +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_DEQUE) +#include +#endif + +#if defined(BOOST_CONTAINER_FWD_BAD_BITSET) +#include +#endif + +#if defined(BOOST_MSVC) +#pragma warning(push) +#pragma warning(disable:4099) // struct/class mismatch in fwd declarations +#endif + +namespace std +{ + template class allocator; + template class basic_string; + +#if BOOST_WORKAROUND(__GNUC__, < 3) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) + template struct string_char_traits; +#else + template struct char_traits; +#endif + + template class complex; +} + +// gcc 3.4 and greater +namespace std +{ +#if !defined(BOOST_CONTAINER_FWD_BAD_DEQUE) + template class deque; +#endif + + template class list; + template class vector; + template class map; + template + class multimap; + template class set; + template class multiset; + +#if !defined(BOOST_CONTAINER_FWD_BAD_BITSET) + template class bitset; +#endif + template struct pair; +} + +#if defined(BOOST_MSVC) +#pragma warning(pop) +#endif + +#endif + +#endif From f2a30d53a2edbee028e63d10ae00ae03e109d22e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 28 Jan 2010 15:32:06 +0000 Subject: [PATCH 070/128] Merge from trunk: | ------------------------------------------------------------------------ | r53873 | mcaroli | 2010-01-28 14:47:00 +0100 (Thu, 28 Jan 2010) | 3 lines | | Replace CGAL::Random by Boost RNG (with geometric distribution) | This is the adaptation of rev 53804 for the periodic case | | ------------------------------------------------------------------------ --- .../Periodic_3_triangulation_hierarchy_3.h | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h index 28eef3bfc9a..2baa43d990d 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_hierarchy_3.h @@ -22,9 +22,12 @@ #define CGAL_PERIODIC_3_TRIANGULATION_HIERARCHY_3_H #include -#include #include +#include +#include +#include + CGAL_BEGIN_NAMESPACE template < class PTr > @@ -61,7 +64,7 @@ public: private: // here is the stack of triangulations which form the hierarchy PTr_Base* hierarchy[maxlevel]; - Random random; // random generator + boost::rand48 random; int level_mult_cover; public: @@ -76,7 +79,7 @@ public: Periodic_3_triangulation_hierarchy_3(InputIterator first, InputIterator last, const Iso_cuboid& domain = Iso_cuboid(0,0,0,1,1,1), const Geom_traits& traits = Geom_traits()) - : PTr_Base(domain,traits), random((long)0), level_mult_cover(0) + : PTr_Base(domain,traits), level_mult_cover(0) { hierarchy[0] = this; for(int i=1; i Periodic_3_triangulation_hierarchy_3:: Periodic_3_triangulation_hierarchy_3( const Iso_cuboid& domain, const Geom_traits& traits) - : PTr_Base(domain, traits), random((long)0), level_mult_cover(0) + : PTr_Base(domain, traits), level_mult_cover(0) { hierarchy[0] = this; for(int i=1;i Periodic_3_triangulation_hierarchy_3:: Periodic_3_triangulation_hierarchy_3( const Periodic_3_triangulation_hierarchy_3 &tr) - : PTr_Base(tr), random((long)0), level_mult_cover(tr.level_mult_cover) + : PTr_Base(tr), level_mult_cover(tr.level_mult_cover) { hierarchy[0] = this; for(int i=1; inumber_of_sheets() == make_array(1,1,1) ) ++level_mult_cover; - int l = 0; - while ( ! random(ratio) && l < level_mult_cover ) - ++l; - - return l; + boost::geometric_distribution<> proba(1.0/ratio); + boost::variate_generator > + die(random, proba); + return std::min(die()-1, level_mult_cover); } CGAL_END_NAMESPACE From 450f5d59380671db2eccaec65ee65f805f0e91d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Thu, 28 Jan 2010 17:31:05 +0000 Subject: [PATCH 071/128] corrected typo in preprocessing directive ( and -> && ), avoided some vc warnings by making some casts explicit and eliminated a spurious #include that made the compilation fail in some configurations without gmpxx --- Algebraic_kernel_d/include/CGAL/RS/basic.h | 2 +- Algebraic_kernel_d/include/CGAL/RS/dyadic.h | 9 ++++----- Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h | 4 ++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Algebraic_kernel_d/include/CGAL/RS/basic.h b/Algebraic_kernel_d/include/CGAL/RS/basic.h index a5b43a50896..81938e4a329 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/basic.h +++ b/Algebraic_kernel_d/include/CGAL/RS/basic.h @@ -40,7 +40,7 @@ #define CGAL_RS_MIN_PREC 0 #endif -#if ( defined CGAL_HAS_THREADS and !defined CGAL_RS_NO_TLS ) +#if ( defined CGAL_HAS_THREADS && !defined CGAL_RS_NO_TLS ) # ifdef _MSC_VER # ifdef _WINDLL # error "Can't build CGAL_RS as thread safe." diff --git a/Algebraic_kernel_d/include/CGAL/RS/dyadic.h b/Algebraic_kernel_d/include/CGAL/RS/dyadic.h index 41837e91d06..e0b9b368ba0 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/dyadic.h +++ b/Algebraic_kernel_d/include/CGAL/RS/dyadic.h @@ -27,7 +27,6 @@ // for c++, compile with -lgmpxx #ifdef __cplusplus -#include #include #endif @@ -58,7 +57,7 @@ inline void dyadic_set(dyadic_ptr rop,dyadic_srcptr op){ dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); } - CGAL_assertion(mpfr_equal_p(rop,op)); + CGAL_assertion(mpfr_equal_p(rop,op)!=0); } inline void dyadic_set_z(dyadic_ptr rop,mpz_srcptr z){ @@ -85,7 +84,7 @@ inline void dyadic_set_fr(dyadic_ptr rop,mpfr_srcptr op){ if(rop!=op){ dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); - CGAL_assertion(mpfr_equal_p(rop,op)); + CGAL_assertion(mpfr_equal_p(rop,op)!=0); } } @@ -106,7 +105,7 @@ inline void dyadic_get_exactfr(mpfr_ptr rop,dyadic_srcptr op){ if(rop!=op){ dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); - CGAL_assertion(mpfr_equal_p(rop,op)); + CGAL_assertion(mpfr_equal_p(rop,op)!=0); } } @@ -301,7 +300,7 @@ inline void dyadic_pow_ui(dyadic_ptr rop,dyadic_srcptr op1,unsigned long u){ return; } if(mpfr_zero_p(op1)){ - CGAL_assertion_msg(u,"0^0"); + CGAL_assertion_msg(u!=0,"0^0"); dyadic_set_ui(rop,0); return; } diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h index 41d68feb702..3f6a3320431 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h @@ -130,7 +130,7 @@ int RS_polynomial_1::get_degree_static()const{ inline bool RS_polynomial_1::has_sfpart()const{ - return (_is_sf?true:(bool)_sfpart.get()); + return (_is_sf?true:(bool)(_sfpart.get())); } inline @@ -160,7 +160,7 @@ void RS_polynomial_1::set_sf()const{ inline bool RS_polynomial_1::has_sqfr()const{ - return _sqfr.get(); + return (bool)(_sqfr.get()); } inline From 1a3a5ac5b222b50c7e5bd8a13794911221dd8d03 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 09:03:49 +0000 Subject: [PATCH 072/128] Merge from trunk: | ------------------------------------------------------------------------ | r53889 | stayeb | 2010-01-29 09:47:00 +0100 (Fri, 29 Jan 2010) | 1 line | Changed paths: | M /trunk/Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h | | Fix: replace Vector_3() by CGAL::NULL_VECTOR. | ------------------------------------------------------------------------ --- Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h b/Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h index 3c963448c9b..890da16ecbb 100644 --- a/Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h +++ b/Mesh_3/include/CGAL/Mesh_3/vertex_perturbation.h @@ -561,7 +561,7 @@ protected: Vector_3 grad_vector = compute_gradient_vector(v,slivers); // Exit if grad_vector is not relevant - if ( Vector_3() == grad_vector ) + if ( CGAL::NULL_VECTOR == grad_vector ) return std::make_pair(false,v); return Base::apply_perturbation(v, @@ -603,7 +603,7 @@ private: } // May happen if sq_radius_gradient is not relevant for this vertex - return Vector_3(); + return CGAL::NULL_VECTOR; } /** @@ -642,6 +642,9 @@ private: FT dDz_dz = -2*p1.z()*da_dz; FT a = p1.x()*da_dx + p1.y()*da_dy + p1.z()*da_dz; + if ( CGAL_NTS is_zero(a) ) + return CGAL::NULL_VECTOR; + FT Dx = -sq_p1*da_dx + p1.y()*(sq_p2*p3.z() - sq_p3*p2.z()) - p1.z()*(sq_p2*p3.y() - sq_p3*p2.y()); FT Dy = -sq_p1*da_dy - p1.x()*(sq_p2*p3.z() - sq_p3*p2.z()) + p1.z()*(sq_p2*p3.x() - sq_p3*p2.x()); FT Dz = -sq_p1*da_dz + p1.x()*(sq_p2*p3.y() - sq_p3*p2.y()) - p1.y()*(sq_p2*p3.x() - sq_p3*p2.x()); @@ -715,7 +718,7 @@ protected: Vector_3 grad_vector = compute_gradient_vector(v,slivers); // Exit if grad_vector is not relevant - if ( Vector_3() == grad_vector ) + if ( CGAL::NULL_VECTOR == grad_vector ) return std::make_pair(false,v); return Base::apply_perturbation(v, @@ -757,7 +760,7 @@ private: } // May happen if volume_gradient is not relevant for this vertex - return Vector_3(); + return CGAL::NULL_VECTOR; } @@ -854,7 +857,7 @@ protected: Vector_3 grad_vector = compute_gradient_vector(v,slivers); // Exit if grad_vector is not relevant - if ( Vector_3() == grad_vector ) + if ( CGAL::NULL_VECTOR == grad_vector ) return std::make_pair(false,v); return Base::apply_perturbation(v, @@ -896,7 +899,7 @@ private: } // May happen if dihedral gradient is not relevant for this vertex - return Vector_3(); + return CGAL::NULL_VECTOR; } /** @@ -947,6 +950,7 @@ private: = Gt().compute_squared_distance_3_object(); const FT d_p0p1 = CGAL::sqrt(sq_distance(p0,p1)); + CGAL_assertion(!is_zero(d_p0p1)); return ( (-1./ d_p0p1) * (cotangent(a_02)*n0 + cotangent(a_03)*n1) ); } From a750f82221ce3a9ffbd2f46ca85fe24589c08fd9 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 09:23:09 +0000 Subject: [PATCH 073/128] We do not want PDB demos or examples: officially that library is only an internal tool. --- PDB/dont_submit | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PDB/dont_submit b/PDB/dont_submit index 1052f225904..843f3469e0f 100644 --- a/PDB/dont_submit +++ b/PDB/dont_submit @@ -1,2 +1,4 @@ test/PDB/check_refine_alignment.cpp doc_doxygen +demo +examples From 6e2a058f520f7e0ae1129bb87509df8994beb621 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 11:23:44 +0000 Subject: [PATCH 074/128] Remove the GraphicsView demo of Bool_op_2 from the release. --- Boolean_set_operations_2/dont_submit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Boolean_set_operations_2/dont_submit b/Boolean_set_operations_2/dont_submit index ca72b6b7bd7..ba2b5c489a6 100644 --- a/Boolean_set_operations_2/dont_submit +++ b/Boolean_set_operations_2/dont_submit @@ -1,3 +1,3 @@ bench demo/Boolean_set_operations_2/data/vlsi_2.dxf - +demo/Boolean_set_operations_2_GraphicsView From 4cf214996ce1486906055bc18241a28f5e990f0c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 13:52:13 +0000 Subject: [PATCH 075/128] Add a paragraph about the "determinitication" of 2D/3D triangulations, segment Voronoi, and Apollonius Graph. --- Installation/CHANGES | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Installation/CHANGES b/Installation/CHANGES index 47780c24f5f..deab6fbf39f 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -102,6 +102,12 @@ CGAL 3.6 offers the following improvements and new functionality : - The package can now be used together with the 3D Periodic Triangulation package to compute periodic alpha shapes. +6.5 2D/3D Triangulations, 2D Segment Voronoi Diagram, Apollonius Graph + + - The construstor and insert function taking ranges now produce + structures whose iterator orders is now deterministic (same at each + run). + 7 Mesh Generation From edcc2076d13408ac69ab5b293f5c8a80f59de98f Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 14:03:15 +0000 Subject: [PATCH 076/128] typos --- Installation/CHANGES | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index deab6fbf39f..e0932edbae7 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -102,9 +102,9 @@ CGAL 3.6 offers the following improvements and new functionality : - The package can now be used together with the 3D Periodic Triangulation package to compute periodic alpha shapes. -6.5 2D/3D Triangulations, 2D Segment Voronoi Diagram, Apollonius Graph +6.5 2D/3D Triangulations, 2D Segment Delaunay Graph, 2D Apollonius Graph - - The construstor and insert function taking ranges now produce + - The constructor and insert function taking ranges now produce structures whose iterator orders is now deterministic (same at each run). From c0a05916231a61e8bd6e965b20bd32ef53fb1243 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 14:23:34 +0000 Subject: [PATCH 077/128] Merge from trunk: | ------------------------------------------------------------------------ | r53887 | afabri | 2010-01-29 09:22:03 +0100 (Fri, 29 Jan 2010) | 1 line | Changed paths: | M /trunk/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h | | Default constructed boost::rand48 is good enough | ------------------------------------------------------------------------ | r53888 | afabri | 2010-01-29 09:24:22 +0100 (Fri, 29 Jan 2010) | 1 line | Changed paths: | M /trunk/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h | | Default constructed boost::rand48 is good enough | ------------------------------------------------------------------------ --- .../Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h | 4 ++-- .../Segment_Delaunay_graph_hierarchy_2_impl.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h index 085d4b72800..cba22cb7801 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h @@ -40,7 +40,7 @@ init_hierarchy(const Geom_traits& gt) template Apollonius_graph_hierarchy_2:: Apollonius_graph_hierarchy_2(const Geom_traits& gt) - : Apollonius_graph_base(gt), random((long)0) + : Apollonius_graph_base(gt) { init_hierarchy(gt); } @@ -51,7 +51,7 @@ template Apollonius_graph_hierarchy_2:: Apollonius_graph_hierarchy_2 (const Apollonius_graph_hierarchy_2& agh) - : Apollonius_graph_base(agh.geom_traits()), random((long)0) + : Apollonius_graph_base(agh.geom_traits()) { init_hierarchy(agh.geom_traits()); copy(agh); diff --git a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h index 760f2dddffa..12cb8701c8c 100644 --- a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h +++ b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h @@ -48,7 +48,7 @@ init_hierarchy(const Geom_traits& gt) template Segment_Delaunay_graph_hierarchy_2:: Segment_Delaunay_graph_hierarchy_2(const Gt& gt) - : Base(gt), random((long)0) + : Base(gt) { init_hierarchy(gt); } @@ -59,7 +59,7 @@ template Segment_Delaunay_graph_hierarchy_2:: Segment_Delaunay_graph_hierarchy_2 (const Segment_Delaunay_graph_hierarchy_2 &sdg) - : Base(sdg.geom_traits()), random((long)0) + : Base(sdg.geom_traits()) { // create an empty triangulation to be able to delete it ! init_hierarchy(sdg.geom_traits()); From 19b6e63deac842b5a19b77fbfd4b7bc0b511e615 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 14:27:21 +0000 Subject: [PATCH 078/128] Merge from trunk: | ------------------------------------------------------------------------ | r53896 | lrineau | 2010-01-29 12:06:00 +0100 (Fri, 29 Jan 2010) | 2 lines | Changed paths: | M /trunk/Polyhedron/demo/Polyhedron/MainWindow.ui | M /trunk/Polyhedron/demo/Polyhedron/Nef_type.h | M /trunk/Polyhedron/demo/Polyhedron/Nef_type_fwd.h | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_triangulate_facets_plugin.cpp | M /trunk/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp | M /trunk/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h | | Add 3D Minkowski sum to the (Nef) Polyhedron demo. | | ------------------------------------------------------------------------ | r53897 | lrineau | 2010-01-29 12:10:38 +0100 (Fri, 29 Jan 2010) | 2 lines | Changed paths: | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp | | Add a missing break; | | ------------------------------------------------------------------------ | r53898 | lrineau | 2010-01-29 12:12:27 +0100 (Fri, 29 Jan 2010) | 2 lines | Changed paths: | D /trunk/Minkowski_sum_3/demo | | Remove demo/ from Minkowski_sum_3, as the polyhedron demo has the feature. | | ------------------------------------------------------------------------ | r53899 | lrineau | 2010-01-29 12:15:43 +0100 (Fri, 29 Jan 2010) | 2 lines | Changed paths: | D /trunk/Nef_3/demo/Nef_3/makefile | | Remove that old makefile | | ------------------------------------------------------------------------ --- .gitattributes | 1 - .../demo/Minkowski_sum_3/CMakeLists.txt | 36 --------- .../demo/Minkowski_sum_3/minkowski_sum_3.cpp | 48 ----------- Nef_3/demo/Nef_3/makefile | 81 ------------------- Polyhedron/demo/Polyhedron/MainWindow.ui | 10 +++ Polyhedron/demo/Polyhedron/Nef_type.h | 3 +- Polyhedron/demo/Polyhedron/Nef_type_fwd.h | 4 +- .../Polyhedron/Polyhedron_demo_nef_plugin.cpp | 27 ++++++- ...yhedron_demo_triangulate_facets_plugin.cpp | 72 ++++++++++++++--- .../Polyhedron/Scene_nef_polyhedron_item.cpp | 13 +++ .../Polyhedron/Scene_nef_polyhedron_item.h | 4 + 11 files changed, 117 insertions(+), 182 deletions(-) delete mode 100644 Minkowski_sum_3/demo/Minkowski_sum_3/CMakeLists.txt delete mode 100644 Minkowski_sum_3/demo/Minkowski_sum_3/minkowski_sum_3.cpp delete mode 100644 Nef_3/demo/Nef_3/makefile diff --git a/.gitattributes b/.gitattributes index 1a631b15e32..5182a66342e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2264,7 +2264,6 @@ Nef_3/Visual_hull/Nef_3/mpi_triang.off -text svneol=unset#application/octet-stre Nef_3/Visual_hull/Nef_3/octahedron.off -text svneol=unset#application/octet-stream Nef_3/demo/Nef_3/CMakeLists.txt -text Nef_3/demo/Nef_3/cube.off -text svneol=unset#application/octet-stream -Nef_3/demo/Nef_3/makefile -text Nef_3/demo/Nef_3/mpi.vsh -text Nef_3/doc_tex/Nef_3/fig/closeup.gif -text svneol=unset#image/gif Nef_3/doc_tex/Nef_3/fig/closeup.pdf -text svneol=unset#application/pdf diff --git a/Minkowski_sum_3/demo/Minkowski_sum_3/CMakeLists.txt b/Minkowski_sum_3/demo/Minkowski_sum_3/CMakeLists.txt deleted file mode 100644 index c832905bf7c..00000000000 --- a/Minkowski_sum_3/demo/Minkowski_sum_3/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -# This is the CMake script for compiling a CGAL application. - -project( Minkowski_sum_3 ) - -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5) - -set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) - -if ( COMMAND cmake_policy ) - cmake_policy( SET CMP0003 NEW ) -endif() - -find_package(CGAL COMPONENTS Qt3 ) -include( ${CGAL_USE_FILE} ) - -find_package(Qt3-patched) -# FindQt3-patched.cmake is FindQt3.cmake patched by CGAL developers, so -# that it can be used together with FindQt4: all its variables are prefixed -# by "QT3_" instead of "QT_". - -if ( CGAL_FOUND AND QT3_FOUND AND CGAL_Qt3_FOUND) - - - # The executable itself. - add_executable ( minkowski_sum_3 - minkowski_sum_3.cpp ) - - add_to_cached_list( CGAL_EXECUTABLE_TARGETS minkowski_sum_3 ) - - target_link_libraries( minkowski_sum_3 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) - -else() - - message(STATUS "NOTICE: This demo requires CGAL and Qt3, and will not be compiled.") - -endif() diff --git a/Minkowski_sum_3/demo/Minkowski_sum_3/minkowski_sum_3.cpp b/Minkowski_sum_3/demo/Minkowski_sum_3/minkowski_sum_3.cpp deleted file mode 100644 index 95969e17e8a..00000000000 --- a/Minkowski_sum_3/demo/Minkowski_sum_3/minkowski_sum_3.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel; -typedef CGAL::Nef_polyhedron_3 Nef_polyhedron; -typedef CGAL::Polyhedron_3 Polyhedron; - -bool loadFile(char* filename, Nef_polyhedron& N) -{ - std::ifstream in(filename); - Polyhedron P; - in >> P; - N = Nef_polyhedron(P); - return true; -} - -int main(int argc, char* argv[]) { - - CGAL_assertion(argc==3); - - Nef_polyhedron N0, N1; - if(!loadFile(argv[1], N0)) { - std::cerr << "parameter 1 is not a valid OFF file" << std::endl; - return 0; - } - if(!loadFile(argv[2], N1)) { - std::cerr << "parameter 2 is not a valid OFF file" << std::endl; - return 0; - } - - Nef_polyhedron result = CGAL::minkowski_sum_3(N0, N1); - - QApplication a(argc, argv); - CGAL::Qt_widget_Nef_3* w = - new CGAL::Qt_widget_Nef_3(result); - a.setMainWidget(w); - w->show(); - a.exec(); -} diff --git a/Nef_3/demo/Nef_3/makefile b/Nef_3/demo/Nef_3/makefile deleted file mode 100644 index 4a215668bf5..00000000000 --- a/Nef_3/demo/Nef_3/makefile +++ /dev/null @@ -1,81 +0,0 @@ -# Created by the script cgal_create_makefile -# This is the makefile for compiling a CGAL application. - -#---------------------------------------------------------------------# -# include platform specific settings -#---------------------------------------------------------------------# -# Choose the right include file from the /make directory. - -# CGAL_MAKEFILE = ENTER_YOUR_INCLUDE_MAKEFILE_HERE -include $(CGAL_MAKEFILE) - -#---------------------------------------------------------------------# -# compiler flags -#---------------------------------------------------------------------# - -CXXFLAGS = \ - -Iinclude \ - -I../../include \ - $(CGAL_CXXFLAGS) \ - $(LONG_NAME_PROBLEM_CXXFLAGS) - -#---------------------------------------------------------------------# -# linker flags -#---------------------------------------------------------------------# - -LIBPATH = \ - $(CGAL_LIBPATH) - -LDFLAGS = \ - $(LONG_NAME_PROBLEM_LDFLAGS) \ - $(CGAL_LDFLAGS) - -#---------------------------------------------------------------------# -# target entries -#---------------------------------------------------------------------# - -all: \ - nef_3_extended$(EXE_EXT) \ - nef_3_filtered$(EXE_EXT) \ - nef_3_homogeneous$(EXE_EXT) \ - visual_hull$(EXE_EXT) \ - visualization_SM$(EXE_EXT) \ - visualization_SNC$(EXE_EXT) - -nef_3_extended$(EXE_EXT): nef_3_extended$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)nef_3_extended nef_3_extended$(OBJ_EXT) $(LDFLAGS) - -nef_3_filtered$(EXE_EXT): nef_3_filtered$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)nef_3_filtered nef_3_filtered$(OBJ_EXT) $(LDFLAGS) - -nef_3_homogeneous$(EXE_EXT): nef_3_homogeneous$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)nef_3_homogeneous nef_3_homogeneous$(OBJ_EXT) $(LDFLAGS) - -visual_hull$(EXE_EXT): visual_hull$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)visual_hull visual_hull$(OBJ_EXT) $(LDFLAGS) - -visualization_SM$(EXE_EXT): visualization_SM$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)visualization_SM visualization_SM$(OBJ_EXT) $(LDFLAGS) - -visualization_SNC$(EXE_EXT): visualization_SNC$(OBJ_EXT) - $(CGAL_CXX) $(LIBPATH) $(EXE_OPT)visualization_SNC visualization_SNC$(OBJ_EXT) $(LDFLAGS) - -clean: \ - nef_3_extended.clean \ - nef_3_filtered.clean \ - nef_3_homogeneous.clean \ - visual_hull.clean \ - visualization_SM.clean \ - visualization_SNC.clean - -#---------------------------------------------------------------------# -# suffix rules -#---------------------------------------------------------------------# - -.C$(OBJ_EXT): - $(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $< - - -.cpp$(OBJ_EXT): - $(CGAL_CXX) $(CXXFLAGS) $(OBJ_OPT) $< - diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 4b483dc3f2d..14efd8bb99c 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -83,6 +83,8 @@ + + @@ -485,6 +487,14 @@ Ctrl+T + + + &Minkowski sum + + + Ctrl+O, M + + diff --git a/Polyhedron/demo/Polyhedron/Nef_type.h b/Polyhedron/demo/Polyhedron/Nef_type.h index 4b99328719d..fd0f5730b98 100644 --- a/Polyhedron/demo/Polyhedron/Nef_type.h +++ b/Polyhedron/demo/Polyhedron/Nef_type.h @@ -10,6 +10,7 @@ // nef #include +#include // Boolean operations work only with exact kernel #ifdef USE_FORWARD_DECL @@ -21,7 +22,7 @@ typedef CGAL::Exact_predicates_exact_constructions_kernel Exact_Kernel; typedef CGAL::Polyhedron_3 Exact_polyhedron; typedef CGAL::Nef_polyhedron_3 Nef_polyhedron; #endif // NEF_TYPE_H diff --git a/Polyhedron/demo/Polyhedron/Nef_type_fwd.h b/Polyhedron/demo/Polyhedron/Nef_type_fwd.h index 1ead19655f5..a2e81d28ed0 100644 --- a/Polyhedron/demo/Polyhedron/Nef_type_fwd.h +++ b/Polyhedron/demo/Polyhedron/Nef_type_fwd.h @@ -7,14 +7,14 @@ struct Exact_Kernel; namespace CGAL { - class SNC_items; + class SNC_indexed_items; template class Nef_polyhedron_3 ; } typedef CGAL::Nef_polyhedron_3 Nef_polyhedron; #else // USE_FORWARD_DECL diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp index e6549f7cec6..147f636eec8 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_nef_plugin.cpp @@ -25,7 +25,8 @@ public: << "actionToPoly" << "actionUnion" << "actionIntersection" - << "actionDifference"; + << "actionDifference" + << "actionMinkowskiSum"; } // QList actions() const { @@ -45,7 +46,9 @@ public: private: enum Boolean_operation { BOOLEAN_UNION, BOOLEAN_INTERSECTION, - BOOLEAN_DIFFERENCE }; + BOOLEAN_DIFFERENCE, + MINKOWSKI_SUM + }; void boolean_operation(const Boolean_operation operation); public slots: @@ -54,6 +57,7 @@ public slots: void on_actionUnion_triggered(); void on_actionIntersection_triggered(); void on_actionDifference_triggered(); + void on_actionMinkowskiSum_triggered(); }; // end class Polyhedron_demo_nef_plugin void @@ -136,6 +140,12 @@ void Polyhedron_demo_nef_plugin::on_actionDifference_triggered() boolean_operation(BOOLEAN_DIFFERENCE); } +void +Polyhedron_demo_nef_plugin::on_actionMinkowskiSum_triggered() +{ + boolean_operation(MINKOWSKI_SUM); +} + void Polyhedron_demo_nef_plugin::boolean_operation(const Boolean_operation operation) { const int indexA = scene->selectionAindex(); @@ -164,8 +174,10 @@ void Polyhedron_demo_nef_plugin::boolean_operation(const Boolean_operation opera QApplication::setOverrideCursor(Qt::WaitCursor); // copy itemA - Scene_nef_polyhedron_item* new_item = - new Scene_nef_polyhedron_item(*itemA->nef_polyhedron()); + Scene_nef_polyhedron_item* new_item = 0; + if(operation != MINKOWSKI_SUM) { + new_item = new Scene_nef_polyhedron_item(*itemA->nef_polyhedron()); + }; // perform Boolean operation std::cout << "Boolean operation..."; @@ -181,6 +193,10 @@ void Polyhedron_demo_nef_plugin::boolean_operation(const Boolean_operation opera break; case BOOLEAN_DIFFERENCE: (*new_item) -= (*itemB); + break; + case MINKOWSKI_SUM: + new_item = Scene_nef_polyhedron_item::sum(*itemA, + *itemB); } std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; @@ -195,6 +211,9 @@ void Polyhedron_demo_nef_plugin::boolean_operation(const Boolean_operation opera break; case BOOLEAN_DIFFERENCE: name = tr("%1 minus %2"); + break; + case MINKOWSKI_SUM: + name = tr("Minkowski sum of %1 and %2"); } new_item->setName(name.arg(itemA->name(), itemB->name())); diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_triangulate_facets_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_triangulate_facets_plugin.cpp index 96b1ece09a4..6d76bf98453 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_triangulate_facets_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_triangulate_facets_plugin.cpp @@ -44,13 +44,13 @@ typedef CGAL::Constrained_triangulation_plus_2 CDT; typedef Polyhedron::HalfedgeDS HDS; -class Modifier : public CGAL::Modifier_base { +class Triangulate_modifier : public CGAL::Modifier_base { CDT* cdt; Polyhedron::Facet_handle fh; public: - Modifier(CDT* cdt, - Polyhedron::Facet_handle fh) + Triangulate_modifier(CDT* cdt, + Polyhedron::Facet_handle fh) : cdt(cdt), fh(fh) { } @@ -140,18 +140,71 @@ public: this->scene = scene_interface; this->mw = mainWindow; this->messages = m; - actionTriangulationFacets = new QAction("Triangulate facets", mw); - if(actionTriangulationFacets) { - connect(actionTriangulationFacets, SIGNAL(triggered()), + actionTriangulateFacets = new QAction("Triangulate facets", mw); + if(actionTriangulateFacets) { + connect(actionTriangulateFacets, SIGNAL(triggered()), this, SLOT(triangulate())); } + actionUnTriangulateFacets = new QAction("Untriangulate facets", mw); + if(actionUnTriangulateFacets) { + connect(actionUnTriangulateFacets, SIGNAL(triggered()), + this, SLOT(untriangulate())); + } }; QList actions() const { - return QList() << actionTriangulationFacets; + return QList() << actionTriangulateFacets + << actionUnTriangulateFacets; } public slots: + void untriangulate() { + CGAL::set_error_behaviour(CGAL::ABORT); + const Scene_interface::Item_id index = scene->mainSelectionIndex(); + + Scene_polyhedron_item* item = + qobject_cast(scene->item(index)); + + if(item) + { + Polyhedron* pMesh = item->polyhedron(); + if(!pMesh) return; + + QApplication::setOverrideCursor(Qt::WaitCursor); + + for(Polyhedron::Edge_iterator + eit = pMesh->edges_begin(), + end = pMesh->edges_end(); + eit != end; /*increment is done manually*/) + { + std::cerr << (void*)&*eit << std::endl; + Polyhedron::Edge_iterator eit_copy = eit++; + if(!eit_copy->is_border()) { + Polyhedron::Facet_handle fh1 = eit_copy->facet(); + Polyhedron::Facet_handle fh2 = eit_copy->opposite()->facet(); + typedef Polyhedron::Facet Facet; + if( fh1 != fh2 && + !eit_copy->vertex()->is_bivalent() && + !eit_copy->opposite()->vertex()->is_bivalent()) + { + Kernel::Vector_3 v1 = compute_facet_normal(*fh1); + Kernel::Vector_3 v2 = compute_facet_normal(*fh2); + if(v1 * v2 > 0.99) { + std::cerr << "join\n"; + // pMesh->is_valid(true); + pMesh->join_facet(eit_copy); + } + } + } + } + CGAL_assertion_code(pMesh->normalize_border()); + // CGAL_assertion(pMesh->is_valid(true, 3)); + scene->itemChanged(item); + // default cursor + QApplication::restoreOverrideCursor(); + } + } + void triangulate() { CGAL::set_error_behaviour(CGAL::ABORT); const Scene_interface::Item_id index = scene->mainSelectionIndex(); @@ -241,7 +294,7 @@ public slots: } } // then modify the polyhedron - Modifier modifier(&cdt, fit); + Triangulate_modifier modifier(&cdt, fit); pMesh->delegate(modifier); } CGAL_assertion_code(pMesh->normalize_border()); @@ -253,7 +306,8 @@ public slots: } private: - QAction* actionTriangulationFacets; + QAction* actionTriangulateFacets; + QAction* actionUnTriangulateFacets; Messages_interface* messages; }; diff --git a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp index 1eb6f7d6661..a1deab2594f 100644 --- a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.cpp @@ -10,6 +10,9 @@ #include #include "Scene_nef_rendering.h" +#include + + Scene_nef_polyhedron_item::Scene_nef_polyhedron_item() : Scene_item_with_display_list(), nef_poly(new Nef_polyhedron) @@ -270,4 +273,14 @@ operator-=(const Scene_nef_polyhedron_item& other) return *this; } +Scene_nef_polyhedron_item* +Scene_nef_polyhedron_item:: +sum(const Scene_nef_polyhedron_item& a, + const Scene_nef_polyhedron_item& b) +{ + return new Scene_nef_polyhedron_item(CGAL::minkowski_sum_3(*a.nef_poly, + *b.nef_poly)); +} + + #include "Scene_nef_polyhedron_item.moc" diff --git a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h index fe2fd1365a1..628787db4c1 100644 --- a/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_nef_polyhedron_item.h @@ -55,6 +55,10 @@ public: Scene_nef_polyhedron_item& operator-=(const Scene_nef_polyhedron_item&); // difference + static Scene_nef_polyhedron_item* + sum(const Scene_nef_polyhedron_item&, + const Scene_nef_polyhedron_item&); + private: Nef_polyhedron* nef_poly; }; // end class Scene_nef_polyhedron_item From ea6f589066ee3b0641251ff12807a44d68979789 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 17:23:40 +0000 Subject: [PATCH 079/128] Merge from trunk: | ------------------------------------------------------------------------ | r53910 | stayeb | 2010-01-29 16:33:26 +0100 (Fri, 29 Jan 2010) | 1 line | Changed paths: | M /trunk/Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h | M /trunk/Mesh_3/include/CGAL/Mesh_3/Mesh_global_optimizer.h | M /trunk/Mesh_3/include/CGAL/Mesh_3/Mesh_sizing_field.h | M /trunk/Mesh_3/include/CGAL/Mesh_3/Odt_move.h | | Fix: ensure that no '0' is inserted in the sizing field. | ------------------------------------------------------------------------ --- Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h | 19 ++++++++++-------- .../CGAL/Mesh_3/Mesh_global_optimizer.h | 20 ++++++++++++++++++- .../include/CGAL/Mesh_3/Mesh_sizing_field.h | 7 +++++-- Mesh_3/include/CGAL/Mesh_3/Odt_move.h | 3 ++- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h b/Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h index 631417609d0..70da168dc0c 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h +++ b/Mesh_3/include/CGAL/Mesh_3/Lloyd_move.h @@ -274,7 +274,8 @@ private: FT da = density_1d(a,v,sizing_field); FT db = density_1d(b,v,sizing_field); - + + CGAL_assertion( !is_zero(da+db) ); return ( (vector(p,a)*da + vector(p,b)*db) / (da+db) ); } @@ -295,7 +296,8 @@ private: FT da = density_2d(a,v,sizing_field); FT db = density_2d(b,v,sizing_field); FT dc = density_2d(c,v,sizing_field); - + + CGAL_assertion( !is_zero(da+db+dc) ); return ( (da*vector(p,a) + db*vector(p,b) + dc*vector(p,c)) / (da+db+dc) ); } @@ -441,6 +443,8 @@ private: const Sizing_field& sizing_field) const { FT s = sizing_field(p,v); + CGAL_assertion(!is_zero(s)); + // s^(d+2) return ( 1/(s*s*s) ); } @@ -453,12 +457,9 @@ private: const Vertex_handle& v, const Sizing_field& sizing_field) const { - FT s; - if ( use_v ) - s = sizing_field(p,v); - else - s = sizing_field(p); - + FT s = use_v ? sizing_field(p,v) : sizing_field(p); + CGAL_assertion(!is_zero(s)); + // s^(d+2) return ( 1/(s*s*s*s) ); } @@ -472,6 +473,8 @@ private: const Sizing_field& sizing_field) const { FT s = sizing_field(p,cell); + CGAL_assertion(!is_zero(s)); + // s^(d+2) return ( 1/(s*s*s*s*s) ); } diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_global_optimizer.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_global_optimizer.h index 416c437de1f..26a10f319d3 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_global_optimizer.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_global_optimizer.h @@ -507,9 +507,27 @@ average_circumradius_length(const Vertex_handle& v) const // nb == 0 could happen if there is an isolated point. if ( 0 != nb ) + { return sum_len/nb; + } else - return FT(0); + { + // Use outside cells to compute size of point + for ( typename Cell_vector::iterator cit = incident_cells.begin() ; + cit != incident_cells.end() ; + ++cit) + { + if ( !tr_.is_infinite(*cit) ) + { + sum_len += CGAL::sqrt(sq_circumradius_length(*cit,v)); + ++nb; + } + } + + CGAL_assertion(nb!=0); + CGAL_assertion(sum_len!=0); + return sum_len/nb; + } } diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_sizing_field.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_sizing_field.h index c7969ff56a4..6273a0d4c97 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_sizing_field.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_sizing_field.h @@ -129,9 +129,14 @@ fill(const std::map& value_map) value_map.find(vit->point()); if ( find_result != value_map.end() ) + { vit->set_meshing_info(find_result->second); + } else + { + CGAL_assertion(false); vit->set_meshing_info(FT(0)); + } } } @@ -192,7 +197,6 @@ interpolate_on_cell_vertices(const Point_3& p, const Cell_handle& cell) const const FT acdp = CGAL::abs(volume(a,c,d,p)); const FT bcdp = CGAL::abs(volume(b,d,c,p)); - // TODO: improve this (static filter ?) // If volume is 0, then compute the average value if ( is_zero(abcp+abdp+acdp+bcdp) ) return (va+vb+vc+vd)/4.; @@ -240,7 +244,6 @@ interpolate_on_facet_vertices(const Point_3& p, const Cell_handle& cell) const CGAL_assertion(acp >= 0); CGAL_assertion(bcp >= 0); - // TODO: improve this (static filter ?) // If area is 0, then compute the average value if ( is_zero(abp+acp+bcp) ) return (va+vb+vc)/3.; diff --git a/Mesh_3/include/CGAL/Mesh_3/Odt_move.h b/Mesh_3/include/CGAL/Mesh_3/Odt_move.h index 95dc7e07ae4..1bdbe3a6e8e 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Odt_move.h +++ b/Mesh_3/include/CGAL/Mesh_3/Odt_move.h @@ -124,7 +124,8 @@ private: Point_3 c = centroid(tr.tetrahedron(cell)); FT s = sizing_field(c,std::make_pair(cell,true)); - + CGAL_assertion(!is_zero(s)); + // Points of cell are positively oriented FT abs_volume = volume(tr.tetrahedron(cell)); CGAL_assertion(abs_volume >= 0); From 9af48eae4b09f226b8343bde1cf773d308fb4318 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 29 Jan 2010 17:44:29 +0000 Subject: [PATCH 080/128] Bug fixes in a demo. --- .../Constrained_Delaunay_triangulation_2.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp index 5bef930986f..f7ca799a501 100644 --- a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp @@ -458,7 +458,7 @@ MainWindow::on_actionLoadConstraints_triggered() QString fileName = QFileDialog::getOpenFileName(this, tr("Open Constraint File"), ".", - tr("Edge files (*.edg)\n" + tr("Edge files (*.edg);;" "Poly files (*.plg)")); open(fileName); } @@ -470,6 +470,7 @@ MainWindow::loadPolygonConstraints(QString fileName) CDT::Vertex_handle vp, vq, vfirst; std::ifstream ifs(qPrintable(fileName)); int n; + // int counter = 0; while(ifs >> n){ ifs >> first; p = first; @@ -478,11 +479,16 @@ MainWindow::loadPolygonConstraints(QString fileName) while(n--){ ifs >> q; vq = cdt.insert(q, vp->face()); - cdt.insert_constraint(vp,vq); + if(vp != vq) { + cdt.insert_constraint(vp,vq); + // std::cerr << "inserted constraint #" << counter++ << std::endl; + } p = q; vp = vq; } - cdt.insert_constraint(vp, vfirst); + if(vp != vfirst) { + cdt.insert_constraint(vp, vfirst); + } } @@ -519,7 +525,9 @@ MainWindow::loadEdgConstraints(QString fileName) vp = cdt.insert(p); } vq = cdt.insert(q, vp->face()); - cdt.insert_constraint(vp,vq); + if(vp != vq) { + cdt.insert_constraint(vp,vq); + } qold = q; vqold = vq; first = false; From dce51d693c488913b30cc4278d51b919b239af67 Mon Sep 17 00:00:00 2001 From: Pedro Machado Manhaes de Castro Date: Fri, 29 Jan 2010 19:48:24 +0000 Subject: [PATCH 081/128] Bug fix: pre-condition + case of three different spheres with 2 coincident radical planes (and the consequences). --- ...l_functions_on_roots_and_polynomials_2_3.h | 19 ++++++++++++++++++- .../include/CGAL/_test_predicates.h | 19 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Algebraic_kernel_for_spheres/include/CGAL/Algebraic_kernel_for_spheres/internal_functions_on_roots_and_polynomials_2_3.h b/Algebraic_kernel_for_spheres/include/CGAL/Algebraic_kernel_for_spheres/internal_functions_on_roots_and_polynomials_2_3.h index 1acf4efe3a4..34902d9d705 100644 --- a/Algebraic_kernel_for_spheres/include/CGAL/Algebraic_kernel_for_spheres/internal_functions_on_roots_and_polynomials_2_3.h +++ b/Algebraic_kernel_for_spheres/include/CGAL/Algebraic_kernel_for_spheres/internal_functions_on_roots_and_polynomials_2_3.h @@ -40,6 +40,7 @@ namespace CGAL { const typename AK::Polynomial_for_spheres_2_3 &e3, OutputIterator res ) { + typedef typename AK::FT FT; CGAL_kernel_precondition(!((e1 == e2) && (e2 == e3))); // we put as a precondition that the polynomial for spheres represents // a sphere and not an isolated point or an empty_space @@ -72,7 +73,23 @@ namespace CGAL { Polynomial_1_3 p1 = plane_from_2_spheres(e1,e2); if(intersect(e2,e3)) { Polynomial_1_3 p2 = plane_from_2_spheres(e2,e3); - return solve(p1,p2,e2,res); + if(same_solutions(p1,p2)) { + const FT sq_d1 = CGAL::square(p1.a()*e1.a() + p1.b()*e1.b() + + p1.c()*e1.c() + p1.d()) / + (square(p1.a()) + square(p1.b()) + square(p1.c())); + const FT r1_sqr = e1.r_sq() - sq_d1; + + const FT sq_d2 = CGAL::square(p2.a()*e2.a() + p2.b()*e2.b() + + p2.c()*e2.c() + p2.d()) / + (square(p2.a()) + square(p2.b()) + square(p2.c())); + const FT r2_sqr = e2.r_sq() - sq_d2; + if(r1_sqr != r2_sqr) return res; + // otherwise there are an infinite number of points + // this is not allowed + CGAL_kernel_precondition(r1_sqr == 0); + return internal::solve_tangent(p1,e1,res); + } + return solve(p1,p2,e2,res); } return res; } return res; } diff --git a/Algebraic_kernel_for_spheres/test/Algebraic_kernel_for_spheres/include/CGAL/_test_predicates.h b/Algebraic_kernel_for_spheres/test/Algebraic_kernel_for_spheres/include/CGAL/_test_predicates.h index c411192ff01..3ec2d96f65c 100644 --- a/Algebraic_kernel_for_spheres/test/Algebraic_kernel_for_spheres/include/CGAL/_test_predicates.h +++ b/Algebraic_kernel_for_spheres/test/Algebraic_kernel_for_spheres/include/CGAL/_test_predicates.h @@ -579,6 +579,25 @@ void _test_solve(AK ak) s3 = Polynomial_for_spheres_2_3(c1,c2,c3,c4); } while((a4 <= 0) || (b4 <= 0) || (c4 <= 0) || (s1 == s2) || (s2 == s3) || (s1 == s3)); + + if(CGAL::AlgebraicSphereFunctors::intersect(s1,s2)) { + Polynomial_1_3 p1 = CGAL::AlgebraicSphereFunctors::plane_from_2_spheres(s1,s2); + if(CGAL::AlgebraicSphereFunctors::intersect(s2,s3)) { + Polynomial_1_3 p2 = CGAL::AlgebraicSphereFunctors::plane_from_2_spheres(s2,s3); + if(CGAL::same_solutions(p1,p2)) { + const FT sq_d1 = CGAL::square(p1.a()*s1.a() + p1.b()*s1.b() + + p1.c()*s1.c() + p1.d()) / + (CGAL::square(p1.a()) + CGAL::square(p1.b()) + CGAL::square(p1.c())); + const FT r1_sqr = s1.r_sq() - sq_d1; + const FT sq_d2 = CGAL::square(p2.a()*s2.a() + p2.b()*s2.b() + + p2.c()*s2.c() + p2.d()) / + (CGAL::square(p2.a()) + CGAL::square(p2.b()) + CGAL::square(p2.c())); + const FT r2_sqr = s2.r_sq() - sq_d2; + if(r1_sqr == r2_sqr) if(r1_sqr != 0) { --i; continue; } + } + } + } + std::cout << a1 << " " << a2 << " " << a3 << " " << a4 << std::endl; std::cout << b1 << " " << b2 << " " << b3 << " " << b4 << std::endl; std::cout << c1 << " " << c2 << " " << c3 << " " << c4 << std::endl; From 74d565ea5c77520667f7a866284624754f42838d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 31 Jan 2010 12:11:28 +0000 Subject: [PATCH 082/128] Create CGAL-3.6-alpha1 --- .gitattributes | 1 + Maintenance/release_building/public_release_name | 1 + 2 files changed, 2 insertions(+) create mode 100644 Maintenance/release_building/public_release_name diff --git a/.gitattributes b/.gitattributes index 5182a66342e..61b08dd3abe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1621,6 +1621,7 @@ Maintenance/release_building/BUGFIX_NUMBER -text Maintenance/release_building/MAJOR_NUMBER -text Maintenance/release_building/MINOR_NUMBER -text Maintenance/release_building/global_dont_submit -text +Maintenance/release_building/public_release_name -text Maintenance/rpm/SOURCES/CGAL-README.Fedora svneol=native#text/plain Maintenance/rpm/SOURCES/CGAL-build-library.dpatch svneol=native#text/x-diff Maintenance/rpm/SOURCES/CGAL-install_cgal-SUPPORT_REQUIRED.patch svneol=native#text/x-diff diff --git a/Maintenance/release_building/public_release_name b/Maintenance/release_building/public_release_name new file mode 100644 index 00000000000..ce157ea91f3 --- /dev/null +++ b/Maintenance/release_building/public_release_name @@ -0,0 +1 @@ +CGAL-3.6-alpha1 From 58b73c31a54c4a5116e8a21d26e9b2ba472741cd Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 31 Jan 2010 12:13:10 +0000 Subject: [PATCH 083/128] Add a precision that AK/RS is not available on Windows. --- Installation/CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index e0932edbae7..36e66be6902 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -25,7 +25,7 @@ CGAL 3.6 offers the following improvements and new functionality : state-of-the-art algorithms to determine, compare and approximate real roots of univariate polynomials and bivariate polynomial systems. It includes models of the univariate algebraic kernel concept, based on - the library RS. + the library RS (available only on Linux and MacOS for the moment). 3.2 Number Types From 3fc59b1ccb3c342dffe8eb0639c8b953e761ae98 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 31 Jan 2010 12:39:12 +0000 Subject: [PATCH 084/128] NSIS installer for CGAL-3.6 --- .gitattributes | 1 + wininst/developer_scripts/script_cgal.nsh | 221 ++++++++++ wininst/developer_scripts/script_cgal.nsi | 470 ++++++++++++++++++++++ 3 files changed, 692 insertions(+) create mode 100644 wininst/developer_scripts/script_cgal.nsh create mode 100644 wininst/developer_scripts/script_cgal.nsi diff --git a/.gitattributes b/.gitattributes index 61b08dd3abe..461bb019e51 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3876,6 +3876,7 @@ wininst/developer_scripts/cgal-16.ico -text svneol=unset#image/x-icon wininst/developer_scripts/cgal.ico -text svneol=unset#image/x-icon wininst/developer_scripts/cgal_very_small_FFFFFF.bmp -text svneol=unset#image/bmp wininst/developer_scripts/locate.zip -text svneol=unset#application/zip +wininst/developer_scripts/script_cgal.nsh -text wininst/developer_scripts/script_cgal_3_3.nsh -text wininst/developer_scripts/script_cgal_3_4.nsh -text wininst/developer_scripts/script_cgal_3_5.nsh -text diff --git a/wininst/developer_scripts/script_cgal.nsh b/wininst/developer_scripts/script_cgal.nsh new file mode 100644 index 00000000000..2e36c074c7f --- /dev/null +++ b/wininst/developer_scripts/script_cgal.nsh @@ -0,0 +1,221 @@ +;============================ +; Copyright 2007, 2008, 2009 GeometryFactory (France) +; Authors: Andreas Fabri (andreas.fabri@geometryfactrory.com), +; Fernando Cacciola (fernando.cacciola@geometryfactrory.com), +; Laurent Rineau (laurent.rineau@geometryfactory.com) +;============================ +; Some portions of this file have been derived from "boost.nsi", the Boost Windows Installer, contributed by www.boost-consulting.org. +; +; Copyright 2006 Daniel Wallin +; Copyright 2006 Eric Niebler +; Distributed under the Boost Software License, Version 1.0. (See +; accompanying file LICENSE_1_0.txt or copy at +; http://www.boost.org/LICENSE_1_0.txt) +;============================ + +;!define SkipFiles +;!define SkipSetEnvVar +;!define SkipDownload +!define ViaFTP + +Var Platform +Var IsGmpInstalled +Var IsTAUCSInstalled + +;-------------------------------- +; Macros +;-------------------------------- + + +!define MultiVariantSection "!insertmacro MultiVariantSection" + +; Expands to a Section Group named "SecName" which contains all library variants. +; For each variant, the macro "Handler" is expanded with the variant name as argument +!macro MultiVariantSection SecName Handler Platform Idx + SectionGroup "${SecName}" ${Idx} + SectionGroup "VC8.0" + Section /o "Multithread Debug" + !insertmacro "${Handler}" "${Platform}" "vc80-mt-gd" + SectionEnd + Section /o "Multithread" + !insertmacro "${Handler}" "${Platform}" "vc80-mt" + SectionEnd + Section /o "Multithread, static runtime" + !insertmacro "${Handler}" "${Platform}" "vc80-mt-s" + SectionEnd + Section /o "Multithread Debug, static runtime" + !insertmacro "${Handler}" "${Platform}" "vc80-mt-sgd" + SectionEnd + SectionGroupEnd + SectionGroup "VC9.0" + Section /o "Multithread Debug" + !insertmacro "${Handler}" "${Platform}" "vc90-mt-gd" + SectionEnd + Section /o "Multithread" + !insertmacro "${Handler}" "${Platform}" "vc90-mt" + SectionEnd + Section /o "Multithread, static runtime" + !insertmacro "${Handler}" "${Platform}" "vc90-mt-s" + SectionEnd + Section /o "Multithread Debug, static runtime" + !insertmacro "${Handler}" "${Platform}" "vc90-mt-sgd" + SectionEnd + SectionGroupEnd + + SectionGroupEnd +!macroend + +!ifdef ViaFTP + !define DownloadOK "OK" + !define DownloadAborted "cancel" +!else + !define DownloadOK "success" + !define DownloadAborted "cancel" +!endif + +!macro DownloadFileFrom SERVER SRC_FOLDER FILE TGT +!ifndef SkipDownload + !ifdef DebugLog + ${LogMsg} "Downloadimg ${SERVER}${SRC_FOLDER}${FILE} into ${TGT}\${FILE}" + !endif + !ifdef ViaFTP + inetc::get ${SERVER}${SRC_FOLDER}${FILE} ${TGT}\${FILE} + !else + NSISdl::download ${SERVER}${SRC_FOLDER}${FILE} ${TGT}\${FILE} + !endif + Pop $0 + ${If} "$0" == "OK" + DetailPrint "${FILE} downloaded successfully." + ${ElseIf} "$0" == "URL Parts Error" + DetailPrint "${FILE} downloaded successfully." + ${ElseIf} "$0" == "Terminated" + DetailPrint "${FILE} download CANCELLED." + ${ElseIf} "$0" == "Cancelled" + DetailPrint "${FILE} download CANCELLED." + ${Else} + MessageBox MB_OK "Unable to download ${SERVER}${SRC_FOLDER}${FILE}. Error: $0" + DetailPrint "ERROR $0: Unable to download ${SERVER}${SRC_FOLDER}${FILE}." + ${Endif} +!endif +!macroend + +!macro DownloadFile SRC_FOLDER FILE TGT + !insertmacro DownloadFileFrom ${FTP_SRC} ${SRC_FOLDER} ${FILE} ${TGT} +!macroend + +!macro Install_PDB_if_debug_variant HANDLER PLATFORM VARIANT + ${StrStr} $R0 ${VARIANT} "gd" + ${If} "$R0" != "" + !insertmacro "${HANDLER}" "${PLATFORM}" "${VARIANT}" + ${EndIf} +!macroend + +!macro Install_DLL_if_dynamic_variant HANDLER PLATFORM VARIANT + ${StrStr} $R0 ${VARIANT} "s" + ${If} "$R0" == "" + !insertmacro "${HANDLER}" "${PLATFORM}" "${VARIANT}" + ${EndIf} +!macroend + +!macro Install_GMP_MPFR_libs PLATFORM VARIANT + !insertmacro DownloadFile "auxiliary/${PLATFORM}/GMP/4.2.4/" "gmp-${VARIANT}.lib.zip" "$INSTDIR\auxiliary\gmp\lib" + !insertmacro DownloadFile "auxiliary/${PLATFORM}/MPFR/2.3.2/" "mpfr-${VARIANT}.lib.zip" "$INSTDIR\auxiliary\gmp\lib" +!macroend + +!macro Install_GMP_MPFR_dlls PLATFORM VARIANT + !insertmacro DownloadFile "auxiliary/${PLATFORM}/GMP/4.2.4/" "gmp-${VARIANT}.dll.zip" "$INSTDIR\auxiliary\gmp\lib" + !insertmacro DownloadFile "auxiliary/${PLATFORM}/MPFR/2.3.2/" "mpfr-${VARIANT}.dll.zip" "$INSTDIR\auxiliary\gmp\lib" +!macroend + +!macro Install_GMP_MPFR_pdbs PLATFORM VARIANT + !insertmacro DownloadFile "auxiliary/${PLATFORM}/GMP/4.2.4/" "gmp-${VARIANT}.pdb.zip" "$INSTDIR\auxiliary\gmp\lib" + !insertmacro DownloadFile "auxiliary/${PLATFORM}/MPFR/2.3.2/" "mpfr-${VARIANT}.pdb.zip" "$INSTDIR\auxiliary\gmp\lib" +!macroend + +!macro Install_LAPACK_TAUCS_libs PLATFORM VARIANT + ; Headers are not VARIANT dependent so we include this only once, but here since + ; we want to download headers only if at least one lib variant was selected. + ${If} $IsTAUCSInstalled = 0 + StrCpy $IsTAUCSInstalled 1 + + !insertmacro DownloadFile "auxiliary/$Platform/TAUCS-CGAL-3.6/" "taucs.h.zip" "$INSTDIR\auxiliary\taucs\include" + !insertmacro DownloadFile "auxiliary/$Platform/TAUCS-CGAL-3.6/" "taucs_private.h.zip" "$INSTDIR\auxiliary\taucs\include" + !insertmacro DownloadFile "auxiliary/$Platform/TAUCS-CGAL-3.6/" "taucs_config_tests.h.zip" "$INSTDIR\auxiliary\taucs\include" + !insertmacro DownloadFile "auxiliary/$Platform/TAUCS-CGAL-3.6/" "taucs_config_build.h.zip" "$INSTDIR\auxiliary\taucs\include" + !insertmacro DownloadFile "auxiliary/$Platform/TAUCS-CGAL-3.6/" "blaswrap.h.zip" "$INSTDIR\auxiliary\taucs\include" + + ${If} "$Platform" == "win32" + !insertmacro DownloadFile "auxiliary/win32/TAUCS-CGAL-3.6/" "common.zip" "$INSTDIR\auxiliary\taucs\lib" + ${Endif} + + ${Endif} + + !insertmacro DownloadFile "auxiliary/${PLATFORM}/TAUCS-CGAL-3.6/" "libs-${VARIANT}.zip" "$INSTDIR\auxiliary\taucs\lib" +!macroend + +!macro Install_GMP_MPFR_bin PLATFORM VARIANT + + ; Headers are not VARIANT dependent so we include this only once, but here since + ; we want to download headers only if at least one lib variant was selected. + ${If} $IsGmpInstalled = 0 + StrCpy $IsGmpInstalled 1 + !insertmacro DownloadFile "auxiliary/${PLATFORM}/GMP/4.2.4/" "gmp.h.zip" "$INSTDIR\auxiliary\gmp\include" + !insertmacro DownloadFile "auxiliary/${PLATFORM}/MPFR/2.3.2/" "mpfr.h.zip" "$INSTDIR\auxiliary\gmp\include" + ${Endif} + + !insertmacro Install_GMP_MPFR_libs "${PLATFORM}" "${VARIANT}" + !insertmacro Install_PDB_if_debug_variant Install_GMP_MPFR_pdbs "${PLATFORM}" "${VARIANT}" + !insertmacro Install_DLL_if_dynamic_variant Install_GMP_MPFR_dlls "${PLATFORM}" "${VARIANT}" +!macroend + +!macro _MaybeSelectVariant Compiler Variant Sec1 Sec2 + + Push $0 + Push $1 + + ${If} "${Compiler}" == "VC8.0" + !insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 5" "State" + ${Else} + !insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 6" "State" + ${EndIf} + + ; If the corresponding compiler+variant is not found in the variant page + ; the section is unselected + StrCpy $1 0 + + ${If} $0 <> 0 ; Is the compiler selected? + + ; variants are the fields 7 to 10 + ${For} $0 7 10 + + !insertmacro MUI_INSTALLOPTIONS_READ $1 "variants.ini" "Field $0" "Text" + + ${If} "$1" == "${Variant}" ; Is this variant field the one we are looking for? + + ; Found the variant field. Read the state and exit the loop + !insertmacro MUI_INSTALLOPTIONS_READ $1 "variants.ini" "Field $0" "State" + + goto break_${Sec1} ; + + ${EndIf} + + ${Next} + + break_${Sec1}: + + ${EndIf} + + ${If} $1 = 0 + !insertmacro UnselectSection ${Sec1} + !insertmacro UnselectSection ${Sec2} + ${Else} + !insertmacro SelectSection ${Sec1} + !insertmacro SelectSection ${Sec2} + ${EndIf} + + Pop $1 + Pop $0 + +!macroend + +!define MaybeSelectVariant "!insertmacro _MaybeSelectVariant" diff --git a/wininst/developer_scripts/script_cgal.nsi b/wininst/developer_scripts/script_cgal.nsi new file mode 100644 index 00000000000..f24aed9ebeb --- /dev/null +++ b/wininst/developer_scripts/script_cgal.nsi @@ -0,0 +1,470 @@ +;=========================== +; Copyright 2007, 2008 GeometryFactory (France) +; Author: Andreas Fabri (andreas.fabri@geometryfactrory.com), Fernando Cacciola (fernando.cacciola@geometryfactrory.com) +;============================ +; Some portions of this file have been derived from "boost.nsi", the Boost Windows Installer, contributed by www.boost-consulting.org. +; +; Copyright 2006 Daniel Wallin +; Copyright 2006 Eric Niebler +; Distributed under the Boost Software License, Version 1.0. (See +; accompanying file LICENSE_1_0.txt or copy at +; http://www.boost.org/LICENSE_1_0.txt) +;============================ + + +!include "MUI.nsh" +!include "Sections.nsh" +!include "LogicLib.nsh" +!include "Locate.nsh" +!include "StrRep.nsh" +!include "ReplaceInFile.nsh" +!include "WriteEnvStr.nsh" +!include "EnvVarUpdate.nsh" + +;!define DebugLog + +!ifdef DebugLog + !include "TextLog.nsh" +!endif + +!include "script_cgal.nsh" + +!define CGAL_SRC "CGAL-3.6" +!define FTP_SRC "https://cgal.geometryfactory.com/CGAL/precompiled_libs/" + +;-------------------------------- +; General +;-------------------------------- + + ;Name and file + Name "CGAL-3.6" + + !ifdef FetchLocal + OutFile "CGAL-3.6-Full-Setup.exe" + !else + OutFile "CGAL-3.6-Setup.exe" + !endif + + ;Default installation folder + InstallDir "$PROGRAMFILES\CGAL-3.6" + + ;Get installation folder from registry if available + InstallDirRegKey HKCU "Software\CGAL-3.6" "" + + BrandingText "The CGAL Project and GeometryFactory - Installer created with NSIS." + + VIProductVersion "3.6.0.0" + VIAddVersionKey "ProductName" "CGAL Windows Installer" + VIAddVersionKey "CompanyName" "The CGAL Project and GeometryFactory" + VIAddVersionKey "LegalCopyright" "© The CGAL Project and GeometryFactory" + VIAddVersionKey "FileDescription" "Windows Installer for CGAL" + VIAddVersionKey "FileVersion" "3.6" + +;-------------------------------- +; Variables +;-------------------------------- + + Var MUI_TEMP + Var STARTMENU_FOLDER + Var SetCGAL_DIR + Var RegLoc + Var Add_GMP_LIB_DIR_to_PATH + +;-------------------------------- +; Interface Settings +;-------------------------------- + + !define MUI_ICON "cgal-16.ico" + !define MUI_UNICON "cgal-16.ico" + !define MUI_HEADERIMAGE + !define MUI_HEADERIMAGE_BITMAP_NOSTRETCH + + !define MUI_HEADERIMAGE_BITMAP "cgal_very_small_FFFFFF.bmp" ; optional + + !define MUI_FINISHPAGE_NOAUTOCLOSE + + !define MUI_ABORTWARNING + + !define MUI_WELCOMEFINISHPAGE_BITMAP Zirkel.bmp + !define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH + + !define MUI_COMPONENTSPAGE_SMALLDESC + + !define MUI_WELCOMEPAGE_TEXT "This downloads CGAL-3.6 to your machine." + + !define MUI_FINISHPAGE_TITLE "Downloading finished" + + !define MUI_FINISHPAGE_TEXT "You have downloaded CGAL successfully. Please continue the installation, reading the installation instructions." + + !define MUI_FINISHPAGE_LINK "Installation instructions" + + !define MUI_FINISHPAGE_LINK_LOCATION "file:///$INSTDIR/doc_html/index.html" + +;-------------------------------- +; Pages +;-------------------------------- + + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "${CGAL_SRC}\LICENSE" + + ; A page where the user can specify a default variant configuration (taken from the boost installer) + Page custom VariantsPage + + !insertmacro MUI_PAGE_COMPONENTS + + !insertmacro MUI_PAGE_DIRECTORY + + ; A page where the user can check/uncheck the environment variables + ; used to specify paths in vcproj files to be added. + Page custom envarsPage + + ;Start Menu Folder Page Configuration + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "CGAL-3.6" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + + !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER + + !insertmacro MUI_PAGE_INSTFILES + + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH + +;-------------------------------- +; Languages + + !insertmacro MUI_LANGUAGE "English" + +;-------------------------------- +; Sections +;-------------------------------- + + +;-------------------------------- +Section "!Main CGAL" MAIN_Idx + +!ifndef SkipFiles + SectionIn RO + SetOutPath "$INSTDIR\auxiliary" + File /nonfatal /r "${CGAL_SRC}\auxiliary\*.*" + SetOutPath "$INSTDIR\cmake" + File /r "${CGAL_SRC}\cmake\*.*" + SetOutPath "$INSTDIR\config" + File /r "${CGAL_SRC}\config\*.*" + SetOutPath "$INSTDIR\doc_html" + File /r "${CGAL_SRC}\doc_html\*.*" + SetOutPath "$INSTDIR\include" + File /r "${CGAL_SRC}\include\*.*" + SetOutPath "$INSTDIR\scripts" + File /r "${CGAL_SRC}\scripts\*.*" + SetOutPath "$INSTDIR\src" + File /r "${CGAL_SRC}\src\*.*" + SetOutPath "$INSTDIR\demo\icons" + File /r "${CGAL_SRC}\demo\icons\*.*" + SetOutPath "$INSTDIR\demo\resources" + File /r "${CGAL_SRC}\demo\resources\*.*" + + SetOutPath "$INSTDIR" + File "${CGAL_SRC}\AUTHORS" + File "${CGAL_SRC}\CHANGES" + File "${CGAL_SRC}\CMakeLists.txt" + File "${CGAL_SRC}\INSTALL" + File "${CGAL_SRC}\LICENSE" + File "${CGAL_SRC}\LICENSE.FREE_USE" + File "${CGAL_SRC}\LICENSE.LGPL" + File "${CGAL_SRC}\LICENSE.QPL" + File "${CGAL_SRC}\VERSION" + File ".\cgal.ico" +!endif + + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + ;Create shortcuts + CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" + + CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + + !insertmacro MUI_STARTMENU_WRITE_END + ;Create uninstaller + WriteUninstaller "$INSTDIR\Uninstall.exe" +SectionEnd +;-------------------------------- + +;-------------------------------- +Section "CGAL Examples and Demos" SAMPLES_Idx + +!ifndef SkipFiles + SetOutPath "$INSTDIR\examples" + File /r "${CGAL_SRC}\examples\*.*" + SetOutPath "$INSTDIR\demo" + File /r "${CGAL_SRC}\demo\*.*" +!endif +SectionEnd +;-------------------------------- + +;-------------------------------- +; Multi Variant Sections +; Each of the sections below is a group enclosing all the variants for a given set of precomp libraries +; NOTE: The variant selection code uses the trailing "libs" in the group name to identify components. +; DO NOT change the trailing "libs" in the section name. +; +${MultiVariantSection} "GMP and MPFR precompiled libs" Install_GMP_MPFR_bin "$Platform" GMP_LIB_Idx + +;-------------------------------- + +${MultiVariantSection} "LAPACK and TAUCS precompiled libs" Install_LAPACK_TAUCS_libs "$Platform" TAUCS_LIB_Idx + + +Section /o "HTML Manuals" DOC_Idx + !ifndef FetchLocal + !insertmacro DownloadFileFrom "https://cgal.geometryfactory.com/" "CGAL/3.6/Manual/" "cgal_manual.zip" "$INSTDIR\doc_html" + !endif +SectionEnd + +Section "-Unzip" + + ${locate::Open} "$INSTDIR" "/D=0 /X=zip" $0 + ${If} $0 <> 0 + ${Do} + ${locate::Find} $0 $1 $2 $3 $4 $5 $6 + ${If} "$1" != "" + ZipDLL::extractall $1 $2 + Pop $7 + ${If} "$7" == "success" + Delete $1 + ${EndIf} + ${EndIf} + ${LoopUntil} "$1" == "" + ${EndIf} + ${locate::Close} $0 + ${locate::Unload} + +SectionEnd + +;-------------------------------- +;Uninstaller Section + +Section "Uninstall" + + ;ADD YOUR OWN FILES HERE... + + Delete "$INSTDIR\Uninstall.exe" + + RMDir /r "$INSTDIR" + + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + + Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" + + ;Delete empty start menu parent diretories + StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" + + startMenuDeleteLoop: + ClearErrors + RMDir $MUI_TEMP + GetFullPathName $MUI_TEMP "$MUI_TEMP\.." + + IfErrors startMenuDeleteLoopDone + + StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop + startMenuDeleteLoopDone: + + DeleteRegKey /ifempty HKCU "Software\CGAL-3.6" + +SectionEnd + + + + +;-------------------------------- +;Descriptions + + ;Language strings + LangString DESC_MAIN ${LANG_ENGLISH} "The main components of the CGAL Library." + LangString DESC_SAMPLES ${LANG_ENGLISH} "The CGAL demos and examples, for which you need Qt 4 in order to build them (and Qt 3 for some)." + LangString DESC_GMP_LIB ${LANG_ENGLISH} "The precompiled GMP and MPFR libraries (needed for exact constructions)." + LangString DESC_TAUCS_LIB ${LANG_ENGLISH} "The precompiled LAPACK and TAUCS libraries." + LangString DESC_DOC ${LANG_ENGLISH} "The HTML manuals." + LangString DESC_ENVSET ${LANG_ENGLISH} "already set" + + ;Assign language strings to sections + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${MAIN_Idx} $(DESC_MAIN) + !insertmacro MUI_DESCRIPTION_TEXT ${SAMPLES_Idx} $(DESC_SAMPLES) + !insertmacro MUI_DESCRIPTION_TEXT ${GMP_LIB_Idx} $(DESC_GMP_LIB) + !insertmacro MUI_DESCRIPTION_TEXT ${TAUCS_LIB_Idx} $(DESC_TAUCS_LIB) + !insertmacro MUI_DESCRIPTION_TEXT ${DOC_Idx} $(DESC_DOC) + !insertmacro MUI_FUNCTION_DESCRIPTION_END + + +;-------------------------------- +; Functions +;-------------------------------- + +Function .onInit + + !ifdef DebugLog + ${LogSetFileName} "CGAL-3.6_install_log.txt" + ${LogSetOn} + !endif + + StrCpy $Platform "win32" + + # the plugins dir is automatically deleted when the installer exits + InitPluginsDir + File /oname=$PLUGINSDIR\splash.bmp ".\CGAL.bmp" + advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash + + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "variants.ini" + !insertmacro MUI_INSTALLOPTIONS_EXTRACT "environment_variables.ini" + +FunctionEnd + + +Function .onInstSuccess + + ${If} $SetCGAL_DIR != "" + ${WriteEnvStr} "CGAL_DIR" $SetCGAL_DIR $RegLoc + ${EndIf} + + ${If} $Add_GMP_LIB_DIR_to_PATH = 1 + ${EnvVarUpdate} $0 "PATH" "A" $RegLoc "$INSTDIR\auxiliary\gmp\lib" + ${EndIf} + +FunctionEnd + +Function VariantsPage + + !insertmacro MUI_HEADER_TEXT "Select Default Variants" "Choose the default variants to autoselect in the next page." + !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "variants.ini" + !insertmacro MUI_INSTALLOPTIONS_SHOW + + !insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 5" "State" + ${If} $0 = 0 + !insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 6" "State" + ${EndIf} + + !insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 11" "State" + ${If} $0 = 1 + StrCpy $Platform "win32" + ${Else} + StrCpy $Platform "x64" + ${Endif} + + ; + ; These lines are TIGHTLY bound to the exact text in the Variants page + ; (from variants.ini) and the section numbers of the GMP/MPFR and TAUCS components + ; + ${MaybeSelectVariant} "VC8.0" "Multithread Debug" 4 18 + ${MaybeSelectVariant} "VC8.0" "Multithread" 5 19 + ${MaybeSelectVariant} "VC8.0" "Multithread, static runtime" 6 20 + ${MaybeSelectVariant} "VC8.0" "Multithread Debug, static runtime" 7 21 + ${MaybeSelectVariant} "VC9.0" "Multithread Debug" 10 24 + ${MaybeSelectVariant} "VC9.0" "Multithread" 11 25 + ${MaybeSelectVariant} "VC9.0" "Multithread, static runtime" 12 26 + ${MaybeSelectVariant} "VC9.0" "Multithread Debug, static runtime" 13 27 + +FunctionEnd + +# Disables the env var checkbox # FN and textbox # FN+1 +!macro UncheckEnvStrCheckbox FN + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "0" +!macroend + +!macro CheckEnvStrCheckbox FN + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "1" +!macroend + +!macro DisableEnvStrCheckbox FN + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Flags" "DISABLED" +!macroend + +!macro EnableEnvStrCheckbox FN + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Flags" "" +!macroend + +# Disables the env var checkbox # FN +!macro SetEnvStrValueSlot FN VAL + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "${VAL}" +!macroend + +!macro SetEnvStrLabel FN VAL + !insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Text" "${VAL}" +!macroend + + +Function envarsPage + + Push $0 + Push $1 + Push $2 + Push $3 + Push $4 + Push $5 + + + !insertmacro MUI_HEADER_TEXT "Setting Environment Variables" "Choose whether to set or not the following environment variables" + + ReadEnvStr $1 "CGAL_DIR" # $1 = existing value for CGAL_DIR + + !insertmacro SetEnvStrValueSlot 7 $INSTDIR + !insertmacro SetEnvStrValueSlot 7 $INSTDIR + + ${If} $1 != "" + StrCpy $3 "($(DESC_ENVSET): $1 )" + !insertmacro UncheckEnvStrCheckbox 6 + !insertmacro SetEnvStrLabel 8 $3 + ${Endif} + + SectionGetText ${GMP_LIB_Idx} $2 + + SectionGetFlags ${GMP_LIB_Idx} $1 + IntOp $2 $1 & ${SF_PSELECTED} + + ${If} $2 == 0 + !insertmacro UncheckEnvStrCheckbox 9 + !insertmacro DisableEnvStrCheckbox 9 + ${Else} + !insertmacro CheckEnvStrCheckbox 9 + !insertmacro EnableEnvStrCheckbox 9 + ${Endif} + + !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "environment_variables.ini" + + !insertmacro MUI_INSTALLOPTIONS_SHOW_RETURN + Pop $0 + ${If} "$0" = "success" + # PROCESSING - Installs selected environment variables + + !insertmacro MUI_INSTALLOPTIONS_READ $3 "environment_variables.ini" "Field 2" "State" # $3=Is ALL USERS selected + + ${If} $3 == 1 + StrCpy $RegLoc "HKLM" + ${Else} + StrCpy $RegLoc "HKCU" + ${EndIf} + + !insertmacro MUI_INSTALLOPTIONS_READ $3 "environment_variables.ini" "Field 6" "State" # CGAL_DIR checkbox + !insertmacro MUI_INSTALLOPTIONS_READ $4 "environment_variables.ini" "Field 7" "State" # CGAL_DIR value + ${If} $3 == 1 + StrCpy $SetCGAL_DIR $4 + ${EndIF} + + !insertmacro MUI_INSTALLOPTIONS_READ $5 "environment_variables.ini" "Field 9" "State" # Add to PATH checkbox + ${If} $5 == 1 + StrCpy $Add_GMP_LIB_DIR_to_PATH 1 + ${EndIF} + + ${EndIf} + + Pop $5 + Pop $4 + Pop $3 + Pop $2 + Pop $1 + Pop $0 + +FunctionEnd From fc5d569686d419160376797f2944a2a1dd3d5b4b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sun, 31 Jan 2010 12:42:35 +0000 Subject: [PATCH 085/128] script_cgal.nsi is no longer named after a specific version. --- Scripts/developer_scripts/create_new_release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Scripts/developer_scripts/create_new_release b/Scripts/developer_scripts/create_new_release index 1c47f1a980d..7e2f91f7c84 100755 --- a/Scripts/developer_scripts/create_new_release +++ b/Scripts/developer_scripts/create_new_release @@ -310,7 +310,7 @@ if [ -n "$DO_PUBLIC" ]; then sed -i -e "/define *CGAL_SRC/,+20 s/CGAL-${MAJOR_NUMBER}.${MINOR_NUMBER}/${public_release_name}/g" ${public_release_name}-NSIS/script_cgal_${MAJOR_NUMBER}_${MINOR_NUMBER}.nsi pushd ${public_release_name}-NSIS if [ -n "${WINE}" -a -n "${MAKENSIS}" ]; then - "${WINE}" "${MAKENSIS}" "script_cgal_${MAJOR_NUMBER}_${MINOR_NUMBER}.nsi" + "${WINE}" "${MAKENSIS}" "script_cgal.nsi" mv *.exe "${HTML_DIR}/${release_name}-public/" fi popd From 680fc661b70ca7ef63a3edad31b137c0c9d9a859 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 09:48:57 +0000 Subject: [PATCH 086/128] Fix the CHANGES (typo, and forgot PT3 in 6.5) --- Installation/CHANGES | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 36e66be6902..602d9591288 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -63,7 +63,7 @@ CGAL 3.6 offers the following improvements and new functionality : 6 Triangulations and Delaunay Triangulations -6.1 2D/3D Regular triangulations +6.1 2D/3D Regular Triangulations - Weighted_point now has a constructor from Cartesian coordinates. @@ -84,7 +84,7 @@ CGAL 3.6 offers the following improvements and new functionality : - The old version of remove() (enabled with CGAL_DELAUNAY_3_OLD_REMOVE) has been deleted. -6.3 3D Periodic triangulations +6.3 3D Periodic Triangulations - New demo: 3D periodic Lloyd algorithm. @@ -102,7 +102,8 @@ CGAL 3.6 offers the following improvements and new functionality : - The package can now be used together with the 3D Periodic Triangulation package to compute periodic alpha shapes. -6.5 2D/3D Triangulations, 2D Segment Delaunay Graph, 2D Apollonius Graph +6.5 2D/3D Triangulations, 2D Segment Delaunay Graph, 2D Apollonius Graph, + and 3D Periodic Triangulations - The constructor and insert function taking ranges now produce structures whose iterator orders is now deterministic (same at each @@ -120,7 +121,7 @@ CGAL 3.6 offers the following improvements and new functionality : pertuber and an exuder. Each of these processes can be activated or not, and tuned to the users needs and to available computer resources. -8 Support library

    +8 Support library 8.1 CGAL ipelets From 494c19a2487284c4749d246458ee8d603af7fd25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 1 Feb 2010 10:54:35 +0000 Subject: [PATCH 087/128] changed the calls to the pow() functions in VC environments --- Number_types/include/CGAL/GMP/Gmpfi_type.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Number_types/include/CGAL/GMP/Gmpfi_type.h b/Number_types/include/CGAL/GMP/Gmpfi_type.h index 4422788f848..d8b0c259b3a 100644 --- a/Number_types/include/CGAL/GMP/Gmpfi_type.h +++ b/Number_types/include/CGAL/GMP/Gmpfi_type.h @@ -205,7 +205,7 @@ _GMPFI_CONSTRUCTOR_FROM_SCALAR(Gmpq); template Gmpfi(std::pair endpoints, - Gmpfi::Precision_type p=Gmpfi::get_default_precision()){ + Gmpfi::Precision_type p=get_default_precision()){ CGAL_assertion(p>=MPFR_PREC_MIN&&p<=MPFR_PREC_MAX); Gmpfr l(endpoints.first,std::round_toward_neg_infinity,p), r(endpoints.second,std::round_toward_infinity,p); @@ -716,9 +716,17 @@ std::pair,long> Gmpfi::to_interval_exp()const{ double d_low=mpfr_get_d_2exp(e1,left_mpfr(),GMP_RNDD); double d_upp=mpfr_get_d_2exp(e2,right_mpfr(),GMP_RNDU); if(e1e2){ +#ifdef _MSC_VER + d_low=d_low/pow((double)2.,(double)((*e1)-(*e2))); +#else d_low=d_low/pow(2,(*e1)-(*e2)); +#endif *e2=*e1; } return std::make_pair(std::make_pair(d_low,d_upp),*e1); From 10ea4fee350e5ecf223abb396560335cd028550c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 1 Feb 2010 10:59:26 +0000 Subject: [PATCH 088/128] used standard number types to avoid VC errors and eliminated warnings in VC due to implicit casts --- .../include/CGAL/RS/algebraic_1_constructors.h | 8 ++++---- .../include/CGAL/RS/algebraic_1_member.h | 6 +++--- Algebraic_kernel_d/include/CGAL/RS/inverse.h | 17 +++++++++++++---- Algebraic_kernel_d/include/CGAL/RS/p.h | 6 +++--- .../include/CGAL/RS/polynomial_1_member.h | 4 ++-- Algebraic_kernel_d/include/CGAL/RS/primes.h | 12 +++++++++--- 6 files changed, 34 insertions(+), 19 deletions(-) diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h index 30809b0c25f..48aa3bd43ae 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h @@ -144,8 +144,8 @@ Algebraic_1::Algebraic_1(mpfr_srcptr src){ Gmpfr r(src); mpfi_init2(mpfi(),r.get_precision()); mpfi_set_fr(mpfi(),r.fr()); - CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)); - CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)); + CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)!=0); + CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)!=0); RS_polynomial_1 *rsp=new RS_polynomial_1(r.to_fraction().mpq()); set_pol(*rsp); set_nr(0); @@ -186,8 +186,8 @@ inline Algebraic_1::Algebraic_1(const Gmpfr &r){ mpfi_init2(mpfi(),r.get_precision()); mpfi_set_fr(mpfi(),r.fr()); - CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)); - CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)); + CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)!=0); + CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)!=0); RS_polynomial_1 *rsp=new RS_polynomial_1(r.to_fraction().mpq()); set_pol(*rsp); set_nr(0); diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h index b14d17d86f2..56755110e59 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h @@ -148,7 +148,7 @@ bool Algebraic_1::is_consistent()const{ inline bool Algebraic_1::is_point()const{ - return(mpfr_equal_p(&(mpfi()->left),&(mpfi()->right))); + return(mpfr_equal_p(&(mpfi()->left),&(mpfi()->right))!=0); } inline @@ -188,9 +188,9 @@ void Algebraic_1::set_mpfi(mpfi_srcptr x){ inline bool Algebraic_1::overlaps(const Algebraic_1&a)const{ if(mpfr_lessequal_p(left(),a.left())) - return mpfr_lessequal_p(a.left(),right()); + return (mpfr_lessequal_p(a.left(),right())!=0); else - return mpfr_lessequal_p(left(),a.right()); + return (mpfr_lessequal_p(left(),a.right())!=0); } inline diff --git a/Algebraic_kernel_d/include/CGAL/RS/inverse.h b/Algebraic_kernel_d/include/CGAL/RS/inverse.h index 38b68358e11..d01c1400252 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/inverse.h +++ b/Algebraic_kernel_d/include/CGAL/RS/inverse.h @@ -19,7 +19,16 @@ #ifndef CGAL_RS__INVERSE_H #define CGAL_RS__INVERSE_H -#include +#ifdef _MSC_VER +# define _s64 __int64 +# define _u64 unsigned __int64 +# define _u32 unsigned __int32 +#else +# include +# define _s64 int64_t +# define _u64 uint64_t +# define _u32 uint32_t +#endif #define n_(A) (A<0?-A:A) //#define u_(A) (A<0?-1:1) @@ -33,9 +42,9 @@ class Inverse{ protected: // given a and b, returns s such that gcd(a,b)=s*a+t*b (GCL, page 36) // s*a+t*q=1 => s is the inverse of a, mod q (pafe 173) - static int64_t eea_s(uint32_t a,uint32_t b){ - int64_t c1,d1,r1;//,c2,d2,r2,t,s; - uint32_t r,c,d;//,q; + static _s64 eea_s(_u32 a,_u32 b){ + _s64 c1,d1,r1;//,c2,d2,r2,t,s; + _u32 r,c,d;//,q; // a and b are positive, so a=n_(a) and b=n_(b) //c=n_(a); d=n_(b); c=a; d=b; diff --git a/Algebraic_kernel_d/include/CGAL/RS/p.h b/Algebraic_kernel_d/include/CGAL/RS/p.h index 497daeed464..586676d73a6 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/p.h +++ b/Algebraic_kernel_d/include/CGAL/RS/p.h @@ -28,9 +28,9 @@ namespace RS_MGCD{ // pn size is 32 bits, // the sizes of lpn and spn must be, at least, as twice as the size of pn #define PN_BITS 32 -#define pn uint32_t // unsigned -#define lpn uint64_t // unsigned long long -#define spn int64_t // long long +#define pn _u32 // unsigned +#define lpn _u64 // unsigned long long +#define spn _s64 // long long #define p_mpz_set_pn(A,PN) mpz_set_ui(A,(unsigned long)(PN)) #define p_mpz_mul_pn(A,B,PN) mpz_mul_ui(A,B,(unsigned long)(PN)) diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h index 3f6a3320431..e9eb05bb8ce 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h @@ -130,7 +130,7 @@ int RS_polynomial_1::get_degree_static()const{ inline bool RS_polynomial_1::has_sfpart()const{ - return (_is_sf?true:(bool)(_sfpart.get())); + return (_is_sf?true:(_sfpart.get()!=NULL?true:false)); } inline @@ -160,7 +160,7 @@ void RS_polynomial_1::set_sf()const{ inline bool RS_polynomial_1::has_sqfr()const{ - return (bool)(_sqfr.get()); + return (_sqfr.get()!=NULL?true:false); } inline diff --git a/Algebraic_kernel_d/include/CGAL/RS/primes.h b/Algebraic_kernel_d/include/CGAL/RS/primes.h index 4bdd619fd0a..d764fa97468 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/primes.h +++ b/Algebraic_kernel_d/include/CGAL/RS/primes.h @@ -28,6 +28,12 @@ //#define pr_is_prime(N) (pr_fermat(N)?pr_is_prime_bruteforce(N):0) #define pr_is_prime(N) pr_mrj(N) +#ifdef _MSC_VER +# define cgal_rs_random rand +#else +# define cgal_rs_random random +#endif + namespace CGAL{ namespace RS_MGCD{ @@ -47,14 +53,14 @@ class Primes:public Crt{ // vzGG, p. 507; returns 0 if n is composite static int pr_fermat(pn n){ p_set_prime(n); - return(p_pow(2+((pn)random())%(n-4),n-1)==1); + return(p_pow(2+((pn)cgal_rs_random())%(n-4),n-1)==1); } // Solovay-Strassen static int pr_ss(pn n){ pn a,x; p_set_prime(n); - a=1+(pn)random()%(n-2); + a=1+(pn)cgal_rs_random()%(n-2); x=p_div(a,n); return(!x||p_pow(a,n>>1)!=x); } @@ -69,7 +75,7 @@ class Primes:public Crt{ d=d>>1; } p_set_prime(n); - a=2+(pn)random()%(n-4); + a=2+(pn)cgal_rs_random()%(n-4); x=p_pow(a,d); if(x==1||x==n-1) return 1; // pobably prime From 9f29daf40562984695d6fbf59546a8697c3601f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Mon, 1 Feb 2010 11:55:10 +0000 Subject: [PATCH 089/128] Fix warning (MSVS2k8). --- .../test/Intersections_3/triangle_other_intersection_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp index 3da1ca85c45..d723a38d796 100644 --- a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp +++ b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp @@ -626,7 +626,7 @@ int main() // ----------------------------------- // Test random intersection // ----------------------------------- - srand(time(NULL)); + srand( static_cast(time(NULL)) ); std::cout << std::endl << "Test random intersections" << std::endl; std::cout << "\tTesting with Simple_cartesian..." << std::endl ; random_test(); From 30272bdb58d483746536d205e104fc06b511d971 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 12:07:16 +0000 Subject: [PATCH 090/128] Remove the version number from strings of environment_variables.ini --- wininst/developer_scripts/environment_variables.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wininst/developer_scripts/environment_variables.ini b/wininst/developer_scripts/environment_variables.ini index 62bdbdae529..484191fcc29 100644 --- a/wininst/developer_scripts/environment_variables.ini +++ b/wininst/developer_scripts/environment_variables.ini @@ -33,7 +33,7 @@ Left=0 Right=-1 Top=25 Bottom=-1 -Text=Enviroment variables to set +Text=Environment variables to set [Field 5] Type=Label @@ -77,7 +77,7 @@ Left=10 Right=-10 Top=95 Bottom=105 -Text=Add CGAL-3.5/auxiliary/gmp/lib to the PATH +Text=Add CGAL/auxiliary/gmp/lib to the PATH State=1 [Field 10] @@ -86,5 +86,5 @@ Left=10 Right=-10 Top=110 Bottom=135 -Text=CGAL-3.5/auxiliary/gmp/lib contains DLL files. If you do not add this to the PATH, make sure to manually move the DLLs to a directory already in the PATH. +Text=CGAL/auxiliary/gmp/lib contains DLL files. If you do not add this to the PATH, make sure to manually move the DLLs to a directory already in the PATH. Flags=DISABLED From fed3e4bd6137a8623b7224b464a3d8b773bd9fb2 Mon Sep 17 00:00:00 2001 From: Michael Hemmer Date: Mon, 1 Feb 2010 12:18:54 +0000 Subject: [PATCH 091/128] fix license header --- Modular_arithmetic/include/CGAL/Modular_traits.h | 2 +- Modular_arithmetic/include/CGAL/Residue.h | 2 +- Modular_arithmetic/include/CGAL/primes.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Modular_arithmetic/include/CGAL/Modular_traits.h b/Modular_arithmetic/include/CGAL/Modular_traits.h index 84e254bae48..ed8e68f07ed 100644 --- a/Modular_arithmetic/include/CGAL/Modular_traits.h +++ b/Modular_arithmetic/include/CGAL/Modular_traits.h @@ -1,4 +1,4 @@ -// Max-Planck-Institute Saarbruecken (Germany). +// Copyright (c) 2006-2008 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you can redistribute it and/or diff --git a/Modular_arithmetic/include/CGAL/Residue.h b/Modular_arithmetic/include/CGAL/Residue.h index b54ca48abf4..cc6babef334 100644 --- a/Modular_arithmetic/include/CGAL/Residue.h +++ b/Modular_arithmetic/include/CGAL/Residue.h @@ -1,4 +1,4 @@ -// Max-Planck-Institute Saarbruecken (Germany). +// Copyright (c) 2006-2008 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you can redistribute it and/or diff --git a/Modular_arithmetic/include/CGAL/primes.h b/Modular_arithmetic/include/CGAL/primes.h index 9162f84ba9c..0e2baefe92f 100644 --- a/Modular_arithmetic/include/CGAL/primes.h +++ b/Modular_arithmetic/include/CGAL/primes.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2007 Max-Planck-Institute Saarbruecken (Germany). +// Copyright (c) 2006-2008 Max-Planck-Institute Saarbruecken (Germany). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you can redistribute it and/or From eb4a7632afa62aff77c71312d1f4df61438c2888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 1 Feb 2010 12:42:57 +0000 Subject: [PATCH 092/128] added Sylvain L. and myself to the AUTHORS file --- Installation/AUTHORS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Installation/AUTHORS b/Installation/AUTHORS index ea9afd177ca..4cd6c3a1c71 100644 --- a/Installation/AUTHORS +++ b/Installation/AUTHORS @@ -52,6 +52,7 @@ Menelaos Karavelas Michael Kerber Lutz Kettner Nico Kruithof +Sylvain Lazard Eran Leiserowitz Bruno Lévy Sebastian Limbach @@ -71,6 +72,7 @@ Ralf Osbild Steve Oudot Eli Packer Dmitrii Pasechnik +Luis Peñaranda Sylvain Pion Marc Pouget Sigal Raab From a83757e21a56082bf658c18be06ff0c19691285d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 13:24:35 +0000 Subject: [PATCH 093/128] Remove the CGAL version numbers from that file. --- Installation/INSTALL | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Installation/INSTALL b/Installation/INSTALL index 31a19cf7926..ecce937c75c 100644 --- a/Installation/INSTALL +++ b/Installation/INSTALL @@ -19,6 +19,9 @@ at . For more information about CGAL, see the . +In the current file, x.y is an implicit replacement for the current version +of CGAL (3.5.1, 3.6, and so on). + PREREQUISITES ============= @@ -49,13 +52,13 @@ CGAL packages, some are only needed for demos. - GMP (>= 4.1.4) http://gmplib.org/ - or precompiled version that can be downloaded with CGAL-3.5-Setup.exe + or precompiled version that can be downloaded with CGAL-x.y-Setup.exe based on http://fp.gladman.plus.com/computing/gmp4win.htm - MPFR (>= 2.2.1) http://www.mpfr.org/ - or precompiled version that can be downloaded with CGAL-3.5-Setup.exe + or precompiled version that can be downloaded with CGAL-x.y-Setup.exe based on http://fp.gladman.plus.com/computing/gmp4win.htm - LEDA (>= 6.2) @@ -85,13 +88,13 @@ CGAL packages, some are only needed for demos. o Approximation of Ridges and Umbilics o Planar Parameterization of Triangulated Surface Meshes http://www.netlib.org/blas/, http://www.netlib.org/lapack/ - or precompiled version that can be downloaded with CGAL-3.5-Setup.exe + or precompiled version that can be downloaded with CGAL-x.y-Setup.exe - TAUCS (sparse matrix solver) Accelerates the package: o Planar Parameterization of Triangulated Surface Meshes http://www.tau.ac.il/~stoledo/taucs/ - or precompiled version that can be downloaded with CGAL-3.5-Setup.exe + or precompiled version that can be downloaded with CGAL-x.y-Setup.exe * Miscellaneous From d90cfd8bb22a844d207a297dd34adac1cf7e8c83 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 14:32:55 +0000 Subject: [PATCH 094/128] - Update to 3.6. - Add g++-4.4 in supported g++ versions. --- .../doc_tex/Installation/installation.tex | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index d3f63b5b125..f88af2ff935 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -86,11 +86,11 @@ This document describes how to install \cgal\ on Windows, Unix-like systems and Ideally, installing \cgal amounts to: \begin{verbatim} - cd CGAL-3.5 # go to CGAL directory + cd CGAL-3.6 # go to CGAL directory cmake . # configure CGAL make # build the CGAL libraries cd examples/Straight_skeleton_2 # go to an example directory - cmake -DCGAL_DIR=$HOME/CGAL-3.5 . # configure the examples + cmake -DCGAL_DIR=$HOME/CGAL-3.6 . # configure the examples make # build the examples \end{verbatim} %% $ This dollar is there to trick syntax highlighting in emacs @@ -107,14 +107,14 @@ e.g. for numeric solvers, or visualization. \subsection{Compilers} In order to build the \cgal\ libraries, you need a \CC\ compiler. -\cgal~3.5 is supported for the following compilers/operating systems: +\cgal~3.6 is supported for the following compilers/operating systems: \begin{center}\index{compilers!supported}\index{supported compilers} \renewcommand{\arraystretch}{1.3} \gdef\lcTabularBorder{2} \begin{tabular}{|l|l|} \hline \textbf{compiler} & \textbf{operating system}\\\hline\hline - \Gcc{3.4, 4.0, 4.1, 4.2, 4.3} \footnotemark[10] + \Gcc{3.4, 4.0, 4.1, 4.2, 4.3, 4.4} \footnotemark[10] & Solaris 2.6+ / Linux 2.x / MacOS X \\ & \mswin\ 95/98/2000/XP/NT4\footnotemark[11]\\\hline \msvc{8.0, 9.0} (\textsc{Visual Studio 2005 and 2008}) \footnotemark[12] @@ -207,16 +207,16 @@ on univariate polynomials. It can be downloaded from \rspage. The \cgal\ library can be downloaded from \path'http://www.cgal.org/download.html'. -After you have downloaded the file \texttt{CGAL-3.5.tar.gz} containing the +After you have downloaded the file \texttt{CGAL-3.6.tar.gz} containing the \cgal\ sources, you have to unpack it. Under a Unix-like shell, use the command: \begin{verbatim} - tar xzf CGAL-3.5.tar.gz + tar xzf CGAL-3.6.tar.gz \end{verbatim} -When you are on Windows you may download and run the \texttt{CGAL-3.5-Setup.exe}. It is a +When you are on Windows you may download and run the \texttt{CGAL-3.6-Setup.exe}. It is a self extracting executable that installs the \cgal\ source, and that allows you to select and download some precompiled third party libraries. @@ -262,7 +262,7 @@ third-party libraries you want to use and where they can be found, and which \cgal\ libraries you want to build. Gathering all this information is called {\em configuration}. -For CGAL-3.5, the configuration is generated with \cmake, a +For CGAL-3.6, the configuration is generated with \cmake, a cross-platform build system. This manual explains only those features of \cmake\ which are needed in order to build \cgal. Please refer to the \cmake\ documentation at \cmakepage\ for further details. @@ -279,7 +279,7 @@ argument the root directory of \cgal. For example: {\ccTexHtml{\scriptsize}{} \begin{verbatim} - cd CGAL-3.5 + cd CGAL-3.6 cmake-gui . # Notice the dot to indicate the current directory. \end{verbatim} } @@ -307,7 +307,7 @@ Alternatively, you can run the command-line tool called {\ccTexHtml{\scriptsize}{} \begin{verbatim} - cd CGAL-3.5 + cd CGAL-3.6 cmake . # Notice the dot to indicate the current directory. \end{verbatim} } @@ -339,7 +339,7 @@ build files). For example, the following generates solution files for use in Vis {\ccTexHtml{\scriptsize}{} \begin{verbatim} - cd CGAL-3.5 + cd CGAL-3.6 cmake -G"Visual Studio 9 2008" . \end{verbatim} } @@ -351,7 +351,7 @@ specify the desired compiler in the call to \cmake{}, as in this example: {\ccTexHtml{\scriptsize}{} \begin{verbatim} - cd CGAL-3.5 + cd CGAL-3.6 cmake -DCMAKE_CXX_COMPILER:FILEPATH=g++-3.4 . \end{verbatim} } @@ -406,7 +406,7 @@ If you turn off the configuration of a library, you can still configure it manua {\ccTexHtml{\scriptsize}{} \begin{verbatim} - cd CGAL-3.5/src/CGALQt4 + cd CGAL-3.6/src/CGALQt4 cmake . # configures only the CGAL_Qt4 library \end{verbatim} } @@ -459,12 +459,12 @@ You can, for example, generate subdirectories \cgaldir{}\texttt{/cmake/platforms {\ccTexHtml{\scriptsize}{} \begin{verbatim} -mkdir CGAL-3.5/cmake/platforms/debug -cd CGAL-3.5/cmake/platforms/debug +mkdir CGAL-3.6/cmake/platforms/debug +cd CGAL-3.6/cmake/platforms/debug cmake -DCMAKE_BUILD_TYPE=Debug ../../.. -mkdir CGAL-3.5/cmake/platforms/release -cd CGAL-3.5/cmake/platforms/release +mkdir CGAL-3.6/cmake/platforms/release +cd CGAL-3.6/cmake/platforms/release cmake -DCMAKE_BUILD_TYPE=Release ../../.. \end{verbatim} } @@ -485,7 +485,7 @@ succeeding build step as follows: {\ccTexHtml{\scriptsize}{} \begin{verbatim} -cd CGAL-3.5 +cd CGAL-3.6 # build all the selected libraries at once @@ -583,7 +583,7 @@ installation in a {\sc Unix}-like environment: {\ccTexHtml{\scriptsize}{} \begin{verbatim} -cd CGAL-3.5 +cd CGAL-3.6 cmake . # configure make # compile @@ -605,7 +605,7 @@ variable explicitly {\em at the configuration time} and not when executing the i \end{ccAdvanced} The file \texttt{CGALCOnfig.cmake} is installed by default in -\texttt{\$CMAKE\_INSTALLED\_PREFIX/lib/CGAL-3.5}. +\texttt{\$CMAKE\_INSTALLED\_PREFIX/lib/CGAL-3.6}. \section{Configuring and Building Programs Using \cgal} @@ -624,8 +624,8 @@ to indicate the location of that config file in the \cmake\ variable {\ccTexHtml{\scriptsize}{} \begin{verbatim} -cd CGAL-3.5/examples/Straight_skeleton_2 -cmake -DCGAL_DIR=$HOME/CGAL-3.5 . +cd CGAL-3.6/examples/Straight_skeleton_2 +cmake -DCGAL_DIR=$HOME/CGAL-3.6 . make \end{verbatim} @@ -665,13 +665,13 @@ controlling variable right up front: {\ccTexHtml{\scriptsize}{} \begin{verbatim} -cd CGAL-3.5 +cd CGAL-3.6 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-g . -cd CGAL-3.5/examples/Straight_skeleton_2 +cd CGAL-3.6/examples/Straight_skeleton_2 -cmake -DCGAL_DIR=CGAL-3.5 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-O2 -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS=TRUE . +cmake -DCGAL_DIR=CGAL-3.6 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS=-O2 -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS=TRUE . \end{verbatim} } @@ -1174,7 +1174,7 @@ cmake -DWITH_examples=false -- uic executable: C:/Work/Downloaded/Libraries/qt-win-opensource-src-4.4.1/bin/uic.exe -- Configuring done -- Generating done --- Build files have been written to: C:/Work/Active/GeometryFactory/CGAL/Autotest/CGAL-3.5/cmake/platforms/a +-- Build files have been written to: C:/Work/Active/GeometryFactory/CGAL/Autotest/CGAL-3.6/cmake/platforms/a \end{verbatim} } From 48dc4054cc0656d27cec07c78566b106af574c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 1 Feb 2010 14:41:32 +0000 Subject: [PATCH 095/128] eliminated special treatment of pow() function on different compilers --- Number_types/include/CGAL/GMP/Gmpfi_type.h | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/Number_types/include/CGAL/GMP/Gmpfi_type.h b/Number_types/include/CGAL/GMP/Gmpfi_type.h index d8b0c259b3a..3fc4d6b7372 100644 --- a/Number_types/include/CGAL/GMP/Gmpfi_type.h +++ b/Number_types/include/CGAL/GMP/Gmpfi_type.h @@ -716,18 +716,10 @@ std::pair,long> Gmpfi::to_interval_exp()const{ double d_low=mpfr_get_d_2exp(e1,left_mpfr(),GMP_RNDD); double d_upp=mpfr_get_d_2exp(e2,right_mpfr(),GMP_RNDU); if(e1e2){ -#ifdef _MSC_VER - d_low=d_low/pow((double)2.,(double)((*e1)-(*e2))); -#else - d_low=d_low/pow(2,(*e1)-(*e2)); -#endif - *e2=*e1; + d_low=d_low/pow(2.,(double)((*e1)-(*e2))); + *e1=*e2; } return std::make_pair(std::make_pair(d_low,d_upp),*e1); } From 1ff56f3e41fb04bae191a74f293ae1e7bc5bfbc5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 14:43:44 +0000 Subject: [PATCH 096/128] Backport from trunk: | ------------------------------------------------------------------------ | r53944 | afabri | 2010-02-01 12:21:50 +0100 (Mon, 01 Feb 2010) | 1 line | Changed paths: | M /trunk/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex | | Add ccPkgLicense and \ccPkgDemo | ------------------------------------------------------------------------ | r53945 | afabri | 2010-02-01 12:28:33 +0100 (Mon, 01 Feb 2010) | 1 line | Changed paths: | M /trunk/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex | | Add ccPkgLicense | ------------------------------------------------------------------------ --- .../doc_tex/Convex_decomposition_3/PkgDescription.tex | 2 +- Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex b/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex index bee669587c7..3d1c50b5eb1 100644 --- a/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex +++ b/Convex_decomposition_3/doc_tex/Convex_decomposition_3/PkgDescription.tex @@ -13,6 +13,6 @@ interior. This bound is worst-case optimal. \ccRef[3D Nef Polyhedra]{Pkg:Nef3}, } \ccPkgIntroducedInCGAL{3.5} -\ccPkgLicense{} +\ccPkgLicense{\ccLicenseQPL} \ccPkgIllustration{Convex_decomposition_3/fig/teaser.png}{Convex_decomposition_3/fig/two_cubes2.png} \end{ccPkgDescription} diff --git a/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex b/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex index 3118d05e6b9..bfd6e276558 100644 --- a/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex +++ b/Minkowski_sum_3/doc_tex/Minkowski_sum_3/PkgDescription.tex @@ -17,6 +17,7 @@ polyhedron that moves along a polygonal line. \ccRef[Convex Decomposition of Polyhedra]{Pkg:ConvexDecomposition3} } \ccPkgIntroducedInCGAL{3.5} -\ccPkgLicense{} +\ccPkgLicense{\ccLicenseQPL} +\ccPkgDemo{Operations on Polyhedra}{polyhedron_3.zip} \ccPkgIllustration{Minkowski_sum_3/fig/teaser.png}{Minkowski_sum_3/fig/spoon_star.png} \end{ccPkgDescription} From a016befe0d918a94d0b3435a05a8ff3148cf8f70 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 14:46:07 +0000 Subject: [PATCH 097/128] Typo --- Installation/doc_tex/Installation/installation.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index f88af2ff935..b243fe90bc2 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -604,7 +604,7 @@ variable explicitly {\em at the configuration time} and not when executing the i \end{ccAdvanced} -The file \texttt{CGALCOnfig.cmake} is installed by default in +The file \texttt{CGALConfig.cmake} is installed by default in \texttt{\$CMAKE\_INSTALLED\_PREFIX/lib/CGAL-3.6}. From 845859d75977ce61ef79c6c8ae409f3ea026dbc2 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Feb 2010 15:09:48 +0000 Subject: [PATCH 098/128] Update the link to the installation manual. --- Installation/INSTALL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/INSTALL b/Installation/INSTALL index ecce937c75c..1f6426aceec 100644 --- a/Installation/INSTALL +++ b/Installation/INSTALL @@ -11,7 +11,7 @@ are for the most common use cases, and cover the command line tools. For further information, or in case of problems, please see the detailed installation instructions, which can be found in this distribution in the file ./doc_html/index.html or on the CGAL website -http://www.cgal.org/Manual/last/doc_html/installation_manual/contents.html +http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Installation/Chapter_main.html The documentation of CGAL is available in PDF and HTML formats. It is not bundled with the software but can be downloaded separately From 7947a8bfc1503ac3c8e74f5db10c2429ae00e479 Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Tue, 2 Feb 2010 15:34:59 +0000 Subject: [PATCH 099/128] Fixed warnings --- GraphicsView/demo/Polygon/Polygon_2.cpp | 2 +- .../test/Straight_skeleton_2/test_sls.cpp | 261 +++++++++--------- 2 files changed, 137 insertions(+), 126 deletions(-) diff --git a/GraphicsView/demo/Polygon/Polygon_2.cpp b/GraphicsView/demo/Polygon/Polygon_2.cpp index 5d28855bbd3..28cc2c7f519 100644 --- a/GraphicsView/demo/Polygon/Polygon_2.cpp +++ b/GraphicsView/demo/Polygon/Polygon_2.cpp @@ -317,7 +317,7 @@ MainWindow::on_actionOuterOffset_triggered() , def_offset , 0.0 , s - , def_offset + , 2 , &ok ); if ( ok ) diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp index 02b4ad0decc..df9b20398bd 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp @@ -64,7 +64,7 @@ double sTimeout = 0.0 ; //#define CGAL_STRAIGHT_SKELETON_ENABLE_INTRINSIC_TESTING -//#define CGAL_STRAIGHT_SKELETON_ENABLE_TRACE 4 +#define CGAL_STRAIGHT_SKELETON_ENABLE_TRACE 0 //#define CGAL_STRAIGHT_SKELETON_TRAITS_ENABLE_TRACE //#define CGAL_STRAIGHT_SKELETON_ENABLE_VALIDITY_TRACE //#define CGAL_POLYGON_OFFSET_ENABLE_TRACE 3 @@ -141,7 +141,7 @@ struct Zone ,ContouringTime(0.0) {} - IRegionPtr Input ; + IWeightedBoundariesPtr Input ; ISlsPtr FullSkeleton ; ISlsPtr PartialSkeleton ; @@ -149,7 +149,7 @@ struct Zone double FullSkeletonTime ; double PartialSkeletonTime ; - ORegion Contours ; + OBoundaries Contours ; double ContouringTime ; } ; @@ -218,9 +218,9 @@ void check_timeout() } } -IRegionPtr load_region( string file, int aShift, int& rStatus ) +IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) { - IRegionPtr rRegion ; + IWeightedBoundariesPtr rBoundaries ; rStatus = cOK ; @@ -231,22 +231,63 @@ IRegionPtr load_region( string file, int aShift, int& rStatus ) { CGAL::set_ascii_mode(in); - rRegion = IRegionPtr( new IRegion() ) ; - + rBoundaries = IWeightedBoundariesPtr( new IWeightedBoundaries() ) ; + + bool lIgnoreOpenPolygons = false ; + int ccb_count = 0 ; in >> ccb_count ; for ( int i = 0 ; i < ccb_count && in ; ++ i ) { IPolygonPtr lPoly( new IPolygon() ); - + IWeightsPtr lWeights( new IWeights() ); + + int v_count = 0 ; in >> v_count ; if ( sMaxVertexCount == 0 || ( v_count <= sMaxVertexCount ) ) { + std::string lInputFormatOrFirstNumber ; + + in >> lInputFormatOrFirstNumber ; + + bool lIsClosed = true ; + bool lIncludeWeights = false ; + bool lRecoverFirstNumber = true ; + + if( lInputFormatOrFirstNumber == "o" ) + { + lIsClosed = false ; + in >> lInputFormatOrFirstNumber ; + } + + if( lInputFormatOrFirstNumber == "w" ) + { + lIncludeWeights = true ; + lRecoverFirstNumber = false; + } + for ( int j = 0 ; j < v_count && in ; ++ j ) { - double x = 0.0, y = 0.0 ; - in >> x >> y ; + double x = 0.0, y = 0.0, w = 1.0 ; + + if ( lRecoverFirstNumber ) + { + lRecoverFirstNumber = false ; + x = std::atof( lInputFormatOrFirstNumber.c_str() ) ; + } + else + { + in >> x ; + } + + in >> y ; + + if ( lIncludeWeights ) + { + in >> w ; + } + if ( in ) { x += sDX ; @@ -255,27 +296,52 @@ IRegionPtr load_region( string file, int aShift, int& rStatus ) y *= sScale ; lPoly->push_back( IPoint(x,y) ) ; + lWeights->push_back( w ) ; } } + assert( lPoly->size() == lWeights->size() ); + if ( lPoly->size() >= 3 ) { bool lIsSimple = is_simple_2(lPoly->begin(),lPoly->end(),IK()); if ( sAcceptNonSimpleInput || ( !sAcceptNonSimpleInput && lIsSimple ) ) { - Orientation expected = ( i == 0 ? COUNTERCLOCKWISE : CLOCKWISE ) ; + if ( !lIsClosed && i != 0 ) + { + continue ; + } + + + if ( lIsClosed ) + { + // From now on we will only accept closed polygons + lIgnoreOpenPolygons = true; + /* + Orientation expected = ( i == 0 ? COUNTERCLOCKWISE : CLOCKWISE ) ; - double area = to_double(polygon_area_2(lPoly->begin(),lPoly->end(),IK())); + double area = to_double(polygon_area_2(lPoly->begin(),lPoly->end(),IK())); - Orientation orientation = area > 0 ? CGAL::COUNTERCLOCKWISE : area < 0 ? CGAL::CLOCKWISE : CGAL::COLLINEAR ; - - if ( aShift > 0 ) - std::rotate(lPoly->begin(),lPoly->begin()+aShift,lPoly->end()); + Orientation orientation = area > 0 ? CGAL::COUNTERCLOCKWISE : area < 0 ? CGAL::CLOCKWISE : CGAL::COLLINEAR ; + */ + if ( aShift > 0 && lIsClosed ) + { + std::rotate(lPoly->begin(),lPoly->begin()+aShift,lPoly->end()); + std::rotate(lWeights->begin(),lWeights->begin()+aShift,lWeights->end()); + } + + IWeightedPolygon lWeightedPolygon(lPoly,lWeights,lIsClosed); + rBoundaries->push_back( lWeightedPolygon ) ; + //rBoundaries->push_back( ( orientation == expected ) ? lWeightedPolygon : revert_weighted_polygon(lWeightedPolygon) ) ; + } + else if ( ! lIgnoreOpenPolygons ) + { + rBoundaries->push_back( IWeightedPolygon(lPoly,lWeights,lIsClosed) ); + // The algorithm can only process one open polygon, we ignore the rest of the file + break ; + } - if ( orientation == expected ) - rRegion->push_back(lPoly); - else rRegion->push_back( IPolygonPtr( new IPolygon(lPoly->rbegin(),lPoly->rend()) ) ) ; } else @@ -286,7 +352,7 @@ IRegionPtr load_region( string file, int aShift, int& rStatus ) else { rStatus = cDegenerateInput ; - rRegion = IRegionPtr(); + rBoundaries = IWeightedBoundariesPtr() ; break; } } @@ -312,22 +378,22 @@ IRegionPtr load_region( string file, int aShift, int& rStatus ) cerr << "Unhandled exception loading file." << endl ; } - if ( rRegion && rRegion->size() == 0 ) + if ( rBoundaries && rBoundaries->size() == 0 ) { rStatus = cDegenerateInput ; - rRegion = IRegionPtr(); + rBoundaries = IWeightedBoundariesPtr(); } - return rRegion ; + return rBoundaries ; } -void update_bbox ( IRegionPtr const& aRegion, boost::optional& rBBox ) +void update_bbox ( IWeightedBoundariesPtr const& aBoundaries, boost::optional& rBBox ) { - if ( aRegion ) + if ( aBoundaries ) { - for ( IRegion::const_iterator bit = aRegion->begin() ; bit != aRegion->end() ; ++ bit ) + for ( IWeightedBoundaries::const_iterator bit = aBoundaries->begin() ; bit != aBoundaries->end() ; ++ bit ) { - for( IPolygon::const_iterator vit = (*bit)->begin(); vit != (*bit)->end(); ++vit) + for( IPolygon::const_iterator vit = (*bit).polygon->begin(); vit != (*bit).polygon->end(); ++vit) { Bbox_2 lVBBox = vit->bbox() ; @@ -339,15 +405,15 @@ void update_bbox ( IRegionPtr const& aRegion, boost::optional& rBBox ) } } -template -void dump_region_to_eps( Region const& aRegion, const char* aType, double aScale, ostream& rOut ) +template +void dump_boundaries_to_eps( Boundaries const& aBoundaries, const char* aType, double aScale, ostream& rOut ) { - typedef typename Region::value_type PolygonPtr ; + typedef typename Boundaries::value_type PolygonPtr ; typedef typename PolygonPtr::element_type Polygon ; - typedef typename Region::const_iterator boundary_const_iterator ; + typedef typename Boundaries::const_iterator boundary_const_iterator ; typedef typename Polygon::const_iterator vertex_const_iterator ; - for ( boundary_const_iterator bit = aRegion.begin() ; bit != aRegion.end() ; ++ bit ) + for ( boundary_const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() ; ++ bit ) { vertex_const_iterator beg = (*bit)->begin(); vertex_const_iterator end = (*bit)->end (); @@ -445,10 +511,10 @@ void dump_to_eps ( TestCase const& aCase ) << std::endl; if ( aCase.Inner.Input ) - dump_region_to_eps(*aCase.Inner.Input,"border",lScale,lOut); + dump_boundaries_to_eps(*extract_polygons_view(*aCase.Inner.Input),"border",lScale,lOut); if ( aCase.Outer.Input ) - dump_region_to_eps(*aCase.Inner.Input,"border",lScale,lOut); + dump_boundaries_to_eps(*extract_polygons_view(*aCase.Inner.Input),"border",lScale,lOut); if ( aCase.Inner.PartialSkeleton ) dump_skeleton_to_eps(*aCase.Inner.PartialSkeleton,lScale,lOut); @@ -456,8 +522,8 @@ void dump_to_eps ( TestCase const& aCase ) if ( aCase.Outer.PartialSkeleton ) dump_skeleton_to_eps(*aCase.Outer.PartialSkeleton,lScale,lOut); - dump_region_to_eps(aCase.Inner.Contours,"cont",lScale,lOut); - dump_region_to_eps(aCase.Outer.Contours,"cont",lScale,lOut); + dump_boundaries_to_eps(aCase.Inner.Contours,"cont",lScale,lOut); + dump_boundaries_to_eps(aCase.Outer.Contours,"cont",lScale,lOut); lOut << "grestore\nshowpage" << std::endl; } @@ -473,11 +539,11 @@ void dump_polygon_to_dxf( Polygon const& aPolygon, Color aColor, string aLayer, } -template -void dump_region_to_dxf( Region const& aRegion, Color aColor, string aBaseLayer, DxfStream& rDXF ) +template +void dump_boundaries_to_dxf( Boundaries const& aBoundaries, Color aColor, string aBaseLayer, DxfStream& rDXF ) { int lN = 0 ; - for ( typename Region::const_iterator bit = aRegion.begin() ; bit != aRegion.end() ; ++ bit ) + for ( typename Boundaries::const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() ; ++ bit ) { ostringstream ss ; ss << aBaseLayer << "_" << lN ; string lLayer = ss.str(); @@ -545,7 +611,7 @@ void dump_to_dxf ( TestCase const& aCase ) { if ( sVerbose ) cout << " Dumping input region. " << endl ; - dump_region_to_dxf(*aCase.Inner.Input,BLUE,"Input",lDxf); + dump_boundaries_to_dxf(*extract_polygons_view(*aCase.Inner.Input),BLUE,"Input",lDxf); } if ( aCase.Inner.PartialSkeleton ) @@ -562,75 +628,23 @@ void dump_to_dxf ( TestCase const& aCase ) dump_skeleton_to_dxf(*aCase.Outer.PartialSkeleton,YELLOW,GREEN,PURPLE,GRAY,"OuterSkeleton",lDxf); } - dump_region_to_dxf(aCase.Inner.Contours,GRAY,"InnerOffset",lDxf); - dump_region_to_dxf(aCase.Outer.Contours,GRAY,"OuterOffset",lDxf); + dump_boundaries_to_dxf(aCase.Inner.Contours,GRAY,"InnerOffset",lDxf); + dump_boundaries_to_dxf(aCase.Outer.Contours,GRAY,"OuterOffset",lDxf); } } -IPolygonPtr create_outer_frame ( IPolygon const& aOuter ) -{ - IPolygonPtr rFrame ; - - try - { - Bbox_2 lBbox = bbox_2(aOuter.begin(),aOuter.end()); - - double w = lBbox.xmax() - lBbox.xmin(); - double h = lBbox.ymax() - lBbox.ymin(); - double s = std::sqrt(w*w+h*h); - - IFT lOffset = s * 0.3 ; - - boost::optional lOptMargin = compute_outer_frame_margin(aOuter.begin(),aOuter.end(),lOffset) ; - - if ( lOptMargin ) - { - double lMargin = to_double(*lOptMargin); - - double flx = lBbox.xmin() - lMargin ; - double fhx = lBbox.xmax() + lMargin ; - double fly = lBbox.ymin() - lMargin ; - double fhy = lBbox.ymax() + lMargin ; - - rFrame = IPolygonPtr( new IPolygon() ) ; - - rFrame->push_back( IPoint(IFT(flx),IFT(fly)) ); - rFrame->push_back( IPoint(IFT(fhx),IFT(fly)) ); - rFrame->push_back( IPoint(IFT(fhx),IFT(fhy)) ); - rFrame->push_back( IPoint(IFT(flx),IFT(fhy)) ); - } - else - { - if ( sVerbose ) - cout << " Unable to calculate outer margin for offset " << lOffset << endl ; - } - - } - catch ( exception const& x ) - { - if ( sVerbose ) - cout << " Failed calculating outer frame margin: std::exception caught: " << x.what() << endl ; - } - catch ( ... ) - { - if ( sVerbose ) - cout << " Failed calculating outer frame margin: Unhandled exception." << endl ; - } - - return rFrame ; -} - -template -bool is_point_inside_region( Region const& aRegion, Point const& aP ) +/* +template +bool is_point_inside_region( Boundaries const& aBoundaries, Point const& aP ) { bool rR = true ; - typedef typename Region::value_type PolygonPtr ; + typedef typename Boundaries::value_type PolygonPtr ; typedef typename PolygonPtr::element_type Polygon ; - for ( typename Region::const_iterator bit = aRegion.begin() ; bit != aRegion.end() && rR ; ++ bit ) + for ( typename Boundaries::const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() && rR ; ++ bit ) { Polygon const& lPoly = **bit ; if ( oriented_side_2(lPoly.begin(),lPoly.end(),aP) == ON_NEGATIVE_SIDE ) @@ -639,8 +653,9 @@ bool is_point_inside_region( Region const& aRegion, Point const& aP ) return rR ; } +*/ -bool is_skeleton_valid( IRegion const& aRegion, ISls const& aSkeleton ) +bool is_skeleton_valid( IWeightedBoundaries const& aBoundaries, ISls const& aSkeleton ) { bool rValid = aSkeleton.is_valid() ; @@ -658,12 +673,14 @@ bool is_skeleton_valid( IRegion const& aRegion, ISls const& aSkeleton ) Vertex_const_handle v = vit ; if ( v->is_skeleton() && ! v->has_infinite_time() ) { - if ( !is_point_inside_region(aRegion,v->point()) ) + /* This check does not longer holds with weighted skeletons + if ( !is_point_inside_region(aBoundaries,v->point()) ) { rValid = false ; if ( sVerbose ) cout << " Failed: skeleton node misplaced.\n" ; } + */ } } } @@ -694,8 +711,8 @@ int create_skeleton ( Zone& rZone, boost::optional const& aMaxTime = boost: ISlsBuilder builder(aMaxTime, lTraits, lWatchdog) ; - for( IRegion::const_iterator bit = rZone.Input->begin(), ebit = rZone.Input->end() ; bit != ebit ; ++ bit ) - builder.enter_contour((*bit)->begin(),(*bit)->end()); + for( IWeightedBoundaries::const_iterator bit = rZone.Input->begin(), ebit = rZone.Input->end() ; bit != ebit ; ++ bit ) + builder.enter_contour((*bit).polygon->begin(),(*bit).polygon->end(),(*bit).weights->begin(),(*bit).weights->end()); lSls = builder.construct_skeleton(false) ; @@ -844,7 +861,7 @@ int test_zone ( Zone& rZone ) if ( sVerbose ) cout << " Building offset contours at " << lOffset << endl ; - ORegion lContours ; + OBoundaries lContours ; Real_timer t2 ; t2.start(); @@ -871,7 +888,7 @@ int test_zone ( Zone& rZone ) if ( sVerbose ) { cout << " " << lContours.size() << " contours built." << endl ; - for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { OPolygonPtr lBdry = *bit ; @@ -889,7 +906,7 @@ int test_zone ( Zone& rZone ) if ( sDumpOffsetPolygons) { - for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { OPolygonPtr lBdry = *bit ; cout << " " ; @@ -901,7 +918,7 @@ int test_zone ( Zone& rZone ) if ( sReportNonSimpleOffset ) { - for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { if ( !is_simple_2((*bit)->begin(),(*bit)->end(),OK()) ) { @@ -951,13 +968,13 @@ int test( TestCase& rCase, int aShift ) int lStatus = cLoadException ; - IRegionPtr lInnerRegion = load_region(rCase.Filename,aShift,lStatus); + IWeightedBoundariesPtr lInnerBoundaries = load_boundaries(rCase.Filename,aShift,lStatus); if ( lStatus == cOK ) { - if ( lInnerRegion ) + if ( lInnerBoundaries ) { - rCase.Inner.Input = lInnerRegion ; + rCase.Inner.Input = lInnerBoundaries ; if ( !sNoOp ) { @@ -974,19 +991,13 @@ int test( TestCase& rCase, int aShift ) { if ( sVerbose ) cout << " Testing outer zone" << endl ; - - IPolygonPtr lOuterPoly = lInnerRegion->front(); - IPolygonPtr lFrame = create_outer_frame(*lOuterPoly); - if ( lFrame ) - { - rCase.Outer.Input = IRegionPtr ( new IRegion ) ; - rCase.Outer.Input->push_back(lFrame); - rCase.Outer.Input->push_back( IPolygonPtr( new IPolygon(lOuterPoly->rbegin(),lOuterPoly->rend()) ) ) ; - - int lOuterStatus = test_zone( rCase.Outer ) ; - if ( lStatus == cOK ) - lStatus = lOuterStatus ; - } + + rCase.Outer.Input = IWeightedBoundariesPtr ( new IWeightedBoundaries ) ; + rCase.Outer.Input->push_back( invert_weighted_polygon(lInnerBoundaries->front()) ) ; + + int lOuterStatus = test_zone( rCase.Outer ) ; + if ( lStatus == cOK ) + lStatus = lOuterStatus ; } } @@ -1214,12 +1225,12 @@ int main( int argc, char const* argv[] ) if ( soptr != "*" ) { - sOffsetCount = atoi(soptr.c_str()) ; + sOffsetCount = strtoul(soptr.c_str(),NULL,10) ; cout << "Repeared Offset set at " << sOffset << " " << sOffsetCount << " times." << endl ; } else { - sOffsetCount = -1 ; + sOffsetCount = std::numeric_limits::max() ; cout << "Repeared Offset set at " << sOffset << " until full depth" << endl ; } } From b9e5916b43ee9ac89e9ef9602c76995454957a39 Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Tue, 2 Feb 2010 15:50:18 +0000 Subject: [PATCH 100/128] CORRECT fix for the *branch* code --- .../test/Straight_skeleton_2/test_sls.cpp | 257 +++++++++--------- 1 file changed, 123 insertions(+), 134 deletions(-) diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp index df9b20398bd..558a5ee96d9 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp @@ -64,7 +64,7 @@ double sTimeout = 0.0 ; //#define CGAL_STRAIGHT_SKELETON_ENABLE_INTRINSIC_TESTING -#define CGAL_STRAIGHT_SKELETON_ENABLE_TRACE 0 +//#define CGAL_STRAIGHT_SKELETON_ENABLE_TRACE 4 //#define CGAL_STRAIGHT_SKELETON_TRAITS_ENABLE_TRACE //#define CGAL_STRAIGHT_SKELETON_ENABLE_VALIDITY_TRACE //#define CGAL_POLYGON_OFFSET_ENABLE_TRACE 3 @@ -141,7 +141,7 @@ struct Zone ,ContouringTime(0.0) {} - IWeightedBoundariesPtr Input ; + IRegionPtr Input ; ISlsPtr FullSkeleton ; ISlsPtr PartialSkeleton ; @@ -149,7 +149,7 @@ struct Zone double FullSkeletonTime ; double PartialSkeletonTime ; - OBoundaries Contours ; + ORegion Contours ; double ContouringTime ; } ; @@ -218,9 +218,9 @@ void check_timeout() } } -IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) +IRegionPtr load_region( string file, int aShift, int& rStatus ) { - IWeightedBoundariesPtr rBoundaries ; + IRegionPtr rRegion ; rStatus = cOK ; @@ -231,63 +231,22 @@ IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) { CGAL::set_ascii_mode(in); - rBoundaries = IWeightedBoundariesPtr( new IWeightedBoundaries() ) ; - - bool lIgnoreOpenPolygons = false ; - + rRegion = IRegionPtr( new IRegion() ) ; + int ccb_count = 0 ; in >> ccb_count ; for ( int i = 0 ; i < ccb_count && in ; ++ i ) { IPolygonPtr lPoly( new IPolygon() ); - IWeightsPtr lWeights( new IWeights() ); - - + int v_count = 0 ; in >> v_count ; if ( sMaxVertexCount == 0 || ( v_count <= sMaxVertexCount ) ) { - std::string lInputFormatOrFirstNumber ; - - in >> lInputFormatOrFirstNumber ; - - bool lIsClosed = true ; - bool lIncludeWeights = false ; - bool lRecoverFirstNumber = true ; - - if( lInputFormatOrFirstNumber == "o" ) - { - lIsClosed = false ; - in >> lInputFormatOrFirstNumber ; - } - - if( lInputFormatOrFirstNumber == "w" ) - { - lIncludeWeights = true ; - lRecoverFirstNumber = false; - } - for ( int j = 0 ; j < v_count && in ; ++ j ) { - double x = 0.0, y = 0.0, w = 1.0 ; - - if ( lRecoverFirstNumber ) - { - lRecoverFirstNumber = false ; - x = std::atof( lInputFormatOrFirstNumber.c_str() ) ; - } - else - { - in >> x ; - } - - in >> y ; - - if ( lIncludeWeights ) - { - in >> w ; - } - + double x = 0.0, y = 0.0 ; + in >> x >> y ; if ( in ) { x += sDX ; @@ -296,52 +255,27 @@ IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) y *= sScale ; lPoly->push_back( IPoint(x,y) ) ; - lWeights->push_back( w ) ; } } - assert( lPoly->size() == lWeights->size() ); - if ( lPoly->size() >= 3 ) { bool lIsSimple = is_simple_2(lPoly->begin(),lPoly->end(),IK()); if ( sAcceptNonSimpleInput || ( !sAcceptNonSimpleInput && lIsSimple ) ) { - if ( !lIsClosed && i != 0 ) - { - continue ; - } - - - if ( lIsClosed ) - { - // From now on we will only accept closed polygons - lIgnoreOpenPolygons = true; - /* - Orientation expected = ( i == 0 ? COUNTERCLOCKWISE : CLOCKWISE ) ; + Orientation expected = ( i == 0 ? COUNTERCLOCKWISE : CLOCKWISE ) ; - double area = to_double(polygon_area_2(lPoly->begin(),lPoly->end(),IK())); + double area = to_double(polygon_area_2(lPoly->begin(),lPoly->end(),IK())); - Orientation orientation = area > 0 ? CGAL::COUNTERCLOCKWISE : area < 0 ? CGAL::CLOCKWISE : CGAL::COLLINEAR ; - */ - if ( aShift > 0 && lIsClosed ) - { - std::rotate(lPoly->begin(),lPoly->begin()+aShift,lPoly->end()); - std::rotate(lWeights->begin(),lWeights->begin()+aShift,lWeights->end()); - } - - IWeightedPolygon lWeightedPolygon(lPoly,lWeights,lIsClosed); - rBoundaries->push_back( lWeightedPolygon ) ; - //rBoundaries->push_back( ( orientation == expected ) ? lWeightedPolygon : revert_weighted_polygon(lWeightedPolygon) ) ; - } - else if ( ! lIgnoreOpenPolygons ) - { - rBoundaries->push_back( IWeightedPolygon(lPoly,lWeights,lIsClosed) ); - // The algorithm can only process one open polygon, we ignore the rest of the file - break ; - } + Orientation orientation = area > 0 ? CGAL::COUNTERCLOCKWISE : area < 0 ? CGAL::CLOCKWISE : CGAL::COLLINEAR ; + + if ( aShift > 0 ) + std::rotate(lPoly->begin(),lPoly->begin()+aShift,lPoly->end()); + if ( orientation == expected ) + rRegion->push_back(lPoly); + else rRegion->push_back( IPolygonPtr( new IPolygon(lPoly->rbegin(),lPoly->rend()) ) ) ; } else @@ -352,7 +286,7 @@ IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) else { rStatus = cDegenerateInput ; - rBoundaries = IWeightedBoundariesPtr() ; + rRegion = IRegionPtr(); break; } } @@ -378,22 +312,22 @@ IWeightedBoundariesPtr load_boundaries( string file, int aShift, int& rStatus ) cerr << "Unhandled exception loading file." << endl ; } - if ( rBoundaries && rBoundaries->size() == 0 ) + if ( rRegion && rRegion->size() == 0 ) { rStatus = cDegenerateInput ; - rBoundaries = IWeightedBoundariesPtr(); + rRegion = IRegionPtr(); } - return rBoundaries ; + return rRegion ; } -void update_bbox ( IWeightedBoundariesPtr const& aBoundaries, boost::optional& rBBox ) +void update_bbox ( IRegionPtr const& aRegion, boost::optional& rBBox ) { - if ( aBoundaries ) + if ( aRegion ) { - for ( IWeightedBoundaries::const_iterator bit = aBoundaries->begin() ; bit != aBoundaries->end() ; ++ bit ) + for ( IRegion::const_iterator bit = aRegion->begin() ; bit != aRegion->end() ; ++ bit ) { - for( IPolygon::const_iterator vit = (*bit).polygon->begin(); vit != (*bit).polygon->end(); ++vit) + for( IPolygon::const_iterator vit = (*bit)->begin(); vit != (*bit)->end(); ++vit) { Bbox_2 lVBBox = vit->bbox() ; @@ -405,15 +339,15 @@ void update_bbox ( IWeightedBoundariesPtr const& aBoundaries, boost::optional -void dump_boundaries_to_eps( Boundaries const& aBoundaries, const char* aType, double aScale, ostream& rOut ) +template +void dump_region_to_eps( Region const& aRegion, const char* aType, double aScale, ostream& rOut ) { - typedef typename Boundaries::value_type PolygonPtr ; + typedef typename Region::value_type PolygonPtr ; typedef typename PolygonPtr::element_type Polygon ; - typedef typename Boundaries::const_iterator boundary_const_iterator ; + typedef typename Region::const_iterator boundary_const_iterator ; typedef typename Polygon::const_iterator vertex_const_iterator ; - for ( boundary_const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() ; ++ bit ) + for ( boundary_const_iterator bit = aRegion.begin() ; bit != aRegion.end() ; ++ bit ) { vertex_const_iterator beg = (*bit)->begin(); vertex_const_iterator end = (*bit)->end (); @@ -511,10 +445,10 @@ void dump_to_eps ( TestCase const& aCase ) << std::endl; if ( aCase.Inner.Input ) - dump_boundaries_to_eps(*extract_polygons_view(*aCase.Inner.Input),"border",lScale,lOut); + dump_region_to_eps(*aCase.Inner.Input,"border",lScale,lOut); if ( aCase.Outer.Input ) - dump_boundaries_to_eps(*extract_polygons_view(*aCase.Inner.Input),"border",lScale,lOut); + dump_region_to_eps(*aCase.Inner.Input,"border",lScale,lOut); if ( aCase.Inner.PartialSkeleton ) dump_skeleton_to_eps(*aCase.Inner.PartialSkeleton,lScale,lOut); @@ -522,8 +456,8 @@ void dump_to_eps ( TestCase const& aCase ) if ( aCase.Outer.PartialSkeleton ) dump_skeleton_to_eps(*aCase.Outer.PartialSkeleton,lScale,lOut); - dump_boundaries_to_eps(aCase.Inner.Contours,"cont",lScale,lOut); - dump_boundaries_to_eps(aCase.Outer.Contours,"cont",lScale,lOut); + dump_region_to_eps(aCase.Inner.Contours,"cont",lScale,lOut); + dump_region_to_eps(aCase.Outer.Contours,"cont",lScale,lOut); lOut << "grestore\nshowpage" << std::endl; } @@ -539,11 +473,11 @@ void dump_polygon_to_dxf( Polygon const& aPolygon, Color aColor, string aLayer, } -template -void dump_boundaries_to_dxf( Boundaries const& aBoundaries, Color aColor, string aBaseLayer, DxfStream& rDXF ) +template +void dump_region_to_dxf( Region const& aRegion, Color aColor, string aBaseLayer, DxfStream& rDXF ) { int lN = 0 ; - for ( typename Boundaries::const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() ; ++ bit ) + for ( typename Region::const_iterator bit = aRegion.begin() ; bit != aRegion.end() ; ++ bit ) { ostringstream ss ; ss << aBaseLayer << "_" << lN ; string lLayer = ss.str(); @@ -611,7 +545,7 @@ void dump_to_dxf ( TestCase const& aCase ) { if ( sVerbose ) cout << " Dumping input region. " << endl ; - dump_boundaries_to_dxf(*extract_polygons_view(*aCase.Inner.Input),BLUE,"Input",lDxf); + dump_region_to_dxf(*aCase.Inner.Input,BLUE,"Input",lDxf); } if ( aCase.Inner.PartialSkeleton ) @@ -628,23 +562,75 @@ void dump_to_dxf ( TestCase const& aCase ) dump_skeleton_to_dxf(*aCase.Outer.PartialSkeleton,YELLOW,GREEN,PURPLE,GRAY,"OuterSkeleton",lDxf); } - dump_boundaries_to_dxf(aCase.Inner.Contours,GRAY,"InnerOffset",lDxf); - dump_boundaries_to_dxf(aCase.Outer.Contours,GRAY,"OuterOffset",lDxf); + dump_region_to_dxf(aCase.Inner.Contours,GRAY,"InnerOffset",lDxf); + dump_region_to_dxf(aCase.Outer.Contours,GRAY,"OuterOffset",lDxf); } } -/* -template -bool is_point_inside_region( Boundaries const& aBoundaries, Point const& aP ) +IPolygonPtr create_outer_frame ( IPolygon const& aOuter ) +{ + IPolygonPtr rFrame ; + + try + { + Bbox_2 lBbox = bbox_2(aOuter.begin(),aOuter.end()); + + double w = lBbox.xmax() - lBbox.xmin(); + double h = lBbox.ymax() - lBbox.ymin(); + double s = std::sqrt(w*w+h*h); + + IFT lOffset = s * 0.3 ; + + boost::optional lOptMargin = compute_outer_frame_margin(aOuter.begin(),aOuter.end(),lOffset) ; + + if ( lOptMargin ) + { + double lMargin = to_double(*lOptMargin); + + double flx = lBbox.xmin() - lMargin ; + double fhx = lBbox.xmax() + lMargin ; + double fly = lBbox.ymin() - lMargin ; + double fhy = lBbox.ymax() + lMargin ; + + rFrame = IPolygonPtr( new IPolygon() ) ; + + rFrame->push_back( IPoint(IFT(flx),IFT(fly)) ); + rFrame->push_back( IPoint(IFT(fhx),IFT(fly)) ); + rFrame->push_back( IPoint(IFT(fhx),IFT(fhy)) ); + rFrame->push_back( IPoint(IFT(flx),IFT(fhy)) ); + } + else + { + if ( sVerbose ) + cout << " Unable to calculate outer margin for offset " << lOffset << endl ; + } + + } + catch ( exception const& x ) + { + if ( sVerbose ) + cout << " Failed calculating outer frame margin: std::exception caught: " << x.what() << endl ; + } + catch ( ... ) + { + if ( sVerbose ) + cout << " Failed calculating outer frame margin: Unhandled exception." << endl ; + } + + return rFrame ; +} + +template +bool is_point_inside_region( Region const& aRegion, Point const& aP ) { bool rR = true ; - typedef typename Boundaries::value_type PolygonPtr ; + typedef typename Region::value_type PolygonPtr ; typedef typename PolygonPtr::element_type Polygon ; - for ( typename Boundaries::const_iterator bit = aBoundaries.begin() ; bit != aBoundaries.end() && rR ; ++ bit ) + for ( typename Region::const_iterator bit = aRegion.begin() ; bit != aRegion.end() && rR ; ++ bit ) { Polygon const& lPoly = **bit ; if ( oriented_side_2(lPoly.begin(),lPoly.end(),aP) == ON_NEGATIVE_SIDE ) @@ -653,9 +639,8 @@ bool is_point_inside_region( Boundaries const& aBoundaries, Point const& aP ) return rR ; } -*/ -bool is_skeleton_valid( IWeightedBoundaries const& aBoundaries, ISls const& aSkeleton ) +bool is_skeleton_valid( IRegion const& aRegion, ISls const& aSkeleton ) { bool rValid = aSkeleton.is_valid() ; @@ -673,14 +658,12 @@ bool is_skeleton_valid( IWeightedBoundaries const& aBoundaries, ISls const& aSke Vertex_const_handle v = vit ; if ( v->is_skeleton() && ! v->has_infinite_time() ) { - /* This check does not longer holds with weighted skeletons - if ( !is_point_inside_region(aBoundaries,v->point()) ) + if ( !is_point_inside_region(aRegion,v->point()) ) { rValid = false ; if ( sVerbose ) cout << " Failed: skeleton node misplaced.\n" ; } - */ } } } @@ -711,8 +694,8 @@ int create_skeleton ( Zone& rZone, boost::optional const& aMaxTime = boost: ISlsBuilder builder(aMaxTime, lTraits, lWatchdog) ; - for( IWeightedBoundaries::const_iterator bit = rZone.Input->begin(), ebit = rZone.Input->end() ; bit != ebit ; ++ bit ) - builder.enter_contour((*bit).polygon->begin(),(*bit).polygon->end(),(*bit).weights->begin(),(*bit).weights->end()); + for( IRegion::const_iterator bit = rZone.Input->begin(), ebit = rZone.Input->end() ; bit != ebit ; ++ bit ) + builder.enter_contour((*bit)->begin(),(*bit)->end()); lSls = builder.construct_skeleton(false) ; @@ -861,7 +844,7 @@ int test_zone ( Zone& rZone ) if ( sVerbose ) cout << " Building offset contours at " << lOffset << endl ; - OBoundaries lContours ; + ORegion lContours ; Real_timer t2 ; t2.start(); @@ -888,7 +871,7 @@ int test_zone ( Zone& rZone ) if ( sVerbose ) { cout << " " << lContours.size() << " contours built." << endl ; - for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { OPolygonPtr lBdry = *bit ; @@ -906,7 +889,7 @@ int test_zone ( Zone& rZone ) if ( sDumpOffsetPolygons) { - for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { OPolygonPtr lBdry = *bit ; cout << " " ; @@ -918,7 +901,7 @@ int test_zone ( Zone& rZone ) if ( sReportNonSimpleOffset ) { - for ( OBoundaries::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) + for ( ORegion::const_iterator bit = lContours.begin() ; bit != lContours.end() ; ++ bit ) { if ( !is_simple_2((*bit)->begin(),(*bit)->end(),OK()) ) { @@ -968,13 +951,13 @@ int test( TestCase& rCase, int aShift ) int lStatus = cLoadException ; - IWeightedBoundariesPtr lInnerBoundaries = load_boundaries(rCase.Filename,aShift,lStatus); + IRegionPtr lInnerRegion = load_region(rCase.Filename,aShift,lStatus); if ( lStatus == cOK ) { - if ( lInnerBoundaries ) + if ( lInnerRegion ) { - rCase.Inner.Input = lInnerBoundaries ; + rCase.Inner.Input = lInnerRegion ; if ( !sNoOp ) { @@ -991,13 +974,19 @@ int test( TestCase& rCase, int aShift ) { if ( sVerbose ) cout << " Testing outer zone" << endl ; - - rCase.Outer.Input = IWeightedBoundariesPtr ( new IWeightedBoundaries ) ; - rCase.Outer.Input->push_back( invert_weighted_polygon(lInnerBoundaries->front()) ) ; - - int lOuterStatus = test_zone( rCase.Outer ) ; - if ( lStatus == cOK ) - lStatus = lOuterStatus ; + + IPolygonPtr lOuterPoly = lInnerRegion->front(); + IPolygonPtr lFrame = create_outer_frame(*lOuterPoly); + if ( lFrame ) + { + rCase.Outer.Input = IRegionPtr ( new IRegion ) ; + rCase.Outer.Input->push_back(lFrame); + rCase.Outer.Input->push_back( IPolygonPtr( new IPolygon(lOuterPoly->rbegin(),lOuterPoly->rend()) ) ) ; + + int lOuterStatus = test_zone( rCase.Outer ) ; + if ( lStatus == cOK ) + lStatus = lOuterStatus ; + } } } From 9355d378d6f33f1fa17d23c25fcef46163cfce14 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 2 Feb 2010 20:26:25 +0000 Subject: [PATCH 101/128] Backport from trunk:` | ------------------------------------------------------------------------ | r53983 | afabri | 2010-02-02 14:26:07 +0100 (Tue, 02 Feb 2010) | 1 line | Changed paths: | M /trunk/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h | | Use the traits for comparing points, not == | ------------------------------------------------------------------------ | --- .../include/CGAL/Triangulation_line_face_circulator_2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h b/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h index 2e0137bc06e..084d349cfb3 100644 --- a/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h +++ b/Triangulation_2/include/CGAL/Triangulation_line_face_circulator_2.h @@ -335,7 +335,7 @@ Triangulation_line_face_circulator_2(const Point& pp, // Test whether p lies on a vertex for(j = 0; j < 3; j++){ - if(pos->vertex(j)->point() == p){ + if(_tr->xy_equal(pos->vertex(j)->point(), p)){ *this = Line_face_circulator( pos->vertex(j), t, q); if( (!is_empty()) && _tr->is_infinite(pos )) --(*this); return; From 3f3bc31e5b3b4aa8466da93f5621f2f6427b12cb Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 3 Feb 2010 13:12:26 +0000 Subject: [PATCH 102/128] Backport from trunk: | ------------------------------------------------------------------------ | r53978 | afabri | 2010-02-02 09:32:59 +0100 (Tue, 02 Feb 2010) | 1 line | Changed paths: | M /trunk/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp | | Add virtual destructor in the testsuite to turn a 'W' to a 'Y' | ------------------------------------------------------------------------ | r53988 | afabri | 2010-02-02 15:11:06 +0100 (Tue, 02 Feb 2010) | 1 line | Changed paths: | M /trunk/Polyhedron/demo/Polyhedron/Messages_interface.h | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_plugin_interface.h | M /trunk/Polyhedron/demo/Polyhedron/Scene_draw_interface.h | | Define virtual destructors | ------------------------------------------------------------------------ --- Polyhedron/demo/Polyhedron/Messages_interface.h | 1 + .../demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h | 2 ++ .../demo/Polyhedron/Polyhedron_demo_plugin_interface.h | 1 + Polyhedron/demo/Polyhedron/Scene_draw_interface.h | 1 + .../test_edge_collapse_Polyhedron_3.cpp | 5 ++++- 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Messages_interface.h b/Polyhedron/demo/Polyhedron/Messages_interface.h index 2f88376615d..25f7fa08031 100644 --- a/Polyhedron/demo/Polyhedron/Messages_interface.h +++ b/Polyhedron/demo/Polyhedron/Messages_interface.h @@ -6,6 +6,7 @@ class Messages_interface { public: + virtual ~Messages_interface() {} virtual void warning(QString) = 0; virtual void error(QString) = 0; virtual void information(QString) = 0; diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h b/Polyhedron/demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h index 80d2fdd2fbd..4f9a6e38583 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_io_plugin_interface.h @@ -9,6 +9,8 @@ class Scene_item; class Polyhedron_demo_io_plugin_interface { public: + virtual ~Polyhedron_demo_io_plugin_interface() {} + virtual QStringList nameFilters() const = 0; virtual bool canLoad() const = 0; diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_plugin_interface.h b/Polyhedron/demo/Polyhedron/Polyhedron_demo_plugin_interface.h index afdd1dca5a0..6c23fb815ca 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_plugin_interface.h +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_plugin_interface.h @@ -13,6 +13,7 @@ class Messages_interface; class Polyhedron_demo_plugin_interface { public: + virtual ~Polyhedron_demo_plugin_interface() {} virtual void init(QMainWindow*, Scene_interface*) {}; virtual void init(QMainWindow* mw, Scene_interface* sc, Messages_interface*) { init(mw, sc); diff --git a/Polyhedron/demo/Polyhedron/Scene_draw_interface.h b/Polyhedron/demo/Polyhedron/Scene_draw_interface.h index 7e6e60f8296..394ea7ebfd7 100644 --- a/Polyhedron/demo/Polyhedron/Scene_draw_interface.h +++ b/Polyhedron/demo/Polyhedron/Scene_draw_interface.h @@ -3,6 +3,7 @@ class Scene_draw_interface { public: + virtual ~Scene_draw_interface(){} virtual void initializeGL() = 0; virtual void draw() = 0; virtual void drawWithNames() = 0; diff --git a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp index 1ab447ce46e..e72db9965fa 100644 --- a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp +++ b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp @@ -288,7 +288,10 @@ public : #endif mStep = 0 ; } - + + virtual ~Visitor() + { + } virtual void OnStarted( Surface& ) const { From fe8e88bea50d6d3dd5c5e985a09d014202e87cd6 Mon Sep 17 00:00:00 2001 From: Fernando Cacciola Date: Wed, 3 Feb 2010 13:46:31 +0000 Subject: [PATCH 103/128] Added bug fix from recent user report (Feb-2010) --- .gitattributes | 1 + .../Straight_skeleton_aux.h | 72 ++++++++++++------- .../Straight_skeleton_builder_2_impl.h | 41 ++++++----- .../CGAL/Straight_skeleton_builder_2.h | 8 +-- .../test/Straight_skeleton_2/all.rsp | 1 + .../data/nearly_collinear.poly | 20 ++++++ 6 files changed, 96 insertions(+), 47 deletions(-) create mode 100644 Straight_skeleton_2/test/Straight_skeleton_2/data/nearly_collinear.poly diff --git a/.gitattributes b/.gitattributes index 461bb019e51..d387af63ec5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3302,6 +3302,7 @@ Straight_skeleton_2/test/Straight_skeleton_2/data/multinode0.poly -text svneol=u Straight_skeleton_2/test/Straight_skeleton_2/data/multinode1.poly -text svneol=unset#application/octet-stream Straight_skeleton_2/test/Straight_skeleton_2/data/near_degenerate_0.poly -text Straight_skeleton_2/test/Straight_skeleton_2/data/near_degenerate_1.poly -text svneol=unset#application/octet-stream +Straight_skeleton_2/test/Straight_skeleton_2/data/nearly_collinear.poly -text Straight_skeleton_2/test/Straight_skeleton_2/data/parallels0.poly -text svneol=unset#application/octet-stream Straight_skeleton_2/test/Straight_skeleton_2/data/parallels0_b.poly -text svneol=unset#application/octet-stream Straight_skeleton_2/test/Straight_skeleton_2/data/parallels_1.poly -text diff --git a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h index 1432932301c..8f8f455df79 100644 --- a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h +++ b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h @@ -48,7 +48,6 @@ template struct Has_inexact_constructions >::type type ; } ; - // // This record encapsulates the defining contour halfedges for a node (both contour and skeleton) // @@ -66,8 +65,8 @@ public: // Contour nodes (input polygon vertices) have only 2 defining contour edges Triedge ( Handle aE0, Handle aE1 ) { - mE[0] = aE0 ; - mE[1] = aE1 ; + mE[0] = aE0 ; + mE[1] = aE1 ; // mE[2] gets default constructed, i.e., "null". } @@ -85,30 +84,20 @@ public: Handle e1() const { return e(1); } Handle e2() const { return e(2); } - bool is_valid() const - { - return handle_assigned(e0()) - && handle_assigned(e1()) - && e0() != e1() && e1() != e2() ; - } + bool is_valid() const { return handle_assigned(e0()) && handle_assigned(e1()); } bool is_contour () const { return !handle_assigned(e2()) ; } bool is_skeleton() const { return handle_assigned(e2()) ; } - // returns 1 if aE is one of the halfedges stored in this triedge, 0 otherwise. - int contains ( Handle aE ) const - { - return aE == e0() || aE == e1() || aE == e2() ? 1 : 0 ; - } + bool is_contour_terminal() const { return e0() == e1() ; } - // Returns the number of common halfedges in the two triedges x and y - static int CountInCommon( Self const& x, Self const& y ) - { - return x.contains(y.e0()) + x.contains(y.e1()) + x.contains(y.e2()) ; - } + bool is_skeleton_terminal() const { return e0() == e1() || e1() == e2() ; } // Returns true if the triedges store the same 3 halfedges (in any order) - friend bool operator == ( Self const& x, Self const& y ) { return CountInCommon(x,y) == 3 ; } + friend bool operator == ( Self const& x, Self const& y ) + { + return x.number_of_unique_edges() == y.number_of_unique_edges() && CountInCommon(x,y) == x.number_of_unique_edges() ; + } friend bool operator != ( Self const& x, Self const& y ) { return !(x==y) ; } @@ -117,13 +106,6 @@ public: return Self(x.e0(), x.e1(), ( x.e0() == y.e0() || x.e1() == y.e0() ) ? y.e1() : y.e0() ) ; } - static void insert_handle_id( std::ostream& ss, Handle aH ) - { - if ( handle_assigned(aH) ) - ss << aH->id() ; - else ss << "#" ; - } - friend std::ostream& operator<< ( std::ostream& ss, Self const& t ) { ss << "{E" ; @@ -138,10 +120,46 @@ public: private: + static void insert_handle_id( std::ostream& ss, Handle aH ) + { + if ( handle_assigned(aH) ) + ss << aH->id() ; + else ss << "#" ; + } + + // returns 1 if aE is one of the halfedges stored in this triedge, 0 otherwise. + int contains ( Handle aE ) const + { + return aE == e0() || aE == e1() || aE == e2() ? 1 : 0 ; + } + + int number_of_unique_edges() const + { + return is_contour() ? ( is_contour_terminal() ? 1 : 2 ) : ( is_skeleton_terminal() ? 2 : 3 ) ; + } + + // Returns the number of common halfedges in the two triedges x and y + static int CountInCommon( Self const& x, Self const& y ) + { + Handle lE[3]; + int lC = 1 ; + + lE[0] = y.e0(); + + if ( y.e0() != y.e1() ) + lE[lC++] = y.e1(); + + if ( y.e0() != y.e2() && y.e1() != y.e2() ) + lE[lC++] = y.e2(); + + return x.contains(lE[0]) + x.contains(lE[1]) + ( lC > 2 ? x.contains(lE[2]) : 0 ) ; + } + Handle mE[3]; } ; + } // namespace CGAL_SS_i enum Trisegment_collinearity diff --git a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_builder_2_impl.h b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_builder_2_impl.h index dbdb321f4da..feca5426149 100644 --- a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_builder_2_impl.h +++ b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_builder_2_impl.h @@ -88,13 +88,13 @@ Straight_skeleton_builder_2::PopEventFromPQ() // template typename Straight_skeleton_builder_2::EventPtr -Straight_skeleton_builder_2::FindEdgeEvent( Vertex_handle aLNode, Vertex_handle aRNode ) +Straight_skeleton_builder_2::FindEdgeEvent( Vertex_handle aLNode, Vertex_handle aRNode, Triedge const& aPrevEventTriedge ) { EventPtr rResult ; Triedge lTriedge = GetVertexTriedge(aLNode) & GetVertexTriedge(aRNode) ; - if ( lTriedge.is_valid() ) + if ( lTriedge.is_valid() && lTriedge != aPrevEventTriedge ) { Trisegment_2_ptr lTrisegment = CreateTrisegment(lTriedge,aLNode,aRNode); @@ -208,7 +208,7 @@ void Straight_skeleton_builder_2::CollectSplitEvent( Vertex_handle aNod // Tests the reflex wavefront emerging from 'aNode' against the other contour edges in search for split events. template -void Straight_skeleton_builder_2::CollectSplitEvents( Vertex_handle aNode ) +void Straight_skeleton_builder_2::CollectSplitEvents( Vertex_handle aNode, Triedge const& aPrevEventTriedge ) { // lLBorder and lRBorder are the consecutive contour edges forming the reflex wavefront. Triedge const& lTriedge = GetVertexTriedge(aNode); @@ -226,7 +226,14 @@ void Straight_skeleton_builder_2::CollectSplitEvents( Vertex_handle aNo Halfedge_handle lOpposite = *i ; if ( lOpposite != lLBorder && lOpposite != lRBorder ) - CollectSplitEvent(aNode, Triedge(lLBorder, lRBorder, lOpposite) ) ; + { + Triedge lEventTriedge(lLBorder, lRBorder, lOpposite); + + if ( lEventTriedge != aPrevEventTriedge ) + { + CollectSplitEvent(aNode, lEventTriedge ) ; + } + } } } @@ -234,7 +241,7 @@ void Straight_skeleton_builder_2::CollectSplitEvents( Vertex_handle aNo // Finds and enques all the new potential events produced by the vertex wavefront emerging from 'aNode' (which can be a reflex wavefront). // This new events are simply stored in the priority queue, not processed. template -void Straight_skeleton_builder_2::CollectNewEvents( Vertex_handle aNode ) +void Straight_skeleton_builder_2::CollectNewEvents( Vertex_handle aNode, Triedge const& aPrevEventTriedge ) { // A Straight Skeleton is the trace of the 'grassfire propagation' that corresponds to the inward move of all the vertices // of a polygon along their angular bisectors. @@ -280,10 +287,10 @@ void Straight_skeleton_builder_2::CollectNewEvents( Vertex_handle aNode ) ; if ( IsReflex(aNode) ) - CollectSplitEvents(aNode) ; + CollectSplitEvents(aNode, aPrevEventTriedge) ; - EventPtr lLEdgeEvent = FindEdgeEvent( lPrev , aNode ) ; - EventPtr lREdgeEvent = FindEdgeEvent( aNode , lNext ) ; + EventPtr lLEdgeEvent = FindEdgeEvent( lPrev , aNode, aPrevEventTriedge ) ; + EventPtr lREdgeEvent = FindEdgeEvent( aNode , lNext, aPrevEventTriedge ) ; bool lAcceptL = !!lLEdgeEvent ; bool lAcceptR = !!lREdgeEvent ; @@ -415,7 +422,7 @@ bool Straight_skeleton_builder_2::AreBisectorsCoincident ( Halfedge_con } template -void Straight_skeleton_builder_2::UpdatePQ( Vertex_handle aNode ) +void Straight_skeleton_builder_2::UpdatePQ( Vertex_handle aNode, Triedge const& aPrevEventTriedge ) { Vertex_handle lPrev = GetPrevInLAV(aNode) ; Vertex_handle lNext = GetNextInLAV(aNode) ; @@ -432,17 +439,19 @@ void Straight_skeleton_builder_2::UpdatePQ( Vertex_handle aNode ) if ( AreBisectorsCoincident(lOBisector_C,lOBisector_N) ) HandleSimultaneousEdgeEvent( aNode, lNext ) ; else - CollectNewEvents(aNode); + CollectNewEvents(aNode,aPrevEventTriedge); } template void Straight_skeleton_builder_2::CreateInitialEvents() { + Triedge const cNull_triedge ; + CGAL_STSKEL_BUILDER_TRACE(0, "Creating initial events..."); for ( Vertex_iterator v = mSSkel->vertices_begin(); v != mSSkel->vertices_end(); ++ v ) { if ( ! v->has_infinite_time() ) { - UpdatePQ(v); + UpdatePQ(v,cNull_triedge); mVisitor.on_initial_events_collected(v,IsReflex(v),IsDegenerate(v)) ; } } @@ -902,7 +911,7 @@ void Straight_skeleton_builder_2::HandleEdgeEvent( EventPtr aEvent ) SetupNewNode(lNewNode) ; - UpdatePQ(lNewNode); + UpdatePQ(lNewNode, lEvent.triedge()); mVisitor.on_edge_event_processed(lLSeed,lRSeed,lNewNode) ; } @@ -1048,8 +1057,8 @@ void Straight_skeleton_builder_2::HandleSplitEvent( EventPtr aEvent, Ve SetupNewNode(lNewNode_L) ; SetupNewNode(lNewNode_R) ; - UpdatePQ(lNewNode_L); - UpdatePQ(lNewNode_R); + UpdatePQ(lNewNode_L, lEvent.triedge()); + UpdatePQ(lNewNode_R, lEvent.triedge()); mVisitor.on_split_event_processed(lSeed,lNewNode_L,lNewNode_R) ; } @@ -1248,8 +1257,8 @@ void Straight_skeleton_builder_2::HandlePseudoSplitEvent( EventPtr aEve SetupNewNode(lNewNode_L) ; SetupNewNode(lNewNode_R) ; - UpdatePQ(lNewNode_L); - UpdatePQ(lNewNode_R); + UpdatePQ(lNewNode_L, lEvent.triedge()); + UpdatePQ(lNewNode_R, lEvent.triedge()); mVisitor.on_pseudo_split_event_processed(lLSeed,lRSeed,lNewNode_L,lNewNode_R) ; } diff --git a/Straight_skeleton_2/include/CGAL/Straight_skeleton_builder_2.h b/Straight_skeleton_2/include/CGAL/Straight_skeleton_builder_2.h index fb0bfffad00..9207e2295ba 100644 --- a/Straight_skeleton_2/include/CGAL/Straight_skeleton_builder_2.h +++ b/Straight_skeleton_2/include/CGAL/Straight_skeleton_builder_2.h @@ -677,14 +677,14 @@ private : void CollectSplitEvent( Vertex_handle aNode, Triedge const& aTriedge ) ; - void CollectSplitEvents( Vertex_handle aNode ) ; + void CollectSplitEvents( Vertex_handle aNode, Triedge const& aPrevEventTriedge ) ; - EventPtr FindEdgeEvent( Vertex_handle aLNode, Vertex_handle aRNode ) ; + EventPtr FindEdgeEvent( Vertex_handle aLNode, Vertex_handle aRNode, Triedge const& aPrevEventTriedge ) ; void HandleSimultaneousEdgeEvent( Vertex_handle aA, Vertex_handle aB ) ; - void CollectNewEvents( Vertex_handle aNode ) ; - void UpdatePQ( Vertex_handle aV ) ; + void CollectNewEvents( Vertex_handle aNode, Triedge const& aPrevEventTriedge ) ; + void UpdatePQ( Vertex_handle aV, Triedge const& aPrevEventTriedge ) ; void CreateInitialEvents(); void CreateContourBisectors(); void InitPhase(); diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/all.rsp b/Straight_skeleton_2/test/Straight_skeleton_2/all.rsp index e4d25de563b..575908ee5c0 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/all.rsp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/all.rsp @@ -60,6 +60,7 @@ multinode1.poly multinode0.poly poly6.poly near_degenerate_0.poly +nearly_collinear.poly double_edge_2.poly pseudo_split_5.poly parallels_1.poly diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/data/nearly_collinear.poly b/Straight_skeleton_2/test/Straight_skeleton_2/data/nearly_collinear.poly new file mode 100644 index 00000000000..6d0e44181a1 --- /dev/null +++ b/Straight_skeleton_2/test/Straight_skeleton_2/data/nearly_collinear.poly @@ -0,0 +1,20 @@ +1 +18 +-45.454186699317802 59.237049408412233 +-42.816220506946685 55.799184933816875 +-41.395777172593 53.94802713980399 +-38.230217741747651 49.822589770289568 +-36.52568574052323 47.601200417474111 +-32.283990009183114 50.435410893709047 +-29.999999999999979 51.96152422706632 +-25.42465386223849 54.21783524741339 +-22.96100594190538 55.432771950677207 +-24.950959790203846 60.23694551973589 +-26.022473400826101 62.823808210767496 +-27.680768274408155 66.82728618498308 +-28.573696283260027 68.983005094176079 +-31.890286030424143 76.989961042607234 +-38.600793699140993 73.680704879431531 +-41.666666666666643 72.168783648703226 +-47.887820405965485 68.011941616891974 +-50.730119084060057 66.112778357602934 From fb5a1bbed9f82b0666f1934d1a0cbef14aa742a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 8 Feb 2010 11:04:59 +0000 Subject: [PATCH 104/128] removed Elias from authors --- Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h index 6dc5a2f5d24..c094822336c 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h @@ -1,4 +1,4 @@ -// Copyright (c) 2007 Inria Lorraine (France). All rights reserved. +// Copyright (c) 2007-2010 Inria Lorraine (France). All rights reserved. // // This file is part of CGAL (www.cgal.org); you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License as @@ -14,7 +14,9 @@ // $URL$ // $Id$ // -// Author: Elias Tsigaridas +// Author: Luis Peñaranda +// +// (the first version of this file was written by Elias Tsigaridas) #ifndef RS_PARSER_1_H #define RS_PARSER_1_H From adbcc7921661398e2161c375a1b5549762a48ece Mon Sep 17 00:00:00 2001 From: Manuel Caroli Date: Tue, 9 Feb 2010 11:06:20 +0000 Subject: [PATCH 105/128] replace version number by "last" in links to the online manual this is a merge from the trunk rev 54041 --- .../Periodic_3_triangulation_3/documentation/introduction.html | 2 +- .../demo/Periodic_3_triangulation_3/resources/about.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/documentation/introduction.html b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/documentation/introduction.html index 4ddd3f2b587..81f9a40aa83 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/documentation/introduction.html +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/documentation/introduction.html @@ -16,7 +16,7 @@

    For more information see the - CGAL Periodic Triangulation + CGAL Periodic Triangulation package manual.

    diff --git a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/resources/about.html b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/resources/about.html index 88ae73e88aa..295127f4c6b 100644 --- a/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/resources/about.html +++ b/Periodic_3_triangulation_3/demo/Periodic_3_triangulation_3/resources/about.html @@ -6,7 +6,7 @@

    This application illustrates the 3D Periodic Delaunay Triangulation of CGAL.

    See also the package manual:
    - + 3D Periodic Triangulations

    From c0400252004126d86821912e623a08f7e0923f9a Mon Sep 17 00:00:00 2001 From: Mariette Yvinec Date: Wed, 10 Feb 2010 14:08:17 +0000 Subject: [PATCH 106/128] added Pierre and Jane as authors. Fixed approved by RM. --- Mesh_3/doc_tex/Mesh_3/main.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mesh_3/doc_tex/Mesh_3/main.tex b/Mesh_3/doc_tex/Mesh_3/main.tex index ee0fb29b384..2fd42272136 100644 --- a/Mesh_3/doc_tex/Mesh_3/main.tex +++ b/Mesh_3/doc_tex/Mesh_3/main.tex @@ -1,6 +1,6 @@ \ccUserChapter{3D Mesh Generation\label{Mesh_3}} \label{user_chapter_Mesh_3} -\ccChapterAuthor{Laurent Rineau, St\'ephane Tayeb, Mariette Yvinec} +\ccChapterAuthor{Pierre Alliez, Laurent Rineau, St\'ephane Tayeb, Jane Tournois, Mariette Yvinec} \input{Mesh_3/PkgDescription} From 0ee64798251f58673d7c66dbaad44c29bbfaf6bc Mon Sep 17 00:00:00 2001 From: Mariette Yvinec Date: Wed, 10 Feb 2010 14:17:49 +0000 Subject: [PATCH 107/128] added Pierre and Jane as authors in Mesh_3. Fixed approved by RM --- Manual/doc_tex/Manual/manual-3.6.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/doc_tex/Manual/manual-3.6.bib b/Manual/doc_tex/Manual/manual-3.6.bib index 64e17ff5cda..b6548758c29 100644 --- a/Manual/doc_tex/Manual/manual-3.6.bib +++ b/Manual/doc_tex/Manual/manual-3.6.bib @@ -481,7 +481,7 @@ } @incollection{cgal:rty-m3-10 -, author = "Laurent Rineau and St\'ephane Tayeb and Mariette Yvinec" +, author = "Pierre Alliez and Laurent Rineau and St\'ephane Tayeb and Jane Turnois and Mariette Yvinec" , title = "{3D} Mesh Generation" , publisher = "{CGAL Editorial Board}" , edition = "{3.6}" From b5c2af30a00a0e9f9dcbc68699a5e63d53de489b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 19 Feb 2010 12:52:46 +0000 Subject: [PATCH 108/128] s|Qt/qglobal.h|QtCore/qglobal.h| --- Mesh_3/demo/Mesh_3/Scene_c3t3_item.cpp | 2 +- Mesh_3/demo/Mesh_3/Scene_c3t3_item.h | 2 +- Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp | 2 +- .../Polyhedron/Polyhedron_demo_remeshing_plugin_cgal_code.cpp | 2 +- Polyhedron/demo/Polyhedron/Polyhedron_demo_trivial_plugin.cpp | 2 +- Polyhedron/demo/Polyhedron/Scene_c2t3_item.h | 2 +- Polyhedron/demo/Polyhedron/Scene_item_config.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Mesh_3/demo/Mesh_3/Scene_c3t3_item.cpp b/Mesh_3/demo/Mesh_3/Scene_c3t3_item.cpp index 013f6974c50..8942ac927af 100644 --- a/Mesh_3/demo/Mesh_3/Scene_c3t3_item.cpp +++ b/Mesh_3/demo/Mesh_3/Scene_c3t3_item.cpp @@ -7,7 +7,7 @@ #include "Scene_item_with_display_list.h" #include "Scene_interface.h" -#include +#include #include #include #include diff --git a/Mesh_3/demo/Mesh_3/Scene_c3t3_item.h b/Mesh_3/demo/Mesh_3/Scene_c3t3_item.h index e1176c12a69..1ced292ff2c 100644 --- a/Mesh_3/demo/Mesh_3/Scene_c3t3_item.h +++ b/Mesh_3/demo/Mesh_3/Scene_c3t3_item.h @@ -9,7 +9,7 @@ #include #include -#include +#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp index 5c1d766369f..95b9a6cd094 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp @@ -1,4 +1,4 @@ -#include +#include #include "Messages_interface.h" #include "Scene_item_with_display_list.h" diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_remeshing_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_remeshing_plugin_cgal_code.cpp index 40d4ccf1a5b..3985513e9ea 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_remeshing_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_remeshing_plugin_cgal_code.cpp @@ -31,7 +31,7 @@ #include "Scene_item.h" -#include +#include #include #include #include diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_trivial_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_trivial_plugin.cpp index be78e012601..47ac1d61880 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_trivial_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_trivial_plugin.cpp @@ -1,4 +1,4 @@ -#include +#include #include "Scene_item.h" #include "Scene_interface.h" diff --git a/Polyhedron/demo/Polyhedron/Scene_c2t3_item.h b/Polyhedron/demo/Polyhedron/Scene_c2t3_item.h index de5dd3072d3..30979b6276c 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c2t3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_c2t3_item.h @@ -7,7 +7,7 @@ #include #include -#include +#include #include class SCENE_C2T3_ITEM_EXPORT Scene_c2t3_item : public Scene_item diff --git a/Polyhedron/demo/Polyhedron/Scene_item_config.h b/Polyhedron/demo/Polyhedron/Scene_item_config.h index 98bef96b70e..ac71781315e 100644 --- a/Polyhedron/demo/Polyhedron/Scene_item_config.h +++ b/Polyhedron/demo/Polyhedron/Scene_item_config.h @@ -1,7 +1,7 @@ #ifndef SCENE_ITEM_CONFIG_H #define SCENE_ITEM_CONFIG_H -#include +#include #ifdef scene_item_EXPORTS # define SCENE_ITEM_EXPORT Q_DECL_EXPORT From 1387163453492c77ef9a3f75645bd76923e2b60a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 19 Feb 2010 16:43:53 +0000 Subject: [PATCH 109/128] - Add a section about RS in the third party libraries of Preliminaries. - Use macros, to help the cross-referencing of RS. --- .../doc_tex/Algebraic_kernel_d/PkgDescription.tex | 3 ++- .../doc_tex/Algebraic_kernel_d/akrs1.tex | 4 ++-- Installation/doc_tex/Installation/installation.tex | 10 +++++----- Manual/doc_tex/Manual/cgal_manual.sty | 2 ++ Manual/doc_tex/Preliminaries/thirdparty.tex | 9 +++++++++ 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex index 7baf6ef2970..8683af8d7e7 100644 --- a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex +++ b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/PkgDescription.tex @@ -9,7 +9,8 @@ So far the package only provides models for the univariate kernel. Nevertheless, it already defines concepts for the bivariate kernel, since this settles the interface for upcoming implementations.} +\ccPkgDependsOn{Some models depend on \ccThirdPartyRS.} \ccPkgIntroducedInCGAL{3.6} -\ccPkgLicense{LGPL} +\ccPkgLicense{\ccLicenseLGPL} \ccPkgIllustration{Algebraic_kernel_d/Algebraic_kernel_d.png}{Algebraic_kernel_d/Algebraic_kernel_d.png} \end{ccPkgDescription} diff --git a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/akrs1.tex b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/akrs1.tex index 1a14a7be134..6211705c606 100644 --- a/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/akrs1.tex +++ b/Algebraic_kernel_d/doc_tex/Algebraic_kernel_d/akrs1.tex @@ -5,9 +5,9 @@ \subsubsection{Algebraic kernels based on RS} The package offers two univariate algebraic kernels that are based on -the library RS \cite{cgal:r-rs}, namely \ccc{CGAL::Algebraic_kernel_d_1_RS_Gmpz} +the library \rs{} \cite{cgal:r-rs}, namely \ccc{CGAL::Algebraic_kernel_d_1_RS_Gmpz} and \ccc{CGAL::Algebraic_kernel_d_1_RS_Gmpq}. As the names indicate, -the kernels are based on the library RS \cite{cgal:r-rs} and support univariate +the kernels are based on the library \rs{} \cite{cgal:r-rs} and support univariate polynomials over \ccc{CGAL::Gmpz} or \ccc{CGAL::Gmpq}, respectively. In general we encourage to use \ccc{CGAL::Algebraic_kernel_d_1_RS_Gmpz} diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index b243fe90bc2..ad9a52d0665 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -1042,16 +1042,16 @@ variable. You do not need to provide this, if the BLAS|LAPACK libraries do not n \index{cgal!general-config-cmake-vars-dep-rs}\index{cgal configuration cmake variables - dependencies - rs} \subsubsection{RS library} -As said before, only the CGAL's univariate algebraic kernel depends on the -library RS. As the algebraic kernel is not compiled as a part of the CGAL +As said before, only the \cgal{} univariate algebraic kernel depends on the +library \rs. As the algebraic kernel is not compiled as a part of the \cgal{} library, this library is not detected nor configured at installation time. -Cmake will try to find RS in the standard header and library +\cmake{} will try to find \rs{} in the standard header and library directories. When it is not automatically detected, the locations of the headers and library files must be specified using environment variables. -RS needs GMP 4.2 or later and MPFI 1.3.4 or later. The variables related -to the latter library may also need to be defined. +\rs{} needs \gmp~4.2 or later and \mpfi~1.3.4 or later. The variables +related to the latter library may also need to be defined. {\ccTexHtml{\small}{} \renewcommand{\arraystretch}{1.3} diff --git a/Manual/doc_tex/Manual/cgal_manual.sty b/Manual/doc_tex/Manual/cgal_manual.sty index 6b0225dbac0..3399ca072f4 100644 --- a/Manual/doc_tex/Manual/cgal_manual.sty +++ b/Manual/doc_tex/Manual/cgal_manual.sty @@ -237,6 +237,8 @@ \newcommand{\ccThirdPartyLapack}{\ccThirdParty{Lapack}} \newcommand{\ccThirdPartyBlas}{\ccThirdParty{Blas}} \newcommand{\ccThirdPartyAtlas}{\ccThirdParty{Atlas}} +\newcommand{\ccThirdPartyRS}{\ccThirdParty{RS}} + % --------- plain names of thirdparty stuff ------- diff --git a/Manual/doc_tex/Preliminaries/thirdparty.tex b/Manual/doc_tex/Preliminaries/thirdparty.tex index 853a699b8c8..ebd582cf5db 100644 --- a/Manual/doc_tex/Preliminaries/thirdparty.tex +++ b/Manual/doc_tex/Preliminaries/thirdparty.tex @@ -64,6 +64,15 @@ the {\sc Mpfr} library is optional, and you must install it when you use {\sc Gmp}. You can download {\sc Mpfr} from \path'http://www.mpfr.org' or from the download section of \path'http://www.cgal.org'. +\subsection{RS \label{thirdparty:RS}} + +\rs{} stands for Real Solutions and is devoted to the study of the real +roots of polynomial systems with a finite number of complex roots +(including univariate polynomials). \rs is used only by one model of the +\ccRef[Algebraic Kernel]{Pkg:AlgebraicKerneld}. + +\rs{} is freely distributable for non-commercial use. You can download it +from \rspage{}. \subsection{Leda \label{thirdparty:Leda}} From 1fb55f8594bf7eb199d9229601f80a3deb673e91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tayeb?= Date: Fri, 19 Feb 2010 16:47:25 +0000 Subject: [PATCH 110/128] Bug fix: do not use infinite vertice to compute bbox. --- .../demo/Polyhedron/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp index 6b7703d27da..21ff4b4fe44 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_mesh_3_plugin_cgal_code.cpp @@ -95,7 +95,7 @@ public: if(isEmpty()) return Bbox(); else { - CGAL::Bbox_3 result = c3t3().triangulation().vertices_begin()->point().bbox(); + CGAL::Bbox_3 result = c3t3().triangulation().finite_vertices_begin()->point().bbox(); for(Tr::Finite_vertices_iterator vit = ++c3t3().triangulation().finite_vertices_begin(), end = c3t3().triangulation().finite_vertices_end(); From 43dba4f0d27402462064801eddc984c61e40239b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Sat, 20 Feb 2010 16:22:19 +0000 Subject: [PATCH 111/128] Move the LaTeX commands \foobarpage to cgal_manual.sty, so that they can be used outside of the installation manual. --- .../doc_tex/Installation/installation.tex | 20 +----------------- Manual/doc_tex/Manual/cgal_manual.sty | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Installation/doc_tex/Installation/installation.tex b/Installation/doc_tex/Installation/installation.tex index ad9a52d0665..49655d87bec 100644 --- a/Installation/doc_tex/Installation/installation.tex +++ b/Installation/doc_tex/Installation/installation.tex @@ -49,25 +49,7 @@ \newcommand{\cgalinstconfdir}{\cgaldir\texttt{/config/install}\index{directories!config/install@\texttt{config/install}}} %% macros for WWW pages -\newcommand{\cgalhomepage}{\path'http://www.cgal.org'} -\newcommand{\gmppage}{\path'http://gmplib.org/'} -\newcommand{\mpfrpage}{\path'http://www.mpfr.org/'} -\newcommand{\mpfipage}{\path'http://gforge.inria.fr/projects/mpfi/'} -\newcommand{\boostpage}{\path'http://www.boost.org/'} -\newcommand{\corepage}{\path'http://www.cs.nyu.edu/exact/'} -\newcommand{\ledapage}{\path'http://www.algorithmic-solutions.com/leda/index.html'} -\newcommand{\qtpage}{\path'http://qt.nokia.com'} -\newcommand{\blaspage}{\path'http://www.netlib.org/blas/'} -\newcommand{\atlaspage}{\path'http://math-atlas.sourceforge.net/'} -\newcommand{\lapackpage}{\path'http://www.netlib.org/lapack/'} -\newcommand{\taucspage}{\path'http://www.tau.ac.il/~stoledo/taucs/'} -\newcommand{\rspage}{\path'http://www.loria.fr/equipes/vegas/rs/'} -\newcommand{\xpage}{\path'http://www.x.org/'} -\newcommand{\zlibpage}{\path'http://www.zlib.net/'} -\newcommand{\cmakepage}{\path'http://www.cmake.org/'} -\newcommand{\cpackpage}{\path'http://www.cmake.org/cmake/help/cpack2.6docs.html'} -\newcommand{\nsispage}{\path'http://nsis.sourceforge.net/Main\_Page'} -\newcommand{\fhs}{\path'http://www.pathname.com/fhs/pub/fhs-2.3.html'} +% Now in cgal_manual.sty -- Laurent Rineau, 2010/02/20 %% write index in typewriter type. (c) Susan :-) \newcommand{\TTindex}[1]{\index{#1@{\tt #1}}} diff --git a/Manual/doc_tex/Manual/cgal_manual.sty b/Manual/doc_tex/Manual/cgal_manual.sty index 3399ca072f4..7a097d29495 100644 --- a/Manual/doc_tex/Manual/cgal_manual.sty +++ b/Manual/doc_tex/Manual/cgal_manual.sty @@ -259,6 +259,27 @@ \newcommand{\lapack}{\textsc{lapack}} +% macros for WWW pages +\newcommand{\cgalhomepage}{\path'http://www.cgal.org'} +\newcommand{\gmppage}{\path'http://gmplib.org/'} +\newcommand{\mpfrpage}{\path'http://www.mpfr.org/'} +\newcommand{\mpfipage}{\path'http://gforge.inria.fr/projects/mpfi/'} +\newcommand{\boostpage}{\path'http://www.boost.org/'} +\newcommand{\corepage}{\path'http://www.cs.nyu.edu/exact/'} +\newcommand{\ledapage}{\path'http://www.algorithmic-solutions.com/leda/index.html'} +\newcommand{\qtpage}{\path'http://qt.nokia.com'} +\newcommand{\blaspage}{\path'http://www.netlib.org/blas/'} +\newcommand{\atlaspage}{\path'http://math-atlas.sourceforge.net/'} +\newcommand{\lapackpage}{\path'http://www.netlib.org/lapack/'} +\newcommand{\taucspage}{\path'http://www.tau.ac.il/~stoledo/taucs/'} +\newcommand{\rspage}{\path'http://www.loria.fr/equipes/vegas/rs/'} +\newcommand{\xpage}{\path'http://www.x.org/'} +\newcommand{\zlibpage}{\path'http://www.zlib.net/'} +\newcommand{\cmakepage}{\path'http://www.cmake.org/'} +\newcommand{\cpackpage}{\path'http://www.cmake.org/cmake/help/cpack2.6docs.html'} +\newcommand{\nsispage}{\path'http://nsis.sourceforge.net/Main\_Page'} +\newcommand{\fhs}{\path'http://www.pathname.com/fhs/pub/fhs-2.3.html'} + % Implement the two columns layout for the HTML converted part % ------------------------------------------------------------ From 5dc1fdd8ccf1dc6b1d93b54944dea88176a88ae3 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 22 Feb 2010 13:28:24 +0000 Subject: [PATCH 112/128] Typo (\rs eat a space) --- Manual/doc_tex/Preliminaries/thirdparty.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Manual/doc_tex/Preliminaries/thirdparty.tex b/Manual/doc_tex/Preliminaries/thirdparty.tex index ebd582cf5db..16c6d70fa13 100644 --- a/Manual/doc_tex/Preliminaries/thirdparty.tex +++ b/Manual/doc_tex/Preliminaries/thirdparty.tex @@ -68,7 +68,7 @@ or from the download section of \path'http://www.cgal.org'. \rs{} stands for Real Solutions and is devoted to the study of the real roots of polynomial systems with a finite number of complex roots -(including univariate polynomials). \rs is used only by one model of the +(including univariate polynomials). \rs{} is used only by one model of the \ccRef[Algebraic Kernel]{Pkg:AlgebraicKerneld}. \rs{} is freely distributable for non-commercial use. You can download it From 9a96f94f75721a2a993a62cc66323c9ecf085dab Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 22 Feb 2010 15:32:27 +0000 Subject: [PATCH 113/128] Add _Boost_COMPILER_DUMPVERSION is a macro and not a function, there is no need for PARENT_SCOPE! --- Installation/cmake/modules/FindBoost.cmake | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Installation/cmake/modules/FindBoost.cmake b/Installation/cmake/modules/FindBoost.cmake index cf29c31376d..3a83d8fdd69 100644 --- a/Installation/cmake/modules/FindBoost.cmake +++ b/Installation/cmake/modules/FindBoost.cmake @@ -254,11 +254,7 @@ MACRO(_Boost_COMPILER_DUMPVERSION _OUTPUT_VERSION) STRING(REGEX REPLACE "([0-9])\\.([0-9])(\\.[0-9])?" "\\1\\2" _boost_COMPILER_VERSION ${_boost_COMPILER_VERSION}) - IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) - SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION}) - ELSE (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) - SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION} PARENT_SCOPE) - ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 2.6) + SET(${_OUTPUT_VERSION} ${_boost_COMPILER_VERSION}) ENDMACRO() # From ddf3a8d24a430714d491980ea72af4b7d7a7ebc4 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 23 Feb 2010 14:14:42 +0000 Subject: [PATCH 114/128] Minor fix of the layout: add a eol. --- Installation/CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/Installation/CHANGES b/Installation/CHANGES index 602d9591288..0c43eb74a12 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -12,6 +12,7 @@ CGAL 3.6 offers the following improvements and new functionality : 2 Geometry Kernels 2.1 2D and 3D Geometry Kernel + - Add new do_intersect() and intersection() overloads: + do_intersect(Bbox_3, Bbox_3/Line_3/Ray_3/Segment_3) + intersection(Triangle_3, Line_3/Ray_3/Segment_3) From 3b31dce7bdf1ce101d5de031777edb5a9cb7b37e Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 23 Feb 2010 14:16:53 +0000 Subject: [PATCH 115/128] Add Naama Mayer as author. --- Installation/AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/Installation/AUTHORS b/Installation/AUTHORS index 4cd6c3a1c71..4c74338eb1b 100644 --- a/Installation/AUTHORS +++ b/Installation/AUTHORS @@ -61,6 +61,7 @@ Eugene Lipovetsky Sébastien Loriot Pedro Machado Bastien Manuel +Naama Mayer Abdelkrim Mebarki Kurt Mehlhorn Naceur Meskini From 812a36d9ed0eedf43caee093674a3c7c69a2127d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 23 Feb 2010 14:18:49 +0000 Subject: [PATCH 116/128] Add more versions to _Boost_KNOWN_VERSIONS (Well, in my opinion we should use Boost_ADDITIONAL_VERSIONS instead of patching FindBoost.cmake!) --- Installation/cmake/modules/FindBoost.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Installation/cmake/modules/FindBoost.cmake b/Installation/cmake/modules/FindBoost.cmake index 3a83d8fdd69..d0b4b268781 100644 --- a/Installation/cmake/modules/FindBoost.cmake +++ b/Installation/cmake/modules/FindBoost.cmake @@ -279,6 +279,9 @@ else(Boost_FIND_VERSION_EXACT) # The user has not requested an exact version. Among known # versions, find those that are acceptable to the user request. set(_Boost_KNOWN_VERSIONS ${Boost_ADDITIONAL_VERSIONS} + "1.45.1" "1.45.0" "1.45" + "1.44.1" "1.44.0" "1.44" + "1.43.1" "1.43.0" "1.43" "1.42.1" "1.42.0" "1.42" "1.41.1" "1.41.0" "1.41" "1.40.1" "1.40.0" "1.40" From 7de6c067c93f0c7780ce6f09f2d63920ec5c4d7d Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Tue, 23 Feb 2010 14:27:31 +0000 Subject: [PATCH 117/128] It is time to create candidates for CGAL-3.6-beta1 --- Maintenance/release_building/public_release_name | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maintenance/release_building/public_release_name b/Maintenance/release_building/public_release_name index ce157ea91f3..a03295f3ba4 100644 --- a/Maintenance/release_building/public_release_name +++ b/Maintenance/release_building/public_release_name @@ -1 +1 @@ -CGAL-3.6-alpha1 +CGAL-3.6-beta1 From 1d86a58bdb0843c02bfd35b7c73c2be33d6f0f65 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 24 Feb 2010 13:46:53 +0000 Subject: [PATCH 118/128] Backport form trunk: | ------------------------------------------------------------------------ | r54297 | stayeb | 2010-02-24 11:56:56 +0100 (Wed, 24 Feb 2010) | 1 line | Changed paths: | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp | | Fix cutting_plane plugin. | ------------------------------------------------------------------------ | r54298 | stayeb | 2010-02-24 13:39:18 +0100 (Wed, 24 Feb 2010) | 1 line | Changed paths: | M /trunk/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp | | Fix cut_plugin (draw intersection between Polyhedra and plane instead of intersected edges) | ------------------------------------------------------------------------ (This commit will not be in CGAL-3.6-beta1, that will be compose from yesterday internal release, but it will be in the final release.) --- .../Polyhedron/Polyhedron_demo_cut_plugin.cpp | 138 +++++++++++------- 1 file changed, 87 insertions(+), 51 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp index 95b9a6cd094..5bc496dd440 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_cut_plugin.cpp @@ -1,4 +1,5 @@ #include +#include #include "Messages_interface.h" #include "Scene_item_with_display_list.h" @@ -11,6 +12,7 @@ #include #include #include +#include #include @@ -22,12 +24,13 @@ #include #include -typedef CGAL::Simple_cartesian Simple_cartesian_kernel; +//typedef CGAL::Simple_cartesian Epic_kernel; +typedef CGAL::Exact_predicates_inexact_constructions_kernel Epic_kernel; typedef class CGAL::AABB_polyhedron_triangle_primitive< - Simple_cartesian_kernel, + Epic_kernel, Polyhedron> AABB_primitive; -typedef class CGAL::AABB_traits AABB_traits; typedef class CGAL::AABB_tree AABB_tree; @@ -131,8 +134,8 @@ public: for(size_t i = 0, end = edges.size(); i < end; ++i) { - const Simple_cartesian_kernel::Point_3& a = edges[i].source(); - const Simple_cartesian_kernel::Point_3& b = edges[i].target(); + const Epic_kernel::Point_3& a = edges[i].source(); + const Epic_kernel::Point_3& b = edges[i].target(); ::glVertex3d(a.x(), a.y(), a.z()); ::glVertex3d(b.x(), b.y(), b.z()); } @@ -140,7 +143,7 @@ public: } public: - std::vector edges; + std::vector edges; }; // end class Scene_edges_item @@ -154,6 +157,8 @@ class Polyhedron_demo_cut_plugin : public: Polyhedron_demo_cut_plugin() : QObject(), edges_item(0) { } + + virtual ~Polyhedron_demo_cut_plugin(); void init(QMainWindow* mainWindow, Scene_interface* scene_interface, Messages_interface* m); @@ -178,6 +183,17 @@ private: Trees trees; }; // end Polyhedron_demo_cut_plugin + +Polyhedron_demo_cut_plugin::~Polyhedron_demo_cut_plugin() +{ + for ( Trees::iterator it = trees.begin(), end = trees.end() ; + it != end ; ++it) + { + delete it->second; + } +} + + void Polyhedron_demo_cut_plugin::init(QMainWindow* mainWindow, Scene_interface* scene_interface, Messages_interface* m) @@ -210,55 +226,75 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { this, SLOT(cut())); scene->addItem(plane_item); actionCreateCutPlane->setEnabled(false); + + // Hide polyhedrons and call cut() (avoid that nothing shows up until user + // decides to move the plane item) + for(size_t i = 0, end = scene->numberOfEntries(); i < end; ++i) { + Scene_item* item = scene->item(i); + Scene_polyhedron_item* poly_item = qobject_cast(item); + if ( NULL != poly_item ) + poly_item->setVisible(false); + } + cut(); } -// ST 27/04/2009: Function disabled -// TODO: Fix compilation with AABB_tree 3.5 - void Polyhedron_demo_cut_plugin::cut() { -// QApplication::setOverrideCursor(Qt::WaitCursor); -// if(!edges_item) { -// edges_item = new Scene_edges_item; -// edges_item->setName("Edges of the cut"); -// edges_item->setColor(Qt::red); -// connect(edges_item, SIGNAL(destroyed()), -// this, SLOT(reset_edges())); -// scene->addItem(edges_item); -// } -// const qglviewer::Vec& pos = plane_item->manipulatedFrame()->position(); -// const qglviewer::Vec& n = -// plane_item->manipulatedFrame()->inverseTransformOf(qglviewer::Vec(0.f, 0.f, 1.f)); -// Simple_cartesian_kernel::Plane_3 plane(n[0], n[1], n[2], - n * pos); -// std::cerr << plane << std::endl; -// edges_item->edges.clear(); -// QTime time; -// time.start(); -// for(size_t i = 0, end = scene->numberOfEntries(); i < end; ++i) { -// Scene_item* item = scene->item(i); -// Scene_polyhedron_item* poly_item = qobject_cast(item); -// if(!poly_item) continue; -// Trees::iterator it = trees.find(poly_item); -// if(it == trees.end()) { -// it = trees.insert(trees.begin(), -// std::make_pair(poly_item, -// new AABB_tree(poly_item->polyhedron()->facets_begin(), -// poly_item->polyhedron()->facets_end() ))); -// Scene_aabb_item* aabb_item = new Scene_aabb_item(*it->second); -// aabb_item->setName(tr("AABB tree of %1").arg(poly_item->name())); -// aabb_item->setRenderingMode(Wireframe); -// aabb_item->setVisible(false); -// scene->addItem(aabb_item); -// std::cerr << "size: " << it->second->size() << std::endl; -// } -// if(!CGAL::do_intersect(plane, it->second->bbox())) -// std::cerr << "no intersection\n"; -// std::cerr << "all_intersection\n"; -// //it->second.all_intersection(plane, std::back_inserter(edges_item->edges)); -// } -// messages->information(QString("cut (%1 ms). %2 edges.").arg(time.elapsed()).arg(edges_item->edges.size())); -// scene->itemChanged(edges_item); -// QApplication::restoreOverrideCursor(); + QApplication::setOverrideCursor(Qt::WaitCursor); + if(!edges_item) { + edges_item = new Scene_edges_item; + edges_item->setName("Edges of the cut"); + edges_item->setColor(Qt::red); + connect(edges_item, SIGNAL(destroyed()), + this, SLOT(reset_edges())); + scene->addItem(edges_item); + } + const qglviewer::Vec& pos = plane_item->manipulatedFrame()->position(); + const qglviewer::Vec& n = + plane_item->manipulatedFrame()->inverseTransformOf(qglviewer::Vec(0.f, 0.f, 1.f)); + Epic_kernel::Plane_3 plane(n[0], n[1], n[2], - n * pos); + //std::cerr << plane << std::endl; + edges_item->edges.clear(); + QTime time; + time.start(); + for(size_t i = 0, end = scene->numberOfEntries(); i < end; ++i) { + Scene_item* item = scene->item(i); + Scene_polyhedron_item* poly_item = qobject_cast(item); + if(!poly_item) continue; + Trees::iterator it = trees.find(poly_item); + if(it == trees.end()) { + it = trees.insert(trees.begin(), + std::make_pair(poly_item, + new AABB_tree(poly_item->polyhedron()->facets_begin(), + poly_item->polyhedron()->facets_end() ))); + Scene_aabb_item* aabb_item = new Scene_aabb_item(*it->second); + aabb_item->setName(tr("AABB tree of %1").arg(poly_item->name())); + aabb_item->setRenderingMode(Wireframe); + aabb_item->setVisible(false); + scene->addItem(aabb_item); + //std::cerr << "size: " << it->second->size() << std::endl; + } + + if(!CGAL::do_intersect(plane, it->second->bbox())) + continue; + + std::vector intersections; + it->second->all_intersections(plane, std::back_inserter(intersections)); + + for ( std::vector::iterator it = intersections.begin(), + end = intersections.end() ; it != end ; ++it ) + { + const Epic_kernel::Segment_3* inter_seg = + CGAL::object_cast(&(it->first)); + + if ( NULL != inter_seg ) + edges_item->edges.push_back(*inter_seg); + } + } + + messages->information(QString("cut (%1 ms). %2 edges.").arg(time.elapsed()).arg(edges_item->edges.size())); + scene->itemChanged(edges_item); + QApplication::restoreOverrideCursor(); } void Polyhedron_demo_cut_plugin::enableAction() { From 4ea111c5df3f1a2cc816597fbd0d33d5c8c6483b Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Thu, 25 Feb 2010 13:58:38 +0000 Subject: [PATCH 119/128] Update TODO list for Polyhedron demo. --- Polyhedron/demo/Polyhedron/TODO | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/TODO b/Polyhedron/demo/Polyhedron/TODO index 0449b7dc785..2d7798c396f 100644 --- a/Polyhedron/demo/Polyhedron/TODO +++ b/Polyhedron/demo/Polyhedron/TODO @@ -1,4 +1,4 @@ -- The two following files have not yet been ported to the plugin stuff: +- The following file has not yet been ported to the plugin stuff: MainWindow_curvature_estimation.cpp - MainWindow_parameterization.cpp - +- The cut plugin has memory leaks. And the AABB tree item should be updated + when the corresponding items are changed(). From 2564d7f3928f7a30d73c7de6d1c50d11bcc68acd Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Fri, 26 Feb 2010 10:29:18 +0000 Subject: [PATCH 120/128] Minor improvement of the wording. Reformat. --- Installation/CHANGES | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index 0c43eb74a12..c2200913a95 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -22,11 +22,11 @@ CGAL 3.6 offers the following improvements and new functionality : 3.1 Algebraic Kernel (new package) - - This new package is targeted to provide black-box implementations of - state-of-the-art algorithms to determine, compare and approximate real - roots of univariate polynomials and bivariate polynomial systems. It - includes models of the univariate algebraic kernel concept, based on - the library RS (available only on Linux and MacOS for the moment). + - This new package implementations of algorithms to determine, compare + and approximate real roots of univariate polynomials and bivariate + polynomial systems. It includes models of the univariate algebraic + kernel concept, based on the library RS (available only on Linux and + MacOS for the moment). 3.2 Number Types From 6358e5249c45fe7395a7532ff06eea5c950c4dc0 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Mar 2010 08:08:13 +0000 Subject: [PATCH 121/128] Fix: do not write "warning" in CMakeLists.txt (NOTICE instead). --- Polyhedron/demo/Polyhedron/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/CMakeLists.txt b/Polyhedron/demo/Polyhedron/CMakeLists.txt index 8314bbf0436..3f550a1dfaa 100644 --- a/Polyhedron/demo/Polyhedron/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/CMakeLists.txt @@ -65,7 +65,7 @@ if(CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) include( ${TAUCS_USE_FILE} ) add_definitions(-DCGAL_TAUCS_ENABLED) else(TAUCS_FOUND) - message(STATUS "warning: TAUCS is not found. parametrization will not be available.") + message(STATUS "NOTICE: TAUCS is not found. parametrization will not be available.") endif(TAUCS_FOUND) # Link with BLAS and LAPACK only (optional) @@ -73,7 +73,7 @@ if(CGAL_Qt4_FOUND AND QT4_FOUND AND OPENGL_FOUND AND QGLVIEWER_FOUND) include( ${LAPACK_USE_FILE} ) add_definitions(-DCGAL_LAPACK_ENABLED) else(LAPACK_FOUND) - message(STATUS "warning: LAPACK is not found. curvatures estimation will not be available.") + message(STATUS "NOTICE: LAPACK is not found. curvatures estimation will not be available.") endif(LAPACK_FOUND) qt4_wrap_ui( UI_FILES MainWindow.ui ) From bba3753ee85f0917ffd2ad5be39bbee9bf80cef1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Mar 2010 08:23:05 +0000 Subject: [PATCH 122/128] Missing word! --- Installation/CHANGES | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Installation/CHANGES b/Installation/CHANGES index c2200913a95..76cf5d0b690 100644 --- a/Installation/CHANGES +++ b/Installation/CHANGES @@ -22,11 +22,11 @@ CGAL 3.6 offers the following improvements and new functionality : 3.1 Algebraic Kernel (new package) - - This new package implementations of algorithms to determine, compare - and approximate real roots of univariate polynomials and bivariate - polynomial systems. It includes models of the univariate algebraic - kernel concept, based on the library RS (available only on Linux and - MacOS for the moment). + - This new package provides implementations of algorithms to determine, + compare and approximate real roots of univariate polynomials and + bivariate polynomial systems. It includes models of the univariate + algebraic kernel concept, based on the library RS (available only on + Linux and MacOS for the moment). 3.2 Number Types From 487a1fca97c703c0ac5146a88a49e6658111f28a Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Mar 2010 10:35:39 +0000 Subject: [PATCH 123/128] Fix the issue with checks for the Boost version. --- BGL/include/CGAL/boost/graph/properties.h | 2 +- Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp | 2 +- Jet_fitting_3/examples/Jet_fitting_3/PolyhedralSurf.h | 2 +- Ridges_3/include/CGAL/Ridges.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BGL/include/CGAL/boost/graph/properties.h b/BGL/include/CGAL/boost/graph/properties.h index ba14f25093a..a58a82ce1df 100644 --- a/BGL/include/CGAL/boost/graph/properties.h +++ b/BGL/include/CGAL/boost/graph/properties.h @@ -21,7 +21,7 @@ #ifndef CGAL_BOOST_GRAPH_BGL_PROPERTIES_H #define CGAL_BOOST_GRAPH_BGL_PROPERTIES_H -#include +#include #include #include diff --git a/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp b/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp index 685b1842131..32cd3205760 100644 --- a/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp +++ b/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #ifdef CGAL_USE_BOOST_PROGRAM_OPTIONS #include diff --git a/Jet_fitting_3/examples/Jet_fitting_3/PolyhedralSurf.h b/Jet_fitting_3/examples/Jet_fitting_3/PolyhedralSurf.h index 4d909d24002..c7ae230c264 100644 --- a/Jet_fitting_3/examples/Jet_fitting_3/PolyhedralSurf.h +++ b/Jet_fitting_3/examples/Jet_fitting_3/PolyhedralSurf.h @@ -5,7 +5,7 @@ #include #include -#include +#include #include diff --git a/Ridges_3/include/CGAL/Ridges.h b/Ridges_3/include/CGAL/Ridges.h index 674b7fcbe72..46959454518 100644 --- a/Ridges_3/include/CGAL/Ridges.h +++ b/Ridges_3/include/CGAL/Ridges.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include From 7fffc2f65bc6e60e7c5a0e19194071a7f709973c Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Mon, 1 Mar 2010 13:01:18 +0000 Subject: [PATCH 124/128] Let's prepare CGAl-3.6 finale version, now. --- .gitattributes | 1 - Maintenance/release_building/public_release_name | 1 - 2 files changed, 2 deletions(-) delete mode 100644 Maintenance/release_building/public_release_name diff --git a/.gitattributes b/.gitattributes index d387af63ec5..7bf2f14ebc1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1621,7 +1621,6 @@ Maintenance/release_building/BUGFIX_NUMBER -text Maintenance/release_building/MAJOR_NUMBER -text Maintenance/release_building/MINOR_NUMBER -text Maintenance/release_building/global_dont_submit -text -Maintenance/release_building/public_release_name -text Maintenance/rpm/SOURCES/CGAL-README.Fedora svneol=native#text/plain Maintenance/rpm/SOURCES/CGAL-build-library.dpatch svneol=native#text/x-diff Maintenance/rpm/SOURCES/CGAL-install_cgal-SUPPORT_REQUIRED.patch svneol=native#text/x-diff diff --git a/Maintenance/release_building/public_release_name b/Maintenance/release_building/public_release_name deleted file mode 100644 index a03295f3ba4..00000000000 --- a/Maintenance/release_building/public_release_name +++ /dev/null @@ -1 +0,0 @@ -CGAL-3.6-beta1 From f98a4ee9c7d656bc75088154539987a487df4677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Pe=C3=B1aranda?= Date: Mon, 1 Mar 2010 16:07:43 +0000 Subject: [PATCH 125/128] replaced macros reported by check_macro_names script --- .../include/CGAL/RS/Algebraic_kernel_d_1_RS.h | 49 +-- .../include/CGAL/RS/algebraic_1.h | 12 +- .../include/CGAL/RS/algebraic_1_comparisons.h | 10 +- .../CGAL/RS/algebraic_1_constructors.h | 14 +- .../include/CGAL/RS/algebraic_1_member.h | 10 +- .../include/CGAL/RS/algebraic_1_operators.h | 10 +- .../include/CGAL/RS/algebraic_1_other.h | 10 +- .../CGAL/RS/algebraic_1_real_embeddable.h | 46 +-- Algebraic_kernel_d/include/CGAL/RS/basic.h | 18 +- .../include/CGAL/RS/compare_1.h | 42 +-- Algebraic_kernel_d/include/CGAL/RS/crt.h | 38 +-- Algebraic_kernel_d/include/CGAL/RS/dyadic.h | 287 ++++++++++-------- Algebraic_kernel_d/include/CGAL/RS/functors.h | 19 +- Algebraic_kernel_d/include/CGAL/RS/inverse.h | 51 ++-- Algebraic_kernel_d/include/CGAL/RS/memory.h | 18 +- Algebraic_kernel_d/include/CGAL/RS/p.h | 132 ++++---- .../include/CGAL/RS/pagealloc.h | 66 ++-- .../include/CGAL/RS/polynomial_1.h | 14 +- .../CGAL/RS/polynomial_1_constructors.h | 10 +- .../include/CGAL/RS/polynomial_1_eval.h | 39 +-- .../include/CGAL/RS/polynomial_1_impl.h | 10 +- .../include/CGAL/RS/polynomial_1_io.h | 10 +- .../include/CGAL/RS/polynomial_1_member.h | 10 +- .../include/CGAL/RS/polynomial_1_operators.h | 10 +- .../include/CGAL/RS/polynomial_1_parser.h | 6 +- .../include/CGAL/RS/polynomial_1_utils.h | 12 +- .../include/CGAL/RS/polynomial_converter.h | 30 +- .../include/CGAL/RS/polynomial_functors.h | 12 +- Algebraic_kernel_d/include/CGAL/RS/pp.h | 38 +-- Algebraic_kernel_d/include/CGAL/RS/primes.h | 58 ++-- Algebraic_kernel_d/include/CGAL/RS/refine_1.h | 257 ++++++++-------- .../include/CGAL/RS/refine_1_rs.h | 11 +- Algebraic_kernel_d/include/CGAL/RS/sign_1.h | 14 +- .../include/CGAL/RS/sign_1_no_rs.h | 10 +- .../include/CGAL/RS/sign_1_rs.h | 10 +- Algebraic_kernel_d/include/CGAL/RS/solve_1.h | 18 +- Algebraic_kernel_d/include/CGAL/RS/ugcd.h | 53 ++-- 37 files changed, 754 insertions(+), 710 deletions(-) diff --git a/Algebraic_kernel_d/include/CGAL/RS/Algebraic_kernel_d_1_RS.h b/Algebraic_kernel_d/include/CGAL/RS/Algebraic_kernel_d_1_RS.h index 8f9126c258e..33cec57b6a7 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/Algebraic_kernel_d_1_RS.h +++ b/Algebraic_kernel_d/include/CGAL/RS/Algebraic_kernel_d_1_RS.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_ALGEBRAIC_KERNEL_RS_1 @@ -68,26 +68,27 @@ struct Algebraic_kernel_d_1_RS{ typedef RSFunctors::Approximate_absolute_1 Approximate_absolute_1; typedef RSFunctors::Approximate_relative_1 Approximate_relative_1; -#define CREATE_RS_FUNCTION_OBJECT(T,N) \ +#define CGALRS_CREATE_FUNCTION_OBJECT(T,N) \ inline T N##_object()const{return T();} - CREATE_RS_FUNCTION_OBJECT(Construct_algebraic_real_1, - construct_algebraic_real_1) - CREATE_RS_FUNCTION_OBJECT(Compute_polynomial_1,compute_polynomial_1) - CREATE_RS_FUNCTION_OBJECT(Isolate_1,isolate_1) - CREATE_RS_FUNCTION_OBJECT(Is_square_free_1,is_square_free_1) - CREATE_RS_FUNCTION_OBJECT(Make_square_free_1,make_square_free_1) - CREATE_RS_FUNCTION_OBJECT(Square_free_factorize_1,square_free_factorize_1) - CREATE_RS_FUNCTION_OBJECT(Is_coprime_1,is_coprime_1) - CREATE_RS_FUNCTION_OBJECT(Make_coprime_1,make_coprime_1) - CREATE_RS_FUNCTION_OBJECT(Solve_1,solve_1) - CREATE_RS_FUNCTION_OBJECT(Number_of_solutions_1,number_of_solutions) - CREATE_RS_FUNCTION_OBJECT(Sign_at_1,sign_at_1) - CREATE_RS_FUNCTION_OBJECT(Is_zero_at_1,is_zero_at_1) - CREATE_RS_FUNCTION_OBJECT(Compare_1,compare_1) - CREATE_RS_FUNCTION_OBJECT(Bound_between_1,bound_between_1) - CREATE_RS_FUNCTION_OBJECT(Approximate_absolute_1,approximate_absolute_1) - CREATE_RS_FUNCTION_OBJECT(Approximate_relative_1,approximate_relative_1) -#undef CREATE_RS_FUNCTION_OBJECT + CGALRS_CREATE_FUNCTION_OBJECT(Construct_algebraic_real_1, + construct_algebraic_real_1) + CGALRS_CREATE_FUNCTION_OBJECT(Compute_polynomial_1,compute_polynomial_1) + CGALRS_CREATE_FUNCTION_OBJECT(Isolate_1,isolate_1) + CGALRS_CREATE_FUNCTION_OBJECT(Is_square_free_1,is_square_free_1) + CGALRS_CREATE_FUNCTION_OBJECT(Make_square_free_1,make_square_free_1) + CGALRS_CREATE_FUNCTION_OBJECT(Square_free_factorize_1, + square_free_factorize_1) + CGALRS_CREATE_FUNCTION_OBJECT(Is_coprime_1,is_coprime_1) + CGALRS_CREATE_FUNCTION_OBJECT(Make_coprime_1,make_coprime_1) + CGALRS_CREATE_FUNCTION_OBJECT(Solve_1,solve_1) + CGALRS_CREATE_FUNCTION_OBJECT(Number_of_solutions_1,number_of_solutions) + CGALRS_CREATE_FUNCTION_OBJECT(Sign_at_1,sign_at_1) + CGALRS_CREATE_FUNCTION_OBJECT(Is_zero_at_1,is_zero_at_1) + CGALRS_CREATE_FUNCTION_OBJECT(Compare_1,compare_1) + CGALRS_CREATE_FUNCTION_OBJECT(Bound_between_1,bound_between_1) + CGALRS_CREATE_FUNCTION_OBJECT(Approximate_absolute_1,approximate_absolute_1) + CGALRS_CREATE_FUNCTION_OBJECT(Approximate_relative_1,approximate_relative_1) +#undef CGALRS_CREATE_FUNCTION_OBJECT }; // Algebraic_kernel_d_1_RS } // namespace CGAL diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1.h index e4a8f43b0cc..f11f7319b78 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_H @@ -142,7 +142,7 @@ public: #include // other member functions #include #include // related non-member functions -#include +#include #endif // CGAL_RS_ALGEBRAIC_1_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_comparisons.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_comparisons.h index be485e9019e..82a9ac8c037 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_comparisons.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_comparisons.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_COMPARISONS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h index 48aa3bd43ae..6eb3cb8fc8e 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_constructors.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_CONSTRUCTORS_H @@ -146,7 +146,7 @@ Algebraic_1::Algebraic_1(mpfr_srcptr src){ mpfi_set_fr(mpfi(),r.fr()); CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)!=0); CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)!=0); - RS_polynomial_1 *rsp=new RS_polynomial_1(r.to_fraction().mpq()); + RS_polynomial_1 *rsp=new RS_polynomial_1(Gmpq(r).mpq()); set_pol(*rsp); set_nr(0); set_lefteval(CGAL::NEGATIVE); @@ -188,7 +188,7 @@ Algebraic_1::Algebraic_1(const Gmpfr &r){ mpfi_set_fr(mpfi(),r.fr()); CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->left)!=0); CGAL_assertion(mpfr_equal_p(r.fr(),&mpfi()->right)!=0); - RS_polynomial_1 *rsp=new RS_polynomial_1(r.to_fraction().mpq()); + RS_polynomial_1 *rsp=new RS_polynomial_1(Gmpq(r).mpq()); set_pol(*rsp); set_nr(0); set_lefteval(CGAL::NEGATIVE); diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h index 56755110e59..5037cfb4d18 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_member.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_MEMBER_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_operators.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_operators.h index 2efc9ded925..ef453681a74 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_operators.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_operators.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_OPERATORS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_other.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_other.h index e733f7a12ca..36ff0a059d7 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_other.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_other.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_ALGEBRAIC_1_OTHER_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_real_embeddable.h b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_real_embeddable.h index bfd7ec44027..b9dacb44228 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_real_embeddable.h +++ b/Algebraic_kernel_d/include/CGAL/RS/algebraic_1_real_embeddable.h @@ -1,16 +1,16 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ // @@ -19,25 +19,25 @@ // ============================================================================ -namespace CGAL { +namespace CGAL { template<> class Real_embeddable_traits< Algebraic_1 > : public INTERN_RET::Real_embeddable_traits_base< Algebraic_1 , CGAL::Tag_true > { public: - typedef INTERN_RET::Real_embeddable_traits_base< Algebraic_1 , CGAL::Tag_true > Base; - + typedef INTERN_RET::Real_embeddable_traits_base< Algebraic_1 , CGAL::Tag_true > Base; + typedef CGAL::Tag_true Is_real_embeddable; typedef bool Boolean; - typedef CGAL::Sign Sign; - typedef CGAL::Comparison_result Comparison_result; + typedef CGAL::Sign Sign; + typedef CGAL::Comparison_result Comparison_result; typedef Algebraic_1 Type; - typedef Base::Compare Compare; // todo: get a more efficient impl - - class Sgn + typedef Base::Compare Compare; // todo: get a more efficient impl + + class Sgn : public std::unary_function< Type, CGAL::Sign > { public: CGAL::Sign operator()( const Type& a ) const { @@ -53,36 +53,36 @@ public: } }; - class To_interval + class To_interval : public std::unary_function< Type, std::pair > { public: - std::pair operator()(const Type& a) const { - return a.to_interval(); + std::pair operator()(const Type& a) const { + return a.to_interval(); } - }; + }; class Is_zero - : public std::unary_function< Type, Boolean> { + : public std::unary_function< Type, Boolean> { public: - bool operator()(const Type& a) const { + bool operator()(const Type& a) const { return Sgn()(a) == CGAL::ZERO; } }; - + class Is_finite :public std::unary_function< Type, Boolean> { public: - bool operator()(const Type& ) const { + bool operator()(const Type& ) const { return true; } }; class Abs :public std::unary_function< Type, Type> { - public: - Type operator()(const Type& a) const { + public: + Type operator()(const Type& a) const { return Sgn()(a)==CGAL::NEGATIVE?-a:a; } }; }; -} // namespace CGAL +} // namespace CGAL diff --git a/Algebraic_kernel_d/include/CGAL/RS/basic.h b/Algebraic_kernel_d/include/CGAL/RS/basic.h index 81938e4a329..a2134b9f676 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/basic.h +++ b/Algebraic_kernel_d/include/CGAL/RS/basic.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_BASIC_H @@ -44,15 +44,15 @@ # ifdef _MSC_VER # ifdef _WINDLL # error "Can't build CGAL_RS as thread safe." -# define RS_THREAD_ATTR +# define CGALRS_THREAD_ATTR # else -# define RS_THREAD_ATTR __declspec(thread) +# define CGALRS_THREAD_ATTR __declspec(thread) # endif # else -# define RS_THREAD_ATTR __thread +# define CGALRS_THREAD_ATTR __thread # endif #else -# define RS_THREAD_ATTR +# define CGALRS_THREAD_ATTR #endif namespace CGAL{ diff --git a/Algebraic_kernel_d/include/CGAL/RS/compare_1.h b/Algebraic_kernel_d/include/CGAL/RS/compare_1.h index 4d50d1dd5c2..dd4bac8e02a 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/compare_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/compare_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_COMPARE_1_H @@ -27,9 +27,9 @@ #include // default refinement and sign functions -#define RS_REFINE_N(A,N) RS3::refine_1(A,N) -#define RS_REFSTEPS 4 -#define RS_SIGNAT(P,M) RSSign::signat(P,M) +#define CGALRS_REFINE_N(A,N) RS3::refine_1(A,N) +#define CGALRS_REFSTEPS 4 +#define CGALRS_SIGNAT(P,M) RSSign::signat(P,M) namespace CGAL{ namespace RS_COMPARE{ @@ -41,19 +41,19 @@ compare_1_unequal(const Algebraic_1 &r1,const Algebraic_1 &r2){ /*typedef _Gcd_policy Gcd; mp_prec_t prec1=r1.get_prec(); mp_prec_t prec2=r2.get_prec();*/ - RS_REFINE_N(r1,RS_REFSTEPS); - RS_REFINE_N(r2,RS_REFSTEPS); + CGALRS_REFINE_N(r1,CGALRS_REFSTEPS); + CGALRS_REFINE_N(r2,CGALRS_REFSTEPS); while(r1.overlaps(r2)){ /*if(prec1*/(r1,r2); Sign sleft,sright; if(mpfr_greater_p(r1.left(),r2.left())) - sleft=RS_SIGNAT(gcd,r1.left()); + sleft=CGALRS_SIGNAT(gcd,r1.left()); else - sleft=RS_SIGNAT(gcd,r2.left()); + sleft=CGALRS_SIGNAT(gcd,r2.left()); if(sleft==ZERO) return EQUAL; if(mpfr_less_p(r1.right(),r2.right())) - sright=RS_SIGNAT(gcd,r1.right()); + sright=CGALRS_SIGNAT(gcd,r1.right()); else - sright=RS_SIGNAT(gcd,r2.right()); + sright=CGALRS_SIGNAT(gcd,r2.right()); if(sleft!=sright) return EQUAL; else @@ -95,8 +95,8 @@ compare_1(const Algebraic_1 &r1,const Algebraic_1 &r2){ } // namespace RS_COMPARE } // namespace CGAL -#undef RS_REFINE_N -#undef RS_REFSTEPS -#undef RS_SIGNAT +#undef CGALRS_REFINE_N +#undef CGALRS_REFSTEPS +#undef CGALRS_SIGNAT #endif // CGAL_RS_COMPARE_1_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/crt.h b/Algebraic_kernel_d/include/CGAL/RS/crt.h index 4a162018a39..5a154f954c9 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/crt.h +++ b/Algebraic_kernel_d/include/CGAL/RS/crt.h @@ -1,19 +1,19 @@ // Copyright (c) 2007 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS__CRT_H @@ -32,10 +32,10 @@ class Crt:public Prime_polynomial{ // chinese remainder torture (GCL, page 180) static - void cra(mpz_ptr r,pn * m,pn *u,int n){ + void cra(mpz_ptr r,CGALRS_PN * m,CGALRS_PN *u,int n){ int k,i; - pn product,temp; - std::vector v(n); + CGALRS_PN product,temp; + std::vector v(n); v[0]=u[0]; for(k=1;k=0;--k){ - p_mpz_mul_pn(r,r,m[k]); - p_mpz_add_pn(r,r,v[k]); + CGALRS_mpz_mul_pn(r,r,m[k]); + CGALRS_mpz_add_pn(r,r,v[k]); } return; }; @@ -69,12 +69,16 @@ class Crt:public Prime_polynomial{ // polynomial); // size_y is what is called n in the book static - void pcra(mpz_t *r,pn *m,std::vector p,int size_x,int size_y){ - typedef boost::multi_array pn_matrix; + void pcra(mpz_t *r, + CGALRS_PN *m, + std::vector p, + int size_x, + int size_y){ + typedef boost::multi_array pn_matrix; typedef pn_matrix::index pn_matrix_index; pn_matrix v(boost::extents[size_x+1][size_y]); pn_matrix_index i,j,k; - pn product,temp; + CGALRS_PN product,temp; for(j=0;j<=size_x;++j){ v[j][0]=p[0][j]; @@ -94,10 +98,10 @@ class Crt:public Prime_polynomial{ // step 3 // be careful: operations are done in Zm, not in Z for(j=0;j<=size_x;++j){ - p_mpz_set_spn(r[j],p_pntospn(v[j][size_y-1])); + CGALRS_mpz_set_spn(r[j],p_pntospn(v[j][size_y-1])); for(k=size_y-2;k>=0;--k){ - p_mpz_mul_pn(r[j],r[j],m[k]); - p_mpz_add_pn(r[j],r[j],v[j][k]); + CGALRS_mpz_mul_pn(r[j],r[j],m[k]); + CGALRS_mpz_add_pn(r[j],r[j],v[j][k]); } } }; diff --git a/Algebraic_kernel_d/include/CGAL/RS/dyadic.h b/Algebraic_kernel_d/include/CGAL/RS/dyadic.h index e0b9b368ba0..8dbb92f867a 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/dyadic.h +++ b/Algebraic_kernel_d/include/CGAL/RS/dyadic.h @@ -1,23 +1,23 @@ // Copyright (c) 2007-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda -#ifndef _dyadic_h -#define _dyadic_h +#ifndef CGAL_RS_DYADIC_H +#define CGAL_RS_DYADIC_H #include #include @@ -30,126 +30,125 @@ #include #endif -#define __dyadic_struct __mpfr_struct -#define dyadic_t mpfr_t -#define dyadic_ptr mpfr_ptr -#define dyadic_srcptr mpfr_srcptr +#define CGALRS_dyadic_struct_struct __mpfr_struct +#define CGALRS_dyadic_t mpfr_t +#define CGALRS_dyadic_ptr mpfr_ptr +#define CGALRS_dyadic_srcptr mpfr_srcptr // some auxiliary defines -#define dyadic_set_prec(D,P) \ +#define CGALRS_dyadic_set_prec(D,P) \ ( mpfr_set_prec( (D), (P)>MPFR_PREC_MIN?(P):MPFR_PREC_MIN) ) -#define dyadic_prec_round(D,P) \ +#define CGALRS_dyadic_prec_round(D,P) \ ( mpfr_prec_round( (D), (P)>MPFR_PREC_MIN?(P):MPFR_PREC_MIN, GMP_RNDN) ) -#define dyadic_set_exp(D,E) \ +#define CGALRS_dyadic_set_exp(D,E) \ ( CGAL_assertion( (E) <= mpfr_get_emax() && \ (E) >= mpfr_get_emin() ) ,\ mpfr_set_exp(D,E) ) // init functions -#define dyadic_init(D) mpfr_init2(D,MPFR_PREC_MIN) -#define dyadic_init2(D,P) mpfr_init2(D,P) -#define dyadic_clear(D) mpfr_clear(D) +#define CGALRS_dyadic_init(D) mpfr_init2(D,MPFR_PREC_MIN) +#define CGALRS_dyadic_init2(D,P) mpfr_init2(D,P) +#define CGALRS_dyadic_clear(D) mpfr_clear(D) -inline void dyadic_set(dyadic_ptr rop,dyadic_srcptr op){ +inline void CGALRS_dyadic_set(CGALRS_dyadic_ptr rop,CGALRS_dyadic_srcptr op){ if(rop!=op){ - dyadic_set_prec(rop,mpfr_get_prec(op)); + CGALRS_dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); } CGAL_assertion(mpfr_equal_p(rop,op)!=0); } -inline void dyadic_set_z(dyadic_ptr rop,mpz_srcptr z){ +inline void CGALRS_dyadic_set_z(CGALRS_dyadic_ptr rop,mpz_srcptr z){ size_t prec; prec=mpz_sizeinbase(z,2)-(mpz_tstbit(z,0)?0:mpz_scan1(z,0)); - dyadic_set_prec(rop,prec); + CGALRS_dyadic_set_prec(rop,prec); mpfr_set_z(rop,z,GMP_RNDN); CGAL_assertion(!mpfr_cmp_z(rop,z)); } -inline void dyadic_set_si(dyadic_ptr rop,long s){ - dyadic_set_prec(rop,sizeof(long)); +inline void CGALRS_dyadic_set_si(CGALRS_dyadic_ptr rop,long s){ + CGALRS_dyadic_set_prec(rop,sizeof(long)); mpfr_set_si(rop,s,GMP_RNDN); CGAL_assertion(!mpfr_cmp_si(rop,s)); } -inline void dyadic_set_ui(dyadic_ptr rop,unsigned long u){ - dyadic_set_prec(rop,sizeof(unsigned long)); +inline void CGALRS_dyadic_set_ui(CGALRS_dyadic_ptr rop,unsigned long u){ + CGALRS_dyadic_set_prec(rop,sizeof(unsigned long)); mpfr_set_ui(rop,u,GMP_RNDN); CGAL_assertion(!mpfr_cmp_ui(rop,u)); } -inline void dyadic_set_fr(dyadic_ptr rop,mpfr_srcptr op){ +inline void CGALRS_dyadic_set_fr(CGALRS_dyadic_ptr rop,mpfr_srcptr op){ if(rop!=op){ - dyadic_set_prec(rop,mpfr_get_prec(op)); + CGALRS_dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); CGAL_assertion(mpfr_equal_p(rop,op)!=0); } } -#define dyadic_init_set(R,D) \ - ( dyadic_init(R), dyadic_set((R), (D)) ) -#define dyadic_init_set_z(R,Z) \ - ( dyadic_init(R), dyadic_set_z((R), (Z)) ) -#define dyadic_init_set_si(R,I) \ - ( dyadic_init(R), dyadic_set_si((R), (I)) ) -#define dyadic_init_set_ui(R,I) \ - ( dyadic_init(R), dyadic_set_ui((R), (I)) ) -#define dyadic_init_set_fr(R,F) \ - ( dyadic_init(R), dyadic_set_fr((R), (F)) ) +#define CGALRS_dyadic_init_set(R,D) \ + ( CGALRS_dyadic_init(R), CGALRS_dyadic_set((R), (D)) ) +#define CGALRS_dyadic_init_set_z(R,Z) \ + ( CGALRS_dyadic_init(R), CGALRS_dyadic_set_z((R), (Z)) ) +#define CGALRS_dyadic_init_set_si(R,I) \ + ( CGALRS_dyadic_init(R), CGALRS_dyadic_set_si((R), (I)) ) +#define CGALRS_dyadic_init_set_ui(R,I) \ + ( CGALRS_dyadic_init(R), CGALRS_dyadic_set_ui((R), (I)) ) +#define CGALRS_dyadic_init_set_fr(R,F) \ + ( CGALRS_dyadic_init(R), CGALRS_dyadic_set_fr((R), (F)) ) -#define dyadic_get_fr(M,D) mpfr_set(M,D,GMP_RNDN) -#define dyadic_get_d(D,RM) mpfr_get_d(D,RM) -inline void dyadic_get_exactfr(mpfr_ptr rop,dyadic_srcptr op){ +#define CGALRS_dyadic_get_fr(M,D) mpfr_set(M,D,GMP_RNDN) +#define CGALRS_dyadic_get_d(D,RM) mpfr_get_d(D,RM) +inline void CGALRS_dyadic_get_exactfr(mpfr_ptr rop,CGALRS_dyadic_srcptr op){ if(rop!=op){ - dyadic_set_prec(rop,mpfr_get_prec(op)); + CGALRS_dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_set(rop,op,GMP_RNDN); CGAL_assertion(mpfr_equal_p(rop,op)!=0); } } -#define dyadic_canonicalize(D) () +#define CGALRS_dyadic_canonicalize(D) () // comparison functions -#define dyadic_sgn(D) mpfr_sgn(D) -#define dyadic_zero(D) mpfr_zero_p(D) -#define dyadic_cmp(D,E) mpfr_cmp(D,E) +#define CGALRS_dyadic_sgn(D) mpfr_sgn(D) +#define CGALRS_dyadic_zero(D) mpfr_zero_p(D) +#define CGALRS_dyadic_cmp(D,E) mpfr_cmp(D,E) // arithmetic functions -#define dyadic_add(R,D,E) dyadic_ll_add(R,D,E,0) -#define dyadic_sub(R,D,E) dyadic_ll_sub(R,D,E,0) -#define dyadic_mul(R,D,E) dyadic_ll_mul(R,D,E,0) +#define CGALRS_dyadic_add(R,D,E) CGALRS_dyadic_ll_add(R,D,E,0) +#define CGALRS_dyadic_sub(R,D,E) CGALRS_dyadic_ll_sub(R,D,E,0) +#define CGALRS_dyadic_mul(R,D,E) CGALRS_dyadic_ll_mul(R,D,E,0) -inline void dyadic_neg(dyadic_ptr rop,dyadic_srcptr op){ +inline void CGALRS_dyadic_neg(CGALRS_dyadic_ptr rop,CGALRS_dyadic_srcptr op){ if(rop!=op) - dyadic_set_prec(rop,mpfr_get_prec(op)); + CGALRS_dyadic_set_prec(rop,mpfr_get_prec(op)); mpfr_neg(rop,op,GMP_RNDN); CGAL_assertion( rop==op|| (!mpfr_cmpabs(rop,op)&& - ((dyadic_zero(op)&&dyadic_zero(rop))|| - (dyadic_sgn(op)!=dyadic_sgn(rop))))); + ((CGALRS_dyadic_zero(op)&&CGALRS_dyadic_zero(rop))|| + (CGALRS_dyadic_sgn(op)!=CGALRS_dyadic_sgn(rop))))); } // low-level addition: // add op1 and op2 and reserve b bits for future lowlevel operations -inline void dyadic_ll_add( - dyadic_ptr rop, - dyadic_srcptr op1, - dyadic_srcptr op2, - mp_prec_t b){ +inline void CGALRS_dyadic_ll_add(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + CGALRS_dyadic_srcptr op2, + mp_prec_t b){ mp_exp_t l,r,temp1,temp2; mp_prec_t rop_prec; int round; if(mpfr_zero_p(op1)){ if(rop!=op2) - dyadic_set(rop,op2); + CGALRS_dyadic_set(rop,op2); return; } if(mpfr_zero_p(op2)){ if(rop!=op1) - dyadic_set(rop,op1); + CGALRS_dyadic_set(rop,op1); return; } l=mpfr_get_exp(op1)>mpfr_get_exp(op2)? @@ -164,24 +163,26 @@ inline void dyadic_ll_add( CGAL_assertion(rop_prec>=mpfr_get_prec(op1)&& rop_prec>=mpfr_get_prec(op2)); if(rop==op1||rop==op2) - dyadic_prec_round(rop,rop_prec); + CGALRS_dyadic_prec_round(rop,rop_prec); else - dyadic_set_prec(rop,rop_prec); + CGALRS_dyadic_set_prec(rop,rop_prec); round=mpfr_add(rop,op1,op2,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_add_z(dyadic_ptr rop,dyadic_srcptr op1,mpz_srcptr z){ +inline void CGALRS_dyadic_add_z(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + mpz_srcptr z){ mp_exp_t l,r; mp_prec_t rop_prec; int round; if(mpfr_zero_p(op1)){ - dyadic_set_z(rop,z); + CGALRS_dyadic_set_z(rop,z); return; } if(!mpz_sgn(z)){ if(rop!=op1) - dyadic_set(rop,op1); + CGALRS_dyadic_set(rop,op1); return; } l=mpfr_get_exp(op1)>(mp_exp_t)mpz_sizeinbase(z,2)? @@ -196,30 +197,29 @@ inline void dyadic_add_z(dyadic_ptr rop,dyadic_srcptr op1,mpz_srcptr z){ CGAL_assertion(rop_prec>=mpfr_get_prec(op1)&& rop_prec>=(mp_prec_t)mpz_sizeinbase(z,2)); if(rop==op1) - dyadic_prec_round(rop,rop_prec); + CGALRS_dyadic_prec_round(rop,rop_prec); else - dyadic_set_prec(rop,rop_prec); + CGALRS_dyadic_set_prec(rop,rop_prec); round=mpfr_add_z(rop,op1,z,GMP_RNDN); CGAL_assertion(!round); } // low-level subtraction: // subtract op2 to op1 and reserve b bits for future lowlevel operations -inline void dyadic_ll_sub( - dyadic_ptr rop, - dyadic_srcptr op1, - dyadic_srcptr op2, - mp_prec_t b){ +inline void CGALRS_dyadic_ll_sub(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + CGALRS_dyadic_srcptr op2, + mp_prec_t b){ mp_exp_t l,r,temp1,temp2; mp_prec_t rop_prec; int round; if(mpfr_zero_p(op1)){ - dyadic_neg(rop,op2); + CGALRS_dyadic_neg(rop,op2); return; } if(mpfr_zero_p(op2)){ if(rop!=op1) - dyadic_set(rop,op1); + CGALRS_dyadic_set(rop,op1); return; } l=mpfr_get_exp(op1)>mpfr_get_exp(op2)? @@ -234,119 +234,140 @@ inline void dyadic_ll_sub( CGAL_assertion(rop_prec>=mpfr_get_prec(op1)&& rop_prec>=mpfr_get_prec(op2)); if(rop==op1||rop==op2) - dyadic_prec_round(rop,rop_prec); + CGALRS_dyadic_prec_round(rop,rop_prec); else - dyadic_set_prec(rop,rop_prec); + CGALRS_dyadic_set_prec(rop,rop_prec); round=mpfr_sub(rop,op1,op2,GMP_RNDN); CGAL_assertion(!round); } // low-level multiplication: // multiply op1 and op2 and reserve b bits for future lowlevel operations -inline void dyadic_ll_mul( - dyadic_ptr rop, - dyadic_srcptr op1, - dyadic_srcptr op2, - mp_prec_t b){ +inline void CGALRS_dyadic_ll_mul(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + CGALRS_dyadic_srcptr op2, + mp_prec_t b){ int round; if(rop==op1||rop==op2) - dyadic_prec_round(rop,b+mpfr_get_prec(op1)+mpfr_get_prec(op2)); + CGALRS_dyadic_prec_round(rop,b+mpfr_get_prec(op1)+mpfr_get_prec(op2)); else - dyadic_set_prec(rop,b+mpfr_get_prec(op1)+mpfr_get_prec(op2)); + CGALRS_dyadic_set_prec(rop,b+mpfr_get_prec(op1)+mpfr_get_prec(op2)); round=mpfr_mul(rop,op1,op2,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_mul_z(dyadic_ptr rop,dyadic_srcptr op1,mpz_srcptr z){ +inline void CGALRS_dyadic_mul_z(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + mpz_srcptr z){ int round; if(rop==op1) - dyadic_prec_round(rop,mpfr_get_prec(op1)+mpz_sizeinbase(z,2)); + CGALRS_dyadic_prec_round( + rop, + mpfr_get_prec(op1)+mpz_sizeinbase(z,2)); else - dyadic_set_prec(rop,mpfr_get_prec(op1)+mpz_sizeinbase(z,2)); + CGALRS_dyadic_set_prec( + rop, + mpfr_get_prec(op1)+mpz_sizeinbase(z,2)); round=mpfr_mul_z(rop,op1,z,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_mul_si(dyadic_ptr rop,dyadic_srcptr op1,long s){ +inline void CGALRS_dyadic_mul_si(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + long s){ int round; if(rop==op1) - dyadic_prec_round(rop,mpfr_get_prec(op1)+sizeof(long)); + CGALRS_dyadic_prec_round(rop,mpfr_get_prec(op1)+sizeof(long)); else - dyadic_set_prec(rop,mpfr_get_prec(op1)+sizeof(long)); + CGALRS_dyadic_set_prec(rop,mpfr_get_prec(op1)+sizeof(long)); round=mpfr_mul_si(rop,op1,s,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_mul_ui(dyadic_ptr rop,dyadic_srcptr op1,unsigned long u){ +inline void CGALRS_dyadic_mul_ui(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + unsigned long u){ int round; if(rop==op1) - dyadic_prec_round(rop,mpfr_get_prec(op1)+sizeof(unsigned long)); + CGALRS_dyadic_prec_round( + rop, + mpfr_get_prec(op1)+sizeof(unsigned long)); else - dyadic_set_prec(rop,mpfr_get_prec(op1)+sizeof(unsigned long)); + CGALRS_dyadic_set_prec( + rop, + mpfr_get_prec(op1)+sizeof(unsigned long)); round=mpfr_mul_ui(rop,op1,u,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_pow_ui(dyadic_ptr rop,dyadic_srcptr op1,unsigned long u){ +inline void CGALRS_dyadic_pow_ui(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + unsigned long u){ int round; if(!u){ CGAL_assertion_msg(!mpfr_zero_p(op1),"0^0"); - dyadic_set_ui(rop,1); + CGALRS_dyadic_set_ui(rop,1); return; } if(u==1){ if(rop!=op1) - dyadic_set(rop,op1); + CGALRS_dyadic_set(rop,op1); return; } if(mpfr_zero_p(op1)){ CGAL_assertion_msg(u!=0,"0^0"); - dyadic_set_ui(rop,0); + CGALRS_dyadic_set_ui(rop,0); return; } if(!mpfr_cmp_ui(op1,1)){ if(rop!=op1) - dyadic_set(rop,op1); + CGALRS_dyadic_set(rop,op1); return; } if(rop==op1) - dyadic_prec_round(rop,u*mpfr_get_prec(op1)); + CGALRS_dyadic_prec_round(rop,u*mpfr_get_prec(op1)); else - dyadic_set_prec(rop,u*mpfr_get_prec(op1)); + CGALRS_dyadic_set_prec(rop,u*mpfr_get_prec(op1)); round=mpfr_pow_ui(rop,op1,u,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_addmul(dyadic_ptr rop,dyadic_srcptr op1,dyadic_srcptr op2){ - dyadic_t temp; - dyadic_init(temp); - dyadic_mul(temp,op1,op2); - dyadic_add(rop,rop,temp); - dyadic_clear(temp); +inline void CGALRS_dyadic_addmul(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + CGALRS_dyadic_srcptr op2){ + CGALRS_dyadic_t temp; + CGALRS_dyadic_init(temp); + CGALRS_dyadic_mul(temp,op1,op2); + CGALRS_dyadic_add(rop,rop,temp); + CGALRS_dyadic_clear(temp); } -inline void dyadic_addmul_si(dyadic_ptr rop,dyadic_srcptr op1,long op2){ - dyadic_t temp; - dyadic_init(temp); - dyadic_mul_si(temp,op1,op2); - dyadic_add(rop,rop,temp); - dyadic_clear(temp); +inline void CGALRS_dyadic_addmul_si(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + long op2){ + CGALRS_dyadic_t temp; + CGALRS_dyadic_init(temp); + CGALRS_dyadic_mul_si(temp,op1,op2); + CGALRS_dyadic_add(rop,rop,temp); + CGALRS_dyadic_clear(temp); } -inline void dyadic_addmul_ui(dyadic_ptr rop,dyadic_srcptr op1,unsigned long u){ - //dyadic_t temp; - //dyadic_init(temp); - //dyadic_mul_ui(temp,op1,u); - //dyadic_add(rop,rop,temp); - //dyadic_clear(temp); - dyadic_t temp; +inline void CGALRS_dyadic_addmul_ui(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + unsigned long u){ + //CGALRS_dyadic_t temp; + //CGALRS_dyadic_init(temp); + //CGALRS_dyadic_mul_ui(temp,op1,u); + //CGALRS_dyadic_add(rop,rop,temp); + //CGALRS_dyadic_clear(temp); + CGALRS_dyadic_t temp; mp_exp_t l,r,temp1,temp2; mp_prec_t rop_prec; int round; if(u==0||mpfr_zero_p(op1)) return; if(u==1){ - dyadic_add(rop,rop,op1); + CGALRS_dyadic_add(rop,rop,op1); return; } // TODO: if(op1==1) @@ -364,23 +385,31 @@ inline void dyadic_addmul_ui(dyadic_ptr rop,dyadic_srcptr op1,unsigned long u){ CGAL_assertion(rop_prec>=mpfr_get_prec(op1)&& rop_prec>=mpfr_get_prec(rop)); // set precision and add - dyadic_prec_round(rop,rop_prec); + CGALRS_dyadic_prec_round(rop,rop_prec); round=mpfr_add(rop,rop,temp,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_mul_2exp(dyadic_ptr rop,dyadic_srcptr op1,unsigned long ui){ +inline void CGALRS_dyadic_mul_2exp(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + unsigned long ui){ int round; // mpfr_mul_2ui does change the mantissa! if(rop==op1) - dyadic_prec_round(rop,sizeof(unsigned long)+mpfr_get_prec(op1)); + CGALRS_dyadic_prec_round( + rop, + sizeof(unsigned long)+mpfr_get_prec(op1)); else - dyadic_set_prec(rop,sizeof(unsigned long)+mpfr_get_prec(op1)); + CGALRS_dyadic_set_prec( + rop, + sizeof(unsigned long)+mpfr_get_prec(op1)); round=mpfr_mul_2ui(rop,op1,ui,GMP_RNDN); CGAL_assertion(!round); } -inline void dyadic_div_2exp(dyadic_ptr rop,dyadic_srcptr op1,unsigned long ui){ +inline void CGALRS_dyadic_div_2exp(CGALRS_dyadic_ptr rop, + CGALRS_dyadic_srcptr op1, + unsigned long ui){ int round; // mpfr_div_2ui does not change the mantissa... am I sure? round=mpfr_div_2ui(rop,op1,ui,GMP_RNDN); @@ -388,14 +417,14 @@ inline void dyadic_div_2exp(dyadic_ptr rop,dyadic_srcptr op1,unsigned long ui){ } // miscelaneous functions -#define dyadic_midpoint(R,D,E) \ - ( dyadic_ll_add(R,D,E,1) , mpfr_div_2ui(R,R,1,GMP_RNDN) ) -#define dyadic_swap(D,E) mpfr_swap(D,E) +#define CGALRS_dyadic_midpoint(R,D,E) \ + ( CGALRS_dyadic_ll_add(R,D,E,1) , mpfr_div_2ui(R,R,1,GMP_RNDN) ) +#define CGALRS_dyadic_swap(D,E) mpfr_swap(D,E) // I/O functions -#define dyadic_out_str(F,D) mpfr_out_str(F,10,0,D,GMP_RNDN) +#define CGALRS_dyadic_out_str(F,D) mpfr_out_str(F,10,0,D,GMP_RNDN) #ifdef __cplusplus -inline std::ostream& operator<<(std::ostream &s,dyadic_srcptr op){ +inline std::ostream& operator<<(std::ostream &s,CGALRS_dyadic_srcptr op){ mp_exp_t exponent; mpz_t mantissa; mpz_init(mantissa); @@ -405,6 +434,6 @@ inline std::ostream& operator<<(std::ostream &s,dyadic_srcptr op){ } #endif -#endif // _dyadic_h +#endif // CGAL_RS_DYADIC_H // vim: tabstop=8: softtabstop=8: smarttab: shiftwidth=8: expandtab diff --git a/Algebraic_kernel_d/include/CGAL/RS/functors.h b/Algebraic_kernel_d/include/CGAL/RS/functors.h index 8353b65e958..112b59e9864 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/functors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/functors.h @@ -1,23 +1,23 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda -#ifndef RS_FUNCTORS_H -#define RS_FUNCTORS_H +#ifndef CGAL_RS_FUNCTORS_H +#define CGAL_RS_FUNCTORS_H #include #include @@ -425,7 +425,7 @@ struct Approximate_absolute_1: // (x.sup()-x.inf())>error){ // RS3::refine_1(x,CGAL::abs(prec)); // } -//-------------------------------------------------- +//-------------------------------------------------- RS3::refine_1(x,std::max(CGAL::abs(prec), mpfi_get_prec(x.mpfi()))); CGAL_assertion(prec>0? @@ -461,5 +461,4 @@ struct Approximate_relative_1 } // namespace RSFunctors } // namespace CGAL -#endif // RS_FUNCTORS_H - +#endif // CGAL_RS_FUNCTORS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/inverse.h b/Algebraic_kernel_d/include/CGAL/RS/inverse.h index d01c1400252..cc6c183f74f 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/inverse.h +++ b/Algebraic_kernel_d/include/CGAL/RS/inverse.h @@ -1,52 +1,52 @@ // Copyright (c) 2007-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS__INVERSE_H #define CGAL_RS__INVERSE_H #ifdef _MSC_VER -# define _s64 __int64 -# define _u64 unsigned __int64 -# define _u32 unsigned __int32 +# define CGALRS_S64 __int64 +# define CGALRS_U64 unsigned __int64 +# define CGALRS_U32 unsigned __int32 #else # include -# define _s64 int64_t -# define _u64 uint64_t -# define _u32 uint32_t +# define CGALRS_S64 int64_t +# define CGALRS_U64 uint64_t +# define CGALRS_U32 uint32_t #endif -#define n_(A) (A<0?-A:A) -//#define u_(A) (A<0?-1:1) -#define u_(A,C) (A<0?(C<0?1:-1):(C<0?-1:1)) - namespace CGAL{ namespace RS_MGCD{ +#define CGALRS_N(A) (A<0?-A:A) +//#define CGALRS_U(A) (A<0?-1:1) +#define CGALRS_U(A,C) (A<0?(C<0?1:-1):(C<0?-1:1)) + class Inverse{ protected: // given a and b, returns s such that gcd(a,b)=s*a+t*b (GCL, page 36) // s*a+t*q=1 => s is the inverse of a, mod q (pafe 173) - static _s64 eea_s(_u32 a,_u32 b){ - _s64 c1,d1,r1;//,c2,d2,r2,t,s; - _u32 r,c,d;//,q; - // a and b are positive, so a=n_(a) and b=n_(b) - //c=n_(a); d=n_(b); + static CGALRS_S64 eea_s(CGALRS_U32 a,CGALRS_U32 b){ + CGALRS_S64 c1,d1,r1;//,c2,d2,r2,t,s; + CGALRS_U32 r,c,d;//,q; + // a and b are positive, so a=CGALRS_N(a) and b=CGALRS_N(b) + //c=CGALRS_N(a); d=CGALRS_N(b); c=a; d=b; c1=1; d1=0; //c2=0; d2=1; @@ -57,15 +57,18 @@ class Inverse{ c=d; c1=d1; //c2=d2; d=r; d1=r1; //d2=r2; } - // gcd(a,b) is n_(c) - //t=c2/(_u(b)*u_(c)); - // a and c are always positive, so s=c1/u_(a,c) equals c1 - //s=c1/u_(a,c); + // gcd(a,b) is CGALRS_N(c) + //t=c2/(CGALRS_U(b)*CGALRS_U(c)); + // a and c are always positive, so s=c1/CGALRS_U(a,c) equals c1 + //s=c1/CGALRS_U(a,c); //return s; return c1; }; }; // class Inverse +#undef CGALRS_N +#undef CGALRS_U + } // namespace RS_MGCD } // namespace CGAL diff --git a/Algebraic_kernel_d/include/CGAL/RS/memory.h b/Algebraic_kernel_d/include/CGAL/RS/memory.h index a29e32d36fc..ba646e8fc88 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/memory.h +++ b/Algebraic_kernel_d/include/CGAL/RS/memory.h @@ -1,19 +1,19 @@ // Copyright (c) 2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_MEMORY_H @@ -62,7 +62,7 @@ inline void rs3_rs_gmp_free(void * p,size_t s) {} // extern void * (*__cgalrs_allocate_func) (size_t); // extern void * (*__cgalrs_reallocate_func) (void *, size_t, size_t); // extern void (*__cgalrs_free_func) (void *, size_t); -//-------------------------------------------------- +//-------------------------------------------------- inline void* __cgalrs_default_allocate(size_t s){ return malloc(s); } @@ -75,13 +75,13 @@ inline void __cgalrs_default_free(void *a,size_t s){ return free(a); } -RS_THREAD_ATTR void * (*__cgalrs_allocate_func) (size_t) = +CGALRS_THREAD_ATTR void * (*__cgalrs_allocate_func) (size_t) = __cgalrs_default_allocate; -RS_THREAD_ATTR void * (*__cgalrs_reallocate_func) (void *, size_t, size_t) = +CGALRS_THREAD_ATTR void * (*__cgalrs_reallocate_func) (void *, size_t, size_t) = __cgalrs_default_reallocate; -RS_THREAD_ATTR void (*__cgalrs_free_func) (void *, size_t) = +CGALRS_THREAD_ATTR void (*__cgalrs_free_func) (void *, size_t) = __cgalrs_default_free; inline void __cgalrs_dummy_free(void *p,size_t s){} diff --git a/Algebraic_kernel_d/include/CGAL/RS/p.h b/Algebraic_kernel_d/include/CGAL/RS/p.h index 586676d73a6..2db5fbbd00f 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/p.h +++ b/Algebraic_kernel_d/include/CGAL/RS/p.h @@ -1,19 +1,19 @@ // Copyright (c) 2007-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS__P_H @@ -25,105 +25,105 @@ namespace CGAL{ namespace RS_MGCD{ -// pn size is 32 bits, -// the sizes of lpn and spn must be, at least, as twice as the size of pn -#define PN_BITS 32 -#define pn _u32 // unsigned -#define lpn _u64 // unsigned long long -#define spn _s64 // long long +// CGALRS_PN size is 32 bits, the sizes of CGALRS_LPN and CGALRS_SPN must be, +// at least, as twice as the size of CGALRS_PN +#define CGALRS_PN_BITS 32 +#define CGALRS_PN CGALRS_U32 // unsigned +#define CGALRS_LPN CGALRS_U64 // unsigned long long +#define CGALRS_SPN CGALRS_S64 // long long -#define p_mpz_set_pn(A,PN) mpz_set_ui(A,(unsigned long)(PN)) -#define p_mpz_mul_pn(A,B,PN) mpz_mul_ui(A,B,(unsigned long)(PN)) -#define p_mpz_add_pn(A,B,PN) mpz_add_ui(A,B,(unsigned long)(PN)) -#define p_mpz_sub_pn(A,B,PN) mpz_sub_ui(A,B,(unsigned long)(PN)) -#define p_mpz_set_spn(A,SPN) mpz_set_si(A,(long)(SPN)) -#define p_mpz_add_spn(A,B,SPN) (SPN<0?p_mpz_sub_pn(A,B,-(SPN)):p_mpz_add_pn(A,B,(SPN))) -#define p_mpz_mul_spn(A,B,SPN) mpz_mul_si(A,B,SPN) +#define CGALRS_mpz_set_pn(A,PN) mpz_set_ui(A,(unsigned long)(PN)) +#define CGALRS_mpz_mul_pn(A,B,PN) mpz_mul_ui(A,B,(unsigned long)(PN)) +#define CGALRS_mpz_add_pn(A,B,PN) mpz_add_ui(A,B,(unsigned long)(PN)) +#define CGALRS_mpz_sub_pn(A,B,PN) mpz_sub_ui(A,B,(unsigned long)(PN)) +#define CGALRS_mpz_set_spn(A,SPN) mpz_set_si(A,(long)(SPN)) +#define CGALRS_mpz_add_spn(A,B,SPN) \ + (SPN<0?CGALRS_mpz_sub_pn(A,B,-(SPN)):CGALRS_mpz_add_pn(A,B,(SPN))) +#define CGALRS_mpz_mul_spn(A,B,SPN) mpz_mul_si(A,B,SPN) -RS_THREAD_ATTR pn prime; - -class Prime:public Inverse{ +CGALRS_THREAD_ATTR CGALRS_PN prime; class Prime:public Inverse{ protected: - static spn p_pntospn(pn p){ + static CGALRS_SPN p_pntospn(CGALRS_PN p){ if(p>(prime-1)/2) - return (spn)p-prime; - return (spn)p; + return (CGALRS_SPN)p-prime; + return (CGALRS_SPN)p; }; - static void p_set_prime(pn p){prime=p;}; + static void p_set_prime(CGALRS_PN p){prime=p;}; - static pn p_prime(){return prime;}; + static CGALRS_PN p_prime(){return prime;}; - static pn p_add(pn a,pn b){ - lpn c=(lpn)a+b; - return (c>=1; b=a; @@ -132,9 +132,9 @@ class Prime:public Inverse{ return b; }; - #define p_div(A,B) (p_mul(A,p_inv(B))) + #define CGALRS_P_DIV(A,B) (p_mul(A,p_inv(B))) - static pn p_gcd(pn a,pn b){ + static CGALRS_PN p_gcd(CGALRS_PN a,CGALRS_PN b){ if(!b) return a; return p_gcd(b,a%b); diff --git a/Algebraic_kernel_d/include/CGAL/RS/pagealloc.h b/Algebraic_kernel_d/include/CGAL/RS/pagealloc.h index a8f9ecbc533..b931b38536b 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/pagealloc.h +++ b/Algebraic_kernel_d/include/CGAL/RS/pagealloc.h @@ -1,19 +1,19 @@ // Copyright (c) 2007 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS__PAGEALLOC_H @@ -25,42 +25,42 @@ namespace CGAL{ namespace RS_MGCD{ -#define PAGESIZE 4194304 -#define TABLESIZE 2048 -#define PAGES 8 -#define VOIDSCAST unsigned long +#define CGALRS_PAGESIZE 4194304 +#define CGALRS_TABLESIZE 2048 +#define CGALRS_PAGES 8 +#define CGALRS_VOIDSCAST unsigned long struct pinfo{ void *start; size_t size; }; -RS_THREAD_ATTR void** pages_startptr; -RS_THREAD_ATTR size_t pages_max;//=PAGES; -RS_THREAD_ATTR size_t pages_allocated; -RS_THREAD_ATTR size_t pages_current; +CGALRS_THREAD_ATTR void** pages_startptr; +CGALRS_THREAD_ATTR size_t pages_max;//=CGALRS_PAGES; +CGALRS_THREAD_ATTR size_t pages_allocated; +CGALRS_THREAD_ATTR size_t pages_current; -RS_THREAD_ATTR size_t page_remainingbytes; -RS_THREAD_ATTR void* page_currentptr; +CGALRS_THREAD_ATTR size_t page_remainingbytes; +CGALRS_THREAD_ATTR void* page_currentptr; -RS_THREAD_ATTR struct pinfo *nodes_allocated; -RS_THREAD_ATTR size_t nodes_total; -RS_THREAD_ATTR size_t nodes_assigned; +CGALRS_THREAD_ATTR struct pinfo *nodes_allocated; +CGALRS_THREAD_ATTR size_t nodes_total; +CGALRS_THREAD_ATTR size_t nodes_assigned; class Page_alloc{ protected: static void* meminit(){ - pages_startptr=(void**)malloc(PAGES*sizeof(void*)); - pages_startptr[0]=malloc(PAGESIZE); + pages_startptr=(void**)malloc(CGALRS_PAGES*sizeof(void*)); + pages_startptr[0]=malloc(CGALRS_PAGESIZE); pages_allocated=1; pages_current=0; - page_remainingbytes=PAGESIZE; + page_remainingbytes=CGALRS_PAGESIZE; page_currentptr=pages_startptr[0]; - nodes_total=TABLESIZE; + nodes_total=CGALRS_TABLESIZE; nodes_allocated= - (struct pinfo*)malloc(TABLESIZE*sizeof(struct pinfo)); + (struct pinfo*)malloc(CGALRS_TABLESIZE*sizeof(struct pinfo)); nodes_assigned=0; return page_currentptr; }; @@ -72,15 +72,15 @@ class Page_alloc{ ++pages_current; r=pages_startptr[pages_current]; page_currentptr=r; - page_remainingbytes=PAGESIZE; + page_remainingbytes=CGALRS_PAGESIZE; return r; } // iso c++ forbids to initialize a static member (pages_max), // so we have to start using pages_max when the amount of - // allocated pages reaches the value PAGES (this is not of + // allocated pages reaches the value CGALRS_PAGES (this is not of // course the cleanest way to do it) - if(pages_allocated==PAGES) - pages_max=2*PAGES; + if(pages_allocated==CGALRS_PAGES) + pages_max=2*CGALRS_PAGES; else pages_max=0; if(pages_allocated==pages_max){ @@ -88,11 +88,11 @@ class Page_alloc{ pages_startptr= (void**)realloc(pages_startptr,pages_max*sizeof(void*)); } - r=malloc(PAGESIZE); + r=malloc(CGALRS_PAGESIZE); pages_startptr[pages_allocated]=r; page_currentptr=r; ++pages_allocated; - page_remainingbytes=PAGESIZE; + page_remainingbytes=CGALRS_PAGESIZE; return r; }; @@ -112,7 +112,7 @@ class Page_alloc{ } page_remainingbytes-=size; r=page_currentptr; - page_currentptr=(void*)((VOIDSCAST)page_currentptr+size); + page_currentptr=(void*)((CGALRS_VOIDSCAST)page_currentptr+size); // c++ does not support nodes_allocated[nodes_assigned]={r,s} nodes_allocated[nodes_assigned].start=r; nodes_allocated[nodes_assigned].size=size; @@ -135,8 +135,8 @@ class Page_alloc{ return ptr; }; - #define pfree(X) {} - //void pfree(void* ptr){ + #define CGALRS_PFREE(X) {} + //void CGALRS_PFREE(void* ptr){ // size_t i=0; // while(nodes_allocated[i].start!=ptr) // ++i; @@ -147,7 +147,7 @@ class Page_alloc{ static void* memclear(){ pages_current=0; - page_remainingbytes=PAGESIZE; + page_remainingbytes=CGALRS_PAGESIZE; page_currentptr=pages_startptr[0]; nodes_assigned=0; return page_currentptr; diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1.h index 4f73e689f60..9027e40b219 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_H @@ -102,11 +102,11 @@ class RS_polynomial_1: void get_upper_bound(mpfr_ptr)const; RS_polynomial_1 times_monomial(mpz_srcptr,int)const; // member evaluation and sign functions - void eval_dyadic(dyadic_ptr,dyadic_srcptr)const; + void eval_dyadic(CGALRS_dyadic_ptr,CGALRS_dyadic_srcptr)const; void eval_mpfr(mpfr_ptr,mpfr_srcptr)const; void inexact_eval_mpfr(mpfr_ptr,mpfr_srcptr)const; void eval_mpfi(mpfi_ptr,mpfi_srcptr)const; - Sign sign_dyadic(dyadic_srcptr)const; + Sign sign_dyadic(CGALRS_dyadic_srcptr)const; Sign sign_mpfr(mpfr_srcptr)const; rs_sign sign_mpfi(mpfi_srcptr)const; double operator()(double)const; diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_constructors.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_constructors.h index 9d709634d0f..5582c043a4a 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_constructors.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_constructors.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_CONSTRUCTORS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_eval.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_eval.h index 06015790518..02683e0e8ff 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_eval.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_eval.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_EVAL_H @@ -23,12 +23,13 @@ namespace CGAL{ // This function uses the Horner's method to evaluate the polynomial. inline -void RS_polynomial_1::eval_dyadic(dyadic_ptr h,dyadic_srcptr x)const{ +void RS_polynomial_1::eval_dyadic(CGALRS_dyadic_ptr h, + CGALRS_dyadic_srcptr x)const{ int d=get_degree(); - dyadic_set_z(h,leading_coefficient()); + CGALRS_dyadic_set_z(h,leading_coefficient()); for(int i=1;i0?POSITIVE:NEGATIVE):ZERO); } - dyadic_init_set_z(h,leading_coefficient()); + CGALRS_dyadic_init_set_z(h,leading_coefficient()); for(int i=1;i0?NEGATIVE:POSITIVE):ZERO); } @@ -97,9 +98,9 @@ rs_sign RS_polynomial_1::sign_mpfi(mpfi_srcptr x)const{ l=mpz_sgn(coef(0)); return(l?(l>0?RS_POSITIVE:RS_NEGATIVE):RS_ZERO); } - // TODO: fijarse si está bien la precisión (Fabrice dijo que perdemos - // un bit por operación, hay 2*d operaciones y con tres estaríamos - // seguros pero dos anda mejor) + // TODO: check if the precision is ok (Fabrice said that we lose + // one bit per operation, there are 2*d operations and with three + // we are on the safe side, but with two it works better) mpfi_init2(y,mpfi_get_prec(x)+2*d); mpfi_set_z(y,leading_coefficient()); for(int i=d-1;i>=0;--i){ diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_impl.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_impl.h index 602f7292ed9..a54b8190f77 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_impl.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_impl.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_IMPL_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_io.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_io.h index 286d329ff90..8d4364cec72 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_io.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_io.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_IO_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h index e9eb05bb8ce..a6393f5c736 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_member.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_MEMBER_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_operators.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_operators.h index 1c4d931605e..cb4e712ee19 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_operators.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_operators.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_OPERATORS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h index c094822336c..78d0c891a53 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_parser.h @@ -18,8 +18,8 @@ // // (the first version of this file was written by Elias Tsigaridas) -#ifndef RS_PARSER_1_H -#define RS_PARSER_1_H +#ifndef CGAL_RS_PARSER_1_H +#define CGAL_RS_PARSER_1_H #include #include @@ -358,6 +358,6 @@ struct Convert_to_Gmpz #undef CGAL_BOOST_SPIRIT -#endif // RS_PARSER_1_H +#endif // CGAL_RS_PARSER_1_H // vim: tabstop=8: softtabstop=8: smarttab: shiftwidth=8: expandtab diff --git a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_utils.h b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_utils.h index 64900a4cea6..2bd77fa3c15 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_utils.h +++ b/Algebraic_kernel_d/include/CGAL/RS/polynomial_1_utils.h @@ -1,19 +1,19 @@ // Copyright (c) 2007-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_POLYNOMIAL_1_UTILS_H @@ -267,7 +267,7 @@ public std::binary_function{ //-------------------------------------------------- // mpz_mul(r,q->coef(i),lcg); // mpz_sub(r,f.coef(i+degf-degg-1),r); - //-------------------------------------------------- + //-------------------------------------------------- mpz_mul(r,q->coef(i),g.coef(degg-1)); mpz_sub(r,f.coef(i+degf-degg-1),r); std::cout<<"i="<=n static - int pp_pdivrem(pn *r,pn *u,int m,pn *v,int n){ + int pp_pdivrem(CGALRS_PN *r,CGALRS_PN *u,int m,CGALRS_PN *v,int n){ int k,j; for(k=0;k<=m;++k) r[k]=u[k]; @@ -72,9 +72,9 @@ class Prime_polynomial:public Prime,public Page_alloc{ }; static - pn pp_pp(pn *pp,pn *p,int dp){ + CGALRS_PN pp_pp(CGALRS_PN *pp,CGALRS_PN *p,int dp){ int i; - pn inv,cont=p[dp]; + CGALRS_PN inv,cont=p[dp]; for(i=0;i=db static - int pp_gcd(pn *g,pn *a,int da,pn *b,int db){ - pn *r0,*r1,*r2; + int pp_gcd(CGALRS_PN *g,CGALRS_PN *a,int da,CGALRS_PN *b,int db){ + CGALRS_PN *r0,*r1,*r2; int i,d0,d1,d2; d0=da; - r0=(pn*)palloc((1+da)*sizeof(pn)); + r0=(CGALRS_PN*)palloc((1+da)*sizeof(CGALRS_PN)); //for(i=0;i<=da;++i) // r0[i]=a[i]; pp_pp(r0,a,da); d1=db; - r1=(pn*)palloc((1+da)*sizeof(pn)); + r1=(CGALRS_PN*)palloc((1+da)*sizeof(CGALRS_PN)); //for(i=0;i<=db;++i) // r1[i]=b[i]; pp_pp(r1,b,db); - r2=(pn*)palloc((1+da)*sizeof(pn)); + r2=(CGALRS_PN*)palloc((1+da)*sizeof(CGALRS_PN)); d2=pp_pdivrem(r2,r0,d0,r1,d1); while(d2){ for(i=0;i<=d1;++i) @@ -111,7 +111,7 @@ class Prime_polynomial:public Prime,public Page_alloc{ d2=pp_pdivrem(r2,r0,d0,r1,d1); } if(!r2[0]){ - //pn inv=p_inv(r1[d1]); + //CGALRS_PN inv=p_inv(r1[d1]); //g[d1]=1; //for(i=0;i #ifndef CGAL_RS__PRIMES_H @@ -22,28 +22,28 @@ #include // I borrowed these numbers from Fabrice, this leaves us around 250000 primes -#define PR_MIN 2145338339 -#define PR_MAX 2147483647 +#define CGALRS_PR_MIN 2145338339 +#define CGALRS_PR_MAX 2147483647 -//#define pr_is_prime(N) (pr_fermat(N)?pr_is_prime_bruteforce(N):0) -#define pr_is_prime(N) pr_mrj(N) +//#define CGALRS_PR_IS_PRIME(N) (pr_fermat(N)?pr_is_prime_bruteforce(N):0) +#define CGALRS_PR_IS_PRIME(N) pr_mrj(N) #ifdef _MSC_VER -# define cgal_rs_random rand +# define CGAL_RS_RANDOM rand #else -# define cgal_rs_random random +# define CGAL_RS_RANDOM random #endif namespace CGAL{ namespace RS_MGCD{ -RS_THREAD_ATTR pn currentprime; +CGALRS_THREAD_ATTR CGALRS_PN currentprime; class Primes:public Crt{ private: - static int pr_is_prime_bruteforce(pn n){ + static int pr_is_prime_bruteforce(CGALRS_PN n){ int i,sqrtn; - sqrtn=(pn)(sqrt((double)n)); + sqrtn=(CGALRS_PN)(sqrt((double)n)); for(i=3;i<=sqrtn;++i) if(!(n%i)) return 0; @@ -51,23 +51,23 @@ class Primes:public Crt{ } // vzGG, p. 507; returns 0 if n is composite - static int pr_fermat(pn n){ + static int pr_fermat(CGALRS_PN n){ p_set_prime(n); - return(p_pow(2+((pn)cgal_rs_random())%(n-4),n-1)==1); + return(p_pow(2+((CGALRS_PN)CGAL_RS_RANDOM())%(n-4),n-1)==1); } // Solovay-Strassen - static int pr_ss(pn n){ - pn a,x; + static int pr_ss(CGALRS_PN n){ + CGALRS_PN a,x; p_set_prime(n); - a=1+(pn)cgal_rs_random()%(n-2); - x=p_div(a,n); + a=1+(CGALRS_PN)CGAL_RS_RANDOM()%(n-2); + x=CGALRS_P_DIV(a,n); return(!x||p_pow(a,n>>1)!=x); } // Miller-Rabin - static int pr_mr(pn n){ - pn s,d,a,x,r; + static int pr_mr(CGALRS_PN n){ + CGALRS_PN s,d,a,x,r; s=1; d=(n-1)>>1; while(!(d&1)){ @@ -75,7 +75,7 @@ class Primes:public Crt{ d=d>>1; } p_set_prime(n); - a=2+(pn)cgal_rs_random()%(n-4); + a=2+(CGALRS_PN)CGAL_RS_RANDOM()%(n-4); x=p_pow(a,d); if(x==1||x==n-1) return 1; // pobably prime @@ -90,8 +90,8 @@ class Primes:public Crt{ } // Miller-Rabin-Jaeschke - static int pr_mrj(pn n){ - pn s,d,a[3],r;//,x; + static int pr_mrj(CGALRS_PN n){ + CGALRS_PN s,d,a[3],r;//,x; int index; a[0]=2; a[1]=7; @@ -117,20 +117,20 @@ class Primes:public Crt{ return 0; // composite } - static pn pr_actual(){ + static CGALRS_PN pr_actual(){ return currentprime; } protected: static int pr_init(){ - currentprime=PR_MIN; + currentprime=CGALRS_PR_MIN; return 0; } - static pn pr_next(){ + static CGALRS_PN pr_next(){ do{ currentprime+=2; - }while(!pr_is_prime(currentprime)); + }while(!CGALRS_PR_IS_PRIME(currentprime)); return currentprime; } diff --git a/Algebraic_kernel_d/include/CGAL/RS/refine_1.h b/Algebraic_kernel_d/include/CGAL/RS/refine_1.h index d82b78ab17b..3db3078dc7b 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/refine_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/refine_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_REFINE_1_H @@ -69,7 +69,7 @@ Comparison_result bisect_at(const Algebraic_1 &a,mpfr_srcptr p){ } } -// refines b until having either only one point in common with a or +// refines b until having either only one point in common with a or // all points inside a; the result will be zero when all points of // b result to be in a, negative when ab // precondition: a and b overlap @@ -150,27 +150,27 @@ int bisect_n_dyadic(const Algebraic_1 &a,unsigned long n=1){ typedef _Gcd_policy Gcd; Sign sl,sc; - dyadic_t center; + CGALRS_dyadic_t center; unsigned long i; sl=a.lefteval(); if(sl==ZERO) return 0; - dyadic_init(center); + CGALRS_dyadic_init(center); for(i=0;i()(a.pol()),center); if(sc==ZERO){ // we have a root - dyadic_set((dyadic_ptr)a.left(),center); - dyadic_swap((dyadic_ptr)a.right(),center); + CGALRS_dyadic_set((CGALRS_dyadic_ptr)a.left(),center); + CGALRS_dyadic_swap((CGALRS_dyadic_ptr)a.right(),center); a.set_lefteval(ZERO); break; } if(sc==sl) - dyadic_swap((dyadic_ptr)a.left(),center); + CGALRS_dyadic_swap((CGALRS_dyadic_ptr)a.left(),center); else - dyadic_swap((dyadic_ptr)a.right(),center); + CGALRS_dyadic_swap((CGALRS_dyadic_ptr)a.right(),center); } - dyadic_clear(center); + CGALRS_dyadic_clear(center); return i; } @@ -196,47 +196,47 @@ int bisect(const Algebraic_1 &a,mp_exp_t s){ // calculate the value of kappa //-------------------------------------------------- // unsigned long calc_kappa(const RS_polynomial_1 &p, -// dyadic_ptr f_lo,dyadic_ptr f_hi, +// CGALRS_dyadic_ptr f_lo,CGALRS_dyadic_ptr f_hi, // unsigned n){ // unsigned long ret; -// dyadic_t temp; +// CGALRS_dyadic_t temp; // mpfr_t numerator,denominator; // mpfr_inits2(MPFR_PREC_MIN,numerator,denominator,NULL); -// dyadic_init(temp); -// -// dyadic_sub(temp,f_lo,f_hi); -// dyadic_get_exactfr(denominator,temp); -// dyadic_mul_2exp(temp,f_lo,n); -// dyadic_get_exactfr(numerator,temp); -// +// CGALRS_dyadic_init(temp); +// +// CGALRS_dyadic_sub(temp,f_lo,f_hi); +// CGALRS_dyadic_get_exactfr(denominator,temp); +// CGALRS_dyadic_mul_2exp(temp,f_lo,n); +// CGALRS_dyadic_get_exactfr(numerator,temp); +// // mpfr_div(numerator,numerator,denominator,GMP_RNDN); // ret=1+mpfr_get_ui(numerator,GMP_RNDN); -// -// dyadic_clear(temp); +// +// CGALRS_dyadic_clear(temp); // mpfr_clears(numerator,denominator,NULL); // return ret; // } -//-------------------------------------------------- +//-------------------------------------------------- unsigned long calc_kappa(const RS_polynomial_1 &p, - dyadic_ptr f_lo,dyadic_ptr f_hi, + CGALRS_dyadic_ptr f_lo,CGALRS_dyadic_ptr f_hi, unsigned n){ unsigned long ret; //-------------------------------------------------- - // dyadic_t numerator,denominator; - // dyadic_init(numerator); - // dyadic_init(denominator); - //-------------------------------------------------- + // CGALRS_dyadic_t numerator,denominator; + // CGALRS_dyadic_init(numerator); + // CGALRS_dyadic_init(denominator); + //-------------------------------------------------- - dyadic_sub(f_hi,f_lo,f_hi); - dyadic_mul_2exp(f_lo,f_lo,n); + CGALRS_dyadic_sub(f_hi,f_lo,f_hi); + CGALRS_dyadic_mul_2exp(f_lo,f_lo,n); mpfr_div(f_lo,f_lo,f_hi,GMP_RNDN); ret=mpfr_get_ui(f_lo,GMP_RNDN); //-------------------------------------------------- - // dyadic_clear(numerator); - // dyadic_clear(denominator); - //-------------------------------------------------- + // CGALRS_dyadic_clear(numerator); + // CGALRS_dyadic_clear(denominator); + //-------------------------------------------------- return ret; } @@ -247,40 +247,43 @@ unsigned long calc_kappa(const RS_polynomial_1 &p, // unsigned n){ // return(1+(int)nearbyint(f_lo*pow(2,n)/(f_lo-f_hi))); // } -//-------------------------------------------------- +//-------------------------------------------------- // returns 0 for success, -1 for failure and 1 if it finds the root; // the "N" of the paper is represented here as 2^n -int refine_interval_by_factor(dyadic_ptr x_lo,dyadic_ptr x_hi, - dyadic_ptr f_lo,dyadic_ptr f_hi, +int refine_interval_by_factor(CGALRS_dyadic_ptr x_lo,CGALRS_dyadic_ptr x_hi, + CGALRS_dyadic_ptr f_lo,CGALRS_dyadic_ptr f_hi, const RS_polynomial_1 &p,unsigned n){ Sign sl=RSSign::signat(p,x_lo); unsigned long kappa; - dyadic_t xkappa,xside,w; + CGALRS_dyadic_t xkappa,xside,w; Sign s1,s2; kappa=calc_kappa(p,f_lo,f_hi,n); - //kappa=calc_kappa(p,dyadic_get_d(f_lo),dyadic_get_d(f_hi),n); + //kappa=calc_kappa(p, + // CGALRS_dyadic_get_d(f_lo), + // CGALRS_dyadic_get_d(f_hi), + // n); if(n==2){ // N==4: bisect twice unsigned b[2],inter; // we will use first xkappa as bisection point - dyadic_init(xkappa); + CGALRS_dyadic_init(xkappa); for(int i=0;i<2;++i){ - dyadic_midpoint(xkappa,x_lo,x_hi); + CGALRS_dyadic_midpoint(xkappa,x_lo,x_hi); if((s1=RSSign::signat(p,xkappa))==ZERO){ //exact - dyadic_set(x_lo,xkappa); - dyadic_swap(x_hi,xkappa); - dyadic_clear(xkappa); + CGALRS_dyadic_set(x_lo,xkappa); + CGALRS_dyadic_swap(x_hi,xkappa); + CGALRS_dyadic_clear(xkappa); return 1; } if(sl==s1){ // we take the right half b[i]=2-i; - dyadic_swap(x_lo,xkappa); + CGALRS_dyadic_swap(x_lo,xkappa); }else{ // we take the left half b[i]=0; - dyadic_swap(x_hi,xkappa); + CGALRS_dyadic_swap(x_hi,xkappa); } } - dyadic_clear(xkappa); + CGALRS_dyadic_clear(xkappa); inter=b[0]+b[1]; switch(inter){ case 0:p.inexact_eval_mpfr(f_hi,x_hi);break; @@ -295,71 +298,71 @@ int refine_interval_by_factor(dyadic_ptr x_lo,dyadic_ptr x_hi, return -2; // failure (but we refined anyway) }else{ // N!=4 // calculate w, the width of every interval - dyadic_init(w); - dyadic_sub(w,x_hi,x_lo); - dyadic_div_2exp(w,w,n); + CGALRS_dyadic_init(w); + CGALRS_dyadic_sub(w,x_hi,x_lo); + CGALRS_dyadic_div_2exp(w,w,n); // calculate x[kappa] - dyadic_init_set(xkappa,x_lo); - dyadic_addmul_ui(xkappa,w,kappa); + CGALRS_dyadic_init_set(xkappa,x_lo); + CGALRS_dyadic_addmul_ui(xkappa,w,kappa); if((s1=RSSign::signat(p,xkappa))==ZERO){ - dyadic_set(x_lo,xkappa); - dyadic_swap(x_hi,xkappa); - dyadic_clear(xkappa); - dyadic_clear(w); + CGALRS_dyadic_set(x_lo,xkappa); + CGALRS_dyadic_swap(x_hi,xkappa); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); return 1; // exact root } if(s1==sl){ // calculate x[kappa+1] - dyadic_init(xside); - dyadic_add(xside,xkappa,w); + CGALRS_dyadic_init(xside); + CGALRS_dyadic_add(xside,xkappa,w); if((s2=RSSign::signat(p,xside))==ZERO){ - dyadic_set(x_lo,xside); - dyadic_swap(x_hi,xside); - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_set(x_lo,xside); + CGALRS_dyadic_swap(x_hi,xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return 1; // exact root } if(s2==sl){ - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return -1; // failure }else{ // s2!=sl && s2!=0 - dyadic_set(x_lo,xkappa); - dyadic_swap(x_hi,xside); + CGALRS_dyadic_set(x_lo,xkappa); + CGALRS_dyadic_swap(x_hi,xside); p.inexact_eval_mpfr(f_lo,x_lo); p.inexact_eval_mpfr(f_hi,x_hi); - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return 0; // success } }else{ // s1!=sl && s1!=ZERO // we calculate x[kappa-1]; - dyadic_init(xside); - dyadic_sub(xside,xkappa,w); + CGALRS_dyadic_init(xside); + CGALRS_dyadic_sub(xside,xkappa,w); if((s2=RSSign::signat(p,xside))==ZERO){ - dyadic_set(x_lo,xside); - dyadic_swap(x_hi,xside); - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_set(x_lo,xside); + CGALRS_dyadic_swap(x_hi,xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return 1; // exact root } if(s2==sl){ - dyadic_swap(x_lo,xside); - dyadic_swap(x_hi,xkappa); + CGALRS_dyadic_swap(x_lo,xside); + CGALRS_dyadic_swap(x_hi,xkappa); p.inexact_eval_mpfr(f_lo,x_lo); p.inexact_eval_mpfr(f_hi,x_hi); - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return 0; // success }else{ // s2!=sl && s2!=ZERO - dyadic_clear(xkappa); - dyadic_clear(w); - dyadic_clear(xside); + CGALRS_dyadic_clear(xkappa); + CGALRS_dyadic_clear(w); + CGALRS_dyadic_clear(xside); return -1; // failure } } @@ -374,24 +377,24 @@ int qir_n(const Algebraic_1 &a,unsigned t=1){ typedef _Gcd_policy Gcd; unsigned count=0; unsigned n=2; // N=2^n - dyadic_t x_lo,x_hi,f_lo,f_hi; // endpoints and their evaluations + CGALRS_dyadic_t x_lo,x_hi,f_lo,f_hi; // endpoints and their evaluations if(a.is_point()) return 0; - dyadic_init_set_fr(x_lo,a.left()); - dyadic_init_set_fr(x_hi,a.right()); - dyadic_init(f_lo); - dyadic_init(f_hi); + CGALRS_dyadic_init_set_fr(x_lo,a.left()); + CGALRS_dyadic_init_set_fr(x_hi,a.right()); + CGALRS_dyadic_init(f_lo); + CGALRS_dyadic_init(f_hi); sfpart_1()(a.pol()).eval_dyadic(f_lo,x_lo); sfpart_1()(a.pol()).eval_dyadic(f_hi,x_hi); - if(!dyadic_sgn(f_lo)){ - dyadic_get_exactfr(&(a.mpfi()->right),x_lo); + if(!CGALRS_dyadic_sgn(f_lo)){ + CGALRS_dyadic_get_exactfr(&(a.mpfi()->right),x_lo); return 0; } - if(!dyadic_sgn(f_hi)){ - dyadic_get_exactfr(&(a.mpfi()->left),x_hi); + if(!CGALRS_dyadic_sgn(f_hi)){ + CGALRS_dyadic_get_exactfr(&(a.mpfi()->left),x_hi); return 0; } - CGAL_assertion(dyadic_sgn(f_lo)!=dyadic_sgn(f_hi)); + CGAL_assertion(CGALRS_dyadic_sgn(f_lo)!=CGALRS_dyadic_sgn(f_hi)); while(t>count){ switch(refine_interval_by_factor(x_lo,x_hi,f_lo,f_hi, sfpart_1()(a.pol()),n)) @@ -403,12 +406,12 @@ int qir_n(const Algebraic_1 &a,unsigned t=1){ } } endloop: - dyadic_get_exactfr(&(a.mpfi()->left),x_lo); - dyadic_get_exactfr(&(a.mpfi()->right),x_hi); - dyadic_clear(x_lo); - dyadic_clear(x_hi); - dyadic_clear(f_lo); - dyadic_clear(f_hi); + CGALRS_dyadic_get_exactfr(&(a.mpfi()->left),x_lo); + CGALRS_dyadic_get_exactfr(&(a.mpfi()->right),x_hi); + CGALRS_dyadic_clear(x_lo); + CGALRS_dyadic_clear(x_hi); + CGALRS_dyadic_clear(f_lo); + CGALRS_dyadic_clear(f_hi); a.set_lefteval(RSSign::signat(sfpart_1()(a.pol()),a.left())); @@ -422,33 +425,39 @@ int qir(const Algebraic_1 &a,mp_exp_t t){ int count=0; long ed; unsigned n=2; // N=2^n - dyadic_t d,f_lo,f_hi; + CGALRS_dyadic_t d,f_lo,f_hi; if(a.is_point()) return 0; - dyadic_init(f_lo); - dyadic_init(f_hi); - sfpart_1()(a.pol()).eval_dyadic(f_lo,(dyadic_ptr)(a.left())); - sfpart_1()(a.pol()).eval_dyadic(f_hi,(dyadic_ptr)(a.right())); + CGALRS_dyadic_init(f_lo); + CGALRS_dyadic_init(f_hi); + sfpart_1() + (a.pol()).eval_dyadic(f_lo,(CGALRS_dyadic_ptr)(a.left())); + sfpart_1() + (a.pol()).eval_dyadic(f_hi,(CGALRS_dyadic_ptr)(a.right())); // we make sure we have a nice interval - if(!dyadic_sgn(f_lo)){ - dyadic_set((dyadic_ptr)a.right(),(dyadic_srcptr)a.left()); + if(!CGALRS_dyadic_sgn(f_lo)){ + CGALRS_dyadic_set((CGALRS_dyadic_ptr)a.right(), + (CGALRS_dyadic_srcptr)a.left()); return 0; } - if(!dyadic_sgn(f_hi)){ - dyadic_set((dyadic_ptr)a.left(),(dyadic_srcptr)a.right()); + if(!CGALRS_dyadic_sgn(f_hi)){ + CGALRS_dyadic_set((CGALRS_dyadic_ptr)a.left(), + (CGALRS_dyadic_srcptr)a.right()); return 0; } - CGAL_assertion(dyadic_sgn(f_lo)!=dyadic_sgn(f_hi)); + CGAL_assertion(CGALRS_dyadic_sgn(f_lo)!=CGALRS_dyadic_sgn(f_hi)); // calculate ed, such that 2^(ed-1)()(a.pol()), @@ -459,14 +468,14 @@ int qir(const Algebraic_1 &a,mp_exp_t t){ default:t=0; // end the loop, we found the root } } - CGAL_assertion(dyadic_sgn(f_lo)!=dyadic_sgn(f_hi)); + CGAL_assertion(CGALRS_dyadic_sgn(f_lo)!=CGALRS_dyadic_sgn(f_hi)); a.set_lefteval( - dyadic_sgn(f_lo)==0? + CGALRS_dyadic_sgn(f_lo)==0? ZERO: - (dyadic_sgn(f_lo)<0?NEGATIVE:POSITIVE)); - dyadic_clear(d); - dyadic_clear(f_lo); - dyadic_clear(f_hi); + (CGALRS_dyadic_sgn(f_lo)<0?NEGATIVE:POSITIVE)); + CGALRS_dyadic_clear(d); + CGALRS_dyadic_clear(f_lo); + CGALRS_dyadic_clear(f_hi); return count; } diff --git a/Algebraic_kernel_d/include/CGAL/RS/refine_1_rs.h b/Algebraic_kernel_d/include/CGAL/RS/refine_1_rs.h index b39c9033fc1..929c65198a9 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/refine_1_rs.h +++ b/Algebraic_kernel_d/include/CGAL/RS/refine_1_rs.h @@ -1,19 +1,19 @@ // Copyright (c) 2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_REFINE_1_RS_H @@ -41,4 +41,3 @@ inline void refine_1(const CGAL::Algebraic_1 &a,unsigned int s=10000){ } // namespace RS3 #endif // CGAL_RS_REFINE_1_RS_H - diff --git a/Algebraic_kernel_d/include/CGAL/RS/sign_1.h b/Algebraic_kernel_d/include/CGAL/RS/sign_1.h index dbf036eb07b..c9603437c14 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/sign_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/sign_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_SIGN_1_H @@ -44,14 +44,12 @@ struct RSSign{ } // compute the sign of the polynomial at a given dyadic - //#define exactsignatdyadic(P,D) ((P).sign_dyadic(D)) static inline Sign - exactsignatdyadic(const RS_polynomial_1 &p,dyadic_srcptr d){ + exactsignatdyadic(const RS_polynomial_1 &p,CGALRS_dyadic_srcptr d){ return p.sign_dyadic(d); } // compute the sign of the polynomial at a given mpfr - //#define exactsignat(P,M) ((P).sign_mpfr(M)) static inline Sign exactsignat(const RS_polynomial_1 &p,mpfr_srcptr m){ return p.sign_mpfr(m); diff --git a/Algebraic_kernel_d/include/CGAL/RS/sign_1_no_rs.h b/Algebraic_kernel_d/include/CGAL/RS/sign_1_no_rs.h index 843c603a3fc..10c58dea2fd 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/sign_1_no_rs.h +++ b/Algebraic_kernel_d/include/CGAL/RS/sign_1_no_rs.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2008 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_SIGN_1_NO_RS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/sign_1_rs.h b/Algebraic_kernel_d/include/CGAL/RS/sign_1_rs.h index 0a3268dc652..86a71d6b92c 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/sign_1_rs.h +++ b/Algebraic_kernel_d/include/CGAL/RS/sign_1_rs.h @@ -1,19 +1,19 @@ // Copyright (c) 2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_SIGN_1_RS_H diff --git a/Algebraic_kernel_d/include/CGAL/RS/solve_1.h b/Algebraic_kernel_d/include/CGAL/RS/solve_1.h index 5a1810b801b..35c6efcd4e1 100644 --- a/Algebraic_kernel_d/include/CGAL/RS/solve_1.h +++ b/Algebraic_kernel_d/include/CGAL/RS/solve_1.h @@ -1,19 +1,19 @@ // Copyright (c) 2006-2009 Inria Lorraine (France). All rights reserved. -// +// // This file is part of CGAL (www.cgal.org); 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; version 2.1 of the License. // See the file LICENSE.LGPL distributed with CGAL. -// +// // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. -// +// // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// +// // $URL$ // $Id$ -// +// // Author: Luis Peñaranda #ifndef CGAL_RS_SOLVE_1_H @@ -35,7 +35,7 @@ namespace CGAL{ class RS_polynomial_1; class Algebraic_1; -#define cstr(S) ((char*)(S)) +#define CGALRS_CSTR(S) ((char*)(S)) // initialize RS solver inline void init_solver(){ @@ -134,7 +134,7 @@ inline Sign affiche_signs_constr(const Algebraic_1 &a){ inline void create_rs_upoly (mpz_t *poly, const int deg, const int ident_pol) { int ident_mon, ident_coeff, i; - rs_import_uppring(cstr("T")); + rs_import_uppring(CGALRS_CSTR("T")); for (i=0; i<=deg; ++i) if (mpz_sgn (poly[i])) { // don't add if == 0 ident_mon = rs_export_new_mon_upp_bz (); @@ -163,7 +163,7 @@ inline int solve_1( create_rs_upoly(p1.get_coefs(),p1.get_degree(),rs_get_default_up()); set_rs_precisol(prec); set_rs_verbose(CGAL_RS_VERB); - rs_run_algo(cstr("UISOLE")); + rs_run_algo(CGALRS_CSTR("UISOLE")); return affiche_sols_eqs(x); } @@ -187,7 +187,7 @@ inline Sign sign_1_rs( create_rs_uconstr (constr, degs, rs_get_default_ineqs_u ()); set_rs_precisol (prec); set_rs_verbose (CGAL_RS_VERB); - rs_run_algo(cstr("UISOLES")); + rs_run_algo(CGALRS_CSTR("UISOLES")); //Sign s=affiche_signs_constr(a); //std::cout<<"sign of "<