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 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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() );
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
Loading…
Reference in New Issue