Merge remote-tracking branch 'cgal/master' into pr/janetournois/7754

# Conflicts:
#	Polyhedron/demo/Polyhedron/resources/shader_c3t3.frag
This commit is contained in:
Laurent Rineau 2023-11-01 22:59:58 +01:00
commit 5f27627e02
36 changed files with 108798 additions and 108824 deletions

View File

@ -1,6 +1,6 @@
/*! /*!
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts \ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept \cgalConcept
Two types `A` and `B` are a model of the `ExplicitInteroperable` Two types `A` and `B` are a model of the `ExplicitInteroperable`
@ -27,4 +27,3 @@ class ExplicitInteroperable {
public: public:
}; /* end ExplicitInteroperable */ }; /* end ExplicitInteroperable */

View File

@ -1,6 +1,6 @@
/*! /*!
\ingroup PkgAlgebraicFoundationsFractionsConcepts \ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept \cgalConcept
A type is considered as a `Fraction`, if there is a reasonable way to A type is considered as a `Fraction`, if there is a reasonable way to
@ -17,4 +17,3 @@ class Fraction {
public: public:
}; /* end Fraction */ }; /* end Fraction */

View File

@ -1,6 +1,6 @@
/*! /*!
\ingroup PkgAlgebraicFoundationsConcepts \ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept \cgalConcept
A model of the concept `FromDoubleConstructible` is required A model of the concept `FromDoubleConstructible` is required
@ -27,4 +27,3 @@ FromDoubleConstructible(const double& d);
/// @} /// @}
}; /* end FromDoubleConstructible */ }; /* end FromDoubleConstructible */

View File

@ -1,6 +1,6 @@
/*! /*!
\ingroup PkgAlgebraicFoundationsConcepts \ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept \cgalConcept
A model of the concept `FromIntConstructible` is required A model of the concept `FromIntConstructible` is required
@ -28,4 +28,3 @@ FromIntConstructible(int& i);
/// @} /// @}
}; /* end FromIntConstructible */ }; /* end FromIntConstructible */

View File

@ -1,6 +1,6 @@
/*! /*!
\ingroup PkgAlgebraicFoundationsInteroperabilityConcepts \ingroup PkgAlgebraicFoundationsAlgebraicStructuresConcepts
\cgalConcept \cgalConcept
Two types `A` and `B` are a model of the concept Two types `A` and `B` are a model of the concept
@ -29,4 +29,3 @@ class ImplicitInteroperable {
public: public:
}; /* end ImplicitInteroperable */ }; /* end ImplicitInteroperable */

View File

