Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Find the perimeter of a shell with no volume

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Find the perimeter of a shell with no volume


Chronological Thread 
  • From: "Sebastien Loriot (GeometryFactory)" <>
  • To:
  • Subject: Re: [cgal-discuss] Find the perimeter of a shell with no volume
  • Date: Mon, 20 Jun 2011 08:56:56 +0200

Note that we do not provide support for older version of CGAL.

However, you can try replacing h < h->twin() by
&(*h) < &(*h->twin()).

Since two halfedges are opposite along the same edge, this
is a way to count edges.


Sebastien.

Giles Bathgate wrote:
On 7 June 2011 09:42, Sebastien Loriot (GeometryFactory)
<>
wrote:
One solution is to look at all halffacets and count the number of time
edges contribute to the facet. If an edge contributes only twice then
it is on the boundary.

Hi I tried compiling your example against CGAL 3.6.1 using:

gcc test.cpp -lCGAL -lmpfr -lgmp -frounding-math -o test

I get two compile errors, one on line 12 and the other on line 37
(full compile error log below). They both seem to be related to the
operator<

I don't understand why the comparison h < h->twin() is made so I can't
easily work around the problem, and I would like to be able to use
your code with 3.6.1

Cheers

Giles.

test.cpp: In function
‘CGAL::Nef_polyhedron_3<CGAL::Simple_cartesian<CGAL::Gmpq>
::Halfedge_const_handle
get_edge_id(CGAL::Nef_polyhedron_3<CGAL::Simple_cartesian<CGAL::Gmpq>
::Halfedge_const_handle)’:
test.cpp:12:21: error: no match for ‘operator<’ in ‘h <
h.CGAL::internal::In_place_list_const_iterator<T, Alloc>::operator->
[with T =
CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >, Alloc =
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >
]()->CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> >
::<anonymous>.CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool>
::<anonymous>.CGAL::Halfedge_base<Refs>::twin [with Refs =
CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool>,
CGAL::Halfedge_base<Refs>::SVertex_const_handle =
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >]()’
/usr/include/CGAL/GMP/Gmpq_type.h:205:1: note: candidates are: bool
CGAL::operator<(const CGAL::Gmpq&, int)
/usr/include/CGAL/GMP/Gmpq_type.h:199:13: note: bool
CGAL::operator<(const CGAL::Gmpq&, double)
/usr/include/CGAL/GMP/Gmpq_type.h:195:1: note: bool
CGAL::operator<(const CGAL::Gmpq&, const CGAL::Gmpq&)
/usr/include/CGAL/GMP/Gmpzf_type.h:561:6: note: bool
CGAL::operator<(const CGAL::Gmpzf&, int)
/usr/include/CGAL/GMP/Gmpzf_type.h:548:6: note: bool
CGAL::operator<(const CGAL::Gmpzf&, const CGAL::Gmpzf&)
/usr/include/CGAL/GMP/Gmpz_type.h:157:1: note: bool
CGAL::operator<(const CGAL::Gmpz&, int)
/usr/include/CGAL/GMP/Gmpz_type.h:145:1: note: bool
CGAL::operator<(const CGAL::Gmpz&, const CGAL::Gmpz&)
/usr/include/CGAL/MP_Float.h:379:6: note: bool
CGAL::operator<(const CGAL::MP_Float&, const CGAL::MP_Float&)
/usr/include/CGAL/Modular_arithmetic/Residue_type.h:297:13: note:
bool CGAL::operator<(const CGAL::Residue&, int)
/usr/include/CGAL/Modular_arithmetic/Residue_type.h:295:13: note:
bool CGAL::operator<(const CGAL::Residue&, const
CGAL::Residue&)
/usr/include/boost/blank.hpp:78:13: note: bool
boost::operator<(const boost::blank&, const boost::blank&)
/usr/include/boost/operators.hpp:133:18: note: bool
boost::operator<(const int&, const CGAL::Gmpq&)
/usr/include/boost/operators.hpp:133:18: note: bool
boost::operator<(const double&, const CGAL::Gmpq&)
In file included from /usr/include/c++/4.5/string:50:0,
from /usr/include/c++/4.5/bits/locale_classes.h:42,
from /usr/include/c++/4.5/bits/ios_base.h:43,
from /usr/include/c++/4.5/ios:43,
from /usr/include/c++/4.5/ostream:40,
from /usr/include/c++/4.5/iostream:40,
from /usr/include/CGAL/basic.h:30,
from /usr/include/CGAL/Cartesian/Cartesian_base.h:27,
from /usr/include/CGAL/Simple_cartesian.h:27,
from test.cpp:1:
/usr/include/c++/4.5/bits/stl_function.h: In member function ‘bool
std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp =
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >]’:
/usr/include/c++/4.5/bits/stl_tree.h:1184:4: instantiated from
‘std::pair<std::_Rb_tree_iterator<_Val>, bool> std::_Rb_tree<_Key,
_Val, _KeyOfValue, _Compare, _Alloc>::_M_insert_unique(const _Val&)
[with _Key =
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, _Val = std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int>, _KeyOfValue =
std::_Select1st<std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int> >, _Compare =
std::less<CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > > >, _Alloc =
std::allocator<std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int> >]’
/usr/include/c++/4.5/bits/stl_map.h:501:41: instantiated from
‘std::pair<typename std::_Rb_tree<_Key, std::pair<const _Key, _Tp>,
std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename
_Alloc::rebind<std::map<_Key, _Tp, _Compare,
_Alloc>::value_type>::other>::iterator, bool> std::map<_Key, _Tp,
_Compare, _Alloc>::insert(const std::map<_Key, _Tp, _Compare,
_Alloc>::value_type&) [with _Key =
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, _Tp = int, _Compare =
std::less<CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > > >, _Alloc =
std::allocator<std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int> >, typename
std::_Rb_tree<_Key, std::pair<const _Key, _Tp>,
std::_Select1st<std::pair<const _Key, _Tp> >, _Compare, typename
_Alloc::rebind<std::map<_Key, _Tp, _Compare,
_Alloc>::value_type>::other>::iterator =
std::_Rb_tree_iterator<std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int> >, std::map<_Key, _Tp,
_Compare, _Alloc>::value_type = std::pair<const
CGAL::internal::In_place_list_const_iterator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > >,
std::allocator<CGAL::SNC_in_place_list_svertex<CGAL::SNC_indexed_items::SVertex<CGAL::SNC_structure<CGAL::Simple_cartesian<CGAL::Gmpq>,
CGAL::SNC_indexed_items, bool> > > > >, int>]’
test.cpp:37:41: instantiated from here
/usr/include/c++/4.5/bits/stl_function.h:230:22: error: no match for
‘operator<’ in ‘__x < __y’
/usr/include/CGAL/GMP/Gmpq_type.h:205:1: note: candidates are: bool
CGAL::operator<(const CGAL::Gmpq&, int)
/usr/include/CGAL/GMP/Gmpq_type.h:199:13: note: bool
CGAL::operator<(const CGAL::Gmpq&, double)
/usr/include/CGAL/GMP/Gmpq_type.h:195:1: note: bool
CGAL::operator<(const CGAL::Gmpq&, const CGAL::Gmpq&)
/usr/include/CGAL/GMP/Gmpzf_type.h:561:6: note: bool
CGAL::operator<(const CGAL::Gmpzf&, int)
/usr/include/CGAL/GMP/Gmpzf_type.h:548:6: note: bool
CGAL::operator<(const CGAL::Gmpzf&, const CGAL::Gmpzf&)
/usr/include/CGAL/GMP/Gmpz_type.h:157:1: note: bool
CGAL::operator<(const CGAL::Gmpz&, int)
/usr/include/CGAL/GMP/Gmpz_type.h:145:1: note: bool
CGAL::operator<(const CGAL::Gmpz&, const CGAL::Gmpz&)
/usr/include/CGAL/MP_Float.h:379:6: note: bool
CGAL::operator<(const CGAL::MP_Float&, const CGAL::MP_Float&)
/usr/include/CGAL/Modular_arithmetic/Residue_type.h:297:13: note:
bool CGAL::operator<(const CGAL::Residue&, int)
/usr/include/CGAL/Modular_arithmetic/Residue_type.h:295:13: note:
bool CGAL::operator<(const CGAL::Residue&, const
CGAL::Residue&)
/usr/include/boost/blank.hpp:78:13: note: bool
boost::operator<(const boost::blank&, const boost::blank&)
/usr/include/boost/operators.hpp:133:18: note: bool
boost::operator<(const int&, const CGAL::Gmpq&)
/usr/include/boost/operators.hpp:133:18: note: bool
boost::operator<(const double&, const CGAL::Gmpq&)





Archive powered by MHonArc 2.6.16.

Top of Page