This commit is contained in:
Andreas Fabri 2018-07-16 17:27:00 +02:00
parent 01be9610ee
commit add9c72a46
3 changed files with 169 additions and 108 deletions

View File

@ -470,12 +470,10 @@ namespace Heat_method_3 {
*/
CGAL_precondition(is_triangle_mesh(tm));
//vertex_id_map = get(Vertex_property_tag(),const_cast<TriangleMesh&>(tm));
Index i = 0;
BOOST_FOREACH(vertex_descriptor vd, vertices(tm)){
put(vertex_id_map, vd, i++);
}
//face_id_map = get(Face_property_tag(), const_cast<TriangleMesh&>(tm));
Index face_i = 0;
BOOST_FOREACH(face_descriptor fd, faces(tm)){
put(face_id_map, fd, face_i++);

View File

@ -73,6 +73,9 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
struct IDT_vertex_point_property_map;
template <typename IDT, typename PM>
struct IDT_vertex_distance_property_map;
/**
* Class `Intrinsic_Delaunay_Triangulation_3` is a ...
* \tparam TriangleMesh a triangulated surface mesh, model of `FaceGraph` and `HalfedgeListGraph`
@ -86,14 +89,14 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
template <typename TriangleMesh,
typename Traits,
typename HalfedgeCoordinateMap,
typename VertexDistanceMap,
typename VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::const_type,
typename FaceIndexMap = typename boost::property_map< TriangleMesh, face_index_t>::const_type,
typename EdgeIndexMap = typename boost::property_map< TriangleMesh, boost::edge_index_t>::const_type,
typename LA = Intrinsic_Delaunay_Triangulation_Eigen_traits_3>
struct Intrinsic_Delaunay_Triangulation_3 // AF was class fix later
{
typedef Intrinsic_Delaunay_Triangulation_3<TriangleMesh,Traits,HalfedgeCoordinateMap,VertexPointMap,FaceIndexMap,EdgeIndexMap,LA> Self;
typedef Intrinsic_Delaunay_Triangulation_3<TriangleMesh,Traits,VertexDistanceMap,VertexPointMap,FaceIndexMap,EdgeIndexMap,LA> Self;
typedef typename boost::graph_traits<TriangleMesh> graph_traits;
typedef typename graph_traits::vertex_descriptor vertex_descriptor;
@ -113,9 +116,12 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
typedef typename LA::Index Index;
typedef typename boost::property_traits<VertexPointMap>::reference VertexPointMap_reference;
typedef CGAL::dynamic_halfedge_property_t<Point_2> Halfedge_coordinate_tag;
typedef typename boost::property_map<TriangleMesh, Halfedge_coordinate_tag >::type HalfedgeCoordinateMap;
typedef typename boost::graph_traits<TriangleMesh>::vertices_size_type vertices_size_type;
typedef typename boost::graph_traits<TriangleMesh>::edges_size_type edges_size_type;
typedef typename boost::graph_traits<TriangleMesh>::edges_size_type edges_size_type;
typedef typename boost::graph_traits<TriangleMesh>::faces_size_type faces_size_type;
typedef CGAL::dynamic_vertex_property_t<Index> Vertex_property_tag;
@ -132,8 +138,12 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
typedef typename std::stack<edge_descriptor, std::list<edge_descriptor> > edge_stack;
friend struct IDT_vertex_point_property_map<Self>;
friend struct IDT_vertex_distance_property_map<Self,VertexDistanceMap>;
public: // for the BGL functions below. They should maybe become friend?
typedef IDT_vertex_distance_property_map<Self,VertexDistanceMap> Vertex_distance_map;
struct Vertex_descriptor {
halfedge_descriptor hd;
@ -145,6 +155,11 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
Vertex_descriptor(const halfedge_descriptor& hd)
: hd(hd)
{}
explicit Vertex_descriptor(const vertex_descriptor vd, const TriangleMesh& tm)
: hd(halfedge(vd,tm))
{}
};
struct Vertex_iterator_functor
@ -165,16 +180,16 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
};
public:
Intrinsic_Delaunay_Triangulation_3(TriangleMesh& tm, HalfedgeCoordinateMap hcm)
: tm(tm), hcm(hcm)
Intrinsic_Delaunay_Triangulation_3(TriangleMesh& tm, VertexDistanceMap vdm)
: tm(tm), vdm(*this,vdm), hcm(get(Halfedge_coordinate_tag(), tm))
{
build();
}
Intrinsic_Delaunay_Triangulation_3(TriangleMesh& tm, HalfedgeCoordinateMap hcm, FaceIndexMap fpm, EdgeIndexMap epm)
: tm(tm), hcm(hcm), fpm(fpm), epm(epm)
Intrinsic_Delaunay_Triangulation_3(TriangleMesh& tm, VertexDistanceMap vdm, FaceIndexMap fpm, EdgeIndexMap epm)
: tm(tm), vdm(*this,vdm), fpm(fpm), epm(epm), hcm(get(Halfedge_coordinate_tag(), tm))
{
build();
}
@ -192,10 +207,18 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
return tm;
}
const HalfedgeCoordinateMap& hcmap() const
{
return hcm;
}
const Vertex_distance_map vertex_distance_map() const
{
return vdm;
}
double get_cotan_weight(edge_descriptor ed)
{
@ -402,6 +425,7 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
}
//todo:: determine which can be const
TriangleMesh& tm;
Vertex_distance_map vdm;
VertexPointMap vpm;
FaceIndexMap fpm;
EdgeIndexMap epm;
@ -419,14 +443,14 @@ namespace boost {
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
struct graph_traits<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> > {
struct graph_traits<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> > {
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> Mesh;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> Mesh;
typedef typename Mesh::Vertex_descriptor vertex_descriptor;
typedef boost::transform_iterator<
typename Mesh::Vertex_iterator_functor,
@ -450,59 +474,59 @@ namespace Intrinsic_Delaunay_Triangulation_3 {
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<TM>::vertices_size_type
num_vertices(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
num_vertices(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return num_vertices(idt.triangle_mesh());
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<TM>::edges_size_type
num_edges(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
num_edges(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return num_edges(idt.triangle_mesh());
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<TM>::faces_size_type
num_faces(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
num_faces(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return num_faces(idt.triangle_mesh());
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename std::pair<typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>>::vertex_iterator,
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>>::vertex_iterator>
vertices(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename std::pair<typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>>::vertex_iterator,
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>>::vertex_iterator>
vertices(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
std::pair<typename boost::graph_traits<TM>::vertex_iterator,
typename boost::graph_traits<TM>::vertex_iterator> p = vertices(idt.triangle_mesh());
typedef typename boost::graph_traits<TM>::vertex_iterator vertex_iterator;
typedef Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>::Vertex_iterator_functor Fct;
typedef typename Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>::Vertex_iterator_functor Fct;
Fct fct(idt.triangle_mesh());
return std::make_pair(boost::make_transform_iterator(p.first, fct),
boost::make_transform_iterator(p.second,fct));
@ -510,14 +534,14 @@ vertices(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename std::pair<typename boost::graph_traits<TM>::halfedge_iterator,
typename boost::graph_traits<TM>::halfedge_iterator>
halfedges(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
halfedges(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return halfedges(idt.triangle_mesh());
}
@ -525,14 +549,14 @@ halfedges(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename std::pair<typename boost::graph_traits<TM>::edge_iterator,
typename boost::graph_traits<TM>::edge_iterator>
edges(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
edges(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return edges(idt.triangle_mesh());
}
@ -540,57 +564,57 @@ edges(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename std::pair<typename boost::graph_traits<TM>::face_iterator,
typename boost::graph_traits<TM>::face_iterator>
faces(const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
faces(const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return faces(idt.triangle_mesh());
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor
vertex(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& )
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor
vertex(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& )
{
return boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor(hd);
return boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor(hd);
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor
halfedge(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::face_descriptor fd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor
halfedge(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::face_descriptor fd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return halfedge(fd, idt.triangle_mesh());
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor
halfedge(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::edge_descriptor ed,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor
halfedge(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::edge_descriptor ed,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return halfedge(ed, idt.triangle_mesh());
}
@ -598,14 +622,14 @@ halfedge(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HC
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor
next(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor
next(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return next(hd, idt.triangle_mesh());
}
@ -613,32 +637,32 @@ next(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VP
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor
source(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor
source(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
typedef typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor vertex_descriptor;
typedef typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor vertex_descriptor;
return vertex_descriptor(opposite(hd, idt.triangle_mesh()));
}
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor
target(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor
target(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::halfedge_descriptor hd,
const Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
typedef typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >::vertex_descriptor vertex_descriptor;
typedef typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >::vertex_descriptor vertex_descriptor;
return vertex_descriptor(hd);
}
@ -684,12 +708,48 @@ target(typename boost::graph_traits<Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,
friend value_type get(const IDT_vertex_index_property_map<IDT,PM>& pm,
key_type vd)
{
typename TM::vertex_descriptor tm_vd = target(vd.hd,pm.idt.triangle_mesh());
typename boost::graph_traits<TM>::vertex_descriptor tm_vd = target(vd.hd,pm.idt.triangle_mesh());
return get(pm,tm_vd);
}
};
template <typename IDT, typename PM>
struct IDT_vertex_distance_property_map {
const IDT& idt;
PM pm;
typedef typename IDT::Triangle_mesh TM;
typedef typename IDT::Vertex_descriptor key_type;
typedef double value_type;
typedef value_type reference;
IDT_vertex_distance_property_map(const IDT& idt,
PM pm)
: idt(idt), pm(pm)
{}
friend value_type get(const IDT_vertex_distance_property_map<IDT,PM>& idtpm,
key_type vd)
{
typename boost::graph_traits<TM>::vertex_descriptor tm_vd = target(vd.hd, idtpm.idt.triangle_mesh());
return get(idtpm.pm,tm_vd);
}
friend void put(IDT_vertex_distance_property_map<IDT,PM> idtpm,
key_type vd,
value_type v)
{
typename boost::graph_traits<TM>::vertex_descriptor tm_vd = target(vd.hd, idtpm.idt.triangle_mesh());
// std::cout << "put " << typeid(pm).name() << std::endl;
put(idtpm.pm, tm_vd, v);
}
};
} // namespace Intrinsic_Delaunay_Triangulation_3
} // namespace CGAL
@ -697,58 +757,58 @@ namespace boost {
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>,
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>,
CGAL::vertex_point_t > {
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_point_property_map<IDT> type;
typedef type const_type;
};
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_point_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >
CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_point_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >
get(CGAL::vertex_point_t,
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_point_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> >(idt);
return CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_point_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> >(idt);
}
////// change to face_index
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>,
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>,
CGAL::face_index_t > {
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> IDT;
typedef typename property_map<TM, CGAL::face_index_t>::type type;
typedef typename property_map<TM, CGAL::face_index_t>::const_type const_type;
};
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename property_map<TM,CGAL::face_index_t>::type
get(CGAL::face_index_t fi,
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return get(fi, idt.triangle_mesh());
}
@ -758,16 +818,16 @@ get(CGAL::face_index_t fi,
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA>
typename property_map<TM,boost::vertex_index_t>::type
get(boost::vertex_index_t vi,
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
return CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_index_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>, VPM >(idt, get(vi, idt.triangle_mesh()));
return CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_vertex_index_property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>, VPM >(idt, get(vi, idt.triangle_mesh()));
}
} // boost
@ -820,15 +880,15 @@ namespace boost {
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA,
typename dT>
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>,
struct property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>,
CGAL::dynamic_vertex_property_t<dT> > {
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::IDT_dynamic_vertex_property_map<IDT,
typename boost::property_map<TM, CGAL::dynamic_vertex_property_t<dT> >::type,
typename boost::graph_traits<IDT>::vertex_descriptor,
@ -846,17 +906,17 @@ namespace CGAL {
namespace Intrinsic_Delaunay_Triangulation_3 {
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA,
typename dT>
typename boost::property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>, CGAL::dynamic_vertex_property_t<dT> >::const_type
typename boost::property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>, CGAL::dynamic_vertex_property_t<dT> >::const_type
get(CGAL::dynamic_vertex_property_t<dT> dvp,
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
const CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> IDT;
typedef IDT_dynamic_vertex_property_map<IDT,
typename boost::property_map<TM, CGAL::dynamic_vertex_property_t<dT> >::const_type,
typename boost::graph_traits<IDT>::vertex_descriptor,
@ -866,17 +926,17 @@ get(CGAL::dynamic_vertex_property_t<dT> dvp,
template <typename TM,
typename T,
typename HCM,
typename VDM,
typename VPM,
typename FIM,
typename EIM,
typename LA,
typename dT>
typename boost::property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>, CGAL::dynamic_vertex_property_t<dT> >::type
typename boost::property_map<CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>, CGAL::dynamic_vertex_property_t<dT> >::type
get(CGAL::dynamic_vertex_property_t<dT> dvp,
CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA>& idt)
CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA>& idt)
{
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,HCM,VPM,FIM,EIM,LA> IDT;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<TM,T,VDM,VPM,FIM,EIM,LA> IDT;
typedef IDT_dynamic_vertex_property_map<IDT,
typename boost::property_map<TM, CGAL::dynamic_vertex_property_t<dT> >::type,
typename boost::graph_traits<IDT>::vertex_descriptor,

View File

@ -14,25 +14,22 @@
typedef CGAL::Simple_cartesian<double> Kernel;
typedef Kernel::Point_3 Point;
typedef Kernel::Point_2 Point_2;
typedef CGAL::Surface_mesh<Point> BaseMesh;
typedef CGAL::dynamic_halfedge_property_t<Point_2> Halfedge_coordinate_tag;
typedef boost::property_map<BaseMesh, Halfedge_coordinate_tag >::type Halfedge_coordinate_map;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<BaseMesh,Kernel, Halfedge_coordinate_map> Mesh;
typedef CGAL::Surface_mesh<Point> Surface_mesh;
typedef CGAL::dynamic_vertex_property_t<double> Vertex_distance_tag;
typedef boost::property_map<Mesh, Vertex_distance_tag >::type Vertex_distance_map;
typedef boost::property_map<Surface_mesh, Vertex_distance_tag >::type Vertex_distance_map;
typedef CGAL::Intrinsic_Delaunay_Triangulation_3::Intrinsic_Delaunay_Triangulation_3<Surface_mesh,Kernel, Vertex_distance_map> Idt;
typedef boost::graph_traits<Mesh>::vertex_descriptor vertex_descriptor;
typedef boost::graph_traits<Idt>::vertex_descriptor vertex_descriptor;
typedef CGAL::Heat_method_3::Heat_method_3<Mesh,Kernel,Vertex_distance_map> Heat_method;
typedef CGAL::Heat_method_3::Heat_method_3<Idt,Kernel, Idt::Vertex_distance_map> Heat_method;
typedef CGAL::Heat_method_3::Heat_method_Eigen_traits_3::SparseMatrix SparseMatrix;
#if 0
void source_set_tests(Heat_method hm, const Mesh& sm)
void source_set_tests(Heat_method hm, const Idt& sm)
{
vertex_descriptor source = *(vertices(sm).first);
hm.add_source(source);
@ -98,7 +95,7 @@ void check_for_unit(const Eigen::MatrixXd& X, int dimension)
}
}
void check_no_update(const Mesh& sm, const Vertex_distance_map& original, const Vertex_distance_map& updated)
void check_no_update(const Idt& sm, const Vertex_distance_map& original, const Vertex_distance_map& updated)
{
BOOST_FOREACH(vertex_descriptor vd, vertices(sm))
{
@ -111,30 +108,36 @@ void check_no_update(const Mesh& sm, const Vertex_distance_map& original, const
int main()
{
BaseMesh bm;
Halfedge_coordinate_map hcm;
Mesh sm(bm,hcm);
Surface_mesh sm;
Vertex_distance_map vdm = get(Vertex_distance_tag(),sm);
Idt idt(sm, vdm);
Vertex_distance_map vertex_distance_map = get(Vertex_distance_tag(),sm);
bool idf = false;
std::ifstream in("data/pyramid0.off");
in >> bm;
if(!in || num_vertices(bm) == 0) {
in >> sm;
if(!in || num_vertices(sm) == 0) {
std::cerr << "Problem loading the input data" << std::endl;
return 1;
}
put(vertex_distance_map, * vertices(sm).first, 1.0);
put(vertex_distance_map, * halfedges(sm).first, 1.0);
//put(vdm, * vertices(sm).first, 1.0);
//put(vdm, * halfedges(sm).first, 1.0);
//source set tests
Heat_method hm(sm, vertex_distance_map);
hm.add_source(* vertices(sm).first);
Heat_method hm(idt, idt.vertex_distance_map());
// hm.add_source(* vertices(idt).first);
hm.add_source(boost::graph_traits<Idt>::vertex_descriptor(boost::graph_traits<Surface_mesh>::vertex_descriptor(0),sm));
hm.update();
#if 0
source_set_tests(hm,sm);
#if 0
source_set_tests(hm,idt);
//cotan matrix tests
const SparseMatrix& M = hm.mass_matrix();
//std::cout<<"and M is: "<< Eigen::MatrixXd(M) << "\n";