mirror of https://github.com/CGAL/cgal
Simplified API documentation
This commit is contained in:
parent
e52d2dabc7
commit
010ff53cbc
|
|
@ -361,6 +361,18 @@ Contour vertices have time zero.
|
||||||
|
|
||||||
The straight skeleton data structure is defined by the \ccc{StraightSkeleton_2} concept and modeled in the \ccc{Straight_skeleton_2<Traits,Items,Alloc>} class.
|
The straight skeleton data structure is defined by the \ccc{StraightSkeleton_2} concept and modeled in the \ccc{Straight_skeleton_2<Traits,Items,Alloc>} class.
|
||||||
|
|
||||||
|
The simplest way to construct a straight skeleton is via the free functions \ccc{create_interior_straight_skeleton_2} and \ccc{create_exterior_straight_skeleton_2}, as shown in the following example:
|
||||||
|
|
||||||
|
\ccIncludeExampleCode{Straight_skeleton_2/Create_straight_skeleton_2.cpp}
|
||||||
|
|
||||||
|
The input to these functions is the polygon, which can be given as an iterator pair or directly as a \ccc{Polygon_2} object. In the case of the exterior skeleton, a maximum offset must be specfied as well (see the ref manual details on this max offset parameter).
|
||||||
|
|
||||||
|
If \ccc{Polygon_with_holes_2} is used, you can pass an instance of that directly to the function creating the interior skeleton, as shown below. Notice that a different header must be included in this case.
|
||||||
|
|
||||||
|
\ccIncludeExampleCode{Straight_skeleton_2/Create_straight_skeleton_2.cpp}
|
||||||
|
|
||||||
|
\subsection{Low level API}
|
||||||
|
|
||||||
The straight skeleton construction algorithm is encapsulated in the
|
The straight skeleton construction algorithm is encapsulated in the
|
||||||
class \ccc{Straight_skeleton_builder_2<Gt,Ss>} which is
|
class \ccc{Straight_skeleton_builder_2<Gt,Ss>} which is
|
||||||
parameterized on a geometric traits (class
|
parameterized on a geometric traits (class
|
||||||
|
|
|
||||||
|
|
@ -26,11 +26,10 @@
|
||||||
\input{Straight_skeleton_2_ref/Straight_skeleton_builder_traits_2.tex}
|
\input{Straight_skeleton_2_ref/Straight_skeleton_builder_traits_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Straight_skeleton_builder_2.tex}
|
\input{Straight_skeleton_2_ref/Straight_skeleton_builder_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Dummy_straight_skeleton_builder_2_visitor.tex}
|
\input{Straight_skeleton_2_ref/Dummy_straight_skeleton_builder_2_visitor.tex}
|
||||||
\input{Straight_skeleton_2_ref/Create_offset_polygon_2.tex}
|
\input{Straight_skeleton_2_ref/Create_offset_polygons_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Arrange_offset_polygon_2.tex}
|
\input{Straight_skeleton_2_ref/Arrange_offset_polygons_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Create_interior_skeleton_and_offset_polygon_2.tex}
|
\input{Straight_skeleton_2_ref/Create_interior_skeleton_and_offset_polygons_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Create_exterior_skeleton_and_offset_polygon_2.tex}
|
\input{Straight_skeleton_2_ref/Create_exterior_skeleton_and_offset_polygons_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Create_offset_polygon_2.tex}
|
|
||||||
\input{Straight_skeleton_2_ref/Polygon_offset_builder_traits_2.tex}
|
\input{Straight_skeleton_2_ref/Polygon_offset_builder_traits_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Polygon_offset_builder_2.tex}
|
\input{Straight_skeleton_2_ref/Polygon_offset_builder_2.tex}
|
||||||
\input{Straight_skeleton_2_ref/Compute_outer_frame_margin.tex}
|
\input{Straight_skeleton_2_ref/Compute_outer_frame_margin.tex}
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,11 @@ int main()
|
||||||
|
|
||||||
poly.add_hole( hole ) ;
|
poly.add_hole( hole ) ;
|
||||||
|
|
||||||
double lOffset = 1 ;
|
double lOffset = 0.2 ;
|
||||||
|
|
||||||
PolygonPtrVector inner_offset_polygons = CGAL::create_interior_skeleton_and_offset_polygons_2(lOffset,poly);
|
PolygonPtrVector offset_polygons = CGAL::create_interior_skeleton_and_offset_polygons_2(lOffset,poly);
|
||||||
PolygonPtrVector outer_offset_polygons = CGAL::create_exterior_skeleton_and_offset_polygons_2(lOffset,poly);
|
|
||||||
|
|
||||||
print_polygons(inner_offset_polygons);
|
print_polygons(offset_polygons);
|
||||||
print_polygons(outer_offset_polygons);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,3 @@
|
||||||
#include<vector>
|
|
||||||
#include<iterator>
|
|
||||||
#include<iostream>
|
|
||||||
#include<iomanip>
|
|
||||||
#include<string>
|
|
||||||
|
|
||||||
#include<boost/shared_ptr.hpp>
|
#include<boost/shared_ptr.hpp>
|
||||||
|
|
||||||
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||||
|
|
@ -33,15 +27,16 @@ int main()
|
||||||
poly.push_back( Point(-1,1) ) ;
|
poly.push_back( Point(-1,1) ) ;
|
||||||
poly.push_back( Point(-12,0) ) ;
|
poly.push_back( Point(-12,0) ) ;
|
||||||
|
|
||||||
// You can pass the polygon via a pointer-iterator pair, or directly, as below
|
// You can pass the polygon via a pointer-iterator pair
|
||||||
SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly.vertices_begin(), poly.vertices_end());
|
SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly.vertices_begin(), poly.vertices_end());
|
||||||
|
|
||||||
print_straight_skeleton(*iss);
|
// Or you can pass the polygon directly, as below.
|
||||||
|
|
||||||
// To create an exterior straight skeleton you need to specify a maximum offset
|
// To create an exterior straight skeleton you need to specify a maximum offset.
|
||||||
double lMaxOffset = 5 ;
|
double lMaxOffset = 5 ;
|
||||||
SsPtr oss = CGAL::create_exterior_straight_skeleton_2(lMaxOffset, poly);
|
SsPtr oss = CGAL::create_exterior_straight_skeleton_2(lMaxOffset, poly);
|
||||||
|
|
||||||
|
print_straight_skeleton(*iss);
|
||||||
print_straight_skeleton(*oss);
|
print_straight_skeleton(*oss);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,3 @@
|
||||||
#include<vector>
|
|
||||||
#include<iterator>
|
|
||||||
#include<iostream>
|
|
||||||
#include<iomanip>
|
|
||||||
#include<string>
|
|
||||||
|
|
||||||
#include<boost/shared_ptr.hpp>
|
#include<boost/shared_ptr.hpp>
|
||||||
|
|
||||||
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
|
||||||
|
|
@ -48,5 +42,7 @@ int main()
|
||||||
|
|
||||||
SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly);
|
SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly);
|
||||||
|
|
||||||
|
print_straight_skeleton(*iss);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ create_offset_polygons_2 ( FT aOffset, Skeleton const& aSs, K const& k, Tag_fals
|
||||||
|
|
||||||
OutPolygonPtrVector rR ;
|
OutPolygonPtrVector rR ;
|
||||||
|
|
||||||
boost::shared_ptr<OfSkeleton> lConvertedSs = convert_straight_skeleton<K>(aSs);
|
boost::shared_ptr<OfSkeleton> lConvertedSs = convert_straight_skeleton_2<OfSkeleton>(aSs);
|
||||||
OffsetBuilder ob( *lConvertedSs );
|
OffsetBuilder ob( *lConvertedSs );
|
||||||
ob.construct_offset_contours(aOffset, std::back_inserter(rR) ) ;
|
ob.construct_offset_contours(aOffset, std::back_inserter(rR) ) ;
|
||||||
|
|
||||||
|
|
@ -136,8 +136,8 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return create_offset_polygons_2<Polygon>(aOffset
|
return create_offset_polygons_2<Polygon>(aOffset
|
||||||
,CGAL_SS_i::dereference( create_interior_straight_skeleton_2(vertices_begin(aOuterBoundary)
|
,CGAL_SS_i::dereference( create_interior_straight_skeleton_2(CGAL_SS_i::vertices_begin(aOuterBoundary)
|
||||||
,vertices_end (aOuterBoundary)
|
,CGAL_SS_i::vertices_end (aOuterBoundary)
|
||||||
,aHolesBegin
|
,aHolesBegin
|
||||||
,aHolesEnd
|
,aHolesEnd
|
||||||
,ssk
|
,ssk
|
||||||
|
|
@ -170,15 +170,11 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
template<class FT, class Polygon, class OfK, class SsK>
|
template<class FT, class Polygon, class OfK, class SsK>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk, SsK const& ssk )
|
||||||
, Polygon const& aOuterBoundary
|
|
||||||
, OfK const& ofk
|
|
||||||
, SsK const& ssk
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
std::vector<Polygon> no_holes ;
|
std::vector<Polygon> no_holes ;
|
||||||
return create_interior_skeleton_and_offset_polygons_2(aOffset
|
return create_interior_skeleton_and_offset_polygons_2(aOffset
|
||||||
,aOuterBoundary
|
,aPoly
|
||||||
,no_holes.begin()
|
,no_holes.begin()
|
||||||
,no_holes.end()
|
,no_holes.end()
|
||||||
,ofk
|
,ofk
|
||||||
|
|
@ -189,14 +185,11 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
template<class FT, class Polygon, class OfK>
|
template<class FT, class Polygon, class OfK>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk )
|
||||||
, Polygon const& aOuterBoundary
|
|
||||||
, OfK const& ofk
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
std::vector<Polygon> no_holes ;
|
std::vector<Polygon> no_holes ;
|
||||||
return create_interior_skeleton_and_offset_polygons_2(aOffset
|
return create_interior_skeleton_and_offset_polygons_2(aOffset
|
||||||
,aOuterBoundary
|
,aPoly
|
||||||
,no_holes.begin()
|
,no_holes.begin()
|
||||||
,no_holes.end()
|
,no_holes.end()
|
||||||
,ofk
|
,ofk
|
||||||
|
|
@ -207,27 +200,20 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
template<class FT, class Polygon>
|
template<class FT, class Polygon>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aOuterBoundary )
|
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly )
|
||||||
{
|
{
|
||||||
return create_interior_skeleton_and_offset_polygons_2(aOffset
|
return create_interior_skeleton_and_offset_polygons_2(aOffset, aPoly, typename Polygon::Traits() );
|
||||||
,aOuterBoundary
|
|
||||||
,typename Polygon::Traits()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class FT, class Polygon, class OfK, class SsK>
|
template<class FT, class Polygon, class OfK, class SsK>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
|
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk , SsK const& ssk)
|
||||||
, Polygon const& aOuterBoundary
|
|
||||||
, OfK const& ofk
|
|
||||||
, SsK const& ssk
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return create_offset_polygons_2<Polygon>(aOffset
|
return create_offset_polygons_2<Polygon>(aOffset
|
||||||
,CGAL_SS_i::dereference(create_exterior_straight_skeleton_2(aOffset
|
,CGAL_SS_i::dereference(create_exterior_straight_skeleton_2(aOffset
|
||||||
,vertices_begin(aOuterBoundary)
|
,CGAL_SS_i::vertices_begin(aPoly)
|
||||||
,vertices_end (aOuterBoundary)
|
,CGAL_SS_i::vertices_end (aPoly)
|
||||||
,ssk
|
,ssk
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -238,13 +224,10 @@ create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
template<class FT, class Polygon, class OfK>
|
template<class FT, class Polygon, class OfK>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
|
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk )
|
||||||
, Polygon const& aOuterBoundary
|
|
||||||
, OfK const& ofk
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return create_exterior_skeleton_and_offset_polygons_2(aOffset
|
return create_exterior_skeleton_and_offset_polygons_2(aOffset
|
||||||
,aOuterBoundary
|
,aPoly
|
||||||
,ofk
|
,ofk
|
||||||
,Exact_predicates_inexact_constructions_kernel()
|
,Exact_predicates_inexact_constructions_kernel()
|
||||||
);
|
);
|
||||||
|
|
@ -254,14 +237,9 @@ create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
|
||||||
template<class FT, class Polygon>
|
template<class FT, class Polygon>
|
||||||
std::vector< boost::shared_ptr<Polygon> >
|
std::vector< boost::shared_ptr<Polygon> >
|
||||||
inline
|
inline
|
||||||
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
|
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aOuterBoundary )
|
||||||
, Polygon const& aOuterBoundary
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return create_exterior_skeleton_and_offset_polygons_2(aOffset
|
return create_exterior_skeleton_and_offset_polygons_2(aOffset, aOuterBoundary, typename Polygon::Traits() );
|
||||||
,aOuterBoundary
|
|
||||||
,typename Polygon::Traits()
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,17 +43,6 @@ template<class K>
|
||||||
inline typename Polygon_2<K>::Vertex_const_iterator vertices_end( Polygon_2<K> const& aPoly )
|
inline typename Polygon_2<K>::Vertex_const_iterator vertices_end( Polygon_2<K> const& aPoly )
|
||||||
{ return aPoly.vertices_end() ; }
|
{ return aPoly.vertices_end() ; }
|
||||||
|
|
||||||
template<class Poly>
|
|
||||||
inline Poly reverse_polygon ( Poly const& aPoly ) { return Poly( aPoly.rbegin(), aPoly.rend() ) ; }
|
|
||||||
|
|
||||||
template<class K>
|
|
||||||
inline Polygon_2<K> reverse_polygon( Polygon_2<K> const& aPoly )
|
|
||||||
{
|
|
||||||
Polygon_2<K> r ( aPoly ) ;
|
|
||||||
r.reverse_orientation();
|
|
||||||
return r ;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class PointIterator, class HoleIterator, class K>
|
template<class PointIterator, class HoleIterator, class K>
|
||||||
|
|
@ -190,13 +179,13 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
|
||||||
frame[2] = Point_2(fxmax,fymax) ;
|
frame[2] = Point_2(fxmax,fymax) ;
|
||||||
frame[3] = Point_2(fxmin,fymax) ;
|
frame[3] = Point_2(fxmin,fymax) ;
|
||||||
|
|
||||||
typedef typename HoleIterator::value_type Hole ;
|
typedef std::vector<Point_2> Hole ;
|
||||||
|
|
||||||
|
Hole lPoly(aVerticesBegin, aVerticesEnd);
|
||||||
|
std::reverse(lPoly.begin(), lPoly.end());
|
||||||
|
|
||||||
std::vector<Hole> holes ;
|
std::vector<Hole> holes ;
|
||||||
|
holes.push_back(lPoly) ;
|
||||||
Hole lOuterContour(aVerticesBegin, aVerticesEnd);
|
|
||||||
|
|
||||||
holes.push_back( reverse_polygon(lOuterContour) ) ;
|
|
||||||
|
|
||||||
rSkeleton = create_interior_straight_skeleton_2(frame, frame+4, holes.begin(), holes.end(), k ) ;
|
rSkeleton = create_interior_straight_skeleton_2(frame, frame+4, holes.begin(), holes.end(), k ) ;
|
||||||
}
|
}
|
||||||
|
|
@ -223,14 +212,11 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
|
||||||
template<class FT, class Polygon, class K>
|
template<class FT, class Polygon, class K>
|
||||||
boost::shared_ptr< Straight_skeleton_2<K> >
|
boost::shared_ptr< Straight_skeleton_2<K> >
|
||||||
inline
|
inline
|
||||||
create_exterior_straight_skeleton_2 ( FT aMaxOffset
|
create_exterior_straight_skeleton_2 ( FT aMaxOffset, Polygon const& aPoly, K const& k )
|
||||||
, Polygon const& aOutContour
|
|
||||||
, K const& k
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return create_exterior_straight_skeleton_2(aMaxOffset
|
return create_exterior_straight_skeleton_2(aMaxOffset
|
||||||
,vertices_begin(aOutContour)
|
,CGAL_SS_i::vertices_begin(aPoly)
|
||||||
,vertices_end (aOutContour)
|
,CGAL_SS_i::vertices_end (aPoly)
|
||||||
,k
|
,k
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -238,12 +224,10 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
|
||||||
template<class FT, class Polygon>
|
template<class FT, class Polygon>
|
||||||
boost::shared_ptr< Straight_skeleton_2<Exact_predicates_inexact_constructions_kernel> >
|
boost::shared_ptr< Straight_skeleton_2<Exact_predicates_inexact_constructions_kernel> >
|
||||||
inline
|
inline
|
||||||
create_exterior_straight_skeleton_2 ( FT aMaxOffset
|
create_exterior_straight_skeleton_2 ( FT aMaxOffset, Polygon const& aPoly )
|
||||||
, Polygon const& aOutContour
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return create_exterior_straight_skeleton_2(aMaxOffset
|
return create_exterior_straight_skeleton_2(aMaxOffset
|
||||||
,aOutContour
|
,aPoly
|
||||||
,Exact_predicates_inexact_constructions_kernel()
|
,Exact_predicates_inexact_constructions_kernel()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,6 @@ struct Dummy_straight_skeleton_builder_2_visitor
|
||||||
void on_error( char const* ) const {}
|
void on_error( char const* ) const {}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
template<class Traits_, class SSkel_, class Visitor_ = Dummy_straight_skeleton_builder_2_visitor<SSkel_> >
|
template<class Traits_, class SSkel_, class Visitor_ = Dummy_straight_skeleton_builder_2_visitor<SSkel_> >
|
||||||
class Straight_skeleton_builder_2
|
class Straight_skeleton_builder_2
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ struct Straight_skeleton_converter_2
|
||||||
|
|
||||||
private :
|
private :
|
||||||
|
|
||||||
Target_skeleton_ptr create_unconnected_copy ( Source_skeleton const& aSource )
|
Target_skeleton_ptr create_unconnected_copy ( Source_skeleton const& aSource ) const
|
||||||
{
|
{
|
||||||
Target_skeleton_ptr rCopy ( new Target_skeleton ) ;
|
Target_skeleton_ptr rCopy ( new Target_skeleton ) ;
|
||||||
|
|
||||||
|
|
@ -185,7 +185,7 @@ private :
|
||||||
return rCopy ;
|
return rCopy ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void connect_items ( Source_skeleton const& aSource, Target_skeleton& aTarget )
|
void connect_items ( Source_skeleton const& aSource, Target_skeleton& aTarget ) const
|
||||||
{
|
{
|
||||||
Target_vertex_iterator tvit = aTarget.vertices_begin();
|
Target_vertex_iterator tvit = aTarget.vertices_begin();
|
||||||
for ( Source_vertex_const_iterator svit = aSource.vertices_begin(); svit != aSource.vertices_end(); ++ svit, ++ tvit )
|
for ( Source_vertex_const_iterator svit = aSource.vertices_begin(); svit != aSource.vertices_end(); ++ svit, ++ tvit )
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue