Subject: CGAL users discussion list
List archive
- From: Iason Manolas <>
- To:
- Subject: Re: [cgal-discuss] How do I construct a WritablePropertyMap?
- Date: Tue, 1 Nov 2016 10:45:18 +0200
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-phdr: 9a23:payaQB9nxuXBkv9uRHKM819IXTAuvvDOBiVQ1KB90eIcTK2v8tzYMVDF4r011RmSDN+du6oP0rCM++C4ACpbvsbH6ChDOLV3FDY7yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk6nbVk9dazIHJXPhZG3y/yq4M+UJB5ZgSK0J7J0NhS/6wvL8dIHhJNrbac3xByOqXRBf6FaxHhjOEmIzCr7s8y/9Zom/yVLsO867OZBV7/7duI2V+92FjMjZkE8/8rt/TzKSwyL72BUBnwPjh1MDg7IxB7/V5b19CD9s7wui2GhIcTqQOVsCnyZ5KBxRUqwhQ==
Thanks for your response Sebastien.
After reading your code I wrote:
After reading your code I wrote:
using vd=boost::graph_traits<CGALPolyhedron>::vertex_descriptor;
std::map<vd,Kernel::Vector_3>* normals; CGAL::Polygon_mesh_processing::compute_vertex_normals(P,normals); (since I want to compute vertex and not face normals)
std::map<vd,Kernel::Vector_3>* normals; CGAL::Polygon_mesh_processing::compute_vertex_normals(P,normals); (since I want to compute vertex and not face normals)
But I get:
/usr/include/CGAL/Polygon_mesh_processing/compute_normal.h:228: error: no matching function for call to ‘put(std::map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, CGAL::Vector_3<CGAL::Epick> >&, CGAL::HDS_graph_traits<CGAL::Polyhedron_3<CGAL::Epick> >::vertex_descriptor&, CGAL::Type_equality_wrapper<CGAL::Cartesian_base_no_ref_count<double, CGAL::Epick>, CGAL::Epick>::Vector_3&)’
put(vnm, v, vec);
^
/usr/include/CGAL/Polygon_mesh_processing/compute_normal.h:228: error: no matching function for call to ‘put(std::map<CGAL::internal::In_place_list_iterator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > >, std::allocator<CGAL::HalfedgeDS_in_place_list_vertex<CGAL::I_Polyhedron_vertex<CGAL::HalfedgeDS_vertex_base<CGAL::HalfedgeDS_list_types<CGAL::Epick, CGAL::I_Polyhedron_derived_items_3<CGAL::Polyhedron_items_3>, std::allocator<int> >, CGAL::Boolean_tag<true>, CGAL::Point_3<CGAL::Epick> > > > > >, CGAL::Vector_3<CGAL::Epick> >&, CGAL::HDS_graph_traits<CGAL::Polyhedron_3<CGAL::Epick> >::vertex_descriptor&, CGAL::Type_equality_wrapper<CGAL::Cartesian_base_no_ref_count<double, CGAL::Epick>, CGAL::Epick>::Vector_3&)’
put(vnm, v, vec);
^
That propably means that the put fuction cannot recognize vnm ( I passed) as a valid argument?
On 1 November 2016 at 09:50, Sebastien Loriot (GeometryFactory) <> wrote:
A writable property map, as describe in the concept of the boost web
site is a mecanism that allow to generically associate a property
(the value type) to a given object (the key).
If you want to associate a normal to a facet of a Polyhedron, here is a simple example (not tested):
struct Poly_normal_map{
typedef Polyhedron::Facet_handle key_type;
typedef Kernel::Vector_3 value_type;
typedef boost::writable_property_map_tag category;
std::map<Polyhedron::Facet_handle, Kernel::Vector_3>* normals;
Poly_normal_map() : normals(NULL)
{}
Poly_normal_map(std::map<Polyhedron::Facet_handle,
Kernel::Vector_3>& n)
: normals(*n)
{}
friend void put(Poly_normal_map pnm,
Polyhedron::Facet_handle fh,
const Kernel::Vector_3& n
{
CGAL_assertion(pnm.normals!=0);
pnm.normals.insert( std::make_pair(fh, n) );
}
};
std::map<Polyhedron::Facet_handle, Kernel::Vector_3> normals;
Poly_normal_map vpm(normals); //vpm is you writable property map
If you want to make the property map read-write, you can add
a get function:
friend const value_type& get(Poly_normal_map pnm,
Polyhedron::Facet_handle fh)
{
CGAL_assertion(pnm.normals!=0);
return pnm.normals[fh];
}
and update the category tag.
Note that the code I've written is roughly equivalent to using a
boost::associative_property_map (http://www.boost.org/doc/libs/1_62_0/libs/property_map/doc/associative_property_map.html) :
std::map<Polyhedron::Facet_handle, Kernel::Vector_3> normals;
boost::associative_property_map<
std::map<Polyhedron::Facet_handle,
Kernel::Vector_3> > vpm(normals);
If you're not stuck with Polyhedron_3, you can use class
Surface_mesh that comes with its own property mechanism
as illustrated in this example:
http://doc.cgal.org/latest/Polygon_mesh_processing/Polygon_mesh_processing_2compute_normals_example_8cpp-example.html
Sebastien.
On 10/31/2016 12:46 PM, Iason Manolas wrote:
Hi,
I am new to CGAL. I have constructed a CGAL::Polyhedron_3 and now I want
to compute the normal vector for each of its vertices. So I found the
Polygon Mesh Processing package which happens to have a function
<http://doc.cgal.org/latest/Polygon_mesh_processing/group__PMP__normal__grp.html#gad46aaf003999b2939f3f9e4f6fa58d0e>
doing exactly what I want . In the above link I found out that the
second argument was of type VertexNormalMap which is a model of
WritablePropertyMap. There was a link
<http://www.boost.org/doc/libs/1_62_0/libs/property_map/doc/WritablePropertyMap.html>
to boost libraries explaining(?) what writable property map is .
Unfortunately this is my first encounter with property maps and
consequently I am a bit confused..
I also had a look at cgal's explanation of property maps page
<http://doc.cgal.org/latest/Property_map/index.html >, but I did not
understand much..
Could anyone suggest a way of creating the property map I need?
Best Regards,
Iason
--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Sebastien Loriot (GeometryFactory), 11/01/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/01/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Andreas Fabri, 11/01/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Sebastien Loriot (GeometryFactory), 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Sebastien Loriot (GeometryFactory), 11/07/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/07/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Sebastien Loriot (GeometryFactory), 11/07/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/10/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Sebastien Loriot (GeometryFactory), 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/04/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Andreas Fabri, 11/01/2016
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Iason Manolas, 11/01/2016
- <Possible follow-up(s)>
- Re: [cgal-discuss] How do I construct a WritablePropertyMap?, Andreas Fabri, 11/01/2016
Archive powered by MHonArc 2.6.18.