Simplified API documentation

This commit is contained in:
Fernando Cacciola 2007-11-27 22:06:55 +00:00
parent e52d2dabc7
commit 010ff53cbc
9 changed files with 56 additions and 95 deletions

View File

@ -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 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
class \ccc{Straight_skeleton_builder_2<Gt,Ss>} which is
parameterized on a geometric traits (class

View File

@ -26,11 +26,10 @@
\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/Dummy_straight_skeleton_builder_2_visitor.tex}
\input{Straight_skeleton_2_ref/Create_offset_polygon_2.tex}
\input{Straight_skeleton_2_ref/Arrange_offset_polygon_2.tex}
\input{Straight_skeleton_2_ref/Create_interior_skeleton_and_offset_polygon_2.tex}
\input{Straight_skeleton_2_ref/Create_exterior_skeleton_and_offset_polygon_2.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_polygons_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_polygons_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/Compute_outer_frame_margin.tex}

View File

@ -49,13 +49,11 @@ int main()
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 outer_offset_polygons = CGAL::create_exterior_skeleton_and_offset_polygons_2(lOffset,poly);
PolygonPtrVector offset_polygons = CGAL::create_interior_skeleton_and_offset_polygons_2(lOffset,poly);
print_polygons(inner_offset_polygons);
print_polygons(outer_offset_polygons);
print_polygons(offset_polygons);
return 0;
}

View File

@ -1,9 +1,3 @@
#include<vector>
#include<iterator>
#include<iostream>
#include<iomanip>
#include<string>
#include<boost/shared_ptr.hpp>
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
@ -33,15 +27,16 @@ int main()
poly.push_back( Point(-1,1) ) ;
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());
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 ;
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);
return 0;

View File

@ -1,9 +1,3 @@
#include<vector>
#include<iterator>
#include<iostream>
#include<iomanip>
#include<string>
#include<boost/shared_ptr.hpp>
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
@ -47,6 +41,8 @@ int main()
poly.add_hole( hole ) ;
SsPtr iss = CGAL::create_interior_straight_skeleton_2(poly);
print_straight_skeleton(*iss);
return 0;
}

View File