@ -1,19 +1,16 @@
#ifndef CGAL_APOLLONIUS_GRAPH_2_TEST_H #ifndef CGAL_APOLLONIUS_GRAPH_2_TEST_H
#define CGAL_APOLLONIUS_GRAPH_2_TEST_H #define CGAL_APOLLONIUS_GRAPH_2_TEST_H
#include <cassert>
#include <CGAL/enum.h>
#include <CGAL/use.h>
#include <CGAL/Vector_2.h> // this is done in order to avoid error
// when the Segment_2_Segment_2_intersection.h file is included from
// the Triangulation_euclidean_traits_2.h file.
#include <CGAL/Apollonius_graph_2.h> #include <CGAL/Apollonius_graph_2.h>
#include <CGAL/Apollonius_graph_hierarchy_2.h> #include <CGAL/Apollonius_graph_hierarchy_2.h>
#include <CGAL/Apollonius_graph_traits_2.h> #include <CGAL/Apollonius_graph_traits_2.h>
#include <CGAL/Apollonius_graph_filtered_traits_2.h> #include <CGAL/Apollonius_graph_filtered_traits_2.h>
//#include <CGAL/new_traits/Apollonius_graph_new_filtered_traits_2.h>
#include <cassert>
#include <CGAL/enum.h>
#include <CGAL/use.h>
#include <CGAL/Random.h>
#include "IO/Null_output_stream.h" #include "IO/Null_output_stream.h"
@ -839,24 +836,29 @@ bool test_algo_generic(InputStream& is)
// file I/O methods // file I/O methods
//-------------------------------------------------------------------- //--------------------------------------------------------------------
{ {
std::ofstream ofs("ag_testsuite.tmp"); std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
std::cout << "writing to " << fname << std::endl;
std::ofstream ofs(fname);
assert( ofs ); assert( ofs );
ag.file_output(ofs); ag.file_output(ofs);
ofs.close(); ofs.close();
std::ifstream ifs("ag_testsuite.tmp"); std::ifstream ifs(fname);
assert( ifs ); assert( ifs );
ag.file_input(ifs); ag.file_input(ifs);
ifs.close(); ifs.close();
assert( ag.is_valid() ); assert( ag.is_valid() );
} }
{ {
std::ofstream ofs("ag_testsuite.tmp"); std::string fname = "ag_testsuite_" + std::to_string(CGAL::Random().get_seed()) + ".tmp";
std::cout << "writing to " << fname << std::endl;
std::ofstream ofs(fname);
assert( ofs ); assert( ofs );
ofs << ag; ofs << ag;
ofs.close(); ofs.close();
std::ifstream ifs("ag_testsuite.tmp"); std::ifstream ifs(fname);
assert( ifs ); assert( ifs );
ifs >> ag; ifs >> ag;
ifs.close(); ifs.close();

View File

@ -34,11 +34,7 @@
#include <boost/bind/bind.hpp> #include <boost/bind/bind.hpp>
#include <boost/ptr_container/ptr_vector.hpp> #include <boost/ptr_container/ptr_vector.hpp>
#include <boost/random/mersenne_twister.hpp> #include <boost/random/mersenne_twister.hpp>
#if BOOST_VERSION >= 104700 #include <boost/random/uniform_int_distribution.hpp>
# include <boost/random/uniform_int_distribution.hpp>
#else
# include <boost/random/uniform_int.hpp>
#endif
#include <boost/random/uniform_01.hpp> #include <boost/random/uniform_01.hpp>
#include <boost/random/normal_distribution.hpp> #include <boost/random/normal_distribution.hpp>
#if defined(CGAL_LINKED_WITH_BOOST_IOSTREAMS) && defined(CGAL_LINKED_WITH_BOOST_SERIALIZATION) #if defined(CGAL_LINKED_WITH_BOOST_IOSTREAMS) && defined(CGAL_LINKED_WITH_BOOST_SERIALIZATION)
@ -65,17 +61,10 @@ inline void init_feature_class_data(FeatureClassDataFloat& /*data*/, int /*n_cla
} }
typedef std::unordered_set<int> FeatureSet; typedef std::unordered_set<int> FeatureSet;
#if BOOST_VERSION >= 104700
typedef boost::random::uniform_int_distribution<> UniformIntDist; typedef boost::random::uniform_int_distribution<> UniformIntDist;
typedef boost::random::normal_distribution<> NormalDist; typedef boost::random::normal_distribution<> NormalDist;
typedef boost::random::mt19937 RandomGen; typedef boost::random::mt19937 RandomGen;
typedef boost::random::uniform_01<> UnitDist; typedef boost::random::uniform_01<> UnitDist;
#else
typedef boost::uniform_int<> UniformIntDist;
typedef boost::normal_distribution<> NormalDist;
typedef boost::uniform_01<> UnitDist;
typedef boost::mt19937 RandomGen;
#endif
struct ForestParams { struct ForestParams {
size_t n_classes; size_t n_classes;

View File

@ -26,7 +26,7 @@ then the default traits class of `::convex_hull_3()` is `Convex_hull_traits_3<R>
\cgalHeading{Implementation} \cgalHeading{Implementation}
The algorithm implemented by these functions is the quickhull algorithm of The algorithm implemented by these functions is the quickhull algorithm of
Barnard <I>et al.</I> \cgalCite{bdh-qach-96}. Barber <I>et al.</I> \cgalCite{bdh-qach-96}.
*/ */

View File

@ -100,7 +100,7 @@
, pages = "617--625" , pages = "617--625"
, note = "SIGGRAPH '2005 Conference Proceedings" , note = "SIGGRAPH '2005 Conference Proceedings"
, volume = 24 , volume = 24
, url = "https://hal.inria.fr/inria-00226418" , url = "https://inria.hal.science/inria-00226418"
, geombib = "not yet" , geombib = "not yet"
} }
@ -157,7 +157,7 @@ Pion and Monique Teillaud and Mariette Yvinec"
@ARTICLE{cgal:bdt-hdcvd-14, @ARTICLE{cgal:bdt-hdcvd-14,
AUTHOR = {Mikhail Bogdanov and Olivier Devillers and Monique Teillaud}, AUTHOR = {Mikhail Bogdanov and Olivier Devillers and Monique Teillaud},
JOURNAL = {Journal of Computational Geometry}, JOURNAL = {Journal of Computational Geometry},
NOTE = {https://hal.inria.fr/hal-00961390}, NOTE = {https://inria.hal.science/hal-00961390},
PAGES = {56--85}, PAGES = {56--85},
TITLE = {Hyperbolic {Delaunay} complexes and {Voronoi} diagrams made practical}, TITLE = {Hyperbolic {Delaunay} complexes and {Voronoi} diagrams made practical},
VOLUME = {5}, VOLUME = {5},
@ -243,7 +243,7 @@ Pion and Monique Teillaud and Mariette Yvinec"
Boissonnat} Boissonnat}
, title = {Mesh Generation from 3D Multi-material Images} , title = {Mesh Generation from 3D Multi-material Images}
, pages = {283--290} , pages = {283--290}
, url = "https://hal.inria.fr/inria-00420228" , url = "https://inria.hal.science/inria-00420228"
, x-international-audience = "yes" , x-international-audience = "yes"
, x-proceedings = "yes" , x-proceedings = "yes"
} }
@ -257,7 +257,7 @@ Boissonnat}
, pages = "1455-14645" , pages = "1455-14645"
, volume = 28 , volume = 28
, year = 2009 , year = 2009
, url = "https://hal.inria.fr/inria-00413248" , url = "https://inria.hal.science/inria-00413248"
, x-international-audience = "yes" , x-international-audience = "yes"
, x-editorial-board = "yes" , x-editorial-board = "yes"
} }
@ -361,7 +361,7 @@ Boissonnat}
TITLE = {Delaunay triangulations on orientable surfaces of low genus}, TITLE = {Delaunay triangulations on orientable surfaces of low genus},
YEAR = {2016}, YEAR = {2016},
DOI = {10.4230/LIPIcs.SoCG.2016.20}, DOI = {10.4230/LIPIcs.SoCG.2016.20},
URL = {https://hal.inria.fr/hal-01276386} URL = {https://inria.hal.science/hal-01276386}
} }
@ -402,7 +402,7 @@ Boissonnat}
,school = "Universit\'e de {Nice-Sophia Antipolis}" ,school = "Universit\'e de {Nice-Sophia Antipolis}"
,address = "France" ,address = "France"
,year = 2010 ,year = 2010
,url = "https://tel.archives-ouvertes.fr/tel-00552215/" ,url = "https://theses.hal.science/tel-00552215/"
} }
@inproceedings{cgal:ccplr-redtp-10, @inproceedings{cgal:ccplr-redtp-10,
@ -539,13 +539,13 @@ note="Conference version: Symp. on Geometry Processing 2003"
@inproceedings{ cgal:ct-c3pt-09 @inproceedings{ cgal:ct-c3pt-09
, title = "Computing {3D} Periodic Triangulations" , title = "Computing {3D} Periodic Triangulations"
, author = "Manuel Caroli and Monique Teillaud" , author = "Manuel Caroli and Monique Teillaud"
, booktitle = "Proceedings 17th European Symposium on Algorithms" , booktitle = "Proceedings 17th European Symposium on Algorithms"
, nickname = "ESA'09" , nickname = "ESA'09"
, series = "Lecture Notes in Computer Science" , series = "Lecture Notes in Computer Science"
, year = 2009 , year = 2009
, volume = 5757 , volume = 5757
, pages = "37--48" , pages = "37--48"
, note = "Full version available as INRIA Research Report 6823 \url{https://hal.inria.fr/inria-00356871}" , note = "Full version available as INRIA Research Report 6823 \url{https://inria.hal.science/inria-00356871}"
} }
@inproceedings{cgal:pt-rs-14, @inproceedings{cgal:pt-rs-14,
@ -729,7 +729,7 @@ Mourrain and Monique Teillaud"
@article{cgal:dmsl-ssmrp-11, @article{cgal:dmsl-ssmrp-11,
author = {Digne, Julie and Morel, Jean-Michel and Souzani, Charyar-Mehdi and author = {Digne, Julie and Morel, Jean-Michel and Souzani, Charyar-Mehdi and
Lartigue, Claire}, Lartigue, Claire},
title = {Scale Space Meshing of Raw Data Point Sets}, title = {Scale Space Meshing of Raw Data Point Sets},
journal = {Computer Graphics Forum}, journal = {Computer Graphics Forum},
year = {2011}, year = {2011},
@ -741,13 +741,13 @@ Mourrain and Monique Teillaud"
} }
@inproceedings{ cgal:dp-eegpd-03 @inproceedings{ cgal:dp-eegpd-03
, author = "Olivier Devillers and Sylvain Pion" , author = "Olivier Devillers and Sylvain Pion"
, title = "Efficient Exact Geometric Predicates for {Delaunay} Triangulations" , title = "Efficient Exact Geometric Predicates for {Delaunay} Triangulations"
, booktitle = "Proc. 5th Workshop Algorithm Eng. Exper." , booktitle = "Proc. 5th Workshop Algorithm Eng. Exper."
, nickname = "ALENEX '03" , nickname = "ALENEX '03"
, year = 2003 , year = 2003
, pages = "37--44" , pages = "37--44"
, url = "https://hal.inria.fr/inria-00344517/" , url = "https://inria.hal.science/inria-00344517/"
} }
@article{ cgal:dpt-wt-02 @article{ cgal:dpt-wt-02
@ -766,7 +766,7 @@ Teillaud"
, author = "Olivier Devillers and Monique Teillaud" , author = "Olivier Devillers and Monique Teillaud"
, title = "Perturbations and Vertex Removal in a {3D Delaunay} Triangulation" , title = "Perturbations and Vertex Removal in a {3D Delaunay} Triangulation"
, booktitle = "Proc. 14th ACM-SIAM Sympos. Discrete Algorithms (SODA)" , booktitle = "Proc. 14th ACM-SIAM Sympos. Discrete Algorithms (SODA)"
, url = "https://hal.inria.fr/inria-00166710/" , url = "https://inria.hal.science/inria-00166710/"
, year = 2003 , year = 2003
, pages = "313-319" , pages = "313-319"
} }
@ -778,7 +778,7 @@ Teillaud"
, volume = 44 , volume = 44
, year = 2011 , year = 2011
, pages = "160--168" , pages = "160--168"
, url = "https://hal.archives-ouvertes.fr/inria-00560388/" , url = "https://theses.hal.science/inria-00560388/"
, doi = "10.1016/j.comgeo.2010.09.010" , doi = "10.1016/j.comgeo.2010.09.010"
} }
@ -845,7 +845,7 @@ Teillaud"
,school = "Universit\'e de {Nice-Sophia Antipolis}" ,school = "Universit\'e de {Nice-Sophia Antipolis}"
,address = "France" ,address = "France"
,year = 2003 ,year = 2003
,url = "https://tel.archives-ouvertes.fr/tel-00832487/" ,url = "https://theses.hal.science/tel-00832487/"
} }
@ -1230,7 +1230,7 @@ Teillaud"
TITLE = {{Implementing Delaunay triangulations of the Bolza surface}}, TITLE = {{Implementing Delaunay triangulations of the Bolza surface}},
YEAR = {2017}, YEAR = {2017},
DOI = {10.4230/LIPIcs.SoCG.2017.44}, DOI = {10.4230/LIPIcs.SoCG.2017.44},
URL = {https://hal.inria.fr/hal-01568002}, URL = {https://inria.hal.science/hal-01568002},
} }
@inproceedings{cgal:j-lrsspp-19, @inproceedings{cgal:j-lrsspp-19,
@ -1261,13 +1261,13 @@ Teillaud"
@InProceedings{ cgal:k-reisv-04, @InProceedings{ cgal:k-reisv-04,
author = {Menelaos I. Karavelas}, author = {Menelaos I. Karavelas},
title = {A robust and efficient implementation for the segment title = {A robust and efficient implementation for the segment
{V}oronoi diagram}, {V}oronoi diagram},
booktitle = {Proc. Internat. Symp. on Voronoi diagrams in Science booktitle = {Proc. Internat. Symp. on Voronoi diagrams in Science
and Engineering (VD2004)}, and Engineering (VD2004)},
pages = {51--62}, pages = {51--62},
year = {2004} year = {2004}
} }
@article{ cgal:k-rprnm-96 @article{ cgal:k-rprnm-96
@ -1599,12 +1599,12 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio
} }
@article{cgal:ml-cfsg-00 @article{cgal:ml-cfsg-00
, author = "G. Medioni and M. Lee and C. Tang" , author = "G. Medioni and M. Lee and C. Tang"
, title = "A Computational Framework for Segmentation and Grouping" , title = "A Computational Framework for Segmentation and Grouping"
, journal = "Elsevier Science" , journal = "Elsevier Science"
, year = 2000 , year = 2000
, pages = "" , pages = ""
, update = "12.13 afabri" , update = "12.13 afabri"
} }
@book{ cgal:m-cst-93 @book{ cgal:m-cst-93
@ -1887,28 +1887,28 @@ ABSTRACT = {We present the first complete, exact and efficient C++ implementatio
@article{cgal:btsag-asosr-16, @article{cgal:btsag-asosr-16,
TITLE = {{A Survey of Surface Reconstruction from Point Clouds}}, TITLE = {{A Survey of Surface Reconstruction from Point Clouds}},
AUTHOR = {Berger, Matthew and Tagliasacchi, Andrea and Seversky, Lee and Alliez, Pierre and Guennebaud, Gael and Levine, Joshua and Sharf, Andrei and Silva, Claudio}, AUTHOR = {Berger, Matthew and Tagliasacchi, Andrea and Seversky, Lee and Alliez, Pierre and Guennebaud, Gael and Levine, Joshua and Sharf, Andrei and Silva, Claudio},
URL = {https://hal.inria.fr/hal-01348404}, URL = {https://inria.hal.science/hal-01348404},
JOURNAL = {{Computer Graphics Forum}}, JOURNAL = {{Computer Graphics Forum}},
PUBLISHER = {{Wiley}}, PUBLISHER = {{Wiley}},
PAGES = {27}, PAGES = {27},
YEAR = {2016}, YEAR = {2016},
DOI = {10.1111/cgf.12802}, DOI = {10.1111/cgf.12802},
PDF = {https://hal.inria.fr/hal-01348404/file/survey-author.pdf}, PDF = {https://inria.hal.science/hal-01348404/file/survey-author.pdf},
HAL_ID = {hal-01348404}, HAL_ID = {hal-01348404},
HAL_VERSION = {v2} HAL_VERSION = {v2}
} }
@TechReport{ cgal:pabl-cco-07, @TechReport{ cgal:pabl-cco-07,
author = {Poudret, M. and Arnould, A. and Bertrand, Y. and Lienhardt, P.}, author = {Poudret, M. and Arnould, A. and Bertrand, Y. and Lienhardt, P.},
title = {Cartes Combinatoires Ouvertes.}, title = {Cartes Combinatoires Ouvertes.},
institution = {Laboratoire SIC E.A. 4103}, institution = {Laboratoire SIC E.A. 4103},
number = {2007-1}, number = {2007-1},
month = {October}, month = {October},
year = {2007}, year = {2007},
address = {F-86962 Futuroscope Cedex, France}, address = {F-86962 Futuroscope Cedex, France},
type = {Research Notes}, type = {Research Notes},
keywords = {cartes combinatoires, demi-ar{\^e}te, ar{\^e}te radiale}, keywords = {cartes combinatoires, demi-ar{\^e}te, ar{\^e}te radiale},
} }
@article{ cgal:pc-rdp-86 @article{ cgal:pc-rdp-86
@ -2293,7 +2293,7 @@ location = {Salt Lake City, Utah, USA}
, pages = "75:1-75:9" , pages = "75:1-75:9"
, note = "SIGGRAPH '2009 Conference Proceedings" , note = "SIGGRAPH '2009 Conference Proceedings"
, volume = "28(3)" , volume = "28(3)"
, url = "https://hal.inria.fr/inria-00359288" , url = "https://inria.hal.science/inria-00359288"
, geombib = "not yet" , geombib = "not yet"
, x-editorial-board = {yes} , x-editorial-board = {yes}
, x-proceedings = {yes} , x-proceedings = {yes}
@ -2332,7 +2332,7 @@ location = {Salt Lake City, Utah, USA}
,month = jun ,month = jun
,pages = {26--31} ,pages = {26--31}
,annote = {Inlining vector expressions and parameter passing ,annote = {Inlining vector expressions and parameter passing
of expressions at compile time. Template Metaprograms.} of expressions at compile time. Template Metaprograms.}
,update = "98.01 kettner" ,update = "98.01 kettner"
} }
@ -2354,7 +2354,7 @@ location = {Salt Lake City, Utah, USA}
,month = may ,month = may
,pages = {36--43} ,pages = {36--43}
,annote = {Prime numbers at compiler time, C++ programs at ,annote = {Prime numbers at compiler time, C++ programs at
compile time, control structures, local variables.} compile time, control structures, local variables.}
,update = "98.01 kettner" ,update = "98.01 kettner"
} }
@ -2422,7 +2422,7 @@ location = {Salt Lake City, Utah, USA}
@book{ cgal:w-impoo-94 @book{ cgal:w-impoo-94
,author = {Josie Wernicke} ,author = {Josie Wernicke}
,title = {The Inventor Mentor: Programming Object-Oriented ,title = {The Inventor Mentor: Programming Object-Oriented
3D Graphics with Open Inventor, Release 2} 3D Graphics with Open Inventor, Release 2}
,publisher = {Addison-Wesley} ,publisher = {Addison-Wesley}
,year = 1994 ,year = 1994
,update = "97.04 kettner" ,update = "97.04 kettner"
@ -2549,12 +2549,12 @@ url = "https://wscg.zcu.cz/wscg2003/Papers_2003/G67.pdf"
} }
@InProceedings{cgal:k-vdc-06, @InProceedings{cgal:k-vdc-06,
author = {Menelaos I. Karavelas}, author = {Menelaos I. Karavelas},
title = {Voronoi diagrams in {\sc Cgal}}, title = {Voronoi diagrams in {\sc Cgal}},
booktitle = {22nd European Symposium on Computational Geometry}, booktitle = {22nd European Symposium on Computational Geometry},
pages = {229--232}, pages = {229--232},
year = {2006}, year = {2006},
address = {Delphi, Greece}, address = {Delphi, Greece},
} }
@incollection{cgal:fhktww-a-07, @incollection{cgal:fhktww-a-07,
@ -2607,27 +2607,27 @@ url = "https://www.boost.org/community/exception_safety.html"
} }
@article{cgal:as-solri-92 @article{cgal:as-solri-92
, author = "F. Aurenhammer and O. Schwarzkopf" , author = "F. Aurenhammer and O. Schwarzkopf"
, title = "A simple on-line randomized incremental algorithm for computing higher order {Voronoi} diagrams" , title = "A simple on-line randomized incremental algorithm for computing higher order {Voronoi} diagrams"
, journal = "Internat. J. Comput. Geom. Appl." , journal = "Internat. J. Comput. Geom. Appl."
, volume = 2 , volume = 2
, year = 1992 , year = 1992
, pages = "363--381" , pages = "363--381"
, keywords = "Voronoi diagrams, geometric transforms, dynamization" , keywords = "Voronoi diagrams, geometric transforms, dynamization"
, succeeds = "as-solri-91" , succeeds = "as-solri-91"
, update = "93.09 aurenhammer, 93.05 schwarzkopf" , update = "93.09 aurenhammer, 93.05 schwarzkopf"
} }
@inproceedings{cgal:fy-okvd-01 @inproceedings{cgal:fy-okvd-01
, author = "Julia Fl{\"o}totto and Mariette Yvinec" , author = "Julia Fl{\"o}totto and Mariette Yvinec"
, title = "Order-$k$ {Voronoi} Diagrams" , title = "Order-$k$ {Voronoi} Diagrams"
, booktitle = "Abstracts 17th European Workshop Comput. Geom." , booktitle = "Abstracts 17th European Workshop Comput. Geom."
, nickname = "CG 2001" , nickname = "CG 2001"
, site = "Berlin" , site = "Berlin"
, publisher = "Freie Universit{\"a}t Berlin" , publisher = "Freie Universit{\"a}t Berlin"
, year = 2001 , year = 2001
, pages = "109--112" , pages = "109--112"
, update = "01.04 icking" , update = "01.04 icking"
} }
@proceedings{cgal:jlm-isgp-98, @proceedings{cgal:jlm-isgp-98,
@ -2768,7 +2768,7 @@ author = "Pedro M.M. de Castro and Frederic Cazals and Sebastien Loriot and Moni
, volume = "40" , volume = "40"
, number = "1" , number = "1"
, pages = "61-78" , pages = "61-78"
, url = "https://hal.inria.fr/inria-00344310/" , url = "https://inria.hal.science/inria-00344310/"
, doi = "10.1016/j.comgeo.2007.06.003" , doi = "10.1016/j.comgeo.2007.06.003"
, x-international-audience = "yes" , x-international-audience = "yes"
, x-editorial-board = "yes" , x-editorial-board = "yes"
@ -2788,7 +2788,7 @@ author = "Pedro M.M. de Castro and Frederic Cazals and Sebastien Loriot and Moni
, title = "Complexity of {Delaunay} triangulation for points on lower-dimensional polyhedra" , title = "Complexity of {Delaunay} triangulation for points on lower-dimensional polyhedra"
, booktitle = "Proc. 18th ACM-SIAM Sympos. Discrete Algorithms" , booktitle = "Proc. 18th ACM-SIAM Sympos. Discrete Algorithms"
, nickname = "SODA" , nickname = "SODA"
, url = "https://hal.inria.fr/inria-00182835/" , url = "https://inria.hal.science/inria-00182835/"
, year = 2007 , year = 2007
, pages = "1106--1113" , pages = "1106--1113"
} }
@ -2856,14 +2856,14 @@ ADDRESS = "Saarbr{\"u}cken, Germany"
} }
@InCollection{grlr-sturm-habicht-98, @InCollection{grlr-sturm-habicht-98,
author = {L.~Gonzalez-Vega and T.~Recio and H.~Lombardi and M.-F.~Roy}, author = {L.~Gonzalez-Vega and T.~Recio and H.~Lombardi and M.-F.~Roy},
title = {Sturm-Habicht Sequences, Determinants and Real Roots of Univariate Polynomials}, title = {Sturm-Habicht Sequences, Determinants and Real Roots of Univariate Polynomials},
booktitle = {Quantifier Elimination and Cylindrical Algebraic Decomposition}, booktitle = {Quantifier Elimination and Cylindrical Algebraic Decomposition},
pages = {300--316}, pages = {300--316},
publisher = {Springer}, publisher = {Springer},
year = 1998, year = 1998,
editor = {B.F.~Caviness and J.R.~Johnson}, editor = {B.F.~Caviness and J.R.~Johnson},
series = {Texts and Monographs in Symbolic Computation} series = {Texts and Monographs in Symbolic Computation}
} }
@inproceedings{Sorkine2007AsRigidAs, @inproceedings{Sorkine2007AsRigidAs,
@ -3213,14 +3213,14 @@ pages = "207--221"
@techreport{frey:inria-00069921, @techreport{frey:inria-00069921,
TITLE = {{MEDIT : An interactive Mesh visualization Software}}, TITLE = {{MEDIT : An interactive Mesh visualization Software}},
AUTHOR = {Frey, Pascal}, AUTHOR = {Frey, Pascal},
URL = {https://hal.inria.fr/inria-00069921}, URL = {https://inria.hal.science/inria-00069921},
NUMBER = {RT-0253}, NUMBER = {RT-0253},
PAGES = {41}, PAGES = {41},
INSTITUTION = {{INRIA}}, INSTITUTION = {{INRIA}},
YEAR = {2001}, YEAR = {2001},
MONTH = Dec, MONTH = Dec,
KEYWORDS = {MESH ; VISUALIZATION ; POST-PROCESSING}, KEYWORDS = {MESH ; VISUALIZATION ; POST-PROCESSING},
PDF = {https://hal.inria.fr/inria-00069921/file/RT-0253.pdf}, PDF = {https://inria.hal.science/inria-00069921/file/RT-0253.pdf},
HAL_ID = {inria-00069921}, HAL_ID = {inria-00069921},
HAL_VERSION = {v1} HAL_VERSION = {v1}
} }

File diff suppressed because it is too large Load Diff

View File

@ -8,5 +8,5 @@ is available in:
Mikhail Bogdanov, Olivier Devillers, and Monique Teillaud. Hyperbolic Mikhail Bogdanov, Olivier Devillers, and Monique Teillaud. Hyperbolic
Delaunay complexes and Voronoi diagrams made practical. Journal of Delaunay complexes and Voronoi diagrams made practical. Journal of
Computational Geometry, 5(1):5685, 2014. Computational Geometry, 5(1):5685, 2014.
URL: https://hal.inria.fr/hal-00961390, URL: https://inria.hal.science/hal-00961390,
doi:10.20382/jocg.v5i1a4. doi:10.20382/jocg.v5i1a4.

View File

@ -1,7 +1,6 @@
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine
\ingroup kernel_classes2 \ingroup kernel_classes2
The class `Aff_transformation_2` represents two-dimensional affine transformations. The class `Aff_transformation_2` represents two-dimensional affine transformations.

View File

@ -2,7 +2,6 @@ namespace CGAL {
/*! /*!
\ingroup kernel_classes3 \ingroup kernel_classes3
\ingroup kernel_affine
The class `Aff_transformation_3` represents three-dimensional affine transformations. The class `Aff_transformation_3` represents three-dimensional affine transformations.
The general form of an affine transformation is based on a homogeneous The general form of an affine transformation is based on a homogeneous

View File

@ -2,7 +2,7 @@
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine \ingroup PkgKernel23Ref
Tag class for affine transformations. Tag class for affine transformations.
@ -24,7 +24,7 @@ public:
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine \ingroup PkgKernel23Ref
Tag class for affine transformations. Tag class for affine transformations.
@ -46,7 +46,7 @@ public:
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine \ingroup PkgKernel23Ref
Tag class for affine transformations. Tag class for affine transformations.
@ -68,7 +68,7 @@ public:
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine \ingroup PkgKernel23Ref
Tag class for affine transformations. Tag class for affine transformations.
@ -90,7 +90,7 @@ public:
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup kernel_affine \ingroup PkgKernel23Ref
Tag class for affine transformations. Tag class for affine transformations.

View File

@ -12,7 +12,7 @@ function are available.
/*! /*!
\addtogroup do_intersect_linear_grp \addtogroup do_intersect_linear_grp
\ingroup do_intersect \ingroup do_intersect_grp
\sa `do_intersect_circular_grp` \sa `do_intersect_circular_grp`
\sa `do_intersect_spherical_grp` \sa `do_intersect_spherical_grp`
@ -79,7 +79,7 @@ function are available.
/*! /*!
\addtogroup intersection_linear_grp \addtogroup intersection_linear_grp
\ingroup intersection \ingroup intersection_grp
*/ */
/// @{ /// @{

View File

@ -31,7 +31,7 @@ public:
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup PkgMinkowskiSum2Classes \ingroup PkgMinkowskiSum2Ref
The `Hertel_Mehlhorn_convex_decomposition_2` class implements the approximation algorithm of Hertel The `Hertel_Mehlhorn_convex_decomposition_2` class implements the approximation algorithm of Hertel
and Mehlhorn for decomposing a polygon into convex and Mehlhorn for decomposing a polygon into convex

View File

@ -8,15 +8,4 @@
<enableAddressBar>false</enableAddressBar> <enableAddressBar>false</enableAddressBar>
<enableFilterFunctionality>false</enableFilterFunctionality> <enableFilterFunctionality>false</enableFilterFunctionality>
</assistant> </assistant>
<docFiles>
<generate>
<file>
<input>Periodic_3_triangulation_3.qhp</input>
<output>Periodic_3_triangulation_3.qch</output>
</file>
</generate>
<register>
<file>Periodic_3_triangulation_3.qch</file>
</register>
</docFiles>
</QHelpCollectionProject> </QHelpCollectionProject>

View File

@ -8,15 +8,4 @@
<enableAddressBar>false</enableAddressBar> <enableAddressBar>false</enableAddressBar>
<enableFilterFunctionality>false</enableFilterFunctionality> <enableFilterFunctionality>false</enableFilterFunctionality>
</assistant> </assistant>
<docFiles>
<generate>
<file>
<input>Periodic_Lloyd_3.qhp</input>
<output>Periodic_Lloyd_3.qch</output>
</file>
</generate>
<register>
<file>Periodic_Lloyd_3.qch</file>
</register>
</docFiles>
</QHelpCollectionProject> </QHelpCollectionProject>

View File

@ -553,9 +553,6 @@ create_mst_graph(
For this reason it should not be called on sorted containers. For this reason it should not be called on sorted containers.
It is based on \cgalCite{cgal:hddms-srup-92}. It is based on \cgalCite{cgal:hddms-srup-92}.
\warning This function may fail when Boost version 1.54 is used,
because of the following bug: https://svn.boost.org/trac/boost/ticket/9012
\pre Normals must be unit vectors \pre Normals must be unit vectors
\pre `k >= 2` \pre `k >= 2`

View File

@ -1150,6 +1150,9 @@ bool adapt_patch(std::vector<std::vector<Point> >& point_patch,
put(local_vpm, v, projector(get(local_vpm, v))); put(local_vpm, v, projector(get(local_vpm, v)));
// The projector can create degenerate faces // The projector can create degenerate faces
for (halfedge_descriptor h : border_hedges)
if (is_degenerate_triangle_face(face(opposite(h, local_mesh), local_mesh), local_mesh))
return !has_SI;
if(!remove_degenerate_faces(local_mesh)) if(!remove_degenerate_faces(local_mesh))
return !has_SI; return !has_SI;
@ -2031,7 +2034,7 @@ remove_self_intersections_one_step(std::set<typename boost::graph_traits<Triangl
#ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_OUTPUT_INTERMEDIATE_FULL_MESH #ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_OUTPUT_INTERMEDIATE_FULL_MESH
fname = "results/mesh_at_step_"+std::to_string(step)+"_CC_"+std::to_string(cc_id)+".off"; fname = "results/mesh_at_step_"+std::to_string(step)+"_CC_"+std::to_string(cc_id)+".off";
CGAL::IO::write_polygon_mesh(fname, tmesh, CGAL::parameters::stream_precision); CGAL::IO::write_polygon_mesh(fname, tmesh, CGAL::parameters::stream_precision(17));
#endif #endif
// expand the region to be filled // expand the region to be filled

View File

@ -49,21 +49,3 @@
#include <CGAL/Polygon_mesh_processing/smooth_mesh.h> #include <CGAL/Polygon_mesh_processing/smooth_mesh.h>
#include <CGAL/Polygon_mesh_processing/smooth_shape.h> #include <CGAL/Polygon_mesh_processing/smooth_shape.h>
#include <CGAL/Polygon_mesh_processing/manifoldness.h> #include <CGAL/Polygon_mesh_processing/manifoldness.h>
// the named parameter header being not documented the doc is put here for now
#ifdef DOXYGEN_RUNNING
namespace CGAL {
namespace Polygon_mesh_processing {
namespace parameters {
/*! \ingroup namedparameters
\deprecated This function is deprecated and `default_values()` should be used instead.
This function can be used to indicate that all optional named parameters
to be used are the default ones. This is particularly useful when a function
requires more than one sequence of named parameters and default values is
fine only for some of them.
*/
unspecified_type all_default();
} } } // end of namespace CGAL::Polygon_mesh_processing::parameters
#endif

View File

@ -32,7 +32,7 @@
namespace CGAL { namespace CGAL {
/*! /*!
\ingroup PkgPolygonalSurfaceReconstruction \ingroup PkgPolygonalSurfaceReconstructionRef
\brief \brief

View File

@ -270,7 +270,9 @@ private:
Word_type image_data(int i, int j, int k) Word_type image_data(int i, int j, int k)
{ {
if ( i>=0 && i<image_->xdim() && j>=0 && j<image_->ydim() && k>=0 && k<image_->zdim() ) if ( i>=0 && static_cast<std::size_t>(i)<image_->xdim() &&
j>=0 && static_cast<std::size_t>(j)<image_->ydim() &&
k>=0 && static_cast<std::size_t>(k)<image_->zdim() )
return image_->value(i, j, k); return image_->value(i, j, k);
else else
return 0; return 0;

View File

@ -34,14 +34,14 @@ if(ITK_FOUND)
target_link_libraries(mesh_3_plugin PUBLIC CGAL::ITK_support) target_link_libraries(mesh_3_plugin PUBLIC CGAL::ITK_support)
endif(ITK_FOUND) endif(ITK_FOUND)
find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage NO_MODULE) find_package(VTK QUIET COMPONENTS vtkImagingGeneral vtkIOImage vtkIOXML NO_MODULE)
if(VTK_FOUND) if(VTK_FOUND)
if(VTK_USE_FILE) if(VTK_USE_FILE)
include(${VTK_USE_FILE}) include(${VTK_USE_FILE})
endif() endif()
if("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5) if("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5)
if(TARGET VTK::IOImage) if(TARGET VTK::IOImage)
set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral) set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral VTK::IOXML)
endif() endif()
if(NOT VTK_LIBRARIES) if(NOT VTK_LIBRARIES)
message(STATUS "NOTICE: DICOM files (.dcm) require the VTK libraries, and will not be readable.") message(STATUS "NOTICE: DICOM files (.dcm) require the VTK libraries, and will not be readable.")

View File

@ -54,8 +54,10 @@
#include <CGAL/IO/read_vtk_image_data.h> #include <CGAL/IO/read_vtk_image_data.h>
#include <vtkNew.h> #include <vtkNew.h>
#include <vtkSmartPointer.h>
#include <vtkStringArray.h> #include <vtkStringArray.h>
#include <vtkImageData.h> #include <vtkImageData.h>
#include <vtkXMLImageDataReader.h>
#include <vtkDICOMImageReader.h> #include <vtkDICOMImageReader.h>
#include <vtkBMPReader.h> #include <vtkBMPReader.h>
#include <vtkNIFTIImageReader.h> #include <vtkNIFTIImageReader.h>
@ -77,6 +79,23 @@
#include <iostream> #include <iostream>
#include <locale> #include <locale>
template <class vtkReader>
bool
load_vtk_file(QFileInfo fileinfo, Image* image)
{
#ifdef CGAL_USE_VTK
vtkNew<vtkReader> reader;
reader->SetFileName(fileinfo.filePath().toUtf8());
reader->Update();
auto vtk_image = reader->GetOutput();
vtk_image->Print(std::cerr);
*image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data
return true;
#else
return false;
#endif
}
// Covariant return types don't work for scalar types and we cannot // Covariant return types don't work for scalar types and we cannot
// have templates here, hence this unfortunate hack. // have templates here, hence this unfortunate hack.
@ -1089,6 +1108,7 @@ QString Io_image_plugin::nameFilters() const
return QString("Inrimage files (*.inr *.inr.gz) ;; " return QString("Inrimage files (*.inr *.inr.gz) ;; "
"Analyze files (*.hdr *.img *.img.gz) ;; " "Analyze files (*.hdr *.img *.img.gz) ;; "
"Stanford Exploration Project files (*.H *.HH) ;; " "Stanford Exploration Project files (*.H *.HH) ;; "
"VTK image files (*.vti) ;; "
"NRRD image files (*.nrrd) ;; " "NRRD image files (*.nrrd) ;; "
"NIFTI image files (*.nii *.nii.gz)"); "NIFTI image files (*.nii *.nii.gz)");
} }
@ -1121,6 +1141,7 @@ void convert(Image* image)
image->image()->wordKind = WK_FLOAT; image->image()->wordKind = WK_FLOAT;
} }
QList<Scene_item*> QList<Scene_item*>
Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene) Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene)
{ {
@ -1128,39 +1149,39 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene)
QApplication::restoreOverrideCursor(); QApplication::restoreOverrideCursor();
Image* image = new Image; Image* image = new Image;
// read a nrrd file QString warningMessage;
if(fileinfo.suffix() == "nrrd") // read a vti file
if(fileinfo.suffix() == "vti")
{ {
#ifdef CGAL_USE_VTK #ifdef CGAL_USE_VTK
vtkNew<vtkNrrdReader> reader; ok = load_vtk_file<vtkXMLImageDataReader>(fileinfo, image);
reader->SetFileName(fileinfo.filePath().toUtf8());
reader->Update();
auto vtk_image = reader->GetOutput();
vtk_image->Print(std::cerr);
*image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data
#else #else
CGAL::Three::Three::warning("VTK is required to read NRRD files"); ok = false;
delete image; warningMessage = "VTK is required to read VTI files";
return QList<Scene_item*>(); #endif
}
// read a nrrd file
else if(fileinfo.suffix() == "nrrd")
{
#ifdef CGAL_USE_VTK
ok = load_vtk_file<vtkNrrdReader>(fileinfo, image);
#else
ok = false;
warningMessage = "VTK is required to read NRRD files";
#endif #endif
} }
// read a NIFTI file // read a NIFTI file
if(fileinfo.suffix() == "nii" else if(fileinfo.suffix() == "nii"
|| ( fileinfo.suffix() == "gz" || ( fileinfo.suffix() == "gz"
&& fileinfo.fileName().endsWith(QString(".nii.gz"), Qt::CaseInsensitive))) && fileinfo.fileName().endsWith(QString(".nii.gz"), Qt::CaseInsensitive)))
{ {
#ifdef CGAL_USE_VTK #ifdef CGAL_USE_VTK
vtkNew<vtkNIFTIImageReader> reader; ok = load_vtk_file<vtkNIFTIImageReader>(fileinfo, image);
reader->SetFileName(fileinfo.filePath().toUtf8());
reader->Update();
auto vtk_image = reader->GetOutput();
vtk_image->Print(std::cerr);
*image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data
#else #else
CGAL::Three::Three::warning("VTK is required to read NIfTI files"); ok = false;
delete image; warningMessage = "VTK is required to read NifTI files";
return QList<Scene_item*>();
#endif #endif
} }
@ -1267,11 +1288,16 @@ Io_image_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_scene)
if(!success) if(!success)
{ {
ok = false; ok = false;
delete image;
return QList<Scene_item*>();
} }
} }
if (!ok) {
if (warningMessage.length() > 0)
CGAL::Three::Three::warning(warningMessage);
delete image;
return QList<Scene_item*>();
}
// Get display precision // Get display precision
QDialog dialog; QDialog dialog;
ui.setupUi(&dialog); ui.setupUi(&dialog);

View File

@ -368,9 +368,9 @@ std::optional<QString> Mesh_3_plugin::get_items_or_return_error_string() const
{ {
auto poly_items_ptr = std::get_if<Polyhedral_mesh_items>(&items.value()); auto poly_items_ptr = std::get_if<Polyhedral_mesh_items>(&items.value());
auto image_items_ptr = std::get_if<Image_mesh_items>(&items.value()); auto image_items_ptr = std::get_if<Image_mesh_items>(&items.value());
if(poly_items_ptr && poly_items_ptr == nullptr) if(poly_items_ptr != nullptr)
poly_items_ptr->polylines_item = polylines_item; poly_items_ptr->polylines_item = polylines_item;
else if(image_items_ptr && image_items_ptr == nullptr) else if(image_items_ptr != nullptr )
image_items_ptr->polylines_item = polylines_item; image_items_ptr->polylines_item = polylines_item;
} }
@ -677,6 +677,8 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
ui.protectEdges->addItem(boundary_only.first, v(boundary_only.second)); ui.protectEdges->addItem(boundary_only.first, v(boundary_only.second));
} else } else
ui.protectEdges->addItem(sharp_edges.first, v(sharp_edges.second)); ui.protectEdges->addItem(sharp_edges.first, v(sharp_edges.second));
if (polylines_item != nullptr)
ui.protectEdges->addItem(input_polylines.first, v(input_polylines.second));
} else if (items->index() == IMAGE_MESH_ITEMS) { } else if (items->index() == IMAGE_MESH_ITEMS) {
if (polylines_item != nullptr) { if (polylines_item != nullptr) {
ui.protectEdges->addItem(input_polylines.first, QVariant::fromValue(input_polylines.second)); ui.protectEdges->addItem(input_polylines.first, QVariant::fromValue(input_polylines.second));
@ -743,6 +745,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
const auto pe_flags = ui.protectEdges->currentData().value<Protection_flags>(); const auto pe_flags = ui.protectEdges->currentData().value<Protection_flags>();
protect_borders = ui.protect->isChecked() && pe_flags.testFlag(BORDERS); protect_borders = ui.protect->isChecked() && pe_flags.testFlag(BORDERS);
protect_features = ui.protect->isChecked() && pe_flags.testFlag(FEATURES); protect_features = ui.protect->isChecked() && pe_flags.testFlag(FEATURES);
const bool protect_polylines = ui.protect->isChecked() && polylines_item != nullptr;
const bool detect_connected_components = ui.detectComponents->isChecked(); const bool detect_connected_components = ui.detectComponents->isChecked();
const int manifold = (ui.manifoldCheckBox->isChecked() ? 1 : 0) + const int manifold = (ui.manifoldCheckBox->isChecked() ? 1 : 0) +
@ -789,7 +792,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
sm_items.removeAll(make_not_null(bounding_sm_item)); sm_items.removeAll(make_not_null(bounding_sm_item));
} }
Scene_polylines_item::Polylines_container plc; Scene_polylines_item::Polylines_container polylines_empty_container;
SMesh* bounding_polyhedron = (bounding_sm_item == nullptr) SMesh* bounding_polyhedron = (bounding_sm_item == nullptr)
? nullptr ? nullptr
: bounding_sm_item->polyhedron(); : bounding_sm_item->polyhedron();
@ -825,7 +828,7 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
{ {
thread = cgal_code_mesh_3( thread = cgal_code_mesh_3(
polyhedrons, polyhedrons,
(polylines_item == nullptr) ? plc : polylines_item->polylines, protect_polylines ? polylines_item->polylines : polylines_empty_container,
bounding_polyhedron, bounding_polyhedron,
item_name, item_name,
angle, angle,
@ -892,11 +895,11 @@ void Mesh_3_plugin::mesh_3(const Mesh_type mesh_type,
? image_item->image_weights() ? image_item->image_weights()
: nullptr; : nullptr;
Scene_polylines_item::Polylines_container plc; Scene_polylines_item::Polylines_container polylines_empty_container;
thread = cgal_code_mesh_3( thread = cgal_code_mesh_3(
pImage, pImage,
(img_polylines_item == nullptr) ? plc : img_polylines_item->polylines, (img_polylines_item == nullptr) ? polylines_empty_container : img_polylines_item->polylines,
angle, angle,
facets_sizing, facets_sizing,
facets_min_sizing, facets_min_sizing,

View File

@ -973,7 +973,7 @@ void Scene_edit_box_item_priv::remodel_box(const QVector3D &dir)
Q_FOREACH(Scene_edit_box_item::vertex* selected_vertex, selected_vertices ) Q_FOREACH(Scene_edit_box_item::vertex* selected_vertex, selected_vertices )
{ {
int id = selected_vertex->id; int id = selected_vertex->id;
CGAL_assume(id<8); CGAL_assume(id<8 && id >=0);
*selected_vertex->x = applyX(id, last_pool[id][0], dir.x()); *selected_vertex->x = applyX(id, last_pool[id][0], dir.x());
*selected_vertex->y = applyY(id, last_pool[id][1], dir.y()); *selected_vertex->y = applyY(id, last_pool[id][1], dir.y());
*selected_vertex->z = applyZ(id, last_pool[id][2], dir.z()); *selected_vertex->z = applyZ(id, last_pool[id][2], dir.z());

View File

@ -370,7 +370,7 @@ struct Scene_triangulation_3_item_priv {
is_aabb_tree_built = false; is_aabb_tree_built = false;
alphaSlider = NULL; alphaSlider = NULL;
is_filterable = true; is_filterable = true;
memset(visible_biteset, 0xFFFF, Scene_triangulation_3_item::number_of_bitset * sizeof(uint)); // all bits set to 1 visible_bitset.fill(0xFFFFFFFF);
} }
void computeIntersection(const Primitive& facet); void computeIntersection(const Primitive& facet);
void fill_aabb_tree() { void fill_aabb_tree() {
@ -528,7 +528,7 @@ struct Scene_triangulation_3_item_priv {
QVector<QColor> colors; QVector<QColor> colors;
QVector<QColor> colors_subdomains; QVector<QColor> colors_subdomains;
boost::dynamic_bitset<> visible_subdomain; boost::dynamic_bitset<> visible_subdomain;
std::bitset<32> visible_biteset[Scene_triangulation_3_item::number_of_bitset]; std::array<std::bitset<32>, Scene_triangulation_3_item::number_of_bitset> visible_bitset;
bool show_tetrahedra; bool show_tetrahedra;
bool cut_plane_enabled; bool cut_plane_enabled;
bool is_aabb_tree_built; bool is_aabb_tree_built;
@ -1054,9 +1054,11 @@ void Scene_triangulation_3_item::draw(CGAL::Three::Viewer_interface* viewer) con
program->bind(); program->bind();
if(d->is_filterable) if(d->is_filterable)
{ {
GLuint visible_bitset_ulong[number_of_bitset]; std::array<GLuint, number_of_bitset> visible_bitset_ulong;
memcpy(visible_bitset_ulong, d->visible_biteset, number_of_bitset * sizeof(uint)); std::transform(d->visible_bitset.cbegin(), d->visible_bitset.cend(), visible_bitset_ulong.begin(),
program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong, number_of_bitset); [](const std::bitset<32>& bitset) { return bitset.to_ulong(); }
);
program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong.data(), number_of_bitset);
} }
program->setUniformValue("is_filterable", d->is_filterable); program->setUniformValue("is_filterable", d->is_filterable);
program->release(); program->release();
@ -1142,9 +1144,11 @@ void Scene_triangulation_3_item::drawEdges(CGAL::Three::Viewer_interface* viewer
program->bind(); program->bind();
if(d->is_filterable) if(d->is_filterable)
{ {
GLuint visible_bitset_ulong[number_of_bitset]; std::array<GLuint, number_of_bitset> visible_bitset_ulong;
memcpy(visible_bitset_ulong, d->visible_biteset, number_of_bitset * sizeof(uint)); std::transform(d->visible_bitset.cbegin(), d->visible_bitset.cend(), visible_bitset_ulong.begin(),
program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong, number_of_bitset); [](const std::bitset<32>& bitset) { return bitset.to_ulong(); }
);
program->setUniformValueArray("is_visible_bitset", visible_bitset_ulong.data(), number_of_bitset);
} }
program->setUniformValue("is_filterable", d->is_filterable); program->setUniformValue("is_filterable", d->is_filterable);
program->release(); program->release();
@ -2154,7 +2158,7 @@ QColor Scene_triangulation_3_item::getSubdomainIndexColor(int i) const
void Scene_triangulation_3_item::resetVisibleSubdomain() void Scene_triangulation_3_item::resetVisibleSubdomain()
{ {
d->visible_subdomain.set(); d->visible_subdomain.set();
memset(d->visible_biteset, 0xFFFF, number_of_bitset * sizeof(uint)); d->visible_bitset.fill(0xFFFFFFFF);
} }
void Scene_triangulation_3_item::switchVisibleSubdomain(int id) void Scene_triangulation_3_item::switchVisibleSubdomain(int id)
@ -2164,7 +2168,7 @@ void Scene_triangulation_3_item::switchVisibleSubdomain(int id)
int i = compact_id/32; int i = compact_id/32;
int j = compact_id%32; int j = compact_id%32;
d->visible_biteset[i][j] = d->visible_subdomain[id]; d->visible_bitset[i][j] = d->visible_subdomain[id];
} }
bool Scene_triangulation_3_item::isVisibleSubdomain(int id) const bool Scene_triangulation_3_item::isVisibleSubdomain(int id) const

View File

@ -56,10 +56,7 @@ bool compute_filtering_visibility() {
uint j2 = domain2%32u; uint j2 = domain2%32u;
uint visible1 = uint(is_visible_bitset[i1]); uint visible1 = uint(is_visible_bitset[i1]);
uint visible2 = uint(is_visible_bitset[i2]); uint visible2 = uint(is_visible_bitset[i2]);
if(((visible1>>j1)&1u) == 0u && ((visible2>>j2)&1u) == 0u) return ((visible1>>j1)&1u) == 0u && ((visible2>>j2)&1u) == 0u;
{
discard;
}
} }
else else
return false; return false;

View File

@ -298,7 +298,7 @@ private:
/*! /*!
\ingroup PkgSolverInterfaceRefLS \ingroup PkgSolverInterfaceLS
The class `Eigen_sparse_symmetric_matrix` is a wrapper around `Eigen` matrix type The class `Eigen_sparse_symmetric_matrix` is a wrapper around `Eigen` matrix type
<a href="https://eigen.tuxfamily.org/dox/classEigen_1_1SparseMatrix.html">`Eigen::SparseMatrix` </a> <a href="https://eigen.tuxfamily.org/dox/classEigen_1_1SparseMatrix.html">`Eigen::SparseMatrix` </a>

View File

@ -495,7 +495,7 @@ A precise specification of the format is available
The Medit format, using file extension `.mesh`, is a format used by the Medit software. The Medit format, using file extension `.mesh`, is a format used by the Medit software.
In \cgal, it is used to represent 3D meshes. In \cgal, it is used to represent 3D meshes.
A precise specification of the format is available <a href="https://hal.inria.fr/inria-00069921/document">in this report</a>, A precise specification of the format is available <a href="https://inria.hal.science/inria-00069921/document">in this report</a>,
in the appendices (section 7.2.1, page 36). in the appendices (section 7.2.1, page 36).
Only the `CGAL::Mesh_complex_3_in_triangulation_3` \cgal data structure can be exported into `.mesh` Only the `CGAL::Mesh_complex_3_in_triangulation_3` \cgal data structure can be exported into `.mesh`

View File

@ -11,7 +11,7 @@
// Author(s) : Mael Rouxel-Labbé // Author(s) : Mael Rouxel-Labbé
/** /**
* \ingroup PkgSurfaceMeshParameterization * \ingroup PkgSurfaceMeshParameterizationRef
* \file CGAL/surface_mesh_parameterization.h * \file CGAL/surface_mesh_parameterization.h
* Convenience header file including the headers for all * Convenience header file including the headers for all
* the free functions of this package. * the free functions of this package.
@ -34,4 +34,3 @@
#include <CGAL/Surface_mesh_parameterization/Circular_border_parameterizer_3.h> #include <CGAL/Surface_mesh_parameterization/Circular_border_parameterizer_3.h>
#include <CGAL/Surface_mesh_parameterization/Square_border_parameterizer_3.h> #include <CGAL/Surface_mesh_parameterization/Square_border_parameterizer_3.h>
#include <CGAL/Surface_mesh_parameterization/Two_vertices_parameterizer_3.h> #include <CGAL/Surface_mesh_parameterization/Two_vertices_parameterizer_3.h>

View File

@ -530,7 +530,7 @@ private:
std::cout << "\t vertices = " << nbv << std::endl; std::cout << "\t vertices = " << nbv << std::endl;
CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension( CGAL::Tetrahedral_remeshing::debug::dump_vertices_by_dimension(
m_c3t3.triangulation(), "c3t3_vertices_"); m_c3t3.triangulation(), "0-c3t3_vertices_after_init_");
CGAL::Tetrahedral_remeshing::debug::check_surface_patch_indices(m_c3t3); CGAL::Tetrahedral_remeshing::debug::check_surface_patch_indices(m_c3t3);
#endif #endif
} }

View File

@ -392,15 +392,14 @@ void tetrahedral_isotropic_remeshing(
= choose_parameter(get_parameter(np, internal_np::smooth_constrained_edges), = choose_parameter(get_parameter(np, internal_np::smooth_constrained_edges),
false); false);
typedef typename Tr::Cell_handle Cell_handle;
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <
internal_np::cell_selector_t, internal_np::cell_selector_t,
NamedParameters, NamedParameters,
Constant_property_map<Cell_handle, bool>//default Tetrahedral_remeshing::internal::All_cells_selected<Tr>//default
> ::type SelectionFunctor; > ::type SelectionFunctor;
SelectionFunctor cell_select SelectionFunctor cell_select
= choose_parameter(get_parameter(np, internal_np::cell_selector), = choose_parameter(get_parameter(np, internal_np::cell_selector),
Constant_property_map<Cell_handle, bool>(true)); Tetrahedral_remeshing::internal::All_cells_selected<Tr>());
typedef std::pair<typename Tr::Vertex_handle, typename Tr::Vertex_handle> Edge_vv; typedef std::pair<typename Tr::Vertex_handle, typename Tr::Vertex_handle> Edge_vv;
typedef typename internal_np::Lookup_named_param_def < typedef typename internal_np::Lookup_named_param_def <

View File

@ -742,8 +742,8 @@ The class `Regular_triangulation_2<Traits, Tds>`
is designed to maintain the is designed to maintain the
regular triangulation of a set of \f$ 2d\f$ weighted points. regular triangulation of a set of \f$ 2d\f$ weighted points.
It derives from the class `Triangulation_2<Traits, Tds>`. It derives from the class `Triangulation_2<Traits, Tds>`.
The functions `insert` and The functions `insert()` and
`remove` are overwritten to handle weighted points `remove()` are overwritten to handle weighted points
and maintain the regular and maintain the regular
property. property.
The function `move()` is not The function `move()` is not
@ -1184,7 +1184,7 @@ classes.
The class `Triangulation_hierarchy_2<Tr>` inherits from the The class `Triangulation_hierarchy_2<Tr>` inherits from the
triangulation type passed as template parameter `Tr`. triangulation type passed as template parameter `Tr`.
The `insert`, `move`, and `remove` member functions The `insert()`, `move()`, and `remove()` member functions
are overwritten to update the data structure at each operation. are overwritten to update the data structure at each operation.
The locate queries are also overwritten to take advantage of the data The locate queries are also overwritten to take advantage of the data
structure for a fast processing. structure for a fast processing.
@ -1327,7 +1327,7 @@ data structure.
The most efficient method to insert (weighted) points in a The most efficient method to insert (weighted) points in a
Delaunay (or regular) triangulation is to provide an iterator Delaunay (or regular) triangulation is to provide an iterator
range over (weighted) points to the insert function. However, an iterator range of range over (weighted) points to the `insert()` function. However, an iterator range of
(weighted) points does not allow the user to set different information to each vertex. (weighted) points does not allow the user to set different information to each vertex.
To solve this problem, in the case the vertex type of the triangulation To solve this problem, in the case the vertex type of the triangulation
is a model of the concept `TriangulationVertexBaseWithInfo_2` is a model of the concept `TriangulationVertexBaseWithInfo_2`
@ -1339,7 +1339,7 @@ of the corresponding point given in the range.
\subsection Triangulation_2UsinganIteratorOverPairs Using an Iterator Over Pairs \subsection Triangulation_2UsinganIteratorOverPairs Using an Iterator Over Pairs
Each point and its information are gathered into a pair. We provide Each point and its information are gathered into a pair. We provide
the `insert` function of the triangulation with a range of such pairs. the `insert()` function of the triangulation with a range of such pairs.
\cgalExample{Triangulation_2/info_insert_with_pair_iterator_2.cpp} \cgalExample{Triangulation_2/info_insert_with_pair_iterator_2.cpp}
\subsection Triangulation_2UsingtheBoostZipIterator Using the Boost Zip Iterator \subsection Triangulation_2UsingtheBoostZipIterator Using the Boost Zip Iterator

View File

@ -2066,7 +2066,7 @@ Regular_triangulation_3<Gt,Tds,Lds>::
side_of_power_sphere(Cell_handle c, const Weighted_point& p, bool perturb) const side_of_power_sphere(Cell_handle c, const Weighted_point& p, bool perturb) const
{ {
CGAL_precondition(dimension() == 3); CGAL_precondition(dimension() == 3);
int i3; int i3=3;
if(! c->has_vertex(infinite_vertex(), i3)) if(! c->has_vertex(infinite_vertex(), i3))
{ {
return Bounded_side(side_of_oriented_power_sphere(c->vertex(0)->point(), return Bounded_side(side_of_oriented_power_sphere(c->vertex(0)->point(),
@ -2175,7 +2175,7 @@ side_of_power_circle(Cell_handle c, int i, const Weighted_point& p,
bool perturb) const bool perturb) const
{ {
CGAL_precondition(dimension() >= 2); CGAL_precondition(dimension() >= 2);
int i3 = 5; int i3 = 3;
if(dimension() == 2) if(dimension() == 2)
{ {
CGAL_precondition(i == 3); CGAL_precondition(i == 3);