Add Surface_mesh_simplification
|
|
@ -5635,6 +5635,41 @@ Surface_mesh_parameterization/test/Surface_mesh_parameterization/data/pyramid.of
|
|||
Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cmd eol=lf
|
||||
Surface_mesh_parameterization/test/Surface_mesh_parameterization/quick_test_suite.bat eol=crlf
|
||||
Surface_mesh_parameterization/test/Surface_mesh_parameterization/quick_test_suite.sh eol=lf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Edge_collapse_visitor_base.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_ratio_stop_predicate.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Count_stop_predicate.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_length_cost.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Edge_profile.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_cost.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/LindstromTurk_placement.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/Policies/Edge_collapse/Midpoint_placement.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/CGAL/Surface_mesh_simplification/edge_collapse.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Classified.txt -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapsableMesh.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeCollapseSimplificationVisitor.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/EdgeProfile.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetCost.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/GetPlacement.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Concepts/StopPredicate.h -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/PackageDescription.txt -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/Surface_mesh_simplification.txt -text
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.jpg -text svneol=unset#image/jpeg
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse1.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse1.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse2.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse2.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse3.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse3.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse4.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/border_collapse4.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/collapse0.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/collapse0.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/collapse1.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/collapse1.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/detail.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/general_collapse.pdf -text svneol=unset#application/pdf
|
||||
Surface_mesh_simplification/doc/Surface_mesh_simplification/fig/general_collapse.png -text svneol=unset#image/png
|
||||
Surface_mesh_simplification/doc_tex/OLD[!!-~]Surface_mesh_simplification.tex -text
|
||||
Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.jpg -text
|
||||
Surface_mesh_simplification/doc_tex/Surface_mesh_simplification/fig/Illustration-Simplification-ALL.pdf -text svneol=unset#application/pdf
|
||||
|
|
|
|||
|
|
@ -252,6 +252,20 @@ namespace for the XML file to be processed properly. -->
|
|||
</doxygen>
|
||||
</project>
|
||||
|
||||
<project>
|
||||
<name>Triangulated Surface Mesh Simplification</name>
|
||||
<input>../Surface_mesh_simplification/doc</input>
|
||||
<doxygen>
|
||||
<string name="STRIP_FROM_PATH">../Surface_mesh_simplification/doc/Surface_mesh_simplification/</string>
|
||||
<string name="STRIP_FROM_INC_PATH">../Surface_mesh_simplification/doc/Surface_mesh_simplification/</string>
|
||||
<string name="GENERATE_TAGFILE">./tags/Surface_mesh_simplification.tag</string>
|
||||
<string name="EXAMPLE_PATH">../Surface_mesh_simplification/examples</string>
|
||||
<string name="IMAGE_PATH">../Surface_mesh_simplification/doc/Surface_mesh_simplification/fig</string>
|
||||
</doxygen>
|
||||
</project>
|
||||
|
||||
|
||||
|
||||
<project>
|
||||
<name>3D Convex Hulls</name>
|
||||
<input>../Convex_hull_3/doc</input>
|
||||
|
|
@ -975,6 +989,7 @@ namespace for the XML file to be processed properly. -->
|
|||
<item>../Segment_Delaunay_graph_2/doc/Segment_Delaunay_graph_2/fig</item>
|
||||
<item>../Straight_skeleton_2/doc/Straight_skeleton_2/fig</item>
|
||||
<item>../Voronoi_diagram_2/doc/Voronoi_diagram_2/fig</item>
|
||||
<item>../Surface_mesh_simplification/doc/Surface_mesh_simplification/fig</item>
|
||||
</list>
|
||||
<list name="TAGFILES" append="false">
|
||||
<item>./tags/Algebraic_foundations.tag=../../CGAL.CGAL.Algebraic-Foundations/html</item>
|
||||
|
|
@ -1033,6 +1048,7 @@ namespace for the XML file to be processed properly. -->
|
|||
<item>./tags/Segment_Delaunay_graph_2.tag=../../CGAL.CGAL.2D-Segment-Delaunay-Graphs/html</item>
|
||||
<item>./tags/Straight_skeleton_2.tag=../../CGAL.CGAL.2D-Straight-Skeleton-and-Polygon-Offsetting/html</item>
|
||||
<item>./tags/Voronoi_diagram_2.tag=../../CGAL.CGAL.2D-Voronoi-Diagram-Adaptor/html</item>
|
||||
<item>./tags/Surface_mesh_simplification.tag=../../CGAL.CGAL.Triangulated-Surface-Mesh-Simplification/html</item>
|
||||
</list>
|
||||
<string name="HTML_EXTRA_STYLESHEET">cgal_stylesheet.css</string>
|
||||
<bool name="ALLEXTERNALS">true</bool>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Edge_collapse_visitor_base` provides a base class for models of the `EdgeCollapseSimplificationVisitor` concept.
|
||||
It has one template argument: the type of surface being simplified,
|
||||
which must be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
This base class implements all of the visitor's callbacks.
|
||||
This way, users need only override the callbacks they are interested in.
|
||||
The callbacks <I>are not virtual</I> because this is not a dynamically polymorphic base class
|
||||
and the derived visitor will never be used polymorphically at runtime (is perfectly fine to override
|
||||
and hide a non-virtual method in the context of the static polymorphism used in the simplification algorithm).
|
||||
|
||||
\models ::EdgeCollapseSimplificationVisitor
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Edge_collapse_visitor_base {
|
||||
public:
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Edge_collapse_visitor_base */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Count_ratio_stop_predicate` provides a model for the `StopPredicate` concept.
|
||||
It has one template argument: the type of surface being simplified,
|
||||
which must be a model of the `EdgeCollapsableMesh` concept.
|
||||
It returns `true` when the relation between the initial and current number
|
||||
of edges drops below a certain ratio.
|
||||
|
||||
\models ::StopPredicate
|
||||
|
||||
\sa `CGAL::Surface_mesh_simplification::Count_stop_predicate<ECM>`
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Count_ratio_stop_predicate {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Initializes the predicate establishing the `ratio`.
|
||||
*/
|
||||
Count_ratio_stop_predicate<ECM>( double ratio );
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns \f$ ( ((double)current\_count / (double)initial\_count) < ratio)\f$.
|
||||
All other parameters are ignored (but exist since this is a generic policy).
|
||||
*/
|
||||
bool operator()( FT const& current_cost
|
||||
, Profile const& edge_profile
|
||||
, size_type initial_count
|
||||
, size_type current_count
|
||||
) const ;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Count_ratio_stop_predicate */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Count_stop_predicate` provides a model for the `StopPredicate` concept.
|
||||
It has one template argument: the type of surface being simplified,
|
||||
which must be a model of the `EdgeCollapsableMesh` concept.
|
||||
It returns `true` when the number of current edges drops below a certain threshold.
|
||||
|
||||
\models ::StopPredicate
|
||||
|
||||
\sa `CGAL::Surface_mesh_simplification::Count_ratio_stop_predicate<ECM>`
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Count_stop_predicate {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Initializes the predicate establishing the `threshold` value.
|
||||
*/
|
||||
Count_stop_predicate<ECM>( size_type threshold );
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns \f$ (current\_count < threshold)\f$. All other parameters are ignored (but exist since this is a generic policy).
|
||||
*/
|
||||
bool operator()( FT const& current_cost
|
||||
, Profile const& edge_profile
|
||||
, size_type initial_count
|
||||
, size_type current_count
|
||||
) const ;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Count_stop_predicate */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Edge_length_cost` provides a model for the `GetCost` concept.
|
||||
It has one template argument: the type of surface being simplified,
|
||||
which must be a model of the `EdgeCollapsableMesh` concept.
|
||||
It computes the collapse cost as the squared length of the edge.
|
||||
|
||||
\models ::GetCost
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Edge_length_cost {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
Edge_length_cost<ECM>();
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns the <I>collapse cost</I> as the squared distance between the points
|
||||
of the source and target vertices (that is, `profile.p0()` and `profile.p1()`.
|
||||
|
||||
The `placement` argument is ignored.
|
||||
|
||||
*/
|
||||
result_type operator()( Profile const& profile
|
||||
, boost::optional<Point> const& placement ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Edge_length_cost */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Edge_profile` provides a model for the `EdgeProfile` concept.
|
||||
It has one template argument: the type of surface being simplified,
|
||||
which must be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
\models ::EdgeProfile
|
||||
|
||||
\sa `GetCost`
|
||||
\sa `GetPlacement`
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Edge_profile {
|
||||
public:
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Edge_profile */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::LindstromTurk_cost` provides a model for the `GetCost` concept.
|
||||
It computes the collapse cost following the Lindstrom-Turk strategy
|
||||
(Section \ref SurfaceMeshSimplificationLindstromTurkStrategy)
|
||||
|
||||
The class `Surface_mesh_simplification::LindstromTurk_cost` has one template argument: the type of surface being simplified.
|
||||
It must be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
\models ::GetCost
|
||||
|
||||
\sa `CGAL::Surface_mesh_simplification::LindstromTurk_placement<ECM>`
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::LindstromTurk_cost {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Initializes the policy with the given <I>weighting unit factor</I>.
|
||||
See \ref SurfaceMeshSimplificationLindstromTurkStrategy for details on the meaning of this factor.
|
||||
*/
|
||||
LindstromTurk_cost<ECM>( FT const& factor = FT(0.5) );
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns the cost of collapsing the edge (represented by its profile) considering
|
||||
the new `placement` computed for it.
|
||||
*/
|
||||
result_type operator()( Profile const& profile
|
||||
, boost::optional<Point> const& placement ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::LindstromTurk_cost */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::LindstromTurk_placement` provides a model for the `GetPlacement` concept.
|
||||
It computes the placement, that is, the new position for the remaining vertex after
|
||||
a halfedge-collapse, following the Lindstrom-Turk strategy
|
||||
(Section \ref SurfaceMeshSimplificationLindstromTurkStrategy).
|
||||
|
||||
The class `Surface_mesh_simplification::LindstromTurk_placement` has one template argument: the type of surface being simplified.
|
||||
It must be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
\models ::GetPlacement
|
||||
|
||||
\sa `CGAL::Surface_mesh_simplification::LindstromTurk_cost<ECM>`
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::LindstromTurk_placement {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Initializes the policy with the given <I>weighting unit factor</I>.
|
||||
See \ref SurfaceMeshSimplificationLindstromTurkStrategy for details on the meaning of this factor.
|
||||
*/
|
||||
LindstromTurk_placement<ECM>( FT const& factor = FT(0.5) );
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns the new position for the remaining vertex after collapsing the edge
|
||||
(represented by its profile).
|
||||
*/
|
||||
result_type operator()( Profile const& edge_profile ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::LindstromTurk_placement */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
|
||||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
The class `Surface_mesh_simplification::Midpoint_placement` provides a model for the `GetPlacement` concept.
|
||||
It computes the placement as the midpoint position along the edge.
|
||||
|
||||
The class `Surface_mesh_simplification::Midpoint_placement` has one template arguments: the type of surface being simplified.
|
||||
It be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
\models ::GetPlacement
|
||||
|
||||
*/
|
||||
template< typename ECM >
|
||||
class Surface_mesh_simplification::Midpoint_placement {
|
||||
public:
|
||||
|
||||
/// \name Creation
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Default constructor
|
||||
*/
|
||||
Midpoint_placement<ECM>();
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Returns the <I>placement</I> (vertex position) as the midpoint between
|
||||
the points of the source and target vertices
|
||||
(`profile.p0()` and `profile.p1()`)
|
||||
*/
|
||||
result_type operator()( Profile const& edge_profile ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end Surface_mesh_simplification::Midpoint_placement */
|
||||
} /* end namespace CGAL */
|
||||
|
|
@ -0,0 +1,161 @@
|
|||
namespace CGAL {
|
||||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplification
|
||||
|
||||
Simplifies `surface` in-place by collapsing edges, and returns
|
||||
the number of edges effectively removed.
|
||||
|
||||
The function `Surface_mesh_simplification::edge_collapse` simplifies in-place a triangulated surface mesh by iteratively collapsing edges.
|
||||
|
||||
Non-named parameters
|
||||
--------------
|
||||
|
||||
`surface` is the surface to simplify.
|
||||
It must be a model of the `EdgeCollapsableMesh` concept.
|
||||
|
||||
`should_stop` is the stop-condition policy.
|
||||
It must be a model of the `StopPredicate` concept.
|
||||
|
||||
Named parameters
|
||||
--------------
|
||||
|
||||
`named_parameters` holds the list of all the additional parameters
|
||||
used by the `edge_collapse` function (including default parameters).
|
||||
|
||||
The named parameters list is a composition of function calls separated by a dot (\f$ .\f$) where
|
||||
the name of each function matches the name of an argument and wraps the actual parameter.
|
||||
|
||||
This is an example with 2 arguments:
|
||||
|
||||
`vertex_index_map(the_actual_vertex_index_map).edge_index_map(the_actual_edge_index_map)`
|
||||
|
||||
`the_actual_vertex_index_map` and `the_actual_edge_index_map` are
|
||||
the actual parameters, while `vertex_index_map()` and `edge_index_map()`
|
||||
are wrapper functions used to designate each formal argument.
|
||||
|
||||
All named parameters have default values so you only need to compose those for which the default
|
||||
is inappropriate. Furthermore, since each actual parameter is wrapped in a function whose name
|
||||
designates the formal argument, the order of named parameters in the list is totally irrelevant.
|
||||
|
||||
In the following subsections, each named parameter is documented as a helper function. The argument to each helper
|
||||
function is the actual parameter to `edge_collapse()`, while the name of the helper
|
||||
function designates which formal argument it is.
|
||||
|
||||
## vertex_index_map(VertexIndexMap vpm) ##
|
||||
|
||||
Maps each vertex in the surface into an unsigned integer number
|
||||
in the range `[0,num_vertices(surface))`.
|
||||
|
||||
`VertexIndexMap` must be a
|
||||
<A HREF="http://www.boost.org/libs/property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</A>
|
||||
whose `key_type` is
|
||||
`boost::graph_traits<EdgeCollapsableMesh const>::vertex_descriptor`
|
||||
and whose `value_type` is
|
||||
`boost::graph_traits<EdgeCollapsableMesh>::size_type`,
|
||||
|
||||
<B>Default</B>: the property map obtained by calling `get(vertex_index,surface)`,
|
||||
which requires the surface vertices to have an `id()` member properly initialized to the
|
||||
required value.
|
||||
|
||||
If the vertices don't have such an `id()`, you must pass some property map explicitly.
|
||||
An external property map can be easily obtained by calling
|
||||
`get(vertex_external_index,surface)`. This constructs on the fly, and returns,
|
||||
a property map which non-intrusively associates a proper id with each vertex.
|
||||
|
||||
## edge_index_map(EdgeIndexMap eim) ##
|
||||
|
||||
Maps each <I>directed</I> edge in the surface into an unsigned integer number
|
||||
in the range `[0,num_edges(surface))`.
|
||||
|
||||
`EdgeIndexMap` must be a
|
||||
<A HREF="http://www.boost.org/libs/property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</A>
|
||||
whose `key_type` is
|
||||
`boost::graph_traits<EdgeCollapsableMesh const>::edge_descriptor`
|
||||
and whose `value_type` is
|
||||
`boost::graph_traits<EdgeCollapsableMesh>::size_type`
|
||||
|
||||
<B>Default</B>: the property map obtained by calling `get(edge_index,surface)`,
|
||||
which requires the surface edges to have an `id()` member properly initialized to the
|
||||
require value.
|
||||
|
||||
If the edges don't have such an `id()`, you must pass some property map explicitly.
|
||||
An external property map can be easily obtained by calling
|
||||
`get(edge_external_index,surface)`. This constructs on the fly, and returns,
|
||||
a property map which non-intrusively associates a proper id with each edge.
|
||||
|
||||
## edge_is_border_map(EdgeIsBorderMap ebm) ##
|
||||
|
||||
Maps each <I>directed</I> edge in the surface into a Boolean value
|
||||
which indicates if the edge belongs to the boundary of the surface
|
||||
(facing the outside).
|
||||
`EdgeIsBorderMap` must be a
|
||||
<A HREF="http://www.boost.org/libs/property_map/doc/ReadablePropertyMap.html">ReadablePropertyMap</A>
|
||||
whose `key_type` is
|
||||
`boost::graph_traits<EdgeCollapsableMesh const>::edge_descriptor`
|
||||
and whose `value_type` is `bool`.
|
||||
|
||||
<B>Default</B>: the property map obtained by calling `get(edge_is_border,surface)`.
|
||||
|
||||
## get_cost(GetCost gc) ##
|
||||
|
||||
The policy which returns the collapse cost for an edge.
|
||||
|
||||
The type of `gc` must be a model of the `GetCost` concept.
|
||||
|
||||
<B>Default</B>:
|
||||
`CGAL::Surface_mesh_simplification::LindstromTurk_cost<EdgeCollapsableMesh>`.
|
||||
|
||||
## get_placement(GetPlacement gp) ##
|
||||
|
||||
The policy which returns the placement (position of the replacemet vertex)
|
||||
for an edge.
|
||||
|
||||
The type of `gp` must be a model of the `GetPlacement` concept.
|
||||
|
||||
<B>Default</B>:
|
||||
`CGAL::Surface_mesh_simplification::LindstromTurk_placement<EdgeCollapsableMesh>`
|
||||
|
||||
## visitor(EdgeCollapseSimplificationVisitor v) ##
|
||||
|
||||
The visitor that is called by the `edge_collapse` function
|
||||
in certain points to allow the user to track the simplification process.
|
||||
|
||||
The type of `v` must be a model of the `EdgeCollapseSimplificationVisitor` concept.
|
||||
|
||||
<B>Default: an implementation-defined dummy visitor</B>.
|
||||
|
||||
If you wish to provide your own visitor, you can derive from:
|
||||
`CGAL::Surface_mesh_simplification::Edge_collapse_visitor_base<EdgeCollapsableMesh>`
|
||||
and override only the callbacks you are interested in.
|
||||
|
||||
All these functions naming parameters are defined in
|
||||
`namespace CGAL`. Being non-member functions, they could clash
|
||||
with equally named functions in some other namespace. If that happens,
|
||||
simply qualify the <I>first</I>
|
||||
\footnote{The second and subsequent named parameters shall not be qualified as they are member functions}
|
||||
named parameter with `CGAL::`, as shown in the examples in the user manual.
|
||||
|
||||
Semantics
|
||||
--------------
|
||||
|
||||
The simplification process continues until the `should_stop` policy returns `true`
|
||||
or the surface cannot be simplified any further due to topological constraints.
|
||||
|
||||
`get_cost` and `get_placement` are the policies which control
|
||||
the <I>cost-strategy</I>, that is, the order in which edges are collapsed
|
||||
and the remaining vertex is re-positioned.
|
||||
|
||||
`visitor` is used to keep track of the simplification process. It has several member functions which
|
||||
are called at certain points in the simplification code.
|
||||
|
||||
*/
|
||||
|
||||
template<class EdgeCollapsableMesh,class StopPredicate, class P, class T, class R>
|
||||
int edge_collapse ( EdgeCollapsableMesh& surface
|
||||
, StopPredicate const& should_stop
|
||||
, sms_named_params<P,T,R> const& named_parameters
|
||||
) ;
|
||||
|
||||
} /* namespace CGAL */
|
||||
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
|
||||
This chapter introduces the concepts and classes of the triangulated surface mesh simplification package.
|
||||
|
||||
The packages provides a policy-based algorithm for the simplification of triangulated surface meshes
|
||||
by iterative edge-collapsing.
|
||||
|
||||
# Classified Reference Pages #
|
||||
|
||||
HEADING:Concepts
|
||||
--------------
|
||||
|
||||
`EdgeCollapsableMesh`
|
||||
|
||||
`EdgeProfile`
|
||||
|
||||
`StopPredicate`
|
||||
|
||||
`GetCost`
|
||||
|
||||
`GetPlacement`
|
||||
|
||||
`EdgeCollapseSimplificationVisitor`
|
||||
|
||||
HEADING:Functions
|
||||
--------------
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::edge_collapse
|
||||
|
||||
HEADING:Classes
|
||||
--------------
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Edge_collapse_visitor_base<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Edge_profile<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Count_stop_predicate<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Count_ratio_stop_predicate<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Edge_length_cost<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::Midpoint_placement<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::LindstromTurk_cost<ECM>
|
||||
|
||||
\ref ::CGAL::Surface_mesh_simplification::LindstromTurk_placement<ECM>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `EdgeCollapsableMesh` describes the requirements for the type of
|
||||
triangulated surface mesh that can be passed to the
|
||||
simplification algorithm.
|
||||
|
||||
The surface must be structurally equivalent to a polyhedral surface
|
||||
having only triangular faces.
|
||||
It can have any number of connected components, boundaries
|
||||
(borders and holes) and handles (arbitrary genus).
|
||||
|
||||
\refines ::HalfedgeGraph
|
||||
|
||||
Valid Expressions
|
||||
--------------
|
||||
|
||||
The mesh simplification algorithm requires the free function `collapse_triangulation_edge()`.
|
||||
|
||||
Let `v0` be the source and `v1` be the target vertices of `v0v1`.
|
||||
|
||||
For `e` \f$ \in \{\f$ `v0v1,v1v0` \f$ \}\f$, let `en` and `ep` be the next and previous
|
||||
edges, that is `en = next_edge(e, mesh)`, `ep = prev_edge(e,mesh)`, and let
|
||||
`eno` and `epo` be their opposite edges, that is
|
||||
`eno = opposite_edge(en, mesh)` and `epo = opposite_edge(ep,mesh)`.
|
||||
|
||||
Then, after the collapse of `(v0v1,v1v0)` the following holds:
|
||||
|
||||
<UL>
|
||||
<LI>The edge `e` is no longer in `mesh`.
|
||||
<LI>One of \f$ \{\f$`v0,v1`\f$ \}\f$ is no longer in `mesh` while the other remains.
|
||||
\footnote{Even though it would appear that v0 can always be the vertex being removed, there is a case when removing the edge `e` <I>requires</I> `v1` to be removed as well. See figure \ref CollapseFigure5.}
|
||||
Let `vgone` be the removed vertex and `vkept` be the remaining vertex.
|
||||
<LI>If `e` was a border edge, that is `get(is_border, e, mesh) == true`, then `next_edge(ep) == en`, and `prev_edge(en) == ep`.
|
||||
<LI>If `e` was not a border edge, that is `get(is_border, e, mesh) == false`, then `ep` and `epo` are no longer in `mesh` while `en` and `eno` are kept in `mesh`.
|
||||
<LI>For all edges `ie` in `in_edges(vgone,mesh)`, `target(ie,mesh) == vkept` and `source(opposite_edge(ie),mesh) == vkept`.
|
||||
<LI>No other incidence information has changed in `mesh`.
|
||||
</UL>
|
||||
|
||||
The function returns vertex `vkept` (which can be either `v0` or `v1`).
|
||||
|
||||
\image html general_collapse.png
|
||||
<center><b>
|
||||
General case. The following mesh elements are removed: triangles (\f$ v0,v1,vL\f$) and (\f$ v1,v0,vR\f$), edges \f$ (e,e')\f$, \f$ (ep,epo)\f$ and \f$ (ep',epo')\f$, and vertex \f$ v0\f$.
|
||||
</b></center>
|
||||
|
||||
\image html border_collapse3.png "When the collapsing edge is not itself a border, but is incident upon a border edge that is removed, the operation is the same as in the general case."
|
||||
|
||||
\image html border_collapse2.png
|
||||
<center><b>
|
||||
When the collapsing edge is not itself a border, but is incident upon
|
||||
a border edge that is <I>not</I> removed, the operation is still the
|
||||
same as in the general case.
|
||||
</b></center>
|
||||
|
||||
\image html border_collapse1.png
|
||||
<center><b>
|
||||
When the collapsing edge is itself a border, only 1 triangle is
|
||||
removed. Thus, even if \f$ (ep',epo')\f$ exists, it's not removed.
|
||||
</b></center>
|
||||
|
||||
\anchor CollapseFigure5
|
||||
\image html border_collapse4.png
|
||||
<center><b>
|
||||
This figure illustrates the single exceptional case when removing \f$
|
||||
(v0,v1)\f$ neccesarily implies removing \f$ (v1)\f$, thus \f$ (v0)\f$
|
||||
remains.
|
||||
</b></center>
|
||||
|
||||
\hasModel `CGAL::Polyhedron_3<Traits>` (If it has only triangular faces, and via
|
||||
<I>External Adaptation</I>, which is described in \cite cgal:sll-bgl-02
|
||||
and this <span class="textsc">Bgl</span> web page: <A HREF="http://www.boost.org/libs/graph/doc/leda_conversion.html"><TT>http://www.boost.org/libs/graph/doc/leda_conversion.html</TT></A>).
|
||||
|
||||
\sa `boost::graph_traits< CGAL::Polyhedron_3<Traits> >`
|
||||
\sa `CGAL::halfedge_graph_traits< CGAL::Polyhedron_3<Traits> >`
|
||||
|
||||
*/
|
||||
|
||||
class EdgeCollapsableMesh {
|
||||
public:
|
||||
}; /* end EdgeCollapsableMesh */
|
||||
|
||||
/*!
|
||||
Collapses the undirected edge `(v0v1,v1v0)` replacing it with `v0` or `v1`,
|
||||
as described in the following paragraph.
|
||||
\pre This function requires `mesh` to be an oriented 2-manifold with or without boundaries. Furthermore, the undirected edge `(v0v1,v1v0)` must satisfy the <I>link condition</I> \cite degn-tpec-98, which guarantees that the surface is also 2-manifold after the edge collapse.
|
||||
\relates EdgeCollapsableMesh
|
||||
*/
|
||||
template<class EdgeCollapsableMesh>
|
||||
typename boost::graph_traits<EdgeCollapsableMesh>::vertex_descriptor
|
||||
halfedge_collapse(typename boost::graph_traits<EdgeCollapsableMesh>::edge_descriptor const& ue, EdgeCollapsableMesh& mesh);
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `EdgeCollapseSimplificationVisitor` describes the requirements for the <I>visitor object</I> which is used to track the edge collapse simplification algorithm.
|
||||
|
||||
The several callbacks given as member functions in the visitor are called from certain places in the algorithm implementation.
|
||||
|
||||
*/
|
||||
|
||||
class EdgeCollapseSimplificationVisitor {
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept.
|
||||
*/
|
||||
typedef Hidden_type ECM;
|
||||
|
||||
/*!
|
||||
A field type representing the collapse cost
|
||||
*/
|
||||
typedef Hidden_type FT;
|
||||
|
||||
/*!
|
||||
The type of the edge profile cache. Must be a model of the `EdgeProfile` concept.
|
||||
*/
|
||||
typedef Hidden_type Profile;
|
||||
|
||||
/*!
|
||||
The point type for the surface vertex. Must be a model of `Point_3`.
|
||||
*/
|
||||
typename CGAL::halfedge_graph_traits<ECM>::Point Point;
|
||||
|
||||
/*!
|
||||
An integer type representing the number of edges
|
||||
*/
|
||||
typedef Hidden_type size_type;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Called before the algorithm starts.
|
||||
*/
|
||||
void OnStarted( ECM& surface );
|
||||
|
||||
/*!
|
||||
Called after the algorithm finishes.
|
||||
*/
|
||||
void OnFinished ( ECM& surface ) ;
|
||||
|
||||
/*!
|
||||
Called when the `StopPredicate` returned `true`
|
||||
(but not if the algorithm terminates because the surface could not be simplified any further).
|
||||
|
||||
*/
|
||||
void OnStopConditionReached( ECM& surface ) ;
|
||||
|
||||
/*!
|
||||
Called during the <I>collecting phase</I> (when a cost is assigned to the edges),
|
||||
for each edge collected.
|
||||
|
||||
*/
|
||||
void OnCollected( Profile const& profile, boost::optional<FT> cost );
|
||||
|
||||
/*!
|
||||
Called during the <I>processing phase</I> (when edges are collapsed),
|
||||
for each edge that is selected.
|
||||
|
||||
This method is called before the algorithm checks
|
||||
if the edge is collapsable.
|
||||
|
||||
`cost` indicates the current collapse cost for the edge.
|
||||
If absent (meaning that it could not be computed)
|
||||
the edge will not be collapsed.
|
||||
|
||||
`initial_count` and `current_count` refer to
|
||||
the number of edges.
|
||||
|
||||
*/
|
||||
void OnSelected( Profile const& profile
|
||||
, boost::optional<FT> cost
|
||||
, size_type initial_count
|
||||
, size_type current_count
|
||||
);
|
||||
|
||||
/*!
|
||||
Called when an edge is about to be collapsed and replaced by a vertex
|
||||
whose position is `*placement`.
|
||||
|
||||
If `placement` is absent (meaning that it could not be computed)
|
||||
the edge will not be collapsed.
|
||||
|
||||
*/
|
||||
void OnCollapsing( Profile const& profile
|
||||
, boost::optional<Point> placement
|
||||
);
|
||||
|
||||
/*!
|
||||
Called for each selected edge which cannot be
|
||||
collapsed because doing so would change the topological
|
||||
type of the surface (turn it into a non-manifold
|
||||
for instance).
|
||||
|
||||
*/
|
||||
void OnNonCollapsable( Profile const& profile );
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end EdgeCollapseSimplificationVisitor */
|
||||
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `EdgeProfile` describes the requirements for a data structure that caches the local topology and geometry in the surroundings of an undirected edge.
|
||||
|
||||
This profile is used by the stop, cost and placement policies.
|
||||
|
||||
\hasModel `CGAL::Surface_mesh_simplification::Edge_profile<ECM>`
|
||||
|
||||
*/
|
||||
|
||||
class EdgeProfile {
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept.
|
||||
*/
|
||||
typedef Hidden_type ECM;
|
||||
|
||||
/*!
|
||||
A <span class="textsc">Bgl</span> vertex descriptor representing a vertex of the surface.
|
||||
*/
|
||||
typename boost::graph_traits<ECM>::vertex_descriptor vertex_descriptor;
|
||||
|
||||
/*!
|
||||
A <span class="textsc">Bgl</span> edge descriptor representing an edge of the surface.
|
||||
*/
|
||||
typename boost::graph_traits<ECM>::edge_descriptor edge_descriptor;
|
||||
|
||||
/*!
|
||||
The point type for the surface vertex. Must be a model of `Point_3`.
|
||||
*/
|
||||
typename CGAL::halfedge_graph_traits<ECM>::Point Point;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Access Functions
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
One of vertices of the edge to be collapsed.
|
||||
*/
|
||||
vertex_descriptor v0() const;
|
||||
|
||||
/*!
|
||||
The other vertex of the edge to be collapsed.
|
||||
*/
|
||||
vertex_descriptor v1() const;
|
||||
|
||||
/*!
|
||||
One of the directed edges corresponding to the undirected
|
||||
edge being collapsed.
|
||||
*/
|
||||
edge_descriptor v0v1() const;
|
||||
|
||||
/*!
|
||||
The other directed edge corresponding to the undirected
|
||||
edge being collapsed.
|
||||
*/
|
||||
edge_descriptor v1v0() const;
|
||||
|
||||
/*!
|
||||
The point of vertex \f$ v0\f$.
|
||||
*/
|
||||
Point const& p0() const;
|
||||
|
||||
/*!
|
||||
The point of vertex \f$ v1\f$.
|
||||
*/
|
||||
Point const& p1() const;
|
||||
|
||||
/*!
|
||||
If \f$ v0v1\f$ belongs to a finite face (is not a border edge)
|
||||
the third vertex of that triangular face, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
vertex_descriptor vL() const;
|
||||
|
||||
/*!
|
||||
If \f$ v0v1\f$ belongs to a finite face (is not a border edge)
|
||||
the directed edge from \f$ v1\f$ to \f$ vL\f$, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
edge_descriptor v1vL() const;
|
||||
|
||||
/*!
|
||||
If \f$ v0v1\f$ belongs to a finite face (is not a border edge)
|
||||
the directed edge from \f$ vL\f$ to \f$ v0\f$, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
edge_descriptor vLv0() const;
|
||||
|
||||
/*!
|
||||
If \f$ v1v0\f$ belongs to a finite face (is not a border edge)
|
||||
the third vertex of that triangular face, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
vertex_descriptor vR() const;
|
||||
|
||||
/*!
|
||||
If \f$ v1v0\f$ belongs to a finite face (is not a border edge)
|
||||
the directed edge from \f$ v0\f$ to \f$ vR\f$, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
edge_descriptor v0vR() const;
|
||||
|
||||
/*!
|
||||
If \f$ v1v0\f$ belongs to a finite face (is not a border edge)
|
||||
the directed edge from \f$ vR\f$ to \f$ v1\f$, a <I>null descriptor</I> otherwise.
|
||||
*/
|
||||
edge_descriptor vRv1() const;
|
||||
|
||||
/*!
|
||||
The unique sequence of the vertices
|
||||
around \f$ v0v1\f$ in topological order (<I>ccw</I> or <I>ccw</I> depending
|
||||
on the relative ordering of `v0` and `v1` in the profile).
|
||||
*/
|
||||
std::vector<vertex_descriptor> link() const;
|
||||
|
||||
/*!
|
||||
The unique collection of the border directed edges incident upon \f$ v0\f$ and \f$ v1\f$.
|
||||
*/
|
||||
std::vector<edge_descriptor> border_edges() const;
|
||||
|
||||
/*!
|
||||
Indicates if `v0v1` belongs to a finite face of the mesh (i.e, `v0v1` is not a border edge).
|
||||
*/
|
||||
bool left_face_exits() const;
|
||||
|
||||
/*!
|
||||
Indicates if `v0v1` belongs to a finite face of the mesh (i.e, `v1v0` is not a border edge).
|
||||
*/
|
||||
bool right_face_exits() const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end EdgeProfile */
|
||||
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `GetCost` describes the requirements for the <I>policy function object</I>
|
||||
which gets the <I>collapse cost</I> of an edge.
|
||||
|
||||
The cost returned is a `boost::optional` value (i.e. it can be absent).
|
||||
An <I>absent</I> cost indicates that the edge should not be collapsed.
|
||||
This could be the result of a computational limitation (such as overflow),
|
||||
or can be intentionally returned to prevent the edge from being collapsed.
|
||||
|
||||
\refines ::DefaultConstructible
|
||||
\refines ::CopyConstructible
|
||||
|
||||
\hasModel `CGAL::Surface_mesh_simplification::Edge_length_cost<ECM>`
|
||||
\hasModel `CGAL::Surface_mesh_simplification::LindstromTurk_cost<ECM>`
|
||||
|
||||
*/
|
||||
|
||||
class GetCost {
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The type of the edge profile cache. Must be a model of the `EdgeProfile` concept.
|
||||
*/
|
||||
typedef Hidden_type Profile;
|
||||
|
||||
/*!
|
||||
A field type representing the collapse cost
|
||||
*/
|
||||
typedef Hidden_type FT;
|
||||
|
||||
/*!
|
||||
The point type for the surface vertex. Must be a model of `Point_3`.
|
||||
*/
|
||||
typename CGAL::halfedge_graph_traits<ECM>::Point Point;
|
||||
|
||||
/*!
|
||||
The type of the result (an optional cost value).
|
||||
*/
|
||||
boost::optional<FT> result_type;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Computes and returns the cost of collapsing the edge (represented by its profile),
|
||||
using the calculated placement.
|
||||
|
||||
*/
|
||||
result_type operator()( Profile const& edge_profile
|
||||
, boost::optional<Point> const& placement ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end GetCost */
|
||||
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `GetPlacement` describes the requirements for the <I>policy
|
||||
function object</I> which gets the <I>collapse placement</I> of an edge,
|
||||
that is, the new position of the vertex that remains after a
|
||||
halfedge-collapse operation.
|
||||
|
||||
The placement returned is a `boost::optional` value (i.e., it can
|
||||
be absent). An absent result indicates that the remaining vertex
|
||||
must be kept in place, not moved to a new position.
|
||||
|
||||
\refines ::DefaultConstructible
|
||||
\refines ::CopyConstructible
|
||||
|
||||
\hasModel `CGAL::Surface_mesh_simplification::Midpoint_placement<ECM>`
|
||||
\hasModel `CGAL::Surface_mesh_simplification::LindstromTurk_placement<ECM>`
|
||||
|
||||
*/
|
||||
|
||||
class GetPlacement {
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The type of the edge profile cache. Must be a model of the `EdgeProfile` concept.
|
||||
*/
|
||||
typedef Hidden_type Profile;
|
||||
|
||||
/*!
|
||||
The point type for the surface vertex. Must be a model of `Point_3`.
|
||||
*/
|
||||
typename CGAL::halfedge_graph_traits<ECM>::Point Point;
|
||||
|
||||
/*!
|
||||
The type of the result (an optional point).
|
||||
*/
|
||||
boost::optional<Point> result_type;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
Computes and returns the placement, that is, the position of the vertex
|
||||
which replaces the collapsing edge (represented by its profile).
|
||||
*/
|
||||
result_type operator()( Profile const& edge_profile ) const;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end GetPlacement */
|
||||
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
|
||||
/*!
|
||||
\ingroup PkgSurfaceMeshSimplificationConcepts
|
||||
\cgalconcept
|
||||
|
||||
The concept `StopPredicate` describes the requirements for the predicate which indicates if the simplification process must finish.
|
||||
|
||||
\hasModel `CGAL::Surface_mesh_simplification::Count_stop_predicate<ECM>`
|
||||
\hasModel `CGAL::Surface_mesh_simplification::Count_ratio_stop_predicate<ECM>`
|
||||
|
||||
*/
|
||||
|
||||
class StopPredicate {
|
||||
public:
|
||||
|
||||
/// \name Types
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
The type of the surface to simplify. Must be a model of the `EdgeCollapsableMesh` concept.
|
||||
*/
|
||||
typedef Hidden_type ECM;
|
||||
|
||||
/*!
|
||||
A field type representing the collapse cost
|
||||
*/
|
||||
typedef Hidden_type FT;
|
||||
|
||||
/*!
|
||||
An integer type representing the number of edges
|
||||
*/
|
||||
typedef Hidden_type size_type;
|
||||
|
||||
/*!
|
||||
The type of the edge profile cache. Must be a model of the `EdgeProfile` concept.
|
||||
*/
|
||||
typedef Hidden_type Profile;
|
||||
|
||||
/// @}
|
||||
|
||||
/// \name Operations
|
||||
/// @{
|
||||
|
||||
/*!
|
||||
|
||||
This predicate is called each time an edge is selected for processing,
|
||||
before it is collapsed.
|
||||
|
||||
`current_cost` is the cost of the selected edge.
|
||||
|
||||
`initial_count` and `current_count` are the number of initial and current edges.
|
||||
|
||||
If the return value is `true` the simplification terminates before processing the edge,
|
||||
otherwise it continues normally.
|
||||
|
||||
*/
|
||||
bool operator()( FT const& current_cost
|
||||
, Profile const& profile
|
||||
, size_type initial_count
|
||||
, size_type current_count
|
||||
) const ;
|
||||
|
||||
/// @}
|
||||
|
||||
}; /* end StopPredicate */
|
||||
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
/// \defgroup PkgSurfaceMeshSimplification Triangulated Surface Mesh Simplification
|
||||
/// \defgroup PkgSurfaceMeshSimplificationConcepts Concepts
|
||||
/// \ingroup PkgSurfaceMeshSimplification
|
||||
/*!
|
||||
\addtogroup PkgSurfaceMeshSimplification
|
||||
\todo check generated documentation
|
||||
\PkgDescriptionBegin{Triangulated Surface Mesh Simplification}
|
||||
\PkgPicture{detail.png}
|
||||
\PkgAuthor{Fernando Cacciola}
|
||||
\PkgDesc{This package provides an algorithm to simplify a triangulated surface mesh by edge collapsing. It is an implementation of the Turk/Lindstrom <I>memoryless</I> mesh simplification algorithm.}
|
||||
\PkgSince{3.3}
|
||||
\cgalbib{cgal:c-tsms-12}
|
||||
\license{\ref licensesGPL "GPL"}
|
||||
\PkgDescriptionEnd
|
||||
*/
|
||||
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
|
||||
\page chaptermeshsimplification Triangulated Surface Mesh Simplification
|
||||
|
||||
namespace CGAL {
|
||||
/*!
|
||||
|
||||
\mainpage Triangulated Surface Mesh Simplification
|
||||
\anchor chaptermeshsimplification
|
||||
|
||||
\authors Fernando Cacciola
|
||||
|
||||
\image html Illustration-Simplification-ALL.jpg
|
||||
|
||||
# Introduction #
|
||||
|
||||
Surface mesh simplification is the process of reducing the number of faces used in the surface while
|
||||
keeping the overall shape, volume and boundaries preserved as much as possible.
|
||||
It is the opposite of subdivision.
|
||||
|
||||
The algorithm presented here can simplify any <I>oriented 2-manifold surface</I>,
|
||||
with any number of connected components, with or without boundaries (border or holes)
|
||||
and handles (arbitrary genus), using a method known as <I>edge collapse</I>.
|
||||
Roughly speaking, the method consists of iteratively replacing an edge with a single vertex,
|
||||
removing 2 triangles per collapse.
|
||||
|
||||
Edges are collapsed according to a priority given by a user-supplied <I>cost</I> function,
|
||||
and the coordinates of the replacing vertex are determined by another user-supplied
|
||||
<I>placement</I> function. The algorithm terminates when a user-supplied <I>stop predicate</I>
|
||||
is met, such as reaching the desired number of edges.
|
||||
|
||||
The algorithm implemented here is generic in the sense that it does not require the surface
|
||||
to be of a particular type. Instead, it defines the concept of a `EdgeCollapsableMesh`,
|
||||
which presents the surface as being a halfedge data structure, and any surface that
|
||||
is a model of that concept can be simplified. The concept is defined not in terms of a monolithic class, but in terms of a set
|
||||
of functions and traits, making it easy to adapt any concrete surface type,
|
||||
even if it is not a halfedge data structure at all.
|
||||
In particular, the concept definition follows the design of the
|
||||
<A HREF="http://www.boost.org/libs/graph/doc/index.html"> Boost Graph Library (<span class="textsc">Bgl</span>)</A>
|
||||
\cite cgal:sll-bgl-02.
|
||||
|
||||
The design is <A HREF="http://en.wikipedia.org/wiki/Policy-based_design"><I>policy-based</I></A>
|
||||
(<A HREF="http://en.wikipedia.org/wiki/Policy-based_design"><TT>http://en.wikipedia.org/wiki/Policy-based_design</TT></A>),
|
||||
meaning that you can customize some aspects of the process by passing a set of
|
||||
<I>policy objects</I>. Each policy object specifies a particular aspect of the algorithm,
|
||||
such as how edges are selected and where the replacement vertex is placed. All policies have
|
||||
a sensible default.
|
||||
Furthermore, the API uses the so-called `named-parameters` technique which allows you
|
||||
to pass only the relevant parameters, in any order, omitting those parameters whose
|
||||
default is appropriate.
|
||||
|
||||
# Overview of the Simplification Process #
|
||||
|
||||
The free function that implements the simplification algorithm takes not only the surface
|
||||
and the desired stop predicate but a number of additional parameters which control and
|
||||
monitor the simplification process. This section briefly describes the process in order
|
||||
to set the background for the discussion of the parameters to the algorithm.
|
||||
|
||||
There are two slightly different "edge" collapse operations. One is known as
|
||||
<I>edge-collapse</I> while the other is known as <I>halfedge-collapse</I>.
|
||||
Given an edge 'e' joining vertices 'w' and 'v', the edge-collapse operation replaces
|
||||
'e','w' and 'v' for a new vertex 'r', while the halfedge-collapse operation
|
||||
pulls 'v' into 'w', dissapearing 'e' and leaving 'w' in place.
|
||||
In both cases the operation removes the edge 'e' along with the 2 triangles
|
||||
adjacent to it.
|
||||
|
||||
This package uses the halfedge-collapse operation, which is implemented by removing,
|
||||
additionally, 1 vertex ('v') and 2 edges, one per adjacent triangle.
|
||||
It optionally moves the remaining vertex ('w') into a new position,
|
||||
called <I>placement</I>, in which case the net effect is the same as in
|
||||
the edge-collapse operation.
|
||||
|
||||
Naturally, the surface that results from an edge collapse deviates from the initial
|
||||
surface by some amount, and since the goal of simplification is to reduce the number
|
||||
of triangles while retaining the overall look of the surface as much as possible,
|
||||
it is necessary to measure such a deviation. Some methods attempt to measure the
|
||||
total deviation from the initial surface to the completely simplified surface,
|
||||
for example, by tracking an accumulated error while keeping a history of the simplification
|
||||
changes. Other methods, like the one implemented in this package, attempt to measure only
|
||||
the <I>cost</I> of each individual edge collapse (the local deviation introduced by
|
||||
a single simplification step) and plan the entire process as a sequence of steps
|
||||
of increasing cost.
|
||||
|
||||
Global error tracking methods produce highly accurate simplifications but take up a lot
|
||||
of additional space. Cost-driven methods, like the one in this package, produce slightly
|
||||
less accurate simplifications but take up much less additional space, even none in some cases.
|
||||
|
||||
The cost-driven method implemented in this package is mainly based on \cite cgal:lt-fmeps-98, \cite cgal:lt-ems-99, with contributions from \cite hddms-mo-93, \cite gh-ssqem-97
|
||||
and \cite degn-tpec-98.
|
||||
|
||||
The algorithm proceeds in two stages. In the first stage, called <I>collection stage</I>,
|
||||
an initial <I>collapse cost</I> is assigned to each and every edge in the surface.
|
||||
Then in the second stage, called <I>collapsing stage</I>, edges are
|
||||
processed in order of increasing cost. Some processed edges are collapsed
|
||||
while some are just discarded. Collapsed edges are replaced by a vertex and the collapse
|
||||
cost of all the edges now incident on the replacement vertex is recalculated, affecting
|
||||
the order of the remaining unprocessed edges.
|
||||
|
||||
Not all edges selected for processing are collapsed. A processed edge can be discarded
|
||||
right away, without being collapsed, if it doesn't satisfy certain topological
|
||||
and geometric conditions.
|
||||
|
||||
The algorithm presented in \cite gh-ssqem-97 contracts (collapses) arbitrary vertex pairs and not
|
||||
only edges by considering certain vertex pairs as forming a pseudo-edge and proceeding to collapse
|
||||
both edges and pseudo-edges in the same way as in \cite cgal:lt-fmeps-98, \cite cgal:lt-ems-99 (
|
||||
which is the algorithm implemented here). However, contracting an arbitrary vertex-pair may result in a non-manifold surface, but the current state of this package can only deal with manifold surfaces, thus, it can only collapse edges. That is, this package cannot be used as a framework for vertex contraction.
|
||||
|
||||
# Cost Strategy #
|
||||
|
||||
The specific way in which the collapse cost and vertex placement is
|
||||
calculated is called the <I>cost strategy</I>. The user can choose
|
||||
different strategies in the form of policies and related parameters,
|
||||
passed to the algorithm.
|
||||
|
||||
The current version of the package provides a set of policies implementing
|
||||
two strategies: the Lindstrom-Turk strategy, which is the default, and
|
||||
a strategy consisting of an edge-length cost with an optional
|
||||
midpoint placement (much faster but less accurate).
|
||||
|
||||
\subsection SurfaceMeshSimplificationLindstromTurkStrategy Lindstrom-Turk Cost and Placement Strategy
|
||||
|
||||
The main characteristic of the strategy presented in
|
||||
\cite cgal:lt-fmeps-98, \cite cgal:lt-ems-99 is that the simplified surface
|
||||
is not compared at each step with the original surface (or the surface
|
||||
at a previous step) so there is no need to keep extra information,
|
||||
such as the original surface or a history of the local changes. Hence
|
||||
the name <I>memoryless</I> simplification.
|
||||
|
||||
At each step, all remaining edges are potential candidates for
|
||||
collapsing and the one with the lowest cost is selected.
|
||||
|
||||
The cost of collapsing an edge is given by the position chosen for the
|
||||
vertex that replaces it.
|
||||
|
||||
The replacement vertex position is computed as
|
||||
the solution to a system of 3 linearly-independent linear equality constraints.
|
||||
Each constraint is obtained by minimizing a quadratic objective function
|
||||
subject to the previously computed constraints.
|
||||
|
||||
There are several possible candidate constraints and each is considered in order of importance.
|
||||
A candidate constraint might be <I>incompatible</I> with the previously accepted constraints,
|
||||
in which case it is rejected and the next constraint is considered.
|
||||
|
||||
Once 3 constraints have been accepted, the system is solved for the vertex position.
|
||||
|
||||
The first constraints considered preserves the shape of the surface boundaries
|
||||
(in case the edge profile has boundary edges).
|
||||
The next constraints preserve the total volume of the surface.
|
||||
The next constraints, if needed, optimize the local changes in volume and boundary shape.
|
||||
Lastly, if a constraint is still needed (because the ones previously computed were incompatible),
|
||||
a third (and last) constraint is added to favor equilateral triangles over elongated triangles.
|
||||
|
||||
The cost is then a weighted sum of the shape, volume and boundary optimization terms, where the user specifies the unit <I>weighting unit factor</I> for each term.
|
||||
|
||||
The local changes are computed independently for each edge using only
|
||||
the triangles currently adjacent to it at the time when the edge
|
||||
is about to be collapsed, that is, after all previous collapses.
|
||||
Thus, the transitive path of minimal local changes yields at
|
||||
the end a global change reasonably close to the absolute minimum.
|
||||
|
||||
## Cost Strategy Policies ##
|
||||
|
||||
The cost strategy used by the algorithm is selected by means of two policies:
|
||||
`GetPlacement` and `GetCost`.
|
||||
|
||||
The `GetPlacement` policy is called to compute the new position
|
||||
for the remaining vertex after the halfedge-collapse. It returns
|
||||
an optional value, which can be absent, in which case the
|
||||
remaining vertex is kept in its place.
|
||||
|
||||
The `GetCost` policy is called to compute the cost
|
||||
of collapsing an edge. This policy uses the placement to compute
|
||||
the cost (which is an error measure) and determines the
|
||||
ordering of the edges.
|
||||
|
||||
The algorithm maintains an internal data structure (a mutable priority queue)
|
||||
which allows each edge to be processed in increasing cost order. Such a data structure
|
||||
requires some per-edge additional information, such as the edge's cost.
|
||||
If the record of per-edge additional information occupies N bytes of storage,
|
||||
simplifying a surface of 1 million edges (a normal size) requires 1 million times N bytes
|
||||
of additional storage. Thus, to minimize the amount of additional memory required to
|
||||
simplify a surface only the cost is attached to each edge and nothing else.
|
||||
|
||||
But this is a tradeoff: the cost of a collapse is a function of the placement
|
||||
(the new position chosen for the remaining vertex) so before `GetCost`
|
||||
is called for each and every edge, `GetPlacement` must also be called to obtain
|
||||
the placement parameter to the cost function.
|
||||
But that placement, which is a 3D Point, is not attached to each and every edge since
|
||||
that would easily <I>triple</I> the additional storage requirement.
|
||||
|
||||
On the one hand, this dramatically saves on memory but on the other hand is
|
||||
a processing waste because when an edge is effectively collapsed, `GetPlacement`
|
||||
must be called <I>again</I> to know were to move the remaining vertex.
|
||||
|
||||
Earlier prototypes shown that attaching the placement to the edge, thus avoiding one
|
||||
redundant call to the placement function after the edge collapsed, has little
|
||||
impact on the total running time. This is because the cost of an each edge is not just
|
||||
computed once but changes several times during the process so the placement function
|
||||
must be called several times just as well. Caching the placement can only avoid the
|
||||
very last call, when the edge is collapsed, but not all the previous calls which
|
||||
are needed because the placement (and cost) changes.
|
||||
|
||||
# API #
|
||||
|
||||
## API Overview ##
|
||||
|
||||
Since the algorithm is free from robustness issues there is no need for exact predicates nor constructions and `Simple_cartesian<double>` can be used safely.
|
||||
\footnote{In the current version, 3.3, the LindstromTurk policies are not implemented for homogeneous coordinates, so a cartesian kernel must be used.}
|
||||
|
||||
The simplification algorithm is implemented as the free template function
|
||||
`CGAL::Surface_mesh_simplification::edge_collapse`. The function has two mandatory and several optional parameters.
|
||||
|
||||
## Mandatory Parameters ##
|
||||
|
||||
There are two main parameters to the algorithm: the surface to be simplified (in-place) and the stop predicate.
|
||||
|
||||
The surface to simplify must be a model of the `EdgeCollapsableMesh` concept.
|
||||
Many concrete surface types, such as `CGAL::Polyhedron_3` with only triangular faces,
|
||||
become models of that concept via a technique known as
|
||||
<I>external adaptation</I>, which is described in \cite cgal:sll-bgl-02
|
||||
and this <span class="textsc">Bgl</span> web page: <A HREF="http://www.boost.org/libs/graph/doc/leda_conversion.html"><TT>http://www.boost.org/libs/graph/doc/leda_conversion.html</TT></A>
|
||||
|
||||
External adaptation is a way to add an interface to an
|
||||
object without coercing the type of the object (which happens when you adapt it by means
|
||||
of a wrapper). That is, the formal parameter to the `edge_collapse` function that
|
||||
implements the simplification is the concrete surface object itself, not an adaptor
|
||||
which delegates the functionality to the concrete type.
|
||||
|
||||
The stop predicate is called after each edge is selected for processing, <I>before</I>
|
||||
it is classified as collapsible or not (thus before it is collapsed). If the stop predicate
|
||||
returns `true` the algorithm terminates.
|
||||
|
||||
## Optional Named Parameters ##
|
||||
|
||||
The notion of <I>named parameters</I> was also introduced in the <span class="textsc">Bgl</span>. You can read about it in \cite cgal:sll-bgl-02 or the following site: <A HREF="http://www.boost.org/libs/graph/doc/bgl_named_params.html"><TT>http://www.boost.org/libs/graph/doc/bgl_named_params.html</TT></A>. Named parameters allow the user to specify only those parameters which are really needed, by name, making the parameter ordering unimportant.
|
||||
|
||||
Say there is a function `f()` that takes 3 parameters called `name`, `age` and `gender`, and you have variables `n,a and g` to pass as parameters to that function. Without named parameters, you would call it like this: `f(n,a,g)`, but with named parameters, you call it like this: `f(name(n).age(a).gender(g))`.
|
||||
|
||||
That is, you give each parameter a name by wrapping it into a function whose name matches that of the parameter. The entire list of named parameters is really a composition of function calls separated by a dot (\f$ .\f$). Thus, if the function takes a mix of mandatory and named parameters, you use a comma to separate the last non-named parameter from the first named parameters, like this:
|
||||
|
||||
`f(non_named_par0, non_named_pa1, name(n).age(a).gender(g)) `
|
||||
|
||||
When you use named parameters, the ordering is irrelevant, so this: `f(name(n).age(a).gender(g))` is equivalent to this:
|
||||
`f(age(a).gender(g).name(n))`, and you can just omit any named parameter that has a default value.
|
||||
|
||||
## Sample Call ##
|
||||
|
||||
\code{.cpp}
|
||||
|
||||
/*
|
||||
surface : the surface to simplify
|
||||
stop_predicate : policy indicating when the simplification must finish
|
||||
vertex_index_map(vimap) : property-map giving each vertex a unique integer index
|
||||
edge_index_map(eimap) : property-map giving each edge a unique integer index
|
||||
edge_is_border_map(ebmap): property-map specifying whether an edge is a border edge or not
|
||||
get_cost(cf) : function object computing the cost of a collapse
|
||||
get_placement(pf) : function object computing the placement for the remaining vertex
|
||||
visitor(vis) : function object tracking the simplification process
|
||||
*/
|
||||
int r = edge_collapse(surface
|
||||
,stop_predicate
|
||||
,vertex_index_map(vimap)
|
||||
.edge_index_map(eimap)
|
||||
.edge_is_border_map(ebmap)
|
||||
.get_cost(cf)
|
||||
.get_placement(pf)
|
||||
.visitor(vis)
|
||||
);
|
||||
|
||||
\endcode
|
||||
|
||||
## Examples ##
|
||||
|
||||
## Example Using a Default Polyhedron ##
|
||||
|
||||
The following example illustrates the simplest of the cases. It uses
|
||||
an ordinary polyhedron and only one of the optional parameters.
|
||||
The unspecified cost strategy defaults to Lindstrom-Turk.
|
||||
\cgalexample{edge_collapse_polyhedron.cpp}
|
||||
|
||||
## Example Using an Enriched Polyhedron ##
|
||||
|
||||
The following example is equivalent to the previous example but using an
|
||||
enriched polyhedron whose halfedges support an `id` field to
|
||||
store the edge index needed by the algorithm. It also shows how to
|
||||
explicitly specify a cost strategy (other than the default)
|
||||
and how to use a visitor object to track the simplification process.
|
||||
|
||||
\cgalexample{edge_collapse_enriched_polyhedron.cpp}
|
||||
|
||||
## Example with edges marked as non-removable ##
|
||||
|
||||
The following example shows how to use the optional named parameter `edge_is_border_map` to prevent
|
||||
edges from being removed even if they are not really borders.
|
||||
|
||||
\cgalexample{edge_collapse_constrained_polyhedron.cpp}
|
||||
|
||||
*/
|
||||
} /* namespace CGAL */
|
||||
|
||||
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
|
@ -0,0 +1,403 @@
|
|||
%PDF-1.4
|
||||
%蔕ワ゚
|
||||
1 0 obj
|
||||
<< /Length 2 0 R
|
||||
>>
|
||||
stream
|
||||
0 w
|
||||
q 0 -0.3 793.8 595.3 re W* n
|
||||
0 0 0 rg
|
||||
72 506.4 m
|
||||
73.4 506.4 l 73.4 503.6 l 72 503.6 l 72 506.4 l h
|
||||
f*
|
||||
74.9 506.4 m
|
||||
76.3 506.4 l 76.3 503.6 l 74.9 503.6 l 74.9 506.4 l h
|
||||
f*
|
||||
77.8 506.4 m
|
||||
79.2 506.4 l 79.2 503.6 l 77.8 503.6 l 77.8 506.4 l h
|
||||
f*
|
||||
80.6 506.4 m
|
||||
82.1 506.4 l 82.1 503.6 l 80.6 503.6 l 80.6 506.4 l h
|
||||
f*
|
||||
83.5 506.4 m
|
||||
85 506.4 l 85 503.6 l 83.5 503.6 l 83.5 506.4 l h
|
||||
f*
|
||||
86.4 506.4 m
|
||||
87.9 506.4 l 87.9 503.6 l 86.4 503.6 l 86.4 506.4 l h
|
||||
f*
|
||||
89.3 506.4 m
|
||||
90.8 506.4 l 90.8 503.6 l 89.3 503.6 l 89.3 506.4 l h
|
||||
f*
|
||||
92.2 506.4 m
|
||||
93.7 506.4 l 93.7 503.6 l 92.2 503.6 l 92.2 506.4 l h
|
||||
f*
|
||||
95.1 506.4 m
|
||||
96.5 506.4 l 96.5 503.6 l 95.1 503.6 l 95.1 506.4 l h
|
||||
f*
|
||||
98 506.4 m
|
||||
99.4 506.4 l 99.4 503.6 l 98 503.6 l 98 506.4 l h
|
||||
f*
|
||||
100.9 506.4 m
|
||||
102.3 506.4 l 102.3 503.6 l 100.9 503.6 l 100.9 506.4 l
|
||||
h
|
||||
f*
|
||||
103.8 506.4 m
|
||||
105.2 506.4 l 105.2 503.6 l 103.8 503.6 l 103.8 506.4 l
|
||||
h
|
||||
f*
|
||||
106.7 506.4 m
|
||||
108.1 506.4 l 108.1 503.6 l 106.7 503.6 l 106.7 506.4 l
|
||||
h
|
||||
f*
|
||||
109.6 506.4 m
|
||||
111 506.4 l 111 503.6 l 109.6 503.6 l 109.6 506.4 l
|
||||
h
|
||||
f*
|
||||
112.5 506.4 m
|
||||
113.9 506.4 l 113.9 503.6 l 112.5 503.6 l 112.5 506.4 l
|
||||
h
|
||||
f*
|
||||
115.3 506.4 m
|
||||
116.8 506.4 l 116.8 503.6 l 115.3 503.6 l 115.3 506.4 l
|
||||
h
|
||||
f*
|
||||
118.2 506.4 m
|
||||
119.7 506.4 l 119.7 503.6 l 118.2 503.6 l 118.2 506.4 l
|
||||
h
|
||||
f*
|
||||
121.1 506.4 m
|
||||
122.6 506.4 l 122.6 503.6 l 121.1 503.6 l 121.1 506.4 l
|
||||
h
|
||||
f*
|
||||
124 506.4 m
|
||||
125.5 506.4 l 125.5 503.6 l 124 503.6 l 124 506.4 l h
|
||||
f*
|
||||
126.9 506.4 m
|
||||
128.4 506.4 l 128.4 503.6 l 126.9 503.6 l 126.9 506.4 l
|
||||
h
|
||||
f*
|
||||
129.8 506.4 m
|
||||
131.2 506.4 l 131.2 503.6 l 129.8 503.6 l 129.8 506.4 l
|
||||
h
|
||||
f*
|
||||
132.7 506.4 m
|
||||
134.1 506.4 l 134.1 503.6 l 132.7 503.6 l 132.7 506.4 l
|
||||
h
|
||||
f*
|
||||
135.6 506.4 m
|
||||
137 506.4 l 137 503.6 l 135.6 503.6 l 135.6 506.4 l
|
||||
h
|
||||
f*
|
||||
138.5 506.4 m
|
||||
139.9 506.4 l 139.9 503.6 l 138.5 503.6 l 138.5 506.4 l
|
||||
h
|
||||
f*
|
||||
141.4 506.4 m
|
||||
142.8 506.4 l 142.8 503.6 l 141.4 503.6 l 141.4 506.4 l
|
||||
h
|
||||
f*
|
||||
144.3 506.4 m
|
||||
145.7 506.4 l 145.7 503.6 l 144.3 503.6 l 144.3 506.4 l
|
||||
h
|
||||
f*
|
||||
147.1 506.4 m
|
||||
148.6 506.4 l 148.6 503.6 l 147.1 503.6 l 147.1 506.4 l
|
||||
h
|
||||
f*
|
||||
150 506.4 m
|
||||
151.5 506.4 l 151.5 503.6 l 150 503.6 l 150 506.4 l h
|
||||
f*
|
||||
152.9 506.4 m
|
||||
154.4 506.4 l 154.4 503.6 l 152.9 503.6 l 152.9 506.4 l
|
||||
h
|
||||
f*
|
||||
155.8 506.4 m
|
||||
157.3 506.4 l 157.3 503.6 l 155.8 503.6 l 155.8 506.4 l
|
||||
h
|
||||
f*
|
||||
158.7 506.4 m
|
||||
160.2 506.4 l 160.2 503.6 l 158.7 503.6 l 158.7 506.4 l
|
||||
h
|
||||
f*
|
||||
161.6 506.4 m
|
||||
162 506.4 l 162 503.6 l 161.6 503.6 l 161.6 506.4 l
|
||||
h
|
||||
f*
|
||||
127.1 576.1 m
|
||||
123.7 571.6 l 121.4 573.3 l 124.8 577.9 l 127.1 576.1 l
|
||||
h
|
||||
f*
|
||||
122 569.3 m
|
||||
118.5 564.7 l 116.2 566.5 l 119.7 571 l 122 569.3 l h
|
||||
f*
|
||||
116.8 562.4 m
|
||||
113.4 557.8 l 111.1 559.6 l 114.5 564.1 l 116.8 562.4 l
|
||||
h
|
||||
f*
|
||||
111.7 555.5 m
|
||||
109.9 553.2 l 107.6 554.9 l 109.3 557.3 l 111.7 555.5 l
|
||||
h
|
||||
f*
|
||||
108.2 550.9 m
|
||||
106.4 548.6 l 104.1 550.3 l 105.9 552.7 l 108.2 550.9 l
|
||||
h
|
||||
f*
|
||||
104.7 546.3 m
|
||||
103 544 l 100.7 545.7 l 102.4 548 l 104.7 546.3 l h
|
||||
f*
|
||||
101.3 541.7 m
|
||||
97.8 537.1 l 95.5 538.8 l 98.9 543.4 l 101.3 541.7 l
|
||||
h
|
||||
f*
|
||||
96.1 534.8 m
|
||||
92.7 530.2 l 90.4 532 l 93.8 536.5 l 96.1 534.8 l h
|
||||
f*
|
||||
90.9 527.9 m
|
||||
87.5 523.4 l 85.2 525.1 l 88.6 529.7 l 90.9 527.9 l h
|
||||
f*
|
||||
85.8 521 m
|
||||
84 518.7 l 81.8 520.5 l 83.5 522.8 l 85.8 521 l h
|
||||
f*
|
||||
82.3 516.4 m
|
||||
80.6 514.1 l 78.3 515.9 l 80 518.2 l 82.3 516.4 l h
|
||||
f*
|
||||
78.9 511.8 m
|
||||
77.1 509.5 l 74.8 511.2 l 76.5 513.5 l 78.9 511.8 l h
|
||||
f*
|
||||
75.4 507.2 m
|
||||
73.1 504.1 l 70.8 505.9 l 73.1 508.9 l 75.4 507.2 l h
|
||||
f*
|
||||
0.50196 0 0 rg
|
||||
160.7 504.4 m
|
||||
124.7 576.4 l 127.2 577.7 l 163.2 505.7 l 160.7 504.4 l
|
||||
h
|
||||
f*
|
||||
124.8 432.1 m
|
||||
70.8 504.1 l 73.1 505.9 l 127.1 433.9 l 124.8 432.1 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
163.2 504.4 m
|
||||
160.7 499.3 l 158.1 500.6 l 160.7 505.7 l 163.2 504.4 l
|
||||
h
|
||||
f*
|
||||
159.4 496.7 m
|
||||
156.9 491.6 l 154.3 492.9 l 156.8 498 l 159.4 496.7 l
|
||||
h
|
||||
f*
|
||||
155.6 489 m
|
||||
153 483.9 l 150.4 485.2 l 153 490.3 l 155.6 489 l h
|
||||
f*
|
||||
151.7 481.3 m
|
||||
150.4 478.8 l 147.9 480 l 149.1 482.6 l 151.7 481.3 l
|
||||
h
|
||||
f*
|
||||
149.1 476.1 m
|
||||
147.9 473.6 l 145.3 474.9 l 146.6 477.4 l 149.1 476.1 l
|
||||
h
|
||||
f*
|
||||
146.6 471 m
|
||||
145.3 468.4 l 142.7 469.7 l 144 472.3 l 146.6 471 l h
|
||||
f*
|
||||
144 465.8 m
|
||||
141.4 460.7 l 138.8 462 l 141.4 467.1 l 144 465.8 l h
|
||||
f*
|
||||
140.1 458.1 m
|
||||
137.6 453 l 135 454.3 l 137.5 459.4 l 140.1 458.1 l
|
||||
h
|
||||
f*
|
||||
136.3 450.5 m
|
||||
133.7 445.4 l 131.2 446.6 l 133.7 451.7 l 136.3 450.5 l
|
||||
h
|
||||
f*
|
||||
132.5 442.8 m
|
||||
131.2 440.2 l 128.6 441.5 l 129.9 444.1 l 132.5 442.8 l
|
||||
h
|
||||
f*
|
||||
129.9 437.6 m
|
||||
128.6 435 l 126 436.3 l 127.3 438.9 l 129.9 437.6 l
|
||||
h
|
||||
f*
|
||||
127.3 432.4 m
|
||||
127.2 432.4 l 124.7 433.7 l 124.7 433.7 l 127.3 432.4 l
|
||||
h
|
||||
f*
|
||||
0 0.50196 0 rg
|
||||
18 506.4 m
|
||||
72 506.4 l 72 503.6 l 18 503.6 l 18 506.4 l h
|
||||
f*
|
||||
37.2 577.7 m
|
||||
73.2 505.7 l 70.7 504.4 l 34.7 576.4 l 37.2 577.7 l h
|
||||
f*
|
||||
0 0 0.50196 rg
|
||||
234 503.6 m
|
||||
162 503.6 l 162 506.4 l 234 506.4 l 234 503.6 l h
|
||||
f*
|
||||
217.1 576.1 m
|
||||
163.1 504.1 l 160.8 505.9 l 214.8 577.9 l 217.1 576.1 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
36 578.4 m
|
||||
126 578.4 l 126 575.6 l 36 575.6 l 36 578.4 l h
|
||||
f*
|
||||
216 575.6 m
|
||||
126 575.6 l 126 578.4 l 216 578.4 l 216 575.6 l h
|
||||
f*
|
||||
126 431.6 m
|
||||
36 431.6 l 36 434.5 l 126 434.5 l 126 431.6 l h
|
||||
f*
|
||||
0 0.50196 0 rg
|
||||
73.2 504.4 m
|
||||
37.2 432.4 l 34.7 433.7 l 70.7 505.7 l 73.2 504.4 l h
|
||||
f*
|
||||
0 0 0.50196 rg
|
||||
163.1 505.9 m
|
||||
217.1 433.9 l 214.8 432.1 l 160.8 504.1 l 163.1 505.9 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
126 434.5 m
|
||||
216 434.5 l 216 431.6 l 126 431.6 l 126 434.5 l h
|
||||
f*
|
||||
217.4 577.4 m
|
||||
235.4 505.4 l 232.6 504.7 l 214.6 576.7 l 217.4 577.4 l
|
||||
h
|
||||
f*
|
||||
214.6 433.4 m
|
||||
232.6 505.4 l 235.4 504.7 l 217.4 432.7 l 214.6 433.4 l
|
||||
h
|
||||
f*
|
||||
34.6 432.7 m
|
||||
16.6 504.7 l 19.4 505.4 l 37.4 433.4 l 34.6 432.7 l h
|
||||
f*
|
||||
16.6 505.4 m
|
||||
34.6 577.4 l 37.4 576.7 l 19.4 504.7 l 16.6 505.4 l h
|
||||
f*
|
||||
0 0 0.50196 rg
|
||||
412.8 505.9 m
|
||||
466.8 577.9 l 469.1 576.1 l 415.1 504.1 l 412.8 505.9 l
|
||||
h
|
||||
f*
|
||||
504 503.6 m
|
||||
414 503.6 l 414 506.4 l 504 506.4 l 504 503.6 l h
|
||||
f*
|
||||
466.8 432.1 m
|
||||
412.8 504.1 l 415.1 505.9 l 469.1 433.9 l 466.8 432.1 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
469.2 577.7 m
|
||||
505.2 505.7 l 502.7 504.4 l 466.7 576.4 l 469.2 577.7 l
|
||||
h
|
||||
f*
|
||||
466.7 433.7 m
|
||||
502.7 505.7 l 505.2 504.4 l 469.2 432.4 l 466.7 433.7 l
|
||||
h
|
||||
f*
|
||||
0.50196 0 0 rg
|
||||
379.2 577.7 m
|
||||
415.2 505.7 l 412.7 504.4 l 376.7 576.4 l 379.2 577.7 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
378 578.4 m
|
||||
468 578.4 l 468 575.6 l 378 575.6 l 378 578.4 l h
|
||||
f*
|
||||
0 0.50196 0 rg
|
||||
306.8 578.2 m
|
||||
414.8 506.2 l 413.1 503.8 l 305.1 575.8 l 306.8 578.2 l
|
||||
h
|
||||
f*
|
||||
270 506.4 m
|
||||
414 506.4 l 414 503.6 l 270 503.6 l 270 506.4 l h
|
||||
f*
|
||||
0 0 0 rg
|
||||
306 434.5 m
|
||||
468 434.5 l 468 431.6 l 306 431.6 l 306 434.5 l h
|
||||
f*
|
||||
0.50196 0 0 rg
|
||||
415.2 504.4 m
|
||||
379.2 432.4 l 376.7 433.7 l 412.7 505.7 l 415.2 504.4 l
|
||||
h
|
||||
f*
|
||||
0 0.50196 0 rg
|
||||
305.1 434.2 m
|
||||
413.1 506.2 l 414.8 503.8 l 306.8 431.8 l 305.1 434.2 l
|
||||
h
|
||||
f*
|
||||
0 0 0 rg
|
||||
378 575.6 m
|
||||
306 575.6 l 306 578.4 l 378 578.4 l 378 575.6 l h
|
||||
f*
|
||||
268.7 505.7 m
|
||||
304.7 577.7 l 307.2 576.4 l 271.2 504.4 l 268.7 505.7 l
|
||||
h
|
||||
f*
|
||||
304.7 432.4 m
|
||||
268.7 504.4 l 271.2 505.7 l 307.2 433.7 l 304.7 432.4 l
|
||||
h
|
||||
f*
|
||||
Q endstream
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
6872
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Type /Page
|
||||
/Parent 3 0 R
|
||||
/MediaBox [ 0 0 794 595 ]
|
||||
/Contents 1 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<<
|
||||
/ProcSet [ /PDF ]
|
||||
>>
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<< /Type /Pages
|
||||
/Resources 5 0 R
|
||||
/MediaBox [ 0 0 595 842 ]
|
||||
/Kids [ 4 0 R
|
||||
]
|
||||
/Count 1
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 3 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
<< /Author <FEFF0041006E00640072006500610073002000460061006200720069>
|
||||
/Creator <FEFF0049006D00700072006500730073>
|
||||
/Producer <FEFF004F00700065006E004F00660066006900630065002E006F0072006700200031002E0031002E0033>
|
||||
/CreationDate (D:20060927094424-03'00')
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 8
|
||||
0000000000 65535 f
|
||||
0000000017 00000 n
|
||||
0000006949 00000 n
|
||||
0000007132 00000 n
|
||||
0000006976 00000 n
|
||||
0000007083 00000 n
|
||||
0000007268 00000 n
|
||||
0000007327 00000 n
|
||||
trailer
|
||||
<< /Size 8
|
||||
/Root 6 0 R
|
||||
/Info 7 0 R
|
||||
>>
|
||||
startxref
|
||||
7605
|
||||
%%EOF
|
||||
|
After Width: | Height: | Size: 7.0 KiB |
|
|
@ -0,0 +1,817 @@
|
|||
%PDF-1.4
|
||||
%蔕ワ゚
|
||||
1 0 obj
|
||||
<< /Length 2 0 R
|
||||
>>
|
||||
stream
|
||||
0 w
|
||||
q 0 -0.3 793.8 595.3 re W* n
|
||||
0 0 0 rg
|
||||
236.4 454.6 m
|
||||
223.6 458.7 l 223.7 450.2 l 236.4 454.6 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
108.9 453.4 m
|
||||
226.2 454.5 l S
|
||||
0 0 0 rg
|
||||
177 553.6 m
|
||||
180.2 540.5 l 187.4 545.1 l 177 553.6 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
237 458.9 m
|
||||
182.4 544.9 l S
|
||||
0 0 0 rg
|
||||
110.8 458.9 m
|
||||
121.4 467.2 l 114.3 471.9 l 110.8 458.9 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
169.6 547.4 m
|
||||
116.4 467.4 l S
|
||||
0 0 0 rg
|
||||
162.8 554.8 m
|
||||
152.2 546.5 l 159.3 541.8 l 162.8 554.8 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
104 465.1 m
|
||||
157.2 546.3 l S
|
||||
0 0 0 rg
|
||||
246.3 457.1 m
|
||||
243.2 470.2 l 236 465.7 l 246.3 457.1 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
185.6 555.4 m
|
||||
240.9 465.8 l S
|
||||
0 0 0 rg
|
||||
113.9 444.1 m
|
||||
126.7 439.9 l 126.6 448.4 l 113.9 444.1 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
232 444.1 m
|
||||
230.6 444.1 l S
|
||||
229.2 444.1 m
|
||||
227.7 444.1 l S
|
||||
226.3 444.1 m
|
||||
224.8 444.1 l S
|
||||
223.4 444.1 m
|
||||
221.9 444.1 l S
|
||||
220.5 444.1 m
|
||||
219 444.1 l S
|
||||
217.6 444.1 m
|
||||
216.1 444.1 l S
|
||||
214.7 444.1 m
|
||||
213.3 444.1 l S
|
||||
211.8 444.1 m
|
||||
210.4 444.1 l S
|
||||
208.9 444.1 m
|
||||
207.5 444.1 l S
|
||||
206 444.1 m
|
||||
204.6 444.1 l S
|
||||
203.1 444.1 m
|
||||
201.7 444.1 l S
|
||||
200.2 444.1 m
|
||||
198.8 444.1 l S
|
||||
197.3 444.1 m
|
||||
195.9 444.1 l S
|
||||
194.5 444.1 m
|
||||
193 444.1 l S
|
||||
191.6 444.1 m
|
||||
190.1 444.1 l S
|
||||
188.7 444.1 m
|
||||
187.2 444.1 l S
|
||||
185.8 444.1 m
|
||||
184.3 444.1 l S
|
||||
182.9 444.1 m
|
||||
181.4 444.1 l S
|
||||
180 444.1 m
|
||||
178.6 444.1 l S
|
||||
177.1 444.1 m
|
||||
175.7 444.1 l S
|
||||
174.2 444.1 m
|
||||
172.8 444.1 l S
|
||||
171.3 444.1 m
|
||||
169.9 444.1 l S
|
||||
168.4 444.1 m
|
||||
167 444.1 l S
|
||||
165.5 444.1 m
|
||||
164.1 444.1 l S
|
||||
162.7 444.1 m
|
||||
161.2 444.1 l S
|
||||
159.8 444.1 m
|
||||
158.3 444.1 l S
|
||||
156.9 444.1 m
|
||||
155.4 444.1 l S
|
||||
154 444.1 m
|
||||
152.5 444.1 l S
|
||||
151.1 444.1 m
|
||||
149.6 444.1 l S
|
||||
148.2 444.1 m
|
||||
146.7 444.1 l S
|
||||
145.3 444.1 m
|
||||
143.9 444.1 l S
|
||||
142.4 444.1 m
|
||||
141 444.1 l S
|
||||
139.5 444.1 m
|
||||
138.1 444.1 l S
|
||||
136.6 444.1 m
|
||||
135.2 444.1 l S
|
||||
133.7 444.1 m
|
||||
132.3 444.1 l S
|
||||
130.8 444.1 m
|
||||
129.4 444.1 l S
|
||||
128 444.1 m
|
||||
126.5 444.1 l S
|
||||
125.1 444.1 m
|
||||
124.1 444.1 l S
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
165.8 455.9 Td /F1 24 Tf <65> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
183.8 493 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
218.4 507.9 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
12 0 Td <6F> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
138.6 489.3 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <70> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
99.1 509.7 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <70> Tj
|
||||
11.9 0 Td <6F> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
95.5 437 Td /F1 24 Tf <76> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
239.5 437.4 Td /F1 24 Tf <77> Tj
|
||||
ET
|
||||
Q
|
||||
0 0 0 rg
|
||||
44.6 392.1 m
|
||||
57 397.4 l 51.3 403.8 l 44.6 392.1 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
94.1 436 m
|
||||
93 435.1 l S
|
||||
91.9 434.1 m
|
||||
90.9 433.2 l S
|
||||
89.8 432.2 m
|
||||
88.7 431.2 l S
|
||||
87.6 430.3 m
|
||||
86.5 429.3 l S
|
||||
85.4 428.4 m
|
||||
84.4 427.4 l S
|
||||
83.3 426.5 m
|
||||
82.2 425.5 l S
|
||||
81.1 424.5 m
|
||||
80.1 423.6 l S
|
||||
78.9 422.6 m
|
||||
77.9 421.7 l S
|
||||
76.8 420.7 m
|
||||
75.7 419.7 l S
|
||||
74.6 418.8 m
|
||||
73.6 417.8 l S
|
||||
72.5 416.9 m
|
||||
71.4 415.9 l S
|
||||
70.3 414.9 m
|
||||
69.2 414 l S
|
||||
68.1 413 m
|
||||
67.1 412.1 l S
|
||||
66 411.1 m
|
||||
64.9 410.2 l S
|
||||
63.8 409.2 m
|
||||
62.7 408.2 l S
|
||||
61.7 407.3 m
|
||||
60.6 406.3 l S
|
||||
59.5 405.3 m
|
||||
58.4 404.4 l S
|
||||
57.3 403.4 m
|
||||
56.2 402.5 l S
|
||||
55.2 401.5 m
|
||||
54.1 400.5 l S
|
||||
53 399.6 m
|
||||
52.2 398.9 l S
|
||||
0 0 0 rg
|
||||
247.5 431.7 m
|
||||
251.5 418.9 l 258.4 423.8 l 247.5 431.7 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
282.1 383.5 m
|
||||
281.3 384.6 l S
|
||||
280.4 385.8 m
|
||||
279.6 387 l S
|
||||
278.8 388.2 m
|
||||
277.9 389.3 l S
|
||||
277.1 390.5 m
|
||||
276.2 391.7 l S
|
||||
275.4 392.9 m
|
||||
274.5 394 l S
|
||||
273.7 395.2 m
|
||||
272.8 396.4 l S
|
||||
272 397.6 m
|
||||
271.2 398.7 l S
|
||||
270.3 399.9 m
|
||||
269.5 401.1 l S
|
||||
268.6 402.2 m
|
||||
267.8 403.4 l S
|
||||
266.9 404.6 m
|
||||
266.1 405.8 l S
|
||||
265.3 406.9 m
|
||||
264.4 408.1 l S
|
||||
263.6 409.3 m
|
||||
262.7 410.5 l S
|
||||
261.9 411.7 m
|
||||
261 412.8 l S
|
||||
260.2 414 m
|
||||
259.3 415.2 l S
|
||||
258.5 416.3 m
|
||||
257.7 417.5 l S
|
||||
256.8 418.7 m
|
||||
256 419.9 l S
|
||||
255.1 421 m
|
||||
254.3 422.2 l S
|
||||
253.4 423.4 m
|
||||
253.4 423.4 l S
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
164.6 420 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <27> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
73.7 395.9 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
12 0 Td <27> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
242.6 383.5 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <70> Tj
|
||||
11.9 0 Td <27> Tj
|
||||
ET
|
||||
Q
|
||||
0 0 0 rg
|
||||
454 545.2 m
|
||||
449.8 532.5 l 458.3 532.5 l 454 545.2 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
454.4 449.6 m
|
||||
454.1 535 l S
|
||||
0 0 0 rg
|
||||
461.3 450.8 m
|
||||
465.5 463.6 l 457 463.6 l 461.3 450.8 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
461 541.3 m
|
||||
461.3 461 l S
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
471.5 497.3 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
11.9 0 Td <6F> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
417.1 498.6 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
449.9 425.6 Td /F1 24 Tf <77> Tj
|
||||
ET
|
||||
Q
|
||||
0 0 0 rg
|
||||
338.5 382.8 m
|
||||
351.9 384 l 348.4 391.8 l 338.5 382.8 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
443.8 429.1 m
|
||||
442.5 428.6 l S
|
||||
441.2 428 m
|
||||
439.9 427.4 l S
|
||||
438.5 426.8 m
|
||||
437.2 426.3 l S
|
||||
435.9 425.7 m
|
||||
434.6 425.1 l S
|
||||
433.2 424.5 m
|
||||
431.9 423.9 l S
|
||||
430.6 423.3 m
|
||||
429.3 422.8 l S
|
||||
427.9 422.2 m
|
||||
426.6 421.6 l S
|
||||
425.3 421 m
|
||||
424 420.4 l S
|
||||
422.7 419.8 m
|
||||
421.3 419.3 l S
|
||||
420 418.7 m
|
||||
418.7 418.1 l S
|
||||
417.4 417.5 m
|
||||
416 416.9 l S
|
||||
414.7 416.4 m
|
||||
413.4 415.8 l S
|
||||
412.1 415.2 m
|
||||
410.7 414.6 l S
|
||||
409.4 414 m
|
||||
408.1 413.4 l S
|
||||
406.8 412.9 m
|
||||
405.5 412.3 l S
|
||||
404.1 411.7 m
|
||||
402.8 411.1 l S
|
||||
401.5 410.5 m
|
||||
400.2 410 l S
|
||||
398.8 409.4 m
|
||||
397.5 408.8 l S
|
||||
396.2 408.2 m
|
||||
394.9 407.6 l S
|
||||
393.6 407 m
|
||||
392.2 406.5 l S
|
||||
390.9 405.9 m
|
||||
389.6 405.3 l S
|
||||
388.3 404.7 m
|
||||
386.9 404.1 l S
|
||||
385.6 403.5 m
|
||||
384.3 403 l S
|
||||
383 402.4 m
|
||||
381.6 401.8 l S
|
||||
380.3 401.2 m
|
||||
379 400.6 l S
|
||||
377.7 400.1 m
|
||||
376.4 399.5 l S
|
||||
375 398.9 m
|
||||
373.7 398.3 l S
|
||||
372.4 397.7 m
|
||||
371.1 397.1 l S
|
||||
369.7 396.6 m
|
||||
368.4 396 l S
|
||||
367.1 395.4 m
|
||||
365.8 394.8 l S
|
||||
364.5 394.2 m
|
||||
363.1 393.7 l S
|
||||
361.8 393.1 m
|
||||
360.5 392.5 l S
|
||||
359.1 391.9 m
|
||||
357.8 391.3 l S
|
||||
356.5 390.7 m
|
||||
355.2 390.2 l S
|
||||
353.8 389.6 m
|
||||
352.5 389 l S
|
||||
351.2 388.4 m
|
||||
349.9 387.8 l S
|
||||
348.5 387.2 m
|
||||
347.8 386.9 l S
|
||||
0 0 0 rg
|
||||
468 427.3 m
|
||||
477.5 417.8 l 481.3 425.5 l 468 427.3 l h
|
||||
f*
|
||||
0 0 0 RG
|
||||
576 374.1 m
|
||||
574.7 374.8 l S
|
||||
573.4 375.4 m
|
||||
572.1 376.1 l S
|
||||
570.8 376.7 m
|
||||
569.5 377.3 l S
|
||||
568.2 378 m
|
||||
566.9 378.6 l S
|
||||
565.6 379.3 m
|
||||
564.3 379.9 l S
|
||||
563 380.5 m
|
||||
561.7 381.2 l S
|
||||
560.4 381.8 m
|
||||
559.1 382.4 l S
|
||||
557.8 383.1 m
|
||||
556.5 383.7 l S
|
||||
555.2 384.4 m
|
||||
553.9 385 l S
|
||||
552.6 385.6 m
|
||||
551.3 386.3 l S
|
||||
550 386.9 m
|
||||
548.8 387.5 l S
|
||||
547.5 388.2 m
|
||||
546.2 388.8 l S
|
||||
544.8 389.5 m
|
||||
543.5 390.1 l S
|
||||
542.3 390.7 m
|
||||
541 391.4 l S
|
||||
539.7 392 m
|
||||
538.4 392.6 l S
|
||||
537.1 393.3 m
|
||||
535.8 393.9 l S
|
||||
534.5 394.6 m
|
||||
533.2 395.2 l S
|
||||
531.9 395.8 m
|
||||
530.6 396.5 l S
|
||||
529.3 397.1 m
|
||||
528 397.8 l S
|
||||
526.7 398.4 m
|
||||
525.4 399 l S
|
||||
524.1 399.7 m
|
||||
522.8 400.3 l S
|
||||
521.5 400.9 m
|
||||
520.2 401.6 l S
|
||||
518.9 402.2 m
|
||||
517.6 402.9 l S
|
||||
516.3 403.5 m
|
||||
515 404.1 l S
|
||||
513.7 404.8 m
|
||||
512.4 405.4 l S
|
||||
511.1 406 m
|
||||
509.8 406.7 l S
|
||||
508.5 407.3 m
|
||||
507.2 408 l S
|
||||
505.9 408.6 m
|
||||
504.7 409.2 l S
|
||||
503.3 409.9 m
|
||||
502 410.5 l S
|
||||
500.7 411.1 m
|
||||
499.5 411.8 l S
|
||||
498.2 412.4 m
|
||||
496.9 413.1 l S
|
||||
495.6 413.7 m
|
||||
494.3 414.3 l S
|
||||
493 415 m
|
||||
491.7 415.6 l S
|
||||
490.4 416.2 m
|
||||
489.1 416.9 l S
|
||||
487.8 417.5 m
|
||||
486.5 418.2 l S
|
||||
485.2 418.8 m
|
||||
483.9 419.5 l S
|
||||
482.6 420.1 m
|
||||
481.3 420.7 l S
|
||||
480 421.4 m
|
||||
478.7 422 l S
|
||||
477.4 422.7 m
|
||||
477.1 422.8 l S
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
390.4 385.3 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <6E> Tj
|
||||
12 0 Td <27> Tj
|
||||
ET
|
||||
Q
|
||||
q 0 0 0 rg
|
||||
BT
|
||||
496.2 379.8 Td /F1 24 Tf <65> Tj
|
||||
10.7 0 Td <70> Tj
|
||||
12 0 Td <27> Tj
|
||||
ET
|
||||
Q
|
||||
0 0 0 rg
|
||||
365.4 460.6 m
|
||||
343 468.1 l 343 453.2 l 365.4 460.6 l h
|
||||
f*
|
||||
278.8 462.8 m
|
||||
347.4 462.8 l 347.4 458.5 l 278.8 458.5 l 278.8 462.8 l
|
||||
h
|
||||
f*
|
||||
0 0 0 RG
|
||||
101.2 431 m
|
||||
100.7 431 l 100.2 431 l 99.8 431 l 99.3 431.1 l 98.8 431.2 l
|
||||
98.4 431.3 l 97.9 431.4 l 97.5 431.6 l 97 431.7 l 96.6 431.9 l 96.2 432 l
|
||||
95.7 432.2 l 95.3 432.4 l 94.9 432.7 l 94.5 432.9 l 94.1 433.1 l 93.7 433.4 l
|
||||
93.4 433.7 l 93 434 l 92.7 434.3 l 92.3 434.6 l 92 434.9 l 91.7 435.3 l
|
||||
91.4 435.6 l 91.1 436 l 90.8 436.3 l 90.5 436.7 l 90.3 437.1 l 90 437.5 l
|
||||
89.8 437.9 l 89.5 438.3 l 89.3 438.8 l 89.1 439.2 l 89 439.7 l 88.8 440.1 l
|
||||
88.6 440.6 l 88.5 441 l 88.4 441.5 l 88.3 442 l 88.2 442.5 l 88.1 442.9 l
|
||||
88 443.5 l 88 444 l 88 444.5 l 88 445 l 88 445.5 l 88 446 l 88 446.5 l
|
||||
88.1 447 l 88.2 447.5 l 88.3 448 l 88.4 448.4 l 88.5 448.9 l 88.6 449.4 l
|
||||
88.8 449.9 l 89 450.3 l 89.1 450.7 l 89.3 451.2 l 89.5 451.6 l 89.8 452 l
|
||||
90 452.4 l 90.3 452.8 l 90.5 453.2 l 90.8 453.6 l 91.1 454 l 91.4 454.3 l
|
||||
91.7 454.7 l 92 455 l 92.3 455.4 l 92.7 455.7 l 93 456 l 93.4 456.3 l
|
||||
93.7 456.6 l 94.1 456.8 l 94.5 457.1 l 94.9 457.3 l 95.3 457.5 l 95.7 457.7 l
|
||||
96.2 457.9 l 96.6 458.1 l 97 458.3 l 97.5 458.4 l 97.9 458.5 l 98.4 458.7 l
|
||||
98.8 458.8 l 99.3 458.8 l 99.8 458.9 l 100.2 458.9 l 100.7 459 l 101.2 459 l
|
||||
101.7 459 l 102.1 458.9 l 102.6 458.9 l 103.1 458.8 l 103.5 458.8 l
|
||||
104 458.7 l 104.5 458.5 l 104.9 458.4 l 105.4 458.3 l 105.8 458.1 l
|
||||
106.2 457.9 l 106.6 457.7 l 107 457.5 l 107.5 457.3 l 107.9 457.1 l
|
||||
108.2 456.8 l 108.6 456.6 l 109 456.3 l 109.3 456 l 109.7 455.7 l 110 455.4 l
|
||||
110.4 455 l 110.7 454.7 l 111 454.3 l 111.3 454 l 111.6 453.6 l 111.8 453.2 l
|
||||
112.1 452.8 l 112.3 452.4 l 112.6 452 l 112.8 451.6 l 113 451.2 l 113.2 450.7 l
|
||||
113.4 450.3 l 113.6 449.9 l 113.7 449.4 l 113.9 448.9 l 114 448.4 l
|
||||
114.1 448 l 114.2 447.5 l 114.3 447 l 114.3 446.5 l 114.3 446 l 114.4 445.5 l
|
||||
114.4 445 l 114.4 444.5 l 114.3 444 l 114.3 443.5 l 114.3 442.9 l 114.2 442.5 l
|
||||
114.1 442 l 114 441.5 l 113.9 441 l 113.7 440.6 l 113.6 440.1 l 113.4 439.7 l
|
||||
113.2 439.2 l 113 438.8 l 112.8 438.3 l 112.6 437.9 l 112.3 437.5 l
|
||||
112.1 437.1 l 111.8 436.7 l 111.6 436.3 l 111.3 436 l 111 435.6 l 110.7 435.3 l
|
||||
110.4 434.9 l 110 434.6 l 109.7 434.3 l 109.3 434 l 109 433.7 l 108.6 433.4 l
|
||||
108.2 433.1 l 107.9 432.9 l 107.5 432.7 l 107 432.4 l 106.6 432.2 l
|
||||
106.2 432 l 105.8 431.9 l 105.4 431.7 l 104.9 431.6 l 104.5 431.4 l
|
||||
104 431.3 l 103.5 431.2 l 103.1 431.1 l 102.6 431 l 102.1 431 l 101.7 431 l
|
||||
101.2 431 l h
|
||||
S
|
||||
247.3 429.4 m
|
||||
246.8 429.4 l 246.4 429.4 l 245.9 429.5 l 245.4 429.5 l
|
||||
244.9 429.6 l 244.5 429.7 l 244 429.8 l 243.6 430 l 243.1 430.1 l 242.7 430.3 l
|
||||
242.3 430.4 l 241.9 430.6 l 241.5 430.8 l 241 431.1 l 240.6 431.3 l
|
||||
240.3 431.6 l 239.9 431.8 l 239.5 432.1 l 239.2 432.4 l 238.8 432.7 l
|
||||
238.5 433 l 238.1 433.3 l 237.8 433.7 l 237.5 434 l 237.2 434.4 l 236.9 434.8 l
|
||||
236.7 435.1 l 236.4 435.5 l 236.2 435.9 l 235.9 436.3 l 235.7 436.7 l
|
||||
235.5 437.2 l 235.3 437.6 l 235.1 438.1 l 234.9 438.5 l 234.8 439 l
|
||||
234.6 439.4 l 234.5 439.9 l 234.4 440.4 l 234.3 440.9 l 234.2 441.4 l
|
||||
234.2 441.9 l 234.1 442.4 l 234.1 442.9 l 234.1 443.4 l 234.1 443.9 l
|
||||
234.1 444.4 l 234.2 444.9 l 234.2 445.4 l 234.3 445.9 l 234.4 446.4 l
|
||||
234.5 446.9 l 234.6 447.3 l 234.8 447.8 l 234.9 448.3 l 235.1 448.7 l
|
||||
235.3 449.2 l 235.5 449.6 l 235.7 450 l 235.9 450.4 l 236.2 450.9 l
|
||||
236.4 451.3 l 236.7 451.7 l 236.9 452 l 237.2 452.4 l 237.5 452.8 l
|
||||
237.8 453.1 l 238.1 453.4 l 238.5 453.8 l 238.8 454.1 l 239.2 454.4 l
|
||||
239.5 454.7 l 239.9 455 l 240.3 455.2 l 240.6 455.5 l 241 455.7 l 241.5 455.9 l
|
||||
241.9 456.1 l 242.3 456.3 l 242.7 456.5 l 243.1 456.7 l 243.6 456.8 l
|
||||
244 457 l 244.5 457.1 l 244.9 457.2 l 245.4 457.2 l 245.9 457.3 l 246.4 457.3 l
|
||||
246.8 457.4 l 247.3 457.4 l 247.8 457.4 l 248.3 457.3 l 248.7 457.3 l
|
||||
249.2 457.2 l 249.7 457.2 l 250.1 457.1 l 250.6 457 l 251 456.8 l 251.5 456.7 l
|
||||
251.9 456.5 l 252.3 456.3 l 252.8 456.1 l 253.2 455.9 l 253.6 455.7 l
|
||||
254 455.5 l 254.4 455.2 l 254.7 455 l 255.1 454.7 l 255.5 454.4 l 255.8 454.1 l
|
||||
256.2 453.8 l 256.5 453.4 l 256.8 453.1 l 257.1 452.8 l 257.4 452.4 l
|
||||
257.7 452 l 258 451.7 l 258.2 451.3 l 258.5 450.9 l 258.7 450.4 l 258.9 450 l
|
||||
259.1 449.6 l 259.3 449.2 l 259.5 448.7 l 259.7 448.3 l 259.9 447.8 l
|
||||
260 447.3 l 260.1 446.9 l 260.2 446.4 l 260.3 445.9 l 260.4 445.4 l
|
||||
260.4 444.9 l 260.5 444.4 l 260.5 443.9 l 260.5 443.4 l 260.5 442.9 l
|
||||
260.5 442.4 l 260.4 441.9 l 260.4 441.4 l 260.3 440.9 l 260.2 440.4 l
|
||||
260.1 439.9 l 260 439.4 l 259.9 439 l 259.7 438.5 l 259.5 438.1 l 259.3 437.6 l
|
||||
259.1 437.2 l 258.9 436.7 l 258.7 436.3 l 258.5 435.9 l 258.2 435.5 l
|
||||
258 435.1 l 257.7 434.8 l 257.4 434.4 l 257.1 434 l 256.8 433.7 l 256.5 433.3 l
|
||||
256.2 433 l 255.8 432.7 l 255.5 432.4 l 255.1 432.1 l 254.7 431.8 l
|
||||
254.4 431.6 l 254 431.3 l 253.6 431.1 l 253.2 430.8 l 252.8 430.6 l
|
||||
252.3 430.4 l 251.9 430.3 l 251.5 430.1 l 251 430 l 250.6 429.8 l 250.1 429.7 l
|
||||
249.7 429.6 l 249.2 429.5 l 248.7 429.5 l 248.3 429.4 l 247.8 429.4 l
|
||||
247.3 429.4 l h
|
||||
S
|
||||
171.9 549 m
|
||||
171.4 549.1 l 171 549.1 l 170.5 549.1 l 170 549.2 l 169.6 549.2 l
|
||||
169.1 549.4 l 168.7 549.5 l 168.2 549.6 l 167.8 549.8 l 167.3 549.9 l
|
||||
166.9 550.1 l 166.5 550.3 l 166.1 550.5 l 165.7 550.7 l 165.3 550.9 l
|
||||
164.9 551.2 l 164.5 551.5 l 164.1 551.7 l 163.8 552 l 163.4 552.3 l
|
||||
163.1 552.7 l 162.8 553 l 162.5 553.3 l 162.1 553.7 l 161.8 554 l 161.5 554.4 l
|
||||
161.3 554.8 l 161 555.2 l 160.8 555.6 l 160.5 556 l 160.3 556.4 l 160.1 556.8 l
|
||||
159.9 557.3 l 159.7 557.7 l 159.6 558.1 l 159.4 558.6 l 159.3 559.1 l
|
||||
159.1 559.6 l 159 560 l 158.9 560.5 l 158.9 561 l 158.8 561.5 l 158.8 562 l
|
||||
158.7 562.5 l 158.7 563 l 158.7 563.6 l 158.8 564 l 158.8 564.6 l 158.9 565.1 l
|
||||
158.9 565.5 l 159 566 l 159.1 566.5 l 159.3 567 l 159.4 567.4 l 159.6 567.9 l
|
||||
159.7 568.4 l 159.9 568.8 l 160.1 569.3 l 160.3 569.7 l 160.5 570.1 l
|
||||
160.8 570.5 l 161 570.9 l 161.3 571.3 l 161.5 571.7 l 161.8 572 l 162.1 572.4 l
|
||||
162.5 572.7 l 162.8 573.1 l 163.1 573.4 l 163.4 573.7 l 163.8 574.1 l
|
||||
164.1 574.3 l 164.5 574.6 l 164.9 574.9 l 165.3 575.1 l 165.7 575.4 l
|
||||
166.1 575.6 l 166.5 575.8 l 166.9 576 l 167.3 576.1 l 167.8 576.3 l
|
||||
168.2 576.5 l 168.7 576.6 l 169.1 576.7 l 169.6 576.8 l 170 576.9 l
|
||||
170.5 577 l 171 577 l 171.4 577 l 171.9 577 l 172.4 577 l 172.9 577 l
|
||||
173.4 577 l 173.8 576.9 l 174.3 576.8 l 174.8 576.7 l 175.2 576.6 l
|
||||
175.7 576.5 l 176.1 576.3 l 176.5 576.1 l 177 576 l 177.4 575.8 l 177.8 575.6 l
|
||||
178.2 575.4 l 178.6 575.1 l 179 574.9 l 179.4 574.6 l 179.7 574.3 l
|
||||
180.1 574.1 l 180.5 573.7 l 180.8 573.4 l 181.1 573.1 l 181.4 572.7 l
|
||||
181.7 572.4 l 182 572 l 182.3 571.7 l 182.6 571.3 l 182.9 570.9 l 183.1 570.5 l
|
||||
183.3 570.1 l 183.6 569.7 l 183.8 569.3 l 184 568.8 l 184.1 568.4 l
|
||||
184.3 567.9 l 184.5 567.4 l 184.6 567 l 184.7 566.5 l 184.8 566 l 184.9 565.5 l
|
||||
185 565.1 l 185.1 564.6 l 185.1 564 l 185.1 563.6 l 185.2 563 l 185.1 562.5 l
|
||||
185.1 562 l 185.1 561.5 l 185 561 l 184.9 560.5 l 184.8 560 l 184.7 559.6 l
|
||||
184.6 559.1 l 184.5 558.6 l 184.3 558.1 l 184.1 557.7 l 184 557.3 l
|
||||
183.8 556.8 l 183.6 556.4 l 183.3 556 l 183.1 555.6 l 182.9 555.2 l
|
||||
182.6 554.8 l 182.3 554.4 l 182 554 l 181.7 553.7 l 181.4 553.3 l 181.1 553 l
|
||||
180.8 552.7 l 180.5 552.3 l 180.1 552 l 179.7 551.7 l 179.4 551.5 l
|
||||
179 551.2 l 178.6 550.9 l 178.2 550.7 l 177.8 550.5 l 177.4 550.3 l
|
||||
177 550.1 l 176.5 549.9 l 176.1 549.8 l 175.7 549.6 l 175.2 549.5 l
|
||||
174.8 549.4 l 174.3 549.2 l 173.8 549.2 l 173.4 549.1 l 172.9 549.1 l
|
||||
172.4 549.1 l 171.9 549 l h
|
||||
S
|
||||
457.9 545.9 m
|
||||
457.4 546 l 456.9 546 l 456.5 546 l 456 546.1 l 455.5 546.2 l
|
||||
455.1 546.3 l 454.6 546.4 l 454.2 546.5 l 453.7 546.7 l 453.3 546.8 l
|
||||
452.9 547 l 452.4 547.2 l 452 547.4 l 451.6 547.6 l 451.2 547.9 l 450.9 548.1 l
|
||||
450.5 548.4 l 450.1 548.7 l 449.7 548.9 l 449.4 549.2 l 449 549.6 l
|
||||
448.7 549.9 l 448.4 550.2 l 448.1 550.6 l 447.8 550.9 l 447.5 551.3 l
|
||||
447.3 551.7 l 447 552.1 l 446.7 552.5 l 446.5 552.9 l 446.3 553.3 l
|
||||
446.1 553.7 l 445.9 554.2 l 445.7 554.6 l 445.5 555.1 l 445.4 555.5 l
|
||||
445.2 556 l 445.1 556.5 l 445 557 l 444.9 557.4 l 444.8 557.9 l 444.8 558.4 l
|
||||
444.7 558.9 l 444.7 559.4 l 444.7 559.9 l 444.7 560.5 l 444.7 561 l
|
||||
444.8 561.5 l 444.8 562 l 444.9 562.5 l 445 562.9 l 445.1 563.4 l 445.2 563.9 l
|
||||
445.4 564.4 l 445.5 564.8 l 445.7 565.3 l 445.9 565.7 l 446.1 566.2 l
|
||||
446.3 566.6 l 446.5 567 l 446.7 567.4 l 447 567.8 l 447.3 568.2 l 447.5 568.6 l
|
||||
447.8 568.9 l 448.1 569.3 l 448.4 569.7 l 448.7 570 l 449 570.3 l 449.4 570.7 l
|
||||
449.7 571 l 450.1 571.2 l 450.5 571.5 l 450.9 571.8 l 451.2 572 l 451.6 572.3 l
|
||||
452 572.5 l 452.4 572.7 l 452.9 572.9 l 453.3 573.1 l 453.7 573.2 l
|
||||
454.2 573.4 l 454.6 573.5 l 455.1 573.6 l 455.5 573.7 l 456 573.8 l
|
||||
456.5 573.9 l 456.9 573.9 l 457.4 573.9 l 457.9 573.9 l 458.4 573.9 l
|
||||
458.8 573.9 l 459.3 573.9 l 459.8 573.8 l 460.3 573.7 l 460.7 573.6 l
|
||||
461.2 573.5 l 461.6 573.4 l 462.1 573.2 l 462.5 573.1 l 462.9 572.9 l
|
||||
463.4 572.7 l 463.7 572.5 l 464.2 572.3 l 464.6 572 l 464.9 571.8 l
|
||||
465.3 571.5 l 465.7 571.2 l 466 571 l 466.4 570.7 l 466.8 570.3 l 467.1 570 l
|
||||
467.4 569.7 l 467.7 569.3 l 468 568.9 l 468.3 568.6 l 468.5 568.2 l
|
||||
468.8 567.8 l 469 567.4 l 469.3 567 l 469.5 566.6 l 469.7 566.2 l 469.9 565.7 l
|
||||
470.1 565.3 l 470.3 564.8 l 470.4 564.4 l 470.6 563.9 l 470.7 563.4 l
|
||||
470.8 562.9 l 470.9 562.5 l 471 562 l 471 561.5 l 471.1 561 l 471.1 560.5 l
|
||||
471.1 559.9 l 471.1 559.4 l 471.1 558.9 l 471 558.4 l 471 557.9 l 470.9 557.4 l
|
||||
470.8 557 l 470.7 556.5 l 470.6 556 l 470.4 555.5 l 470.3 555.1 l 470.1 554.6 l
|
||||
469.9 554.2 l 469.7 553.7 l 469.5 553.3 l 469.3 552.9 l 469 552.5 l
|
||||
468.8 552.1 l 468.5 551.7 l 468.3 551.3 l 468 550.9 l 467.7 550.6 l
|
||||
467.4 550.2 l 467.1 549.9 l 466.8 549.6 l 466.4 549.2 l 466 548.9 l
|
||||
465.7 548.7 l 465.3 548.4 l 464.9 548.1 l 464.6 547.9 l 464.2 547.6 l
|
||||
463.7 547.4 l 463.4 547.2 l 462.9 547 l 462.5 546.8 l 462.1 546.7 l
|
||||
461.6 546.5 l 461.2 546.4 l 460.7 546.3 l 460.3 546.2 l 459.8 546.1 l
|
||||
459.3 546 l 458.8 546 l 458.4 546 l 457.9 545.9 l h
|
||||
S
|
||||
457.1 419.3 m
|
||||
456.6 419.3 l 456.2 419.3 l 455.7 419.4 l 455.2 419.5 l
|
||||
454.7 419.5 l 454.3 419.6 l 453.8 419.7 l 453.4 419.9 l 452.9 420 l
|
||||
452.5 420.2 l 452.1 420.4 l 451.6 420.6 l 451.2 420.8 l 450.8 421 l
|
||||
450.4 421.2 l 450.1 421.5 l 449.7 421.7 l 449.3 422 l 449 422.3 l 448.6 422.6 l
|
||||
448.2 422.9 l 447.9 423.2 l 447.6 423.6 l 447.3 423.9 l 447 424.3 l
|
||||
446.7 424.7 l 446.5 425 l 446.2 425.4 l 445.9 425.8 l 445.7 426.3 l
|
||||
445.5 426.7 l 445.3 427.1 l 445.1 427.5 l 444.9 428 l 444.7 428.4 l
|
||||
444.6 428.9 l 444.4 429.3 l 444.3 429.8 l 444.2 430.3 l 444.1 430.8 l
|
||||
444 431.3 l 444 431.8 l 443.9 432.3 l 443.9 432.8 l 443.9 433.3 l 443.9 433.8 l
|
||||
443.9 434.3 l 444 434.8 l 444 435.3 l 444.1 435.8 l 444.2 436.3 l 444.3 436.8 l
|
||||
444.4 437.3 l 444.6 437.7 l 444.7 438.2 l 444.9 438.6 l 445.1 439.1 l
|
||||
445.3 439.5 l 445.5 439.9 l 445.7 440.3 l 445.9 440.8 l 446.2 441.2 l
|
||||
446.5 441.6 l 446.7 441.9 l 447 442.3 l 447.3 442.7 l 447.6 443 l 447.9 443.3 l
|
||||
448.2 443.7 l 448.6 444 l 449 444.3 l 449.3 444.6 l 449.7 444.9 l 450.1 445.1 l
|
||||
450.4 445.4 l 450.8 445.6 l 451.2 445.8 l 451.6 446 l 452.1 446.2 l
|
||||
452.5 446.4 l 452.9 446.6 l 453.4 446.7 l 453.8 446.9 l 454.3 447 l
|
||||
454.7 447.1 l 455.2 447.1 l 455.7 447.2 l 456.2 447.3 l 456.6 447.3 l
|
||||
457.1 447.3 l 457.6 447.3 l 458.1 447.3 l 458.5 447.2 l 459 447.1 l
|
||||
459.5 447.1 l 459.9 447 l 460.4 446.9 l 460.8 446.7 l 461.3 446.6 l
|
||||
461.7 446.4 l 462.1 446.2 l 462.6 446 l 463 445.8 l 463.4 445.6 l 463.8 445.4 l
|
||||
464.1 445.1 l 464.5 444.9 l 464.9 444.6 l 465.3 444.3 l 465.6 444 l
|
||||
466 443.7 l 466.3 443.3 l 466.6 443 l 466.9 442.7 l 467.2 442.3 l 467.5 441.9 l
|
||||
467.7 441.6 l 468 441.2 l 468.3 440.8 l 468.5 440.3 l 468.7 439.9 l
|
||||
468.9 439.5 l 469.1 439.1 l 469.3 438.6 l 469.5 438.2 l 469.6 437.7 l
|
||||
469.8 437.3 l 469.9 436.8 l 470 436.3 l 470.1 435.8 l 470.2 435.3 l
|
||||
470.2 434.8 l 470.3 434.3 l 470.3 433.8 l 470.3 433.3 l 470.3 432.8 l
|
||||
470.3 432.3 l 470.2 431.8 l 470.2 431.3 l 470.1 430.8 l 470 430.3 l
|
||||
469.9 429.8 l 469.8 429.3 l 469.6 428.9 l 469.5 428.4 l 469.3 428 l
|
||||
469.1 427.5 l 468.9 427.1 l 468.7 426.7 l 468.5 426.3 l 468.3 425.8 l
|
||||
468 425.4 l 467.7 425 l 467.5 424.7 l 467.2 424.3 l 466.9 423.9 l 466.6 423.6 l
|
||||
466.3 423.2 l 466 422.9 l 465.6 422.6 l 465.3 422.3 l 464.9 422 l 464.5 421.7 l
|
||||
464.1 421.5 l 463.8 421.2 l 463.4 421 l 463 420.8 l 462.6 420.6 l 462.1 420.4 l
|
||||
461.7 420.2 l 461.3 420 l 460.8 419.9 l 460.4 419.7 l 459.9 419.6 l
|
||||
459.5 419.5 l 459 419.5 l 458.5 419.4 l 458.1 419.3 l 457.6 419.3 l
|
||||
457.1 419.3 l h
|
||||
S
|
||||
101.2 430.9 m
|
||||
100.7 431 l 100.3 431 l 99.8 431 l 99.3 431.1 l 98.8 431.2 l
|
||||
98.4 431.3 l 97.9 431.4 l 97.5 431.5 l 97 431.7 l 96.6 431.8 l 96.2 432 l
|
||||
95.8 432.2 l 95.4 432.4 l 94.9 432.6 l 94.5 432.9 l 94.2 433.1 l 93.8 433.4 l
|
||||
93.4 433.7 l 93.1 433.9 l 92.7 434.2 l 92.4 434.6 l 92 434.9 l 91.7 435.2 l
|
||||
91.4 435.6 l 91.1 435.9 l 90.8 436.3 l 90.6 436.7 l 90.3 437.1 l 90.1 437.5 l
|
||||
89.8 437.9 l 89.6 438.3 l 89.4 438.7 l 89.2 439.2 l 89 439.6 l 88.8 440.1 l
|
||||
88.7 440.5 l 88.5 441 l 88.4 441.5 l 88.3 442 l 88.2 442.4 l 88.1 442.9 l
|
||||
88.1 443.4 l 88 443.9 l 88 444.4 l 88 444.9 l 88 445.5 l 88 446 l 88.1 446.5 l
|
||||
88.1 447 l 88.2 447.5 l 88.3 447.9 l 88.4 448.4 l 88.5 448.9 l 88.7 449.4 l
|
||||
88.8 449.8 l 89 450.3 l 89.2 450.7 l 89.4 451.2 l 89.6 451.6 l 89.8 452 l
|
||||
90.1 452.4 l 90.3 452.8 l 90.6 453.2 l 90.8 453.6 l 91.1 453.9 l 91.4 454.3 l
|
||||
91.7 454.7 l 92 455 l 92.4 455.3 l 92.7 455.6 l 93.1 456 l 93.4 456.2 l
|
||||
93.8 456.5 l 94.2 456.8 l 94.5 457 l 94.9 457.3 l 95.4 457.5 l 95.8 457.7 l
|
||||
96.2 457.9 l 96.6 458.1 l 97 458.2 l 97.5 458.4 l 97.9 458.5 l 98.4 458.6 l
|
||||
98.8 458.7 l 99.3 458.8 l 99.8 458.9 l 100.3 458.9 l 100.7 458.9 l
|
||||
101.2 458.9 l 101.7 458.9 l 102.2 458.9 l 102.6 458.9 l 103.1 458.8 l
|
||||
103.6 458.7 l 104 458.6 l 104.5 458.5 l 104.9 458.4 l 105.4 458.2 l
|
||||
105.8 458.1 l 106.2 457.9 l 106.7 457.7 l 107.1 457.5 l 107.5 457.3 l
|
||||
107.9 457 l 108.3 456.8 l 108.7 456.5 l 109 456.2 l 109.4 456 l 109.7 455.6 l
|
||||
110.1 455.3 l 110.4 455 l 110.7 454.7 l 111 454.3 l 111.3 453.9 l 111.6 453.6 l
|
||||
111.9 453.2 l 112.1 452.8 l 112.4 452.4 l 112.6 452 l 112.8 451.6 l
|
||||
113 451.2 l 113.2 450.7 l 113.4 450.3 l 113.6 449.8 l 113.8 449.4 l
|
||||
113.9 448.9 l 114 448.4 l 114.1 447.9 l 114.2 447.5 l 114.3 447 l 114.3 446.5 l
|
||||
114.4 446 l 114.4 445.5 l 114.4 444.9 l 114.4 444.4 l 114.4 443.9 l
|
||||
114.3 443.4 l 114.3 442.9 l 114.2 442.4 l 114.1 442 l 114 441.5 l 113.9 441 l
|
||||
113.8 440.5 l 113.6 440.1 l 113.4 439.6 l 113.2 439.2 l 113 438.7 l
|
||||
112.8 438.3 l 112.6 437.9 l 112.4 437.5 l 112.1 437.1 l 111.9 436.7 l
|
||||
111.6 436.3 l 111.3 435.9 l 111 435.6 l 110.7 435.2 l 110.4 434.9 l
|
||||
110.1 434.6 l 109.7 434.2 l 109.4 433.9 l 109 433.7 l 108.7 433.4 l
|
||||
108.3 433.1 l 107.9 432.9 l 107.5 432.6 l 107.1 432.4 l 106.7 432.2 l
|
||||
106.2 432 l 105.8 431.8 l 105.4 431.7 l 104.9 431.5 l 104.5 431.4 l
|
||||
104 431.3 l 103.6 431.2 l 103.1 431.1 l 102.6 431 l 102.2 431 l 101.7 431 l
|
||||
101.2 430.9 l h
|
||||
S
|
||||
101.2 430.9 m
|
||||
100.7 431 l 100.3 431 l 99.8 431 l 99.3 431.1 l 98.8 431.2 l
|
||||
98.4 431.3 l 97.9 431.4 l 97.5 431.5 l 97 431.7 l 96.6 431.8 l 96.2 432 l
|
||||
95.8 432.2 l 95.4 432.4 l 94.9 432.6 l 94.5 432.9 l 94.2 433.1 l 93.8 433.4 l
|
||||
93.4 433.7 l 93.1 433.9 l 92.7 434.2 l 92.4 434.6 l 92 434.9 l 91.7 435.2 l
|
||||
91.4 435.6 l 91.1 435.9 l 90.8 436.3 l 90.6 436.7 l 90.3 437.1 l 90.1 437.5 l
|
||||
89.8 437.9 l 89.6 438.3 l 89.4 438.7 l 89.2 439.2 l 89 439.6 l 88.8 440.1 l
|
||||
88.7 440.5 l 88.5 441 l 88.4 441.5 l 88.3 442 l 88.2 442.4 l 88.1 442.9 l
|
||||
88.1 443.4 l 88 443.9 l 88 444.4 l 88 444.9 l 88 445.5 l 88 446 l 88.1 446.5 l
|
||||
88.1 447 l 88.2 447.5 l 88.3 447.9 l 88.4 448.4 l 88.5 448.9 l 88.7 449.4 l
|
||||
88.8 449.8 l 89 450.3 l 89.2 450.7 l 89.4 451.2 l 89.6 451.6 l 89.8 452 l
|
||||
90.1 452.4 l 90.3 452.8 l 90.6 453.2 l 90.8 453.6 l 91.1 453.9 l 91.4 454.3 l
|
||||
91.7 454.7 l 92 455 l 92.4 455.3 l 92.7 455.6 l 93.1 456 l 93.4 456.2 l
|
||||
93.8 456.5 l 94.2 456.8 l 94.5 457 l 94.9 457.3 l 95.4 457.5 l 95.8 457.7 l
|
||||
96.2 457.9 l 96.6 458.1 l 97 458.2 l 97.5 458.4 l 97.9 458.5 l 98.4 458.6 l
|
||||
98.8 458.7 l 99.3 458.8 l 99.8 458.9 l 100.3 458.9 l 100.7 458.9 l
|
||||
101.2 458.9 l 101.7 458.9 l 102.2 458.9 l 102.6 458.9 l 103.1 458.8 l
|
||||
103.6 458.7 l 104 458.6 l 104.5 458.5 l 104.9 458.4 l 105.4 458.2 l
|
||||
105.8 458.1 l 106.2 457.9 l 106.7 457.7 l 107.1 457.5 l 107.5 457.3 l
|
||||
107.9 457 l 108.3 456.8 l 108.7 456.5 l 109 456.2 l 109.4 456 l 109.7 455.6 l
|
||||
110.1 455.3 l 110.4 455 l 110.7 454.7 l 111 454.3 l 111.3 453.9 l 111.6 453.6 l
|
||||
111.9 453.2 l 112.1 452.8 l 112.4 452.4 l 112.6 452 l 112.8 451.6 l
|
||||
113 451.2 l 113.2 450.7 l 113.4 450.3 l 113.6 449.8 l 113.8 449.4 l
|
||||
113.9 448.9 l 114 448.4 l 114.1 447.9 l 114.2 447.5 l 114.3 447 l 114.3 446.5 l
|
||||
114.4 446 l 114.4 445.5 l 114.4 444.9 l 114.4 444.4 l 114.4 443.9 l
|
||||
114.3 443.4 l 114.3 442.9 l 114.2 442.4 l 114.1 442 l 114 441.5 l 113.9 441 l
|
||||
113.8 440.5 l 113.6 440.1 l 113.4 439.6 l 113.2 439.2 l 113 438.7 l
|
||||
112.8 438.3 l 112.6 437.9 l 112.4 437.5 l 112.1 437.1 l 111.9 436.7 l
|
||||
111.6 436.3 l 111.3 435.9 l 111 435.6 l 110.7 435.2 l 110.4 434.9 l
|
||||
110.1 434.6 l 109.7 434.2 l 109.4 433.9 l 109 433.7 l 108.7 433.4 l
|
||||
108.3 433.1 l 107.9 432.9 l 107.5 432.6 l 107.1 432.4 l 106.7 432.2 l
|
||||
106.2 432 l 105.8 431.8 l 105.4 431.7 l 104.9 431.5 l 104.5 431.4 l
|
||||
104 431.3 l 103.6 431.2 l 103.1 431.1 l 102.6 431 l 102.2 431 l 101.7 431 l
|
||||
101.2 430.9 l h
|
||||
S
|
||||
Q endstream
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
24411
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Type /Page
|
||||
/Parent 3 0 R
|
||||
/MediaBox [ 0 0 794 595 ]
|
||||
/Contents 1 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Type /Font
|
||||
/Subtype /Type1
|
||||
/BaseFont /Times-Roman
|
||||
/Encoding /WinAnsiEncoding
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /F1 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
<<
|
||||
/Font 6 0 R
|
||||
/ProcSet [ /PDF ]
|
||||
>>
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<< /Type /Pages
|
||||
/Resources 7 0 R
|
||||
/MediaBox [ 0 0 595 842 ]
|
||||
/Kids [ 4 0 R
|
||||
]
|
||||
/Count 1
|
||||
>>
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
<< /Type /Catalog
|
||||
/Pages 3 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
<< /Author <FEFF0041006E00640072006500610073002000460061006200720069>
|
||||
/Creator <FEFF0049006D00700072006500730073>
|
||||
/Producer <FEFF004F00700065006E004F00660066006900630065002E006F0072006700200031002E0031002E0033>
|
||||
/CreationDate (D:20060927094503-03'00')
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 10
|
||||
0000000000 65535 f
|
||||
0000000017 00000 n
|
||||
0000024488 00000 n
|
||||
0000024845 00000 n
|
||||
0000024516 00000 n
|
||||
0000024623 00000 n
|
||||
0000024740 00000 n
|
||||
0000024780 00000 n
|
||||
0000024981 00000 n
|
||||
0000025040 00000 n
|
||||
trailer
|
||||
<< /Size 10
|
||||
/Root 8 0 R
|
||||
/Info 9 0 R
|
||||
>>
|
||||
startxref
|
||||
25318
|
||||
%%EOF
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 15 KiB |