@ -52,7 +52,7 @@ create_offset_polygons_2 ( FT aOffset, Skeleton const& aSs, K const& k, Tag_fals
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 );
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
,CGAL_SS_i::dereference( create_interior_straight_skeleton_2(vertices_begin(aOuterBoundary)
,vertices_end (aOuterBoundary)
,CGAL_SS_i::dereference( create_interior_straight_skeleton_2(CGAL_SS_i::vertices_begin(aOuterBoundary)
,CGAL_SS_i::vertices_end (aOuterBoundary)
,aHolesBegin
,aHolesEnd
,ssk
@ -170,15 +170,11 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
template<class FT, class Polygon, class OfK, class SsK>
std::vector< boost::shared_ptr<Polygon> >
inline
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
, Polygon const& aOuterBoundary
, OfK const& ofk
, SsK const& ssk
)
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk, SsK const& ssk )
{
std::vector<Polygon> no_holes ;
return create_interior_skeleton_and_offset_polygons_2(aOffset
,aOuterBoundary
,aPoly
,no_holes.begin()
,no_holes.end()
,ofk
@ -189,14 +185,11 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
template<class FT, class Polygon, class OfK>
std::vector< boost::shared_ptr<Polygon> >
inline
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
, Polygon const& aOuterBoundary
, OfK const& ofk
)
create_interior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk )
{
std::vector<Polygon> no_holes ;
return create_interior_skeleton_and_offset_polygons_2(aOffset
,aOuterBoundary
,aPoly
,no_holes.begin()
,no_holes.end()
,ofk
@ -207,27 +200,20 @@ create_interior_skeleton_and_offset_polygons_2 ( FT aOffset
template<class FT, class Polygon>
std::vector< boost::shared_ptr<Polygon> >
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
,aOuterBoundary
,typename Polygon::Traits()
);
return create_interior_skeleton_and_offset_polygons_2(aOffset, aPoly, typename Polygon::Traits() );
}
template<class FT, class Polygon, class OfK, class SsK>
std::vector< boost::shared_ptr<Polygon> >
inline
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
, Polygon const& aOuterBoundary
, OfK const& ofk
, SsK const& ssk
)
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk , SsK const& ssk)
{
return create_offset_polygons_2<Polygon>(aOffset
,CGAL_SS_i::dereference(create_exterior_straight_skeleton_2(aOffset
,vertices_begin(aOuterBoundary)
,vertices_end (aOuterBoundary)
,CGAL_SS_i::vertices_begin(aPoly)
,CGAL_SS_i::vertices_end (aPoly)
,ssk
)
)
@ -238,13 +224,10 @@ create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
template<class FT, class Polygon, class OfK>
std::vector< boost::shared_ptr<Polygon> >
inline
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
, Polygon const& aOuterBoundary
, OfK const& ofk
)
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aPoly, OfK const& ofk )
{
return create_exterior_skeleton_and_offset_polygons_2(aOffset
,aOuterBoundary
,aPoly
,ofk
,Exact_predicates_inexact_constructions_kernel()
);
@ -254,14 +237,9 @@ create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
template<class FT, class Polygon>
std::vector< boost::shared_ptr<Polygon> >
inline
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset
, Polygon const& aOuterBoundary
)
create_exterior_skeleton_and_offset_polygons_2 ( FT aOffset, Polygon const& aOuterBoundary )
{
return create_exterior_skeleton_and_offset_polygons_2(aOffset
,aOuterBoundary
,typename Polygon::Traits()
);
return create_exterior_skeleton_and_offset_polygons_2(aOffset, aOuterBoundary, typename Polygon::Traits() );
}

View File

@ -43,17 +43,6 @@ template<class K>
inline typename Polygon_2<K>::Vertex_const_iterator vertices_end( Polygon_2<K> const& aPoly )
{ 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>
@ -176,7 +165,7 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
if ( margin )
{
Bbox_2 bbox = bbox_2( aVerticesBegin, aVerticesEnd);
Bbox_2 bbox = bbox_2(aVerticesBegin, aVerticesEnd);
FT fxmin = bbox.xmin() - *margin ;
FT fxmax = bbox.xmax() + *margin ;
@ -190,13 +179,13 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
frame[2] = Point_2(fxmax,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 ;
Hole lOuterContour(aVerticesBegin, aVerticesEnd);
holes.push_back( reverse_polygon(lOuterContour) ) ;
holes.push_back(lPoly) ;
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>
boost::shared_ptr< Straight_skeleton_2<K> >
inline
create_exterior_straight_skeleton_2 ( FT aMaxOffset
, Polygon const& aOutContour
, K const& k
)
create_exterior_straight_skeleton_2 ( FT aMaxOffset, Polygon const& aPoly, K const& k )
{
return create_exterior_straight_skeleton_2(aMaxOffset
,vertices_begin(aOutContour)
,vertices_end (aOutContour)
,CGAL_SS_i::vertices_begin(aPoly)
,CGAL_SS_i::vertices_end (aPoly)
,k
);
}
@ -238,12 +224,10 @@ create_exterior_straight_skeleton_2 ( FT aMaxOffset
template<class FT, class Polygon>
boost::shared_ptr< Straight_skeleton_2<Exact_predicates_inexact_constructions_kernel> >
inline
create_exterior_straight_skeleton_2 ( FT aMaxOffset
, Polygon const& aOutContour
)
create_exterior_straight_skeleton_2 ( FT aMaxOffset, Polygon const& aPoly )
{
return create_exterior_straight_skeleton_2(aMaxOffset
,aOutContour
,aPoly
,Exact_predicates_inexact_constructions_kernel()
);
}

View File

@ -102,7 +102,6 @@ struct Dummy_straight_skeleton_builder_2_visitor
void on_error( char const* ) const {}
} ;
template<class Traits_, class SSkel_, class Visitor_ = Dummy_straight_skeleton_builder_2_visitor<SSkel_> >
class Straight_skeleton_builder_2
{

View File

@ -132,7 +132,7 @@ struct Straight_skeleton_converter_2
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 ) ;
@ -185,7 +185,7 @@ private :
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();
for ( Source_vertex_const_iterator svit = aSource.vertices_begin(); svit != aSource.vertices_end(); ++ svit, ++ tvit )