diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Doxyfile | 2 | ||||
-rw-r--r-- | src/Skeleton_blocker/doc/SkeletonBlockerMainPage.h | 156 | ||||
-rw-r--r-- | src/Skeleton_blocker/doc/blocker_curve.svg | 2177 | ||||
-rw-r--r-- | src/Skeleton_blocker/doc/blockers_curve.png | bin | 0 -> 38135 bytes | |||
-rw-r--r-- | src/Skeleton_blocker/doc/ds_representation.png | bin | 0 -> 42558 bytes | |||
-rw-r--r-- | src/Skeleton_blocker/doc/ds_scheme.svg | 477 | ||||
-rw-r--r-- | src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h | 158 | ||||
-rw-r--r-- | src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h | 21 | ||||
-rw-r--r-- | src/common/include/gudhi/Off_reader.h | 13 |
9 files changed, 2829 insertions, 175 deletions
diff --git a/src/Doxyfile b/src/Doxyfile index 3493d7c6..bda1bdc8 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -831,7 +831,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = doc/ +IMAGE_PATH = Skeleton_blocker/doc/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/src/Skeleton_blocker/doc/SkeletonBlockerMainPage.h b/src/Skeleton_blocker/doc/SkeletonBlockerMainPage.h deleted file mode 100644 index 5a80bc8d..00000000 --- a/src/Skeleton_blocker/doc/SkeletonBlockerMainPage.h +++ /dev/null @@ -1,156 +0,0 @@ - -/*! \mainpage Skeleton blockers data-structure - -\author David Salinas - -\section Introduction -The Skeleton-blocker data-structure had been introduced in the two papers -\cite skbl_socg2011 \cite skbl_ijcga2012. -It proposes a light encoding for simplicial complexes by storing only an *implicit* representation of its -simplices. -Intuitively, it just stores the 1-skeleton of a simplicial complex with a graph and the set of its "missing faces" that -is very small in practice (see next section for a formal definition). -This data-structure handles every classical operations used for simplicial complexes such as - as simplex enumeration or simplex removal but operations that are particularly efficient - are operations that do not require simplex enumeration such as edge iteration, link computation or simplex contraction. - - -\todo{image wont include} - -\section Definitions - -We recall briefly classical definitions of simplicial complexes \cite Munkres. -An abstract simplex is a finite non-empty set and its dimension is its number of elements minus 1. -Whenever \f$\tau \subset \sigma\f$ and \f$\tau \neq \emptyset \f$, \f$ \tau \f$ is called a face of -\f$ \sigma\f$ and \f$ \sigma\f$ is called a coface of \f$ \tau \f$ . Furthermore, -when \f$ \tau \neq \sigma\f$ we say that \f$ \tau\f$ is a proper-face of \f$ \sigma\f$. -An abstract simplicial complex is a set of simplices that contains all the faces of its simplices. -The 1-skeleton of a simplicial complex (or its graph) consists of its elements of dimension lower than 2. - - -\image latex "images/ds_representation.eps" "My application" width=10cm - - -To encode, a simplicial complex, one can encodes all its simplices. -In case when this number gets too large, -a lighter and implicit version consists of encoding only its graph plus some elements called missing faces or blockers. -A blocker is a simplex of dimension greater than 1 -that does not belong to the complex but whose all proper faces does. - - -Remark that for a clique complex (i.e. a simplicial complex whose simplices are cliques of its graph), the set of blockers -is empty and the data-structure is then particularly sparse. -One famous example of clique-complex is the Rips complex which is intensively used -in topological data-analysis. -In practice, the set of blockers of a simplicial complex -remains also small when simplifying a Rips complex with edge contractions -but also for most of the simplicial complexes used in topological data-analysis such as Delaunay, Cech or Witness complexes. -For instance, the numbers of blockers is depicted for a random 3 dimensional sphere embedded into \f$R^4\f$ -in figure X. - - -\image latex "images/blockers_curve.eps" "My application" width=10cm - - - - -\section API - -\subsection Overview - -Four classes define a simplicial complex namely : - -\li <Code>Skeleton_blocker_complex</Code> : a simplicial complex with basic operations such as vertex/edge/simplex enumeration and construction -\li <Code>Skeleton_blocker_link_complex</Code> : the link of a simplex in a parent complex. It is represented as a sub complex -of the parent complex -\li <Code>Skeleton_blocker_simplifiable_complex</Code> : a simplicial complex with simplification operations such as edge contraction or simplex collapse -\li <Code>Skeleton_blocker_geometric_complex</Code> : a simplicial complex who has access to geometric points in \f$R^d\f$ - -The two last classes are derived classes from the <Code>Skeleton_blocker_complex</Code> class. The class <Code>Skeleton_blocker_link_complex</Code> inheritates from a template passed parameter -that may be either <Code>Skeleton_blocker_complex</Code> or <Code>Skeleton_blocker_geometric_complex</Code> (a link may store points coordinates or not). - -\todo{include links} - -\subsection Visitor - -The class <Code>Skeleton_blocker_complex</Code> has a visitor that is called when usual operations such as adding an edge or remove a vertex are called. -You may want to use this visitor to compute statistics or to update another data-structure (for instance this visitor is heavily used in the -<Code>Contraction</Code> package). - - - -\section Example - - -\subsection s Iterating through vertices, edges, blockers and simplices - -Iteration through vertices, edges, simplices or blockers is straightforward with c++11 for range loops. -Note that simplex iteration with this implicit data-structure just takes -a few more time compared to iteration via an explicit representation -such as the Simplex Tree. The following example computes the Euler Characteristic -of a simplicial complex. - - \code{.cpp} - typedef Skeleton_blocker_complex<Skeleton_blocker_simple_traits> Complex; - typedef Complex::Vertex_handle Vertex_handle; - typedef Complex::Simplex_handle Simplex; - - const int n = 15; - - // build a full complex with 10 vertices and 2^n-1 simplices - Complex complex; - for(int i=0;i<n;i++) - complex.add_vertex(); - for(int i=0;i<n;i++) - for(int j=0;j<i;j++) - //note that add_edge adds the edge and all its cofaces - complex.add_edge(Vertex_handle(i),Vertex_handle(j)); - - // this is just to illustrate iterators, to count number of vertices - // or edges, complex.num_vertices() and complex.num_edges() are - // more appropriated! - unsigned num_vertices = 0; - for(auto v : complex.vertex_range()){ - ++num_vertices; - } - - unsigned num_edges = 0; - for(auto e : complex.edge_range()) - ++num_edges; - - unsigned euler = 0; - unsigned num_simplices = 0; - // we use a reference to a simplex instead of a copy - // value here because a simplex is a set of integers - // and copying it cost time - for(const Simplex & s : complex.simplex_range()){ - ++num_simplices; - if(s.dimension()%2 == 0) - euler += 1; - else - euler -= 1; - } - std::cout << "Saw "<<num_vertices<<" vertices, "<<num_edges<<" edges and "<<num_simplices<<" simplices"<<std::endl; - std::cout << "The Euler Characteristic is "<<euler<<std::endl; - \endcode - - -\verbatim -./SkeletonBlockerIteration -Saw 15 vertices, 105 edges and 32767 simplices -The Euler Characteristic is 1 - 0.537302s wall, 0.530000s user + 0.000000s system = 0.530000s CPU (98.6%) -\endverbatim - - - -\subsection Acknowledgements -The author wishes to thank Dominique Attali and André Lieutier for -their collaboration to write the two initial papers about this data-structure - and also Dominique for leaving him use a prototype. - - -\copyright GNU General Public License v3. -\verbatim Contact: David Salinas, david.salinas@inria.fr \endverbatim - -*/ diff --git a/src/Skeleton_blocker/doc/blocker_curve.svg b/src/Skeleton_blocker/doc/blocker_curve.svg new file mode 100644 index 00000000..0094a379 --- /dev/null +++ b/src/Skeleton_blocker/doc/blocker_curve.svg @@ -0,0 +1,2177 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="744.09448819" + height="1052.3622047" + id="svg5493" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="New document 8"> + <defs + id="defs5495"> + <clipPath + id="clipPath6477" + clipPathUnits="userSpaceOnUse"> + <path + id="path6479" + d="m 2963.67,3669.26 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath6465" + clipPathUnits="userSpaceOnUse"> + <path + id="path6467" + d="m 2762.07,3669.26 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath6427" + clipPathUnits="userSpaceOnUse"> + <path + id="path6429" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6409" + clipPathUnits="userSpaceOnUse"> + <path + id="path6411" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6399" + clipPathUnits="userSpaceOnUse"> + <path + id="path6401" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6381" + clipPathUnits="userSpaceOnUse"> + <path + id="path6383" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6371" + clipPathUnits="userSpaceOnUse"> + <path + id="path6373" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6353" + clipPathUnits="userSpaceOnUse"> + <path + id="path6355" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6343" + clipPathUnits="userSpaceOnUse"> + <path + id="path6345" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6325" + clipPathUnits="userSpaceOnUse"> + <path + id="path6327" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6315" + clipPathUnits="userSpaceOnUse"> + <path + id="path6317" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6297" + clipPathUnits="userSpaceOnUse"> + <path + id="path6299" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6287" + clipPathUnits="userSpaceOnUse"> + <path + id="path6289" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6269" + clipPathUnits="userSpaceOnUse"> + <path + id="path6271" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6259" + clipPathUnits="userSpaceOnUse"> + <path + id="path6261" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6241" + clipPathUnits="userSpaceOnUse"> + <path + id="path6243" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" /> + </clipPath> + <clipPath + id="clipPath6231" + clipPathUnits="userSpaceOnUse"> + <path + id="path6233" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6211" + clipPathUnits="userSpaceOnUse"> + <path + id="path6213" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6189" + clipPathUnits="userSpaceOnUse"> + <path + id="path6191" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6169" + clipPathUnits="userSpaceOnUse"> + <path + id="path6171" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6149" + clipPathUnits="userSpaceOnUse"> + <path + id="path6151" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6129" + clipPathUnits="userSpaceOnUse"> + <path + id="path6131" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6109" + clipPathUnits="userSpaceOnUse"> + <path + id="path6111" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6089" + clipPathUnits="userSpaceOnUse"> + <path + id="path6091" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath6077" + clipPathUnits="userSpaceOnUse"> + <path + id="path6079" + d="m 5151,431 33,0 0,35 -33,0 0,-35 z" /> + </clipPath> + <clipPath + id="clipPath6065" + clipPathUnits="userSpaceOnUse"> + <path + id="path6067" + d="m 4705,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath6053" + clipPathUnits="userSpaceOnUse"> + <path + id="path6055" + d="m 4258,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath6041" + clipPathUnits="userSpaceOnUse"> + <path + id="path6043" + d="m 3812,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath6029" + clipPathUnits="userSpaceOnUse"> + <path + id="path6031" + d="m 3365,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath6017" + clipPathUnits="userSpaceOnUse"> + <path + id="path6019" + d="m 2919,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath6005" + clipPathUnits="userSpaceOnUse"> + <path + id="path6007" + d="m 2473,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5993" + clipPathUnits="userSpaceOnUse"> + <path + id="path5995" + d="m 2026,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5981" + clipPathUnits="userSpaceOnUse"> + <path + id="path5983" + d="m 1580,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5969" + clipPathUnits="userSpaceOnUse"> + <path + id="path5971" + d="m 1133,431 66,0 0,34 -66,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5957" + clipPathUnits="userSpaceOnUse"> + <path + id="path5959" + d="m 720,431 42,0 0,34 -42,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5947" + clipPathUnits="userSpaceOnUse"> + <path + id="path5949" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath5935" + clipPathUnits="userSpaceOnUse"> + <path + id="path5937" + d="m 5151,539 33,0 0,66 -33,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5923" + clipPathUnits="userSpaceOnUse"> + <path + id="path5925" + d="m 4705.12,525.621 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5911" + clipPathUnits="userSpaceOnUse"> + <path + id="path5913" + d="m 4258.71,513.121 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5899" + clipPathUnits="userSpaceOnUse"> + <path + id="path5901" + d="m 3812.3,499.84 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5887" + clipPathUnits="userSpaceOnUse"> + <path + id="path5889" + d="m 3365.9,482.852 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5875" + clipPathUnits="userSpaceOnUse"> + <path + id="path5877" + d="m 2919.49,469.379 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5863" + clipPathUnits="userSpaceOnUse"> + <path + id="path5865" + d="m 2473,454 66,0 0,66 -66,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5851" + clipPathUnits="userSpaceOnUse"> + <path + id="path5853" + d="m 2026.72,439.648 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5839" + clipPathUnits="userSpaceOnUse"> + <path + id="path5841" + d="m 1580,431 66,0 0,60 -66,0 0,-60 z" /> + </clipPath> + <clipPath + id="clipPath5827" + clipPathUnits="userSpaceOnUse"> + <path + id="path5829" + d="m 1133,431 66,0 0,47 -66,0 0,-47 z" /> + </clipPath> + <clipPath + id="clipPath5815" + clipPathUnits="userSpaceOnUse"> + <path + id="path5817" + d="m 720,431 42,0 0,34 -42,0 0,-34 z" /> + </clipPath> + <clipPath + id="clipPath5805" + clipPathUnits="userSpaceOnUse"> + <path + id="path5807" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath5793" + clipPathUnits="userSpaceOnUse"> + <path + id="path5795" + d="m 5151,3499 33,0 0,66 -33,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5781" + clipPathUnits="userSpaceOnUse"> + <path + id="path5783" + d="m 4705.12,3186.68 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5769" + clipPathUnits="userSpaceOnUse"> + <path + id="path5771" + d="m 4258.71,2878.83 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5757" + clipPathUnits="userSpaceOnUse"> + <path + id="path5759" + d="m 3812.3,2568.4 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5745" + clipPathUnits="userSpaceOnUse"> + <path + id="path5747" + d="m 3365.9,2251.56 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5733" + clipPathUnits="userSpaceOnUse"> + <path + id="path5735" + d="m 2919,1940 66,0 0,66 -66,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5721" + clipPathUnits="userSpaceOnUse"> + <path + id="path5723" + d="m 2473.09,1628.36 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5709" + clipPathUnits="userSpaceOnUse"> + <path + id="path5711" + d="m 2026.72,1312.93 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5697" + clipPathUnits="userSpaceOnUse"> + <path + id="path5699" + d="m 1580,1005 66,0 0,66 -66,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5685" + clipPathUnits="userSpaceOnUse"> + <path + id="path5687" + d="m 1133.91,696.801 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5673" + clipPathUnits="userSpaceOnUse"> + <path + id="path5675" + d="m 720,431 42,0 0,37 -42,0 0,-37 z" /> + </clipPath> + <clipPath + id="clipPath5663" + clipPathUnits="userSpaceOnUse"> + <path + id="path5665" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + <clipPath + id="clipPath5651" + clipPathUnits="userSpaceOnUse"> + <path + id="path5653" + d="m 5151,1336 33,0 0,66 -33,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5639" + clipPathUnits="userSpaceOnUse"> + <path + id="path5641" + d="m 4705.12,1242.11 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5627" + clipPathUnits="userSpaceOnUse"> + <path + id="path5629" + d="m 4258.71,1148.95 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5615" + clipPathUnits="userSpaceOnUse"> + <path + id="path5617" + d="m 3812.3,1055.12 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5603" + clipPathUnits="userSpaceOnUse"> + <path + id="path5605" + d="m 3365.9,959.73 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5591" + clipPathUnits="userSpaceOnUse"> + <path + id="path5593" + d="m 2919.49,865.699 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5579" + clipPathUnits="userSpaceOnUse"> + <path + id="path5581" + d="m 2473.09,771.52 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5567" + clipPathUnits="userSpaceOnUse"> + <path + id="path5569" + d="m 2026.72,676.449 65,0 0,65 -65,0 0,-65 z" /> + </clipPath> + <clipPath + id="clipPath5555" + clipPathUnits="userSpaceOnUse"> + <path + id="path5557" + d="m 1580,583 66,0 0,66 -66,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5543" + clipPathUnits="userSpaceOnUse"> + <path + id="path5545" + d="m 1133,490 66,0 0,66 -66,0 0,-66 z" /> + </clipPath> + <clipPath + id="clipPath5531" + clipPathUnits="userSpaceOnUse"> + <path + id="path5533" + d="m 720,431 42,0 0,35 -42,0 0,-35 z" /> + </clipPath> + <clipPath + id="clipPath5521" + clipPathUnits="userSpaceOnUse"> + <path + id="path5523" + d="m 720,431 4464,0 0,3458 -4464,0 0,-3458 z" /> + </clipPath> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.979899" + inkscape:cx="399.80267" + inkscape:cy="523.89309" + inkscape:document-units="px" + inkscape:current-layer="g5511" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1523" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" /> + <metadata + id="metadata5498"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + transform="matrix(1.25,0,0,-1.25,15,802.36218)" + inkscape:label="ink_ext_XXXXXX" + id="g5509"> + <g + transform="scale(0.1,0.1)" + id="g5511"> + <path + id="path5513" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,0 5760,0 0,4320 L 0,4320 0,0 z" + inkscape:connector-curvature="0" /> + <path + id="path5515" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 720,431.988 4463.98,0 0,3456.02 -4463.98,0 0,-3456.02 z" + inkscape:connector-curvature="0" /> + <g + id="g5517"> + <g + clip-path="url(#clipPath5521)" + id="g5519"> + <path + id="path5525" + style="fill:none;stroke:#0000ff;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,432.969 437.461,89.57 446.4,93.32 446.41,93.09 446.37,95.071 446.4,94.179 446.41,94.031 446.4,95.39 446.41,93.83 446.41,93.16 446.36,94.34" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5527"> + <g + clip-path="url(#clipPath5531)" + id="g5529"> + <path + id="path5535" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 728.949,402.969 c 7.93,0 15.582,3.16 21.211,8.793 5.621,5.617 8.789,13.238 8.789,21.207 0,7.972 -3.168,15.582 -8.789,21.211 -5.629,5.621 -13.281,8.789 -21.211,8.789 -7.969,0 -15.59,-3.168 -21.25,-8.789 -5.629,-5.629 -8.75,-13.239 -8.75,-21.211 0,-7.969 3.121,-15.59 8.75,-21.207 5.66,-5.633 13.281,-8.793 21.25,-8.793" + inkscape:connector-curvature="0" /> + <path + id="path5537" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,402.969 c 7.93,0 15.582,3.16 21.211,8.793 5.621,5.617 8.789,13.238 8.789,21.207 0,7.972 -3.168,15.582 -8.789,21.211 -5.629,5.621 -13.281,8.789 -21.211,8.789 -7.969,0 -15.59,-3.168 -21.25,-8.789 -5.629,-5.629 -8.75,-13.239 -8.75,-21.211 0,-7.969 3.121,-15.59 8.75,-21.207 5.66,-5.633 13.281,-8.793 21.25,-8.793 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5539"> + <g + clip-path="url(#clipPath5543)" + id="g5541"> + <path + id="path5547" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1166.41,492.539 c 7.97,0 15.58,3.16 21.21,8.789 5.62,5.621 8.79,13.242 8.79,21.211 0,7.93 -3.17,15.582 -8.79,21.211 -5.63,5.629 -13.24,8.789 -21.21,8.789 -7.97,0 -15.59,-3.16 -21.21,-8.789 -5.63,-5.629 -8.79,-13.281 -8.79,-21.211 0,-7.969 3.16,-15.59 8.79,-21.211 5.62,-5.629 13.24,-8.789 21.21,-8.789" + inkscape:connector-curvature="0" /> + <path + id="path5549" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1166.41,492.539 c 7.97,0 15.58,3.16 21.21,8.789 5.62,5.621 8.79,13.242 8.79,21.211 0,7.93 -3.17,15.582 -8.79,21.211 -5.63,5.629 -13.24,8.789 -21.21,8.789 -7.97,0 -15.59,-3.16 -21.21,-8.789 -5.63,-5.629 -8.79,-13.281 -8.79,-21.211 0,-7.969 3.16,-15.59 8.79,-21.211 5.62,-5.629 13.24,-8.789 21.21,-8.789 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5551"> + <g + clip-path="url(#clipPath5555)" + id="g5553"> + <path + id="path5559" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1612.81,585.859 c 7.93,0 15.59,3.161 21.21,8.789 5.63,5.622 8.79,13.243 8.79,21.211 0,7.969 -3.16,15.59 -8.79,21.211 -5.62,5.629 -13.28,8.789 -21.21,8.789 -7.97,0 -15.58,-3.16 -21.21,-8.789 -5.62,-5.621 -8.79,-13.242 -8.79,-21.211 0,-7.968 3.17,-15.589 8.79,-21.211 5.63,-5.628 13.24,-8.789 21.21,-8.789" + inkscape:connector-curvature="0" /> + <path + id="path5561" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1612.81,585.859 c 7.93,0 15.59,3.161 21.21,8.789 5.63,5.622 8.79,13.243 8.79,21.211 0,7.969 -3.16,15.59 -8.79,21.211 -5.62,5.629 -13.28,8.789 -21.21,8.789 -7.97,0 -15.58,-3.16 -21.21,-8.789 -5.62,-5.621 -8.79,-13.242 -8.79,-21.211 0,-7.968 3.17,-15.589 8.79,-21.211 5.63,-5.628 13.24,-8.789 21.21,-8.789 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5563"> + <g + clip-path="url(#clipPath5567)" + id="g5565"> + <path + id="path5571" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2059.22,678.949 c 7.93,0 15.58,3.16 21.21,8.781 5.62,5.629 8.79,13.29 8.79,21.219 0,7.961 -3.17,15.582 -8.79,21.211 -5.63,5.621 -13.28,8.789 -21.21,8.789 -7.97,0 -15.63,-3.168 -21.25,-8.789 -5.63,-5.629 -8.75,-13.25 -8.75,-21.211 0,-7.929 3.12,-15.59 8.75,-21.219 5.62,-5.621 13.28,-8.781 21.25,-8.781" + inkscape:connector-curvature="0" /> + <path + id="path5573" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2059.22,678.949 c 7.93,0 15.58,3.16 21.21,8.781 5.62,5.629 8.79,13.29 8.79,21.219 0,7.961 -3.17,15.582 -8.79,21.211 -5.63,5.621 -13.28,8.789 -21.21,8.789 -7.97,0 -15.63,-3.168 -21.25,-8.789 -5.63,-5.629 -8.75,-13.25 -8.75,-21.211 0,-7.929 3.12,-15.59 8.75,-21.219 5.62,-5.621 13.28,-8.781 21.25,-8.781 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5575"> + <g + clip-path="url(#clipPath5579)" + id="g5577"> + <path + id="path5583" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2505.59,774.02 c 7.96,0 15.58,3.171 21.21,8.789 5.62,5.632 8.79,13.242 8.79,21.211 0,7.968 -3.17,15.589 -8.79,21.21 -5.63,5.629 -13.25,8.79 -21.21,8.79 -7.93,0 -15.59,-3.161 -21.21,-8.79 -5.63,-5.621 -8.79,-13.242 -8.79,-21.21 0,-7.969 3.16,-15.579 8.79,-21.211 5.62,-5.618 13.28,-8.789 21.21,-8.789" + inkscape:connector-curvature="0" /> + <path + id="path5585" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2505.59,774.02 c 7.96,0 15.58,3.171 21.21,8.789 5.62,5.632 8.79,13.242 8.79,21.211 0,7.968 -3.17,15.589 -8.79,21.21 -5.63,5.629 -13.25,8.79 -21.21,8.79 -7.93,0 -15.59,-3.161 -21.21,-8.79 -5.63,-5.621 -8.79,-13.242 -8.79,-21.21 0,-7.969 3.16,-15.579 8.79,-21.211 5.62,-5.618 13.28,-8.789 21.21,-8.789 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5587"> + <g + clip-path="url(#clipPath5591)" + id="g5589"> + <path + id="path5595" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2951.99,868.199 c 7.97,0 15.59,3.172 21.21,8.789 5.63,5.633 8.79,13.242 8.79,21.211 0,7.93 -3.16,15.59 -8.79,21.211 -5.62,5.629 -13.24,8.789 -21.21,8.789 -7.93,0 -15.58,-3.16 -21.21,-8.789 -5.62,-5.621 -8.79,-13.281 -8.79,-21.211 0,-7.969 3.17,-15.578 8.79,-21.211 5.63,-5.617 13.28,-8.789 21.21,-8.789" + inkscape:connector-curvature="0" /> + <path + id="path5597" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2951.99,868.199 c 7.97,0 15.59,3.172 21.21,8.789 5.63,5.633 8.79,13.242 8.79,21.211 0,7.93 -3.16,15.59 -8.79,21.211 -5.62,5.629 -13.24,8.789 -21.21,8.789 -7.93,0 -15.58,-3.16 -21.21,-8.789 -5.62,-5.621 -8.79,-13.281 -8.79,-21.211 0,-7.969 3.17,-15.578 8.79,-21.211 5.63,-5.617 13.28,-8.789 21.21,-8.789 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5599"> + <g + clip-path="url(#clipPath5603)" + id="g5601"> + <path + id="path5607" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3398.4,962.23 c 7.97,0 15.58,3.161 21.21,8.79 5.62,5.621 8.79,13.242 8.79,21.21 0,7.93 -3.17,15.58 -8.79,21.21 -5.63,5.62 -13.24,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.63,-5.63 -8.79,-13.28 -8.79,-21.21 0,-7.968 3.16,-15.589 8.79,-21.21 5.62,-5.629 13.24,-8.79 21.21,-8.79" + inkscape:connector-curvature="0" /> + <path + id="path5609" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3398.4,962.23 c 7.97,0 15.58,3.161 21.21,8.79 5.62,5.621 8.79,13.242 8.79,21.21 0,7.93 -3.17,15.58 -8.79,21.21 -5.63,5.62 -13.24,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.63,-5.63 -8.79,-13.28 -8.79,-21.21 0,-7.968 3.16,-15.589 8.79,-21.21 5.62,-5.629 13.24,-8.79 21.21,-8.79 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5611"> + <g + clip-path="url(#clipPath5615)" + id="g5613"> + <path + id="path5619" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3844.8,1057.62 c 7.97,0 15.59,3.16 21.22,8.79 5.62,5.62 8.78,13.28 8.78,21.21 0,7.97 -3.16,15.58 -8.78,21.21 -5.63,5.62 -13.25,8.79 -21.22,8.79 -7.96,0 -15.58,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.17,-15.59 8.79,-21.21 5.63,-5.63 13.25,-8.79 21.21,-8.79" + inkscape:connector-curvature="0" /> + <path + id="path5621" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3844.8,1057.62 c 7.97,0 15.59,3.16 21.22,8.79 5.62,5.62 8.78,13.28 8.78,21.21 0,7.97 -3.16,15.58 -8.78,21.21 -5.63,5.62 -13.25,8.79 -21.22,8.79 -7.96,0 -15.58,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.17,-15.59 8.79,-21.21 5.63,-5.63 13.25,-8.79 21.21,-8.79 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5623"> + <g + clip-path="url(#clipPath5627)" + id="g5625"> + <path + id="path5631" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4291.21,1151.45 c 7.93,0 15.59,3.16 21.21,8.78 5.63,5.63 8.79,13.25 8.79,21.22 0,7.93 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.28 -8.79,-21.21 0,-7.97 3.17,-15.59 8.79,-21.22 5.62,-5.62 13.24,-8.78 21.21,-8.78" + inkscape:connector-curvature="0" /> + <path + id="path5633" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4291.21,1151.45 c 7.93,0 15.59,3.16 21.21,8.78 5.63,5.63 8.79,13.25 8.79,21.22 0,7.93 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.28 -8.79,-21.21 0,-7.97 3.17,-15.59 8.79,-21.22 5.62,-5.62 13.24,-8.78 21.21,-8.78 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5635"> + <g + clip-path="url(#clipPath5639)" + id="g5637"> + <path + id="path5643" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4737.62,1244.61 c 7.93,0 15.58,3.16 21.21,8.79 5.62,5.62 8.79,13.24 8.79,21.21 0,7.93 -3.17,15.59 -8.79,21.21 -5.63,5.63 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.16 -21.21,-8.79 -5.67,-5.62 -8.79,-13.28 -8.79,-21.21 0,-7.97 3.12,-15.59 8.79,-21.21 5.62,-5.63 13.24,-8.79 21.21,-8.79" + inkscape:connector-curvature="0" /> + <path + id="path5645" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4737.62,1244.61 c 7.93,0 15.58,3.16 21.21,8.79 5.62,5.62 8.79,13.24 8.79,21.21 0,7.93 -3.17,15.59 -8.79,21.21 -5.63,5.63 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.16 -21.21,-8.79 -5.67,-5.62 -8.79,-13.28 -8.79,-21.21 0,-7.97 3.12,-15.59 8.79,-21.21 5.62,-5.63 13.24,-8.79 21.21,-8.79 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5647"> + <g + clip-path="url(#clipPath5651)" + id="g5649"> + <path + id="path5655" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 5183.98,1338.95 c 7.97,0 15.59,3.16 21.22,8.78 5.62,5.63 8.78,13.29 8.78,21.22 0,7.96 -3.16,15.62 -8.78,21.25 -5.63,5.62 -13.25,8.75 -21.22,8.75 -7.93,0 -15.58,-3.13 -21.21,-8.75 -5.62,-5.63 -8.79,-13.29 -8.79,-21.25 0,-7.93 3.17,-15.59 8.79,-21.22 5.63,-5.62 13.28,-8.78 21.21,-8.78" + inkscape:connector-curvature="0" /> + <path + id="path5657" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,1338.95 c 7.97,0 15.59,3.16 21.22,8.78 5.62,5.63 8.78,13.29 8.78,21.22 0,7.96 -3.16,15.62 -8.78,21.25 -5.63,5.62 -13.25,8.75 -21.22,8.75 -7.93,0 -15.58,-3.13 -21.21,-8.75 -5.62,-5.63 -8.79,-13.29 -8.79,-21.25 0,-7.93 3.17,-15.59 8.79,-21.22 5.63,-5.62 13.28,-8.78 21.21,-8.78 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5659"> + <g + clip-path="url(#clipPath5663)" + id="g5661"> + <path + id="path5667" + style="fill:none;stroke:#008000;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,434.609 437.461,294.692 446.4,308.549 446.41,307.58 446.37,315.43 446.4,311.91 446.41,311.29 446.4,316.84 446.41,310.43 446.41,307.85 446.36,312.7" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5669"> + <g + clip-path="url(#clipPath5673)" + id="g5671"> + <path + id="path5677" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 728.949,404.609 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5679" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,404.609 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5681"> + <g + clip-path="url(#clipPath5685)" + id="g5683"> + <path + id="path5689" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1166.41,699.301 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5691" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1166.41,699.301 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5693"> + <g + clip-path="url(#clipPath5697)" + id="g5695"> + <path + id="path5701" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1612.81,1007.85 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5703" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1612.81,1007.85 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5705"> + <g + clip-path="url(#clipPath5709)" + id="g5707"> + <path + id="path5713" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2059.22,1315.43 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5715" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2059.22,1315.43 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5717"> + <g + clip-path="url(#clipPath5721)" + id="g5719"> + <path + id="path5725" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2505.59,1630.86 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5727" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2505.59,1630.86 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5729"> + <g + clip-path="url(#clipPath5733)" + id="g5731"> + <path + id="path5737" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2951.99,1942.77 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5739" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2951.99,1942.77 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5741"> + <g + clip-path="url(#clipPath5745)" + id="g5743"> + <path + id="path5749" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3398.4,2254.06 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5751" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3398.4,2254.06 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5753"> + <g + clip-path="url(#clipPath5757)" + id="g5755"> + <path + id="path5761" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3844.8,2570.9 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5763" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3844.8,2570.9 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5765"> + <g + clip-path="url(#clipPath5769)" + id="g5767"> + <path + id="path5773" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4291.21,2881.33 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5775" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4291.21,2881.33 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5777"> + <g + clip-path="url(#clipPath5781)" + id="g5779"> + <path + id="path5785" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4737.62,3189.18 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5787" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4737.62,3189.18 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5789"> + <g + clip-path="url(#clipPath5793)" + id="g5791"> + <path + id="path5797" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 5183.98,3501.88 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path5799" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,3501.88 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5801"> + <g + clip-path="url(#clipPath5805)" + id="g5803"> + <path + id="path5809" + style="fill:none;stroke:#ff0000;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,432.148 437.461,13.122 446.4,13.128 446.41,13.75 446.37,14.692 446.4,15.039 446.41,13.473 446.4,16.988 446.41,13.281 446.41,12.5 446.36,13.399" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5811"> + <g + clip-path="url(#clipPath5815)" + id="g5813"> + <path + id="path5819" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 698.949,402.148 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5821" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 698.949,402.148 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5823"> + <g + clip-path="url(#clipPath5827)" + id="g5825"> + <path + id="path5831" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1136.41,415.27 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5833" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1136.41,415.27 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5835"> + <g + clip-path="url(#clipPath5839)" + id="g5837"> + <path + id="path5843" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1582.81,428.398 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5845" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1582.81,428.398 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5847"> + <g + clip-path="url(#clipPath5851)" + id="g5849"> + <path + id="path5855" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2029.22,442.148 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5857" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2029.22,442.148 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5859"> + <g + clip-path="url(#clipPath5863)" + id="g5861"> + <path + id="path5867" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2475.59,456.84 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5869" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2475.59,456.84 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5871"> + <g + clip-path="url(#clipPath5875)" + id="g5873"> + <path + id="path5879" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2921.99,471.879 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5881" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2921.99,471.879 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5883"> + <g + clip-path="url(#clipPath5887)" + id="g5885"> + <path + id="path5891" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3368.4,485.352 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5893" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3368.4,485.352 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5895"> + <g + clip-path="url(#clipPath5899)" + id="g5897"> + <path + id="path5903" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3814.8,502.34 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5905" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3814.8,502.34 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5907"> + <g + clip-path="url(#clipPath5911)" + id="g5909"> + <path + id="path5915" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4261.21,515.621 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5917" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4261.21,515.621 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5919"> + <g + clip-path="url(#clipPath5923)" + id="g5921"> + <path + id="path5927" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4707.62,528.121 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5929" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4707.62,528.121 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5931"> + <g + clip-path="url(#clipPath5935)" + id="g5933"> + <path + id="path5939" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 5153.98,541.52 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path5941" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5153.98,541.52 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5943"> + <g + clip-path="url(#clipPath5947)" + id="g5945"> + <path + id="path5951" + style="fill:none;stroke:#00bfbf;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,432.07 437.461,0.078 446.4,-0.117 446.41,0.078 446.37,0.161 446.4,0 446.41,-0.079 446.4,-0.043 446.41,-0.078 446.41,0.27 446.36,0.199" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5953"> + <g + clip-path="url(#clipPath5957)" + id="g5955"> + <path + id="path5961" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 728.949,462.07 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path5963" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 728.949,462.07 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5965"> + <g + clip-path="url(#clipPath5969)" + id="g5967"> + <path + id="path5973" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1166.41,462.148 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path5975" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1166.41,462.148 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5977"> + <g + clip-path="url(#clipPath5981)" + id="g5979"> + <path + id="path5985" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 1612.81,462.031 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path5987" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1612.81,462.031 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g5989"> + <g + clip-path="url(#clipPath5993)" + id="g5991"> + <path + id="path5997" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2059.22,462.109 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path5999" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2059.22,462.109 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6001"> + <g + clip-path="url(#clipPath6005)" + id="g6003"> + <path + id="path6009" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2505.59,462.27 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6011" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2505.59,462.27 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6013"> + <g + clip-path="url(#clipPath6017)" + id="g6015"> + <path + id="path6021" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2951.99,462.27 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6023" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2951.99,462.27 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6025"> + <g + clip-path="url(#clipPath6029)" + id="g6027"> + <path + id="path6033" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3398.4,462.191 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6035" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3398.4,462.191 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6037"> + <g + clip-path="url(#clipPath6041)" + id="g6039"> + <path + id="path6045" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 3844.8,462.148 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6047" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3844.8,462.148 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6049"> + <g + clip-path="url(#clipPath6053)" + id="g6051"> + <path + id="path6057" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4291.21,462.07 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6059" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4291.21,462.07 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6061"> + <g + clip-path="url(#clipPath6065)" + id="g6063"> + <path + id="path6069" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4737.62,462.301 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6071" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4737.62,462.301 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6073"> + <g + clip-path="url(#clipPath6077)" + id="g6075"> + <path + id="path6081" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 5183.98,462.539 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6083" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,462.539 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6085"> + <g + clip-path="url(#clipPath6089)" + id="g6087"> + <path + id="path6093" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6095" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6097" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6099"> + <text + id="text6101" + transform="matrix(1,0,0,-1,68.9766,30.2938)"> + <tspan + id="tspan6103" + y="0" + x="0" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">0</tspan> + </text> + </g> + <g + id="g6105"> + <g + clip-path="url(#clipPath6109)" + id="g6107"> + <path + id="path6113" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 1612.81,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6115" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1612.81,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6117" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 1612.81,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6119"> + <text + id="text6121" + transform="matrix(1,0,0,-1,147.054,30.2938)"> + <tspan + id="tspan6123" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">1000</tspan> + </text> + </g> + <g + id="g6125"> + <g + clip-path="url(#clipPath6129)" + id="g6127"> + <path + id="path6133" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 2505.59,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6135" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2505.59,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6137" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2505.59,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6139"> + <text + id="text6141" + transform="matrix(1,0,0,-1,236.115,30.2938)"> + <tspan + id="tspan6143" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">2000</tspan> + </text> + </g> + <g + id="g6145"> + <g + clip-path="url(#clipPath6149)" + id="g6147"> + <path + id="path6153" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 3398.4,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6155" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3398.4,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6157" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 3398.4,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6159"> + <text + id="text6161" + transform="matrix(1,0,0,-1,325.418,30.2938)"> + <tspan + id="tspan6163" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">3000</tspan> + </text> + </g> + <g + id="g6165"> + <g + clip-path="url(#clipPath6169)" + id="g6167"> + <path + id="path6173" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 4291.21,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6175" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4291.21,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6177" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 4291.21,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6179"> + <text + id="text6181" + transform="matrix(1,0,0,-1,414.534,30.2938)"> + <tspan + id="tspan6183" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">4000</tspan> + </text> + </g> + <g + id="g6185"> + <g + clip-path="url(#clipPath6189)" + id="g6187"> + <path + id="path6193" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 5183.98,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6195" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,431.988 0,40" + inkscape:connector-curvature="0" /> + <path + id="path6197" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,3888.01 0,-40" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6199"> + <text + id="text6201" + transform="matrix(1,0,0,-1,503.978,30.2938)"> + <tspan + id="tspan6203" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">5000</tspan> + <tspan + id="tspan6205" + sodipodi:role="line" + y="14.2969" + x="-266.052 -257.07599 -249.468 -237.78 -230.16 -222.78 -217.84801 -214.032 -206.688 -202.464 -198.64799 -191.54401 -184.164 -179.23199 -174.528 -171.192 -164.592 -157.21201" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">Number of vertices</tspan> + </text> + </g> + <g + id="g6207"> + <g + clip-path="url(#clipPath6211)" + id="g6209"> + <path + id="path6215" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,431.988 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6217" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,431.988 40,0" + inkscape:connector-curvature="0" /> + <path + id="path6219" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,431.988 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6221"> + <text + id="text6223" + transform="matrix(1,0,0,-1,61.9531,38.8328)"> + <tspan + id="tspan6225" + y="0" + x="0" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">0</tspan> + </text> + </g> + <g + id="g6227"> + <g + clip-path="url(#clipPath6231)" + id="g6229"> + <path + id="path6235" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,863.98 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6237"> + <g + clip-path="url(#clipPath6241)" + id="g6239"> + <path + id="path6245" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,863.98 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6247" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,863.98 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6249"> + <text + id="text6251" + transform="matrix(1,0,0,-1,31.4688,82.0328)"> + <tspan + id="tspan6253" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">20000</tspan> + </text> + </g> + <g + id="g6255"> + <g + clip-path="url(#clipPath6259)" + id="g6257"> + <path + id="path6263" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,1296.02 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6265"> + <g + clip-path="url(#clipPath6269)" + id="g6267"> + <path + id="path6273" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,1296.02 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6275" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,1296.02 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6277"> + <text + id="text6279" + transform="matrix(1,0,0,-1,31.1875,125.233)"> + <tspan + id="tspan6281" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">40000</tspan> + </text> + </g> + <g + id="g6283"> + <g + clip-path="url(#clipPath6287)" + id="g6285"> + <path + id="path6291" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,1728.01 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6293"> + <g + clip-path="url(#clipPath6297)" + id="g6295"> + <path + id="path6301" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,1728.01 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6303" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,1728.01 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6305"> + <text + id="text6307" + transform="matrix(1,0,0,-1,31.4375,168.433)"> + <tspan + id="tspan6309" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">60000</tspan> + </text> + </g> + <g + id="g6311"> + <g + clip-path="url(#clipPath6315)" + id="g6313"> + <path + id="path6319" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,2160 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6321"> + <g + clip-path="url(#clipPath6325)" + id="g6323"> + <path + id="path6329" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,2160 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6331" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,2160 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6333"> + <text + id="text6335" + transform="matrix(1,0,0,-1,31.4063,211.633)"> + <tspan + id="tspan6337" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">80000</tspan> + </text> + </g> + <g + id="g6339"> + <g + clip-path="url(#clipPath6343)" + id="g6341"> + <path + id="path6347" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,2591.99 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6349"> + <g + clip-path="url(#clipPath6353)" + id="g6351"> + <path + id="path6357" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,2591.99 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6359" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,2591.99 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6361"> + <text + id="text6363" + transform="matrix(1,0,0,-1,24.2656,254.833)"> + <tspan + id="tspan6365" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528 38.16" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">100000</tspan> + </text> + </g> + <g + id="g6367"> + <g + clip-path="url(#clipPath6371)" + id="g6369"> + <path + id="path6375" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,3023.98 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6377"> + <g + clip-path="url(#clipPath6381)" + id="g6379"> + <path + id="path6385" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,3023.98 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6387" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,3023.98 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6389"> + <text + id="text6391" + transform="matrix(1,0,0,-1,24.2656,298.033)"> + <tspan + id="tspan6393" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528 38.16" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">120000</tspan> + </text> + </g> + <g + id="g6395"> + <g + clip-path="url(#clipPath6399)" + id="g6397"> + <path + id="path6403" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,3456.02 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6405"> + <g + clip-path="url(#clipPath6409)" + id="g6407"> + <path + id="path6413" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,3456.02 40,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6415" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,3456.02 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6417"> + <text + id="text6419" + transform="matrix(1,0,0,-1,24.2656,341.233)"> + <tspan + id="tspan6421" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528 38.16" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">140000</tspan> + </text> + </g> + <g + id="g6423"> + <g + clip-path="url(#clipPath6427)" + id="g6425"> + <path + id="path6431" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:10, 30;stroke-dashoffset:0" + d="m 720,3888.01 4463.98,0" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6433" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,3888.01 40,0" + inkscape:connector-curvature="0" /> + <path + id="path6435" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,3888.01 -40,0" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6437"> + <text + id="text6439" + transform="matrix(1,0,0,-1,24.2656,384.433)"> + <tspan + id="tspan6441" + sodipodi:role="line" + y="0" + x="0 7.632 15.264 22.896 30.528 38.16" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">160000</tspan> + </text> + <text + id="text6443" + transform="matrix(0,1,1,0,19.0938,204.398)"> + <tspan + id="tspan6445" + sodipodi:role="line" + y="0" + x="0 7.6199999 10.956 17.256001" + style="font-size:12px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">Size</tspan> + </text> + </g> + <path + id="path6447" + style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,3888.01 4463.98,0" + inkscape:connector-curvature="0" /> + <path + id="path6449" + style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 5183.98,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + <path + id="path6451" + style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,431.988 4463.98,0" + inkscape:connector-curvature="0" /> + <path + id="path6453" + style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 720,431.988 0,3456.022" + inkscape:connector-curvature="0" /> + <path + id="path6455" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2693.75,2938.4 2418.24,0 0,877.621 -2418.24,0 0,-877.621 z" + inkscape:connector-curvature="0" /> + <path + id="path6457" + style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2693.75,2938.4 2418.24,0 0,877.621 -2418.24,0 0,-877.621 z" + inkscape:connector-curvature="0" /> + <path + id="path6459" + style="fill:none;stroke:#0000ff;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3701.76 201.6,0" + inkscape:connector-curvature="0" /> + <g + id="g6461"> + <g + clip-path="url(#clipPath6465)" + id="g6463"> + <path + id="path6469" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2794.57,3671.76 c 7.93,0 15.59,3.16 21.21,8.79 5.63,5.62 8.79,13.28 8.79,21.21 0,7.97 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.63,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.16,-15.59 8.79,-21.21 5.62,-5.63 13.24,-8.79 21.21,-8.79" + inkscape:connector-curvature="0" /> + <path + id="path6471" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3671.76 c 7.93,0 15.59,3.16 21.21,8.79 5.63,5.62 8.79,13.28 8.79,21.21 0,7.97 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.59,-3.17 -21.21,-8.79 -5.63,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.16,-15.59 8.79,-21.21 5.62,-5.63 13.24,-8.79 21.21,-8.79 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <g + id="g6473"> + <g + clip-path="url(#clipPath6477)" + id="g6475"> + <path + id="path6481" + style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2996.17,3671.76 c 7.93,0 15.59,3.16 21.21,8.79 5.63,5.62 8.79,13.28 8.79,21.21 0,7.97 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.58,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.17,-15.59 8.79,-21.21 5.63,-5.63 13.24,-8.79 21.21,-8.79" + inkscape:connector-curvature="0" /> + <path + id="path6483" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2996.17,3671.76 c 7.93,0 15.59,3.16 21.21,8.79 5.63,5.62 8.79,13.28 8.79,21.21 0,7.97 -3.16,15.58 -8.79,21.21 -5.62,5.62 -13.28,8.79 -21.21,8.79 -7.97,0 -15.58,-3.17 -21.21,-8.79 -5.62,-5.63 -8.79,-13.24 -8.79,-21.21 0,-7.93 3.17,-15.59 8.79,-21.21 5.63,-5.63 13.24,-8.79 21.21,-8.79 z" + inkscape:connector-curvature="0" /> + </g> + </g> + <path + id="path6491" + style="fill:none;stroke:#008000;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3490.39 201.6,0" + inkscape:connector-curvature="0" /> + <path + id="path6493" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2794.57,3460.39 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path6495" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3460.39 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + <path + id="path6497" + style="fill:#008000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2996.17,3460.39 30,60 -60,0" + inkscape:connector-curvature="0" /> + <path + id="path6499" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2996.17,3460.39 30,60 -60,0 30,-60 z" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6501"> + <text + id="text6503" + transform="matrix(1,0,0,-1,315.455,343.999)"> + <tspan + id="tspan6505" + sodipodi:role="line" + y="0" + x="0 9.1295996 18.259199 36.864101 44.366501 48.369701 62.395302 71.539299 75.542503 79.5457 87.465698 96.321701" + style="font-size:14.39999962px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">numsimplices</tspan> + </text> + </g> + <path + id="path6507" + style="fill:none;stroke:#ff0000;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3282.93 201.6,0" + inkscape:connector-curvature="0" /> + <path + id="path6509" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2764.57,3252.93 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path6511" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2764.57,3252.93 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path6513" + style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2966.17,3252.93 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <path + id="path6515" + style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2966.17,3252.93 60,60 m -60,0 60,-60" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6517"> + <text + id="text6519" + transform="matrix(1,0,0,-1,315.455,323.252)"> + <tspan + id="tspan6521" + sodipodi:role="line" + y="0" + x="0 9.1295996 18.259199 32.284801 36.863998 46.007999 50.0112 58.824001 66.744003 75.081596 83.937599 89.856003" + style="font-size:14.39999962px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">num blockers</tspan> + </text> + </g> + <path + id="path6523" + style="fill:none;stroke:#00bfbf;stroke-width:20;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3075.47 201.6,0" + inkscape:connector-curvature="0" /> + <path + id="path6525" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2794.57,3105.47 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6527" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2794.57,3105.47 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + <path + id="path6529" + style="fill:#00bfbf;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 2996.17,3105.47 -30,-60 60,0" + inkscape:connector-curvature="0" /> + <path + id="path6531" + style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none" + d="m 2996.17,3105.47 -30,-60 60,0 -30,60 z" + inkscape:connector-curvature="0" /> + <g + transform="scale(10,10)" + id="g6533"> + <text + id="text6535" + transform="matrix(1,0,0,-1,315.455,302.505)"> + <tspan + id="tspan6537" + sodipodi:role="line" + y="0" + x="0 9.1295996 18.259199 32.284801 36.863998 45.993599 54.8064 63.936001 68.515198 77.659203 86.472 95.615997 104.4432 113.5872 117.5904 126.4464 131.0256 140.21297 144.21616 153.02896 160.94896 169.28656 178.14256 184.06096" + style="font-size:14.39999962px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans">num non popable blockers</tspan> + </text> + </g> + <text + style="font-size:120px" + y="-3655.6985" + x="3153.7925" + id="text6487-0" + transform="scale(1,-1)"> + <tspan + id="tspan6489-8" + sodipodi:role="line" + style="font-size:144px;font-variant:normal;font-weight:normal;writing-mode:lr-tb;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVuSans" + x="3153.7925" + y="-3655.6985">size of the graph</tspan> + </text> + </g> + </g> + </g> +</svg> diff --git a/src/Skeleton_blocker/doc/blockers_curve.png b/src/Skeleton_blocker/doc/blockers_curve.png Binary files differnew file mode 100644 index 00000000..58863ece --- /dev/null +++ b/src/Skeleton_blocker/doc/blockers_curve.png diff --git a/src/Skeleton_blocker/doc/ds_representation.png b/src/Skeleton_blocker/doc/ds_representation.png Binary files differnew file mode 100644 index 00000000..bb224038 --- /dev/null +++ b/src/Skeleton_blocker/doc/ds_representation.png diff --git a/src/Skeleton_blocker/doc/ds_scheme.svg b/src/Skeleton_blocker/doc/ds_scheme.svg new file mode 100644 index 00000000..f13a6213 --- /dev/null +++ b/src/Skeleton_blocker/doc/ds_scheme.svg @@ -0,0 +1,477 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="434.50912" + height="113.23431" + id="svg2" + version="1.1" + inkscape:version="0.48.4 r9939" + sodipodi:docname="ds_scheme.svg" + inkscape:export-filename="/home/dsalinas/Documents/CodeSVN/gudhi_depot/trunk/src/Skeleton_blocker/doc/ds_representation.png" + inkscape:export-xdpi="164.24294" + inkscape:export-ydpi="164.24294"> + <defs + id="defs4"> + <inkscape:path-effect + is_visible="true" + id="path-effect4610" + effect="spiro" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.8" + inkscape:cx="110.77021" + inkscape:cy="32.991372" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="2560" + inkscape:window-height="1523" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(775.10425,-319.57102)"> + <path + id="path4432" + d="m -564.66566,372.78112 -22.51977,46.5698 62.69739,-31.00174 z" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" + d="m -553.17597,345.78586 c 0.75762,1.51523 32.57742,14.89975 32.57742,14.89975" + id="path3125" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -519.08333,361.44322 31.81981,11.8693" + id="path3127" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + inkscape:connector-curvature="0" + id="path14-7" + style="fill:none;stroke:none" + d="m -554.02684,345.73906 29.32107,42.08799 7.736,-39.88821" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-1" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -523.3168,376.08402 34.2525,-51.7575" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -564.28765,372.5549 47.47717,-24.4962 -7.82868,39.90103 37.1231,-14.89975 -29.29442,-25.25382 -37.37564,-2.27284 29.54696,42.42641" + id="path3121" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-691.68016,428.25063)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-669.37366,382.75481)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-4" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-630.26652,397.04052)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-1" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-659.37366,354.89767)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-42" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-622.23081,358.64766)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-3" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-593.12367,383.11196)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-7" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + id="path4432-5" + d="m -420.02281,368.02562 -22.51977,46.5698 62.69739,-31.00174 z" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" + d="m -408.53312,341.03036 c 0.75762,1.51523 32.57742,14.89975 32.57742,14.89975" + id="path3125-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -374.44048,356.68772 31.81981,11.8693" + id="path3127-1" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + inkscape:connector-curvature="0" + id="path14-79" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -420.24312,367.75261 -21.18655,45.87606 60.51647,-29.53414" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-7-1" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -409.38399,340.98356 29.32107,42.08799 7.736,-39.88821" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-8-6" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -372.00835,343.76148 -2.625,13.17237 29.83309,9.73554" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-2-7" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -374.53372,356.64093 -5.27665,26.68316 35.26265,-15.39201" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-3-5" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -409.13145,340.85729 28.31093,41.70918 8.87241,-39.38313" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-1-1" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -378.67395,371.32852 34.2525,-51.7575" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -419.6448,367.7994 47.47717,-24.4962 -7.82868,39.90103 37.1231,-14.89975 -29.29442,-25.25382 -37.37564,-2.27284 29.54696,42.42641" + id="path3121-0" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-547.03731,423.49513)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-36" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-524.73081,377.99931)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-4-5" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-485.62367,392.28502)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-1-6" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-514.73081,350.14217)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-42-0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-477.58796,353.89216)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-3-9" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-448.48082,378.35646)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-7-0" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -413.6327,367.61658 37.56127,-20.2544 c 0,0 -4.64286,29.64285 -5.35714,31.42857 -0.71429,1.78571 -32.20413,-11.17417 -32.20413,-11.17417 z" + id="path4091" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsc" /> + <path + style="fill:none;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -370.55894,347.61837 23.42349,19.75458 c 0,0 -28.39286,9.99999 -29.10714,11.78571 -0.71429,1.78571 5.68365,-31.54029 5.68365,-31.54029 z" + id="path4091-7" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccsc" /> + <path + id="path4432-6" + d="m -750.37996,370.16849 -22.51977,46.5698 62.69739,-31.00174 z" + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0" + d="m -738.89027,343.17323 c 0.75762,1.51523 32.57742,14.89975 32.57742,14.89975" + id="path3125-9" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -704.79763,358.83059 31.81981,11.8693" + id="path3127-2" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cc" /> + <path + inkscape:connector-curvature="0" + id="path14-12" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -750.60027,369.89548 -21.18655,45.87606 60.51647,-29.53414" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-7-8" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -739.74114,343.12643 29.32107,42.08799 7.736,-39.88821" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-8-0" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -702.3655,345.90435 -2.625,13.17237 29.83309,9.73554" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-2-70" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -704.89087,358.7838 -5.27665,26.68316 35.26265,-15.39201" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-3-2" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -739.4886,343.00016 28.31093,41.70918 8.87241,-39.38313" + sodipodi:nodetypes="ccc" /> + <path + inkscape:connector-curvature="0" + id="path14-1-2" + style="fill:#575e9c;fill-opacity:0.41568604;fill-rule:nonzero;stroke:none" + d="m -709.0311,373.47139 34.2525,-51.7575" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -750.00195,369.94227 47.47717,-24.4962 -7.82868,39.90103 37.1231,-14.89975 -29.29442,-25.25382 -37.37564,-2.27284 29.54696,42.42641" + id="path3121-6" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccccc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-877.39446,425.638)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-79" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-855.08796,380.14218)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-4-9" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-815.98082,394.42789)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-1-61" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-845.08796,352.28504)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-42-8" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-807.94511,356.03503)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-3-5" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <path + transform="matrix(0.39947101,-0.59295401,0.59295401,0.39947101,-778.83797,380.49933)" + d="m 97.389654,113.9189 c 0,1.88726 -1.529924,3.41718 -3.417181,3.41718 -1.887257,0 -3.417181,-1.52992 -3.417181,-3.41718 0,-1.88726 1.529924,-3.41718 3.417181,-3.41718 1.887257,0 3.417181,1.52992 3.417181,3.41718 z" + sodipodi:ry="3.4171808" + sodipodi:rx="3.4171808" + sodipodi:cy="113.9189" + sodipodi:cx="93.972473" + id="path4584-7-1" + style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.99118668;stroke-linecap:butt;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline" + sodipodi:type="arc" /> + <text + xml:space="preserve" + style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'" + x="-718.37708" + y="430.86295" + id="text6164-6-56-2" + sodipodi:linespacing="125%" + inkscape:export-xdpi="164.24294" + inkscape:export-ydpi="164.24294" + inkscape:export-filename="/home/dsalinas/Documents/CodeSVN/gudhi_depot/trunk/src/Skeleton_blocker/doc/ds_representation.png"><tspan + sodipodi:role="line" + id="tspan6166-1-0-6" + x="-718.37708" + y="430.86295">Simplicial complex</tspan></text> + <text + xml:space="preserve" + style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'" + x="-462.22809" + y="430.86295" + id="text6164-6-56-2-3" + sodipodi:linespacing="125%" + inkscape:export-xdpi="164.24294" + inkscape:export-ydpi="164.24294" + inkscape:export-filename="/home/dsalinas/Documents/CodeSVN/gudhi_depot/trunk/src/Skeleton_blocker/doc/ds_representation.png"><tspan + sodipodi:role="line" + id="tspan6166-1-0-6-9" + x="-462.22809" + y="430.86295">Encoding</tspan></text> + <text + xml:space="preserve" + style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'" + x="-535.67126" + y="334.7963" + id="text6164-6-56-2-3-0" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan6166-1-0-6-9-9" + x="-535.67126" + y="334.7963">Graph</tspan></text> + <text + xml:space="preserve" + style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'" + x="-389.50018" + y="335.10443" + id="text6164-6-56-2-3-0-3" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan6166-1-0-6-9-9-1" + x="-389.50018" + y="335.10443">Blockers</tspan></text> + <text + xml:space="preserve" + style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Times New Roman;-inkscape-font-specification:'Times New Roman,'" + x="-470.03345" + y="335.56711" + id="text6164-6-56-2-3-0-36" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan6166-1-0-6-9-9-3" + x="-470.03345" + y="335.56711">+</tspan></text> + </g> +</svg> diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h index 48e311cb..3d3910bf 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h @@ -34,5 +34,163 @@ #include "gudhi/Utils.h" //xxx + +/** \defgroup skbl Skeleton-blocker Package + +\author David Salinas + +\section Introduction +The Skeleton-blocker data-structure had been introduced in the two papers +[\cite skbl_socg2011,\cite skbl_ijcga2012]. +It proposes a light encoding for simplicial complexes by storing only an *implicit* representation of its +simplices. +Intuitively, it just stores the 1-skeleton of a simplicial complex with a graph and the set of its "missing faces" that +is very small in practice (see next section for a formal definition). +This data-structure handles every classical operations used for simplicial complexes such as + as simplex enumeration or simplex removal but operations that are particularly efficient + are operations that do not require simplex enumeration such as edge iteration, link computation or simplex contraction. + + +\section Definitions + +We recall briefly classical definitions of simplicial complexes [\cite Munkres]. +An abstract simplex is a finite non-empty set and its dimension is its number of elements minus 1. +Whenever \f$\tau \subset \sigma\f$ and \f$\tau \neq \emptyset \f$, \f$ \tau \f$ is called a face of +\f$ \sigma\f$ and \f$ \sigma\f$ is called a coface of \f$ \tau \f$ . Furthermore, +when \f$ \tau \neq \sigma\f$ we say that \f$ \tau\f$ is a proper-face of \f$ \sigma\f$. +An abstract simplicial complex is a set of simplices that contains all the faces of its simplices. +The 1-skeleton of a simplicial complex (or its graph) consists of its elements of dimension lower than 2. + +*\image html "ds_representation.png" "Skeleton-blocker representation" width=20cm + + +To encode, a simplicial complex, one can encodes all its simplices. +In case when this number gets too large, +a lighter and implicit version consists of encoding only its graph plus some elements called missing faces or blockers. +A blocker is a simplex of dimension greater than 1 +that does not belong to the complex but whose all proper faces does. + + +Remark that for a clique complex (i.e. a simplicial complex whose simplices are cliques of its graph), the set of blockers +is empty and the data-structure is then particularly sparse. +One famous example of clique-complex is the Rips complex which is intensively used +in topological data-analysis. +In practice, the set of blockers of a simplicial complex +remains also small when simplifying a Rips complex with edge contractions +but also for most of the simplicial complexes used in topological data-analysis such as Delaunay, Cech or Witness complexes. +For instance, the numbers of blockers is depicted for a random 3 dimensional sphere embedded into \f$R^4\f$ +in figure X. + + +*\image html "blockers_curve.png" "Number of blockers of random triangulations of 3-spheres" width=10cm + + + + +\section API + +\subsection Overview + +Four classes define a simplicial complex namely : + +\li <Code>Skeleton_blocker_complex</Code> : a simplicial complex with basic operations such as vertex/edge/simplex enumeration and construction +\li <Code>Skeleton_blocker_link_complex</Code> : the link of a simplex in a parent complex. It is represented as a sub complex +of the parent complex +\li <Code>Skeleton_blocker_simplifiable_complex</Code> : a simplicial complex with simplification operations such as edge contraction or simplex collapse +\li <Code>Skeleton_blocker_geometric_complex</Code> : a simplicial complex who has access to geometric points in \f$R^d\f$ + +The two last classes are derived classes from the <Code>Skeleton_blocker_complex</Code> class. The class <Code>Skeleton_blocker_link_complex</Code> inheritates from a template passed parameter +that may be either <Code>Skeleton_blocker_complex</Code> or <Code>Skeleton_blocker_geometric_complex</Code> (a link may store points coordinates or not). + +\todo{include links} + +\subsection Visitor + +The class <Code>Skeleton_blocker_complex</Code> has a visitor that is called when usual operations such as adding an edge or remove a vertex are called. +You may want to use this visitor to compute statistics or to update another data-structure (for instance this visitor is heavily used in the +<Code>Contraction</Code> package). + + + +\section Example + + +\subsection s Iterating through vertices, edges, blockers and simplices + +Iteration through vertices, edges, simplices or blockers is straightforward with c++11 for range loops. +Note that simplex iteration with this implicit data-structure just takes +a few more time compared to iteration via an explicit representation +such as the Simplex Tree. The following example computes the Euler Characteristic +of a simplicial complex. + + \code{.cpp} + typedef Skeleton_blocker_complex<Skeleton_blocker_simple_traits> Complex; + typedef Complex::Vertex_handle Vertex_handle; + typedef Complex::Simplex_handle Simplex; + + const int n = 15; + + // build a full complex with 10 vertices and 2^n-1 simplices + Complex complex; + for(int i=0;i<n;i++) + complex.add_vertex(); + for(int i=0;i<n;i++) + for(int j=0;j<i;j++) + //note that add_edge adds the edge and all its cofaces + complex.add_edge(Vertex_handle(i),Vertex_handle(j)); + + // this is just to illustrate iterators, to count number of vertices + // or edges, complex.num_vertices() and complex.num_edges() are + // more appropriated! + unsigned num_vertices = 0; + for(auto v : complex.vertex_range()){ + ++num_vertices; + } + + unsigned num_edges = 0; + for(auto e : complex.edge_range()) + ++num_edges; + + unsigned euler = 0; + unsigned num_simplices = 0; + // we use a reference to a simplex instead of a copy + // value here because a simplex is a set of integers + // and copying it cost time + for(const Simplex & s : complex.simplex_range()){ + ++num_simplices; + if(s.dimension()%2 == 0) + euler += 1; + else + euler -= 1; + } + std::cout << "Saw "<<num_vertices<<" vertices, "<<num_edges<<" edges and "<<num_simplices<<" simplices"<<std::endl; + std::cout << "The Euler Characteristic is "<<euler<<std::endl; + \endcode + + +\verbatim +./SkeletonBlockerIteration +Saw 15 vertices, 105 edges and 32767 simplices +The Euler Characteristic is 1 + 0.537302s wall, 0.530000s user + 0.000000s system = 0.530000s CPU (98.6%) +\endverbatim + + + +\subsection Acknowledgements +The author wishes to thank Dominique Attali and André Lieutier for +their collaboration to write the two initial papers about this data-structure + and also Dominique for leaving him use a prototype. + + +\copyright GNU General Public License v3. +\verbatim Contact: David Salinas, david.salinas@inria.fr \endverbatim +*/ +/** @} */ // end defgroup + + + #endif + + diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h index 483c1715..88c777ee 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h @@ -57,21 +57,6 @@ namespace skbl { /** *@class Skeleton_blocker_complex *@brief Abstract Simplicial Complex represented with a skeleton/blockers pair. - * - * A simplicial complex is completely defined by : - * - the graph of its 1-skeleton; - * - its set of blockers. - * - * The graph is a boost graph templated with SkeletonBlockerDS::Graph_vertex and SkeletonBlockerDS::Graph_edge. - * - * One can accesses to vertices via SkeletonBlockerDS::Vertex_handle, to edges via Skeleton_blocker_complex::Edge_handle and - * simplices via Skeleton_blocker_simplex<Vertex_handle>. - * - * The SkeletonBlockerDS::Root_vertex_handle serves in the case of a subcomplex (see class Skeleton_blocker_sub_complex) - * to access to the address of one vertex in the parent complex. - * - * @todo TODO Simplex_handle are not classic handle - * */ template<class SkeletonBlockerDS> class Skeleton_blocker_complex @@ -566,7 +551,7 @@ public: } /** - * @brief Adds an edge between vertices a and b + * @brief Adds an edge between vertices a and b and all its cofaces. */ Edge_handle add_edge(Vertex_handle a, Vertex_handle b){ assert(contains_vertex(a) && contains_vertex(b)); @@ -598,7 +583,7 @@ public: } /** - * @brief Removes edge ab from the simplicial complex. + * @brief Removes edge ab from the simplicial complex and all its cofaces. */ virtual Edge_handle remove_edge(Vertex_handle a, Vertex_handle b){ bool found; @@ -617,7 +602,7 @@ public: /** - * @brief Removes edge from the simplicial complex. + * @brief Removes edge and its cofaces from the simplicial complex. */ void remove_edge(Edge_handle edge){ assert(contains_vertex(first_vertex(edge))); diff --git a/src/common/include/gudhi/Off_reader.h b/src/common/include/gudhi/Off_reader.h index 1c99a90a..e29218d8 100644 --- a/src/common/include/gudhi/Off_reader.h +++ b/src/common/include/gudhi/Off_reader.h @@ -179,6 +179,19 @@ private: }; +template<typename OFFVisitor> +void read_off(const std::string& name_file_off,OFFVisitor& vis){ + std::ifstream stream(name_file_off); + if(!stream.is_open()) + std::cerr <<"could not open file \n"; + else{ + Off_reader off_reader(stream); + off_reader.read(vis); + } +} + + + } // namespace Gudhi |