mirror of https://github.com/CGAL/cgal
LS + S. Tayeb:
* Rename obsolete Mesh_3 files to avoid conflicts with new Mesh_3 implementation. * TODO: Modify Poisson_refine_triangulation.h to use new Mesh_3 implementation.
This commit is contained in:
parent
1819dc507d
commit
e70a056e75
|
|
@ -17,8 +17,8 @@
|
|||
//
|
||||
// Author(s) : Laurent RINEAU
|
||||
|
||||
#ifndef CGAL_MESH_3_REFINE_TETS_H
|
||||
#define CGAL_MESH_3_REFINE_TETS_H
|
||||
#ifndef CGAL_MESH_3_POISSON_REFINE_CELLS_3_H
|
||||
#define CGAL_MESH_3_POISSON_REFINE_CELLS_3_H
|
||||
|
||||
#include <CGAL/Mesher_level.h>
|
||||
#include <CGAL/Meshes/Triangulation_mesher_level_traits_3.h>
|
||||
|
|
@ -40,9 +40,9 @@ template <class Tr,
|
|||
class Container =
|
||||
Meshes::Double_map_container<
|
||||
typename Tr::Cell_handle,
|
||||
typename Criteria::Quality>
|
||||
typename Criteria::Cell_quality>
|
||||
>
|
||||
class Refine_tets_base :
|
||||
class Poisson_refine_tets_base :
|
||||
public Container,
|
||||
public Triangulation_mesher_level_traits_3<Tr>,
|
||||
public No_test_point_conflict
|
||||
|
|
@ -63,14 +63,14 @@ protected:
|
|||
typedef typename Tr::Facet Facet;
|
||||
|
||||
public:
|
||||
typedef typename Criteria::Quality Quality;
|
||||
typedef typename Criteria::Cell_quality Cell_quality;
|
||||
|
||||
using Triangulation_mesher_level_traits_3<Tr>::triangulation_ref_impl;
|
||||
|
||||
public:
|
||||
/** \name CONSTRUCTORS */
|
||||
|
||||
Refine_tets_base(Tr& t, Criteria crit)
|
||||
Poisson_refine_tets_base(Tr& t, Criteria crit)
|
||||
: Triangulation_mesher_level_traits_3<Tr>(t), criteria(crit) {}
|
||||
|
||||
protected:
|
||||
|
|
@ -81,20 +81,20 @@ protected:
|
|||
protected:
|
||||
/* --- protected functions --- */
|
||||
|
||||
bool should_be_refined(const Cell_handle c, Quality& qual) const
|
||||
bool should_be_refined(const Cell_handle c, Cell_quality& qual) const
|
||||
{
|
||||
return criteria.is_bad_object()(c,qual);
|
||||
}
|
||||
|
||||
bool should_be_refined(const Cell_handle c) const
|
||||
{
|
||||
Quality q;
|
||||
Cell_quality q;
|
||||
return should_be_refined(c, q);
|
||||
}
|
||||
|
||||
bool test_if_cell_is_bad(const Cell_handle c)
|
||||
{
|
||||
Quality q;
|
||||
Cell_quality q;
|
||||
if( c->is_in_domain() && should_be_refined(c, q) )
|
||||
{
|
||||
this->add_bad_element(c, q);
|
||||
|
|
@ -137,7 +137,7 @@ public:
|
|||
#if CGAL_MESH_3_DEBUG_BEFORE_CONFLICTS
|
||||
void before_conflicts_impl(const Cell_handle&, const Point& p)
|
||||
{
|
||||
std::cerr << "Refine_tets: before conflicts of " << p;
|
||||
std::cerr << "Poisson_refine_tets: before conflicts of " << p;
|
||||
}
|
||||
#else
|
||||
void before_conflicts_impl(const Cell_handle&, const Point&)
|
||||
|
|
@ -152,7 +152,7 @@ public:
|
|||
std::cerr << " REJECTED!" << std::endl;
|
||||
#endif
|
||||
}
|
||||
}; // end Refine_tets_base
|
||||
}; // end Poisson_refine_tets_base
|
||||
|
||||
template <class Tr,
|
||||
class Criteria,
|
||||
|
|
@ -160,16 +160,16 @@ template <class Tr,
|
|||
class Oracle,
|
||||
class Container = Meshes::Double_map_container<
|
||||
typename Tr::Cell_handle,
|
||||
typename Criteria::Quality>
|
||||
typename Criteria::Cell_quality>
|
||||
>
|
||||
class Refine_tets_with_oracle_base
|
||||
: public Refine_tets_base<Tr,
|
||||
class Poisson_refine_tets_with_oracle_base
|
||||
: public Poisson_refine_tets_base<Tr,
|
||||
Criteria,
|
||||
Container>
|
||||
{
|
||||
public:
|
||||
typedef Refine_tets_base<Tr, Criteria, Container> Base;
|
||||
typedef Refine_tets_with_oracle_base<Tr,
|
||||
typedef Poisson_refine_tets_base<Tr, Criteria, Container> Base;
|
||||
typedef Poisson_refine_tets_with_oracle_base<Tr,
|
||||
Criteria,
|
||||
Surface,
|
||||
Oracle,
|
||||
|
|
@ -186,7 +186,7 @@ public:
|
|||
|
||||
/** \name CONSTRUCTORS */
|
||||
|
||||
Refine_tets_with_oracle_base(Tr& t, Criteria crit, Surface& s, Oracle& o)
|
||||
Poisson_refine_tets_with_oracle_base(Tr& t, Criteria crit, Surface& s, Oracle& o)
|
||||
: Base(t, crit), surface(s), oracle(o) {}
|
||||
|
||||
public:
|
||||
|
|
@ -198,7 +198,7 @@ public:
|
|||
#ifdef CGAL_MESHES_DEBUG_REFINEMENT_POINTS
|
||||
// Check if triangulation's geometric traits provides a robust circumcenter computation
|
||||
if (triangulation_ref_impl().side_of_sphere(c, p, true) != ON_BOUNDED_SIDE)
|
||||
std::cerr << "Refine_tets_with_oracle_base::conflicts_zone_impl: ERROR: circumcenter out of sphere!\n";
|
||||
std::cerr << "Poisson_refine_tets_with_oracle_base::conflicts_zone_impl: ERROR: circumcenter out of sphere!\n";
|
||||
#endif
|
||||
|
||||
zone.cell = c;
|
||||
|
|
@ -263,21 +263,21 @@ protected:
|
|||
Surface& surface;
|
||||
Oracle& oracle;
|
||||
|
||||
}; // end Refine_tets_with_oracle_base
|
||||
}; // end Poisson_refine_tets_with_oracle_base
|
||||
|
||||
template <typename Tr,
|
||||
typename Criteria,
|
||||
typename Surface,
|
||||
typename Oracle, // BEURK
|
||||
typename BaseP = // workaround for VC7, see below
|
||||
Refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle>,
|
||||
Poisson_refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle>,
|
||||
typename Facets_level = Refine_facets<Tr>
|
||||
>
|
||||
class Refine_tets :
|
||||
class Poisson_refine_tets :
|
||||
public BaseP,
|
||||
public Mesher_level <
|
||||
Tr,
|
||||
Refine_tets<Tr, Criteria, Surface, Oracle, BaseP, Facets_level>,
|
||||
Poisson_refine_tets<Tr, Criteria, Surface, Oracle, BaseP, Facets_level>,
|
||||
typename Tr::Cell_handle,
|
||||
Facets_level,
|
||||
Triangulation_mesher_level_traits_3<Tr>
|
||||
|
|
@ -287,16 +287,16 @@ class Refine_tets :
|
|||
|
||||
Facets_level& facets_level;
|
||||
public:
|
||||
typedef Refine_tets<Tr, Criteria, Surface, Oracle, Base, Facets_level> Self;
|
||||
typedef Poisson_refine_tets<Tr, Criteria, Surface, Oracle, Base, Facets_level> Self;
|
||||
typedef Mesher_level <
|
||||
Tr,
|
||||
Refine_tets<Tr, Criteria, Surface, Oracle, Base, Facets_level>,
|
||||
Poisson_refine_tets<Tr, Criteria, Surface, Oracle, Base, Facets_level>,
|
||||
typename Tr::Cell_handle,
|
||||
Facets_level,
|
||||
Triangulation_mesher_level_traits_3<Tr>
|
||||
> Mesher;
|
||||
|
||||
Refine_tets(Tr& t, Criteria crit, Surface& surface, Oracle& oracle, Facets_level& facets_level)
|
||||
Poisson_refine_tets(Tr& t, Criteria crit, Surface& surface, Oracle& oracle, Facets_level& facets_level)
|
||||
: Base(t, crit, surface, oracle), Mesher(facets_level), facets_level(facets_level)
|
||||
{} // here VC7 complain about default constructor of Base, if the
|
||||
// workaround is not used.
|
||||
|
|
@ -315,9 +315,9 @@ public:
|
|||
return s.str();
|
||||
}
|
||||
|
||||
}; // end class Refine_tets
|
||||
}; // end class Poisson_refine_tets
|
||||
|
||||
}; // end namespace Mesh_3
|
||||
}; // end namespace CGAL
|
||||
|
||||
#endif // CGAL_MESH_3_REFINE_TETS_H
|
||||
#endif // CGAL_MESH_3_POISSON_REFINE_CELLS_3_H
|
||||
|
|
@ -17,41 +17,32 @@
|
|||
//
|
||||
// Author(s) : Laurent RINEAU
|
||||
|
||||
#ifndef CGAL_MESH_CRITERIA_3_H
|
||||
#define CGAL_MESH_CRITERIA_3_H
|
||||
#ifndef CGAL_POISSON_MESH_CRITERIA_3_H
|
||||
#define CGAL_POISSON_MESH_CRITERIA_3_H
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace CGAL {
|
||||
|
||||
template <typename Tr>
|
||||
class Mesh_criteria_3
|
||||
template <class Tr>
|
||||
class Poisson_mesh_cell_criteria_3
|
||||
{
|
||||
double squared_radius_bound_;
|
||||
double radius_edge_bound_;
|
||||
public:
|
||||
typedef typename Tr::Cell_handle Cell_handle;
|
||||
|
||||
Mesh_criteria_3(const double radius_edge_bound = 2, //< radius edge ratio bound (ignored if zero)
|
||||
const double radius_bound = 0) //< cell radius bound (ignored if zero)
|
||||
: squared_radius_bound_(radius_bound*radius_bound),
|
||||
radius_edge_bound_(radius_edge_bound)
|
||||
{
|
||||
};
|
||||
|
||||
struct Quality : public std::pair<double, double>
|
||||
struct Cell_quality : public std::pair<double, double>
|
||||
{
|
||||
typedef std::pair<double, double> Base;
|
||||
|
||||
Quality() : Base() {};
|
||||
Quality(double _aspect, double _sq_size) : Base(_aspect, _sq_size) {};
|
||||
Cell_quality() : Base() {};
|
||||
Cell_quality(double _aspect, double _sq_size) : Base(_aspect, _sq_size) {};
|
||||
|
||||
const double& sq_size() const { return second; }
|
||||
const double& aspect() const { return first; }
|
||||
|
||||
// q1<q2 means q1 is prioritised over q2
|
||||
// ( q1 == *this, q2 == q )
|
||||
bool operator<(const Quality& q) const
|
||||
bool operator<(const Cell_quality& q) const
|
||||
{
|
||||
if( sq_size() > 1 )
|
||||
if( q.sq_size() > 1 )
|
||||
|
|
@ -71,6 +62,15 @@ public:
|
|||
return squared_radius_bound_;
|
||||
};
|
||||
|
||||
typedef typename Tr::Cell_handle Cell_handle;
|
||||
|
||||
Poisson_mesh_cell_criteria_3(const double radius_edge_bound = 2, //< radius edge ratio bound (ignored if zero)
|
||||
const double radius_bound = 0) //< cell radius bound (ignored if zero)
|
||||
: squared_radius_bound_(radius_bound*radius_bound),
|
||||
radius_edge_bound_(radius_edge_bound)
|
||||
{
|
||||
};
|
||||
|
||||
inline
|
||||
void set_squared_radius_bound(const double squared_radius_bound)
|
||||
{
|
||||
|
|
@ -103,7 +103,7 @@ public:
|
|||
squared_radius_bound_(squared_radius_bound) {};
|
||||
|
||||
bool operator()(const Cell_handle& c,
|
||||
Quality& qual) const
|
||||
Cell_quality& qual) const
|
||||
{
|
||||
const Point_3& p = c->vertex(0)->point();
|
||||
const Point_3& q = c->vertex(1)->point();
|
||||
|
|
@ -133,7 +133,7 @@ public:
|
|||
}
|
||||
if( radius_edge_bound_ == 0 )
|
||||
{
|
||||
qual = Quality(0,1);
|
||||
qual = Cell_quality(0,1);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -155,15 +155,15 @@ public:
|
|||
Is_bad is_bad_object() const
|
||||
{ return Is_bad(radius_edge_bound_, squared_radius_bound_); }
|
||||
|
||||
}; // end Mesh_criteria_3
|
||||
}; // end Poisson_mesh_cell_criteria_3
|
||||
|
||||
template <typename Tr>
|
||||
std::ostream& operator<<(std::ostream& os,
|
||||
const typename Mesh_criteria_3<Tr>::Quality& q)
|
||||
const typename Poisson_mesh_cell_criteria_3<Tr>::Cell_quality& q)
|
||||
{
|
||||
return os << q.sq_size() << ", " << q.aspect();
|
||||
}
|
||||
|
||||
} // end namespace CGAL
|
||||
|
||||
#endif // CGAL_MESH_CRITERIA_3_H
|
||||
#endif // CGAL_POISSON_MESH_CRITERIA_3_H
|
||||
|
|
@ -282,8 +282,8 @@ private:
|
|||
CGAL_TRACE("Calls delaunay_refinement(radius_edge_ratio_bound=%lf, cell_radius_bound=%lf, max_vertices=%u, enlarge_ratio=%lf)\n",
|
||||
radius_edge_ratio_bound, cell_radius_bound, max_vertices, enlarge_ratio);
|
||||
|
||||
Sphere enlarged_bbox = enlarged_bounding_sphere(enlarge_ratio);
|
||||
unsigned int nb_vertices_added = poisson_refine_triangulation(*m_tr,radius_edge_ratio_bound,cell_radius_bound,max_vertices,enlarged_bbox);
|
||||
Sphere elarged_bsphere = enlarged_bounding_sphere(enlarge_ratio);
|
||||
unsigned int nb_vertices_added = poisson_refine_triangulation(*m_tr,radius_edge_ratio_bound,cell_radius_bound,max_vertices,elarged_bsphere);
|
||||
|
||||
CGAL_TRACE("End of delaunay_refinement()\n");
|
||||
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
|
||||
// CGAL
|
||||
#include <CGAL/Mesher_level.h>
|
||||
#include <CGAL/Mesh_3/Refine_tets.h>
|
||||
#include <CGAL/Mesh_criteria_3.h>
|
||||
#include <CGAL/Mesh_3/Poisson_refine_cells_3.h>
|
||||
#include <CGAL/Poisson_mesh_cell_criteria_3.h>
|
||||
#include <CGAL/surface_reconstruction_points_assertions.h>
|
||||
|
||||
CGAL_BEGIN_NAMESPACE
|
||||
|
|
@ -39,12 +39,12 @@ template <class Tr,
|
|||
class Surface,
|
||||
class Oracle,
|
||||
class Container = Meshes::Double_map_container<typename Tr::Cell_handle,
|
||||
typename Criteria::Quality>
|
||||
typename Criteria::Cell_quality>
|
||||
>
|
||||
class Poisson_mesher_level_impl_base :
|
||||
public Mesh_3::Refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle, Container>
|
||||
public Mesh_3::Poisson_refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle, Container>
|
||||
{
|
||||
typedef Mesh_3::Refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle, Container> Base;
|
||||
typedef Mesh_3::Poisson_refine_tets_with_oracle_base<Tr, Criteria, Surface, Oracle, Container> Base;
|
||||
|
||||
public:
|
||||
// Inherited methods and fields used below
|
||||
|
|
@ -56,7 +56,7 @@ public:
|
|||
typedef typename Tr::Vertex_handle Vertex_handle;
|
||||
typedef typename Tr::Cell_handle Cell_handle;
|
||||
typedef typename Tr::Point Point;
|
||||
typedef typename Base::Quality Quality;
|
||||
typedef typename Base::Cell_quality Cell_quality;
|
||||
|
||||
public:
|
||||
/** \name CONSTRUCTORS */
|
||||
|
|
@ -73,7 +73,7 @@ protected:
|
|||
|
||||
bool test_if_cell_is_bad(const Cell_handle c)
|
||||
{
|
||||
Quality q;
|
||||
Cell_quality q;
|
||||
if( is_in_domain(c) && should_be_refined(c, q) )
|
||||
{
|
||||
this->add_bad_element(c, q);
|
||||
|
|
@ -218,7 +218,7 @@ unsigned int poisson_refine_triangulation(
|
|||
typedef typename Gt::Point_3 Point;
|
||||
|
||||
// Mesher_level types
|
||||
typedef Mesh_criteria_3<Tr> Tets_criteria;
|
||||
typedef Poisson_mesh_cell_criteria_3<Tr> Tets_criteria;
|
||||
typedef typename CGAL::Surface_mesh_traits_generator_3<Surface>::type Oracle;
|
||||
typedef Poisson_mesher_level<Tr, Tets_criteria, Surface, Oracle, Null_mesher_level> Refiner;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue