mirror of https://github.com/CGAL/cgal
Merge remote-tracking branch 'cgal/releases/CGAL-4.8-branch'
This commit is contained in:
commit
6326ea2372
|
|
@ -1,51 +1,14 @@
|
||||||
Subject: CGAL 4.8 Released, Computational Geometry Algorithms Library
|
Subject: CGAL 4.8.1 Released, Computational Geometry Algorithms Library
|
||||||
Content-Type: text/plain; charset="utf-8"
|
Content-Type: text/plain; charset="utf-8"
|
||||||
Body:
|
Body:
|
||||||
|
|
||||||
The CGAL Open Source Project is pleased to announce the release 4.8
|
The CGAL Open Source Project is pleased to announce the release 4.8.1
|
||||||
of CGAL, the Computational Geometry Algorithms Library.
|
of CGAL, the Computational Geometry Algorithms Library.
|
||||||
|
|
||||||
Besides fixes to existing packages, the following has changed since
|
Version 4.8.1 is a bug-fix release for version 4.8. The list of fixed bugs
|
||||||
CGAL 4.7:
|
can be seen on Github:
|
||||||
|
|
||||||
o General
|
https://github.com/CGAL/cgal/issues?q=milestone%3A4.8.1
|
||||||
|
|
||||||
- The support for Qt3 is dropped and all demos using it got removed.
|
|
||||||
|
|
||||||
|
|
||||||
o Installation
|
|
||||||
|
|
||||||
- Starting with Visual C++ 2015 we no longer require Boost.Thread as we
|
|
||||||
use the C++11 keyword thread_local and the C+11 class std::mutex.
|
|
||||||
|
|
||||||
- The same holds for g++ 4.8 or later when the C++11 standard is used.
|
|
||||||
|
|
||||||
|
|
||||||
o Optimal Transportation Curve Reconstruction (new package)
|
|
||||||
|
|
||||||
- This package implements a method to reconstruct and simplify 2D point
|
|
||||||
sets. The input is a set of 2D points with mass attributes, possibly
|
|
||||||
hampered by noise and outliers. The output is a set of line segments
|
|
||||||
and isolated points which approximate the input points.
|
|
||||||
|
|
||||||
o 3D Mesh Generation
|
|
||||||
|
|
||||||
- Add support of 3D gray level images as input for the tetrahedral mesh
|
|
||||||
generation.
|
|
||||||
|
|
||||||
o Polygon Mesh Processing
|
|
||||||
|
|
||||||
- Add a new triangle-based isotropic remeshing algorithm for
|
|
||||||
triangulated surface meshes.
|
|
||||||
|
|
||||||
o Point Set Processing
|
|
||||||
|
|
||||||
- Add Concurrency_tag to the functions compute_average_spacing(),
|
|
||||||
edge_aware_upsample_point_set(), jet_estimate_normals(),
|
|
||||||
jet_smooth_point_set(), and pca_estimate_normals().
|
|
||||||
|
|
||||||
|
|
||||||
See http://www.cgal.org/releases.html for a complete list of changes.
|
|
||||||
|
|
||||||
|
|
||||||
The CGAL project is a collaborative effort to develop a robust,
|
The CGAL project is a collaborative effort to develop a robust,
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FT min_distance_to_rectangle(const Query_item& q,
|
inline FT min_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,D>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,D>& r,std::vector<FT>& dists) const {
|
||||||
FT distance = FT(0);
|
FT distance = FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
||||||
typename SearchTraits::Cartesian_const_iterator_d qit = construct_it(q),
|
typename SearchTraits::Cartesian_const_iterator_d qit = construct_it(q),
|
||||||
|
|
@ -166,7 +166,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FT max_distance_to_rectangle(const Query_item& q,
|
inline FT max_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,D>& r,std::vector<FT>& dists ) {
|
const Kd_tree_rectangle<FT,D>& r,std::vector<FT>& dists ) const {
|
||||||
FT distance=FT(0);
|
FT distance=FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
||||||
typename SearchTraits::Cartesian_const_iterator_d qit = construct_it(q),
|
typename SearchTraits::Cartesian_const_iterator_d qit = construct_it(q),
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FT min_distance_to_rectangle(const Sphere_d& q,
|
inline FT min_distance_to_rectangle(const Sphere_d& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
Point_d c= Construct_center_d()(q);
|
Point_d c= Construct_center_d()(q);
|
||||||
FT distance = FT(0);
|
FT distance = FT(0);
|
||||||
Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
Construct_cartesian_const_iterator_d construct_it=traits.construct_cartesian_const_iterator_d_object();
|
||||||
|
|
@ -129,7 +129,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FT max_distance_to_rectangle(const Sphere_d& q,
|
inline FT max_distance_to_rectangle(const Sphere_d& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
Construct_center_d construct_center_d;
|
Construct_center_d construct_center_d;
|
||||||
Point_d c = construct_center_d(q);
|
Point_d c = construct_center_d(q);
|
||||||
FT distance=FT(0);
|
FT distance=FT(0);
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ namespace CGAL {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline FT min_distance_to_rectangle(const Query_item& q,
|
inline FT min_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
FT distance = FT(0);
|
FT distance = FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
||||||
traits.construct_cartesian_const_iterator_d_object();
|
traits.construct_cartesian_const_iterator_d_object();
|
||||||
|
|
@ -131,7 +131,7 @@ namespace CGAL {
|
||||||
inline
|
inline
|
||||||
FT
|
FT
|
||||||
max_distance_to_rectangle(const Query_item& q,
|
max_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
FT distance=FT(0);
|
FT distance=FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
||||||
traits.construct_cartesian_const_iterator_d_object();
|
traits.construct_cartesian_const_iterator_d_object();
|
||||||
|
|
|
||||||
|
|
@ -92,27 +92,29 @@ public:
|
||||||
struct Construct_cartesian_const_iterator_d: public Base_traits::Construct_cartesian_const_iterator_d{
|
struct Construct_cartesian_const_iterator_d: public Base_traits::Construct_cartesian_const_iterator_d{
|
||||||
PointPropertyMap ppmap;
|
PointPropertyMap ppmap;
|
||||||
using Base_traits::Construct_cartesian_const_iterator_d::operator();
|
using Base_traits::Construct_cartesian_const_iterator_d::operator();
|
||||||
|
typedef typename Base_traits::Construct_cartesian_const_iterator_d Base;
|
||||||
|
|
||||||
Construct_cartesian_const_iterator_d(const typename Base_traits::Construct_cartesian_const_iterator_d& base, const PointPropertyMap& ppmap_)
|
Construct_cartesian_const_iterator_d(const typename Base_traits::Construct_cartesian_const_iterator_d& base, const PointPropertyMap& ppmap_)
|
||||||
:Base_traits::Construct_cartesian_const_iterator_d(base), ppmap(ppmap_){}
|
:Base_traits::Construct_cartesian_const_iterator_d(base), ppmap(ppmap_){}
|
||||||
|
|
||||||
typename Base_traits::Cartesian_const_iterator_d operator()(const Point_with_info& p) const
|
typename Base_traits::Cartesian_const_iterator_d operator()(const Point_with_info& p) const
|
||||||
{ return this->operator() (get(ppmap,p)); }
|
{ return Base::operator() (get(ppmap,p)); }
|
||||||
|
|
||||||
typename Base_traits::Cartesian_const_iterator_d operator()(const Point_with_info& p, int) const
|
typename Base_traits::Cartesian_const_iterator_d operator()(const Point_with_info& p, int) const
|
||||||
{ return this->operator() (get(ppmap,p),0); }
|
{ return Base::operator() (get(ppmap,p),0); }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Construct_iso_box_d: public Base::Construct_iso_box_d{
|
struct Construct_iso_box_d: public Base::Construct_iso_box_d{
|
||||||
PointPropertyMap ppmap;
|
PointPropertyMap ppmap;
|
||||||
typedef typename Base_traits::FT FT; // needed for VC++, because otherwise it is taken from the private typedef of the base class
|
typedef typename Base_traits::FT FT; // needed for VC++, because otherwise it is taken from the private typedef of the base class
|
||||||
|
typedef typename Base::Construct_iso_box_d Base_functor;
|
||||||
|
|
||||||
Iso_box_d operator() () const {
|
Iso_box_d operator() () const {
|
||||||
return static_cast<const typename Base::Construct_iso_box_d* >(this)->operator() ();
|
return Base_functor::operator() ();
|
||||||
}
|
}
|
||||||
Iso_box_d operator() (const Point_with_info& p, const Point_with_info& q) const
|
Iso_box_d operator() (const Point_with_info& p, const Point_with_info& q) const
|
||||||
{
|
{
|
||||||
return static_cast<const typename Base::Construct_iso_box_d* >(this)->operator() (get(ppmap,p),get(ppmap,q));
|
return Base_functor::operator() (get(ppmap,p),get(ppmap,q));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -120,7 +122,7 @@ public:
|
||||||
|
|
||||||
Construct_cartesian_const_iterator_d construct_cartesian_const_iterator_d_object() const {
|
Construct_cartesian_const_iterator_d construct_cartesian_const_iterator_d_object() const {
|
||||||
return Construct_cartesian_const_iterator_d(
|
return Construct_cartesian_const_iterator_d(
|
||||||
static_cast<const Base*>(this)->construct_cartesian_const_iterator_d_object(),
|
Base::construct_cartesian_const_iterator_d_object(),
|
||||||
ppmap);
|
ppmap);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -148,30 +150,30 @@ public:
|
||||||
|
|
||||||
FT transformed_distance(const Query_item& p1, const Point_with_info& p2) const
|
FT transformed_distance(const Query_item& p1, const Point_with_info& p2) const
|
||||||
{
|
{
|
||||||
return this->transformed_distance(p1,get(ppmap,p2));
|
return Base_distance::transformed_distance(p1,get(ppmap,p2));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class FT,class Dimension>
|
template <class FT,class Dimension>
|
||||||
FT min_distance_to_rectangle(const Query_item& p, const CGAL::Kd_tree_rectangle<FT,Dimension>& b) const
|
FT min_distance_to_rectangle(const Query_item& p, const CGAL::Kd_tree_rectangle<FT,Dimension>& b) const
|
||||||
{
|
{
|
||||||
return static_cast<const Base_distance*>(this)->min_distance_to_rectangle(p,b);
|
return Base_distance::min_distance_to_rectangle(p,b);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class FT,class Dimension>
|
template <class FT,class Dimension>
|
||||||
FT min_distance_to_rectangle(const Query_item& p, const CGAL::Kd_tree_rectangle<FT,Dimension>& b,std::vector<FT>& dists)
|
FT min_distance_to_rectangle(const Query_item& p, const CGAL::Kd_tree_rectangle<FT,Dimension>& b,std::vector<FT>& dists) const
|
||||||
{
|
{
|
||||||
return static_cast<Base_distance*>(this)->min_distance_to_rectangle(p,b,dists);
|
return Base_distance::min_distance_to_rectangle(p,b,dists);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class FT,class Dimension>
|
template <class FT,class Dimension>
|
||||||
FT max_distance_to_rectangle(const Query_item& p,const CGAL::Kd_tree_rectangle<FT,Dimension>& b) const
|
FT max_distance_to_rectangle(const Query_item& p,const CGAL::Kd_tree_rectangle<FT,Dimension>& b) const
|
||||||
{
|
{
|
||||||
return static_cast<const Base_distance*>(this)->max_distance_to_rectangle(p,b);
|
return Base_distance::max_distance_to_rectangle(p,b);
|
||||||
}
|
}
|
||||||
template <class FT,class Dimension>
|
template <class FT,class Dimension>
|
||||||
FT max_distance_to_rectangle(const Query_item& p,const CGAL::Kd_tree_rectangle<FT,Dimension>& b,std::vector<FT>& dists)
|
FT max_distance_to_rectangle(const Query_item& p,const CGAL::Kd_tree_rectangle<FT,Dimension>& b,std::vector<FT>& dists) const
|
||||||
{
|
{
|
||||||
return static_cast<Base_distance*>(this)->max_distance_to_rectangle(p,b,dists);
|
return Base_distance::max_distance_to_rectangle(p,b,dists);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ namespace CGAL {
|
||||||
inline
|
inline
|
||||||
FT
|
FT
|
||||||
min_distance_to_rectangle(const Query_item& q,
|
min_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
FT distance = FT(0);
|
FT distance = FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
||||||
traits.construct_cartesian_const_iterator_d_object();
|
traits.construct_cartesian_const_iterator_d_object();
|
||||||
|
|
@ -326,7 +326,7 @@ namespace CGAL {
|
||||||
inline
|
inline
|
||||||
FT
|
FT
|
||||||
max_distance_to_rectangle(const Query_item& q,
|
max_distance_to_rectangle(const Query_item& q,
|
||||||
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) {
|
const Kd_tree_rectangle<FT,Dimension>& r,std::vector<FT>& dists) const {
|
||||||
FT distance=FT(0);
|
FT distance=FT(0);
|
||||||
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
typename SearchTraits::Construct_cartesian_const_iterator_d construct_it=
|
||||||
traits.construct_cartesian_const_iterator_d_object();
|
traits.construct_cartesian_const_iterator_d_object();
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ struct Distance {
|
||||||
|
|
||||||
template <class TreeTraits>
|
template <class TreeTraits>
|
||||||
double min_distance_to_rectangle(const Point& p,
|
double min_distance_to_rectangle(const Point& p,
|
||||||
const CGAL::Kd_tree_rectangle<TreeTraits>& b,std::vector<double>& dists){
|
const CGAL::Kd_tree_rectangle<TreeTraits>& b,std::vector<double>& dists) const {
|
||||||
double distance(0.0), h = p.x();
|
double distance(0.0), h = p.x();
|
||||||
if (h < b.min_coord(0)){
|
if (h < b.min_coord(0)){
|
||||||
dists[0] = (b.min_coord(0)-h);
|
dists[0] = (b.min_coord(0)-h);
|
||||||
|
|
@ -76,7 +76,7 @@ struct Distance {
|
||||||
|
|
||||||
template <class TreeTraits>
|
template <class TreeTraits>
|
||||||
double max_distance_to_rectangle(const Point& p,
|
double max_distance_to_rectangle(const Point& p,
|
||||||
const CGAL::Kd_tree_rectangle<TreeTraits>& b,std::vector<double>& dists){
|
const CGAL::Kd_tree_rectangle<TreeTraits>& b,std::vector<double>& dists) const {
|
||||||
double h = p.x();
|
double h = p.x();
|
||||||
|
|
||||||
dists[0] = (h >= (b.min_coord(0)+b.max_coord(0))/2.0) ?
|
dists[0] = (h >= (b.min_coord(0)+b.max_coord(0))/2.0) ?
|
||||||
|
|
@ -98,6 +98,6 @@ struct Distance {
|
||||||
|
|
||||||
double transformed_distance(double d) const { return d*d; }
|
double transformed_distance(double d) const { return d*d; }
|
||||||
|
|
||||||
double inverse_of_transformed_distance(double d) { return std::sqrt(d); }
|
double inverse_of_transformed_distance(double d) const { return std::sqrt(d); }
|
||||||
|
|
||||||
}; // end of struct Distance
|
}; // end of struct Distance
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue