summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Boguszewski <adrbogus1@student.pg.gda.pl>2016-08-09 09:58:51 +0000
committerAdrian Boguszewski <adrbogus1@student.pg.gda.pl>2016-08-09 09:58:51 +0000
commite5143d65bb57d4ce623e6220585b099e6d2ee453 (patch)
tree4ff78f6fa8f0c1b740fd43b0ade2b91dbf9226d0
parentRemove deprecated Autotools and btool files. Please use CMake instead (diff)
parentMerged trunk (diff)
downloadinkscape-e5143d65bb57d4ce623e6220585b099e6d2ee453.tar.gz
inkscape-e5143d65bb57d4ce623e6220585b099e6d2ee453.zip
Merged gsoc work. Created better data structure for selections, replaced SPObject children list, improved spray tool, split tests to separate executables
(bzr r15047)
-rw-r--r--AUTHORS3
-rw-r--r--CMakeLists.txt1
-rw-r--r--CMakeScripts/ConfigCompileFlags.cmake15
-rw-r--r--inkscape.fr.pod637
-rw-r--r--share/extensions/restack.inx4
-rw-r--r--share/tutorials/tutorial-advanced.de.svg2
-rw-r--r--share/tutorials/tutorial-basic.de.svg480
-rw-r--r--share/tutorials/tutorial-shapes.de.svg16
-rw-r--r--share/tutorials/tutorial-tracing-pixelart.fr.svg74
-rw-r--r--share/tutorials/tutorial-tracing.fr.svg102
-rw-r--r--src/2geom/sbasis-geometric.cpp2
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/box3d.cpp20
-rw-r--r--src/conn-avoid-ref.cpp18
-rw-r--r--src/desktop-style.cpp42
-rw-r--r--src/display/nr-svgfonts.cpp35
-rw-r--r--src/document.cpp96
-rw-r--r--src/extension/dbus/document-interface.cpp8
-rw-r--r--src/extension/execution-env.cpp4
-rw-r--r--src/extension/implementation/implementation.cpp4
-rw-r--r--src/extension/implementation/script.cpp6
-rw-r--r--src/extension/internal/bitmap/imagemagick.cpp8
-rw-r--r--src/extension/internal/bluredge.cpp2
-rw-r--r--src/extension/internal/cairo-render-context.cpp23
-rw-r--r--src/extension/internal/cairo-renderer.cpp8
-rw-r--r--src/extension/internal/emf-print.cpp14
-rw-r--r--src/extension/internal/filter/filter.cpp2
-rw-r--r--src/extension/internal/grid.cpp4
-rw-r--r--src/extension/internal/javafx-out.cpp8
-rw-r--r--src/extension/internal/metafile-print.cpp18
-rw-r--r--src/extension/internal/pov-out.cpp4
-rw-r--r--src/extension/param/bool.cpp3
-rw-r--r--src/extension/param/enum.cpp2
-rw-r--r--src/extension/param/float.cpp5
-rw-r--r--src/extension/param/int.cpp5
-rw-r--r--src/extension/param/parameter.cpp10
-rw-r--r--src/extension/param/radiobutton.cpp2
-rw-r--r--src/extension/param/string.cpp2
-rw-r--r--src/extension/plugins/grid2/grid.cpp4
-rw-r--r--src/file.cpp26
-rw-r--r--src/filter-chemistry.cpp14
-rw-r--r--src/filters/blend.cpp6
-rw-r--r--src/filters/componenttransfer.cpp19
-rw-r--r--src/filters/composite.cpp6
-rw-r--r--src/filters/diffuselighting.cpp24
-rw-r--r--src/filters/displacementmap.cpp6
-rw-r--r--src/filters/merge.cpp9
-rw-r--r--src/filters/specularlighting.cpp24
-rw-r--r--src/gradient-chemistry.cpp28
-rw-r--r--src/gradient-drag.cpp16
-rw-r--r--src/helper/pixbuf-ops.cpp4
-rw-r--r--src/helper/png-write.cpp4
-rw-r--r--src/helper/stock-items.cpp30
-rw-r--r--src/id-clash.cpp8
-rw-r--r--src/layer-fns.cpp36
-rw-r--r--src/libnrtype/font-lister.cpp4
-rw-r--r--src/live_effects/lpe-perspective_path.cpp10
-rw-r--r--src/main-cmdlineact.cpp2
-rw-r--r--src/main.cpp10
-rw-r--r--src/object-set.cpp370
-rw-r--r--src/object-set.h329
-rw-r--r--src/object-snapper.cpp8
-rw-r--r--src/object-test.h1
-rw-r--r--src/path-chemistry.cpp12
-rw-r--r--src/persp3d.cpp17
-rw-r--r--src/persp3d.h2
-rw-r--r--src/selcue.cpp16
-rw-r--r--src/selection-chemistry.cpp479
-rw-r--r--src/selection-chemistry.h25
-rw-r--r--src/selection-describer.cpp2
-rw-r--r--src/selection.cpp409
-rw-r--r--src/selection.h204
-rw-r--r--src/seltrans.cpp27
-rw-r--r--src/snap.cpp4
-rw-r--r--src/sp-clippath.cpp30
-rw-r--r--src/sp-defs.cpp14
-rw-r--r--src/sp-filter-primitive.cpp6
-rw-r--r--src/sp-filter.cpp33
-rw-r--r--src/sp-flowdiv.cpp120
-rw-r--r--src/sp-flowregion.cpp53
-rw-r--r--src/sp-flowtext.cpp58
-rw-r--r--src/sp-flowtext.h1
-rw-r--r--src/sp-gradient.cpp41
-rw-r--r--src/sp-hatch.cpp17
-rw-r--r--src/sp-item-group.cpp68
-rw-r--r--src/sp-item.cpp91
-rw-r--r--src/sp-mask.cpp27
-rw-r--r--src/sp-mesh-array.cpp34
-rw-r--r--src/sp-namedview.cpp12
-rw-r--r--src/sp-object-group.cpp8
-rw-r--r--src/sp-object.cpp187
-rw-r--r--src/sp-object.h47
-rw-r--r--src/sp-pattern.cpp30
-rw-r--r--src/sp-root.cpp15
-rw-r--r--src/sp-switch.cpp7
-rw-r--r--src/sp-text.cpp66
-rw-r--r--src/sp-tref.cpp6
-rw-r--r--src/sp-tspan.cpp80
-rw-r--r--src/sp-use.cpp32
-rw-r--r--src/splivarot.cpp174
-rw-r--r--src/splivarot.h10
-rw-r--r--src/text-chemistry.cpp55
-rw-r--r--src/text-editing.cpp62
-rw-r--r--src/trace/trace.cpp4
-rw-r--r--src/ui/clipboard.cpp30
-rw-r--r--src/ui/dialog/align-and-distribute.cpp22
-rw-r--r--src/ui/dialog/clonetiler.cpp32
-rw-r--r--src/ui/dialog/document-properties.cpp14
-rw-r--r--src/ui/dialog/export.cpp25
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp87
-rw-r--r--src/ui/dialog/find.cpp14
-rw-r--r--src/ui/dialog/font-substitution.cpp2
-rw-r--r--src/ui/dialog/glyphs.cpp8
-rw-r--r--src/ui/dialog/grid-arrange-tab.cpp20
-rw-r--r--src/ui/dialog/icon-preview.cpp4
-rw-r--r--src/ui/dialog/objects.cpp93
-rw-r--r--src/ui/dialog/pixelartdialog.cpp4
-rw-r--r--src/ui/dialog/polar-arrange-tab.cpp2
-rw-r--r--src/ui/dialog/spellcheck.cpp12
-rw-r--r--src/ui/dialog/svg-fonts-dialog.cpp88
-rw-r--r--src/ui/dialog/swatches.cpp2
-rw-r--r--src/ui/dialog/symbols.cpp13
-rw-r--r--src/ui/dialog/tags.cpp53
-rw-r--r--src/ui/dialog/text-edit.cpp12
-rw-r--r--src/ui/dialog/transformation.cpp44
-rw-r--r--src/ui/interface.cpp6
-rw-r--r--src/ui/tools/box3d-tool.cpp4
-rw-r--r--src/ui/tools/calligraphic-tool.cpp4
-rw-r--r--src/ui/tools/connector-tool.cpp10
-rw-r--r--src/ui/tools/eraser-tool.cpp11
-rw-r--r--src/ui/tools/flood-tool.cpp2
-rw-r--r--src/ui/tools/gradient-tool.cpp18
-rw-r--r--src/ui/tools/lpe-tool.cpp4
-rw-r--r--src/ui/tools/mesh-tool.cpp16
-rw-r--r--src/ui/tools/node-tool.cpp11
-rw-r--r--src/ui/tools/select-tool.cpp2
-rw-r--r--src/ui/tools/spray-tool.cpp58
-rw-r--r--src/ui/tools/spray-tool.h9
-rw-r--r--src/ui/tools/tool-base.cpp10
-rw-r--r--src/ui/tools/tweak-tool.cpp30
-rw-r--r--src/ui/widget/layer-selector.cpp20
-rw-r--r--src/ui/widget/object-composite-settings.cpp2
-rw-r--r--src/ui/widget/style-subject.cpp10
-rw-r--r--src/uri-references.cpp9
-rw-r--r--src/vanishing-point.cpp20
-rw-r--r--src/verbs.cpp6
-rw-r--r--src/widgets/arc-toolbar.cpp16
-rw-r--r--src/widgets/connector-toolbar.cpp12
-rw-r--r--src/widgets/fill-style.cpp2
-rw-r--r--src/widgets/gradient-toolbar.cpp24
-rw-r--r--src/widgets/gradient-vector.cpp28
-rw-r--r--src/widgets/mesh-toolbar.cpp8
-rw-r--r--src/widgets/pencil-toolbar.cpp8
-rw-r--r--src/widgets/rect-toolbar.cpp8
-rw-r--r--src/widgets/select-toolbar.cpp2
-rw-r--r--src/widgets/spiral-toolbar.cpp8
-rw-r--r--src/widgets/star-toolbar.cpp24
-rw-r--r--src/widgets/stroke-marker-selector.cpp6
-rw-r--r--src/widgets/stroke-style.cpp10
-rw-r--r--src/widgets/text-toolbar.cpp20
-rw-r--r--testfiles/CMakeLists.txt46
-rw-r--r--testfiles/src/object-set-test.cpp321
-rw-r--r--testfiles/src/sp-object-test.cpp120
-rw-r--r--testfiles/unittest.cpp13
164 files changed, 3707 insertions, 3086 deletions
diff --git a/AUTHORS b/AUTHORS
index 7dafa6193..975705433 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -12,6 +12,7 @@ Nicholas Bishop
Joshua L. Blocher
Hanno Böck
Tomasz Boczkowski
+Adrian Boguszewski
Henrik Bohre
Boldewyn
Daniel Borgmann
@@ -173,4 +174,4 @@ Daniel Yacob
David Yip
Masatake Yamato
Moritz Eberl
-Sebastian Faubel \ No newline at end of file
+Sebastian Faubel
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 57440ef00..65820604b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,7 +85,6 @@ endif()
include(CMakeScripts/DefineDependsandFlags.cmake) # Includes, Compiler Flags, and Link Libraries
include(CMakeScripts/HelperMacros.cmake) # Misc Utility Macros
-
# -----------------------------------------------------------------------------
# BAD HACKS, NEED TO INVESTIGATE MAKING THESE LESS BAD
add_definitions(-D_FORTIFY_SOURCE=2)
diff --git a/CMakeScripts/ConfigCompileFlags.cmake b/CMakeScripts/ConfigCompileFlags.cmake
index 453ceef21..fa2362cd2 100644
--- a/CMakeScripts/ConfigCompileFlags.cmake
+++ b/CMakeScripts/ConfigCompileFlags.cmake
@@ -1,26 +1,19 @@
-set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}")
-add_definitions(-Wall -Wformat-security -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch)
-add_definitions(-O2)
-
# Define the flags for profiling if desired:
if(WITH_PROFILING)
set(COMPILE_PROFILING_FLAGS "-pg")
set(LINK_PROFILING_FLAGS "-pg")
endif()
-add_definitions(-DVERSION=\\\"${INKSCAPE_VERSION}\\\")
+# add_definitions(-DVERSION=\\\"${INKSCAPE_VERSION}\\\")
add_definitions(${DEFINE_FLAGS} -DHAVE_CONFIG_H -D_INTL_REDIRECT_INLINE)
if(WIN32)
add_definitions(-DXP_WIN)
endif(WIN32)
-# For Inkboard:
-add_definitions(-DHAVE_SSL "-DRELAYTOOL_SSL=\"static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }\"")
-
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILE_PROFILING_FLAGS} ")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILE_PROFILING_FLAGS} ")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ")
set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} ")
-# message(STATUS "${CMAKE_CXX_FLAGS}")
+message(STATUS "${CMAKE_CXX_FLAGS}")
diff --git a/inkscape.fr.pod b/inkscape.fr.pod
index 55f60d9a5..294130658 100644
--- a/inkscape.fr.pod
+++ b/inkscape.fr.pod
@@ -14,38 +14,38 @@ If the PO get lost, keeping this translation up-to-date will be harder.
=head1 NOM
-Inkscape — programme d'édition de SVG (Scalable Vector Graphics).
+Inkscape - programme d'édition SVG (Scalable Vector Graphics).
=head1 SYNOPSIS
C<inkscape [options] [nom_de_fichier ...]>
-S<options :>
+options:
- -?, --help
- --usage
+ -?, --help
+ --usage
-V, --version
- -f, --file=NOM_DE_FICHIER
+ -f, --file=NOMDEFICHIER
- -e, --export-png=NOM_DE_FICHIER
- -a, --export-area=x0:y0:x1:y1
+ -e, --export-png=NOMDEFICHIER
+ -a, --export-area=x0:y0:x1:y1
-C, --export-area-page
-D, --export-area-drawing
--export-area-snap
- -i, --export-id=ID
- -j, --export-id-only
+ -i, --export-id=ID
+ -j, --export-id-only
-t, --export-use-hints
- -b, --export-background=COULEUR
- -y, --export-background-opacity=VALEUR
- -d, --export-dpi=PPP
- -w, --export-width=LARGEUR
- -h, --export-height=HAUTEUR
-
- -P, --export-ps=NOM_DE_FICHIER
- -E, --export-eps=NOM_DE_FICHIER
- -A, --export-pdf=NOM_DE_FICHIER
- --export-pdf-version=NUMÉRO_DE_VERSION
+ -b, --export-background=COULEUR
+ -y, --export-background-opacity=VALEUR
+ -d, --export-dpi=DPI
+ -w, --export-width=LARGEUR
+ -h, --export-height=HAUTEUR
+
+ -P, --export-ps=NOMDEFICHIER
+ -E, --export-eps=NOMDEFICHIER
+ -A, --export-pdf=NOMDEFICHIER
+ --export-pdf-version=NUMERODEVERSION
--export-latex
--export-ps-level {2,3}
@@ -53,11 +53,11 @@ S<options :>
-T, --export-text-to-path
--export-ignore-filters
- -l, --export-plain-svg=NOM_DE_FICHIER
+ -l, --export-plain-svg=NOMDEFICHIER
-p, --print=IMPRIMANTE
- -I, --query-id=ID
+ -I, --query-id=ID
-X, --query-x
-Y, --query-y
-W, --query-width
@@ -67,13 +67,13 @@ S<options :>
-x, --extension-directory
--verb-list
- --verb=ID_ACTION
- --select=ID_OBJET
+ --verb=VERB-ID
+ --select=OBJECT-ID
--shell
- -g, --with-gui
- -z, --without-gui
+ -g, --with-gui
+ -z, --without-gui
--vacuum-defs
@@ -86,25 +86,24 @@ B<Inkscape> est un éditeur de dessin au format B<Scalable Vector Graphics
B<Adobe Illustrator>, B<CorelDraw>, B<Xara Xtreme>, etc. Les fonctionnalités
d'Inkscape comprennent une gestion versatile des formes, le dessin à main
levée et les courbes de Bézier, le texte multiligne, le texte suivant un
-chemin, la transparence alpha, les transformations affines, les remplissages
-par motif ou dégradé, l'édition de nœuds, l'import et l'export avec de
-nombreux formats incluant PNG et PDF, le groupement, les calques, les clones
-interactifs, et bien plus encore. L'interface est conçue pour être agréable
-et efficace pour les utilisateurs expérimentés, tout en restant conforme aux
-spécifications de B<GNOME> de sorte que les utilisateurs familiers avec
-d'autres applications GNOME puissent rapidement prendre en main l'interface.
+chemin, la transparence, les transformations affines, les remplissages par
+motif ou dégradé, l'édition de nœuds, l'export SVG vers PNG, le groupement,
+les calques, les clones interactifs et bien plus encore. L'interface est
+conçue pour être confortable et efficace pour les utilisateurs expérimentés
+tout en restant conforme aux spécifications de B<GNOME> permettant ainsi aux
+utilisateurs d'applications GNOME de s'y habituer rapidement.
-Le format B<SVG> est un format XML normalisé par le W3C pour le dessin
-vectoriel en 2D. Il permet de définir des objets sur un dessin en utilisant
-des points, des chemins et des formes primitives. Les couleurs, les polices
-de caractères, l'épaisseur du contour et autres sont spécifiés comme
-attributs du style de ces objets. Le but, SVG étant un standard et ses
-fichiers du texte/XML, est de rendre possible l'utilisation de fichiers SVG
-pour un grand nombre de programmes et de pratiques.
+Le format B<SVG> est un format XML standard pour le dessin vectoriel 2D. Il
+permet de définir des objets sur un dessin par l'utilisation de points,
+chemins et formes primitives. Les couleurs, fontes, largeur de contour et
+autres sont spécifiés en tant qu'attributs de 'style' de ces objets. Le but
+est de rendre possible l'utilisation de fichiers SVG pour un grand nombre de
+programmes et d'utilisation, SVG étant un standard et ses fichiers du type
+texte/xml.
-B<Inkscape> utilise le SVG comme format de document natif, et vise à devenir
-le programme de dessin vectoriel le plus respectueux du format SVG,
-disponible dans la communauté du logiciel libre.
+B<Inkscape> utilise le SVG comme format natif de ses documents, et a pour
+but de devenir le plus conforme des programmes de dessin SVG, disponible
+pour la communauté du logiciel libre.
@@ -114,304 +113,299 @@ disponible dans la communauté du logiciel libre.
=item B<-?>, B<--help>
-Afficher un message d'aide.
+Affiche un message d'aide.
=item B<-V>, B<--version>
-Afficher la version d'Inkscape et la date de compilation.
+Affiche la version d'Inkscape et la date de compilation.
=item B<-a> I<x0:y0:x1:y1>, B<--export-area>=I<x0:y0:x1:y1>
-Pour l'export en PNG, définit la zone à exporter en unités utilisateur SVG
-(unité anonyme de longueur utilisée normalement par le format SVG
-d'Inkscape). Le comportement par défaut est d'exporter la page complète du
-document. Le point S<(0 ; 0)> correspond au coin inférieur gauche.
+Pour l'export en PNG, définit la zone à exporter en pixels SVG (unité
+anonyme de longueur utilisée normalement par le format SVG Inkscape). Le
+comportement par défaut est d'exporter la page du document. Le point (0,0)
+est le coin inférieur gauche.
=item B<-C>, B<--export-area-page>
-Pour l'export en PNG, PDF, PS et EPS, définit la page comme zone à
-exporter. C'est le comportement par défaut pour les formats PNG, PDF et PS,
-et vous n'avez donc pas besoin de spécifier cette option pour ces formats à
-moins que vous utilisiez l'option --export-id pour exporter un objet
-spécifique. En EPS, cependant, il ne s'agit pas du comportement par S<défaut ;>
-de plus, la spécification du format EPS n'autorise pas son cadre englobant à
-s'étendre au-delà de son contenu. Cela signifie que lorsque l'option
---export-area-page est utilisée pour l'export en EPS, la boîte englobante de
-la page sera redimensionnée pour s'adapter à la taille de son contenu si
-elle est plus petite.
+Pour l'export en PNG, PDF, PS et EPS, la zone exportée est la page. C'est
+habituellement le comportement par défaut pour les formats PNG, PDF et PS,
+aussi spécifier cette option n'est pas nécessaire pour ces formats sauf si
+l'option --export-id est utilisée pour exporter un objet spécifique. En EPS,
+cependant, il ne s'agit pas du comportement par défaut. De plus, pour l'EPS,
+la spécification du format n'autorise pas sa boîte englobante à s'étendre
+au-delà de son contenu, ce qui signifie que lorsque l'option
+--export-area-page est utilisée pour l'export EPS, la boîte englobante de la
+page sera redimensionnée pour s'adapter à la boîte englobante de son contenu
+si elle est plus petite.
=item B<-D>, B<--export-area-drawing>
-Pour l'export en PNG, PDF, PS et EPS, définit le dessin entier (pas la page)
-comme zone à exporter, c'est-à-dire le cadre englobant l'ensemble des objets
-du document (ou des objets exportés lorsque l'option --export-id est
+Pour l'export en PNG, PDF, PS et EPS, la zone à exporter est le dessin
+entier (pas la page), c'est à dire la boîte englobante de l'ensemble des
+objets du document (ou des objets exportés lorsque l'option --export-id est
utilisée). Avec cette option, l'image exportée n'affichera que les objets
visibles du document sans marge ni massicotage. Il s'agit de l'option par
-défaut pour l'export au format EPS. Lors de l'export en PNG, elle peut être
-combinée avec --export-use-hints.
+défaut pour l'export au format EPS. Peut être combiné, lors de l'export en
+PNG, avec --export-use-hints.
=item B<--export-area-snap>
-Pour l'export en PNG, arrondir les dimensions de la zone à exporter aux
-valeurs entières supérieures en unités SVG utilisateur (px). Si vous
-utilisez une résolution d'export de 96 ppp et que vos objets sont alignés
-aux pixels afin de minimiser l'anti-crénelage, cette option permet de
-préserver cet alignement même si l'export se fait selon des boîtes de
-contour (avec --export-id ou --export-area-drawing) qui ne sont pas
-correctement alignées sur les pixels.
+Arrondi les dimensions de la zone à exporter aux valeurs entières
+supérieures en unités SVG utilisateur (px). Si vous utilisez une résolution
+d'export de 96 ppp et que vos objets sont alignés aux pixels afin de
+minimiser l'anti-crénelage, cette option permet de préserver cet alignement
+même si l'export se fait selon des boîtes de contour (avec --export-id ou
+--export-area-drawing) qui ne sont pas correctement alignées sur les pixels.
=item B<-b> I<COULEUR>, B<--export-background>=I<COULEUR>
-Définit la couleur d'arrière-plan du PNG exporté. La couleur peut être
-décrite de toutes les manières supportées par le format SVG, par exemple
-"#ff007f" ou "rgb(255, 0, 128)". Si cette couleur n'est pas définie, la
-couleur de page définie dans Inkscape via la boîte de dialogue Préférences
-du document sera utilisée (enregistrée dans l'attribut pagecolor= de
-sodipodi:namedview).
+Couleur de fond du PNG exporté. Cette valeur peut être n'importe quelle
+chaîne de couleur supportée par le format SVG, par exemple "#ff007f" ou
+"rgb(255, 0, 128)". Si cette couleur n'est pas définie, la couleur de page
+définie dans Inkscape via la boîte de dialogue Préférences du document sera
+utilisée (enregistrée dans l'attribut pagecolor= de sodipodi:namedview).
=item B<-d> I<PPP>, B<--export-dpi>=I<PPP>
-Définit la résolution utilisée pour l'export en PNG. Elle est également
-utilisée pour définir le niveau de rastérisation des objets filtrés lors de
-l'export en PS, EPS ou PDF (sauf si l'option --export-ignore-filters est
+La résolution utilisée pour l'export en PNG. Elle est également utilisée
+pour définir le niveau de rastérisation des objets filtrés lors de l'export
+en PS, EPS ou PDF (sauf si l'option --export-ignore-filters est
utilisée). Elle est de 96 par défaut, correspondant à 1 pixel SVG (px, aussi
appelé « unité utilisateur ») s'exportant vers 1 pixel bitmap. Cette valeur
préempte la PPP enregistrée avec le document si la commande est utilisée
avec --export-use-hints.
-=item B<-e> I<NOM_DE_FICHIER>, B<--export-png>=I<NOM_DE_FICHIER>
+=item B<-e> I<NOMDEFICHIER>, B<--export-png>=I<NOMDEFICHIER>
-Exporter au format PNG sous le nom I<NOM_DE_FICHIER>. Si un fichier portant
-ce nom existe déjà, il sera écrasé sans demande de confirmation.
+Spécifie le nom de fichier pour l'export en PNG. S'il existe déjà, il sera
+écrasé sans demande de confirmation.
-=item B<-f> I<NOM_DE_FICHIER>, B<--file>=I<NOM_DE_FICHIER>
+=item B<-f> I<NOMDEFICHIER>, B<--file>=I<NOMDEFICHIER>
-Ouvrir le(s) document(s) spécifié(s). La chaîne d'option peut être omise,
-c'est-à-dire que vous pouvez lister les fichiers sans -f.
+Ouvre le(s) document(s) spécifié(s). La chaîne d'option peut être omise,
+c'est à dire que vous pouvez lister les noms de fichier sans -f.
=item B<-g>, B<--with-gui>
-Essayer d'utiliser l'interface graphique (sous Unix, utiliser le serveur X,
+Tente d'utiliser l'interface graphique (sous Unix, utilise le serveur X,
même si $DISPLAY n'est pas défini).
=item B<-h> I<HAUTEUR>, B<--export-height>=I<HAUTEUR>
-Définit la hauteur de l'image matricielle générée en pixels. Cette valeur
-écrase le paramètre --export-dpi (ou la PPP enregistrée avec le document si
---export-use-hints est aussi utilisé).
+Hauteur du bitmap généré en pixels. Cette valeur préempte l'option
+--export-dpi (ou la PPP enregistrée avec le document si --export-use-hints
+est aussi utilisé).
=item B<-i> I<ID>, B<--export-id>=I<ID>
-Pour l'export en PNG, PS, EPS, PDF et SVG simple, exporter l'objet portant
-l'identifiant (valeur de l'attribut id) S<I<ID> ;> les autres objets du
-document ne seront pas exportés. Par défaut, la zone exportée est le cadre
-englobant l'objet ; vous pouvez changer ce comportement en utilisant
---export-area (PNG seulement) ou --export-area-page.
+Lors des exportations PNG, PS, EPS, PDF et SVG simple, valeur de l'attribut
+id de l'objet que vous voulez exporter depuis le document (aucun autre objet
+n'est exporté). Par défaut la zone exportée est la boîte englobante de
+l'objet ; vous pouvez préempter ce comportement en utilisant --export-area
+(pour le PNG seulement) ou --export-area-page.
=item B<-j>, B<--export-id-only>
-Pour les formats PNG et SVG simple, n'exporter que l'objet dont
-l'identifiant est spécifié avec avec l'option --export-id. Tous les autres
-objets seront cachés et n'apparaîtront pas dans l'export même s'ils
-chevauchent l'objet exporté. Si --export-id n'est pas spécifié, cette option
-est ignorée. Pour l'export au format PDF, il s'agit du comportement par
-défaut, et cette option n'a donc pas d'effet.
+Pour les formats PNG et SVG simple, n'exporte que l'objet dont l'id est
+spécifiée avec avec l'option --export-id. Tout les autres objets seront
+cachés et n'apparaîtront pas dans le fichier exporté même s'ils chevauchent
+l'objet effectivement exporté. Cette option est ignorée si --export-id n'est
+pas aussi utilisé.
-=item B<-l>, B<--export-plain-svg>=I<NOM_DE_FICHIER>
+=item B<-l>, B<--export-plain-svg>=I<NOMDEFICHIER>
-Exporter le(s) document(s) au format SVG simple, sans espace de noms
-sodipodi: ou inkscape: et sans métadonnées RDF.
+Exporte le(s) document(s) en SVG brut, sans espace de nom sodipodi: ou
+inkscape: et sans métadonnées RDF.
=item B<-x>, B<--extension-directory>
-Lister le contenu du répertoire d'extensions utilisé par Inkscape et
-quitter. Cela permet aux extensions externes d'utiliser la même
-configuration que l'installation originale d'Inkscape.
+Liste le contenu du répertoire d'extensions configuré en tant que tel par
+Inkscape, puis sort. Cette option est utilisée afin que les extensions
+externes utilisent la configuration originale générée à l'installation
+d'Inkscape.
=item B<--verb-list>
-Lister toutes les actions disponibles dans Inkscape par identifiant. Cet
+Liste tous les verbes disponibles dans Inkscape par identifiant. Cet
identifiant peut être utilisé pour définir les actions du clavier ou les
menus. Il peut également être utilisé avec l'option de ligne de commande
--verb.
-=item B<--verb>=I<ID_ACTION>, B<--select>=I<ID_OBJET>
+=item B<--verb>=I<VERB-ID>, B<--select>=I<OBJECT-ID>
-Ces deux options fonctionnent de concert pour permettre aux scripts
-d'utiliser Inkscape en ligne de commande. Elles peuvent apparaître sur la
-ligne de commande aussi souvent que nécessaire et sont exécutées dans
-l'ordre pour tous les documents spécifiés.
+Ces deux options fonctionnent de concert pour offrir la possibilité d'écrire
+des scripts simples pour Inkscape depuis la ligne de commande. Il peuvent
+apparaître sur la ligne de commande aussi souvent que nécessaire et sont
+exécutés dans l'ordre pour tous les documents spécifiés.
La commande --verb exécute une action spécifique comme si elle était appelée
-depuis un menu ou un bouton. Une boîte de dialogue apparaîtra si elle fait
+depuis un menu ou un bouton. Un boîte de dialogue apparaît lorsqu'elle fait
partie de l'action. Utilisez l'option --verb-list pour lister les
identifiants d'action disponibles.
-La commande --select sélectionne les objets correspondant aux identifiants
-spécifiés. Les actions suivantes ne s'appliquent alors qu'à cette
+La commande --select sélectionne les objects correspondants à l'identifiant
+spécifié. Les actions suivantes ne s'appliquent alors qu'à cette
sélection. Pour désélectionner tous les objets, utilisez
--verb=EditDeselect. Les identifiants d'objet disponibles dépendent du
document ouvert.
=item B<-p> I<IMPRIMANTE>, B<--print>=I<IMPRIMANTE>
-Imprimer le(s) document(s) avec l'imprimante spécifiée en utilisant `lpr -P
-IMPRIMANTE'. Vous pouvez également utiliser `| COMMANDE' pour envoyer la
-sortie vers une autre commande, ou `> NOMDEFICHIER' pour écrire la sortie
-PostScript dans un fichier au lieu de l'imprimer. Faites attention à placer
-les guillemets correctement pour votre shell, par S<exemple :>
+Imprime le(s) document(s) vers l'imprimante spécifiée en utilisant `lpr -P
+IMPRIMANTE'. Vous pouvez aussi utiliser `| COMMANDE' pour spécifier un tube
+de commande différent, ou utiliser `> NOMDEFICHIER' pour écrire le résultat
+PostScript dans un fichier au lieu de l'imprimer. N'oubliez pas d'utiliser
+les guillemets appropriés pour votre shell, par S<exemple :>
-inkscape --print='| ps2pdf - mon_doc.pdf' mon_doc.svg
+inkscape --print='| ps2pdf - mondoc.pdf' mondoc.svg
=item B<-t>, B<--export-use-hints>
-Utiliser le nom de fichier et la résolution enregistrés avec l'objet exporté
-(uniquement si --export-id est spécifié). Ces valeurs sont configurées
-automatiquement lorsque vous exportez la sélection depuis Inkscape. Donc,
-par exemple, si vous exportez une forme avec id="path231" sous
-/home/me/shape.png avec une résolution de 300 ppp depuis document.svg en
-utilisant l'interface graphique d'Inkscape, et enregistrez le document, vous
-pourrez réexporter plus tard cette forme vers le même fichier et avec la
-même résolution en utilisant simplement la S<commande :>
+Utilise le nom de fichier et la PPP enregistrés avec l'objet exporté
+(uniquement si --export-id est spécifié). Ces valeurs sont automatiquement
+spécifiées si vous exportez la sélection depuis Inkscape. Donc, si par
+exemple, vous exportez la forme id="path231" en tant que /home/me/shape.png
+avec une résolution de 300 ppp depuis document.svg en utilisant l'interface
+graphique d'Inkscape, et sauvez le document, vous pourrez réexporter plus
+tard cette forme vers le même fichier et avec la même résolution en
+utilisant simplement la S<commande :>
inkscape -i path231 -t document.svg
Si vous utilisez --export-dpi, --export-width, ou --export-height avec cette
-option, alors la résolution enregistrée sera ignorée et la valeur fournie
-sur la ligne de commande sera utilisée. Si vous utilisez --export-png avec
+option, la PPP enregistrée avec le document sera ignorée et la valeur
+fournie à la ligne de commande utilisée. Si vous utilisez --export-png avec
cette option, le nom de fichier enregistré avec le document sera ignoré et
-le nom de fichier fourni sur la ligne de commande utilisé.
+le nom de fichier fourni à la ligne de commande utilisé.
=item B<-w> I<LARGEUR>, B<--export-width>=I<LARGEUR>
-Définit la largeur de l'image matricielle générée en pixels. Cette valeur
-écrase l'option --export-dpi (ou la résolution enregistrée avec le document
-si --export-use-hints est aussi utilisé).
+Largeur du bitmap généré en pixels. Cette valeur préempte l'option
+--export-dpi setting (ou la PPP enregistrée avec le document si
+--export-use-hints est aussi utilisé).
=item B<-y> I<VALEUR>, B<--export-background-opacity>=I<VALEUR>
-Définit l'opacité de l'arrière-plan du PNG exporté. Cela peut être une
-valeur entre 0.0 et 1.0 (0.0 signifiant la transparence complète, 1.0
-l'opacité complète) ou supérieure à 1 et inférieure à 255 S<(255 :>
-complètement opaque). Si cette valeur n'est pas spécifiée et si l'option -b
-n'est pas utilisée, l'opacité de la page enregistrée avec le document (dans
-l'attribut inkscape:pageopacity= de sodipodi:namedview) sera utilisée. Si
-cette valeur n'est pas spécifiée mais que l'option -b est utilisée, la
-valeur 255 (opacité complète) sera utilisée.
+Opacité du fond du PNG exporté. Cela peut être une valeur entre 0.0 et 1.0
+S<(0.0 :> complètement transparent, 1.0 complètement opaque) ou supérieure à 1
+et inférieure à 255 S<(255 :> complètement opaque). Si cette valeur n'est pas
+spécifiée et si l'option -b n'est pas utilisée, l'opacité de la page
+enregistrée avec le document (dans l'attribut inkscape:pageopacity= de
+sodipodi:namedview) sera utilisée. Si cette valeur n'est pas spécifiée mais
+que l'option -b est utilisée, la valeur 255 (opacité complète) sera
+utilisée.
-=item B<-P> I<NOM_DE_FICHIER>, B<--export-ps>=I<NOM_DE_FICHIER>
+=item B<-P> I<NOMDEFICHIER>, B<--export-ps>=I<NOMDEFICHIER>
-Exporter le(s) document(s) au format PostScript. Notez que PostScript ne
+Exporte le ou les documents au format PostScript. Notez que PostScript ne
supporte pas la transparence, et que tout objet transparent dans le SVG
-original sera automatiquement rastérisé. Les polices utilisées sont
+original sera automatiquement rastérisé. Les polices utilisés sont
incorporées en tant que sous-ensemble. La zone d'exportation par défaut est
-la S<page ;> vous pouvez la configurer comme étant le dessin avec l'option
---export-area-drawing. Vous pouvez spécifier --export-id pour exporter un
-unique objet (tous les autres objets seront S<cachés) ;> dans ce cas, la zone
-d'exportation correspond au cadre englobant l'objet choisi, à moins que vous
-n'ajoutiez l'option --export-area-page pour qu'il s'agisse de la page.
+la page, mais vous pouvez choisir de limiter cette zone au dessin avec
+l'option --export-area-drawing. Il est également possible de n'exporter
+qu'un objet en spécifiant --export-id (tous les autres objets sont
+cachés). Dans ce cas, la zone d'exportation correspond à celle de l'objet
+choisi, à moins que vous n'ajoutiez l'option --export-area-page pour que
+cette zone prenne la taille de la page.
-=item B<-E> I<NOM_DE_FICHIER>, B<--export-eps>=I<NOM_DE_FICHIER>
+=item B<-E> I<NOMDEFICHIER>, B<--export-eps>=I<NOMDEFICHIER>
-Exporter le(s) document(s) au format PostScript encapsulé. Notez que
+Exporte le ou les documents au format Encapsulated PostScript. Notez que
PostScript ne supporte pas la transparence, et que tout objet transparent
-dans le SVG original sera automatiquement rastérisé. Les polices utilisées
+dans le SVG original sera automatiquement rastérisé. Les polices utilisés
sont incorporées en tant que sous-ensemble. La zone d'exportation par défaut
-est le S<dessin ;> vous pouvez la configurer comme étant la page, mais
-consultez --export-area-page pour la limitation applicable. Vous pouvez
-spécifier --export-id pour exporter un unique objet (tous les autres objets
-seront cachés).
+est la page, mais vous pouvez choisir de limiter cette zone au dessin avec
+l'option --export-area-drawing. Il est également possible de n'exporter
+qu'un objet en spécifiant --export-id (tous les autres objets sont cachés).
-=item B<-A> I<NOM_DE_FICHIER>, B<--export-pdf>=I<NOM_DE_FICHIER>
+=item B<-A> I<FILENAME>, B<--export-pdf>=I<FILENAME>
-Exporter le(s) document(s) au format PDF. Ce format préserve la transparence
-des objets présents dans le SVG original. Les polices utilisées sont
-incorporées en tant que sous-ensemble. La zone d'exportation par défaut est
-la S<page ;> vous pouvez la configurer comme étant le dessin avec l'option
---export-area-drawing. Vous pouvez spécifier --export-id pour exporter un
-unique objet (tous les autres objets seront S<cachés) ;> dans ce cas, la zone
-d'exportation correspond au cadre englobant l'objet choisi, à moins que vous
-n'ajoutiez l'option --export-area-page pour qu'il s'agisse de la page.
+Exporte le ou les documents au format PDF. Ce format préserve la
+transparence des objets présents dans le SVG original. Les polices utilisés
+sont incorporées en tant que sous-ensemble. La zone d'exportation par défaut
+est la page, mais vous pouvez choisir de limiter cette zone au dessin avec
+l'option --export-area-drawing. Il est également possible de n'exporter
+qu'un objet en spécifiant --export-id (tous les autres objets sont
+cachés). Dans ce cas, la zone d'exportation correspond à celle de l'objet
+choisi, à moins que vous n'ajoutiez l'option --export-area-page pour que
+cette zone prenne la taille de la page.
-=item B<--export-pdf-version>=I<NUMÉRO_DE_VERSION>
+=item B<--export-pdf-version>=I<VERSION-PDF>
-Sélectionne la version du format PDF utilisée pour exporter le
-fichier. Cette option correspond au sélecteur de version PDF présent dans la
-boîte de dialogue d'exportation en PDF de l'interface graphique. Vous devez
-indiquer une des versions proposées par ce sélecteur, par exemple « 1.4
-». La version par défaut est « 1.4 ».
+Sélectionne la version PDF utilisée pour exporter le fichier. Cette option
+ne fait que réutiliser le sélecteur de version PDF présent dans la boîte de
+dialogue d'exportation en PDF de l'interface graphique. Vous devez donc
+fournir une des versions proposées par ce sélecteur (par exemple « 1.4 ». La
+version par défaut est « 1.4 ».
=item B<--export-latex>
-Pour l'export en PS, EPS ou PDF, crée des images pour les documents LaTeX,
-dans lesquels les textes de l'image sont composés par LaTeX. Lors de
-l'export au format PDF/PS/EPS, cette option divise la sortie en un fichier
-PDF/PS/EPS (lorsque, par exemple, l'option --export-pdf est spécifiée) et un
-fichier LaTeX. Le texte ne sera pas enregistré dans le fichier PDF/PS/EPS,
-mais apparaîtra à la place dans le fichier LaTeX. Ce fichier LaTeX inclut le
-PDF/PS/EPS. Inclure le fichier LaTeX (\input{image.tex}) dans un document
-LaTeX fait alors apparaître l'image, et tout le texte sera composé par
-LaTeX. Consultez le document LaTeX généré pour en savoir plus. Consultez
-également la sortie de la commande `epslatex' de GNUPlot dans un terminal.
+Pour l'exportation en PS, EPS ou PDF. Utilisé pour créer des images pour les
+documents LaTeX, pour lesquels les textes sont composés par LaTeX. Lors de
+l'exportation PS, EPS ou PDF, cette option sépare la sortie en un fichier
+PS, EPS ou PDF (lorsque, par exemple, l'option --export-pdf est positionnée)
+et en un fichier LaTeX. Le text n'est pas enregistré dans le PS, EPS ou PDF,
+mais apparaît dans le fichier LaTex, qui lui-même inclut le PS, EPS ou
+PDF. Inclure le fichier LaTeX (\input{image.tex}) dans un document LaTeX
+fait alors apparaître l'image, et tout le texte composé par LaTeX. Se
+référer au document LaTeX généré pour de plus amples informations (voir
+également la sortie terminal de la commande GNUPlot `epslatex').
=item B<-T>, B<--export-text-to-path>
-Convertir les objets texte en chemins lors de l'export, si applicable (pour
-l'export en PS, EPS, PDF ou SVG).
+Convertit les objets texte en chemins lors de l'export, si applicable (pour
+l'exportation en PS, EPS, PDF ou SVG).
=item B<--export-ignore-filters>
-Exporter les objets filtrés (avec du flou, par exemple) comme des vecteurs,
-en ignorant les filtres (pour l'export en PS, EPS ou PDF). Par défaut, tous
-les objets filtrés sont rastérisés à une résolution choisie par --export-dpi
-(par défaut 96 ppp), ce qui préserve leur apparence.
+Exporte les objets filtrés (avec du flou, par exemple) comme des vecteurs,
+en ignorant les filtres (pour l'exportation en PS, EPS ou PDF). Par défaut,
+tous les objets filtrés sont rastérisés à une définition choisie par
+--export-dpi (par défaut 96 ppp), en préservant son apparence.
=item B<-I>, B<--query-id>
-Définit l'identifiant de l'objet dont les dimensions sont demandées. Si
-cette option n'est pas utilisée, la commande retournera les dimensions du
-dessin (c'est-à-dire de tous les objets du document), pas de la page ou de
-la zone affichée.
+Identifiant de l'objet dont les dimensions sont demandées. Si cette option
+n'est pas utilisée, la commande retournera les dimensions du dessin, pas de
+la page ou de la zone affichée.
=item B<-X>, B<--query-x>
-Demander l'abscisse (coordonnée X) du dessin ou, si spécifié avec
---query-id, de l'objet. La valeur retournée est en px (unités utilisateur
-SVG).
+Demande l'abscisse (coordonnée X) du dessin ou, si spécifié avec --query-id,
+de l'objet. La valeur retournée est en pixels (unité utilisateur SVG).
=item B<-Y>, B<--query-y>
-Demande l'ordonnée (coordonnée Y) du dessin ou, si spécifié avec --query-id,
-de l'objet. La valeur retournée est en px (unités utilisateur SVG).
+Demande l'ordonnée (coordonnée Y) du dessin ou, si spécifié avec --query-id
+de l'objet. La valeur retournée est en pixels (unité utilisateur SVG).
=item B<-W>, B<--query-width>
Demande la largeur du dessin ou, si spécifié avec --query-id, de l'objet. La
-valeur retournée est en px (unités utilisateur SVG).
+valeur retournée est en pixels (unité utilisateur SVG).
=item B<-H>, B<--query-height>
Demande la hauteur du dessin ou, si spécifié avec --query-id, de l'objet. La
-valeur retournée est en px (unités utilisateur SVG).
+valeur retournée est en pixels (unité utilisateur SVG).
=item B<-S>, B<--query-all>
-Affiche une liste de tous les objets du document SVG avec leur identifiant,
-et les valeurs x, y, largeur et hauteur, en utilisant la virgule comme
-séparateur.
+Affiche un liste délimitée par des virgules des tous les objets du document
+SVG comprenant leur identifiant, et les valeurs x, y, largeur et hauteur.
=item B<--shell>
-Utiliser Inkscape en mode ligne de commande interactif. Dans ce mode, vous
-pouvez entrer des commandes sur l'invite et Inkscape les exécute, sans que
-vous ayez à lancer une nouvelle instance du logiciel à chaque
-commande. Cette fonctionnalité est principalement utile pour les scripts et
-l'exécution à S<distance :> elle n'ajoute aucune fonctionnalité mais permet
-d'améliorer la vitesse et l'occupation en mémoire des scripts qui appellent
-Inkscape de façon répétée pour effectuer des tâches en ligne de commande
-(telles que des exports ou des conversions). Chaque commande, en mode
-interactif, doit contenir tous les paramètres d'une ligne de commande
-classique sans le nom du programme (inkscape), par S<exemple :> "fichier.svg
+Avec ce paramètre, Inkscape entre en mode de ligne de commande
+interactif. Dans ce mode, vous pouvez envoyer des commandes à Inkscape par
+le prompt, sans avoir à lancer une nouvelle instance du logiciel à chaque
+commande. Cette fonctionnalité est particulièrement utile pour une
+utilisation en scripts et en serveur. Elle permet d'améliorer la vitesse
+d'exécution et l'occupation en mémoire des scripts utilisés de façon
+répétée. Chaque commande, dans ce mode, doit contenir tous les paramètres
+d'une ligne de commande classique, à l'exception du nom du programme
+(inkscape), comme dans l'exemple S<suivant :> "fichier.svg
--export-pdf=fichier.pdf".
=item B<--vacuum-defs>
@@ -423,37 +417,38 @@ spécifié sera modifié.
=item B<-z>, B<--without-gui>
-Ne pas ouvrir l'interface graphique (sous Unix, ne pas utiliser le serveur
-S<X) ;> ne traiter les fichiers que depuis la console. Ceci est présupposé pour
-les options -p, -e, -l et --vacuum-defs.
+Ne lance pas l'interface graphique (sous Unix, n'utilise pas le server S<X) ;>
+ne traite les fichiers que depuis la console. Ceci est présupposé pour les
+options -p, -e, -l et --vacuum-defs.
=item B<--g-fatal-warnings>
Cette option GTK standard force l'arrêt d'Inkscape dès qu'un message
-d'avertissement (généralement sans gravité) est envoyé (utile pour le
-débogage).
+d'avertssement (généralement sans gravité) est envoyé (utilisée à des fins
+de déboggage).
=item B<--usage>
-Afficher un bref message sur d'usage.
+Affiche un bref message sur l'utilisation d'Inkscape.
=back
=head1 CONFIGURATION
-Le fichier de configuration principal se trouve dans
-S<~/.config/Inkscape/preferences.xml ;> il contient de nombreux types de
+Le fichier de configuration principal est placé dans
+~/.config/Inkscape/preferences.xml. Il contient plusieurs types de
paramétrages dont vous pouvez changer la valeur dans Inkscape (la plupart
-dans la boîte de dialogue Préférences d'Inkscape). Vous pouvez également
-ajouter des configurations spécifiques dans les sous-répertoires S<suivants :>
+dans la boîte de dialogue Préférences d'Inkscape). Vous pouvez ajouter des
+configurations spécifiques dans les sous-répertoires S<suivants :>
-B<$HOME>/.config/Inkscape/extensions/ — extensions.
+B<$HOME>/.config/Inkscape/extensions/ - extensions.
-B<$HOME>/.config/Inkscape/icons/ — icônes.
+B<$HOME>/.config/Inkscape/icons/ - icônes.
-B<$HOME>/.config/Inkscape/keys/ — configuration des raccourcis clavier.
+B<$HOME>/.config/Inkscape/keys/ - association des touches du clavier aux
+commandes.
-B<$HOME>/.config/Inkscape/templates/ — modèles de document.
+B<$HOME>/.config/Inkscape/templates/ - modèles de fichiers.
=head1 DIAGNOSTICS
@@ -461,74 +456,73 @@ Le programme retourne la valeur zéro après une utilisation réussie ou
différente de zéro après un problème.
Des messages d'erreur et des avertissements divers peuvent être envoyés vers
-STDERR ou STDOUT. Si le programme se comporte de façon inconsistante avec un
-fichier SVG particulier ou plante, ces messages peuvent comporter des
-indices.
+STDERR ou STDOUT. Si le programme se comporte de façon erratique avec un
+fichier SVG particulier, ou se plante, il est utile de chercher des indices
+dans ces messages.
=head1 EXEMPLES
Bien qu'B<Inkscape> soit principalement conçu comme une application
graphique, il peut aussi être utilisé depuis la ligne de commande pour
-effectuer des opérations SVG.
+certaines opérations SVG.
Ouvrir un fichier SVG avec l'interface S<graphique :>
- inkscape fichier.svg
+ inkscape nomdefichier.svg
Imprimer un fichier S<SVG :>
- inkscape fichier.svg -p '| lpr'
+ inkscape nomdefichier.svg -p '| lpr'
-Exporter un fichier SVG en PNG avec la résolution par défaut de 96 ppp (une
-unité utilisateur SVG devient un pixel de l'image S<matricielle) :>
+Exporter un fichier SVG en PNG avec la résolution par défaut de 96 ppp (un
+pixel bitmap correspondant à une unité utilisateur S<SVG) :>
- inkscape fichier.svg --export-png=fichier.png
+ inkscape nomdefichier.svg --export-png=nomdefichier.png
-Idem, mais en forçant les dimensions du fichier à 600×400 S<pixels :>
+Idem, mais en forçant les dimensions du fichier à 600x400 S<pixels :>
- inkscape fichier.svg --export-png=fichier.png -w600 -h400
+ inkscape nomdefichier.svg --export-png=nomdefichier.png -w600 -h400
Idem, mais en exportant le dessin (la boîte englobante de tous les objets),
et pas la S<page :>
- inkscape fichier.svg --export-png=fichier.png --export-area-drawing
+ inkscape nomdefichier.svg --export-png=nomdefichier.png --export-area-drawing
-Exporter en PNG l'objet avec id="text1555", en utilisant le nom de fichier
-et la résolution utilisés la dernière fois qu'il a été exporté depuis
-l'interface S<graphique :>
+Exporter en PNG l'objet id="text1555", en utilisant le nom de fichier et la
+résolution utilisés la dernière fois qu'il a été exporté depuis l'interface
+S<graphique :>
- inkscape fichier.svg --export-id=text1555 --export-use-hints
+ inkscape nomdefichier.svg --export-id=text1555 --export-use-hints
Idem, mais en utilisant une résolution de 96 ppp, en spécifiant un nom de
-fichier et en arrondissant la zone à exporter aux valeurs entières les plus
-proches en unités utilisateur SVG (afin de préserver l'alignement des objets
-sur des pixels et minimiser S<l'anti-crénelage) :>
+fichier et en arrondissant la zone à exporter aux valeurs entières juste
+supérieures en unités utilisateur SVG (afin de préserver l'alignement des
+objets sur des pixels et minimiser S<l'anti-crénelage) :>
- inkscape fichier.svg --export-id=text1555 --export-png=text.png --export-area-snap
+ inkscape nomdefichier.svg --export-id=text1555 --export-png=text.png --export-area-snap
-Convertir un document du format SVG Inkscape au format SVG S<simple :>
+Convertir un document du format SVG Inkscape au format SVG S<brut :>
- inkscape fichier1.svg --export-plain-svg=fichier2.svg
+ inkscape nomdefichier1.svg --export-plain-svg=nomdefichier2.svg
Convertir un document SVG en EPS, en convertissant les textes en S<chemins :>
- inkscape fichier.svg --export-eps=fichier.eps --export-text-to-path
+ inkscape nomdefichier.svg --export-eps=nomdefichier.eps --export-text-to-path
-Demander la largeur de l'objet avec S<id="text1555" :>
+Demander la largeur de l'objet avec un S<id="text1555" :>
- inkscape fichier.svg --query-width --query-id text1555
+ inkscape nomdefichier.svg --query-width --query-id text1555
-Dupliquer l'objet avec id="path1555", appliquer une rotation de 90 degrés
-sur le duplicata, enregistrer le SVG et S<quitter :>
+Dupliquer l'objet ayant pour identifiant id="path1555", puis appliquer une
+rotation de 90 degrés sur le duplicat, enregistrer le SVG et S<quitter :>
- inkscape fichier.svg --select=path1555 --verb=EditDuplicate --verb=ObjectRotate90 --verb=FileSave --verb=FileClose
+ inkscape nomdefichier.svg --select=path1555 --verb=EditDuplicate --verb=ObjectRotate90 --verb=FileSave --verb=FileClose
-=head1 ENVIRONNEMENT
+=head1 ENVIRONEMENT
-B<DISPLAY> pour obtenir l'hôte par défaut et le numéro de la session
-graphique.
+B<DISPLAY> pour obtenir l'hôte par défaut et le numéro d'affichage.
B<TMPDIR> pour définir le chemin par défaut du répertoire à utiliser pour
stocker les fichier temporaires. Le répertoire doit exister.
@@ -545,11 +539,11 @@ I<fill_none.svg>) ou, si elles sont introuvables, depuis le fichier
I<icons.svg>. Si une icône n'est pas trouvée dans l'un de ces emplacements,
elle est chargée depuis l'emplacement par défaut du système.
-Les icônes nécessaires sont chargées depuis les fichiers SVG en cherchant
-l'identifiant SVG correspondant (par exemple, pour charger l'icône
-S<« fill_none »> depuis un fichier, le contenu identifié par l'identifiant SVG
-S<« fill_none »> est rendu en tant que cette icône, qu'il vienne du fichier
-I<fill_none.svg> ou du fichier I<icons.svg>).
+Les icônes nécessaires sont chargées depuis les fichiers SVG par recherche
+de l'id SVG correspondant (Par exemple, pour charger l'icône "fill_none"
+depuis un fichier, le contenu identifié par l'id SVG "fill_none" est rendu
+en tant que cette icône, qu'il vienne du fichier I<fill_none.svg> ou du
+fichier I<icons.svg>).
@@ -557,20 +551,20 @@ I<fill_none.svg> ou du fichier I<icons.svg>).
=head1 AUTRES INFORMATIONS
-La référence principale où trouver des informations sur B<Inkscape> est
-http://www.inkscape.org/. Le site web comporte des actualités, de la
-documentation, des didacticiels, des exemples, des archives des listes de
-diffusion, la dernière version du programme, les bases de données contenant
-les bogues et les demandes de fonctionnalité, des forums, et encore
-davantage.
+L'endroit principal pour trouver des informations sur B<Inkscape> est
+http://www.inkscape.org/. Le site web contient des liens vers d'autres
+éléments S<pertinents :> documentation, didacticiels, manuel de l'utilisateur,
+exemples, archives des listes de diffusion, la dernière version d'Inkscape,
+les bases contenant les défauts et les demandes d'évolution, et bien
+d'autres choses.
=head1 VOIR AUSSI
potrace, cairo, rsvg(1), batik, ghostscript, pstoedit.
-Suite de tests de conformité S<SVG :> http://www.w3.org/Graphics/SVG/Test/
+Suite de tests de conformité S<SVG :> http://www.w3.org/Graphics/SVG/Test/
-Validation de S<SVG :> http://jiggles.w3.org/svgvalidator/
+Validation de S<SVG :> http://jiggles.w3.org/svgvalidator/
I<Scalable Vector Graphics (SVG) 1.1 Specification> I<W3C Recommendation 14
January 2003> L<http://www.w3.org/TR/SVG11/>
@@ -591,49 +585,49 @@ W3C> L<http://www.w3.org/TR/DOM-Level-2-Core/>
Pour vous familiariser avec l'utilisation de l'interface graphique
d'Inkscape, consultez les didacticiels dans Aide > Didacticiels.
-En plus du SVG, Inkscape peut importer (Fichier > Importer) la plupart des
-formats d'images matricielles (PNG, BMP, JPG, XPM, GIF, etc.), du texte brut
-(nécessite Perl), les formats PS et EPS (nécessite Ghostscript) et les
-formats PDF et AI (AI version 9.0 ou ultérieur).
+Inkscape permet d'importer (Fichier > Importer) la plupart des formats
+bitmaps PNG, BMP, JPG, XPM, GIF, etc.), du texte brut (nécessite Perl), PS
+et EPS (nécessite Ghostscript) et les formats PDF et AI (documents Adobe
+Illustrato 9.0 ou plus récent).
-Inkscape peut exporter (Fichier > Exporter une image PNG) des images PNG 32
-bits, mais aussi aux formats AI, PS, EPS, PDF, DXF et plusieurs autres
-formats via Fichier > Enregistrer sous.
+Inkscape permet d'exporter (Fichier > Exporter une image PNG) des images PNG
+32-bits, mais aussi aux formats AI, PS, EPS, PDF, DXF et plusieurs autres
+formats (via Fichier > Enregistrer sous).
Inkscape supporte la pression et l'inclinaison du stylet d'une tablette
-graphique pour la largeur, l'angle et la force d'action de plusieurs outils,
-dont la plume calligraphique.
+graphique pour la largeur, la force et l'angle de plusieurs outils dont la
+plume calligraphique.
-Inkscape comporte une interface graphique pour le moteur de vectorisation
-d'image matricielle Potrace (http://potrace.sf.net) qui est inclus dans
-Inkscape.
+Inkscape comporte une interface graphique pour le moteur de vectorisation de
+bitmaps Potrace (http://potrace.sf.net) qui est inclus dans Inkscape.
Inkscape peut utiliser des scripts externes (filtres de stdin vers stdout)
-représentés par des commandes dans le menu Effets. Un script peut faire
-intervenir les boîtes de dialogue de l'interface graphique pour définir
-différents paramètres et peut obtenir les identifiants des objets
-sélectionnés sur lesquels agir depuis la ligne de commande. Inkscape est
-livré avec un assortiment d'effets écrits en Python.
+représentés par des commandes dans le menu Effets. Un script peut avoir une
+interface graphique, sous forme de boîte de dialogue, permettant de définir
+différents paramètres et peut obtenir les IDs des objets sélectionnés sur
+lesquels agir depuis la ligne de commande. Inkscape est livré avec un
+assortiment d'effets écrits en Python dédiés principalement à la
+manipulation de chemin.
=head1 RACCOURCIS CLAVIER
Pour obtenir une liste complète des raccourcis clavier et souris, consultez
le fichier doc/keys.html, ou utilisez la commande Clavier et souris dans le
-menu Aide.
+menu d'aide de l'interface graphique.
-=head1 BOGUES
+=head1 DÉFAUTS
-Beaucoup de bogues sont S<connus ;> veuillez vous référer au site web
-(inkscape.org) pour vérifier ceux qui ont déjà été rapportés et pour
-soumettre de nouveaux problèmes. Consultez aussi la section S<« Known> S<Issues »>
-des notes de livraison de votre version (dans le fichier `NEWS').
+Beaucoup de bugs sont S<connus ;> veuillez s'il vous plaît consulter le site
+web pour vérifier ceux qui ont déjà été rapportés et pour soumettre de
+nouveaux problèmes. Consultez aussi la section "Known Issues" des notes de
+votre version (dans le fichier `NEWS').
=head1 AUTEURS
Ce code doit son existence à un grand nombre de contributeurs tout au long
de ses différentes incarnations. La liste qui suit est certainement
incomplète mais permet de reconnaître les nombreuses épaules sur lesquelles
-cette application S<repose :>
+cette application s'est S<appuyée :>
[% INCLUDE "AUTHORS" %]
@@ -644,7 +638,7 @@ E<lt>brycehar@bryceharrington.orgE<gt>.
Le code qui allait devenir Inkscape est né en 1999, avec le programme Gill,
GNOME Illustrator, créé par Raph Levien. L'objectif défini pour Gill était
-de supporter complètement le format SVG. Raph a codé le modèle PostScript de
+de supporter complètement le format SVG. Raph a codé le modèle Postcript de
courbes de Bézier, incluant le remplissage et le contour, les coiffes et
raccords de lignes, le texte, etc. La page de Raph consacrée à Gill se
trouve sur http://www.levien.com/svg/. Le travail sur Gill semble avoir
@@ -654,45 +648,44 @@ L'incarnation suivante du code allait devenir le très populaire Sodipodi,
mené par Lauris Kaplinski. Le code est devenu un outil d'illustration
puissant après plusieurs années de travail, ajoutant plusieurs nouvelles
fonctionnalités, le support multilingue, le portage sous Windows et d'autres
-systèmes d'exploitation, et éliminant certaines dépendances.
-
-Inkscape a été lancé en 2003 par quatre développeurs actifs de Sodipodi,
-Bryce Harrington, MenTaLguY, Nathan Hurst et Ted Gould, qui voulaient faire
-prendre une orientation différente au code en termes de focalisation sur la
-conformité SVG, d'aspect et de fonctionnement de l'interface, et d'ouverture
-du développement à plus de participants. Le projet a progressé rapidement,
-gagnant de nombreux contributeurs très actifs et une multitude de
+systèmes d'exploitation et éliminant certaines dépendances.
+
+Inkscape a été lancé en 2003 par quatre développeurs actifs de Sodipodi
+(Bryce Harrington, MenTaLguY, Nathan Hurst et Ted Gould), qui voulaient
+faire prendre une orientation différente au code en termes de focalisation
+sur la conformité SVG, aspect et fonctionnement de l'interface, et
+d'opportunités de développement ouvertes à plus de participants. Le projet a
+progressé rapidement, gagnant de nombreux contributeurs et une multitude de
fonctionnalités.
Beaucoup de travail a été depuis consacré à la stabilisation du code et à
l'internationalisation. Le moteur de rendu hérité de Sodipodi comportait de
-nombreux cas limites mathématiques qui entraînaient des plantages lorsque le
-programme était utilisé à des fins S<inhabituelles ;> ce moteur a alors été
-remplacé par Livarot qui, bien qu'imparfait, générait moins d'erreurs. Le
-projet a également adopté la bonne habitude de publier son code
-régulièrement, et encouragé les utilisateurs à tester des versions en
-développement du S<logiciel ;> cela a aidé à identifier les nouveaux bogues
-rapidement, et à assurer qu'il était facile pour les utilisateurs de
-vérifier les correctifs. Inkscape a ainsi acquis une réputation de programme
-robuste et fiable.
+nombreuses spécificités qui entrainaient de plantages lorsque l'utilisation
+du programme sortait des sentiers battus. Ce moteur a alors été remplacé par
+Livarot qui, bien qu'imparfait, générait moins d'erreurs. Le projet a
+également adopté la bonne habitude de publier son code régulièrement, et
+encouragé les utilisateurs à tester des versions en développement du
+logiciel, ce qui a bien aidé dans l'identification des nouveaux défauts, et
+donné les moyens aux utilisateurs de vérifier que les anciens étaient bien
+corrigés. Inkscape a ainsi acquis une réputation de programme robuste et
+fiable.
En parallèle, des efforts ont été faits pour améliorer
l'internationalisation et la localisation de l'interface, ce qui a apporté
-au projet de nouveaux contributeurs du monde entier.
+au projet de nouveaux contributeurs tout autour du monde.
Inkscape a eu un impact positif sur l'attractivité visuelle de l'Open Source
-en général, en offrant un outil pour créer et partager des icônes, des
-écrans d'accueil, de l'art pour le web, etc. D'une certaine façon, bien que
-n'étant qu'un S<« simple> outil de S<dessin »,> Inkscape a joué un rôle important
-en rendant l'Open Source plus stimulant visuellement pour un plus large
-public.
+en général, en offrant un outil pour créer et partager des icônes, écrans
+d'accueil, art pour le web, etc. D'une certaine façon, bien que n'étant
+qu'un "simple outil de dessin", Inkscape a joué un rôle important en rendant
+l'Open Source plus stimulant visuellement parlant pour un plus large public.
-=head1 COPYRIGHT ET LICENCE
+=head1 COPYRIGHT ET LICENSE
B<Copyright (C)> 1999-2015 par les auteurs.
-B<Inkscape> est un logiciel S<libre ;> vous pouvez le redistribuer et/ou le
-modifier selon les conditions de la licence GPL.
+B<Inkscape> est un logiciel libre; vous pouvez le redistribuer et/ou le
+modifier selon les termes de la license GPL.
diff --git a/share/extensions/restack.inx b/share/extensions/restack.inx
index e14d2d5d5..4f5f577cb 100644
--- a/share/extensions/restack.inx
+++ b/share/extensions/restack.inx
@@ -9,7 +9,7 @@
<_param name="desc_dir" type="description" appearance="header">Restack Direction</_param>
<param name="nb_direction" type="notebook">
<page name="presets" _gui-text="Presets">
- <param name="direction" type="enum" gui-text="">
+ <param name="direction" type="enum" _gui-text="">
<_item value="lr">Left to Right (0)</_item>
<_item value="bt">Bottom to Top (90)</_item>
<_item value="rl">Right to Left (180)</_item>
@@ -36,7 +36,7 @@
</page>
<page name="z_order" _gui-text="Based on Z-Order">
<_param name="desc_zsort" type="description" appearance="header">Restack Mode</_param>
- <param name="zsort" type="enum" gui-text="">
+ <param name="zsort" type="enum" _gui-text="">
<_item value="rev">Reverse Z-Order</_item>
<_item value="rand">Shuffle Z-Order</_item>
</param>
diff --git a/share/tutorials/tutorial-advanced.de.svg b/share/tutorials/tutorial-advanced.de.svg
index 4137908eb..beff5e51e 100644
--- a/share/tutorials/tutorial-advanced.de.svg
+++ b/share/tutorials/tutorial-advanced.de.svg
@@ -341,7 +341,7 @@ Bulia Byak (buliabyak@users.sf.net) und Josh Andler (scislac@users.sf.net)
<flowRegion>
<use y="0" x="0" xlink:href="#d0e522"/>
</flowRegion>
- <flowDiv xml:space="preserve">Wählen Sie das rote Objekt und bearbeiten Sie es mit dem Knotenwerkzeug. Achten Sie dabei darauf, wie sich die beiden verbundene Versatzobjekte verhalten. Jetzt wählen Sie ein Versatzobjekt aus und ziehen an seinem Anfasser, um den Versatzabstand anzupassen. Beachten Sie, dass Sie die Versatzobjekte unabhängig bewegen oder verändern können, ohne dass sie ihre Verbindung zum Ursprungspfad verlieren.</flowDiv>
+ <flowDiv xml:space="preserve">Wählen Sie das rote Objekt und bearbeiten Sie seine Knoten. Sehen Sie, wie sich beide verbundene Versätze anpassen? Jetzt wählen Sie einen Versatz und ziehen an seinem Anfasser, um den Versatzabstand anzupassen. Beobachten Sie, wie ein Verschieben des Ursprungspfades alle seine verbundenen Versatzobjekte bewegt, und wie Sie die Versatzobjekte unabhängig bewegen oder verändern können, ohne dass sie ihre Verbindung zum Ursprungspfad verlieren.</flowDiv>
</flowRoot>
<g id="advanced-f11-de.svgg8809" xmlns:cc="http://creativecommons.org/ns#" transform="translate(10 3835.8)">
<path id="advanced-f11-de.svgpath1987" d="m113.67 73.853c-16.593-6.2126-28.727-20.624-26.506-37.584 1.0744-8.2045 7.151-22.522 11.082-29.183 2.3174-3.9267 0.06287 6.3871-0.15929 8.3469-0.91169 8.0423-0.66462 17.609 6.2279 23.314 3.4417 2.8487 8.3216 3.3459 6.8865-2.8132-2.1819-9.3644 10.903-16.851 20.11-13.935 7.1073 2.2509 12.728 9.4197 10.968 16.949-1.9067 8.1575-11.609 4.7505-13.16-2.7849-1.5341-7.452-10.93 1.6922-9.8554 7.2857 1.4757 7.6817 9.5717 9.5136 16.01 10.234 7.9762 0.892 18.699-2.9107 19.601-11.738 0.7287-7.1304 3.8134-14.344 11.819-15.244 9.3783-1.0545 19.572-0.8772 33.297-0.1784-15.926 0-23.984 10.502-28.311 19.012-4.0019 7.8719-13.273 12.644-21.559 13.805-10.357 1.4509-24.134-0.7852-30.181-0.7852 0 10.717 9.0837 15.683 16.616 15.405 6.9546-0.2568 11.568-8.6819 18.445-11.49 8.5192-3.4786 18.514-3.2501 26.134 2.2007 6.039 4.3193 12.03 12.117 8.6618 19.643-3.3562 7.4991-13.903 8.7109-20.324 3.8681-5.8264-4.3942-12.202-9.1596-20.204-9.1204-7.0617 0.0345-11.043 2.4957-12.624 10.319-2.5288-6.8607-7.0498-9.8139-22.975-15.526z" sodipodi:nodetypes="csssssssssssscsscsssssscs" inkscape:connector-curvature="0" stroke="#ff0100" stroke-width="0.675" fill="none"/>
diff --git a/share/tutorials/tutorial-basic.de.svg b/share/tutorials/tutorial-basic.de.svg
index 56dce768c..fc7299de9 100644
--- a/share/tutorials/tutorial-basic.de.svg
+++ b/share/tutorials/tutorial-basic.de.svg
@@ -110,36 +110,36 @@
<flowRegion>
<use y="0" x="0" xlink:href="#d0e111"/>
</flowRegion>
- <flowDiv xml:space="preserve">Um ein neues, leeres Dokument zu erzeugen, benutzt man <flowSpan font-family="sans-serif">Datei &gt; Neu</flowSpan> oder drückt <flowSpan font-weight="bold">Strg+N</flowSpan>. Um ein neues Dokument aus einer der vielen verfügbaren Vorlagen für Inkscape zu erstellen, verwendet man <flowSpan font-family="sans-serif">Datei &gt; Neu aus Vorlage</flowSpan> oder drückt <flowSpan font-weight="bold">Strg+Alt+N</flowSpan>.</flowDiv>
+ <flowDiv xml:space="preserve">Um ein neues, leeres Dokument zu erzeugen, benutzt man <flowSpan font-family="sans-serif">Datei &gt; Neu &gt; Standard</flowSpan> oder drückt <flowSpan font-weight="bold">Strg+N</flowSpan>. Um ein neues Dokument aus einer der vielen verfügbaren Vorlagen für Inkscape zu erstellen, verwendet man <flowSpan font-family="sans-serif">Datei &gt; Neu &gt; Vorlagen...</flowSpan> oder drückt <flowSpan font-weight="bold">Strg+Alt+N</flowSpan></flowDiv>
</flowRoot>
- <rect id="d0e126" display="none" height="1e3px" width="288" y="679.55" x="10"/>
+ <rect id="d0e125" display="none" height="1e3px" width="288" y="679.55" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e126"/>
+ <use y="0" x="0" xlink:href="#d0e125"/>
</flowRegion>
<flowDiv xml:space="preserve">Ein bestehendes SVG-Dokument öffnet man mit <flowSpan font-family="sans-serif">Datei &gt; Öffnen...</flowSpan> (<flowSpan font-weight="bold">Strg+O</flowSpan>). Zum Speichern wählt man <flowSpan font-family="sans-serif">Datei &gt; Speichern</flowSpan> (<flowSpan font-weight="bold">Strg+S</flowSpan>), oder <flowSpan font-family="sans-serif">Speichern unter…</flowSpan> (<flowSpan font-weight="bold">Umschalt+Strg+S</flowSpan>), um das Dokument unter einem neuen Namen zu speichern (Inkscape kann gelegentlich noch abstürzen, daher besser öfter speichern!).</flowDiv>
</flowRoot>
- <rect id="d0e147" display="none" height="1e3px" width="288" y="741.08" x="10"/>
+ <rect id="d0e146" display="none" height="1e3px" width="288" y="741.08" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e147"/>
+ <use y="0" x="0" xlink:href="#d0e146"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape verwendet das SVG-Format (Scalable Vector Graphics) für seine Dateien. SVG ist ein offener Standard, der von vielen Zeichenprogrammen unterstützt wird. SVG-Dateien basieren auf dem XML-Standard und können mit jedem Text- oder XML-Editor (zusätzlich zu dem in Inkscape, natürlich) verändert werden. Neben SVG kann Inkscape auch einige andere Formate importieren und exportieren (z. B. EPS und PNG).</flowDiv>
</flowRoot>
- <rect id="d0e150" display="none" height="1e3px" width="288" y="822.71" x="10"/>
+ <rect id="d0e149" display="none" height="1e3px" width="288" y="822.71" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e150"/>
+ <use y="0" x="0" xlink:href="#d0e149"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape öffnet ein separates Programmfenster für jedes einzelne Dokument. Man kann mit dem Fenster-Manager dazwischen wechseln (z. B. durch <flowSpan font-weight="bold">Alt+Tab</flowSpan>) oder auch mit dem Inkscape-eigenen Kurzbefehl <flowSpan font-weight="bold">Strg+Tab</flowSpan>, der durch alle geöffneten Dokument-Fenster wandert (erstellen Sie jetzt ein neues Dokument und schalten Sie zur Übung zwischen diesem und dem Tutorial hin und her). Hinweis: Inkscape behandelt diese Fenster wie Reiter in einem Webbrowser. Das bedeutet, dass der Kurzbefehl </flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="927.212349" x="10" font-family="sans-serif" fill="#000000">
<tspan y="927.212349" x="10">Formen erstellen</tspan>
</text>
- <rect id="d0e165" display="none" height="1e3px" width="288" y="932.41" x="10"/>
+ <rect id="d0e164" display="none" height="1e3px" width="288" y="932.41" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e165"/>
+ <use y="0" x="0" xlink:href="#d0e164"/>
</flowRegion>
<flowDiv xml:space="preserve">Nun ist es Zeit, ein paar schicke Formen zu erstellen! Klicken Sie auf das Rechteckwerkzeug in der Werkzeugleiste links (oder drücken Sie <flowSpan font-weight="bold">F4</flowSpan>) und klicken und ziehen Sie, entweder in einem neuen, leeren Dokument oder gleich hier:</flowDiv>
</flowRoot>
@@ -154,10 +154,10 @@
<rect id="basic-f01-de.svgrect743" fill-rule="evenodd" transform="translate(10 990.19)" height="4.1162" width="7.0564" stroke="#000" y="28.116" x="232.79" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#00f"/>
<rect id="basic-f01-de.svgrect744" fill-rule="evenodd" transform="translate(10 990.19)" height="1.7641" width="4.1162" stroke="#000" y="20.472" x="247.49" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#00f"/>
<rect id="basic-f01-de.svgrect745" fill-rule="evenodd" transform="translate(10 990.19)" height="1.1761" width="2.9402" stroke="#000" y="17.532" x="259.25" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#00f"/>
- <rect id="d0e181" display="none" height="1e3px" width="288" y="1051.9" x="10"/>
+ <rect id="d0e180" display="none" height="1e3px" width="288" y="1051.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e181"/>
+ <use y="0" x="0" xlink:href="#d0e180"/>
</flowRegion>
<flowDiv xml:space="preserve">Wie Sie sehen können, sind Standard-Rechtecke blau gefüllt, mit einer schwarzen <flowSpan font-style="italic">Kontur</flowSpan> (der Umrandung), und vollständig deckend. Wir werden noch sehen, wie man das ändern kann. Mit anderen Werkzeugen lassen sich auch Ellipsen, Sterne und Spiralen erstellen:</flowDiv>
</flowRoot>
@@ -177,173 +177,173 @@
<path id="basic-f02-de.svgpath1312" sodipodi:sides="5" fill-opacity=".75" inkscape:flatsided="false" stroke="#000" stroke-width="1pt" fill="#ff0" style="color:#000000" fill-rule="evenodd" transform="translate(26.429 1064.8)" inkscape:rounded="0.0000000" sodipodi:r1="16.043627" sodipodi:r2="8.0218134" sodipodi:arg1="0.29358899" sodipodi:arg2="0.92190752" sodipodi:type="star" d="m144.64 71.291l-10.51 1.748-4.51 9.649-4.91-9.455-10.58-1.315 7.48-7.592-2.02-10.461 9.53 4.763 9.33-5.151-1.59 10.536 7.78 7.278z" inkscape:randomized="0.0000000" sodipodi:cy="66.647896" sodipodi:cx="129.28571"/>
<path id="basic-f02-de.svgpath1314" sodipodi:sides="5" fill-opacity=".75" inkscape:flatsided="false" stroke="#000" stroke-width="1pt" fill="#ff0" style="color:#000000" fill-rule="evenodd" transform="translate(26.429 1064.8)" inkscape:rounded="0.0000000" sodipodi:r1="7.9859571" sodipodi:r2="3.9929783" sodipodi:arg1="0.46364761" sodipodi:arg2="1.0919661" sodipodi:type="star" d="m162.5 66.648l-5.3-0.028-3.03 4.353-1.61-5.052-5.08-1.535 4.31-3.095-0.11-5.302 4.27 3.139 5.01-1.741-1.66 5.035 3.2 4.226z" inkscape:randomized="0.0000000" sodipodi:cy="63.076466" sodipodi:cx="155.35715"/>
<path id="basic-f02-de.svgpath1316" sodipodi:sides="5" fill-opacity=".75" inkscape:flatsided="false" stroke="#000" stroke-width="1pt" fill="#ff0" style="color:#000000" fill-rule="evenodd" transform="translate(26.429 1064.8)" inkscape:rounded="0.0000000" sodipodi:r1="5.8138647" sodipodi:r2="2.9069321" sodipodi:arg1="0.74194727" sodipodi:arg2="1.3702658" sodipodi:type="star" d="m180 69.505l-3.71-1.08-2.99 2.441-0.12-3.859-3.24-2.09 3.63-1.305 0.99-3.733 2.36 3.052 3.85-0.216-2.17 3.191 1.4 3.599z" inkscape:randomized="0.0000000" sodipodi:cy="65.576469" sodipodi:cx="175.71429"/>
- <rect id="d0e197" display="none" height="1e3px" width="288" y="1182.3" x="10"/>
+ <rect id="d0e196" display="none" height="1e3px" width="288" y="1182.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e197"/>
+ <use y="0" x="0" xlink:href="#d0e196"/>
</flowRegion>
<flowDiv xml:space="preserve">Diese Werkzeuge werden unter dem Begriff <flowSpan font-style="italic">Form-Werkzeuge</flowSpan> zusammengefasst. Jede erzeugte Form zeigt einen oder mehrere rautenförmige <flowSpan font-style="italic">Anfasser</flowSpan>. Ziehen Sie mit der Maus daran, um zu sehen wie sich die Form dadurch verändert. Die Werkzeugeinstellungsleiste für Formen bietet ebenfalls die Möglichkeit, die Form zu verändern. Die Einstellungen verändern die aktuell ausgewählten Objekte (die, die die entsprechenden Anfasser haben) <flowSpan font-style="italic">und</flowSpan> setzt den Standard für alle neuen Objekte.</flowDiv>
</flowRoot>
- <rect id="d0e209" display="none" height="1e3px" width="288" y="1274.6" x="10"/>
+ <rect id="d0e208" display="none" height="1e3px" width="288" y="1274.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e209"/>
+ <use y="0" x="0" xlink:href="#d0e208"/>
</flowRegion>
<flowDiv xml:space="preserve">Um die letzte Aktion <flowSpan font-style="italic">rückgängig</flowSpan> zu machen, drückt man <flowSpan font-weight="bold">Strg+Z</flowSpan>. (Oder, wenn Sie es sich wieder anders überlegen, benutzen Sie <flowSpan font-style="italic">Wiederherstellen</flowSpan> durch <flowSpan font-weight="bold">Umschalt+Strg+Z</flowSpan>.)</flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="1326.6269360000001" x="10" font-family="sans-serif" fill="#000000">
<tspan y="1326.6269360000001" x="10">Bewegen, Größe ändern, Drehen</tspan>
</text>
- <rect id="d0e230" display="none" height="1e3px" width="288" y="1331.8" x="10"/>
+ <rect id="d0e229" display="none" height="1e3px" width="288" y="1331.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e230"/>
+ <use y="0" x="0" xlink:href="#d0e229"/>
</flowRegion>
<flowDiv xml:space="preserve">Das am häufigsten verwendete Werkzeug in Inkscape ist das <flowSpan font-style="italic">Auswahlwerkzeug</flowSpan>. Klicken Sie den obersten Knopf (mit dem Pfeil) in der Werkzeugleiste, oder drücken Sie <flowSpan font-weight="bold">F1</flowSpan> oder <flowSpan font-weight="bold">Leertaste</flowSpan>. Nun können Sie jedes Objekt auf der Seite auswählen. Probieren Sie das an dem Rechteck unten.</flowDiv>
</flowRoot>
<rect id="basic-f03-de.svgrect804" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 1398.6)" height="38.81" width="40.574" stroke="#000" y="-.47140" x="25.427" stroke-width="1pt" fill="#00f"/>
- <rect id="d0e252" display="none" height="1e3px" width="288" y="1450.8" x="10"/>
+ <rect id="d0e251" display="none" height="1e3px" width="288" y="1450.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e252"/>
+ <use y="0" x="0" xlink:href="#d0e251"/>
</flowRegion>
<flowDiv xml:space="preserve">Sie sehen jetzt acht pfeilförmige Anfasser um das markierte Objekt. Jetzt haben Sie mehrere Möglichkeiten:</flowDiv>
</flowRoot>
<circle cy="0" cx="0" r="2" transform="translate(15 1485.3)"/>
- <rect id="d0e259" display="none" height="1e3px" width="258" y="1479.3" x="20"/>
+ <rect id="d0e258" display="none" height="1e3px" width="258" y="1479.3" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e259"/>
+ <use y="0" x="0" xlink:href="#d0e258"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-style="italic">Verschieben</flowSpan> des Objekts durch Ziehen mit gedrückter linker Maustaste. (Drücken Sie <flowSpan font-weight="bold">Strg</flowSpan>, um die Bewegung auf horizontale oder vertikale Richtung zu beschränken.)</flowDiv>
</flowRoot>
<circle cy="0" cx="0" r="2" transform="translate(15 1524.5)"/>
- <rect id="d0e270" display="none" height="1e3px" width="258" y="1518.5" x="20"/>
+ <rect id="d0e269" display="none" height="1e3px" width="258" y="1518.5" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e270"/>
+ <use y="0" x="0" xlink:href="#d0e269"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-style="italic">Ändern Sie die Größe</flowSpan> des Objektes durch Klicken und Ziehen an einem Anfasser. (Drücken Sie <flowSpan font-weight="bold">Strg</flowSpan> zum Beibehalten des Seitenverhältnisses.)</flowDiv>
</flowRoot>
- <rect id="d0e279" display="none" height="1e3px" width="288" y="1558.4" x="10"/>
+ <rect id="d0e278" display="none" height="1e3px" width="288" y="1558.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e279"/>
+ <use y="0" x="0" xlink:href="#d0e278"/>
</flowRegion>
<flowDiv xml:space="preserve">Nun klicken Sie noch einmal auf das Rechteck. Die Anfasser sehen jetzt anders aus. Jetzt gibt es folgende Möglichkeiten:</flowDiv>
</flowRoot>
<circle cy="0" cx="0" r="2" transform="translate(15 1592.9)"/>
- <rect id="d0e286" display="none" height="1e3px" width="258" y="1586.9" x="20"/>
+ <rect id="d0e285" display="none" height="1e3px" width="258" y="1586.9" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e286"/>
+ <use y="0" x="0" xlink:href="#d0e285"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-style="italic">Drehen</flowSpan> des Objektes durch Klicken und Ziehen an den Eck-Anfassern. (Zum stufenweisen Drehen in Schritten von 15° halten Sie <flowSpan font-weight="bold">Strg</flowSpan> gedrückt. Verschieben Sie das Kreuz, um den Drehmittelpunkt festzulegen.)</flowDiv>
</flowRoot>
<circle cy="0" cx="0" r="2" transform="translate(15 1642.7)"/>
- <rect id="d0e297" display="none" height="1e3px" width="258" y="1636.7" x="20"/>
+ <rect id="d0e296" display="none" height="1e3px" width="258" y="1636.7" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e297"/>
+ <use y="0" x="0" xlink:href="#d0e296"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-style="italic">Scheren</flowSpan> Sie das Objekt durch Klicken und Ziehen an den Anfassern an den Längsseiten. (Drücken Sie <flowSpan font-weight="bold">Strg</flowSpan> zum stufenweisen Scheren in Schritten von 15°.)</flowDiv>
</flowRoot>
- <rect id="d0e306" display="none" height="1e3px" width="288" y="1675.3" x="10"/>
+ <rect id="d0e305" display="none" height="1e3px" width="288" y="1675.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e306"/>
+ <use y="0" x="0" xlink:href="#d0e305"/>
</flowRegion>
<flowDiv xml:space="preserve">Wenn man das Auswahlwerkzeug verwendet und das Objekt ausgewählt ist, kann man auch die Eingabefelder (über der Zeichenfläche) benutzen, um genaue Werte für die Koordinaten (X und Y) und die Größe (B und H) einzugeben.</flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="1737.8410750000003" x="10" font-family="sans-serif" fill="#000000">
<tspan y="1737.8410750000003" x="10">Verändern mit der Tastatur</tspan>
</text>
- <rect id="d0e315" display="none" height="1e3px" width="288" y="1743" x="10"/>
+ <rect id="d0e314" display="none" height="1e3px" width="288" y="1743" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e315"/>
+ <use y="0" x="0" xlink:href="#d0e314"/>
</flowRegion>
<flowDiv xml:space="preserve">Eine der Eigenschaften von Inkscape, die es von vielen anderen Vektorzeichenprogrammen unterscheidet, ist die gute Tastaturbedienbarkeit. Es gibt fast keinen Befehl oder keine Aktion, die nicht mit der Tastatur ausführbar sind, und Objektmanipulation ist da keine Ausnahme.</flowDiv>
</flowRoot>
- <rect id="d0e318" display="none" height="1e3px" width="288" y="1801.8" x="10"/>
+ <rect id="d0e317" display="none" height="1e3px" width="288" y="1801.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e318"/>
+ <use y="0" x="0" xlink:href="#d0e317"/>
</flowRegion>
<flowDiv xml:space="preserve">Man kann Objekte mit der Tastatur verschieben (<flowSpan font-weight="bold">Pfeil</flowSpan>-Tasten), ihre Größe ändern (<flowSpan font-weight="bold">&lt;</flowSpan>- und <flowSpan font-weight="bold">&gt;</flowSpan>-Tasten) und sie drehen (<flowSpan font-weight="bold">[</flowSpan>- und <flowSpan font-weight="bold">]</flowSpan>-Tasten). Die Standardschrittweite für Bewegung und Größenänderung mit der Tastatur ist 2 px, mit <flowSpan font-weight="bold">Umschalt</flowSpan> das Zehnfache davon. <flowSpan font-weight="bold">Strg+&lt;</flowSpan> und <flowSpan font-weight="bold">Strg+&gt;</flowSpan> vergrößern auf 200% oder verkleinern auf 50% der Originalgröße. Standardmäßig werden Objekte in Schritten von 15° gedreht, mit gedrückter <flowSpan font-weight="bold">Strg</flowSpan>-Taste in 90°-Schritten.</flowDiv>
</flowRoot>
- <rect id="d0e348" display="none" height="1e3px" width="288" y="1883.5" x="10"/>
+ <rect id="d0e347" display="none" height="1e3px" width="288" y="1883.5" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e348"/>
+ <use y="0" x="0" xlink:href="#d0e347"/>
</flowRegion>
<flowDiv xml:space="preserve">Besonders nützlich sind <flowSpan font-style="italic">pixelgenaue Manipulationen</flowSpan> durch gleichzeitiges Drücken von <flowSpan font-weight="bold">Alt</flowSpan> mit den entsprechenden Tasten. Mit <flowSpan font-weight="bold">Alt+Pfeiltaste</flowSpan> verschiebt man das markierte Objekt um 1 Pixel <flowSpan font-style="italic">bei gewähltem Zoomfaktor</flowSpan> (also 1 <flowSpan font-style="italic">Bildschirm-Pixel</flowSpan>, nicht zu verwechseln mit der px-Einheit, welche eine SVG-Längeneinheit unabhängig vom Zoomfaktor ist). Das bedeutet, wenn man hineinzoomt, dann entspricht ein einmaliger Druck auf <flowSpan font-weight="bold">Alt+Pfeil</flowSpan> einer <flowSpan font-style="italic">kleineren</flowSpan> absoluten Bewegung, obwohl es auf dem Bildschirm immer noch eine Bewegung um 1 Pixel ist. So ist es möglich, Objekte mit einer beliebig hohen Präzision zu positionieren, einfach indem man hinein- oder herauszoomt.</flowDiv>
</flowRoot>
- <rect id="d0e372" display="none" height="1e3px" width="288" y="2006.1" x="10"/>
+ <rect id="d0e371" display="none" height="1e3px" width="288" y="2006.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e372"/>
+ <use y="0" x="0" xlink:href="#d0e371"/>
</flowRegion>
<flowDiv xml:space="preserve">Genauso ändern <flowSpan font-weight="bold">Alt+&lt;</flowSpan> und <flowSpan font-weight="bold">Alt+&gt;</flowSpan> die Objektgröße so, das die sichtbare Größe um jeweils ein Bildschirm-Pixel verändert wird. Die Tasten <flowSpan font-weight="bold">Alt+[</flowSpan> und <flowSpan font-weight="bold">Alt+]</flowSpan> drehen den Punkt, der am weitesten vom Zentrum entfernt ist, um ein Bildschirm-Pixel weiter.</flowDiv>
</flowRoot>
- <rect id="d0e387" display="none" height="1e3px" width="288" y="2055.3" x="10"/>
+ <rect id="d0e386" display="none" height="1e3px" width="288" y="2055.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e387"/>
+ <use y="0" x="0" xlink:href="#d0e386"/>
</flowRegion>
<flowDiv xml:space="preserve">Anmerkung: Linux-Benutzer erhalten möglicherweise nicht den gewünschten Effekt mit <flowSpan font-weight="bold">Alt+Pfeiltaste</flowSpan> und ein paar anderen Tastenkombinationen, wenn ihr Fenstermanager diese Tastendrücke abfängt, bevor sie zu Inkscape gelangen. Eine Lösung ist es, die Einstellungen des Fenstermanagers entsprechend zu ändern.</flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="2128.5351450000007" x="10" font-family="sans-serif" fill="#000000">
<tspan y="2128.5351450000007" x="10">Mehrfachauswahl</tspan>
</text>
- <rect id="d0e399" display="none" height="1e3px" width="288" y="2133.7" x="10"/>
+ <rect id="d0e398" display="none" height="1e3px" width="288" y="2133.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e399"/>
+ <use y="0" x="0" xlink:href="#d0e398"/>
</flowRegion>
<flowDiv xml:space="preserve">Man kann mehrere Objekte gleichzeitig durch <flowSpan font-weight="bold">Umschalt+Klick</flowSpan>, oder durch <flowSpan font-weight="bold">Ziehen</flowSpan> um die Objekte herum auswählen. Letzteres wird <flowSpan font-style="italic">Gummibandauswahl</flowSpan> genannt. (Das Auswahlwerkzeug erzeugt das Gummiband durch Ziehen über einem leeren Teil der Seite, aber immer auch, wenn vor dem Ziehen <flowSpan font-weight="bold">Umschalt</flowSpan> gedrückt wird.) Üben Sie das Markieren aller drei Formen hier unten:</flowDiv>
</flowRoot>
<rect id="basic-f04-de.svgrect878" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2211.1)" height="26.656" width="25.253" stroke="#000" y="5.9827" x="58.428" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".80106pt" fill="#00f"/>
<path id="basic-f04-de.svgpath879" d="m134.86 1251.7c0 9.8339-9.8015 17.806-21.892 17.806-12.091 0-21.892-7.9719-21.892-17.806 0-9.8338 9.8015-17.806 21.892-17.806 12.091 0 21.892 7.9719 21.892 17.806z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2211.1) matrix(.80106 0 0 .80106 32.311 -983.83)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#f00"/>
<path id="basic-f04-de.svgpath1290" style="color:#000000" d="m182.84 29.583-13.183-3.2184-10.125 9.0355-1.013-13.533-11.722-6.8373 12.557-5.1452 2.8804-13.261 8.7737 10.353 13.502-1.3585-7.1347 11.543z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2211.1) matrix(.87302 0 0 .87302 27.6 4.0534)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".91757pt" fill="#ff0"/>
- <rect id="d0e424" display="none" height="1e3px" width="288" y="2259.3" x="10"/>
+ <rect id="d0e423" display="none" height="1e3px" width="288" y="2259.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e424"/>
+ <use y="0" x="0" xlink:href="#d0e423"/>
</flowRegion>
<flowDiv xml:space="preserve">Jetzt benutzen Sie das Gummiband (durch Ziehen oder <flowSpan font-weight="bold">Umschalt+Ziehen</flowSpan>), um beide Ellipsen, aber nicht das Rechteck zu markieren:</flowDiv>
</flowRoot>
<rect id="basic-f05-de.svgrect894" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2295.7)" height="39.698" width="151.14" stroke="#000" y="1.7363" x="46.657" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".93523pt" fill="#00f"/>
<path id="basic-f05-de.svgpath1290" style="color:#000000" d="m94.643 25.041c0 6.9036-2.9581 12.5-6.6071 12.5s-6.6071-5.5964-6.6071-12.5 2.9581-12.5 6.6071-12.5 6.6071 5.5964 6.6071 12.5z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2295.7) matrix(.70711 -.70711 .70711 .70711 28.793 65.478)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".48693pt" fill="#f00"/>
<path id="basic-f05-de.svgpath1292" style="color:#000000" d="m94.643 25.041c0 6.9036-2.9581 12.5-6.6071 12.5s-6.6071-5.5964-6.6071-12.5 2.9581-12.5 6.6071-12.5 6.6071 5.5964 6.6071 12.5z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 2295.7) matrix(.70711 -.70711 .70711 .70711 56.471 65.835)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".48693pt" fill="#f00"/>
- <rect id="d0e440" display="none" height="1e3px" width="288" y="2348.6" x="10"/>
+ <rect id="d0e439" display="none" height="1e3px" width="288" y="2348.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e440"/>
+ <use y="0" x="0" xlink:href="#d0e439"/>
</flowRegion>
<flowDiv xml:space="preserve">Jedes einzelne Objekt einer Auswahl zeigt einen <flowSpan font-style="italic">Objektrahmen</flowSpan> – normalerweise einen gestrichelten, rechteckigen Rahmen. So kann man ganz einfach sehen, was ausgewählt ist und was nicht. Wenn man zum Beispiel beide Ellipsen und das Rechteck auswählt, dann hätte man es ohne diese Hinweise schwer zu sagen, ob die Ellipsen markiert sind oder nicht.</flowDiv>
</flowRoot>
- <rect id="d0e446" display="none" height="1e3px" width="288" y="2418" x="10"/>
+ <rect id="d0e445" display="none" height="1e3px" width="288" y="2418" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e446"/>
+ <use y="0" x="0" xlink:href="#d0e445"/>
</flowRegion>
<flowDiv xml:space="preserve"><flowSpan font-weight="bold">Umschalt+Klick</flowSpan> auf ein markiertes Objekt entfernt es aus der Auswahl. Wählen Sie alle drei Objekte oben aus, dann benutzen Sie <flowSpan font-weight="bold">Umschalt+Klick</flowSpan>, um beide Ellipsen aus der Auswahl herauszunehmen und nur das Rechteck ausgewählt zu lassen.</flowDiv>
</flowRoot>
- <rect id="d0e454" display="none" height="1e3px" width="288" y="2467.8" x="10"/>
+ <rect id="d0e453" display="none" height="1e3px" width="288" y="2467.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e454"/>
+ <use y="0" x="0" xlink:href="#d0e453"/>
</flowRegion>
<flowDiv xml:space="preserve">Nach einem Druck auf <flowSpan font-weight="bold">Esc</flowSpan> sind keine Objekte mehr ausgewählt. <flowSpan font-weight="bold">Strg+A</flowSpan> wählt dagegen alle Objekte der momentan aktivierten Ebene aus. (Wenn Sie keine weiteren Ebenen erstellt haben, entspricht das allen Objekten im Dokument).</flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="2530.3891730000005" x="10" font-family="sans-serif" fill="#000000">
<tspan y="2530.3891730000005" x="10">Gruppieren</tspan>
</text>
- <rect id="d0e469" display="none" height="1e3px" width="288" y="2535.6" x="10"/>
+ <rect id="d0e468" display="none" height="1e3px" width="288" y="2535.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e469"/>
+ <use y="0" x="0" xlink:href="#d0e468"/>
</flowRegion>
<flowDiv xml:space="preserve">Mehrere Objekte können zu einer <flowSpan font-style="italic">Gruppe</flowSpan> zusammengefasst werden. Eine Gruppe verhält sich wie ein einzelnes Objekt, wenn man sie verschiebt oder mit den Anfassern verformt. Die drei Objekte unten links sind alle noch einzeln; die gleichen drei Objekte auf der rechten Seite sind gruppiert. Versuchen Sie, die Gruppe zu verschieben.</flowDiv>
</flowRoot>
@@ -355,99 +355,99 @@
<path id="basic-f06-de.svgpath1374" d="m134.86 1251.7c0 9.8339-9.8015 17.806-21.892 17.806-12.091 0-21.892-7.9719-21.892-17.806 0-9.8338 9.8015-17.806 21.892-17.806 12.091 0 21.892 7.9719 21.892 17.806z" transform="translate(104.03 224.65)" fill="#f00"/>
<path id="basic-f06-de.svgpolygon1375" d="m184.48 1254.9-15.238-3.72-11.703 10.444-1.1708-15.642-13.549-7.9029 14.514-5.9471 3.3293-15.328 10.141 11.966 15.607-1.5703-8.2467 13.343z" transform="translate(86.386 261.2)" fill="#ff0"/>
</g>
- <rect id="d0e485" display="none" height="1e3px" width="288" y="2682.4" x="10"/>
+ <rect id="d0e484" display="none" height="1e3px" width="288" y="2682.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e485"/>
+ <use y="0" x="0" xlink:href="#d0e484"/>
</flowRegion>
<flowDiv xml:space="preserve">Um eine Gruppe zu erzeugen, wählt man ein oder mehrere Objekte aus und drückt <flowSpan font-weight="bold">Strg+G</flowSpan>. Um die Gruppierung bei einer oder mehreren Gruppen aufzuheben, markiert man diese und drückt <flowSpan font-weight="bold">Strg+U</flowSpan>. Gruppierungen können selbst auch gruppiert werden, wie jedes andere Objekt auch. Solche verschachtelten Gruppierungen können beliebig tief weitergeführt werden. Einmaliges <flowSpan font-weight="bold">Strg+U</flowSpan> hebt nur die oberste (letzte) Gruppierung einer ausgewählten Gruppe auf. Um alle Gruppierungen der Auswahl aufzuheben, müssen Sie <flowSpan font-weight="bold">Strg+U</flowSpan> mehrfach drücken.</flowDiv>
</flowRoot>
- <rect id="d0e500" display="none" height="1e3px" width="288" y="2783.8" x="10"/>
+ <rect id="d0e499" display="none" height="1e3px" width="288" y="2783.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e500"/>
+ <use y="0" x="0" xlink:href="#d0e499"/>
</flowRegion>
<flowDiv xml:space="preserve">Es ist nicht unbedingt nötig, alle Gruppierungen aufzuheben, wenn man ein Objekt in einer Gruppe bearbeiten will. <flowSpan font-weight="bold">Strg+Klick</flowSpan> auf ein solches Objekt wählt es aus und erlaubt, es zu bearbeiten. Um mehrere Objekte innerhalb oder außerhalb einer Gruppe auszuwählen, drücken Sie <flowSpan font-weight="bold">Umschalt+Strg+Klick</flowSpan>. Versuchen Sie, einzelne Objekte in der Gruppe (oben rechts) zu verschieben oder zu verändern, ohne die Gruppierung aufzuheben. Anschließend heben Sie die Markierung wieder auf und markieren die Gruppe normal, um zu sehen, dass die Gruppierung erhalten geblieben ist.</flowDiv>
</flowRoot>
<text style="writing-mode:lr" font-weight="bold" font-size="8" y="2899.6010450000003" x="10" font-family="sans-serif" fill="#000000">
<tspan y="2899.6010450000003" x="10">Füllung und Kontur</tspan>
</text>
- <rect id="d0e515" display="none" height="1e3px" width="288" y="2904.8" x="10"/>
+ <rect id="d0e514" display="none" height="1e3px" width="288" y="2904.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e515"/>
+ <use y="0" x="0" xlink:href="#d0e514"/>
</flowRegion>
- <flowDiv xml:space="preserve">Die wohl einfachste Möglichkeit, wie man ein Objekt einfärben kann, ist es auszuwählen und dann auf eines der farbigen Kästchen unterhalb der Zeichenfläche zu klicken (dies ändert die Füllfarbe). Alternativ kann der Farbmuster-Dialog vom Ansicht-Menü aus geöffnet werden (oder mittels <flowSpan font-weight="bold">Shift+Ctrl+W<flowSpan font-weight="bold">), das Objekt markiert werden, und ein Farbfeld angeklickt werden (auch dies ändert die Füllfarbe).</flowSpan></flowSpan></flowDiv>
+ <flowDiv xml:space="preserve">Viele der Funktionen von Inkscape sind durch <flowSpan font-style="italic">Dialoge</flowSpan> verfügbar. Der wahrscheinlich einfachste Weg, einem Objekt eine Farbe zuzuweisen, ist es, den Farbfelder-Dialog im Ansicht-Menü zu öffnen (oder mittels <flowSpan font-weight="bold">Shift+Ctrl+W<flowSpan font-weight="bold">), das Objekt zu markieren, und ein Farbfeld zu wählen. Dies ändert die Füllfarbe.</flowSpan></flowSpan></flowDiv>
</flowRoot>
- <rect id="d0e522" display="none" height="1e3px" width="288" y="2986" x="10"/>
+ <rect id="d0e524" display="none" height="1e3px" width="288" y="2963.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e522"/>
+ <use y="0" x="0" xlink:href="#d0e524"/>
</flowRegion>
<flowDiv xml:space="preserve">Viel leistungsfähiger ist der Dialog »Füllung und Kontur« aus dem Objekt-Menü (<flowSpan font-weight="bold">Umschalt+Strg+F</flowSpan>). Wählen Sie das Objekt unten aus und öffnen Sie den Dialog.</flowDiv>
</flowRoot>
- <path id="basic-f07-de.svgpath930" d="m190.32 1450.2c0 9.0277-29.666 16.346-66.261 16.346s-66.261-7.3185-66.261-16.346c0-9.0278 29.666-16.346 66.261-16.346s66.261 7.3185 66.261 16.346z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.066 1600.9)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#f00"/>
- <rect id="d0e541" display="none" height="1e3px" width="288" y="3079.2" x="10"/>
+ <path id="basic-f07-de.svgpath930" d="m190.32 1450.2c0 9.0277-29.666 16.346-66.261 16.346s-66.261-7.3185-66.261-16.346c0-9.0278 29.666-16.346 66.261-16.346s66.261 7.3185 66.261 16.346z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.066 1578.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#f00"/>
+ <rect id="d0e543" display="none" height="1e3px" width="288" y="3056.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e541"/>
+ <use y="0" x="0" xlink:href="#d0e543"/>
</flowRegion>
<flowDiv xml:space="preserve">Sie werden sehen, dass der Dialog drei Reiter hat: Füllung, Farbe der Kontur, und Muster der Kontur. Im Reiter »Füllung« ändert man die <flowSpan font-style="italic">Füllfarbe</flowSpan> (Innenfarbe) des markierten Objekts. Mit den Knöpfen direkt unter dem Reiter kann man die Füllungsart verändern: die Füllung ganz ausschalten (mit dem Knopf mit dem X), einfach (einfarbig) füllen, oder einen Linear- und Radialverlauf auswählen. Bei dem Objekt oben ist der Knopf »Einfache Farbe« aktiviert.</flowDiv>
</flowRoot>
- <rect id="d0e547" display="none" height="1e3px" width="288" y="3161" x="10"/>
+ <rect id="d0e549" display="none" height="1e3px" width="288" y="3138.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e547"/>
+ <use y="0" x="0" xlink:href="#d0e549"/>
</flowRegion>
<flowDiv xml:space="preserve">Weiter unten sieht man verschiedene <flowSpan font-style="italic">Farbwahlmöglichkeiten</flowSpan>. Jede hat einen eigenen Reiter: RGB, HSL, CMYK und Farbrad. Wahrscheinlich am praktischsten ist das Farbrad, bei dem man das Dreieck verdrehen kann, um den Farbton zu wählen und dann die gewünschte Helligkeit im Dreieck auswählt. Alle Farbwähler besitzen einen Schieberegler, um den <flowSpan font-style="italic">Alpha-Kanal</flowSpan> (die Deckkraft) der Objektfarbe einzustellen.</flowDiv>
</flowRoot>
- <rect id="d0e556" display="none" height="1e3px" width="288" y="3242.7" x="10"/>
+ <rect id="d0e558" display="none" height="1e3px" width="288" y="3220.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e556"/>
+ <use y="0" x="0" xlink:href="#d0e558"/>
</flowRegion>
<flowDiv xml:space="preserve">Immer, wenn Sie ein Objekt auswählen, zeigt der Farbwähler dessen aktuelle Farbe und Kontur. Bei mehr als einem markierten Objekt wird die <flowSpan font-style="italic">Durchschnittsfarbe</flowSpan> angezeigt. Üben Sie an diesen Beispielobjekten oder erzeugen Sie selbst welche:</flowDiv>
</flowRoot>
- <path id="basic-f08-de.svgpath969" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 .12843 -1529.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#80765b"/>
- <path id="basic-f08-de.svgpath970" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity=".26769" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 35.037 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#d0765b"/>
- <path id="basic-f08-de.svgpath971" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 70.391 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#12c097"/>
- <path id="basic-f08-de.svgpath972" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 104.18 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#e7da05"/>
- <path id="basic-f08-de.svgpath973" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 135.99 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#3d0fa1"/>
- <path id="basic-f08-de.svgpath974" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity=".74902" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 167.81 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#6fe225"/>
- <path id="basic-f08-de.svgpath975" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3300.5) matrix(.99777 0 0 .93574 199.63 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#ff3077"/>
- <rect id="d0e572" display="none" height="1e3px" width="288" y="3347.7" x="10"/>
+ <path id="basic-f08-de.svgpath969" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity="0.75" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 .12843 -1529.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#80765b"/>
+ <path id="basic-f08-de.svgpath970" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity=".26769" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 35.037 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#d0765b"/>
+ <path id="basic-f08-de.svgpath971" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 70.391 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#12c097"/>
+ <path id="basic-f08-de.svgpath972" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 104.18 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#e7da05"/>
+ <path id="basic-f08-de.svgpath973" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 135.99 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#3d0fa1"/>
+ <path id="basic-f08-de.svgpath974" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" fill-opacity=".74902" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 167.81 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#6fe225"/>
+ <path id="basic-f08-de.svgpath975" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3278.1) matrix(.99777 0 0 .93574 199.63 -1529)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#ff3077"/>
+ <rect id="d0e574" display="none" height="1e3px" width="288" y="3325.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e572"/>
+ <use y="0" x="0" xlink:href="#d0e574"/>
</flowRegion>
<flowDiv xml:space="preserve">Mit dem Reiter »Farbe der Kontur« kann man die <flowSpan font-style="italic">Kontur</flowSpan> (Außenlinie) des Objektes entfernen, oder ihr eine beliebige Farbe und Deckkraft zuordnen:</flowDiv>
</flowRoot>
- <path id="basic-f09-de.svgpath1010" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 .81318 -1530.2)" xmlns:cc="http://creativecommons.org/ns#" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1011" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 27.358 -1530.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1012" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" stroke-opacity=".15692" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 57.22 -1530.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1013" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 83.765 -1530.2)" stroke="#f00" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1014" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 113.63 -1530.2)" stroke="#00ff7c" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1015" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 146.81 -1530.2)" stroke="#16417c" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1016" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 176.67 -1530.2)" stroke="#7c7016" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
- <path id="basic-f09-de.svgpath1017" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3393.1) matrix(.99850 0 0 .93643 203.21 -1530.2)" xmlns:cc="http://creativecommons.org/ns#" fill="#dbdbdb"/>
- <rect id="d0e588" display="none" height="1e3px" width="288" y="3439.7" x="10"/>
+ <path id="basic-f09-de.svgpath1010" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 .81318 -1530.2)" xmlns:cc="http://creativecommons.org/ns#" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1011" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 27.358 -1530.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1012" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" stroke-opacity=".15692" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 57.22 -1530.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1013" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 83.765 -1530.2)" stroke="#f00" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1014" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 113.63 -1530.2)" stroke="#00ff7c" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1015" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 146.81 -1530.2)" stroke="#16417c" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1016" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 176.67 -1530.2)" stroke="#7c7016" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="#dbdbdb"/>
+ <path id="basic-f09-de.svgpath1017" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3370.7) matrix(.99850 0 0 .93643 203.21 -1530.2)" xmlns:cc="http://creativecommons.org/ns#" fill="#dbdbdb"/>
+ <rect id="d0e590" display="none" height="1e3px" width="288" y="3417.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e588"/>
+ <use y="0" x="0" xlink:href="#d0e590"/>
</flowRegion>
<flowDiv xml:space="preserve">Der letzte Reiter »Muster der Kontur« dient zum Einstellen der Breite und anderer Eigenschaften der Kontur:</flowDiv>
</flowRoot>
- <path id="basic-f10-de.svgpath1033" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 3.8016 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".012105" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1034" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 30.089 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="2.4211" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1035" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 62.947 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="9.6842" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1036" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 95.806 -1511.2)" stroke="#000" stroke-dasharray="1.81578, 3.63157" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1037" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 131.95 -1511.2)" stroke="#000" stroke-dasharray="7.26312, 7.26312" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1038" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 168.1 -1511.2)" stroke="#000" stroke-dasharray="7.26312, 3.63156, 1.81578, 3.63156" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
- <path id="basic-f10-de.svgpath1039" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3476.2) matrix(.98881 0 0 .92734 204.24 -1511.2)" stroke="#000" stroke-dasharray="0.847366, 0.847366" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".84737" fill="#dbdbdb"/>
- <rect id="d0e601" display="none" height="1e3px" width="288" y="3530.2" x="10"/>
+ <path id="basic-f10-de.svgpath1033" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 3.8016 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".012105" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1034" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 30.089 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="2.4211" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1035" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 62.947 -1511.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="9.6842" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1036" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 95.806 -1511.2)" stroke="#000" stroke-dasharray="1.81578, 3.63157" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1037" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 131.95 -1511.2)" stroke="#000" stroke-dasharray="7.26312, 7.26312" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1038" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 168.1 -1511.2)" stroke="#000" stroke-dasharray="7.26312, 3.63156, 1.81578, 3.63156" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1.8158" fill="#dbdbdb"/>
+ <path id="basic-f10-de.svgpath1039" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3453.8) matrix(.98881 0 0 .92734 204.24 -1511.2)" stroke="#000" stroke-dasharray="0.847366, 0.847366" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".84737" fill="#dbdbdb"/>
+ <rect id="d0e603" display="none" height="1e3px" width="288" y="3507.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e601"/>
+ <use y="0" x="0" xlink:href="#d0e603"/>
</flowRegion>
<flowDiv xml:space="preserve">Statt einer einfachen Farbe kann man auch <flowSpan font-style="italic">Farbverläufe</flowSpan> für Füllung und/oder Kontur benutzen:</flowDiv>
</flowRoot>
@@ -488,42 +488,42 @@
<stop id="basic-f11-de.svgstop1089" stop-color="#aba6a6" stop-opacity=".24314" offset="1"/>
</radialGradient>
</defs>
- <path id="basic-f11-de.svgpath1053" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 -1.6488 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svglinearGradient1054)"/>
- <path id="basic-f11-de.svgpath1055" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 26.698 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svglinearGradient1059)"/>
- <path id="basic-f11-de.svgpath1060" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 62.131 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svgradialGradient1061)"/>
- <path id="basic-f11-de.svgpath1065" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 94.02 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svgradialGradient1069)"/>
- <path id="basic-f11-de.svgpath1073" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 136.54 -1632.8)" stroke="url(#basic-f11-de.svglinearGradient1074)" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1090)"/>
- <path id="basic-f11-de.svgpath1075" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(-1.0663 0 0 -1 263.1 1673.3)" stroke="url(#basic-f11-de.svgradialGradient1076)" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1083)"/>
- <path id="basic-f11-de.svgpath1084" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3565.7) matrix(1.0663 0 0 1 214.49 -1632.8)" stroke="url(#basic-f11-de.svgradialGradient1085)" stroke-dasharray="3.64368, 3.64368" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1086)"/>
- <rect id="d0e617" display="none" height="1e3px" width="288" y="3617" x="10"/>
+ <path id="basic-f11-de.svgpath1053" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 -1.6488 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svglinearGradient1054)"/>
+ <path id="basic-f11-de.svgpath1055" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 26.698 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svglinearGradient1059)"/>
+ <path id="basic-f11-de.svgpath1060" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 62.131 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svgradialGradient1061)"/>
+ <path id="basic-f11-de.svgpath1065" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 94.02 -1632.8)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f11-de.svgradialGradient1069)"/>
+ <path id="basic-f11-de.svgpath1073" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 136.54 -1632.8)" stroke="url(#basic-f11-de.svglinearGradient1074)" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1090)"/>
+ <path id="basic-f11-de.svgpath1075" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(-1.0663 0 0 -1 263.1 1673.3)" stroke="url(#basic-f11-de.svgradialGradient1076)" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1083)"/>
+ <path id="basic-f11-de.svgpath1084" d="m67.136 1653c0 9.8338-12.415 17.806-27.73 17.806s-27.73-7.9719-27.73-17.806c0-9.8338 12.415-17.806 27.73-17.806s27.73 7.9719 27.73 17.806z" fill-rule="evenodd" transform="translate(10 3543.3) matrix(1.0663 0 0 1 214.49 -1632.8)" stroke="url(#basic-f11-de.svgradialGradient1085)" stroke-dasharray="3.64368, 3.64368" xmlns:cc="http://creativecommons.org/ns#" stroke-width="3.6437" fill="url(#basic-f11-de.svgradialGradient1086)"/>
+ <rect id="d0e619" display="none" height="1e3px" width="288" y="3594.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e617"/>
+ <use y="0" x="0" xlink:href="#d0e619"/>
</flowRegion>
<flowDiv xml:space="preserve">Wenn man von einer einfachen Farbe auf einen Farbverlauf umschaltet, hat der neue Farbverlauf an beiden Enden zunächst die zuvor eingestellte Farbe - an einem Ende ist diese voll deckend, am anderen komplett transparent. Schalten Sie zum Farbverlaufswerkzeug (<flowSpan font-weight="bold">Strg+F1</flowSpan>), um die <flowSpan font-style="italic">Verlaufs-Anfasser</flowSpan> zu verschieben – das sind durch Linien verbundene Anfasser, mit denen man Richtung und Länge des Verlaufs einstellen kann. Wenn einer der Verlaufs-Anfasser ausgewählt ist (blau hervorgehoben), dann setzt der Dialog »Füllung und Kontur« nur die Farbe dieses einen Anfassers statt der Farbe des ganzen Objekts.</flowDiv>
</flowRoot>
- <rect id="d0e626" display="none" height="1e3px" width="288" y="3730.6" x="10"/>
+ <rect id="d0e628" display="none" height="1e3px" width="288" y="3708.2" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e626"/>
+ <use y="0" x="0" xlink:href="#d0e628"/>
</flowRegion>
<flowDiv xml:space="preserve">Eine andere praktische Möglichkeit, die Farbe eines Objektes zu ändern, ist die Pipette (<flowSpan font-weight="bold">F7</flowSpan>). <flowSpan font-weight="bold">Klicken</flowSpan> Sie einfach mit der Pipette auf die Zeichnung, und die dort gewählte Farbe wird automatisch als Füllfarbe für das aktuelle Objekt benutzt. (<flowSpan font-weight="bold">Umschalt+Klick</flowSpan> ändert die Farbe der Kontur.)</flowDiv>
</flowRoot>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="3803.352469000001" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="3803.352469000001" x="10">Duplizieren, Ausrichten, Verteilen</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="3780.9396580000007" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="3780.9396580000007" x="10">Duplizieren, Ausrichten, Verteilen</tspan>
</text>
- <rect id="d0e644" display="none" height="1e3px" width="288" y="3808.6" x="10"/>
+ <rect id="d0e646" display="none" height="1e3px" width="288" y="3786.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e644"/>
+ <use y="0" x="0" xlink:href="#d0e646"/>
</flowRegion>
<flowDiv xml:space="preserve">Einer der häufigsten Arbeitsschritte ist das <flowSpan font-style="italic">Duplizieren</flowSpan> eines Objekts (<flowSpan font-weight="bold">Strg+D</flowSpan>). Die Kopie des Objektes liegt danach direkt über dem kopierten Objekt und ist ausgewählt, so dass es sofort mit der Maus oder den Pfeiltasten verschoben werden kann. Versuchen Sie doch einmal zur Übung, Kopien des schwarzen Quadrats in einer Linie nebeneinander anzuordnen:</flowDiv>
</flowRoot>
- <rect id="basic-f12-de.svgrect1117" fill-rule="evenodd" transform="translate(10 3886)" height="11.092" width="11.092" y=".90725" x="-.11450"/>
- <rect id="d0e663" display="none" height="1e3px" width="288" y="3909.1" x="10"/>
+ <rect id="basic-f12-de.svgrect1117" fill-rule="evenodd" transform="translate(10 3863.6)" height="11.092" width="11.092" y=".90725" x="-.11450"/>
+ <rect id="d0e665" display="none" height="1e3px" width="288" y="3886.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e663"/>
+ <use y="0" x="0" xlink:href="#d0e665"/>
</flowRegion>
<flowDiv xml:space="preserve">Es ist gut möglich, dass Ihre Quadrate jetzt einigermaßen zufällig platziert sind. Hier hilft der Dialog »Ausrichten und Verteilen« (<flowSpan font-weight="bold">Strg+Umschalt+A</flowSpan>). Wählen Sie alle Quadrate aus (mit <flowSpan font-weight="bold">Umschalt+Klick</flowSpan> oder dem Gummiband), öffnen Sie dann den Dialog und drücken »Zentren horizontal ausrichten«. Danach benutzen Sie »Horizontale Abstände zwischen Objekten ausgleichen« (lesen Sie die Tooltips der Schaltflächen). Die Objekte sind jetzt gleichmäßig ausgerichtet und verteilt. Hier sind weitere Übungsmöglichkeiten für Sie:</flowDiv>
</flowRoot>
@@ -542,187 +542,187 @@
<stop id="basic-f13-de.svgstop843" stop-color="#0082ab" stop-opacity="0" offset="1"/>
</linearGradient>
</defs>
- <path id="basic-f13-de.svgpolygon1671" d="m223 2147.6-20.927 0.3454-20.927 0.3453 10.165-18.296 10.165-18.296 10.763 17.951z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 413.56 -2103.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1670)"/>
- <path id="basic-f13-de.svgpolygon1672" d="m207.75 2141.8 10.137-17.003 10.137-17.003 9.6564 17.28 9.6564 17.28-19.793-0.2772z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 413.44 -2098.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1669)"/>
- <path id="basic-f13-de.svgpolygon1673" d="m218.9 2147.6 5.4312-11.938 5.4312-11.938 7.6235 10.673 7.6235 10.673-13.055 1.2656z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 433.5 -2109.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1668)"/>
- <path id="basic-f13-de.svgpolygon1674" d="m221.83 2157 7.5821-10.246 7.5821-10.246 5.0823 11.689 5.0823 11.689-12.664-1.4432z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 445.33 -2121.6)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1667)"/>
- <path id="basic-f13-de.svgpolygon1675" d="m232.98 2163.5 3.6889-6.8247 3.6889-6.8246 4.0658 6.607 4.0658 6.607-7.7548 0.2176z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 411.97 -2130)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1666)"/>
- <path id="basic-f13-de.svgpolygon1676" d="m241.78 2168.2 4.8233-6.8928 4.8233-6.8927 3.5576 7.6235 3.5576 7.6234-8.3809-0.7307z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 429.68 -2135.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1665)"/>
- <path id="basic-f13-de.svgpolygon1677" d="m254.11 2170.5 2.1825-5.3681 2.1825-5.368 3.5576 4.5741 3.5576 4.5741-5.7401 0.7939z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 4009.5) matrix(-1 0 0 1 450.9 -2138.5)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1664)"/>
- <path id="basic-f13-de.svgpath1622" d="m30.105 4.9279l53.602 14.362" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1623" d="m27.562 9.2561l53.602 14.363" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1624" d="m25.019 13.584l53.602 14.363" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1625" d="m22.476 17.913l53.602 14.362" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1626" d="m19.933 22.241l53.602 14.362" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1627" d="m17.39 26.569l53.602 14.363" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1628" d="m14.847 30.897l53.602 14.363" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1629" d="m12.304 35.225l53.602 14.363" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1630" d="m9.761 39.554l53.602 14.362" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
- <path id="basic-f13-de.svgpath1641" sodipodi:revolution="3.0000000" sodipodi:radius="9.1857243" d="m131.46 2120.6c0.41 0.2-0.08 0.7-0.35 0.7-0.72 0.1-1.12-0.7-1.02-1.4 0.17-1.1 1.39-1.6 2.39-1.3 1.47 0.4 2.15 2 1.71 3.4-0.58 1.8-2.69 2.7-4.45 2.1-2.21-0.8-3.19-3.4-2.39-5.5 0.96-2.6 4-3.7 6.5-2.8 2.95 1.2 4.25 4.7 3.08 7.6-1.34 3.3-5.3 4.7-8.56 3.4-3.69-1.5-5.29-6-3.76-9.6 1.72-4.1 6.61-5.8 10.61-4.1 4.44 1.9 6.36 7.3 4.45 11.6" transform="translate(10 4009.5) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -31.314)" stroke="#000" sodipodi:argument="-18.385908" sodipodi:cy="2120.6279" sodipodi:cx="131.45540" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1642" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1440.6 -40.555)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1643" sodipodi:revolution="3.0000000" sodipodi:radius="25.200598" d="m154.34 2141.8c1.12 0.5-0.24 1.8-0.98 1.8-1.99 0.2-3.03-2.1-2.73-3.8 0.53-3 3.92-4.4 6.65-3.6 4 1.1 5.77 5.7 4.5 9.5-1.7 5-7.55 7.1-12.33 5.3-6.01-2.2-8.57-9.3-6.26-15.1 2.8-7 11.18-10 18-7.2 8.03 3.4 11.38 13 8.02 20.9-3.88 9-14.82 12.8-23.67 8.9-10.05-4.4-14.2-16.7-9.78-26.5 4.95-11.1 18.47-15.6 29.34-10.7 12.07 5.5 17.02 20.3 11.54 32.2" transform="translate(10 4009.5) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -54.931)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2141.7546" sodipodi:cx="154.34271" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1644" sodipodi:revolution="3.0000000" sodipodi:radius="19.674946" d="m177.23 2161.1c0.94 0.3 0.07 1.4-0.49 1.6-1.51 0.4-2.63-1.2-2.64-2.6-0.01-2.3 2.39-3.9 4.6-3.7 3.23 0.3 5.24 3.6 4.79 6.7-0.6 4.1-4.78 6.5-8.71 5.8-4.93-0.8-7.89-5.9-6.94-10.7 1.16-5.8 7.18-9.2 12.81-8 6.64 1.4 10.57 8.3 9.1 14.8-1.7 7.5-9.58 11.9-16.92 10.2-8.34-2-13.25-10.8-11.25-19 2.24-9.2 11.98-14.6 21.03-12.3 10.04 2.5 15.93 13.2 13.4 23.1" transform="translate(10 4009.5) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -65.819)" stroke="#000" sodipodi:argument="-18.546671" sodipodi:cy="2161.1208" sodipodi:cx="177.23004" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1645" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(4.753e-17 .15352 -.15352 4.753e-17 473.62 31.043)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1646" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(9.506e-17 .30705 -.30705 9.506e-17 806.81 7.1768)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1647" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(3.8024e-16 1.2282 -1.2282 3.8024e-16 2753.8 -136.02)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1648" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(7.6048e-16 2.4564 -2.4564 7.6048e-16 5347.5 -326.94)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".125" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpolygon1649" d="m223 2147.6-20.927 0.3454-20.927 0.3453 10.165-18.296 10.165-18.296 10.763 17.951z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.589 1906.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1670)"/>
- <path id="basic-f13-de.svgpolygon1650" d="m207.75 2141.8 10.137-17.003 10.137-17.003 9.6564 17.28 9.6564 17.28-19.793-0.2772z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.701 1911.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1669)"/>
- <path id="basic-f13-de.svgpolygon1651" d="m218.9 2147.6 5.4312-11.938 5.4312-11.938 7.6235 10.673 7.6235 10.673-13.055 1.2656z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-6.352 1900.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1668)"/>
- <path id="basic-f13-de.svgpolygon1652" d="m221.83 2157 7.5821-10.246 7.5821-10.246 5.0823 11.689 5.0823 11.689-12.664-1.4432z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-18.189 1887.9)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1667)"/>
- <path id="basic-f13-de.svgpolygon1653" d="m232.98 2163.5 3.6889-6.8247 3.6889-6.8246 4.0658 6.607 4.0658 6.607-7.7548 0.2176z" fill-rule="evenodd" fill-opacity=".75" transform="translate(15.175 1879.5)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1666)"/>
- <path id="basic-f13-de.svgpolygon1654" d="m241.78 2168.2 4.8233-6.8928 4.8233-6.8927 3.5576 7.6235 3.5576 7.6234-8.3809-0.7307z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-2.53 1874.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1665)"/>
- <path id="basic-f13-de.svgpolygon1655" d="m254.11 2170.5 2.1825-5.3681 2.1825-5.368 3.5576 4.5741 3.5576 4.5741-5.7401 0.7939z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-23.757 1871)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1664)"/>
- <path id="basic-f13-de.svgpath1678" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 4009.5) matrix(1.0825e-16 .34966 -.34966 1.0825e-16 853.98 .69279)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
- <path id="basic-f13-de.svgpath1679" d="m175.2 51.728c-0.04 0.96-0.08 2.054-1.1 2.797" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1680" d="m182.3 51.84c0 0.743-0.46 2.115-0.37 3.02" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1681" d="m188.65 51.951c0.2 0.696 0.08 1.788 1.84 2.574" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1682" d="m197.68 51.504c-0.21 0.667-1.86 2.562-1.1 3.245" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1683" d="m204.82 52.287c-0.28 0.399-1.35 1.802 0 2.35" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1684" d="m211.03 51.504c0.09 0.927-0.48 1.881 1.84 2.909" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1685" d="m220.14 51.951c0.08 0.57-0.99 1.563-1.47 2.462" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1686" d="m225.4 51.84c0.02 0.436 0.19 1.722 2.94 2.349" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1687" d="m233.97 52.063c0 0.158-0.21 1.613 0.74 2.238" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1688" d="m238.47 51.84c1.06 1.233 1.13 2.685 6.63 3.58" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <path id="basic-f13-de.svgpath1689" d="m248.88 52.511c0 0.84-0.1 1.67 0.74 2.461" transform="translate(10 4009.5)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4090.343688000001" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="4090.343688000001" x="10">Z-Ordnung</tspan>
+ <path id="basic-f13-de.svgpolygon1671" d="m223 2147.6-20.927 0.3454-20.927 0.3453 10.165-18.296 10.165-18.296 10.763 17.951z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 413.56 -2103.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1670)"/>
+ <path id="basic-f13-de.svgpolygon1672" d="m207.75 2141.8 10.137-17.003 10.137-17.003 9.6564 17.28 9.6564 17.28-19.793-0.2772z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 413.44 -2098.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1669)"/>
+ <path id="basic-f13-de.svgpolygon1673" d="m218.9 2147.6 5.4312-11.938 5.4312-11.938 7.6235 10.673 7.6235 10.673-13.055 1.2656z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 433.5 -2109.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1668)"/>
+ <path id="basic-f13-de.svgpolygon1674" d="m221.83 2157 7.5821-10.246 7.5821-10.246 5.0823 11.689 5.0823 11.689-12.664-1.4432z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 445.33 -2121.6)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1667)"/>
+ <path id="basic-f13-de.svgpolygon1675" d="m232.98 2163.5 3.6889-6.8247 3.6889-6.8246 4.0658 6.607 4.0658 6.607-7.7548 0.2176z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 411.97 -2130)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1666)"/>
+ <path id="basic-f13-de.svgpolygon1676" d="m241.78 2168.2 4.8233-6.8928 4.8233-6.8927 3.5576 7.6235 3.5576 7.6234-8.3809-0.7307z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 429.68 -2135.4)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1665)"/>
+ <path id="basic-f13-de.svgpolygon1677" d="m254.11 2170.5 2.1825-5.3681 2.1825-5.368 3.5576 4.5741 3.5576 4.5741-5.7401 0.7939z" fill-rule="evenodd" fill-opacity=".75" transform="translate(10 3987.1) matrix(-1 0 0 1 450.9 -2138.5)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1664)"/>
+ <path id="basic-f13-de.svgpath1622" d="m30.105 4.9279l53.602 14.362" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1623" d="m27.562 9.2561l53.602 14.363" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1624" d="m25.019 13.584l53.602 14.363" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1625" d="m22.476 17.913l53.602 14.362" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1626" d="m19.933 22.241l53.602 14.362" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1627" d="m17.39 26.569l53.602 14.363" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1628" d="m14.847 30.897l53.602 14.363" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1629" d="m12.304 35.225l53.602 14.363" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1630" d="m9.761 39.554l53.602 14.362" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1641" sodipodi:revolution="3.0000000" sodipodi:radius="9.1857243" d="m131.46 2120.6c0.41 0.2-0.08 0.7-0.35 0.7-0.72 0.1-1.12-0.7-1.02-1.4 0.17-1.1 1.39-1.6 2.39-1.3 1.47 0.4 2.15 2 1.71 3.4-0.58 1.8-2.69 2.7-4.45 2.1-2.21-0.8-3.19-3.4-2.39-5.5 0.96-2.6 4-3.7 6.5-2.8 2.95 1.2 4.25 4.7 3.08 7.6-1.34 3.3-5.3 4.7-8.56 3.4-3.69-1.5-5.29-6-3.76-9.6 1.72-4.1 6.61-5.8 10.61-4.1 4.44 1.9 6.36 7.3 4.45 11.6" transform="translate(10 3987.1) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -31.314)" stroke="#000" sodipodi:argument="-18.385908" sodipodi:cy="2120.6279" sodipodi:cx="131.45540" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1642" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1440.6 -40.555)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1643" sodipodi:revolution="3.0000000" sodipodi:radius="25.200598" d="m154.34 2141.8c1.12 0.5-0.24 1.8-0.98 1.8-1.99 0.2-3.03-2.1-2.73-3.8 0.53-3 3.92-4.4 6.65-3.6 4 1.1 5.77 5.7 4.5 9.5-1.7 5-7.55 7.1-12.33 5.3-6.01-2.2-8.57-9.3-6.26-15.1 2.8-7 11.18-10 18-7.2 8.03 3.4 11.38 13 8.02 20.9-3.88 9-14.82 12.8-23.67 8.9-10.05-4.4-14.2-16.7-9.78-26.5 4.95-11.1 18.47-15.6 29.34-10.7 12.07 5.5 17.02 20.3 11.54 32.2" transform="translate(10 3987.1) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -54.931)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2141.7546" sodipodi:cx="154.34271" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1644" sodipodi:revolution="3.0000000" sodipodi:radius="19.674946" d="m177.23 2161.1c0.94 0.3 0.07 1.4-0.49 1.6-1.51 0.4-2.63-1.2-2.64-2.6-0.01-2.3 2.39-3.9 4.6-3.7 3.23 0.3 5.24 3.6 4.79 6.7-0.6 4.1-4.78 6.5-8.71 5.8-4.93-0.8-7.89-5.9-6.94-10.7 1.16-5.8 7.18-9.2 12.81-8 6.64 1.4 10.57 8.3 9.1 14.8-1.7 7.5-9.58 11.9-16.92 10.2-8.34-2-13.25-10.8-11.25-19 2.24-9.2 11.98-14.6 21.03-12.3 10.04 2.5 15.93 13.2 13.4 23.1" transform="translate(10 3987.1) matrix(1.9012e-16 .61410 -.61410 1.9012e-16 1424.3 -65.819)" stroke="#000" sodipodi:argument="-18.546671" sodipodi:cy="2161.1208" sodipodi:cx="177.23004" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1645" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(4.753e-17 .15352 -.15352 4.753e-17 473.62 31.043)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1646" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(9.506e-17 .30705 -.30705 9.506e-17 806.81 7.1768)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1647" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(3.8024e-16 1.2282 -1.2282 3.8024e-16 2753.8 -136.02)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1648" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(7.6048e-16 2.4564 -2.4564 7.6048e-16 5347.5 -326.94)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".125" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpolygon1649" d="m223 2147.6-20.927 0.3454-20.927 0.3453 10.165-18.296 10.165-18.296 10.763 17.951z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.589 1883.7)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1670)"/>
+ <path id="basic-f13-de.svgpolygon1650" d="m207.75 2141.8 10.137-17.003 10.137-17.003 9.6564 17.28 9.6564 17.28-19.793-0.2772z" fill-rule="evenodd" fill-opacity=".75" transform="translate(13.701 1888.7)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1669)"/>
+ <path id="basic-f13-de.svgpolygon1651" d="m218.9 2147.6 5.4312-11.938 5.4312-11.938 7.6235 10.673 7.6235 10.673-13.055 1.2656z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-6.352 1878)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1668)"/>
+ <path id="basic-f13-de.svgpolygon1652" d="m221.83 2157 7.5821-10.246 7.5821-10.246 5.0823 11.689 5.0823 11.689-12.664-1.4432z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-18.189 1865.5)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1667)"/>
+ <path id="basic-f13-de.svgpolygon1653" d="m232.98 2163.5 3.6889-6.8247 3.6889-6.8246 4.0658 6.607 4.0658 6.607-7.7548 0.2176z" fill-rule="evenodd" fill-opacity=".75" transform="translate(15.175 1857.1)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1666)"/>
+ <path id="basic-f13-de.svgpolygon1654" d="m241.78 2168.2 4.8233-6.8928 4.8233-6.8927 3.5576 7.6235 3.5576 7.6234-8.3809-0.7307z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-2.53 1851.7)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1665)"/>
+ <path id="basic-f13-de.svgpolygon1655" d="m254.11 2170.5 2.1825-5.3681 2.1825-5.368 3.5576 4.5741 3.5576 4.5741-5.7401 0.7939z" fill-rule="evenodd" fill-opacity=".75" transform="translate(-23.757 1848.6)" xmlns:cc="http://creativecommons.org/ns#" fill="url(#basic-f13-de.svgradialGradient1664)"/>
+ <path id="basic-f13-de.svgpath1678" sodipodi:revolution="3.0000000" sodipodi:radius="12.600299" d="m143.19 2128.8c0.56 0.3-0.12 0.9-0.49 1-0.99 0.1-1.52-1.1-1.37-1.9 0.27-1.5 1.96-2.2 3.33-1.8 2 0.5 2.89 2.8 2.25 4.7-0.85 2.5-3.77 3.6-6.16 2.7-3.01-1.1-4.29-4.7-3.13-7.6 1.39-3.5 5.59-5 9-3.6 4.01 1.7 5.68 6.5 4.01 10.5-1.94 4.5-7.42 6.3-11.84 4.4-5.02-2.2-7.1-8.3-4.89-13.2 2.48-5.6 9.23-7.8 14.67-5.4 6.04 2.8 8.51 10.2 5.77 16.1" transform="translate(10 3987.1) matrix(1.0825e-16 .34966 -.34966 1.0825e-16 853.98 .69279)" stroke="#000" sodipodi:argument="-18.365078" sodipodi:cy="2128.8440" sodipodi:cx="143.19247" sodipodi:expansion="1.0000000" sodipodi:type="spiral" xmlns:cc="http://creativecommons.org/ns#" stroke-width="1pt" sodipodi:t0="0.0000000" fill="none"/>
+ <path id="basic-f13-de.svgpath1679" d="m175.2 51.728c-0.04 0.96-0.08 2.054-1.1 2.797" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1680" d="m182.3 51.84c0 0.743-0.46 2.115-0.37 3.02" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1681" d="m188.65 51.951c0.2 0.696 0.08 1.788 1.84 2.574" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1682" d="m197.68 51.504c-0.21 0.667-1.86 2.562-1.1 3.245" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1683" d="m204.82 52.287c-0.28 0.399-1.35 1.802 0 2.35" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1684" d="m211.03 51.504c0.09 0.927-0.48 1.881 1.84 2.909" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1685" d="m220.14 51.951c0.08 0.57-0.99 1.563-1.47 2.462" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1686" d="m225.4 51.84c0.02 0.436 0.19 1.722 2.94 2.349" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1687" d="m233.97 52.063c0 0.158-0.21 1.613 0.74 2.238" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1688" d="m238.47 51.84c1.06 1.233 1.13 2.685 6.63 3.58" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <path id="basic-f13-de.svgpath1689" d="m248.88 52.511c0 0.84-0.1 1.67 0.74 2.461" transform="translate(10 3987.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".36291pt" fill="none"/>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4067.9308770000007" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="4067.9308770000007" x="10">Z-Ordnung</tspan>
</text>
- <rect id="d0e688" display="none" height="1e3px" width="288" y="4095.5" x="10"/>
+ <rect id="d0e690" display="none" height="1e3px" width="288" y="4073.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e688"/>
+ <use y="0" x="0" xlink:href="#d0e690"/>
</flowRegion>
- <flowDiv xml:space="preserve">Der Begriff <flowSpan font-style="italic">Z-Ordnung</flowSpan> beschreibt die Stapelordnung von Objekten in einer Zeichnung – d.h. welche Objekte oben liegen und dadurch andere, darunterliegende, Objekte verdecken. Die zwei Befehle im Objektmenü, »Nach ganz oben anheben« (die <flowSpan font-weight="bold">Pos 1</flowSpan>-Taste) und »Nach ganz unten absenken« (die <flowSpan font-weight="bold">Ende</flowSpan>-Taste), bringen das ausgewählte Objekt nach ganz oben oder ganz unten in der Z-Ordnung der aktuellen Ebene. Zwei weitere Befehle, »Anheben« (<flowSpan font-weight="bold">Bild hoch</flowSpan>) und »Absenken« (<flowSpan font-weight="bold">Bild runter</flowSpan>), heben oder senken das ausgewählte Objekt <flowSpan font-style="italic">nur um eine Stufe</flowSpan>; das heißt, sie bewegen das Objekt an einem einzigen, nicht ausgewählten, Objekt in der Z-Ordnung vorbei. (Dazu zählen nur Objekte, die mit ihrem Begrenzungsrahmen die Auswahl überdecken).</flowDiv>
+ <flowDiv xml:space="preserve">Der Begriff <flowSpan font-style="italic">Z-Ordnung</flowSpan> beschreibt die Stapelordnung von Objekten in einer Zeichnung – d.h. welche Objekte oben liegen und dadurch andere, darunterliegende, Objekte verdecken. Die zwei Befehle im Objektmenü, »Nach ganz oben anheben« (die <flowSpan font-weight="bold">Pos 1</flowSpan>-Taste) und »Nach ganz unten absenken« (die <flowSpan font-weight="bold">Ende</flowSpan>-Taste), bringen das ausgewählte Objekt nach ganz oben oder ganz unten in der Z-Ordnung der aktuellen Ebene. Zwei weitere Befehle, »Anheben« (<flowSpan font-weight="bold">Bild hoch</flowSpan>) und »Absenken« (<flowSpan font-weight="bold">Bild runter</flowSpan>), heben oder senken das ausgewählte Objekt <flowSpan font-style="italic">nur um eine Stufe</flowSpan>; das heißt, sie bewegen das Objekt an einem einzigen, nicht ausgewählten, Objekt in der Z-Ordnung vorbei. (Dazu zählen nur Objekte, die die Auswahl überdecken. Wenn nichts die Auswahl überdeckt, dann bewirken Bild hoch und Bild runter das gleiche wie die Tasten Pos1 und Ende).</flowDiv>
</flowRoot>
- <rect id="d0e709" display="none" height="1e3px" width="288" y="4229.9" x="10"/>
+ <rect id="d0e711" display="none" height="1e3px" width="288" y="4218.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e709"/>
+ <use y="0" x="0" xlink:href="#d0e711"/>
</flowRegion>
<flowDiv xml:space="preserve">Üben Sie diese Befehle, indem Sie die Z-Ordnung der Objekte unten umkehren, so dass am Ende die ganz linke Ellipse oben und die ganz rechte Ellipse unten liegt:</flowDiv>
</flowRoot>
- <path id="basic-f14-de.svgpath1127" d="m70.423 2348c0 7.6166-10.51 13.791-23.474 13.791s-23.474-6.1744-23.474-13.791 10.51-13.791 23.474-13.791 23.474 6.1745 23.474 13.791z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1.3625 0 0 1.7447 16.798 -4067.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".39901" fill="#f90"/>
- <path id="basic-f14-de.svgpath1128" d="m100.94 2351.2c0 9.7234-11.429 17.606-25.528 17.606s-25.528-7.8823-25.528-17.606c0-9.7233 11.429-17.606 25.528-17.606s25.528 7.8823 25.528 17.606z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1 0 0 1.0513 31.763 -2451.9)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
- <path id="basic-f14-de.svgpath1129" d="m119.72 2349.5c0 7.4546-9.7215 13.498-21.714 13.498s-21.714-6.0431-21.714-13.498c0-7.4545 9.7215-13.498 21.714-13.498s21.714 6.0431 21.714 13.498z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1 0 0 1.0513 34.11 -2439.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
- <path id="basic-f14-de.svgpath1130" d="m129.69 2348c0 5.3478-5.7804 9.6831-12.911 9.6831-7.1304 0-12.911-4.3353-12.911-9.6831 0-5.3479 5.7804-9.6831 12.911-9.6831 7.1304 0 12.911 4.3352 12.911 9.6831z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1 0 0 1.0513 36.436 -2449.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
- <path id="basic-f14-de.svgpath1131" d="m142.61 2347.1c0 4.2135-5.2549 7.6291-11.737 7.6291-6.4822 0-11.737-3.4156-11.737-7.6291 0-4.2134 5.2549-7.6291 11.737-7.6291 6.4822 0 11.737 3.4157 11.737 7.6291z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1 0 0 1.0513 37.632 -2444.9)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
- <path id="basic-f14-de.svgpath1132" d="m150.23 2347.4c0 3.079-3.2843 5.5751-7.3357 5.5751s-7.3357-2.4961-7.3357-5.5751c0-3.0791 3.2843-5.5751 7.3357-5.5751s7.3357 2.496 7.3357 5.5751z" fill-rule="evenodd" transform="translate(10 4278.3) matrix(1 0 0 1.0513 37.045 -2450.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
- <rect id="d0e722" display="none" height="1e3px" width="288" y="4343.1" x="10"/>
+ <path id="basic-f14-de.svgpath1127" d="m70.423 2348c0 7.6166-10.51 13.791-23.474 13.791s-23.474-6.1744-23.474-13.791 10.51-13.791 23.474-13.791 23.474 6.1745 23.474 13.791z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1.3625 0 0 1.7447 16.798 -4067.1)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width=".39901" fill="#f90"/>
+ <path id="basic-f14-de.svgpath1128" d="m100.94 2351.2c0 9.7234-11.429 17.606-25.528 17.606s-25.528-7.8823-25.528-17.606c0-9.7233 11.429-17.606 25.528-17.606s25.528 7.8823 25.528 17.606z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1 0 0 1.0513 31.763 -2451.9)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
+ <path id="basic-f14-de.svgpath1129" d="m119.72 2349.5c0 7.4546-9.7215 13.498-21.714 13.498s-21.714-6.0431-21.714-13.498c0-7.4545 9.7215-13.498 21.714-13.498s21.714 6.0431 21.714 13.498z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1 0 0 1.0513 34.11 -2439.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
+ <path id="basic-f14-de.svgpath1130" d="m129.69 2348c0 5.3478-5.7804 9.6831-12.911 9.6831-7.1304 0-12.911-4.3353-12.911-9.6831 0-5.3479 5.7804-9.6831 12.911-9.6831 7.1304 0 12.911 4.3352 12.911 9.6831z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1 0 0 1.0513 36.436 -2449.6)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
+ <path id="basic-f14-de.svgpath1131" d="m142.61 2347.1c0 4.2135-5.2549 7.6291-11.737 7.6291-6.4822 0-11.737-3.4156-11.737-7.6291 0-4.2134 5.2549-7.6291 11.737-7.6291 6.4822 0 11.737 3.4157 11.737 7.6291z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1 0 0 1.0513 37.632 -2444.9)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
+ <path id="basic-f14-de.svgpath1132" d="m150.23 2347.4c0 3.079-3.2843 5.5751-7.3357 5.5751s-7.3357-2.4961-7.3357-5.5751c0-3.0791 3.2843-5.5751 7.3357-5.5751s7.3357 2.496 7.3357 5.5751z" fill-rule="evenodd" transform="translate(10 4267.1) matrix(1 0 0 1.0513 37.045 -2450.2)" stroke="#000" xmlns:cc="http://creativecommons.org/ns#" stroke-width="0.6" fill="#f90"/>
+ <rect id="d0e724" display="none" height="1e3px" width="288" y="4331.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e722"/>
+ <use y="0" x="0" xlink:href="#d0e724"/>
</flowRegion>
<flowDiv xml:space="preserve">Eine sehr nützliche Auswahlhilfe ist die <flowSpan font-weight="bold">Tab</flowSpan>-Taste. Wenn nichts ausgewählt ist, dann wählt sie das unterste Objekt; andernfalls wählt sie das Objekt <flowSpan font-style="italic">über den markierten Objekten</flowSpan> in Z-Ordnung. <flowSpan font-weight="bold">Umschalt+Tab</flowSpan> arbeitet genau anders herum – man beginnt beim obersten Objekt und arbeitet sich dann nach unten. Objekte, die man neu erzeugt, liegen zuoberst auf dem Stapel, und so wählt <flowSpan font-weight="bold">Umschalt+Tab</flowSpan> praktischerweise das zuletzt erzeugte Objekt, solange nichts anderes markiert ist. Üben Sie <flowSpan font-weight="bold">Tab</flowSpan> und <flowSpan font-weight="bold">Umschalt+Tab</flowSpan> ein wenig an dem Stapel Ellipsen oben.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4458.831041" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="4458.831041" x="10">Verdeckte Objekte auswählen und verschieben</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4447.58948" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="4447.58948" x="10">Verdeckte Objekte auswählen und verschieben</tspan>
</text>
- <rect id="d0e749" display="none" height="1e3px" width="288" y="4464" x="10"/>
+ <rect id="d0e751" display="none" height="1e3px" width="288" y="4452.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e749"/>
+ <use y="0" x="0" xlink:href="#d0e751"/>
</flowRegion>
<flowDiv xml:space="preserve">Wie kommt man an ein Objekt heran, das von einem anderen verdeckt wird? Es kann sein, das man das untere Objekt zwar sehen kann, wenn das obere Objekt (teilweise) durchsichtig ist. Doch bei dem Versuch, es auszuwählen, markiert man das obere Objekt und nicht das, das man haben möchte.</flowDiv>
</flowRoot>
- <rect id="d0e752" display="none" height="1e3px" width="288" y="4523.8" x="10"/>
+ <rect id="d0e754" display="none" height="1e3px" width="288" y="4512.5" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e752"/>
+ <use y="0" x="0" xlink:href="#d0e754"/>
</flowRegion>
<flowDiv xml:space="preserve">Dafür gibt es <flowSpan font-weight="bold">Alt+Klick</flowSpan>. Mit dem ersten <flowSpan font-weight="bold">Alt+Klick</flowSpan> wählt man das oberste Objekt, genau wie mit einem gewöhnlichen Klick. Das nächste Mal <flowSpan font-weight="bold">Alt+Klick</flowSpan> an der gleichen Stelle wählt jedoch das Objekt <flowSpan font-style="italic">unter</flowSpan> dem obersten; dann das nächste darunter, noch eines tiefer u.s.w. Auf diese Weise kommt man durch mehrere <flowSpan font-weight="bold">Alt+Klick</flowSpan>s nacheinander von ganz oben nach ganz unten, durch den ganzen Z-Ordnungsstapel von Objekten an der Stelle des Klicks. Wenn das unterste Objekt erreicht ist, wird durch das nächste <flowSpan font-weight="bold">Alt+Klick</flowSpan> natürlich wieder das oberste Objekt markiert.</flowDiv>
</flowRoot>
- <rect id="d0e773" display="none" height="1e3px" width="288" y="4626.8" x="10"/>
+ <rect id="d0e775" display="none" height="1e3px" width="288" y="4615.5" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e773"/>
+ <use y="0" x="0" xlink:href="#d0e775"/>
</flowRegion>
<flowDiv xml:space="preserve">[Wenn Sie unter Linux arbeiten, dann könnte es sein, dass <flowSpan font-weight="bold">Alt+Klick</flowSpan> nicht korrekt funktioniert und stattdessen z.B. das ganze Inkscape-Fenster verschiebt. Dies passiert, wenn Ihr Fenstermanager Alt+Klick für eine andere Aktion reserviert hat. Sie können in diesem Fall im Einstellungsdialog für Ihren Fenstermanager das Fensterverhalten anders einstellen, indem Sie die Aktion für diese Tastenkombination abschalten, oder sie auf die Meta-Taste (meist gleichbedeutend mit der Windows-Taste) umstellen. Dies erlaubt es Inkscape und anderen Anwendungen, die Alt-Taste frei zu verwenden.]</flowDiv>
</flowRoot>
- <rect id="d0e779" display="none" height="1e3px" width="288" y="4729.8" x="10"/>
+ <rect id="d0e781" display="none" height="1e3px" width="288" y="4718.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e779"/>
+ <use y="0" x="0" xlink:href="#d0e781"/>
</flowRegion>
<flowDiv xml:space="preserve">Das ist zwar schön, aber was kann man mit einem markierten und verdeckten Objekt anfangen? Man kann es durch Tastaturbefehle verändern, und man kann die Anfasser benutzen. Aber beim Versuch, das Objekt selbst mit der Maus zu verschieben, wird automatisch wieder das oberste Objekt markiert. (So funktioniert »Klicken und Ziehen« nunmal – es wählt das (oberste) Objekt unter dem Mauszeiger, dann verschiebt es das gewählte Objekt). Um Inkscape mitzuteilen, das man das <flowSpan font-style="italic">gerade gewählte</flowSpan> Objekt verschieben will, und nicht etwa ein anderes auswählen möchte, benutzt man <flowSpan font-weight="bold">Alt+Ziehen</flowSpan>. Das verschiebt das aktuell markierte Objekt, egal wo man mit der Maus hinklickt.</flowDiv>
</flowRoot>
- <rect id="d0e788" display="none" height="1e3px" width="288" y="4852.5" x="10"/>
+ <rect id="d0e790" display="none" height="1e3px" width="288" y="4841.2" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e788"/>
+ <use y="0" x="0" xlink:href="#d0e790"/>
</flowRegion>
<flowDiv xml:space="preserve">Üben Sie <flowSpan font-weight="bold">Alt+Klick</flowSpan> und <flowSpan font-weight="bold">Alt+Ziehen</flowSpan> an den zwei braunen Objekten unter dem transparent-grünen Rechteck:</flowDiv>
</flowRoot>
- <path id="basic-f15-de.svgpath2575" sodipodi:sides="7" inkscape:flatsided="false" fill="#ac7335" style="color:#000000" transform="translate(10 4890.2) matrix(.39512 .68437 -.68437 .39512 2780 -1592.9)" inkscape:rounded="0.21000000" sodipodi:r1="28.739008" sodipodi:r2="16.983238" sodipodi:arg1="0.52143444" sodipodi:arg2="0.97023339" sodipodi:type="star" d="m126.89 3940.5c-1.71 2.8-13.23-2-15.92-0.2-2.69 1.7-2.72 13.9-5.86 14.5-3.14 0.5-6.349-10.3-9.539-11.1s-13.307 5.7-15.627 3.5 6.076-11.8 4.656-14.7c-1.419-3-12.432-3.1-12.315-6.3s12.009-3.8 13.505-6.6c1.495-2.7-2.945-13.2-0.399-15.1 2.547-1.8 10.874 5.7 14.077 5.1 3.202-0.6 7.302-9.5 10.362-8.7 3.07 0.9 0.25 11.3 2.78 13.4 2.53 2 12.65-0.8 13.8 2.2 1.16 3.1-8.72 9.8-8.76 13-0.04 3.1 10.95 8.3 9.24 11z" inkscape:randomized="0.047000000" sodipodi:cy="3927.1016" sodipodi:cx="100.73942"/>
- <path id="basic-f15-de.svgpath2574" sodipodi:sides="6" inkscape:flatsided="false" fill="#ff9400" style="color:#000000" transform="translate(10 4890.2) matrix(.83260 .48070 -.48070 .83260 1947.5 -3288.4)" inkscape:rounded="0.21000000" sodipodi:r1="19.212250" sodipodi:r2="9.3934679" sodipodi:arg1="0.48833395" sodipodi:arg2="0.77161843" sodipodi:type="star" d="m107.62 3941.6c-0.53 2.1-9.076-3.5-10.951-2.4-2.497 1.5-1.972 11.9-4.862 12.6-2.17 0.6-1.585-8.5-3.563-9.5-2.636-1.2-11.029 4.1-13.221 2.2-1.646-1.5 6.95-5.7 6.894-8-0.075-3-9.644-9.8-9.082-12.7 0.421-2.2 9.473 5.2 11.397 4 2.564-1.5 2.337-12.6 5.229-13.2 2.17-0.5 1.693 9 3.66 10.1 2.621 1.3 12.059-3.4 14.219-1.4 1.61 1.6-7.377 4.8-7.27 7 0.15 3 8.25 8.5 7.55 11.3z" inkscape:randomized="0.047000000" sodipodi:cy="3933.4641" sodipodi:cx="90.665482"/>
- <rect id="basic-f15-de.svgrect3197" ry="10.424" style="color:#000000" fill-opacity=".29609" rx="10.424" transform="translate(10 4890.2)" height="56.564" width="171.79" y="-.21458" x="44.416" fill="#2dd268"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4971.594589" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="4971.594589" x="10">Ähnliche Objekte auswählen</tspan>
+ <path id="basic-f15-de.svgpath2575" sodipodi:sides="7" inkscape:flatsided="false" fill="#ac7335" style="color:#000000" transform="translate(10 4879) matrix(.39512 .68437 -.68437 .39512 2780 -1592.9)" inkscape:rounded="0.21000000" sodipodi:r1="28.739008" sodipodi:r2="16.983238" sodipodi:arg1="0.52143444" sodipodi:arg2="0.97023339" sodipodi:type="star" d="m126.89 3940.5c-1.71 2.8-13.23-2-15.92-0.2-2.69 1.7-2.72 13.9-5.86 14.5-3.14 0.5-6.349-10.3-9.539-11.1s-13.307 5.7-15.627 3.5 6.076-11.8 4.656-14.7c-1.419-3-12.432-3.1-12.315-6.3s12.009-3.8 13.505-6.6c1.495-2.7-2.945-13.2-0.399-15.1 2.547-1.8 10.874 5.7 14.077 5.1 3.202-0.6 7.302-9.5 10.362-8.7 3.07 0.9 0.25 11.3 2.78 13.4 2.53 2 12.65-0.8 13.8 2.2 1.16 3.1-8.72 9.8-8.76 13-0.04 3.1 10.95 8.3 9.24 11z" inkscape:randomized="0.047000000" sodipodi:cy="3927.1016" sodipodi:cx="100.73942"/>
+ <path id="basic-f15-de.svgpath2574" sodipodi:sides="6" inkscape:flatsided="false" fill="#ff9400" style="color:#000000" transform="translate(10 4879) matrix(.83260 .48070 -.48070 .83260 1947.5 -3288.4)" inkscape:rounded="0.21000000" sodipodi:r1="19.212250" sodipodi:r2="9.3934679" sodipodi:arg1="0.48833395" sodipodi:arg2="0.77161843" sodipodi:type="star" d="m107.62 3941.6c-0.53 2.1-9.076-3.5-10.951-2.4-2.497 1.5-1.972 11.9-4.862 12.6-2.17 0.6-1.585-8.5-3.563-9.5-2.636-1.2-11.029 4.1-13.221 2.2-1.646-1.5 6.95-5.7 6.894-8-0.075-3-9.644-9.8-9.082-12.7 0.421-2.2 9.473 5.2 11.397 4 2.564-1.5 2.337-12.6 5.229-13.2 2.17-0.5 1.693 9 3.66 10.1 2.621 1.3 12.059-3.4 14.219-1.4 1.61 1.6-7.377 4.8-7.27 7 0.15 3 8.25 8.5 7.55 11.3z" inkscape:randomized="0.047000000" sodipodi:cy="3933.4641" sodipodi:cx="90.665482"/>
+ <rect id="basic-f15-de.svgrect3197" ry="10.424" style="color:#000000" fill-opacity=".29609" rx="10.424" transform="translate(10 4879)" height="56.564" width="171.79" y="-.21458" x="44.416" fill="#2dd268"/>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4960.3530279999995" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="4960.3530279999995" x="10">Ähnliche Objekte auswählen</tspan>
</text>
- <rect id="d0e813" display="none" height="1e3px" width="288" y="4976.8" x="10"/>
+ <rect id="d0e815" display="none" height="1e3px" width="288" y="4965.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e813"/>
+ <use y="0" x="0" xlink:href="#d0e815"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape kann Objekte auswählen, die dem aktuell gewählten Objekt ähneln. Wenn man z.B. alle blauen Quadrate unten auswählen möchte, kann man einfach eines davon auswählen, und dann über das Menü <flowSpan font-family="sans-serif">Bearbeiten &gt; Das Gleiche auswählen &gt; Füllfarbe</flowSpan> verwenden. Alle Objekte mit derselben blauen Füllfarbe sind nun ausgewählt.</flowDiv>
</flowRoot>
- <rect id="basic-f16-de.svgrect4101" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4105" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4107" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4115" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4121" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4127" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4133" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4139" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4145" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4151" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4109" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="4.0448" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4117" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4123" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4129" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4135" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4141" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4147" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4153" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4111" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="21.722" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4119" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4125" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4131" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4137" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4143" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4149" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4155" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4113" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="38.895" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4169" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4157" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="4.0448" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4171" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4159" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="21.722" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4173" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4161" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="38.895" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4175" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="4.0448" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4163" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="4.0448" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4177" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="21.722" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4165" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="21.722" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#4e9a06"/>
- <rect id="basic-f16-de.svgrect4179" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" height="14.205" width="15.152" y="38.895" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
- <rect id="basic-f16-de.svgrect4167" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5045.3)" ry="0" width="15.152" y="38.895" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
- <rect id="d0e829" display="none" height="1e3px" width="288" y="5106.3" x="10"/>
- <flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
- <flowRegion>
- <use y="0" x="0" xlink:href="#d0e829"/>
+ <rect id="basic-f16-de.svgrect4101" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4105" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4107" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="48.992" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4115" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4121" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4127" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4133" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4139" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4145" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4151" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4109" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="4.0448" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4117" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4123" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4129" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4135" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4141" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4147" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4153" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4111" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="21.722" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4119" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="68.185" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4125" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="86.873" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4131" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="105.06" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4137" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="122.73" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4143" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="140.92" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4149" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="159.6" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4155" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="177.28" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4113" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="38.895" x="195.46" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4169" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4157" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="4.0448" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4171" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4159" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="21.722" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4173" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="9.5964" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4161" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="38.895" x="214.66" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4175" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="4.0448" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4163" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="4.0448" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4177" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="21.722" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4165" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="21.722" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#4e9a06"/>
+ <rect id="basic-f16-de.svgrect4179" opacity="0.924" ry="0" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" height="14.205" width="15.152" y="38.895" x="28.789" xmlns:cc="http://creativecommons.org/ns#" fill="#204a87"/>
+ <rect id="basic-f16-de.svgrect4167" opacity="0.924" style="color-rendering:auto;color:#000000;isolation:auto;shape-rendering:auto;image-rendering:auto" rx="0" transform="translate(10 5034)" ry="0" width="15.152" y="38.895" x="233.85" xmlns:cc="http://creativecommons.org/ns#" height="14.205" fill="#204a87"/>
+ <rect id="d0e831" display="none" height="1e3px" width="288" y="5095.1" x="10"/>
+ <flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
+ <flowRegion>
+ <use y="0" x="0" xlink:href="#d0e831"/>
</flowRegion>
<flowDiv xml:space="preserve">Man kann ähnliche Objekte nicht nur nach deren Füllfarbe, sondern auch nach Konturfarbe, Konturstil, Füllung und Kontur zusammen und nach Objekttyp auswählen.</flowDiv>
</flowRoot>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="5158.302624" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="5158.302624" x="10">Schlusswort</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="5147.061062999999" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="5147.061062999999" x="10">Schlusswort</tspan>
</text>
- <rect id="d0e838" display="none" height="1e3px" width="288" y="5163.5" x="10"/>
+ <rect id="d0e840" display="none" height="1e3px" width="288" y="5152.3" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
- <use y="0" x="0" xlink:href="#d0e838"/>
+ <use y="0" x="0" xlink:href="#d0e840"/>
</flowRegion>
<flowDiv xml:space="preserve">Dies ist das Ende des Grundlagen-Tutorials. Das waren längst noch nicht alle Funktionen in Inkscape, aber mit den hier vermittelten Techniken können Sie schon einfache, aber nützliche Grafiken erstellen. Um kompliziertere Techniken zu erlernen, schauen Sie sich das Tutorial »Inkscape: Fortgeschrittene Benutzung« und die anderen Tutorials in <flowSpan font-family="sans-serif">Hilfe &gt; Einführungen</flowSpan> an.</flowDiv>
</flowRoot>
- <g transform="translate(0 5234.5)">
+ <g transform="translate(0 5223.3)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.1496 0 0 .46519 -.13015 3495.4)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<filter id="filter85" height="1.2" width="1.2" color-interpolation-filters="sRGB" y="-.1" x="-.1" inkscape:label="Drop shadow, custom">
diff --git a/share/tutorials/tutorial-shapes.de.svg b/share/tutorials/tutorial-shapes.de.svg
index 5ba8912e7..90de85b93 100644
--- a/share/tutorials/tutorial-shapes.de.svg
+++ b/share/tutorials/tutorial-shapes.de.svg
@@ -473,8 +473,8 @@
<rect id="shapes-f08-de.svgrect2264" transform="translate(10 3006.2) matrix(.99447 .10504 -.99521 .097739 0 0)" stroke="#000" stroke-width=".97176" fill="url(#shapes-f08-de.svglinearGradient4153)" style="color:#000000" fill-rule="evenodd" rx="10.937" ry="7.8879" width="21.022" height="15.702" y="206.94" x="372.11"/>
<rect id="shapes-f08-de.svgrect2259" transform="translate(10 3006.2) matrix(.99447 .10504 -.99521 .097739 0 0)" stroke="#000" stroke-width=".97176" fill="url(#shapes-f08-de.svglinearGradient4150)" style="color:#000000" fill-rule="evenodd" rx="13.386" ry="7.8879" width="52.249" height="47.25" y="270.51" x="440.64"/>
<rect id="shapes-f08-de.svgrect5740" transform="translate(10 3006.2) matrix(.99447 .10504 -.99521 .097739 0 0)" stroke="#000" stroke-width=".97176" fill="url(#shapes-f08-de.svglinearGradient4147)" style="color:#000000" fill-rule="evenodd" rx="4.8633" ry="5.0297" width="9.8364" height="11.479" y="170.7" x="353.52"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="3144.926528" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="3144.926528" x="10">Ellipsen</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="3144.926538" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="3144.926538" x="10">Ellipsen</tspan>
</text>
<rect id="d0e365" display="none" height="1e3px" width="288" y="3150.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
@@ -622,8 +622,8 @@
<path id="shapes-f12-de.svgpath2135" sodipodi:rx="23.418211" sodipodi:ry="25.328613" fill-opacity=".14716" stroke="#000" stroke-width=".75" fill="#ffd300" style="color:#000000" fill-rule="evenodd" transform="translate(10 4060.2) matrix(1.2719 .56475 -.78871 .43604 2855.3 -1599.1)" sodipodi:type="arc" d="m130.72 3607.9a23.418 25.329 0 1 1 -46.835 0 23.418 25.329 0 1 1 46.835 0z" sodipodi:cy="3607.9023" sodipodi:cx="107.30297"/>
<path id="shapes-f12-de.svgpath2774" sodipodi:rx="4.9275141" sodipodi:ry="46.998589" fill-opacity=".14716" stroke="#000" stroke-width=".75" fill="#ffd300" style="color:#000000" fill-rule="evenodd" transform="translate(10 4060.2) matrix(1.2719 .56475 -.78871 .43604 2855.3 -1599.1)" sodipodi:type="arc" d="m112.23 3607.9a4.9275 46.999 0 1 1 -9.85 0 4.9275 46.999 0 1 1 9.85 0z" sodipodi:cy="3607.9023" sodipodi:cx="107.30297"/>
<path id="shapes-f12-de.svgpath2134" sodipodi:rx="23.418211" sodipodi:ry="7.3592744" fill-opacity=".14716" stroke="#000" stroke-width=".75" fill="#ffd300" style="color:#000000" fill-rule="evenodd" transform="translate(10 4060.2) matrix(1.2719 .56475 -.78871 .43604 2855.3 -1599.1)" sodipodi:type="arc" d="m130.72 3607.9a23.418 7.3593 0 1 1 -46.835 0 23.418 7.3593 0 1 1 46.835 0z" sodipodi:cy="3607.9023" sodipodi:cx="107.30297"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4154.239846799999" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="4154.239846799999" x="10">Sterne</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="4154.2398568" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="4154.2398568" x="10">Sterne</tspan>
</text>
<rect id="d0e508" display="none" height="1e3px" width="288" y="4159.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
@@ -909,8 +909,8 @@
<path id="shapes-f20-de.svgpath2857" sodipodi:type="star" sodipodi:sides="7" sodipodi:r1="1395.4882" sodipodi:r2="866.36334" transform="translate(10 6447.4) matrix(-.0089874 0 0 -.0067885 23.879 128.72)" sodipodi:arg2="-1.0962105" sodipodi:arg1="-1.6706296" inkscape:randomized="0.14" sodipodi:cy="945.83423" sodipodi:cx="-564.31024" xmlns:cc="http://creativecommons.org/ns#" inkscape:rounded="0.4" inkscape:flatsided="false" d="m-624.47-581.43c325.22 56.055 9.0386 753.22 309.98 918.23 234.37 128.49 581.31-539.04 760.22-379.94 229.74 204.3-465.84 517.23-317.07 802.08 115.86 221.83 895.34-44.69 853.46 194.02-53.76 306.54-699.31 70.34-850.97 383.64-118.1 244.04 261.11 693.64 5.9323 752.21-327.67 75.209-268.13-428.54-571.07-381.87-235.92 36.343-425.66 907.59-636.9 739.05-271.25-216.43 198.89-667.12-80.939-853.57-217.92-145.2-642.09-86.641-720.66-317.79-100.89-296.82 544.95-125.88 616.97-441.64 56.082-245.9-582.08-516.88-375.45-681.65 265.33-211.58 294.71 291.45 603.54 157.11 240.5-104.62 149.68-933.57 402.95-889.91z"/>
<path id="shapes-f20-de.svgpath2854" sodipodi:type="star" sodipodi:sides="7" sodipodi:r1="1251.4492" sodipodi:r2="717.9032" transform="translate(10 6447.4) matrix(.015753 0 0 .015753 262.21 110.75)" sodipodi:arg2="0.77790537" sodipodi:arg1="0.32910642" inkscape:randomized="0.14" sodipodi:cy="945.83423" sodipodi:cx="-564.31024" xmlns:cc="http://creativecommons.org/ns#" inkscape:rounded="0.4" inkscape:flatsided="false" d="m586.43 1426.2c-43.927 278.16-473.02-298.77-642.89-85.873-169.86 212.9 30.811 778.27-228.27 900.37s-113.21-638.05-388.63-673.98-331.62 698.53-527.43 520.94c-195.81-177.58 331.94-497.35 148.78-716.25s-587.83 148.93-658.44-126.83c-70.61-275.77 281.46-364.74 412.29-596.46s-276.92-479-71.128-630.46c205.8-151.45 366.12 220.77 643.8 138.73s182.27-375.84 449.97-389.69c267.7-13.846-241.94 460.31 23.777 552.89 265.72 92.579 626.35-408.15 720.35-156.88 93.999 251.28-346.05 473.05-354.59 754.56-8.5444 281.51 516.35 230.77 472.42 508.93z"/>
<path id="shapes-f20-de.svgpath1295" sodipodi:type="star" d="m-243.69 1096.3c-31.669 187.63 292.03 205.47 168.19 354.49s-286.2-273.04-452.9-184.99c-166.7 88.051 66.848 485.71-113.84 439.58-180.69-46.129 150.23-338.83-32.762-413.88-183-75.051-457.32 259.79-578.77 103.81s444.89-179.21 432.07-357.15c-12.827-177.94-402.62-55.064-345.92-244.35 56.695-189.29 305.07-15.841 451.17-142.57 146.11-126.73-325.36-272.92-157.71-375.45 167.66-102.53 216.43 413.99 406.72 457.3s142.12-528.03 290.43-397.43c148.32 130.6-148.45 281.4-72.598 448.02 75.85 166.62 316.87-148.25 361.58 32.567 44.715 180.82-323.99 92.409-355.66 280.04z" sodipodi:r1="292.23001" inkscape:flatsided="false" transform="translate(10 6447.4) matrix(.015753 0 0 .015753 170.82 135.17)" sodipodi:arg2="0.77809157" sodipodi:arg1="0.32929262" inkscape:randomized="0.14" sodipodi:cy="945.83423" sodipodi:cx="-564.31024" xmlns:cc="http://creativecommons.org/ns#" inkscape:rounded="0.4" sodipodi:r2="717.9032" sodipodi:sides="7"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="6651.173666600001" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="6651.173666600001" x="10">Spiralen</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="6651.173676600001" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="6651.173676600001" x="10">Spiralen</tspan>
</text>
<rect id="d0e739" display="none" height="1e3px" width="288" y="6656.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
@@ -1049,8 +1049,8 @@
<path id="shapes-f23-de.svgpath3032" sodipodi:argument="-36.806286" stroke="#000" stroke-width="3.75" fill="none" style="color:#000000" transform="translate(10 7381.6) matrix(-.17215 .64245 -.64245 -.17215 4263.8 1103.8)" sodipodi:t0="0.0000000" sodipodi:radius="68.998032" sodipodi:expansion="0.98582262" sodipodi:revolution="18.821123" sodipodi:type="spiral" d="m103.2 6518.4c0.37 0.5-0.43 0.7-0.76 0.6-0.87-0.3-0.89-1.4-0.45-2.1 0.77-1.1 2.44-1.1 3.45-0.3 1.47 1.2 1.37 3.5 0.15 4.8-1.61 1.8-4.43 1.6-6.101 0-2.092-2-1.871-5.4 0.134-7.4 2.417-2.4 6.427-2.1 8.747 0.3 2.72 2.8 2.37 7.4-0.43 10-3.22 3.1-8.406 2.6-11.363-0.5-3.354-3.7-2.878-9.4 0.705-12.7 4.018-3.7 10.388-3.2 13.988 0.8 3.98 4.4 3.38 11.4-0.99 15.3-4.81 4.3-12.365 3.6-16.596-1.1-4.616-5.2-3.884-13.4 1.272-17.9 5.594-4.9 14.334-4.2 19.194 1.4 5.25 6 4.39 15.3-1.55 20.5-6.38 5.6-16.299 4.6-21.796-1.7-5.875-6.8-4.889-17.3 1.835-23.1 7.16-6.2 18.261-5.1 24.391 2 6.5 7.5 5.39 19.2-2.12 25.7-7.94 6.8-20.219 5.6-26.976-2.3-7.132-8.3-5.891-21.2 2.395-28.3 8.724-7.4 22.181-6.1 29.561 2.6 7.76 9.1 6.39 23.1-2.67 30.8-9.5 8.1-24.135 6.7-32.149-2.8-8.385-9.9-6.89-25.1 2.954-33.4 10.283-8.7 26.085-7.2 34.725 3.1 9.01 10.6 7.39 27-3.23 36-11.06 9.3-28.038 7.6-37.305-3.4-9.636-11.4-7.888-29 3.511-38.6 11.839-9.9 29.984-8.1 39.884 3.7 10.26 12.2 8.38 30.9-3.79 41.1-12.62 10.6-31.937 8.7-42.455-3.9-10.886-13-8.885-32.9 4.067-43.7 13.391-11.2 33.878-9.2 45.018 4.2 11.51 13.8 9.39 34.8-4.34 46.3-14.17 11.8-35.824 9.6-47.591-4.5-12.132-14.5-9.879-36.8 4.622-48.9 14.941-12.4 37.769-10.1 50.159 4.8 12.75 15.3 10.37 38.7-4.9 51.4-15.72 13.1-39.709 10.7-52.722-5-13.378-16.1-10.873-40.7 5.176-54 16.488-13.7 41.646-11.1 55.286 5.3 14 16.9 11.37 42.6-5.46 56.6-17.26 14.3-43.581 11.6-57.839-5.6-14.622-17.7-11.865-44.6 5.729-59.1 18.033-15 45.52-12.2 60.4 5.8 15.24 18.4 12.36 46.5-6 61.7-18.81 15.6-47.461 12.6-62.963-6.1-15.864-19.2-12.856-48.5 6.282-64.3 19.576-16.2 49.391-13.1 65.511 6.4 16.49 20 13.36 50.4-6.55 66.8-20.35 16.8-51.33 13.6-68.073-6.7-17.105-20.7-13.847-52.3 6.833-69.3 21.118-17.4 53.26-14.1 70.62 7 17.73 21.5 14.34 54.2-7.11 71.9-21.88 18-55.187 14.5-73.17-7.3-18.345-22.3-14.836-56.1 7.384-74.4 22.658-18.7 57.126-15.1 75.726 7.5 18.96 23 15.33 58.1-7.66 77-23.43 19.3-59.052 15.6-78.275-7.8-19.583-23.8-15.823-60 7.934-79.6 24.197-19.9 60.981-16 80.821 8.1 20.2 24.6 16.32 62-8.21 82.1-24.96 20.5-62.906 16.6-83.367-8.3-20.82-25.4-16.811-63.9 8.485-84.7 25.733-21.1 64.832-17 85.912 8.6 21.44 26.2 17.31 65.8-8.76 87.2-26.5 21.8-66.759 17.6-88.456-8.9-22.057-26.9-17.797-67.7 9.033-89.7 27.269-22.4 68.683-18 91.003 9.2 22.68 27.6 18.29 69.6-9.31 92.2-28.03 23-70.61 18.6-93.543-9.4-23.293-28.4-18.783-71.6 9.582-94.8 28.804-23.6 72.541-19 96.091 9.7 6.5 7.9 11.19 17.3 13.62 27.3" sodipodi:cy="6518.4199" sodipodi:cx="103.19778" stroke-dasharray="1.8749997 1.8749997"/>
<path id="shapes-f23-de.svgpath3088" sodipodi:argument="-36.806286" stroke="#000" stroke-width="7.5" fill="none" style="color:#000000" transform="translate(10 7381.6) matrix(-.17929 .65451 -.66912 -.17538 4637.7 1123.6)" sodipodi:t0="0.0000000" sodipodi:radius="68.998032" sodipodi:expansion="0.98582262" sodipodi:revolution="18.821123" sodipodi:type="spiral" d="m103.2 6518.4c0.37 0.5-0.43 0.7-0.76 0.6-0.87-0.3-0.89-1.4-0.45-2.1 0.77-1.1 2.44-1.1 3.45-0.3 1.47 1.2 1.37 3.5 0.15 4.8-1.61 1.8-4.43 1.6-6.101 0-2.092-2-1.871-5.4 0.134-7.4 2.417-2.4 6.427-2.1 8.747 0.3 2.72 2.8 2.37 7.4-0.43 10-3.22 3.1-8.406 2.6-11.363-0.5-3.354-3.7-2.878-9.4 0.705-12.7 4.018-3.7 10.388-3.2 13.988 0.8 3.98 4.4 3.38 11.4-0.99 15.3-4.81 4.3-12.365 3.6-16.596-1.1-4.616-5.2-3.884-13.4 1.272-17.9 5.594-4.9 14.334-4.2 19.194 1.4 5.25 6 4.39 15.3-1.55 20.5-6.38 5.6-16.299 4.6-21.796-1.7-5.875-6.8-4.889-17.3 1.835-23.1 7.16-6.2 18.261-5.1 24.391 2 6.5 7.5 5.39 19.2-2.12 25.7-7.94 6.8-20.219 5.6-26.976-2.3-7.132-8.3-5.891-21.2 2.395-28.3 8.724-7.4 22.181-6.1 29.561 2.6 7.76 9.1 6.39 23.1-2.67 30.8-9.5 8.1-24.135 6.7-32.149-2.8-8.385-9.9-6.89-25.1 2.954-33.4 10.283-8.7 26.085-7.2 34.725 3.1 9.01 10.6 7.39 27-3.23 36-11.06 9.3-28.038 7.6-37.305-3.4-9.636-11.4-7.888-29 3.511-38.6 11.839-9.9 29.984-8.1 39.884 3.7 10.26 12.2 8.38 30.9-3.79 41.1-12.62 10.6-31.937 8.7-42.455-3.9-10.886-13-8.885-32.9 4.067-43.7 13.391-11.2 33.878-9.2 45.018 4.2 11.51 13.8 9.39 34.8-4.34 46.3-14.17 11.8-35.824 9.6-47.591-4.5-12.132-14.5-9.879-36.8 4.622-48.9 14.941-12.4 37.769-10.1 50.159 4.8 12.75 15.3 10.37 38.7-4.9 51.4-15.72 13.1-39.709 10.7-52.722-5-13.378-16.1-10.873-40.7 5.176-54 16.488-13.7 41.646-11.1 55.286 5.3 14 16.9 11.37 42.6-5.46 56.6-17.26 14.3-43.581 11.6-57.839-5.6-14.622-17.7-11.865-44.6 5.729-59.1 18.033-15 45.52-12.2 60.4 5.8 15.24 18.4 12.36 46.5-6 61.7-18.81 15.6-47.461 12.6-62.963-6.1-15.864-19.2-12.856-48.5 6.282-64.3 19.576-16.2 49.391-13.1 65.511 6.4 16.49 20 13.36 50.4-6.55 66.8-20.35 16.8-51.33 13.6-68.073-6.7-17.105-20.7-13.847-52.3 6.833-69.3 21.118-17.4 53.26-14.1 70.62 7 17.73 21.5 14.34 54.2-7.11 71.9-21.88 18-55.187 14.5-73.17-7.3-18.345-22.3-14.836-56.1 7.384-74.4 22.658-18.7 57.126-15.1 75.726 7.5 18.96 23 15.33 58.1-7.66 77-23.43 19.3-59.052 15.6-78.275-7.8-19.583-23.8-15.823-60 7.934-79.6 24.197-19.9 60.981-16 80.821 8.1 20.2 24.6 16.32 62-8.21 82.1-24.96 20.5-62.906 16.6-83.367-8.3-20.82-25.4-16.811-63.9 8.485-84.7 25.733-21.1 64.832-17 85.912 8.6 21.44 26.2 17.31 65.8-8.76 87.2-26.5 21.8-66.759 17.6-88.456-8.9-22.057-26.9-17.797-67.7 9.033-89.7 27.269-22.4 68.683-18 91.003 9.2 22.68 27.6 18.29 69.6-9.31 92.2-28.03 23-70.61 18.6-93.543-9.4-23.293-28.4-18.783-71.6 9.582-94.8 28.804-23.6 72.541-19 96.091 9.7 6.5 7.9 11.19 17.3 13.62 27.3" sodipodi:cy="6518.4199" sodipodi:cx="103.19778" stroke-dasharray="3.7499994 3.7499994"/>
<path id="shapes-f23-de.svgpath3090" sodipodi:argument="-36.806286" stroke="#000" stroke-width=".60429" fill="none" style="color:#000000" transform="translate(10 7381.6) matrix(-.17929 .65451 -.66912 -.17538 4536.4 1123.2)" sodipodi:t0="0.0000000" sodipodi:radius="68.998032" sodipodi:expansion="0.98582262" sodipodi:revolution="18.821123" sodipodi:type="spiral" d="m103.2 6518.4c0.37 0.5-0.43 0.7-0.76 0.6-0.87-0.3-0.89-1.4-0.45-2.1 0.77-1.1 2.44-1.1 3.45-0.3 1.47 1.2 1.37 3.5 0.15 4.8-1.61 1.8-4.43 1.6-6.101 0-2.092-2-1.871-5.4 0.134-7.4 2.417-2.4 6.427-2.1 8.747 0.3 2.72 2.8 2.37 7.4-0.43 10-3.22 3.1-8.406 2.6-11.363-0.5-3.354-3.7-2.878-9.4 0.705-12.7 4.018-3.7 10.388-3.2 13.988 0.8 3.98 4.4 3.38 11.4-0.99 15.3-4.81 4.3-12.365 3.6-16.596-1.1-4.616-5.2-3.884-13.4 1.272-17.9 5.594-4.9 14.334-4.2 19.194 1.4 5.25 6 4.39 15.3-1.55 20.5-6.38 5.6-16.299 4.6-21.796-1.7-5.875-6.8-4.889-17.3 1.835-23.1 7.16-6.2 18.261-5.1 24.391 2 6.5 7.5 5.39 19.2-2.12 25.7-7.94 6.8-20.219 5.6-26.976-2.3-7.132-8.3-5.891-21.2 2.395-28.3 8.724-7.4 22.181-6.1 29.561 2.6 7.76 9.1 6.39 23.1-2.67 30.8-9.5 8.1-24.135 6.7-32.149-2.8-8.385-9.9-6.89-25.1 2.954-33.4 10.283-8.7 26.085-7.2 34.725 3.1 9.01 10.6 7.39 27-3.23 36-11.06 9.3-28.038 7.6-37.305-3.4-9.636-11.4-7.888-29 3.511-38.6 11.839-9.9 29.984-8.1 39.884 3.7 10.26 12.2 8.38 30.9-3.79 41.1-12.62 10.6-31.937 8.7-42.455-3.9-10.886-13-8.885-32.9 4.067-43.7 13.391-11.2 33.878-9.2 45.018 4.2 11.51 13.8 9.39 34.8-4.34 46.3-14.17 11.8-35.824 9.6-47.591-4.5-12.132-14.5-9.879-36.8 4.622-48.9 14.941-12.4 37.769-10.1 50.159 4.8 12.75 15.3 10.37 38.7-4.9 51.4-15.72 13.1-39.709 10.7-52.722-5-13.378-16.1-10.873-40.7 5.176-54 16.488-13.7 41.646-11.1 55.286 5.3 14 16.9 11.37 42.6-5.46 56.6-17.26 14.3-43.581 11.6-57.839-5.6-14.622-17.7-11.865-44.6 5.729-59.1 18.033-15 45.52-12.2 60.4 5.8 15.24 18.4 12.36 46.5-6 61.7-18.81 15.6-47.461 12.6-62.963-6.1-15.864-19.2-12.856-48.5 6.282-64.3 19.576-16.2 49.391-13.1 65.511 6.4 16.49 20 13.36 50.4-6.55 66.8-20.35 16.8-51.33 13.6-68.073-6.7-17.105-20.7-13.847-52.3 6.833-69.3 21.118-17.4 53.26-14.1 70.62 7 17.73 21.5 14.34 54.2-7.11 71.9-21.88 18-55.187 14.5-73.17-7.3-18.345-22.3-14.836-56.1 7.384-74.4 22.658-18.7 57.126-15.1 75.726 7.5 18.96 23 15.33 58.1-7.66 77-23.43 19.3-59.052 15.6-78.275-7.8-19.583-23.8-15.823-60 7.934-79.6 24.197-19.9 60.981-16 80.821 8.1 20.2 24.6 16.32 62-8.21 82.1-24.96 20.5-62.906 16.6-83.367-8.3-20.82-25.4-16.811-63.9 8.485-84.7 25.733-21.1 64.832-17 85.912 8.6 21.44 26.2 17.31 65.8-8.76 87.2-26.5 21.8-66.759 17.6-88.456-8.9-22.057-26.9-17.797-67.7 9.033-89.7 27.269-22.4 68.683-18 91.003 9.2 22.68 27.6 18.29 69.6-9.31 92.2-28.03 23-70.61 18.6-93.543-9.4-23.293-28.4-18.783-71.6 9.582-94.8 28.804-23.6 72.541-19 96.091 9.7 6.5 7.9 11.19 17.3 13.62 27.3" sodipodi:cy="6518.4199" sodipodi:cx="103.19778" stroke-dasharray="0.60429269 7.2515122"/>
- <text style="writing-mode:lr" font-weight="bold" font-size="8" y="7503.663199799999" x="10" font-family="sans-serif" fill="#000000">
- <tspan y="7503.663199799999" x="10">Fazit</tspan>
+ <text style="writing-mode:lr" font-weight="bold" font-size="8" y="7503.6632098" x="10" font-family="sans-serif" fill="#000000">
+ <tspan y="7503.6632098" x="10">Fazit</tspan>
</text>
<rect id="d0e857" display="none" height="1e3px" width="288" y="7508.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
diff --git a/share/tutorials/tutorial-tracing-pixelart.fr.svg b/share/tutorials/tutorial-tracing-pixelart.fr.svg
index 706a136a8..1bc503511 100644
--- a/share/tutorials/tutorial-tracing-pixelart.fr.svg
+++ b/share/tutorials/tutorial-tracing-pixelart.fr.svg
@@ -40,52 +40,52 @@
<path id="text1896" d="m120.82 12.812 0.1105-0.44803c0.96986-0.03895 1.952-0.10388 2.9465-0.1948-0.0982 0.3896-0.14732 0.5779-0.14731 0.5649l-0.33148 1.2077-0.36831 1.4025-0.90236 3.5647c-0.72436 2.857-1.0865 4.6881-1.0865 5.4932 0 0.38959 0.0921 0.58438 0.27623 0.58438 0.27009 0 0.58929-0.30518 0.95761-0.91554 0.2087-0.35063 0.49721-0.948 0.86553-1.7921l0.38672 0.15584c-0.78573 2.1168-1.6635 3.1752-2.6334 3.1752-0.3192 0-0.57702-0.12337-0.77344-0.37011-0.19644-0.24674-0.29466-0.5649-0.29465-0.95449-0.00001-0.25972 0.0491-0.69477 0.14732-1.3051-0.38059 0.72724-0.69365 1.2532-0.93919 1.5778-0.54019 0.70126-1.1847 1.0519-1.9336 1.0519-0.61386 0-1.1172-0.23375-1.5101-0.70126-0.38058-0.48049-0.57088-1.0973-0.57088-1.8506 0-1.4415 0.51563-2.8375 1.5469-4.1881 1.0435-1.3636 2.1178-2.0453 3.2227-2.0453 0.50336 0.000008 0.92691 0.27921 1.2707 0.83762l0.92077-3.5063c0.12276-0.4675 0.18414-0.75969 0.18415-0.87658-0.00001-0.31166-0.44811-0.4675-1.3443-0.46751m-0.92078 4.4608c-0.78573-0.05194-1.5899 0.81165-2.4124 2.5908-0.76117 1.6363-1.1418 2.9609-1.1418 3.9738 0 0.38959 0.0859 0.70776 0.25781 0.95449 0.18415 0.23376 0.41743 0.35063 0.69979 0.35063 0.71206 0 1.3934-0.62984 2.0441-1.8895 0.87167-1.7012 1.3382-3.2336 1.3996-4.5972 0.0368-0.88306-0.24555-1.3441-0.84711-1.383m9.2438 5.3763 0.36831 0.19479c-0.82256 1.8441-1.7188 2.7661-2.6887 2.7661-0.34375 0-0.62613-0.12986-0.84711-0.38959-0.22099-0.27271-0.33149-0.61685-0.33149-1.0324 0-0.2857 0.0368-0.55192 0.1105-0.79866s0.27623-0.79866 0.60772-1.6558l0.69978-1.7726c0.41742-1.0519 0.62613-1.7596 0.62613-2.1233 0-0.25972-0.10436-0.38958-0.31306-0.38959-0.42971 0.000008-1.019 0.71426-1.7679 2.1427l-0.36831-0.23376c0.87166-1.6882 1.7065-2.5323 2.5045-2.5323 0.33148 0.000008 0.60157 0.12987 0.81029 0.38959 0.2087 0.25973 0.31305 0.59738 0.31306 1.0129-0.00001 0.49349-0.25168 1.409-0.75504 2.7466l-0.77345 2.0453c-0.3192 0.84411-0.4788 1.396-0.4788 1.6558 0 0.23375 0.0982 0.35063 0.29465 0.35063 0.23326 0 0.53405-0.22077 0.90235-0.6623 0.3806-0.45452 0.74276-1.0259 1.0865-1.7142m-0.27623-10.227c0.23325 0.000012 0.42969 0.09092 0.58929 0.27271 0.17188 0.16883 0.25782 0.37662 0.25782 0.62334 0 0.24675-0.0859 0.46103-0.25782 0.64282-0.1596 0.18182-0.35604 0.27272-0.58929 0.27271-0.23326 0.00001-0.43584-0.09089-0.60771-0.27271-0.17188-0.1818-0.25782-0.39607-0.25782-0.64282 0-0.24673 0.0859-0.45451 0.25782-0.62334 0.17187-0.1818 0.37445-0.2727 0.60771-0.27271m8.3563 0.38959 0.1105-0.44803c0.96987-0.03895 1.952-0.10388 2.9465-0.1948-0.0982 0.3896-0.14734 0.5779-0.14733 0.5649l-0.33148 1.2077-0.36831 1.4025-0.90236 3.5647c-0.72435 2.857-1.0865 4.6881-1.0865 5.4932 0 0.38959 0.0921 0.58438 0.27623 0.58438 0.27009 0 0.58928-0.30518 0.9576-0.91554 0.2087-0.35063 0.49722-0.948 0.86554-1.7921l0.38672 0.15584c-0.78573 2.1168-1.6636 3.1752-2.6334 3.1752-0.3192 0-0.57703-0.12337-0.77345-0.37011-0.19644-0.24674-0.29465-0.5649-0.29464-0.95449-0.00001-0.25972 0.0491-0.69477 0.14732-1.3051-0.3806 0.72724-0.69365 1.2532-0.93919 1.5778-0.5402 0.70126-1.1847 1.0519-1.9336 1.0519-0.61386 0-1.1172-0.23375-1.5101-0.70126-0.38058-0.48049-0.57088-1.0973-0.57088-1.8506 0-1.4415 0.51563-2.8375 1.5469-4.1881 1.0435-1.3636 2.1178-2.0453 3.2227-2.0453 0.50335 0.000008 0.92691 0.27921 1.2707 0.83762l0.92078-3.5063c0.12275-0.4675 0.18415-0.75969 0.18416-0.87658-0.00001-0.31166-0.44813-0.4675-1.3443-0.46751m-0.92078 4.4608c-0.78572-0.05194-1.5899 0.81165-2.4124 2.5908-0.76117 1.6363-1.1418 2.9609-1.1418 3.9738 0 0.38959 0.0859 0.70776 0.25783 0.95449 0.18414 0.23376 0.41741 0.35063 0.69978 0.35063 0.71207 0 1.3934-0.62984 2.0441-1.8895 0.87166-1.7012 1.3382-3.2336 1.3996-4.5972 0.0368-0.88306-0.24555-1.3441-0.84712-1.383m11.541-0.19479h1.3075c-0.30692 0.87009-0.72434 2.1427-1.2522 3.818-0.56475 1.8051-0.84712 3.0323-0.84711 3.6816-0.00001 0.27271 0.0982 0.40907 0.29464 0.40907 0.4297 0 1.0313-0.88307 1.8047-2.6492l0.40514 0.17532c-0.51563 1.1818-0.95761 1.9934-1.3259 2.4349-0.36832 0.44153-0.78574 0.6623-1.2522 0.6623-0.76118 0-1.1418-0.36362-1.1418-1.0909 0-0.19479 0.0553-0.59088 0.16574-1.1882-0.87166 1.5324-1.8047 2.2986-2.7992 2.2986-0.62614 0-1.1356-0.22077-1.5285-0.6623-0.39286-0.44153-0.5893-1.0194-0.5893-1.7337 0-1.4804 0.55247-2.9154 1.6574-4.305 1.1049-1.4025 2.2406-2.1038 3.4069-2.1038 0.61385 0.000008 1.0804 0.35713 1.3996 1.0714l0.29465-0.81814m-1.5469 0.23375c-0.36831-0.02596-0.79801 0.2013-1.2891 0.68178-0.4788 0.46752-0.92691 1.0974-1.3443 1.8895-0.83485 1.5713-1.2523 2.8895-1.2523 3.9543 0 0.83112 0.30693 1.2467 0.92077 1.2467 0.99444 0 1.9336-1.0324 2.8176-3.0972 0.60156-1.4025 0.93919-2.5648 1.0128-3.4868 0.0246-0.33764-0.043-0.61684-0.20257-0.83762-0.15961-0.22076-0.38059-0.33764-0.66296-0.35063m9.7893 5.3374 0.36831 0.23375c-0.88395 1.8311-1.9643 2.7466-3.2411 2.7466-0.67524 0-1.2216-0.24025-1.639-0.72074-0.41741-0.48049-0.62613-1.1038-0.62613-1.87 0-0.76619 0.17188-1.5713 0.51564-2.4155 0.35603-0.85709 0.83483-1.6168 1.4364-2.2791 0.90849-1.0129 1.8477-1.5194 2.8176-1.5194 0.4297 0.000008 0.77346 0.11039 1.0313 0.33115 0.27009 0.20779 0.40514 0.4805 0.40515 0.81814-0.00001 0.22078-0.0675 0.40908-0.20258 0.56491-0.13505 0.15584-0.30079 0.23376-0.49721 0.23375-0.17188 0.000007-0.32535-0.06492-0.46039-0.19479-0.12277-0.14284-0.18417-0.30517-0.18416-0.48699-0.00001-0.11687 0.0368-0.23375 0.1105-0.35063 0.0737-0.11687 0.11049-0.19479 0.1105-0.23375-0.00001-0.16882-0.13506-0.25323-0.40515-0.25323-0.54019 0.000008-1.0804 0.43505-1.6206 1.3051-0.42969 0.68828-0.81029 1.5584-1.1418 2.6102-0.33148 1.0389-0.49721 1.896-0.49721 2.5713 0 0.88307 0.36217 1.3246 1.0865 1.3246 0.9576 0 1.8354-0.80515 2.6334-2.4155m5.1362-8.3177h1.2891l-0.79187 2.7466h1.4548l-0.12891 0.44803h-1.4548l-0.34989 1.1298c-0.29465 0.96099-0.60771 2.1233-0.93919 3.4868-0.33147 1.3506-0.49722 2.1362-0.49722 2.357 0 0.29869 0.12891 0.44803 0.38673 0.44803 0.45425 0.000001 1.0006-0.6623 1.639-1.9869 0.0614-0.14285 0.15346-0.31816 0.27623-0.52595l0.36831 0.1948c-0.47881 1.0519-0.83484 1.7272-1.0681 2.0259-0.50336 0.63633-1.0374 0.9545-1.6022 0.9545-0.38058 0-0.68751-0.12337-0.92078-0.37011-0.23325-0.25973-0.34989-0.59088-0.34989-0.99345 0-0.36362 0.0552-0.77268 0.16574-1.2272 0.12278-0.50646 0.51564-1.9609 1.1786-4.3634l0.31306-1.1298h-1.4732l0.14731-0.44803h1.4732l0.88395-2.7466m7.1027 8.3177 0.3683 0.19479c-0.82256 1.8441-1.7188 2.7661-2.6886 2.7661-0.34376 0-0.62614-0.12986-0.84711-0.38959-0.221-0.27271-0.33149-0.61685-0.33149-1.0324 0-0.2857 0.0368-0.55192 0.11049-0.79866 0.0737-0.24674 0.27624-0.79866 0.60771-1.6558l0.69979-1.7726c0.41742-1.0519 0.62613-1.7596 0.62614-2.1233-0.00001-0.25972-0.10436-0.38958-0.31307-0.38959-0.42971 0.000008-1.019 0.71426-1.7679 2.1427l-0.36832-0.23376c0.87167-1.6882 1.7065-2.5323 2.5045-2.5323 0.33148 0.000008 0.60157 0.12987 0.81027 0.38959 0.20872 0.25973 0.31307 0.59738 0.31307 1.0129 0 0.49349-0.25168 1.409-0.75503 2.7466l-0.77345 2.0453c-0.3192 0.84411-0.47881 1.396-0.4788 1.6558-0.00001 0.23375 0.0982 0.35063 0.29463 0.35063 0.23328 0 0.53406-0.22077 0.90237-0.6623 0.38058-0.45452 0.74276-1.0259 1.0865-1.7142m-0.27624-10.227c0.23326 0.000012 0.42969 0.09092 0.58929 0.27271 0.17188 0.16883 0.25782 0.37662 0.25783 0.62334-0.00001 0.24675-0.0859 0.46103-0.25783 0.64282-0.1596 0.18182-0.35603 0.27272-0.58929 0.27271-0.23327 0.00001-0.43583-0.09089-0.60771-0.27271-0.17187-0.1818-0.25783-0.39607-0.25782-0.64282-0.00001-0.24673 0.0859-0.45451 0.25782-0.62334 0.17188-0.1818 0.37444-0.2727 0.60771-0.27271m7.3369 10.227 0.36831 0.23375c-0.88396 1.8311-1.9643 2.7466-3.2411 2.7466-0.67523 0-1.2216-0.24025-1.639-0.72074-0.41741-0.48049-0.62612-1.1038-0.62612-1.87 0-0.76619 0.17188-1.5713 0.51564-2.4155 0.35603-0.85709 0.83482-1.6168 1.4364-2.2791 0.90849-1.0129 1.8477-1.5194 2.8176-1.5194 0.42969 0.000008 0.77345 0.11039 1.0313 0.33115 0.27008 0.20779 0.40514 0.4805 0.40515 0.81814-0.00001 0.22078-0.0675 0.40908-0.20258 0.56491-0.13506 0.15584-0.30079 0.23376-0.49721 0.23375-0.17189 0.000007-0.32536-0.06492-0.46039-0.19479-0.12278-0.14284-0.18417-0.30517-0.18416-0.48699-0.00001-0.11687 0.0368-0.23375 0.11049-0.35063 0.0737-0.11687 0.11049-0.19479 0.1105-0.23375-0.00001-0.16882-0.13505-0.25323-0.40515-0.25323-0.54019 0.000008-1.0804 0.43505-1.6206 1.3051-0.42969 0.68828-0.81028 1.5584-1.1418 2.6102-0.33148 1.0389-0.49722 1.896-0.49722 2.5713 0 0.88307 0.36217 1.3246 1.0865 1.3246 0.95761 0 1.8354-0.80515 2.6334-2.4155m6.3332 0 0.36832 0.19479c-0.82257 1.8441-1.7188 2.7661-2.6887 2.7661-0.34376 0-0.62612-0.12986-0.84711-0.38959-0.22098-0.27271-0.33148-0.61685-0.33148-1.0324 0-0.2857 0.0368-0.55192 0.1105-0.79866 0.0736-0.24674 0.27622-0.79866 0.60771-1.6558l0.69979-1.7726c0.4174-1.0519 0.62612-1.7596 0.62613-2.1233-0.00001-0.25972-0.10436-0.38958-0.31308-0.38959-0.42969 0.000008-1.019 0.71426-1.7679 2.1427l-0.36831-0.23376c0.87167-1.6882 1.7065-2.5323 2.5045-2.5323 0.33147 0.000008 0.60157 0.12987 0.81028 0.38959 0.20871 0.25973 0.31306 0.59738 0.31307 1.0129-0.00001 0.49349-0.25169 1.409-0.75503 2.7466l-0.77346 2.0453c-0.31921 0.84411-0.47881 1.396-0.4788 1.6558-0.00001 0.23375 0.0982 0.35063 0.29465 0.35063 0.23325 0 0.53404-0.22077 0.90236-0.6623 0.38058-0.45452 0.74275-1.0259 1.0865-1.7142m-0.27622-10.227c0.23326 0.000012 0.42969 0.09092 0.5893 0.27271 0.17187 0.16883 0.2578 0.37662 0.25781 0.62334-0.00001 0.24675-0.0859 0.46103-0.25781 0.64282-0.15961 0.18182-0.35604 0.27272-0.5893 0.27271-0.23328 0.00001-0.43585-0.09089-0.60772-0.27271-0.17188-0.1818-0.25781-0.39607-0.25781-0.64282 0-0.24673 0.0859-0.45451 0.25781-0.62334 0.17187-0.1818 0.37444-0.2727 0.60772-0.27271m7.2632 10.383 0.34989 0.25323c-1.0681 1.7012-2.1853 2.5518-3.3516 2.5518-0.62613 0-1.1356-0.20129-1.5285-0.60386-0.39286-0.41556-0.5893-0.95449-0.5893-1.6168 0-1.1558 0.39287-2.409 1.1786-3.7595 1.0927-1.87 2.3326-2.805 3.7199-2.805 0.40513 0.000008 0.73661 0.12987 0.99443 0.38959 0.25781 0.25973 0.38672 0.59088 0.38673 0.99345-0.00001 0.94801-0.62 1.8441-1.86 2.6882-0.40514 0.27272-1.3136 0.71425-2.7255 1.3246-0.20871 0.79217-0.31306 1.4025-0.31306 1.8311 0 0.71425 0.31306 1.0714 0.9392 1.0714 0.45424 0 0.87779-0.16233 1.2707-0.48699 0.40514-0.33764 0.91463-0.948 1.5285-1.8311m-3.278-1.1103c0.23326-0.10389 0.51563-0.24024 0.84711-0.40907 0.71206-0.38959 1.3075-0.90904 1.7863-1.5584 0.49107-0.64931 0.73661-1.2597 0.73662-1.8311-0.00001-0.41555-0.17802-0.62334-0.53405-0.62334-0.50337 0.000008-1.0067 0.3896-1.5101 1.1688-0.49108 0.7662-0.93306 1.8506-1.3259 3.2531m7.1834-8.8826 0.11048-0.44803c0.92078-0.03895 1.9643-0.10388 3.1306-0.1948-0.0982 0.35064-0.17188 0.60388-0.22099 0.7597-0.13505 0.40259-0.32533 1.0129-0.57087 1.8311l-1.4917 5.1426c-0.71206 2.4544-1.0681 3.9608-1.0681 4.5192-0.00001 0.40258 0.11049 0.60386 0.33147 0.60386 0.30693 0 0.68751-0.35063 1.1418-1.0519 0.23327-0.36361 0.49722-0.84411 0.79188-1.4415l0.42355 0.21427c-0.36832 0.71425-0.64455 1.2207-0.8287 1.5194-0.56475 0.89606-1.2093 1.3441-1.9336 1.3441-0.36831 0-0.6691-0.14285-0.90236-0.42855s-0.34989-0.64931-0.34989-1.0908c0-0.54542 0.20871-1.5389 0.62613-2.9804l1.6206-5.5906c0.35603-1.2337 0.53406-1.9285 0.53406-2.0843 0-0.23374-0.0859-0.38958-0.25782-0.46751-0.17188-0.09089-0.53405-0.14284-1.0865-0.15584" sodipodi:nodetypes="cccccccsssccssscsscsssccscccssscscccssssccssccsssccsssccsssssssccccccccsssccssscsscsssccscccssscscccsssccssscssscscccssssssscccsssssssssssssssssssccccccccssscccsssssccccccccssssccssccsssccsssccssssssscccssssssssssssssssssscccssssccssccsssccsssccssssssscccsssssssscsssccccsssccccsccsssccssssccssc" inkscape:connector-curvature="0" fill="#fff"/>
<use id="use1901" opacity=".078652" style="color:black" xlink:href="#text1896" transform="matrix(3.1679 0 0 3.1679 -274.08 -31.04)" height="1052.3622" width="320" y="0" x="0" fill="black"/>
</g>
- <text id="text1920" font-family="sans-serif" font-size="7" transform="scale(1.1307)" y="30" x="35" fill="#ffffff">
+ <text id="text1920" font-family="sans-serif" font-size="7" transform="scale(1.1307)" y="18.25828" x="176.24451" fill="#ffffff">
<tspan id="tspan1668" style="letter-spacing:2.1813" fill="#ffffff" dx="0 -0.57057059 0 0 0 0 0">::VECTORISER DU PIXEL ART</tspan>
</text>
- <rect id="d0e10" display="none" height="1e3px" width="264" y="46" x="35"/>
+ <rect id="d0e10" display="none" height="1e3px" width="264" y="36" x="35"/>
<flowRoot font-family="sans-serif" font-size="7.2" font-style="italic" line-height="150%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e10"/>
</flowRegion>
- <flowDiv xml:space="preserve">Avant que nous ayons accès à des logiciels d&apos;édition vectorielle aussi puissants…</flowDiv>
+ <flowDiv xml:space="preserve">Avant que nous ayons accès à un logiciel d&apos;édition de graphismes vectoriels aussi puissant…</flowDiv>
</flowRoot>
- <rect id="d0e13" display="none" height="1e3px" width="264" y="70.056" x="35"/>
+ <rect id="d0e13" display="none" height="1e3px" width="264" y="60.056" x="35"/>
<flowRoot font-family="sans-serif" font-size="7.2" font-style="italic" line-height="150%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e13"/>
</flowRegion>
<flowDiv xml:space="preserve">Avant même que nous ayons des moniteurs en 640×480…</flowDiv>
</flowRoot>
- <rect id="d0e16" display="none" height="1e3px" width="264" y="83.312" x="35"/>
+ <rect id="d0e16" display="none" height="1e3px" width="264" y="73.312" x="35"/>
<flowRoot font-family="sans-serif" font-size="7.2" font-style="italic" line-height="150%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e16"/>
</flowRegion>
<flowDiv xml:space="preserve">Jouer à des jeux vidéo réalisés avec des pixels savamment assemblés sur des écrans à basse résolution était pratique courante.</flowDiv>
</flowRoot>
- <rect id="d0e19" display="none" height="1e3px" width="264" y="107.37" x="35"/>
+ <rect id="d0e19" display="none" height="1e3px" width="264" y="97.369" x="35"/>
<flowRoot font-family="sans-serif" font-size="7.2" font-style="italic" line-height="150%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e19"/>
</flowRegion>
<flowDiv xml:space="preserve">Ce type d&apos;art imaginé à cette époque est ce que nous appelons « pixel art ».</flowDiv>
</flowRoot>
- <rect id="d0e25" display="none" height="1e3px" width="288" y="136.03" x="10"/>
+ <rect id="d0e25" display="none" height="1e3px" width="288" y="126.03" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e25"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape s&apos;appuie sur la bibliothèque <flowSpan font-weight="bold" font-family="sans-serif">libdepixelize</flowSpan>, ce qui lui permet de vectoriser automatiquement ces images pixel art un peu spéciales. Vous pouvez utiliser cette fonctionnalité avec d&apos;autres types d&apos;images, mais gardez à l&apos;esprit que le résultat ne sera sans doute pas aussi bon qu&apos;avec l&apos;autre outil de vectorisation d&apos;Inkscape, potrace.</flowDiv>
</flowRoot>
- <rect id="d0e31" display="none" height="1e3px" width="288" y="196.64" x="10"/>
+ <rect id="d0e31" display="none" height="1e3px" width="288" y="186.64" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e31"/>
</flowRegion>
<flowDiv xml:space="preserve">Commençons avec un exemple montrant les possibilités du moteur de vectorisation. Nous avons à gauche une image matricielle (extraite du concours Liberated Pixel Cup) et à droite sa version vectorisée.</flowDiv>
</flowRoot>
- <g id="tracing-pixelart-f01-fr.svglayer1-4" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(10 243.99) matrix(1.5291 0 0 1.5291 -42.714 -435.54)">
+ <g id="tracing-pixelart-f01-fr.svglayer1-4" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(10 233.99) matrix(1.5291 0 0 1.5291 -42.714 -435.54)">
<image id="tracing-pixelart-f01-fr.svgimage3063" xlink:href="data:image/png;base64,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 7V/otDX4FA/ZBAAAAABJRU5ErkJggg== " height="54" width="53" y="288.71" x="79.57"/>
<g id="tracing-pixelart-f01-fr.svgg3066" transform="translate(132.57 288.71)">
<path id="tracing-pixelart-f01-fr.svgpath3068" d="m0 0.5v-0.5h0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5v0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5h-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5v-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5m26.125 51.875q0.125 0.375 0.375 0.375t0.375-0.375 0.25-0.75 0.375-0.625 0.375-0.625 0.125-0.875v-0.5l0.375-0.125q0.375-0.125 0.5-0.5t0.125-0.875 0-1v-0.5 0.375 0.375-0.25q0-0.25-0.09375-0.40625l-0.09375-0.15625 0.04687 0.07813 0.04687 0.07813 0.54688-0.04687q0.547-0.047 0.922-0.172t0.625-0.375 0.625-0.375 0.875-0.125 0.875-0.125 0.625-0.375 0.625-0.375 0.75-0.25 0.625-0.375 0.5-0.5 0.5-0.5 0.5-0.5 0.359-0.609l0.11-0.36-0.11-0.015-0.109-0.016 0.219 0.031q0.219 0.031 0.406 0.094l0.187 0.063-0.281-0.094-0.281-0.094 0.375 0.125q0.375 0.125 0.625 0.375t0.625 0.375 0.75 0 0.5-0.5 0-0.75-0.375-0.625-0.375-0.625l-0.125-0.375 0.375-0.125q0.375-0.125 0.625-0.375t0.5-0.5 0.5-0.5 0.5-0.5 0.375-0.625 0.25-0.75 0.375-0.625 0.375-0.625 0.125-0.875 0.125-0.875 0.375-0.625 0.375-0.625 0.172-0.922l0.04687-0.54688-0.07813-0.04687-0.07813-0.04687 0.15625 0.09375q0.156 0.094 0.406 0.094h0.25-0.375-0.375 0.5q0.5 0 1 0t0.875-0.125 0.625-0.375 0.625-0.375 0.75-0.25 0.5-0.5l0.125-0.375h0.5q0.5 0 0.875-0.125t0.375-0.375-0.375-0.375-0.75-0.25-0.625-0.375-0.625-0.375-0.75-0.25-0.625-0.375-0.625-0.375-0.875-0.125-1 0h-0.5 0.375 0.375-0.25q-0.25 0-0.375 0.125l-0.125 0.125 0.062-0.062 0.063-0.063-0.063-0.563q-0.062-0.562-0.187-0.937t-0.375-0.625-0.375-0.625-0.125-0.875-0.125-0.875-0.375-0.625-0.375-0.625-0.25-0.75-0.375-0.625-0.5-0.5-0.5-0.5-0.5-0.5-0.625-0.375l-0.375-0.125 0.125-0.375q0.125-0.375 0.375-0.625t0.375-0.625 0-0.75-0.5-0.5-0.75 0-0.625 0.375-0.625 0.375l-0.375 0.125 0.281-0.094 0.281-0.094-0.187 0.063q-0.1875 0.0625-0.40625 0.09375l-0.219 0.031 0.109-0.016 0.11-0.015-0.11-0.36q-0.109-0.359-0.359-0.609t-0.5-0.5-0.5-0.5-0.5-0.5-0.625-0.375-0.75-0.25-0.625-0.375-0.625-0.375-0.875-0.125-0.875-0.125-0.625-0.375-0.625-0.375-0.922-0.1719l-0.547-0.0469-0.047 0.0782-0.047 0.0781 0.094-0.1563q0.094-0.1562 0.094-0.4062v-0.25 0.375 0.375-0.5q0-0.5 0-1t-0.125-0.875-0.375-0.625-0.375-0.625-0.25-0.75-0.375-0.625-0.375-0.625-0.25-0.75-0.375-0.375-0.375 0.375-0.25 0.75-0.375 0.625-0.375 0.625-0.25 0.75-0.375 0.625-0.375 0.625-0.125 0.875 0.125 0.875 0.375 0.625 0.375 0.625 0.25 0.75 0.375 0.625 0.375 0.625 0 0.75-0.375 0.625-0.5 0.5-0.5 0.5-0.375 0.625-0.125 0.875 0 1 0 1 0 1 0 1 0.125 0.875 0.5 0.5l0.375 0.125-0.125 0.375q-0.125 0.375-0.5 0.5t-0.875 0.125h-0.5v-0.5q0-0.5-0.125-0.875t-0.5-0.5-0.875-0.125-1 0h-0.5l-0.125-0.375q-0.125-0.375-0.375-0.625t-0.5-0.5-0.5-0.5-0.375-0.625-0.125-0.875-0.125-0.875-0.375-0.625-0.5-0.5-0.625-0.375-0.875-0.125-0.875-0.125-0.625-0.375-0.625-0.375-0.75 0-0.5 0.5 0 0.75 0.375 0.625 0.375 0.625l0.125 0.375-0.375 0.125q-0.375 0.125-0.625 0.375t-0.5 0.5-0.5 0.5-0.5 0.5-0.375 0.625-0.25 0.75-0.375 0.625-0.375 0.625-0.125 0.875-0.125 0.875-0.375 0.625-0.375 0.625-0.1875 0.937l-0.0625 0.563 0.0625 0.063 0.0625 0.062-0.125-0.125q-0.125-0.125-0.375-0.125h-0.25 0.375 0.375-0.5q-0.5 0-1 0t-0.875 0.125-0.625 0.375-0.625 0.375-0.75 0.25-0.625 0.375-0.625 0.375-0.75 0.25-0.375 0.375 0.375 0.375 0.875 0.125h0.5l0.125 0.375q0.125 0.375 0.5 0.5t0.75 0.25 0.625 0.375 0.625 0.375 0.875 0.125 1 0h0.5-0.375-0.375 0.25q0.25 0 0.40625-0.09375l0.1563-0.094-0.0781 0.047-0.0782 0.047 0.0469 0.547q0.0469 0.547 0.1719 0.922t0.375 0.625 0.375 0.625 0.125 0.875 0.125 0.875 0.375 0.625 0.375 0.625 0.25 0.75 0.375 0.625 0.5 0.5 0.5 0.5 0.5 0.5 0.625 0.375l0.375 0.125-0.125 0.375q-0.125 0.375-0.375 0.625t-0.375 0.625 0 0.75 0.5 0.5 0.75 0 0.625-0.375 0.625-0.375l0.375-0.125-0.281 0.094-0.281 0.094 0.187-0.063q0.1875-0.0625 0.40625-0.09375l0.219-0.031-0.10938 0.01563-0.10938 0.01563 0.10938 0.35938q0.109 0.359 0.359 0.609t0.5 0.5 0.5 0.5 0.5 0.5 0.625 0.375 0.75 0.25 0.625 0.375 0.625 0.375 0.875 0.125 0.875 0.125 0.625 0.375 0.625 0.375 0.922 0.172l0.54688 0.04687 0.04687-0.07813 0.04687-0.07813-0.09375 0.15625q-0.094 0.156-0.094 0.406v0.25-0.375-0.375 0.5q0 0.5 0 1t0.125 0.875 0.5 0.5l0.375 0.125v0.5q0 0.5 0.125 0.875t0.375 0.625 0.375 0.625 0.25 0.75m-6.125-38.875q0.25 0.25 0.5 0.25t0.5-0.25 0.5-0.5 0.25-0.5-0.25-0.5-0.5-0.5-0.5-0.25-0.5 0.25-0.5 0.5-0.25 0.5 0.25 0.5 0.5 0.5m-1-10q0.25 0.25 0.5 0.25t0.5-0.25 0.5-0.5 0.25-0.5-0.25-0.5-0.5-0.5-0.5-0.25-0.5 0.25-0.5 0.5-0.25 0.5 0.25 0.5 0.5 0.5m-5 6q0.25 0.25 0.5 0.25t0.5-0.25 0.5-0.5 0.25-0.5-0.25-0.5-0.5-0.5-0.5-0.25-0.5 0.25-0.5 0.5-0.25 0.5 0.25 0.5 0.5 0.5" fill-opacity="0" inkscape:connector-curvature="0"/>
@@ -327,14 +327,14 @@
<path id="tracing-pixelart-f01-fr.svgpath3540" d="m26 49.5v-0.5h0.5 0.5v0.5q0 0.5-0.125 0.875t-0.375 0.375-0.375-0.375-0.125-0.875" inkscape:connector-curvature="0" fill="#f8e9c7"/>
</g>
</g>
- <rect id="d0e44" display="none" height="1e3px" width="288" y="338.56" x="10"/>
+ <rect id="d0e44" display="none" height="1e3px" width="288" y="328.56" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e44"/>
</flowRegion>
<flowDiv xml:space="preserve">libdepixelize s&apos;appuie sur l&apos;algorithme Kopf-Lischinski pour vectoriser les images. Cet algorithme utilise les idées de plusieurs techniques informatiques et plusieurs concepts mathématiques pour produire un résultat satisfaisant avec les images pixel art. Détail d&apos;importance, le canal alpha est complètement ignoré par l&apos;algorithme, et il n&apos;existe pas pour l&apos;instant d&apos;extensions permettant ce traitement. Cependant, la vectorisation des images pixel art contenant un canal alpha donne un résultat similaire à celle des images reconnues par Kopf-Lischinski.</flowDiv>
</flowRoot>
- <g id="tracing-pixelart-f02-fr.svglayer1-3" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(10 438.89) matrix(.74809 0 0 .74809 -90.352 -216.94)">
+ <g id="tracing-pixelart-f02-fr.svglayer1-3" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(10 428.89) matrix(.74809 0 0 .74809 -90.352 -216.94)">
<image id="tracing-pixelart-f02-fr.svgimage6827" xlink:href="data:image/png;base64,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 xz7jf4MwidrFWy5FAAAAAElFTkSuQmCC " height="64" width="224" y="292.64" x="224.09"/>
<g id="tracing-pixelart-f02-fr.svgg6830" transform="translate(224.09 356.64)">
<path id="tracing-pixelart-f02-fr.svgpath6832" d="m0 0.5v-0.5h0.5 0.5 0.5 0.5 0.5 0.5l-0.125 0.375q-0.125 0.375-0.375 0.625t-0.5 0.5-0.5 0.5-0.375 0.625-0.125 0.875 0 1 0.125 0.875 0.375 0.625 0.375 0.625 0.25 0.75 0.375 0.625 0.375 0.625 0.25 0.75 0.375 0.625 0.375 0.625 0.25 0.75 0.375 0.625 0.25 0.5-0.375 0.375-0.875 0.125-0.875 0.125-0.625 0.375-0.5 0.5-0.5 0.5-0.625 0.375l-0.375 0.125v-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5-0.5" fill-opacity="0" inkscape:connector-curvature="0"/>
@@ -698,52 +698,52 @@
<path id="tracing-pixelart-f02-fr.svgpath7548" d="m206.11 59.609q0.14-0.359 0.55-0.453l0.4-0.094 0.06-0.062 0.0625-0.0625-0.125 0.125q-0.125 0.125-0.1875 0.3125l-0.0625 0.1875 0.0937-0.28125 0.1-0.28-0.125 0.375q-0.125 0.375-0.5 0.5l-0.38 0.125 0.28125-0.09375 0.28125-0.09375-0.1875 0.0625q-0.1875 0.0625-0.40625 0.09375l-0.22 0.031 0.10937-0.01563 0.10938-0.01563 0.14062-0.35938" inkscape:connector-curvature="0" fill="#cd8b6a"/>
</g>
</g>
- <rect id="d0e57" display="none" height="1e3px" width="288" y="546.65" x="10"/>
+ <rect id="d0e57" display="none" height="1e3px" width="288" y="536.65" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e57"/>
</flowRegion>
<flowDiv xml:space="preserve">L&apos;image ci-dessus contient un canal alpha et sa vectorisation est convenable. Si malgré tout vous trouvez ce résultat insatisfaisant et que vous pensez que la cause en est le canal alpha, contactez le gestionnaire de la bibliothèque libdepixelize (en saisissant un rapport de défaut sur la page du projet) qui se fera un plaisir d&apos;améliorer son algorithme (ce qu&apos;il ne peut pas faire en l&apos;absence de retour sur d&apos;éventuelles images donnant un mauvais résultat).</flowDiv>
</flowRoot>
- <rect id="d0e60" display="none" height="1e3px" width="288" y="628.34" x="10"/>
+ <rect id="d0e60" display="none" height="1e3px" width="288" y="618.34" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e60"/>
</flowRegion>
<flowDiv xml:space="preserve">L&apos;image ci-dessous est une capture d&apos;écran de la boîte de dialogue <flowSpan font-family="sans-serif">Vectoriser du pixel art</flowSpan> que vous pouvez ouvrir avec le menu <flowSpan font-family="sans-serif">Chemin &gt; Vectoriser du pixel art…</flowSpan> ou en cliquant avec le bouton droit de la souris sur une image puis en sélectionnant l&apos;entrée <flowSpan font-family="sans-serif">Vectoriser du pixel art</flowSpan>.</flowDiv>
</flowRoot>
- <g id="tracing-pixelart-f03-fr.svglayer1-42" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Camada 1" transform="translate(10 695.42) matrix(.38212 0 0 .38212 -160.25 -203)">
+ <g id="tracing-pixelart-f03-fr.svglayer1-42" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Camada 1" transform="translate(10 685.42) matrix(.38212 0 0 .38212 -160.25 -203)">
<image id="tracing-pixelart-f03-fr.svgimage3399" xlink:href="data:image/png;base64,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 " height="326" width="304" y="540.79" x="685.14"/>
</g>
- <rect id="d0e82" display="none" height="1e3px" width="288" y="831.99" x="10"/>
+ <rect id="d0e82" display="none" height="1e3px" width="288" y="821.99" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e82"/>
</flowRegion>
<flowDiv xml:space="preserve">La boîte de dialogue propose deux sections : Heuristique et Résultat. Heuristique cible les usages avancés, mais comme les paramètres par défaut sont bien choisis vous ne devriez pas avoir besoin d&apos;y toucher. Nous y reviendrons plus tard après avoir abordé la section Résultat.</flowDiv>
</flowRoot>
- <rect id="d0e85" display="none" height="1e3px" width="288" y="882.08" x="10"/>
+ <rect id="d0e85" display="none" height="1e3px" width="288" y="872.08" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e85"/>
</flowRegion>
<flowDiv xml:space="preserve">L&apos;algorithme Kopf-Lischinski fonctionne (en nous plaçant à un haut niveau) comme un compilateur convertissant les données parmi plusieurs types de représentations. À chaque étape, l&apos;algorithme a le choix d&apos;explorer les opérations que cette représentation propose. Certaines de ces représentations intermédiaires ont un aspect visuel correct (comme une cellule remodelée dans un graphe de Voronoï), d&apos;autres pas (comme un graphe de similitude). Pendant le développement de libdepixelize, les utilisateurs n&apos;ont eu de cesse de demander à ce qu&apos;il soit possible d&apos;exporter ces étapes intermédiaires à partir de la bibliothèque, et l&apos;auteur original a exaucé leurs vœux.</flowDiv>
</flowRoot>
- <rect id="d0e88" display="none" height="1e3px" width="288" y="996.01" x="10"/>
+ <rect id="d0e88" display="none" height="1e3px" width="288" y="986.01" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e88"/>
</flowRegion>
<flowDiv xml:space="preserve">Le paramétrage par défaut devrait donner le résultat le plus lisse possible, ce qui est probablement l&apos;effet désiré. Vous avez déjà vu ce type de résultat dans le premier exemple de ce tutoriel. Pour l&apos;expérimenter vous-même, ouvrez la boîte de dialogue <flowSpan font-family="sans-serif">Vectoriser du pixel art</flowSpan> et cliquez sur <flowSpan font-family="sans-serif">Valider</flowSpan> après avoir sélectionné une image.</flowDiv>
</flowRoot>
- <rect id="d0e97" display="none" height="1e3px" width="288" y="1056.7" x="10"/>
+ <rect id="d0e97" display="none" height="1e3px" width="288" y="1046.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e97"/>
</flowRegion>
<flowDiv xml:space="preserve">Le résultat de type Voronoï ci-dessous est une image de pixels remodelée, dans laquelle les cellules (précédemment des pixels) ont été remodelées pour connecter les pixels faisant partie d&apos;une même fonction. Aucune courbe n&apos;est créée et l&apos;image est toujours composée de lignes droites. La différence peut être observée en agrandissant l&apos;image. Précédemment, les pixels ne pouvaient pas partager de bord avec un voisin en diagonale, même si il ce voisin faisait partie de la même fonction. Mais maintenant (grâce à un graphe de similitude de couleur et l&apos;heuristique que vous pouvez ajuster pour obtenir un meilleur résultat), il est possible de faire en sorte que deux cellules diagonales partagent un bord (auparavant seul un sommet pouvait être partagé entre deux voisins de ce type).</flowDiv>
</flowRoot>
- <g id="tracing-pixelart-f04-fr.svglayer1-0" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(-161.02 909.29)">
+ <g id="tracing-pixelart-f04-fr.svglayer1-0" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(-161.02 899.29)">
<image id="tracing-pixelart-f04-fr.svgimage6827" xlink:href="data:image/png;base64,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 xz7jf4MwidrFWy5FAAAAAElFTkSuQmCC " height="64" width="224" y="292.64" x="224.09"/>
<g id="tracing-pixelart-f04-fr.svgg8176" transform="translate(224.09 356.64)">
<path id="tracing-pixelart-f04-fr.svgpath8178" d="m0 0h1v1h-1" fill-opacity="0" inkscape:connector-curvature="0"/>
@@ -15084,42 +15084,42 @@
<path id="tracing-pixelart-f04-fr.svgpath36848" d="m223 63h1v1h-1" fill-opacity="0" inkscape:connector-curvature="0"/>
</g>
</g>
- <rect id="d0e110" display="none" height="1e3px" width="288" y="1340" x="10"/>
+ <rect id="d0e110" display="none" height="1e3px" width="288" y="1330" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e110"/>
</flowRegion>
<flowDiv xml:space="preserve">La conversion B-spline standard apporte un résultat plus doux car l&apos;image obtenue précédemment avec Voronoï est convertie en courbes de Bézier quadratiques. La conversion n&apos;est cependant pas en 1:1 car elle nécessite un travail heuristique plus conséquent pour décider des courbes qui seront fusionnées lorsque l&apos;algorithme atteint une jonction en T dans les couleurs visibles. Sachez qu&apos;à cette étape, vous ne pouvez pas adapter l&apos;heuristique.</flowDiv>
</flowRoot>
- <rect id="d0e113" display="none" height="1e3px" width="288" y="1421.9" x="10"/>
+ <rect id="d0e113" display="none" height="1e3px" width="288" y="1411.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e113"/>
</flowRegion>
<flowDiv xml:space="preserve">L&apos;étape finale de libdepixelize (actuellement non exportable dans l&apos;interface d&apos;Inkscape du fait de son statut expérimental et incomplet) est l&apos;optimisation des courbes, pour supprimer l&apos;effet d&apos;escalier des courbes B-spline. Cette étape effectue également une détection de bord pour empêcher certaines fonctions d&apos;être lissées ainsi qu&apos;une triangulation pour ajuster la position des nœuds après l&apos;optimisation. Il devrait être possible de désactiver chacune de ces fonctionnalités une fois qu&apos;elles auront quitté leur statut expérimental dans la bibliothèque (bientôt, avec un peu de chance).</flowDiv>
</flowRoot>
- <rect id="d0e116" display="none" height="1e3px" width="288" y="1525" x="10"/>
+ <rect id="d0e116" display="none" height="1e3px" width="288" y="1515" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e116"/>
</flowRegion>
<flowDiv xml:space="preserve">La section Heuristique de l&apos;interface vous permet d&apos;ajuster l&apos;heuristique utilisée par libdepixelize pour décider, lorsqu&apos;elle rencontre un bloc de 2×2 pixels ayant deux diagonales de couleurs similaires, de la connexion à conserver. L&apos;algorithme essaie d&apos;appliquer l&apos;heuristique aux diagonales en conflit puis conserve la connexion du vainqueur. En cas d&apos;égalité, les deux connexions sont supprimées.</flowDiv>
</flowRoot>
- <rect id="d0e119" display="none" height="1e3px" width="288" y="1606.6" x="10"/>
+ <rect id="d0e119" display="none" height="1e3px" width="288" y="1596.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e119"/>
</flowRegion>
<flowDiv xml:space="preserve">Si vous souhaitez analyser l&apos;effet de chaque heuristique et jouer avec le paramétrage, le meilleur résultat est obtenu avec un diagramme de Voronoï, qui vous permettra de visualiser facilement le rendu engendré par les valeurs choisies. Une fois satisfait de vos paramètres, vous pouvez modifier le type de résultat à votre convenance.</flowDiv>
</flowRoot>
- <rect id="d0e122" display="none" height="1e3px" width="288" y="1676" x="10"/>
+ <rect id="d0e122" display="none" height="1e3px" width="288" y="1666" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e122"/>
</flowRegion>
<flowDiv xml:space="preserve">L&apos;exemple ci-dessous montre une image et sa sortie B-spline avec seulement une des heuristiques activée à chaque essai. Les différences apportées par chaque heuristique sont mises en valeur par un cercle violet.</flowDiv>
</flowRoot>
- <g id="tracing-pixelart-f05-fr.svglayer1-0" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(-138.35 1449.5)">
+ <g id="tracing-pixelart-f05-fr.svglayer1-0" xmlns:cc="http://creativecommons.org/ns#" inkscape:label="Layer 1" transform="translate(-138.35 1439.5)">
<image id="tracing-pixelart-f05-fr.svgimage37000" xlink:href="data:image/png;base64,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 " height="63" width="61" y="287.93" x="250.21"/>
<image id="tracing-pixelart-f05-fr.svgimage37003" xlink:href="data:image/png;base64,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 " height="63" width="61" y="350.93" x="250.21"/>
<image id="tracing-pixelart-f05-fr.svgimage37005" xlink:href="data:image/png;base64,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 " height="63" width="61" y="413.93" x="250.21"/>
@@ -15500,72 +15500,72 @@
<path id="tracing-pixelart-f05-fr.svgpath38829" sodipodi:rx="3.0947776" sodipodi:ry="3.0947776" sodipodi:type="arc" d="m369.55 329.16c0 1.7092-1.3856 3.0948-3.0948 3.0948s-3.0948-1.3856-3.0948-3.0948 1.3856-3.0948 3.0948-3.0948 3.0948 1.3856 3.0948 3.0948z" stroke="#f0f" sodipodi:cy="329.15826" sodipodi:cx="366.45908" stroke-width="1.1" fill="none"/>
<path id="tracing-pixelart-f05-fr.svgpath38831" sodipodi:rx="2.5145068" sodipodi:ry="2.5145068" sodipodi:type="arc" d="m362.98 341.92c0 1.3887-1.1258 2.5145-2.5145 2.5145s-2.5145-1.1258-2.5145-2.5145 1.1258-2.5145 2.5145-2.5145 2.5145 1.1258 2.5145 2.5145z" stroke="#f0f" sodipodi:cy="341.92422" sodipodi:cx="360.46292" stroke-width="1.1" fill="none"/>
</g>
- <rect id="d0e135" display="none" height="1e3px" width="288" y="1933.1" x="10"/>
+ <rect id="d0e135" display="none" height="1e3px" width="288" y="1923.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e135"/>
</flowRegion>
<flowDiv xml:space="preserve">Au premier essai (image du haut), nous avons seulement activé l&apos;heuristique Courbes. Cette heuristique tente de conserver les longues courbes connectées. Notez qu&apos;un résultat identique est obtenu avec la dernière image, qui utilise pour sa part l&apos;heuristique Pixels clairsemés. Une différence vient du fait que sa force est plus modérée et qu&apos;elle ne donne de fortes valeurs à son vote que si la conservation des connexions est vraiment importante. La définition de modéré est ici basée sur l&apos;intuition humaine, vue la base de pixels analysée. Une autre différence est que cette heuristique ne peut pas prendre de décision lorsque les connexions assemblent de grands blocs plutôt que des longues courbes (imaginez un jeu d&apos;échecs).</flowDiv>
</flowRoot>
- <rect id="d0e138" display="none" height="1e3px" width="288" y="2057.7" x="10"/>
+ <rect id="d0e138" display="none" height="1e3px" width="288" y="2047.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e138"/>
</flowRegion>
<flowDiv xml:space="preserve">Le deuxième essai (image du milieu) active seulement l&apos;heuristique Îles. Sa seule action consiste à tenter de conserver la connexion entre plusieurs pixels autrement isolés (îles) avec un vote de poids constant. Ce type de situation n&apos;est pas aussi courant que ceux traités par les autres heuristiques, mais cette heuristique amène tout de même une amélioration.</flowDiv>
</flowRoot>
- <rect id="d0e141" display="none" height="1e3px" width="288" y="2127.4" x="10"/>
+ <rect id="d0e141" display="none" height="1e3px" width="288" y="2117.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e141"/>
</flowRegion>
<flowDiv xml:space="preserve">Pour le troisième essai (image du bas), nous avons activé l&apos;heuristique Pixels clairsemés. Cette heuristique tente de converser les courbes avec une couleur de premier plan connectées. Pour déterminer cette couleur, l&apos;heuristique analyse une fenêtre contenant les pixels voisins de la courbe conflictuelle. Vous pouvez ainsi non seulement ajuster sa force, mais également la taille de la fenêtre de pixels à analyser. Gardez à l&apos;esprit que l&apos;augmentation de cette fenêtre augmente aussi la force du vote, et qu&apos;il sera peut-être nécessaire de rééquilibrer en modifiant le multiplicateur. L&apos;auteur original de libdepixelize estime cette heuristique trop gourmande et conseille une valeur de 0,25 pour le multiplicateur.</flowDiv>
</flowRoot>
- <rect id="d0e144" display="none" height="1e3px" width="288" y="2251.9" x="10"/>
+ <rect id="d0e144" display="none" height="1e3px" width="288" y="2241.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e144"/>
</flowRegion>
<flowDiv xml:space="preserve">Même si les heuristiques Courbes et Pixels clairsemés donnent des résultats similaires, il peut être judicieux de les conserver toutes les deux actives pour s&apos;assurer que des pixels nécessaires aux courbes de contour ne seront pas supprimés. Par ailleurs, l&apos;heuristique Pixels clairsemés est dans certains cas la seule solution possible.</flowDiv>
</flowRoot>
- <rect id="d0e147" display="none" height="1e3px" width="288" y="2312.5" x="10"/>
+ <rect id="d0e147" display="none" height="1e3px" width="288" y="2302.5" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e147"/>
</flowRegion>
<flowDiv xml:space="preserve">Astuce : vous pouvez désactiver l&apos;heuristique en positionnant ses valeurs de multiplicateur et de poids à zéro. Vous pouvez faire en sorte que l&apos;heuristique fonctionne à l&apos;encontre de ses principes en utilisant des valeurs négatives pour ces mêmes paramètres. Mais pourquoi donc dégrader la qualité de l&apos;image avec un tel choix ? Et bien, parce que c&apos;est possible, ou parce que vous pourriez vouloir un résultat « artistique ». Quoi qu&apos;il en soit, vous le pouvez, c&apos;est tout.</flowDiv>
</flowRoot>
- <rect id="d0e150" display="none" height="1e3px" width="288" y="2394.4" x="10"/>
+ <rect id="d0e150" display="none" height="1e3px" width="288" y="2384.4" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e150"/>
</flowRegion>
<flowDiv xml:space="preserve">Et voilà ! Nous avons fait le tour de toutes les options disponibles avec la version initiale de libdepixelize. Mais si les recherches de l&apos;auteur de cette bibliothèque et de son mentor réussissent, vous pourriez bien recevoir dans le futur de nouvelles options pour élargir le champ des images pour lesquelles le résultat est satisfaisant. Souhaitons-leur bonne chance !</flowDiv>
</flowRoot>
- <rect id="d0e153" display="none" height="1e3px" width="288" y="2464.1" x="10"/>
+ <rect id="d0e153" display="none" height="1e3px" width="288" y="2454.1" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e153"/>
</flowRegion>
<flowDiv xml:space="preserve">Les images utilisées dans ce tutoriel sont issues du concours Liberated Pixel Cup (pour éviter tout problème de droit). Les liens sont les suivants :</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15 2507.9)"/>
- <rect id="d0e159" display="none" height="1e3px" width="258" y="2501.9" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15 2497.9)"/>
+ <rect id="d0e159" display="none" height="1e3px" width="258" y="2491.9" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e159"/>
</flowRegion>
<flowDiv xml:space="preserve">http://opengameart.org/content/memento</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15 2525.8)"/>
- <rect id="d0e163" display="none" height="1e3px" width="258" y="2519.8" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15 2515.8)"/>
+ <rect id="d0e163" display="none" height="1e3px" width="258" y="2509.8" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e163"/>
</flowRegion>
<flowDiv xml:space="preserve">http://opengameart.org/content/rpg-enemies-bathroom-tiles</flowDiv>
</flowRoot>
- <g transform="translate(0 2537.6)">
+ <g transform="translate(0 2527.6)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.1496 0 0 .46519 -.13015 3495.4)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<filter id="filter57" height="1.2" width="1.2" color-interpolation-filters="sRGB" y="-.1" x="-.1" inkscape:label="Drop shadow, custom">
diff --git a/share/tutorials/tutorial-tracing.fr.svg b/share/tutorials/tutorial-tracing.fr.svg
index eb041f7f1..402a2f0b2 100644
--- a/share/tutorials/tutorial-tracing.fr.svg
+++ b/share/tutorials/tutorial-tracing.fr.svg
@@ -40,160 +40,160 @@
<path id="text1896" d="m120.82 12.812 0.1105-0.44803c0.96986-0.03895 1.952-0.10388 2.9465-0.1948-0.0982 0.3896-0.14732 0.5779-0.14731 0.5649l-0.33148 1.2077-0.36831 1.4025-0.90236 3.5647c-0.72436 2.857-1.0865 4.6881-1.0865 5.4932 0 0.38959 0.0921 0.58438 0.27623 0.58438 0.27009 0 0.58929-0.30518 0.95761-0.91554 0.2087-0.35063 0.49721-0.948 0.86553-1.7921l0.38672 0.15584c-0.78573 2.1168-1.6635 3.1752-2.6334 3.1752-0.3192 0-0.57702-0.12337-0.77344-0.37011-0.19644-0.24674-0.29466-0.5649-0.29465-0.95449-0.00001-0.25972 0.0491-0.69477 0.14732-1.3051-0.38059 0.72724-0.69365 1.2532-0.93919 1.5778-0.54019 0.70126-1.1847 1.0519-1.9336 1.0519-0.61386 0-1.1172-0.23375-1.5101-0.70126-0.38058-0.48049-0.57088-1.0973-0.57088-1.8506 0-1.4415 0.51563-2.8375 1.5469-4.1881 1.0435-1.3636 2.1178-2.0453 3.2227-2.0453 0.50336 0.000008 0.92691 0.27921 1.2707 0.83762l0.92077-3.5063c0.12276-0.4675 0.18414-0.75969 0.18415-0.87658-0.00001-0.31166-0.44811-0.4675-1.3443-0.46751m-0.92078 4.4608c-0.78573-0.05194-1.5899 0.81165-2.4124 2.5908-0.76117 1.6363-1.1418 2.9609-1.1418 3.9738 0 0.38959 0.0859 0.70776 0.25781 0.95449 0.18415 0.23376 0.41743 0.35063 0.69979 0.35063 0.71206 0 1.3934-0.62984 2.0441-1.8895 0.87167-1.7012 1.3382-3.2336 1.3996-4.5972 0.0368-0.88306-0.24555-1.3441-0.84711-1.383m9.2438 5.3763 0.36831 0.19479c-0.82256 1.8441-1.7188 2.7661-2.6887 2.7661-0.34375 0-0.62613-0.12986-0.84711-0.38959-0.22099-0.27271-0.33149-0.61685-0.33149-1.0324 0-0.2857 0.0368-0.55192 0.1105-0.79866s0.27623-0.79866 0.60772-1.6558l0.69978-1.7726c0.41742-1.0519 0.62613-1.7596 0.62613-2.1233 0-0.25972-0.10436-0.38958-0.31306-0.38959-0.42971 0.000008-1.019 0.71426-1.7679 2.1427l-0.36831-0.23376c0.87166-1.6882 1.7065-2.5323 2.5045-2.5323 0.33148 0.000008 0.60157 0.12987 0.81029 0.38959 0.2087 0.25973 0.31305 0.59738 0.31306 1.0129-0.00001 0.49349-0.25168 1.409-0.75504 2.7466l-0.77345 2.0453c-0.3192 0.84411-0.4788 1.396-0.4788 1.6558 0 0.23375 0.0982 0.35063 0.29465 0.35063 0.23326 0 0.53405-0.22077 0.90235-0.6623 0.3806-0.45452 0.74276-1.0259 1.0865-1.7142m-0.27623-10.227c0.23325 0.000012 0.42969 0.09092 0.58929 0.27271 0.17188 0.16883 0.25782 0.37662 0.25782 0.62334 0 0.24675-0.0859 0.46103-0.25782 0.64282-0.1596 0.18182-0.35604 0.27272-0.58929 0.27271-0.23326 0.00001-0.43584-0.09089-0.60771-0.27271-0.17188-0.1818-0.25782-0.39607-0.25782-0.64282 0-0.24673 0.0859-0.45451 0.25782-0.62334 0.17187-0.1818 0.37445-0.2727 0.60771-0.27271m8.3563 0.38959 0.1105-0.44803c0.96987-0.03895 1.952-0.10388 2.9465-0.1948-0.0982 0.3896-0.14734 0.5779-0.14733 0.5649l-0.33148 1.2077-0.36831 1.4025-0.90236 3.5647c-0.72435 2.857-1.0865 4.6881-1.0865 5.4932 0 0.38959 0.0921 0.58438 0.27623 0.58438 0.27009 0 0.58928-0.30518 0.9576-0.91554 0.2087-0.35063 0.49722-0.948 0.86554-1.7921l0.38672 0.15584c-0.78573 2.1168-1.6636 3.1752-2.6334 3.1752-0.3192 0-0.57703-0.12337-0.77345-0.37011-0.19644-0.24674-0.29465-0.5649-0.29464-0.95449-0.00001-0.25972 0.0491-0.69477 0.14732-1.3051-0.3806 0.72724-0.69365 1.2532-0.93919 1.5778-0.5402 0.70126-1.1847 1.0519-1.9336 1.0519-0.61386 0-1.1172-0.23375-1.5101-0.70126-0.38058-0.48049-0.57088-1.0973-0.57088-1.8506 0-1.4415 0.51563-2.8375 1.5469-4.1881 1.0435-1.3636 2.1178-2.0453 3.2227-2.0453 0.50335 0.000008 0.92691 0.27921 1.2707 0.83762l0.92078-3.5063c0.12275-0.4675 0.18415-0.75969 0.18416-0.87658-0.00001-0.31166-0.44813-0.4675-1.3443-0.46751m-0.92078 4.4608c-0.78572-0.05194-1.5899 0.81165-2.4124 2.5908-0.76117 1.6363-1.1418 2.9609-1.1418 3.9738 0 0.38959 0.0859 0.70776 0.25783 0.95449 0.18414 0.23376 0.41741 0.35063 0.69978 0.35063 0.71207 0 1.3934-0.62984 2.0441-1.8895 0.87166-1.7012 1.3382-3.2336 1.3996-4.5972 0.0368-0.88306-0.24555-1.3441-0.84712-1.383m11.541-0.19479h1.3075c-0.30692 0.87009-0.72434 2.1427-1.2522 3.818-0.56475 1.8051-0.84712 3.0323-0.84711 3.6816-0.00001 0.27271 0.0982 0.40907 0.29464 0.40907 0.4297 0 1.0313-0.88307 1.8047-2.6492l0.40514 0.17532c-0.51563 1.1818-0.95761 1.9934-1.3259 2.4349-0.36832 0.44153-0.78574 0.6623-1.2522 0.6623-0.76118 0-1.1418-0.36362-1.1418-1.0909 0-0.19479 0.0553-0.59088 0.16574-1.1882-0.87166 1.5324-1.8047 2.2986-2.7992 2.2986-0.62614 0-1.1356-0.22077-1.5285-0.6623-0.39286-0.44153-0.5893-1.0194-0.5893-1.7337 0-1.4804 0.55247-2.9154 1.6574-4.305 1.1049-1.4025 2.2406-2.1038 3.4069-2.1038 0.61385 0.000008 1.0804 0.35713 1.3996 1.0714l0.29465-0.81814m-1.5469 0.23375c-0.36831-0.02596-0.79801 0.2013-1.2891 0.68178-0.4788 0.46752-0.92691 1.0974-1.3443 1.8895-0.83485 1.5713-1.2523 2.8895-1.2523 3.9543 0 0.83112 0.30693 1.2467 0.92077 1.2467 0.99444 0 1.9336-1.0324 2.8176-3.0972 0.60156-1.4025 0.93919-2.5648 1.0128-3.4868 0.0246-0.33764-0.043-0.61684-0.20257-0.83762-0.15961-0.22076-0.38059-0.33764-0.66296-0.35063m9.7893 5.3374 0.36831 0.23375c-0.88395 1.8311-1.9643 2.7466-3.2411 2.7466-0.67524 0-1.2216-0.24025-1.639-0.72074-0.41741-0.48049-0.62613-1.1038-0.62613-1.87 0-0.76619 0.17188-1.5713 0.51564-2.4155 0.35603-0.85709 0.83483-1.6168 1.4364-2.2791 0.90849-1.0129 1.8477-1.5194 2.8176-1.5194 0.4297 0.000008 0.77346 0.11039 1.0313 0.33115 0.27009 0.20779 0.40514 0.4805 0.40515 0.81814-0.00001 0.22078-0.0675 0.40908-0.20258 0.56491-0.13505 0.15584-0.30079 0.23376-0.49721 0.23375-0.17188 0.000007-0.32535-0.06492-0.46039-0.19479-0.12277-0.14284-0.18417-0.30517-0.18416-0.48699-0.00001-0.11687 0.0368-0.23375 0.1105-0.35063 0.0737-0.11687 0.11049-0.19479 0.1105-0.23375-0.00001-0.16882-0.13506-0.25323-0.40515-0.25323-0.54019 0.000008-1.0804 0.43505-1.6206 1.3051-0.42969 0.68828-0.81029 1.5584-1.1418 2.6102-0.33148 1.0389-0.49721 1.896-0.49721 2.5713 0 0.88307 0.36217 1.3246 1.0865 1.3246 0.9576 0 1.8354-0.80515 2.6334-2.4155m5.1362-8.3177h1.2891l-0.79187 2.7466h1.4548l-0.12891 0.44803h-1.4548l-0.34989 1.1298c-0.29465 0.96099-0.60771 2.1233-0.93919 3.4868-0.33147 1.3506-0.49722 2.1362-0.49722 2.357 0 0.29869 0.12891 0.44803 0.38673 0.44803 0.45425 0.000001 1.0006-0.6623 1.639-1.9869 0.0614-0.14285 0.15346-0.31816 0.27623-0.52595l0.36831 0.1948c-0.47881 1.0519-0.83484 1.7272-1.0681 2.0259-0.50336 0.63633-1.0374 0.9545-1.6022 0.9545-0.38058 0-0.68751-0.12337-0.92078-0.37011-0.23325-0.25973-0.34989-0.59088-0.34989-0.99345 0-0.36362 0.0552-0.77268 0.16574-1.2272 0.12278-0.50646 0.51564-1.9609 1.1786-4.3634l0.31306-1.1298h-1.4732l0.14731-0.44803h1.4732l0.88395-2.7466m7.1027 8.3177 0.3683 0.19479c-0.82256 1.8441-1.7188 2.7661-2.6886 2.7661-0.34376 0-0.62614-0.12986-0.84711-0.38959-0.221-0.27271-0.33149-0.61685-0.33149-1.0324 0-0.2857 0.0368-0.55192 0.11049-0.79866 0.0737-0.24674 0.27624-0.79866 0.60771-1.6558l0.69979-1.7726c0.41742-1.0519 0.62613-1.7596 0.62614-2.1233-0.00001-0.25972-0.10436-0.38958-0.31307-0.38959-0.42971 0.000008-1.019 0.71426-1.7679 2.1427l-0.36832-0.23376c0.87167-1.6882 1.7065-2.5323 2.5045-2.5323 0.33148 0.000008 0.60157 0.12987 0.81027 0.38959 0.20872 0.25973 0.31307 0.59738 0.31307 1.0129 0 0.49349-0.25168 1.409-0.75503 2.7466l-0.77345 2.0453c-0.3192 0.84411-0.47881 1.396-0.4788 1.6558-0.00001 0.23375 0.0982 0.35063 0.29463 0.35063 0.23328 0 0.53406-0.22077 0.90237-0.6623 0.38058-0.45452 0.74276-1.0259 1.0865-1.7142m-0.27624-10.227c0.23326 0.000012 0.42969 0.09092 0.58929 0.27271 0.17188 0.16883 0.25782 0.37662 0.25783 0.62334-0.00001 0.24675-0.0859 0.46103-0.25783 0.64282-0.1596 0.18182-0.35603 0.27272-0.58929 0.27271-0.23327 0.00001-0.43583-0.09089-0.60771-0.27271-0.17187-0.1818-0.25783-0.39607-0.25782-0.64282-0.00001-0.24673 0.0859-0.45451 0.25782-0.62334 0.17188-0.1818 0.37444-0.2727 0.60771-0.27271m7.3369 10.227 0.36831 0.23375c-0.88396 1.8311-1.9643 2.7466-3.2411 2.7466-0.67523 0-1.2216-0.24025-1.639-0.72074-0.41741-0.48049-0.62612-1.1038-0.62612-1.87 0-0.76619 0.17188-1.5713 0.51564-2.4155 0.35603-0.85709 0.83482-1.6168 1.4364-2.2791 0.90849-1.0129 1.8477-1.5194 2.8176-1.5194 0.42969 0.000008 0.77345 0.11039 1.0313 0.33115 0.27008 0.20779 0.40514 0.4805 0.40515 0.81814-0.00001 0.22078-0.0675 0.40908-0.20258 0.56491-0.13506 0.15584-0.30079 0.23376-0.49721 0.23375-0.17189 0.000007-0.32536-0.06492-0.46039-0.19479-0.12278-0.14284-0.18417-0.30517-0.18416-0.48699-0.00001-0.11687 0.0368-0.23375 0.11049-0.35063 0.0737-0.11687 0.11049-0.19479 0.1105-0.23375-0.00001-0.16882-0.13505-0.25323-0.40515-0.25323-0.54019 0.000008-1.0804 0.43505-1.6206 1.3051-0.42969 0.68828-0.81028 1.5584-1.1418 2.6102-0.33148 1.0389-0.49722 1.896-0.49722 2.5713 0 0.88307 0.36217 1.3246 1.0865 1.3246 0.95761 0 1.8354-0.80515 2.6334-2.4155m6.3332 0 0.36832 0.19479c-0.82257 1.8441-1.7188 2.7661-2.6887 2.7661-0.34376 0-0.62612-0.12986-0.84711-0.38959-0.22098-0.27271-0.33148-0.61685-0.33148-1.0324 0-0.2857 0.0368-0.55192 0.1105-0.79866 0.0736-0.24674 0.27622-0.79866 0.60771-1.6558l0.69979-1.7726c0.4174-1.0519 0.62612-1.7596 0.62613-2.1233-0.00001-0.25972-0.10436-0.38958-0.31308-0.38959-0.42969 0.000008-1.019 0.71426-1.7679 2.1427l-0.36831-0.23376c0.87167-1.6882 1.7065-2.5323 2.5045-2.5323 0.33147 0.000008 0.60157 0.12987 0.81028 0.38959 0.20871 0.25973 0.31306 0.59738 0.31307 1.0129-0.00001 0.49349-0.25169 1.409-0.75503 2.7466l-0.77346 2.0453c-0.31921 0.84411-0.47881 1.396-0.4788 1.6558-0.00001 0.23375 0.0982 0.35063 0.29465 0.35063 0.23325 0 0.53404-0.22077 0.90236-0.6623 0.38058-0.45452 0.74275-1.0259 1.0865-1.7142m-0.27622-10.227c0.23326 0.000012 0.42969 0.09092 0.5893 0.27271 0.17187 0.16883 0.2578 0.37662 0.25781 0.62334-0.00001 0.24675-0.0859 0.46103-0.25781 0.64282-0.15961 0.18182-0.35604 0.27272-0.5893 0.27271-0.23328 0.00001-0.43585-0.09089-0.60772-0.27271-0.17188-0.1818-0.25781-0.39607-0.25781-0.64282 0-0.24673 0.0859-0.45451 0.25781-0.62334 0.17187-0.1818 0.37444-0.2727 0.60772-0.27271m7.2632 10.383 0.34989 0.25323c-1.0681 1.7012-2.1853 2.5518-3.3516 2.5518-0.62613 0-1.1356-0.20129-1.5285-0.60386-0.39286-0.41556-0.5893-0.95449-0.5893-1.6168 0-1.1558 0.39287-2.409 1.1786-3.7595 1.0927-1.87 2.3326-2.805 3.7199-2.805 0.40513 0.000008 0.73661 0.12987 0.99443 0.38959 0.25781 0.25973 0.38672 0.59088 0.38673 0.99345-0.00001 0.94801-0.62 1.8441-1.86 2.6882-0.40514 0.27272-1.3136 0.71425-2.7255 1.3246-0.20871 0.79217-0.31306 1.4025-0.31306 1.8311 0 0.71425 0.31306 1.0714 0.9392 1.0714 0.45424 0 0.87779-0.16233 1.2707-0.48699 0.40514-0.33764 0.91463-0.948 1.5285-1.8311m-3.278-1.1103c0.23326-0.10389 0.51563-0.24024 0.84711-0.40907 0.71206-0.38959 1.3075-0.90904 1.7863-1.5584 0.49107-0.64931 0.73661-1.2597 0.73662-1.8311-0.00001-0.41555-0.17802-0.62334-0.53405-0.62334-0.50337 0.000008-1.0067 0.3896-1.5101 1.1688-0.49108 0.7662-0.93306 1.8506-1.3259 3.2531m7.1834-8.8826 0.11048-0.44803c0.92078-0.03895 1.9643-0.10388 3.1306-0.1948-0.0982 0.35064-0.17188 0.60388-0.22099 0.7597-0.13505 0.40259-0.32533 1.0129-0.57087 1.8311l-1.4917 5.1426c-0.71206 2.4544-1.0681 3.9608-1.0681 4.5192-0.00001 0.40258 0.11049 0.60386 0.33147 0.60386 0.30693 0 0.68751-0.35063 1.1418-1.0519 0.23327-0.36361 0.49722-0.84411 0.79188-1.4415l0.42355 0.21427c-0.36832 0.71425-0.64455 1.2207-0.8287 1.5194-0.56475 0.89606-1.2093 1.3441-1.9336 1.3441-0.36831 0-0.6691-0.14285-0.90236-0.42855s-0.34989-0.64931-0.34989-1.0908c0-0.54542 0.20871-1.5389 0.62613-2.9804l1.6206-5.5906c0.35603-1.2337 0.53406-1.9285 0.53406-2.0843 0-0.23374-0.0859-0.38958-0.25782-0.46751-0.17188-0.09089-0.53405-0.14284-1.0865-0.15584" sodipodi:nodetypes="cccccccsssccssscsscsssccscccssscscccssssccssccsssccsssccsssssssccccccccsssccssscsscsssccscccssscscccsssccssscssscscccssssssscccsssssssssssssssssssccccccccssscccsssssccccccccssssccssccsssccsssccssssssscccssssssssssssssssssscccssssccssccsssccsssccssssssscccsssssssscsssccccsssccccsccsssccssssccssc" inkscape:connector-curvature="0" fill="#fff"/>
<use id="use1901" opacity=".078652" style="color:black" xlink:href="#text1896" transform="matrix(3.1679 0 0 3.1679 -274.08 -31.04)" height="1052.3622" width="320" y="0" x="0" fill="black"/>
</g>
- <text id="text1920" font-family="sans-serif" font-size="7" transform="scale(1.1307)" y="30" x="35" fill="#ffffff">
- <tspan id="tspan1668" style="letter-spacing:2.1813" fill="#ffffff" dx="0 -0.57057059 0 0 0 0 0">::VECTORISER UNE IMAGE MATRICIELLE</tspan>
+ <text id="text1920" font-family="sans-serif" font-size="7" transform="scale(1.1307)" y="18.25828" x="176.24451" fill="#ffffff">
+ <tspan id="tspan1668" style="letter-spacing:2.1813" fill="#ffffff" dx="0 -0.57057059 0 0 0 0 0">::VECTORISATION</tspan>
</text>
- <rect id="d0e10" display="none" height="1e3px" width="264" y="46" x="35"/>
+ <rect id="d0e10" display="none" height="1e3px" width="264" y="36" x="35"/>
<flowRoot font-family="sans-serif" font-size="7.2" font-style="italic" line-height="150%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e10"/>
</flowRegion>
<flowDiv xml:space="preserve">Inkscape permet de vectoriser des images matricielles, pour en faire un chemin (élément &lt;path&gt;) inséré dans votre dessin SVG. Ce didacticiel devrait vous aider à prendre en main l&apos;outil.</flowDiv>
</flowRoot>
- <rect id="d0e16" display="none" height="1e3px" width="288" y="86.568" x="10"/>
+ <rect id="d0e16" display="none" height="1e3px" width="288" y="76.568" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e16"/>
</flowRegion>
<flowDiv xml:space="preserve">À l&apos;heure actuelle, Inkscape utilise le moteur de vectorisation d&apos;images matricielles Potrace (<flowSpan font-weight="bold" font-family="sans-serif">potrace.sourceforge.net</flowSpan>) créé par Peter Selinger. Dans le futur, nous espérons permettre l&apos;utilisation d&apos;autres programmes/moteurs de vectorisation ; pour le moment, cependant, cet excellent outil est plus que suffisant pour nos besoins.</flowDiv>
</flowRoot>
- <rect id="d0e22" display="none" height="1e3px" width="288" y="148.21" x="10"/>
+ <rect id="d0e22" display="none" height="1e3px" width="288" y="138.21" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e22"/>
</flowRegion>
<flowDiv xml:space="preserve">Gardez à l&apos;esprit que le but de la vectorisation avec cet outil n&apos;est pas de produire une duplication exacte de l&apos;image originale, ni de produire un résultat finalisé. Aucun outil de vectorisation automatique ne peut produire cela. Vous obtiendrez un ensemble de courbes que vous pourrez utiliser comme ressources dans votre dessin.</flowDiv>
</flowRoot>
- <rect id="d0e25" display="none" height="1e3px" width="288" y="208.82" x="10"/>
+ <rect id="d0e25" display="none" height="1e3px" width="288" y="198.82" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e25"/>
</flowRegion>
<flowDiv xml:space="preserve">Potrace interprète une image matricielle en noir et blanc, et produit un ensemble de courbes. Nous avons trois types de filtres d&apos;entrée pour Potrace, afin de convertir les images brutes en quelque chose que Potrace peut exploiter.</flowDiv>
</flowRoot>
- <rect id="d0e28" display="none" height="1e3px" width="288" y="258.8" x="10"/>
+ <rect id="d0e28" display="none" height="1e3px" width="288" y="248.8" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e28"/>
</flowRegion>
<flowDiv xml:space="preserve">En général, plus il y a de pixels sombres dans l&apos;image intermédiaire, plus la vectorisation générée par Potrace sera importante. Plus la vectorisation est importante, et plus le temps du processus sera grand et plus le chemin résultant sera important. Nous vous suggérons d&apos;expérimenter cela avec des images intermédiaires plutôt claires, en les assombrissant autant que nécessaire afin d&apos;obtenir les taille et complexité désirées pour le chemin résultant.</flowDiv>
</flowRoot>
- <rect id="d0e31" display="none" height="1e3px" width="288" y="340.7" x="10"/>
+ <rect id="d0e31" display="none" height="1e3px" width="288" y="330.7" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e31"/>
</flowRegion>
<flowDiv xml:space="preserve">Pour utiliser l&apos;outil de vectorisation, ouvrez ou importez une image, sélectionnez-la, et lancez la commande <flowSpan font-family="sans-serif">Chemin &gt; Vectoriser un objet matriciel</flowSpan> ou appuyez sur <flowSpan font-weight="bold">Maj+Alt+B</flowSpan>.</flowDiv>
</flowRoot>
- <text id="tracing-f01-fr.svgtext7000" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 387.84)" xml:space="preserve" line-height="100.00000%" font-size="5.7038" y="99.753128" x="101.47987" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f01-fr.svgtspan7001" sodipodi:role="line" y="99.753128" x="101.47987">Options principales de vectorisation</tspan></text>
- <image id="tracing-f01-fr.svgimage2577" sodipodi:absref="/potrace-fr.png" xlink:href="potrace-fr.png" transform="translate(10 387.84)" height="91.738" width="189.28" display="block" y="-.000017236" x="65.359"/>
- <rect id="d0e50" display="none" height="1e3px" width="288" y="500.78" x="10"/>
+ <text id="tracing-f01-fr.svgtext7000" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 377.84)" xml:space="preserve" line-height="100.00000%" font-size="5.7038" y="99.753128" x="101.47987" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f01-fr.svgtspan7001" sodipodi:role="line" y="99.753128" x="101.47987">Options principales de vectorisation</tspan></text>
+ <image id="tracing-f01-fr.svgimage2577" sodipodi:absref="/potrace-fr.png" xlink:href="potrace-fr.png" transform="translate(10 377.84)" height="91.738" width="189.28" display="block" y="-.000017236" x="65.359"/>
+ <rect id="d0e50" display="none" height="1e3px" width="288" y="490.78" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e50"/>
</flowRegion>
<flowDiv xml:space="preserve">Vous voyez trois options de filtrage disponibles :</flowDiv>
</flowRoot>
- <circle cy="0" cx="0" r="2" transform="translate(15 524.63)"/>
- <rect id="d0e56" display="none" height="1e3px" width="258" y="518.63" x="20"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15 514.63)"/>
+ <rect id="d0e56" display="none" height="1e3px" width="258" y="508.63" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e56"/>
</flowRegion>
<flowDiv xml:space="preserve">Seuil de luminosité</flowDiv>
</flowRoot>
- <rect id="d0e60" display="none" height="1e3px" width="288" y="535.14" x="10"/>
+ <rect id="d0e60" display="none" height="1e3px" width="288" y="525.14" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e60"/>
</flowRegion>
<flowDiv xml:space="preserve">Cette option utilise simplement la somme des composantes rouge, bleue et verte (ou la nuance de gris) d&apos;un pixel pour déterminer s&apos;il doit être considéré comme blanc ou noir. Le seuil peut être réglé entre 0,0 (noir) et 1,0 (blanc). Plus ce seuil est grand, moins les pixels considérés comme « blancs » seront nombreux et plus l&apos;image intermédiaire sera sombre.</flowDiv>
</flowRoot>
- <text id="tracing-f02-fr.svgtext1823" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 612.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.154671" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1824" y="97.154671" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
- <text id="tracing-f02-fr.svgtext1826" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 612.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="158.69894" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1827" y="97.378670" x="158.69894" sodipodi:role="line">Seuil de luminosité</tspan><tspan id="tracing-f02-fr.svgtspan1829" y="103.37867" x="158.69894" sodipodi:role="line">Rempli, sans contour</tspan></text>
- <text id="tracing-f02-fr.svgtext1483" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 612.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="244.99974" font-family="sans-serif" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1488" sodipodi:role="line" y="97.378670" x="244.99974">Seuil de luminosité</tspan><tspan id="tracing-f02-fr.svgtspan1490" sodipodi:role="line" y="103.37867" x="244.99974">Contour, non rempli</tspan></text>
- <image id="tracing-f02-fr.svgimage1881" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 612.54)" height="91.143" width="76.965" y="-.000030566" x="31.099"/>
- <path id="tracing-f02-fr.svgpath1510" d="m143.52 88.292c-0.98-0.462-5.29-1.79-9.59-2.949-4.69-1.268-8.01-2.426-8.31-2.906-0.35-0.559-0.23-1.667 0.4-3.69 0.63-1.993 0.81-3.616 0.59-5.227-0.23-1.699-0.17-2.185 0.24-1.78 0.58 0.578 0.39 5.786-0.3 8.391-0.33 1.249-0.18 1.469 1.38 2.123 0.96 0.402 2.98 0.878 4.49 1.059 1.51 0.18 5.17 0.9 8.13 1.599 5.16 1.219 5.46 1.236 7.17 0.42 2.23-1.056 3.52-3.54 3.06-5.864-0.18-0.912-1.93-4.183-3.88-7.27-6.12-9.695-7.43-10.949-10.05-9.61-1.3 0.662-1.37 0.63-1.67-0.755-0.44-1.973 0.07-3.816 2.05-7.4 0.91-1.671 2.24-4.797 2.94-6.947 1.58-4.861 1.98-5.607 4.63-8.75 1.18-1.393 2.84-3.637 3.69-4.988l1.55-2.455-0.3-9.799c-0.27-8.636-0.2-10.078 0.6-12.155 2.02-5.2945 5.84-7.6316 11.78-7.2035 5.44 0.3915 9.13 2.6265 11.64 7.0429 1.39 2.4446 1.65 3.8166 2.1 11.044 0.38 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.54 6.058 4.92 7.63 4.74 5.416 7.27 12.192 7.26 19.475 0 4.73-0.04 4.859-1.95 7.733-2.45 3.696-3.51 4.42-6.43 4.42-3.64 0-3.75-0.301-3.78-10.332-0.03-9.592-0.62-12.245-3.68-16.613-0.84-1.194-1.68-2.968-1.86-3.943-0.36-1.872-4.22-10.158-4.98-10.696-0.24-0.174-0.19-0.473 0.12-0.663 0.7-0.434 0.73-3.155 0.04-3.581-0.32-0.201-0.23-0.717 0.26-1.409 1.04-1.49 0.96-3.563-0.24-5.913-1.16-2.267-2.53-2.888-4.54-2.055-1.82 0.756-2.77 2.56-2.44 4.669 0.28 1.844 0.04 2.939-0.65 2.939-0.25 0-0.31-0.377-0.13-0.838 0.28-0.719 0.03-0.798-1.73-0.562l-2.06 0.276 0.25-1.843c0.18-1.383-0.03-2.192-0.85-3.236-2.21-2.801-4.57-1.026-4.57 3.434 0 2.704 0.95 4.697 1.95 4.079 0.44-0.268 0.39-0.653-0.17-1.456-0.91-1.296-1-3.468-0.18-4.286 0.81-0.816 2.26 0.052 2.64 1.586 0.17 0.678 0.45 1.596 0.62 2.039 0.18 0.457 0.05 0.807-0.29 0.807-0.82 0-1.75 1.003-2.78 3.002-0.83 1.615-0.83 1.727 0.09 2.649 2.15 2.147 7.39 1.506 11.85-1.449 1.09-0.722 2.11-1.193 2.25-1.048 0.26 0.26-1.92 1.798-5.04 3.554-0.9 0.506-2.63 0.886-4.04 0.886-2.14 0.001-2.38 0.103-1.84 0.761 0.84 1.012 2.28 0.957 5.87-0.226 2.94-0.967 2.97-0.968 1.73-0.012-3.9 2.997-6.45 3.044-9.62 0.177-2.06-1.856-2.53-1.631-2.53 1.197 0 0.719-0.67 2.352-1.49 3.63-0.82 1.277-1.77 3.462-2.11 4.854-0.34 1.393-1.73 4.811-3.07 7.596-2.53 5.219-3.72 10.589-2.97 13.412 0.21 0.78 2.23 2.794 5.23 5.213 5.27 4.24 6.21 5.742 4.64 7.472-0.49 0.546-1.2 0.992-1.58 0.992-1.88 0 0.64 3.606 3.23 4.611 2.07 0.809 7.95 0.631 10.84-0.329 2.78-0.922 6.39-3.415 8.92-6.156l1.65-1.782v5.145c0 5.79 0.69 7.842 2.93 8.694 2 0.759 4.39 0.138 9.17-2.376 4.89-2.573 5.77-2.838 2.73-0.821-1.17 0.776-3.11 2.335-4.31 3.464-2.93 2.745-3.94 3.222-6.82 3.22-2.62-0.002-5.73-1.476-5.73-2.717 0-1.108-1.67-1.318-10.58-1.325l-8.3-0.007-2.26 1.852c-2.71 2.221-5.89 2.721-8.73 1.373zm30.67-58.699c-1.25-0.92-1.55-0.614-0.79 0.799 0.45 0.848 0.73 0.97 1.18 0.516 0.44-0.452 0.35-0.769-0.39-1.315zm-6.37-22.281c0-0.1228-0.22-0.2233-0.5-0.2233s-0.51 0.2413-0.51 0.5363c0 0.2949 0.23 0.3954 0.51 0.2232 0.28-0.1721 0.5-0.4134 0.5-0.5362zm-41.47 62.658c-0.06-1.419 0.79-3.132 1.55-3.132 0.37 0 0.36 0.236-0.05 0.727-0.33 0.4-0.8 1.369-1.03 2.152-0.39 1.283-0.44 1.308-0.47 0.253zm4.51-3.491c1.71-0.137 2.58-0.525 3.47-1.557 0.66-0.756 1.02-1.033 0.81-0.615-1.02 2.012-1.92 2.531-4.23 2.443l-2.33-0.089 2.28-0.182zm33.11-43.574c-1.09-0.716-1.32-2.655-0.48-3.942 1.47-2.247 3.83-1.298 3.83 1.544 0 2.322-1.66 3.51-3.35 2.398z" transform="translate(10 612.54)"/>
- <path id="tracing-f02-fr.svgpath1515" d="m229.82 88.292c-0.98-0.463-5.29-1.79-9.59-2.949-4.69-1.268-8.01-2.426-8.31-2.907-0.35-0.558-0.23-1.666 0.4-3.689 0.63-1.993 0.81-3.616 0.59-5.227-0.23-1.699-0.16-2.185 0.24-1.78 0.58 0.578 0.39 5.786-0.3 8.391-0.33 1.249-0.18 1.469 1.38 2.123 0.96 0.402 2.98 0.878 4.49 1.059 1.51 0.18 5.17 0.9 8.13 1.599 5.16 1.219 5.46 1.236 7.18 0.42 2.22-1.056 3.51-3.54 3.05-5.864-0.18-0.912-1.93-4.183-3.88-7.27-6.12-9.695-7.43-10.949-10.05-9.61-1.3 0.662-1.37 0.63-1.67-0.755-0.44-1.973 0.07-3.816 2.05-7.4 0.92-1.671 2.24-4.797 2.94-6.947 1.58-4.861 1.98-5.607 4.63-8.75 1.18-1.393 2.84-3.637 3.69-4.988l1.55-2.455-0.3-9.799c-0.27-8.636-0.19-10.078 0.6-12.155 2.02-5.2945 5.84-7.6316 11.79-7.2035 5.43 0.3914 9.12 2.6265 11.63 7.0429 1.39 2.4446 1.65 3.8166 2.1 11.044 0.38 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.55 6.058 4.92 7.63 4.74 5.416 7.27 12.192 7.26 19.475 0 4.73-0.03 4.859-1.94 7.733-2.46 3.696-3.52 4.42-6.44 4.42-3.63 0-3.75-0.302-3.78-10.332-0.03-9.592-0.62-12.245-3.68-16.613-0.84-1.194-1.68-2.968-1.86-3.943-0.36-1.872-4.22-10.158-4.98-10.696-0.24-0.174-0.19-0.473 0.12-0.663 0.7-0.434 0.73-3.155 0.04-3.581-0.32-0.201-0.23-0.717 0.26-1.409 1.04-1.49 0.96-3.563-0.24-5.913-1.16-2.267-2.53-2.888-4.54-2.055-1.82 0.756-2.77 2.56-2.44 4.669 0.28 1.844 0.04 2.939-0.65 2.939-0.25 0-0.31-0.377-0.13-0.838 0.28-0.719 0.03-0.798-1.73-0.562l-2.05 0.276 0.24-1.843c0.19-1.383-0.03-2.192-0.85-3.236-2.21-2.801-4.57-1.026-4.57 3.434 0 2.704 0.96 4.697 1.95 4.079 0.44-0.268 0.39-0.653-0.17-1.456-0.91-1.296-1-3.468-0.18-4.286 0.81-0.816 2.26 0.052 2.64 1.586 0.17 0.678 0.45 1.596 0.62 2.039 0.18 0.457 0.05 0.807-0.28 0.807-0.82 0-1.75 1.003-2.79 3.002-0.83 1.615-0.83 1.727 0.09 2.649 2.15 2.147 7.39 1.506 11.85-1.449 1.1-0.722 2.11-1.193 2.25-1.048 0.26 0.259-1.92 1.798-5.04 3.554-0.9 0.506-2.63 0.886-4.04 0.886-2.13 0.001-2.38 0.103-1.84 0.761 0.84 1.012 2.28 0.957 5.88-0.226 2.93-0.967 2.96-0.968 1.72-0.012-3.89 2.997-6.45 3.044-9.62 0.177-2.06-1.856-2.53-1.631-2.53 1.197 0 0.719-0.67 2.352-1.49 3.63-0.82 1.277-1.77 3.462-2.11 4.854-0.34 1.393-1.72 4.811-3.07 7.596-2.53 5.219-3.72 10.589-2.97 13.412 0.21 0.78 2.23 2.794 5.23 5.213 5.27 4.24 6.21 5.742 4.64 7.472-0.49 0.546-1.2 0.992-1.58 0.992-1.88 0 0.64 3.606 3.23 4.611 2.07 0.809 7.95 0.631 10.84-0.329 2.78-0.922 6.39-3.415 8.92-6.156l1.65-1.782v5.145c0 5.79 0.69 7.842 2.93 8.694 2 0.759 4.39 0.138 9.17-2.376 4.89-2.573 5.77-2.838 2.73-0.821-1.17 0.776-3.11 2.335-4.31 3.464-2.93 2.745-3.94 3.222-6.82 3.22-2.62-0.002-5.73-1.476-5.73-2.717 0-1.108-1.67-1.318-10.58-1.325l-8.3-0.007-2.26 1.852c-2.71 2.221-5.89 2.721-8.73 1.373zm30.67-58.699c-1.25-0.92-1.55-0.614-0.79 0.799 0.45 0.848 0.73 0.97 1.18 0.516 0.44-0.452 0.35-0.769-0.39-1.315zm-6.37-22.281c0-0.1228-0.22-0.2233-0.5-0.2233s-0.51 0.2413-0.51 0.5362c0 0.295 0.23 0.3954 0.51 0.2233s0.5-0.4134 0.5-0.5362zm-41.47 62.658c-0.06-1.419 0.79-3.132 1.55-3.132 0.37 0 0.36 0.236-0.05 0.727-0.33 0.4-0.8 1.369-1.03 2.152-0.39 1.283-0.43 1.308-0.47 0.253zm4.51-3.491c1.71-0.137 2.58-0.525 3.47-1.557 0.66-0.756 1.02-1.033 0.81-0.615-1.02 2.012-1.92 2.531-4.23 2.443l-2.33-0.089 2.28-0.182zm33.11-43.574c-1.09-0.716-1.32-2.655-0.48-3.942 1.47-2.247 3.83-1.298 3.83 1.544 0 2.322-1.66 3.51-3.35 2.398z" transform="translate(10 612.54)" stroke="#000" stroke-width=".375" fill="none"/>
- <circle cy="0" cx="0" r="2" transform="translate(15 735.16)"/>
- <rect id="d0e76" display="none" height="1e3px" width="258" y="729.16" x="20"/>
+ <text id="tracing-f02-fr.svgtext1823" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 602.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.154671" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1824" y="97.154671" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
+ <text id="tracing-f02-fr.svgtext1826" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 602.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="158.69894" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1827" y="97.378670" x="158.69894" sodipodi:role="line">Seuil de luminosité</tspan><tspan id="tracing-f02-fr.svgtspan1829" y="103.37867" x="158.69894" sodipodi:role="line">Rempli, sans contour</tspan></text>
+ <text id="tracing-f02-fr.svgtext1483" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 602.54)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="244.99974" font-family="sans-serif" fill="#000000"><tspan id="tracing-f02-fr.svgtspan1488" sodipodi:role="line" y="97.378670" x="244.99974">Seuil de luminosité</tspan><tspan id="tracing-f02-fr.svgtspan1490" sodipodi:role="line" y="103.37867" x="244.99974">Contour, non rempli</tspan></text>
+ <image id="tracing-f02-fr.svgimage1881" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 602.54)" height="91.143" width="76.965" y="-.000030566" x="31.099"/>
+ <path id="tracing-f02-fr.svgpath1510" d="m143.52 88.292c-0.98-0.462-5.29-1.79-9.59-2.949-4.69-1.268-8.01-2.426-8.31-2.906-0.35-0.559-0.23-1.667 0.4-3.69 0.63-1.993 0.81-3.616 0.59-5.227-0.23-1.699-0.17-2.185 0.24-1.78 0.58 0.578 0.39 5.786-0.3 8.391-0.33 1.249-0.18 1.469 1.38 2.123 0.96 0.402 2.98 0.878 4.49 1.059 1.51 0.18 5.17 0.9 8.13 1.599 5.16 1.219 5.46 1.236 7.17 0.42 2.23-1.056 3.52-3.54 3.06-5.864-0.18-0.912-1.93-4.183-3.88-7.27-6.12-9.695-7.43-10.949-10.05-9.61-1.3 0.662-1.37 0.63-1.67-0.755-0.44-1.973 0.07-3.816 2.05-7.4 0.91-1.671 2.24-4.797 2.94-6.947 1.58-4.861 1.98-5.607 4.63-8.75 1.18-1.393 2.84-3.637 3.69-4.988l1.55-2.455-0.3-9.799c-0.27-8.636-0.2-10.078 0.6-12.155 2.02-5.2945 5.84-7.6316 11.78-7.2035 5.44 0.3915 9.13 2.6265 11.64 7.0429 1.39 2.4446 1.65 3.8166 2.1 11.044 0.38 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.54 6.058 4.92 7.63 4.74 5.416 7.27 12.192 7.26 19.475 0 4.73-0.04 4.859-1.95 7.733-2.45 3.696-3.51 4.42-6.43 4.42-3.64 0-3.75-0.301-3.78-10.332-0.03-9.592-0.62-12.245-3.68-16.613-0.84-1.194-1.68-2.968-1.86-3.943-0.36-1.872-4.22-10.158-4.98-10.696-0.24-0.174-0.19-0.473 0.12-0.663 0.7-0.434 0.73-3.155 0.04-3.581-0.32-0.201-0.23-0.717 0.26-1.409 1.04-1.49 0.96-3.563-0.24-5.913-1.16-2.267-2.53-2.888-4.54-2.055-1.82 0.756-2.77 2.56-2.44 4.669 0.28 1.844 0.04 2.939-0.65 2.939-0.25 0-0.31-0.377-0.13-0.838 0.28-0.719 0.03-0.798-1.73-0.562l-2.06 0.276 0.25-1.843c0.18-1.383-0.03-2.192-0.85-3.236-2.21-2.801-4.57-1.026-4.57 3.434 0 2.704 0.95 4.697 1.95 4.079 0.44-0.268 0.39-0.653-0.17-1.456-0.91-1.296-1-3.468-0.18-4.286 0.81-0.816 2.26 0.052 2.64 1.586 0.17 0.678 0.45 1.596 0.62 2.039 0.18 0.457 0.05 0.807-0.29 0.807-0.82 0-1.75 1.003-2.78 3.002-0.83 1.615-0.83 1.727 0.09 2.649 2.15 2.147 7.39 1.506 11.85-1.449 1.09-0.722 2.11-1.193 2.25-1.048 0.26 0.26-1.92 1.798-5.04 3.554-0.9 0.506-2.63 0.886-4.04 0.886-2.14 0.001-2.38 0.103-1.84 0.761 0.84 1.012 2.28 0.957 5.87-0.226 2.94-0.967 2.97-0.968 1.73-0.012-3.9 2.997-6.45 3.044-9.62 0.177-2.06-1.856-2.53-1.631-2.53 1.197 0 0.719-0.67 2.352-1.49 3.63-0.82 1.277-1.77 3.462-2.11 4.854-0.34 1.393-1.73 4.811-3.07 7.596-2.53 5.219-3.72 10.589-2.97 13.412 0.21 0.78 2.23 2.794 5.23 5.213 5.27 4.24 6.21 5.742 4.64 7.472-0.49 0.546-1.2 0.992-1.58 0.992-1.88 0 0.64 3.606 3.23 4.611 2.07 0.809 7.95 0.631 10.84-0.329 2.78-0.922 6.39-3.415 8.92-6.156l1.65-1.782v5.145c0 5.79 0.69 7.842 2.93 8.694 2 0.759 4.39 0.138 9.17-2.376 4.89-2.573 5.77-2.838 2.73-0.821-1.17 0.776-3.11 2.335-4.31 3.464-2.93 2.745-3.94 3.222-6.82 3.22-2.62-0.002-5.73-1.476-5.73-2.717 0-1.108-1.67-1.318-10.58-1.325l-8.3-0.007-2.26 1.852c-2.71 2.221-5.89 2.721-8.73 1.373zm30.67-58.699c-1.25-0.92-1.55-0.614-0.79 0.799 0.45 0.848 0.73 0.97 1.18 0.516 0.44-0.452 0.35-0.769-0.39-1.315zm-6.37-22.281c0-0.1228-0.22-0.2233-0.5-0.2233s-0.51 0.2413-0.51 0.5363c0 0.2949 0.23 0.3954 0.51 0.2232 0.28-0.1721 0.5-0.4134 0.5-0.5362zm-41.47 62.658c-0.06-1.419 0.79-3.132 1.55-3.132 0.37 0 0.36 0.236-0.05 0.727-0.33 0.4-0.8 1.369-1.03 2.152-0.39 1.283-0.44 1.308-0.47 0.253zm4.51-3.491c1.71-0.137 2.58-0.525 3.47-1.557 0.66-0.756 1.02-1.033 0.81-0.615-1.02 2.012-1.92 2.531-4.23 2.443l-2.33-0.089 2.28-0.182zm33.11-43.574c-1.09-0.716-1.32-2.655-0.48-3.942 1.47-2.247 3.83-1.298 3.83 1.544 0 2.322-1.66 3.51-3.35 2.398z" transform="translate(10 602.54)"/>
+ <path id="tracing-f02-fr.svgpath1515" d="m229.82 88.292c-0.98-0.463-5.29-1.79-9.59-2.949-4.69-1.268-8.01-2.426-8.31-2.907-0.35-0.558-0.23-1.666 0.4-3.689 0.63-1.993 0.81-3.616 0.59-5.227-0.23-1.699-0.16-2.185 0.24-1.78 0.58 0.578 0.39 5.786-0.3 8.391-0.33 1.249-0.18 1.469 1.38 2.123 0.96 0.402 2.98 0.878 4.49 1.059 1.51 0.18 5.17 0.9 8.13 1.599 5.16 1.219 5.46 1.236 7.18 0.42 2.22-1.056 3.51-3.54 3.05-5.864-0.18-0.912-1.93-4.183-3.88-7.27-6.12-9.695-7.43-10.949-10.05-9.61-1.3 0.662-1.37 0.63-1.67-0.755-0.44-1.973 0.07-3.816 2.05-7.4 0.92-1.671 2.24-4.797 2.94-6.947 1.58-4.861 1.98-5.607 4.63-8.75 1.18-1.393 2.84-3.637 3.69-4.988l1.55-2.455-0.3-9.799c-0.27-8.636-0.19-10.078 0.6-12.155 2.02-5.2945 5.84-7.6316 11.79-7.2035 5.43 0.3914 9.12 2.6265 11.63 7.0429 1.39 2.4446 1.65 3.8166 2.1 11.044 0.38 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.55 6.058 4.92 7.63 4.74 5.416 7.27 12.192 7.26 19.475 0 4.73-0.03 4.859-1.94 7.733-2.46 3.696-3.52 4.42-6.44 4.42-3.63 0-3.75-0.302-3.78-10.332-0.03-9.592-0.62-12.245-3.68-16.613-0.84-1.194-1.68-2.968-1.86-3.943-0.36-1.872-4.22-10.158-4.98-10.696-0.24-0.174-0.19-0.473 0.12-0.663 0.7-0.434 0.73-3.155 0.04-3.581-0.32-0.201-0.23-0.717 0.26-1.409 1.04-1.49 0.96-3.563-0.24-5.913-1.16-2.267-2.53-2.888-4.54-2.055-1.82 0.756-2.77 2.56-2.44 4.669 0.28 1.844 0.04 2.939-0.65 2.939-0.25 0-0.31-0.377-0.13-0.838 0.28-0.719 0.03-0.798-1.73-0.562l-2.05 0.276 0.24-1.843c0.19-1.383-0.03-2.192-0.85-3.236-2.21-2.801-4.57-1.026-4.57 3.434 0 2.704 0.96 4.697 1.95 4.079 0.44-0.268 0.39-0.653-0.17-1.456-0.91-1.296-1-3.468-0.18-4.286 0.81-0.816 2.26 0.052 2.64 1.586 0.17 0.678 0.45 1.596 0.62 2.039 0.18 0.457 0.05 0.807-0.28 0.807-0.82 0-1.75 1.003-2.79 3.002-0.83 1.615-0.83 1.727 0.09 2.649 2.15 2.147 7.39 1.506 11.85-1.449 1.1-0.722 2.11-1.193 2.25-1.048 0.26 0.259-1.92 1.798-5.04 3.554-0.9 0.506-2.63 0.886-4.04 0.886-2.13 0.001-2.38 0.103-1.84 0.761 0.84 1.012 2.28 0.957 5.88-0.226 2.93-0.967 2.96-0.968 1.72-0.012-3.89 2.997-6.45 3.044-9.62 0.177-2.06-1.856-2.53-1.631-2.53 1.197 0 0.719-0.67 2.352-1.49 3.63-0.82 1.277-1.77 3.462-2.11 4.854-0.34 1.393-1.72 4.811-3.07 7.596-2.53 5.219-3.72 10.589-2.97 13.412 0.21 0.78 2.23 2.794 5.23 5.213 5.27 4.24 6.21 5.742 4.64 7.472-0.49 0.546-1.2 0.992-1.58 0.992-1.88 0 0.64 3.606 3.23 4.611 2.07 0.809 7.95 0.631 10.84-0.329 2.78-0.922 6.39-3.415 8.92-6.156l1.65-1.782v5.145c0 5.79 0.69 7.842 2.93 8.694 2 0.759 4.39 0.138 9.17-2.376 4.89-2.573 5.77-2.838 2.73-0.821-1.17 0.776-3.11 2.335-4.31 3.464-2.93 2.745-3.94 3.222-6.82 3.22-2.62-0.002-5.73-1.476-5.73-2.717 0-1.108-1.67-1.318-10.58-1.325l-8.3-0.007-2.26 1.852c-2.71 2.221-5.89 2.721-8.73 1.373zm30.67-58.699c-1.25-0.92-1.55-0.614-0.79 0.799 0.45 0.848 0.73 0.97 1.18 0.516 0.44-0.452 0.35-0.769-0.39-1.315zm-6.37-22.281c0-0.1228-0.22-0.2233-0.5-0.2233s-0.51 0.2413-0.51 0.5362c0 0.295 0.23 0.3954 0.51 0.2233s0.5-0.4134 0.5-0.5362zm-41.47 62.658c-0.06-1.419 0.79-3.132 1.55-3.132 0.37 0 0.36 0.236-0.05 0.727-0.33 0.4-0.8 1.369-1.03 2.152-0.39 1.283-0.43 1.308-0.47 0.253zm4.51-3.491c1.71-0.137 2.58-0.525 3.47-1.557 0.66-0.756 1.02-1.033 0.81-0.615-1.02 2.012-1.92 2.531-4.23 2.443l-2.33-0.089 2.28-0.182zm33.11-43.574c-1.09-0.716-1.32-2.655-0.48-3.942 1.47-2.247 3.83-1.298 3.83 1.544 0 2.322-1.66 3.51-3.35 2.398z" transform="translate(10 602.54)" stroke="#000" stroke-width=".375" fill="none"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15 725.16)"/>
+ <rect id="d0e76" display="none" height="1e3px" width="258" y="719.16" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e76"/>
</flowRegion>
<flowDiv xml:space="preserve">Détection de contour</flowDiv>
</flowRoot>
- <rect id="d0e80" display="none" height="1e3px" width="288" y="745.67" x="10"/>
+ <rect id="d0e80" display="none" height="1e3px" width="288" y="735.67" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e80"/>
</flowRegion>
<flowDiv xml:space="preserve">Cette option utilise l&apos;algorithme de détection des arêtes énoncé par J. Canny, afin de trouver rapidement des isoclines de contraste similaire. Cela produit une image intermédiaire qui ressemble moins à l&apos;image originale que le résultat d&apos;un seuil de luminosité mais qui contient souvent des courbes qui seraient ignorées autrement. Le seuil à régler ici (de 0,0 à 1,0) ajuste le seuil de luminosité afin de déterminer si un pixel adjacent à une courbe de contraste doit être inclus dans le résultat. Le réglage permet d&apos;ajuster l&apos;obscurité ou l&apos;épaisseur des arêtes du résultat.</flowDiv>
</flowRoot>
- <text id="tracing-f03-fr.svgtext1492" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 855.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.154671" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1493" y="97.154671" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
- <text id="tracing-f03-fr.svgtext1495" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 855.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="157.95474" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1496" y="97.378670" x="157.95474" sodipodi:role="line">Arêtes détectées</tspan><tspan id="tracing-f03-fr.svgtspan1498" y="103.37867" x="157.95474" sodipodi:role="line">Rempli, sans contour</tspan></text>
- <text id="tracing-f03-fr.svgtext1500" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 855.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="244.99974" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1501" sodipodi:role="line" y="97.378670" x="244.99974">Arêtes détectées</tspan><tspan id="tracing-f03-fr.svgtspan1503" sodipodi:role="line" y="103.37867" x="244.99974">Contour, non rempli</tspan></text>
- <image id="tracing-f03-fr.svgimage1508" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 855.31)" height="91.143" width="76.965" y=".000036133" x="31.099"/>
- <path id="tracing-f03-fr.svgpath4003" d="m139.28 89.101c-1.22-0.554-3.5-1.363-5.06-1.797-9.19-2.553-12.03-3.428-12.59-3.88-0.83-0.662-0.8-3.17 0.08-5.676 0.47-1.351 0.61-3.264 0.43-5.882-0.24-3.484-0.16-3.99 0.81-4.96 0.79-0.784 1.71-1.08 3.37-1.08 3.12 0 4.04-1.136 4.04-4.981 0-2.439 0.35-3.585 2.1-6.945 1.15-2.214 2.43-5.164 2.85-6.556 1.28-4.328 2.29-6.298 4.6-9.018 1.23-1.446 2.92-3.713 3.75-5.039l1.52-2.411-0.27-9.833c-0.25-9.303-0.2-9.982 0.85-12.583 2.03-4.9988 5.81-7.4473 11.48-7.4473 6.48 0 11.64 3.1302 14.06 8.5268 1.11 2.4645 1.4 4.1035 1.75 9.6405 0.42 6.617 0.44 6.711 2.84 11.441 1.33 2.623 3.54 6.054 4.91 7.624 2.84 3.246 3.82 5.006 5.73 10.332 1.53 4.27 2.16 10.332 1.41 13.56-0.38 1.63-0.34 2.348 0.19 3.038 0.37 0.497 0.69 1.538 0.7 2.314 0.02 1.92 1.27 3.673 3.89 5.479 1.73 1.193 2.2 1.822 2.2 2.968 0 2.463-0.48 2.996-4.94 5.47-2.37 1.317-5.37 3.394-6.65 4.614-3.43 3.266-5.03 4.106-7.8 4.109-2.71 0.002-5.83-1.368-6.82-2.995-0.6-1.001-1.06-1.054-9.12-1.054h-8.49l-1.83 1.51c-3.38 2.786-6.23 3.216-9.99 1.511zm8.76-3.212l2.24-1.835 9.54-0.004 9.53-0.005 0.07-4.081 0.07-4.082-1.08 0.985c-3.69 3.353-9.68 5.436-14.47 5.033-1.55-0.13-3.24-0.417-3.76-0.637-0.79-0.332-0.89-0.228-0.62 0.619 0.21 0.663-0.05 1.441-0.73 2.228-0.98 1.129-1.03 1.139-0.76 0.148 0.16-0.585-0.05-1.708-0.46-2.496s-0.62-1.625-0.48-1.861c0.44-0.698-0.91-3.24-1.98-3.739-0.54-0.254-2.23-2.513-3.75-5.02-3.51-5.808-6.01-8.389-7.75-8.022-0.69 0.147-1.72 0.984-2.28 1.861-0.84 1.304-1.47 1.657-3.47 1.944-1.35 0.193-2.77 0.474-3.17 0.625-1.2 0.464-1.66 2.55-1.24 5.669 0.29 2.149 0.19 3.693-0.36 5.654-0.53 1.858-0.61 2.86-0.25 3.221 0.29 0.288 3.59 1.296 7.33 2.239s7.81 2.185 9.05 2.76c3.22 1.5 5.94 1.128 8.78-1.204zm-4.77-0.013c0-0.111 0.8-0.673 1.78-1.248 1.38-0.819 1.77-0.889 1.77-0.321 0 0.398-0.44 0.96-0.98 1.248-0.97 0.517-2.57 0.717-2.57 0.321zm38.26-0.594c1.83-1.552 4.85-3.626 6.71-4.607 3.7-1.945 5.67-3.524 5.67-4.533 0-0.356-0.99-1.329-2.2-2.162-2.48-1.705-3.88-3.555-3.88-5.132 0-0.585-0.25-1.535-0.56-2.111-0.53-1-0.65-0.946-2.47 1.173-1.91 2.211-1.93 2.22-5.31 2.22-2.95 0-3.52-0.155-4.36-1.196-0.53-0.657-0.97-1.94-0.97-2.849 0-3.455-2.73-3.018-3.12 0.5-0.09 0.836-0.4 1.405-0.68 1.266-0.6-0.304-0.35-3.549 0.34-4.4 0.27-0.332 0.98-0.673 1.57-0.76 3.17-0.466 1.93-12.992-1.84-18.601-0.68-0.995-1.5-2.721-1.84-3.835s-1.44-3.621-2.44-5.57c-1.43-2.8-1.85-4.236-1.96-6.836-0.08-1.81-0.18-3.633-0.22-4.05-0.05-0.418 0.08-1.216 0.28-1.773 0.19-0.557 0.01-0.414-0.42 0.317-1.37 2.358-4.02 2.355-4.96-0.006-0.3-0.758-0.63-1.053-0.76-0.69-0.31 0.823-4.02 0.827-4.53 0.005-0.26-0.424-0.48-0.218-0.68 0.633-0.41 1.751-2.65 2-3.75 0.417-0.45-0.635-0.81-0.933-0.8-0.662s0.34 0.915 0.73 1.431c0.52 0.684 0.58 1.285 0.23 2.215-0.5 1.317-0.13 1.853 2.24 3.226 1.29 0.752 0.67 1.177-0.68 0.456-2.02-1.083-1.56-0.169 0.88 1.739 2.87 2.25 4.35 2.216 8.27-0.192 1.38-0.851 2.73-1.547 3.01-1.547 1.11 0 0.34 0.855-2.38 2.659-4.1 2.722-8.04 2.603-10.4-0.313-0.87-1.076-0.88-1.074-0.89 0.548 0 0.896-0.79 3.061-1.75 4.811s-1.83 4.12-1.94 5.266-0.71 2.794-1.33 3.661c-2.49 3.501-4.25 8.305-4.5 12.264l-0.23 3.832 4.62 3.687c2.55 2.028 4.97 4.171 5.38 4.762 1.15 1.648 0.93 3.684-0.56 5.062l-1.31 1.215 1.4 1.095c1.86 1.464 3.13 1.73 7.18 1.496 4.42-0.256 7.58-1.788 11.59-5.612l3.11-2.973 0.36 2.618c0.44 3.173-0.17 11.231-0.81 10.833-1-0.619-0.38 1.415 0.78 2.583 1.02 1.02 1.75 1.243 4.05 1.243 2.66 0 2.96-0.138 6.13-2.823zm-33.7-12.607c0-0.342-1.31-1.753-2.91-3.135-3.42-2.953-4.87-3.876-3.37-2.15 0.58 0.671 1.58 2.132 2.23 3.246 1.87 3.206 2.58 3.885 3.37 3.227 0.37-0.311 0.68-0.846 0.68-1.188zm35.75-6.974c1.8-1.894 2.12-2.584 2.41-5.207 0.19-1.663 0.12-4.163-0.14-5.555-1.04-5.331-4.05-12.32-6.13-14.178-1.89-1.702-5.11-6.786-6.9-10.916-1.37-3.17-1.7-4.584-1.71-7.389-0.01-5.935-0.86-10.132-2.66-13.261-1.38-2.3986-2.12-3.0967-4.57-4.2836-7.06-3.4339-12.97-1.7826-15.86 4.4354-0.83 1.7852-1.18 3.3892-1.14 5.3372 0.03 1.532 0.17 2.329 0.3 1.772 0.42-1.67 1.19-2.278 2.92-2.278 1.82 0 4.26 1.891 4.39 3.394 0.04 0.5 0.1 1.249 0.13 1.663s0.45 0.829 0.93 0.922c0.62 0.119 0.8-0.062 0.59-0.605-0.47-1.232 0.74-4.204 2.08-5.08 1.56-1.022 4.25-1.027 5.7-0.01 2.19 1.532 2.69 3.346 2.51 9.154-0.16 5.245-0.12 5.466 1.52 8.732 0.93 1.842 2.05 4.578 2.49 6.08s1.46 3.779 2.27 5.06c2.62 4.128 3.49 8.167 3.44 15.997-0.03 6.023 0.08 7.073 0.88 7.952 1.45 1.604 4.02 0.922 6.55-1.736zm-0.47-2.238c-0.19-0.186-0.34-0.573-0.34-0.861 0-0.317 0.24-0.288 0.6 0.076 0.33 0.329 0.48 0.717 0.34 0.861-0.15 0.143-0.42 0.109-0.6-0.076zm1.47-1.114c-0.21-0.353-0.26-0.778-0.09-0.945 0.45-0.454 0.95 0.213 0.7 0.947-0.17 0.515-0.29 0.514-0.61-0.002zm-16.27-31.179c-0.96-1.464-0.8-3.56 0.28-3.607 2.28-0.098 4.32 2.26 3.67 4.23-0.38 1.133-3.08 0.707-3.95-0.623zm1.89-1.405c-0.36-0.363-0.6-0.393-0.6-0.076 0 0.676 0.6 1.275 0.94 0.937 0.14-0.144-0.01-0.531-0.34-0.861zm-8.36-19.976c-0.19-0.1857-0.34-1.2111-0.34-2.2786 0-1.8673 0.07-1.941 1.71-1.941 0.94 0 1.94 0.2848 2.22 0.6329 0.7 0.8774 0.45 2.8983-0.42 3.4506-0.85 0.5396-2.69 0.6176-3.17 0.1361zm2.19-2.2241c0-0.262-0.22-0.4765-0.5-0.4765s-0.51 0.3553-0.51 0.7895c0 0.4341 0.23 0.6485 0.51 0.4764s0.5-0.5273 0.5-0.7894zm-25.2 56.037c-1.44-1.649-1.49-1.867-1.25-5.443 0.26-3.833 0.74-5.369 3.87-12.334 0.99-2.228 1.81-4.479 1.82-5.001 0-0.523 0.92-2.602 2.03-4.62 2.49-4.512 2.67-5.564 0.26-1.572-0.97 1.609-2.64 3.988-3.72 5.287-2.39 2.873-2.76 3.559-4.45 8.271-0.73 2.041-2.1 5.243-3.04 7.116-2.11 4.206-2.26 5.927-0.47 5.585 0.95-0.182 1.8 0.297 3.67 2.084 2.89 2.76 3.35 2.985 1.28 0.627zm-3.66-4.95c0-1.843 0.22-1.777 0.7 0.211 0.2 0.827 0.12 1.393-0.18 1.393-0.29 0-0.52-0.722-0.52-1.604zm12.5-30.17c-0.12-0.487-0.23-0.088-0.23 0.886 0 0.975 0.11 1.374 0.23 0.886 0.13-0.487 0.13-1.284 0-1.772zm-0.55-5.053c-0.16-0.168-0.28 0.131-0.26 0.665 0.02 0.59 0.14 0.71 0.3 0.306 0.15-0.366 0.13-0.802-0.04-0.971zm3.3-3.01c-0.44-0.759-0.54-0.781-0.55-0.123-0.01 0.853 0.52 1.621 0.88 1.262 0.12-0.118-0.03-0.631-0.33-1.139zm11.79 0.938c0.14-0.229-0.19-0.796-0.73-1.261-0.93-0.793-0.99-0.788-0.99 0.079 0 1.402 1.11 2.166 1.72 1.182zm-9.52-2.485c-0.16-0.168-0.28 0.131-0.26 0.665 0.02 0.59 0.14 0.71 0.3 0.306 0.15-0.366 0.13-0.803-0.04-0.971zm10.8-1.439c-0.63-0.676-1.61-1.23-2.16-1.23-1.1 0-2.87 1.357-2.87 2.201 0 0.288 0.29 0.168 0.64-0.267 1.42-1.782 4.88-1.084 4.97 1.006 0.03 0.583 0.13 0.644 0.31 0.189 0.15-0.368-0.25-1.223-0.89-1.899zm-12.94-0.217c0.34 0 0.94 0.285 1.33 0.633 0.61 0.538 0.61 0.501 0.04-0.253-0.37-0.488-1.05-0.886-1.52-0.886-0.91 0-2.06 0.928-2.06 1.656 0 0.243 0.36 0.083 0.79-0.354 0.44-0.438 1.08-0.796 1.42-0.796z" transform="translate(10 855.31)"/>
- <path id="tracing-f03-fr.svgpath4004" d="m226.33 89.101c-1.22-0.554-3.5-1.363-5.07-1.797-9.18-2.553-12.02-3.428-12.59-3.88-0.83-0.662-0.79-3.17 0.08-5.676 0.47-1.351 0.61-3.264 0.43-5.882-0.24-3.484-0.15-3.99 0.82-4.96 0.78-0.784 1.71-1.08 3.36-1.08 3.12 0 4.05-1.136 4.05-4.981 0-2.439 0.34-3.585 2.09-6.945 1.16-2.214 2.44-5.164 2.85-6.556 1.29-4.328 2.29-6.298 4.61-9.018 1.22-1.446 2.91-3.713 3.75-5.039l1.52-2.411-0.27-9.833c-0.25-9.303-0.21-9.982 0.85-12.583 2.03-4.9988 5.8-7.4473 11.48-7.4473 6.47 0 11.63 3.1302 14.05 8.5268 1.11 2.4645 1.41 4.1035 1.76 9.6405 0.41 6.617 0.44 6.711 2.83 11.441 1.33 2.623 3.54 6.054 4.92 7.624 2.84 3.246 3.81 5.006 5.72 10.332 1.53 4.27 2.17 10.332 1.41 13.56-0.38 1.63-0.33 2.348 0.19 3.038 0.38 0.497 0.7 1.538 0.7 2.314 0.03 1.92 1.27 3.673 3.9 5.479 1.73 1.193 2.2 1.822 2.2 2.968 0 2.463-0.48 2.996-4.94 5.47-2.38 1.317-5.37 3.394-6.66 4.614-3.43 3.266-5.02 4.106-7.79 4.109-2.72 0.002-5.84-1.368-6.82-2.995-0.61-1.001-1.07-1.054-9.13-1.054h-8.49l-1.83 1.51c-3.38 2.786-6.22 3.216-9.98 1.511zm8.76-3.212l2.24-1.835 9.53-0.004 9.54-0.005 0.07-4.081 0.07-4.082-1.09 0.985c-3.68 3.353-9.67 5.436-14.47 5.033-1.55-0.13-3.24-0.417-3.76-0.637-0.78-0.332-0.89-0.228-0.62 0.619 0.21 0.663-0.04 1.441-0.73 2.228-0.98 1.129-1.03 1.139-0.76 0.148 0.16-0.585-0.04-1.708-0.45-2.496s-0.63-1.625-0.48-1.861c0.43-0.698-0.92-3.24-1.98-3.739-0.55-0.254-2.23-2.513-3.75-5.02-3.52-5.808-6.01-8.389-7.75-8.022-0.7 0.147-1.73 0.984-2.29 1.861-0.83 1.304-1.46 1.657-3.47 1.944-1.34 0.193-2.77 0.474-3.16 0.625-1.21 0.464-1.67 2.55-1.24 5.669 0.29 2.149 0.19 3.693-0.37 5.654-0.53 1.858-0.6 2.86-0.24 3.221 0.29 0.288 3.58 1.296 7.33 2.239 3.74 0.943 7.81 2.185 9.04 2.76 3.22 1.5 5.94 1.128 8.79-1.204zm-4.77-0.013c0-0.111 0.8-0.673 1.77-1.248 1.39-0.819 1.77-0.889 1.77-0.321 0 0.398-0.44 0.96-0.98 1.248-0.96 0.517-2.56 0.717-2.56 0.321zm38.25-0.594c1.83-1.552 4.85-3.626 6.72-4.607 3.69-1.945 5.66-3.524 5.66-4.533 0-0.356-0.99-1.329-2.2-2.162-2.48-1.705-3.87-3.555-3.87-5.132 0-0.585-0.25-1.535-0.56-2.111-0.54-1-0.65-0.946-2.48 1.173-1.9 2.211-1.92 2.22-5.3 2.22-2.96 0-3.52-0.155-4.37-1.196-0.53-0.657-0.96-1.94-0.96-2.849 0-3.455-2.73-3.018-3.13 0.5-0.09 0.836-0.39 1.405-0.67 1.266-0.61-0.304-0.36-3.549 0.34-4.4 0.27-0.332 0.97-0.673 1.56-0.76 3.18-0.466 1.94-12.992-1.84-18.601-0.67-0.995-1.5-2.721-1.84-3.835s-1.43-3.621-2.43-5.57c-1.44-2.8-1.85-4.236-1.97-6.836-0.08-1.81-0.18-3.633-0.22-4.05-0.04-0.418 0.08-1.216 0.28-1.773s0.01-0.414-0.41 0.317c-1.38 2.358-4.02 2.355-4.96-0.006-0.31-0.758-0.63-1.053-0.77-0.69-0.3 0.823-4.02 0.827-4.53 0.005-0.26-0.424-0.48-0.218-0.68 0.633-0.41 1.751-2.64 2-3.75 0.417-0.44-0.635-0.8-0.933-0.79-0.662s0.33 0.915 0.73 1.431c0.51 0.684 0.58 1.285 0.22 2.215-0.5 1.317-0.13 1.853 2.24 3.226 1.3 0.752 0.67 1.177-0.68 0.456-2.02-1.083-1.56-0.169 0.88 1.739 2.88 2.25 4.36 2.216 8.27-0.192 1.38-0.851 2.74-1.547 3.01-1.547 1.11 0 0.35 0.855-2.37 2.659-4.1 2.722-8.05 2.603-10.41-0.313-0.87-1.076-0.87-1.074-0.88 0.548-0.01 0.896-0.8 3.061-1.76 4.811-0.95 1.75-1.83 4.12-1.94 5.266s-0.71 2.794-1.32 3.661c-2.5 3.501-4.26 8.305-4.5 12.264l-0.23 3.832 4.62 3.687c2.54 2.028 4.96 4.171 5.37 4.762 1.16 1.648 0.93 3.684-0.55 5.062l-1.31 1.215 1.39 1.095c1.86 1.464 3.14 1.73 7.18 1.496 4.42-0.256 7.59-1.788 11.59-5.612l3.11-2.973 0.36 2.618c0.44 3.173-0.16 11.231-0.8 10.833-1.01-0.619-0.39 1.415 0.78 2.583 1.02 1.02 1.74 1.243 4.04 1.243 2.67 0 2.97-0.138 6.13-2.823zm-33.69-12.607c0-0.342-1.31-1.753-2.92-3.135-3.41-2.953-4.86-3.876-3.37-2.15 0.58 0.671 1.59 2.132 2.24 3.246 1.86 3.206 2.57 3.885 3.36 3.227 0.38-0.311 0.69-0.846 0.69-1.188zm35.74-6.974c1.8-1.894 2.12-2.584 2.42-5.207 0.19-1.663 0.12-4.163-0.15-5.555-1.03-5.331-4.05-12.32-6.12-14.178-1.9-1.702-5.11-6.786-6.9-10.916-1.38-3.17-1.7-4.584-1.71-7.389-0.02-5.935-0.86-10.132-2.66-13.261-1.38-2.3986-2.13-3.0967-4.57-4.2836-7.07-3.4339-12.97-1.7826-15.87 4.4354-0.83 1.7852-1.17 3.3892-1.13 5.3372 0.03 1.532 0.16 2.329 0.3 1.772 0.41-1.67 1.19-2.278 2.91-2.278 1.82 0 4.27 1.891 4.4 3.394 0.04 0.5 0.1 1.249 0.12 1.663 0.03 0.414 0.45 0.829 0.94 0.922 0.62 0.119 0.79-0.062 0.58-0.605-0.47-1.232 0.75-4.204 2.08-5.08 1.56-1.022 4.26-1.027 5.71-0.01 2.19 1.532 2.68 3.346 2.5 9.154-0.16 5.245-0.12 5.466 1.53 8.732 0.93 1.842 2.05 4.578 2.48 6.08 0.44 1.502 1.47 3.779 2.28 5.06 2.62 4.128 3.49 8.167 3.44 15.997-0.04 6.023 0.08 7.073 0.88 7.952 1.45 1.604 4.02 0.922 6.54-1.736zm-0.47-2.238c-0.18-0.186-0.34-0.573-0.34-0.861 0-0.317 0.24-0.288 0.6 0.076 0.33 0.329 0.48 0.717 0.34 0.861-0.14 0.143-0.41 0.109-0.6-0.076zm1.48-1.114c-0.22-0.353-0.26-0.778-0.09-0.945 0.45-0.454 0.94 0.213 0.7 0.947-0.17 0.515-0.29 0.514-0.61-0.002zm-16.27-31.179c-0.96-1.464-0.8-3.56 0.28-3.607 2.27-0.098 4.32 2.26 3.66 4.23-0.38 1.133-3.07 0.707-3.94-0.623zm1.89-1.405c-0.36-0.363-0.6-0.393-0.6-0.076 0 0.676 0.6 1.275 0.94 0.937 0.14-0.144-0.01-0.531-0.34-0.861zm-8.36-19.976c-0.19-0.1857-0.34-1.2111-0.34-2.2786 0-1.8673 0.06-1.941 1.71-1.941 0.94 0 1.94 0.2848 2.21 0.6329 0.7 0.8774 0.46 2.8983-0.41 3.4506-0.86 0.5396-2.69 0.6176-3.17 0.1361zm2.19-2.2241c0-0.262-0.23-0.4765-0.51-0.4765s-0.5 0.3553-0.5 0.7895c0 0.4341 0.22 0.6485 0.5 0.4764s0.51-0.5273 0.51-0.7894zm-25.2 56.037c-1.45-1.649-1.5-1.867-1.26-5.443 0.27-3.833 0.75-5.369 3.87-12.334 1-2.228 1.82-4.479 1.82-5.001 0.01-0.523 0.92-2.602 2.03-4.62 2.5-4.512 2.67-5.564 0.27-1.572-0.97 1.609-2.65 3.988-3.73 5.287-2.38 2.873-2.75 3.559-4.44 8.271-0.74 2.041-2.11 5.243-3.05 7.116-2.11 4.206-2.25 5.927-0.47 5.585 0.96-0.182 1.8 0.297 3.68 2.084 2.89 2.76 3.35 2.985 1.28 0.627zm-3.66-4.95c0-1.843 0.22-1.777 0.7 0.211 0.19 0.827 0.12 1.393-0.19 1.393-0.28 0-0.51-0.722-0.51-1.604zm12.5-30.17c-0.13-0.487-0.23-0.088-0.23 0.886 0 0.975 0.1 1.374 0.23 0.886 0.13-0.487 0.13-1.284 0-1.772zm-0.55-5.053c-0.17-0.168-0.29 0.131-0.27 0.665 0.03 0.59 0.15 0.71 0.31 0.306 0.15-0.366 0.13-0.802-0.04-0.971zm3.3-3.01c-0.44-0.759-0.54-0.781-0.55-0.123-0.02 0.853 0.51 1.621 0.87 1.262 0.12-0.118-0.02-0.631-0.32-1.139zm11.78 0.938c0.14-0.229-0.19-0.796-0.73-1.261-0.92-0.793-0.99-0.788-0.99 0.079 0 1.402 1.11 2.166 1.72 1.182zm-9.51-2.485c-0.17-0.168-0.29 0.131-0.27 0.665 0.03 0.59 0.15 0.71 0.31 0.306 0.15-0.366 0.13-0.803-0.04-0.971zm10.8-1.439c-0.64-0.676-1.61-1.23-2.17-1.23-1.1 0-2.86 1.357-2.86 2.201 0 0.288 0.28 0.168 0.63-0.267 1.43-1.782 4.88-1.084 4.98 1.006 0.03 0.583 0.12 0.644 0.31 0.189 0.14-0.368-0.26-1.223-0.89-1.899zm-12.94-0.217c0.34 0 0.94 0.285 1.33 0.633 0.6 0.538 0.61 0.501 0.04-0.253-0.37-0.488-1.06-0.886-1.52-0.886-0.91 0-2.07 0.928-2.07 1.656 0 0.243 0.36 0.083 0.8-0.354 0.44-0.438 1.07-0.796 1.42-0.796z" transform="translate(10 855.31)" stroke="#000" stroke-width=".375" fill="none"/>
- <circle cy="0" cx="0" r="2" transform="translate(15 977.93)"/>
- <rect id="d0e96" display="none" height="1e3px" width="258" y="971.93" x="20"/>
+ <text id="tracing-f03-fr.svgtext1492" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 845.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.154671" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1493" y="97.154671" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
+ <text id="tracing-f03-fr.svgtext1495" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 845.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="157.95474" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1496" y="97.378670" x="157.95474" sodipodi:role="line">Arêtes détectées</tspan><tspan id="tracing-f03-fr.svgtspan1498" y="103.37867" x="157.95474" sodipodi:role="line">Rempli, sans contour</tspan></text>
+ <text id="tracing-f03-fr.svgtext1500" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 845.31)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="244.99974" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f03-fr.svgtspan1501" sodipodi:role="line" y="97.378670" x="244.99974">Arêtes détectées</tspan><tspan id="tracing-f03-fr.svgtspan1503" sodipodi:role="line" y="103.37867" x="244.99974">Contour, non rempli</tspan></text>
+ <image id="tracing-f03-fr.svgimage1508" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 845.31)" height="91.143" width="76.965" y=".000036133" x="31.099"/>
+ <path id="tracing-f03-fr.svgpath4003" d="m139.28 89.101c-1.22-0.554-3.5-1.363-5.06-1.797-9.19-2.553-12.03-3.428-12.59-3.88-0.83-0.662-0.8-3.17 0.08-5.676 0.47-1.351 0.61-3.264 0.43-5.882-0.24-3.484-0.16-3.99 0.81-4.96 0.79-0.784 1.71-1.08 3.37-1.08 3.12 0 4.04-1.136 4.04-4.981 0-2.439 0.35-3.585 2.1-6.945 1.15-2.214 2.43-5.164 2.85-6.556 1.28-4.328 2.29-6.298 4.6-9.018 1.23-1.446 2.92-3.713 3.75-5.039l1.52-2.411-0.27-9.833c-0.25-9.303-0.2-9.982 0.85-12.583 2.03-4.9988 5.81-7.4473 11.48-7.4473 6.48 0 11.64 3.1302 14.06 8.5268 1.11 2.4645 1.4 4.1035 1.75 9.6405 0.42 6.617 0.44 6.711 2.84 11.441 1.33 2.623 3.54 6.054 4.91 7.624 2.84 3.246 3.82 5.006 5.73 10.332 1.53 4.27 2.16 10.332 1.41 13.56-0.38 1.63-0.34 2.348 0.19 3.038 0.37 0.497 0.69 1.538 0.7 2.314 0.02 1.92 1.27 3.673 3.89 5.479 1.73 1.193 2.2 1.822 2.2 2.968 0 2.463-0.48 2.996-4.94 5.47-2.37 1.317-5.37 3.394-6.65 4.614-3.43 3.266-5.03 4.106-7.8 4.109-2.71 0.002-5.83-1.368-6.82-2.995-0.6-1.001-1.06-1.054-9.12-1.054h-8.49l-1.83 1.51c-3.38 2.786-6.23 3.216-9.99 1.511zm8.76-3.212l2.24-1.835 9.54-0.004 9.53-0.005 0.07-4.081 0.07-4.082-1.08 0.985c-3.69 3.353-9.68 5.436-14.47 5.033-1.55-0.13-3.24-0.417-3.76-0.637-0.79-0.332-0.89-0.228-0.62 0.619 0.21 0.663-0.05 1.441-0.73 2.228-0.98 1.129-1.03 1.139-0.76 0.148 0.16-0.585-0.05-1.708-0.46-2.496s-0.62-1.625-0.48-1.861c0.44-0.698-0.91-3.24-1.98-3.739-0.54-0.254-2.23-2.513-3.75-5.02-3.51-5.808-6.01-8.389-7.75-8.022-0.69 0.147-1.72 0.984-2.28 1.861-0.84 1.304-1.47 1.657-3.47 1.944-1.35 0.193-2.77 0.474-3.17 0.625-1.2 0.464-1.66 2.55-1.24 5.669 0.29 2.149 0.19 3.693-0.36 5.654-0.53 1.858-0.61 2.86-0.25 3.221 0.29 0.288 3.59 1.296 7.33 2.239s7.81 2.185 9.05 2.76c3.22 1.5 5.94 1.128 8.78-1.204zm-4.77-0.013c0-0.111 0.8-0.673 1.78-1.248 1.38-0.819 1.77-0.889 1.77-0.321 0 0.398-0.44 0.96-0.98 1.248-0.97 0.517-2.57 0.717-2.57 0.321zm38.26-0.594c1.83-1.552 4.85-3.626 6.71-4.607 3.7-1.945 5.67-3.524 5.67-4.533 0-0.356-0.99-1.329-2.2-2.162-2.48-1.705-3.88-3.555-3.88-5.132 0-0.585-0.25-1.535-0.56-2.111-0.53-1-0.65-0.946-2.47 1.173-1.91 2.211-1.93 2.22-5.31 2.22-2.95 0-3.52-0.155-4.36-1.196-0.53-0.657-0.97-1.94-0.97-2.849 0-3.455-2.73-3.018-3.12 0.5-0.09 0.836-0.4 1.405-0.68 1.266-0.6-0.304-0.35-3.549 0.34-4.4 0.27-0.332 0.98-0.673 1.57-0.76 3.17-0.466 1.93-12.992-1.84-18.601-0.68-0.995-1.5-2.721-1.84-3.835s-1.44-3.621-2.44-5.57c-1.43-2.8-1.85-4.236-1.96-6.836-0.08-1.81-0.18-3.633-0.22-4.05-0.05-0.418 0.08-1.216 0.28-1.773 0.19-0.557 0.01-0.414-0.42 0.317-1.37 2.358-4.02 2.355-4.96-0.006-0.3-0.758-0.63-1.053-0.76-0.69-0.31 0.823-4.02 0.827-4.53 0.005-0.26-0.424-0.48-0.218-0.68 0.633-0.41 1.751-2.65 2-3.75 0.417-0.45-0.635-0.81-0.933-0.8-0.662s0.34 0.915 0.73 1.431c0.52 0.684 0.58 1.285 0.23 2.215-0.5 1.317-0.13 1.853 2.24 3.226 1.29 0.752 0.67 1.177-0.68 0.456-2.02-1.083-1.56-0.169 0.88 1.739 2.87 2.25 4.35 2.216 8.27-0.192 1.38-0.851 2.73-1.547 3.01-1.547 1.11 0 0.34 0.855-2.38 2.659-4.1 2.722-8.04 2.603-10.4-0.313-0.87-1.076-0.88-1.074-0.89 0.548 0 0.896-0.79 3.061-1.75 4.811s-1.83 4.12-1.94 5.266-0.71 2.794-1.33 3.661c-2.49 3.501-4.25 8.305-4.5 12.264l-0.23 3.832 4.62 3.687c2.55 2.028 4.97 4.171 5.38 4.762 1.15 1.648 0.93 3.684-0.56 5.062l-1.31 1.215 1.4 1.095c1.86 1.464 3.13 1.73 7.18 1.496 4.42-0.256 7.58-1.788 11.59-5.612l3.11-2.973 0.36 2.618c0.44 3.173-0.17 11.231-0.81 10.833-1-0.619-0.38 1.415 0.78 2.583 1.02 1.02 1.75 1.243 4.05 1.243 2.66 0 2.96-0.138 6.13-2.823zm-33.7-12.607c0-0.342-1.31-1.753-2.91-3.135-3.42-2.953-4.87-3.876-3.37-2.15 0.58 0.671 1.58 2.132 2.23 3.246 1.87 3.206 2.58 3.885 3.37 3.227 0.37-0.311 0.68-0.846 0.68-1.188zm35.75-6.974c1.8-1.894 2.12-2.584 2.41-5.207 0.19-1.663 0.12-4.163-0.14-5.555-1.04-5.331-4.05-12.32-6.13-14.178-1.89-1.702-5.11-6.786-6.9-10.916-1.37-3.17-1.7-4.584-1.71-7.389-0.01-5.935-0.86-10.132-2.66-13.261-1.38-2.3986-2.12-3.0967-4.57-4.2836-7.06-3.4339-12.97-1.7826-15.86 4.4354-0.83 1.7852-1.18 3.3892-1.14 5.3372 0.03 1.532 0.17 2.329 0.3 1.772 0.42-1.67 1.19-2.278 2.92-2.278 1.82 0 4.26 1.891 4.39 3.394 0.04 0.5 0.1 1.249 0.13 1.663s0.45 0.829 0.93 0.922c0.62 0.119 0.8-0.062 0.59-0.605-0.47-1.232 0.74-4.204 2.08-5.08 1.56-1.022 4.25-1.027 5.7-0.01 2.19 1.532 2.69 3.346 2.51 9.154-0.16 5.245-0.12 5.466 1.52 8.732 0.93 1.842 2.05 4.578 2.49 6.08s1.46 3.779 2.27 5.06c2.62 4.128 3.49 8.167 3.44 15.997-0.03 6.023 0.08 7.073 0.88 7.952 1.45 1.604 4.02 0.922 6.55-1.736zm-0.47-2.238c-0.19-0.186-0.34-0.573-0.34-0.861 0-0.317 0.24-0.288 0.6 0.076 0.33 0.329 0.48 0.717 0.34 0.861-0.15 0.143-0.42 0.109-0.6-0.076zm1.47-1.114c-0.21-0.353-0.26-0.778-0.09-0.945 0.45-0.454 0.95 0.213 0.7 0.947-0.17 0.515-0.29 0.514-0.61-0.002zm-16.27-31.179c-0.96-1.464-0.8-3.56 0.28-3.607 2.28-0.098 4.32 2.26 3.67 4.23-0.38 1.133-3.08 0.707-3.95-0.623zm1.89-1.405c-0.36-0.363-0.6-0.393-0.6-0.076 0 0.676 0.6 1.275 0.94 0.937 0.14-0.144-0.01-0.531-0.34-0.861zm-8.36-19.976c-0.19-0.1857-0.34-1.2111-0.34-2.2786 0-1.8673 0.07-1.941 1.71-1.941 0.94 0 1.94 0.2848 2.22 0.6329 0.7 0.8774 0.45 2.8983-0.42 3.4506-0.85 0.5396-2.69 0.6176-3.17 0.1361zm2.19-2.2241c0-0.262-0.22-0.4765-0.5-0.4765s-0.51 0.3553-0.51 0.7895c0 0.4341 0.23 0.6485 0.51 0.4764s0.5-0.5273 0.5-0.7894zm-25.2 56.037c-1.44-1.649-1.49-1.867-1.25-5.443 0.26-3.833 0.74-5.369 3.87-12.334 0.99-2.228 1.81-4.479 1.82-5.001 0-0.523 0.92-2.602 2.03-4.62 2.49-4.512 2.67-5.564 0.26-1.572-0.97 1.609-2.64 3.988-3.72 5.287-2.39 2.873-2.76 3.559-4.45 8.271-0.73 2.041-2.1 5.243-3.04 7.116-2.11 4.206-2.26 5.927-0.47 5.585 0.95-0.182 1.8 0.297 3.67 2.084 2.89 2.76 3.35 2.985 1.28 0.627zm-3.66-4.95c0-1.843 0.22-1.777 0.7 0.211 0.2 0.827 0.12 1.393-0.18 1.393-0.29 0-0.52-0.722-0.52-1.604zm12.5-30.17c-0.12-0.487-0.23-0.088-0.23 0.886 0 0.975 0.11 1.374 0.23 0.886 0.13-0.487 0.13-1.284 0-1.772zm-0.55-5.053c-0.16-0.168-0.28 0.131-0.26 0.665 0.02 0.59 0.14 0.71 0.3 0.306 0.15-0.366 0.13-0.802-0.04-0.971zm3.3-3.01c-0.44-0.759-0.54-0.781-0.55-0.123-0.01 0.853 0.52 1.621 0.88 1.262 0.12-0.118-0.03-0.631-0.33-1.139zm11.79 0.938c0.14-0.229-0.19-0.796-0.73-1.261-0.93-0.793-0.99-0.788-0.99 0.079 0 1.402 1.11 2.166 1.72 1.182zm-9.52-2.485c-0.16-0.168-0.28 0.131-0.26 0.665 0.02 0.59 0.14 0.71 0.3 0.306 0.15-0.366 0.13-0.803-0.04-0.971zm10.8-1.439c-0.63-0.676-1.61-1.23-2.16-1.23-1.1 0-2.87 1.357-2.87 2.201 0 0.288 0.29 0.168 0.64-0.267 1.42-1.782 4.88-1.084 4.97 1.006 0.03 0.583 0.13 0.644 0.31 0.189 0.15-0.368-0.25-1.223-0.89-1.899zm-12.94-0.217c0.34 0 0.94 0.285 1.33 0.633 0.61 0.538 0.61 0.501 0.04-0.253-0.37-0.488-1.05-0.886-1.52-0.886-0.91 0-2.06 0.928-2.06 1.656 0 0.243 0.36 0.083 0.79-0.354 0.44-0.438 1.08-0.796 1.42-0.796z" transform="translate(10 845.31)"/>
+ <path id="tracing-f03-fr.svgpath4004" d="m226.33 89.101c-1.22-0.554-3.5-1.363-5.07-1.797-9.18-2.553-12.02-3.428-12.59-3.88-0.83-0.662-0.79-3.17 0.08-5.676 0.47-1.351 0.61-3.264 0.43-5.882-0.24-3.484-0.15-3.99 0.82-4.96 0.78-0.784 1.71-1.08 3.36-1.08 3.12 0 4.05-1.136 4.05-4.981 0-2.439 0.34-3.585 2.09-6.945 1.16-2.214 2.44-5.164 2.85-6.556 1.29-4.328 2.29-6.298 4.61-9.018 1.22-1.446 2.91-3.713 3.75-5.039l1.52-2.411-0.27-9.833c-0.25-9.303-0.21-9.982 0.85-12.583 2.03-4.9988 5.8-7.4473 11.48-7.4473 6.47 0 11.63 3.1302 14.05 8.5268 1.11 2.4645 1.41 4.1035 1.76 9.6405 0.41 6.617 0.44 6.711 2.83 11.441 1.33 2.623 3.54 6.054 4.92 7.624 2.84 3.246 3.81 5.006 5.72 10.332 1.53 4.27 2.17 10.332 1.41 13.56-0.38 1.63-0.33 2.348 0.19 3.038 0.38 0.497 0.7 1.538 0.7 2.314 0.03 1.92 1.27 3.673 3.9 5.479 1.73 1.193 2.2 1.822 2.2 2.968 0 2.463-0.48 2.996-4.94 5.47-2.38 1.317-5.37 3.394-6.66 4.614-3.43 3.266-5.02 4.106-7.79 4.109-2.72 0.002-5.84-1.368-6.82-2.995-0.61-1.001-1.07-1.054-9.13-1.054h-8.49l-1.83 1.51c-3.38 2.786-6.22 3.216-9.98 1.511zm8.76-3.212l2.24-1.835 9.53-0.004 9.54-0.005 0.07-4.081 0.07-4.082-1.09 0.985c-3.68 3.353-9.67 5.436-14.47 5.033-1.55-0.13-3.24-0.417-3.76-0.637-0.78-0.332-0.89-0.228-0.62 0.619 0.21 0.663-0.04 1.441-0.73 2.228-0.98 1.129-1.03 1.139-0.76 0.148 0.16-0.585-0.04-1.708-0.45-2.496s-0.63-1.625-0.48-1.861c0.43-0.698-0.92-3.24-1.98-3.739-0.55-0.254-2.23-2.513-3.75-5.02-3.52-5.808-6.01-8.389-7.75-8.022-0.7 0.147-1.73 0.984-2.29 1.861-0.83 1.304-1.46 1.657-3.47 1.944-1.34 0.193-2.77 0.474-3.16 0.625-1.21 0.464-1.67 2.55-1.24 5.669 0.29 2.149 0.19 3.693-0.37 5.654-0.53 1.858-0.6 2.86-0.24 3.221 0.29 0.288 3.58 1.296 7.33 2.239 3.74 0.943 7.81 2.185 9.04 2.76 3.22 1.5 5.94 1.128 8.79-1.204zm-4.77-0.013c0-0.111 0.8-0.673 1.77-1.248 1.39-0.819 1.77-0.889 1.77-0.321 0 0.398-0.44 0.96-0.98 1.248-0.96 0.517-2.56 0.717-2.56 0.321zm38.25-0.594c1.83-1.552 4.85-3.626 6.72-4.607 3.69-1.945 5.66-3.524 5.66-4.533 0-0.356-0.99-1.329-2.2-2.162-2.48-1.705-3.87-3.555-3.87-5.132 0-0.585-0.25-1.535-0.56-2.111-0.54-1-0.65-0.946-2.48 1.173-1.9 2.211-1.92 2.22-5.3 2.22-2.96 0-3.52-0.155-4.37-1.196-0.53-0.657-0.96-1.94-0.96-2.849 0-3.455-2.73-3.018-3.13 0.5-0.09 0.836-0.39 1.405-0.67 1.266-0.61-0.304-0.36-3.549 0.34-4.4 0.27-0.332 0.97-0.673 1.56-0.76 3.18-0.466 1.94-12.992-1.84-18.601-0.67-0.995-1.5-2.721-1.84-3.835s-1.43-3.621-2.43-5.57c-1.44-2.8-1.85-4.236-1.97-6.836-0.08-1.81-0.18-3.633-0.22-4.05-0.04-0.418 0.08-1.216 0.28-1.773s0.01-0.414-0.41 0.317c-1.38 2.358-4.02 2.355-4.96-0.006-0.31-0.758-0.63-1.053-0.77-0.69-0.3 0.823-4.02 0.827-4.53 0.005-0.26-0.424-0.48-0.218-0.68 0.633-0.41 1.751-2.64 2-3.75 0.417-0.44-0.635-0.8-0.933-0.79-0.662s0.33 0.915 0.73 1.431c0.51 0.684 0.58 1.285 0.22 2.215-0.5 1.317-0.13 1.853 2.24 3.226 1.3 0.752 0.67 1.177-0.68 0.456-2.02-1.083-1.56-0.169 0.88 1.739 2.88 2.25 4.36 2.216 8.27-0.192 1.38-0.851 2.74-1.547 3.01-1.547 1.11 0 0.35 0.855-2.37 2.659-4.1 2.722-8.05 2.603-10.41-0.313-0.87-1.076-0.87-1.074-0.88 0.548-0.01 0.896-0.8 3.061-1.76 4.811-0.95 1.75-1.83 4.12-1.94 5.266s-0.71 2.794-1.32 3.661c-2.5 3.501-4.26 8.305-4.5 12.264l-0.23 3.832 4.62 3.687c2.54 2.028 4.96 4.171 5.37 4.762 1.16 1.648 0.93 3.684-0.55 5.062l-1.31 1.215 1.39 1.095c1.86 1.464 3.14 1.73 7.18 1.496 4.42-0.256 7.59-1.788 11.59-5.612l3.11-2.973 0.36 2.618c0.44 3.173-0.16 11.231-0.8 10.833-1.01-0.619-0.39 1.415 0.78 2.583 1.02 1.02 1.74 1.243 4.04 1.243 2.67 0 2.97-0.138 6.13-2.823zm-33.69-12.607c0-0.342-1.31-1.753-2.92-3.135-3.41-2.953-4.86-3.876-3.37-2.15 0.58 0.671 1.59 2.132 2.24 3.246 1.86 3.206 2.57 3.885 3.36 3.227 0.38-0.311 0.69-0.846 0.69-1.188zm35.74-6.974c1.8-1.894 2.12-2.584 2.42-5.207 0.19-1.663 0.12-4.163-0.15-5.555-1.03-5.331-4.05-12.32-6.12-14.178-1.9-1.702-5.11-6.786-6.9-10.916-1.38-3.17-1.7-4.584-1.71-7.389-0.02-5.935-0.86-10.132-2.66-13.261-1.38-2.3986-2.13-3.0967-4.57-4.2836-7.07-3.4339-12.97-1.7826-15.87 4.4354-0.83 1.7852-1.17 3.3892-1.13 5.3372 0.03 1.532 0.16 2.329 0.3 1.772 0.41-1.67 1.19-2.278 2.91-2.278 1.82 0 4.27 1.891 4.4 3.394 0.04 0.5 0.1 1.249 0.12 1.663 0.03 0.414 0.45 0.829 0.94 0.922 0.62 0.119 0.79-0.062 0.58-0.605-0.47-1.232 0.75-4.204 2.08-5.08 1.56-1.022 4.26-1.027 5.71-0.01 2.19 1.532 2.68 3.346 2.5 9.154-0.16 5.245-0.12 5.466 1.53 8.732 0.93 1.842 2.05 4.578 2.48 6.08 0.44 1.502 1.47 3.779 2.28 5.06 2.62 4.128 3.49 8.167 3.44 15.997-0.04 6.023 0.08 7.073 0.88 7.952 1.45 1.604 4.02 0.922 6.54-1.736zm-0.47-2.238c-0.18-0.186-0.34-0.573-0.34-0.861 0-0.317 0.24-0.288 0.6 0.076 0.33 0.329 0.48 0.717 0.34 0.861-0.14 0.143-0.41 0.109-0.6-0.076zm1.48-1.114c-0.22-0.353-0.26-0.778-0.09-0.945 0.45-0.454 0.94 0.213 0.7 0.947-0.17 0.515-0.29 0.514-0.61-0.002zm-16.27-31.179c-0.96-1.464-0.8-3.56 0.28-3.607 2.27-0.098 4.32 2.26 3.66 4.23-0.38 1.133-3.07 0.707-3.94-0.623zm1.89-1.405c-0.36-0.363-0.6-0.393-0.6-0.076 0 0.676 0.6 1.275 0.94 0.937 0.14-0.144-0.01-0.531-0.34-0.861zm-8.36-19.976c-0.19-0.1857-0.34-1.2111-0.34-2.2786 0-1.8673 0.06-1.941 1.71-1.941 0.94 0 1.94 0.2848 2.21 0.6329 0.7 0.8774 0.46 2.8983-0.41 3.4506-0.86 0.5396-2.69 0.6176-3.17 0.1361zm2.19-2.2241c0-0.262-0.23-0.4765-0.51-0.4765s-0.5 0.3553-0.5 0.7895c0 0.4341 0.22 0.6485 0.5 0.4764s0.51-0.5273 0.51-0.7894zm-25.2 56.037c-1.45-1.649-1.5-1.867-1.26-5.443 0.27-3.833 0.75-5.369 3.87-12.334 1-2.228 1.82-4.479 1.82-5.001 0.01-0.523 0.92-2.602 2.03-4.62 2.5-4.512 2.67-5.564 0.27-1.572-0.97 1.609-2.65 3.988-3.73 5.287-2.38 2.873-2.75 3.559-4.44 8.271-0.74 2.041-2.11 5.243-3.05 7.116-2.11 4.206-2.25 5.927-0.47 5.585 0.96-0.182 1.8 0.297 3.68 2.084 2.89 2.76 3.35 2.985 1.28 0.627zm-3.66-4.95c0-1.843 0.22-1.777 0.7 0.211 0.19 0.827 0.12 1.393-0.19 1.393-0.28 0-0.51-0.722-0.51-1.604zm12.5-30.17c-0.13-0.487-0.23-0.088-0.23 0.886 0 0.975 0.1 1.374 0.23 0.886 0.13-0.487 0.13-1.284 0-1.772zm-0.55-5.053c-0.17-0.168-0.29 0.131-0.27 0.665 0.03 0.59 0.15 0.71 0.31 0.306 0.15-0.366 0.13-0.802-0.04-0.971zm3.3-3.01c-0.44-0.759-0.54-0.781-0.55-0.123-0.02 0.853 0.51 1.621 0.87 1.262 0.12-0.118-0.02-0.631-0.32-1.139zm11.78 0.938c0.14-0.229-0.19-0.796-0.73-1.261-0.92-0.793-0.99-0.788-0.99 0.079 0 1.402 1.11 2.166 1.72 1.182zm-9.51-2.485c-0.17-0.168-0.29 0.131-0.27 0.665 0.03 0.59 0.15 0.71 0.31 0.306 0.15-0.366 0.13-0.803-0.04-0.971zm10.8-1.439c-0.64-0.676-1.61-1.23-2.17-1.23-1.1 0-2.86 1.357-2.86 2.201 0 0.288 0.28 0.168 0.63-0.267 1.43-1.782 4.88-1.084 4.98 1.006 0.03 0.583 0.12 0.644 0.31 0.189 0.14-0.368-0.26-1.223-0.89-1.899zm-12.94-0.217c0.34 0 0.94 0.285 1.33 0.633 0.6 0.538 0.61 0.501 0.04-0.253-0.37-0.488-1.06-0.886-1.52-0.886-0.91 0-2.07 0.928-2.07 1.656 0 0.243 0.36 0.083 0.8-0.354 0.44-0.438 1.07-0.796 1.42-0.796z" transform="translate(10 845.31)" stroke="#000" stroke-width=".375" fill="none"/>
+ <circle cy="0" cx="0" r="2" transform="translate(15 967.93)"/>
+ <rect id="d0e96" display="none" height="1e3px" width="258" y="961.93" x="20"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e96"/>
</flowRegion>
<flowDiv xml:space="preserve">Quantification des couleurs</flowDiv>
</flowRoot>
- <rect id="d0e100" display="none" height="1e3px" width="288" y="989.29" x="10"/>
+ <rect id="d0e100" display="none" height="1e3px" width="288" y="979.29" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e100"/>
</flowRegion>
<flowDiv xml:space="preserve">Le résultat de ce filtre produira une image intermédiaire très différente de celle produite avec les deux autres, mais pouvant être aussi très utile. Au lieu de chercher les isoclines de contraste ou de luminosité, il cherche les limites des changements de couleur, même à contraste ou luminosité constants. Le réglage ici, nombre de couleurs, permet de déterminer le nombre de couleurs que l&apos;image intermédiaire devrait avoir si elle était en couleurs. Il exécute ensuite la détermination blanc/noir d&apos;après l&apos;indice pair ou impair des couleurs.</flowDiv>
</flowRoot>
- <text id="tracing-f04-fr.svgtext4626" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1098.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.153664" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan4627" y="97.153664" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
- <text id="tracing-f04-fr.svgtext4629" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1098.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="156.37865" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan5892" sodipodi:role="line" y="97.378670" x="156.37865">Quantification (12 coul.)</tspan><tspan id="tracing-f04-fr.svgtspan5894" sodipodi:role="line" y="103.37867" x="156.37865">Rempli, sans contour</tspan></text>
- <text id="tracing-f04-fr.svgtext4634" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1098.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="245.12865" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan5896" sodipodi:role="line" y="97.378670" x="245.12865">Quantification (12 coul.)</tspan><tspan id="tracing-f04-fr.svgtspan5898" sodipodi:role="line" y="103.37867" x="245.12865">Contour, non rempli</tspan></text>
- <image id="tracing-f04-fr.svgimage4639" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 1098.9)" height="91.143" width="76.965" y="-.000097656" x="31.099"/>
- <path id="tracing-f04-fr.svgpath5261" d="m138.36 88.785c-1.07-0.444-1.75-1.018-1.57-1.318 0.19-0.298 0.09-0.383-0.22-0.193-0.3 0.187-3.07-0.348-6.16-1.187-3.09-0.84-5.78-1.541-5.99-1.559-0.2-0.018 0.13-0.231 0.73-0.474 1.22-0.493 6.35 0.11 10.85 1.278 4.27 1.106 5.77 0.967 7.64-0.707 1.4-1.253 1.64-1.817 1.71-4.064 0.05-1.435-0.11-2.731-0.35-2.88-0.24-0.148-0.44 0.752-0.44 2 0 3.33-1.84 5.385-4.82 5.385-1.21 0-2.83-0.239-3.6-0.532s-4.03-0.982-7.24-1.531c-6.88-1.176-7.55-1.616-6.71-4.429 0.74-2.453 0.78-4.821 0.08-4.389-0.28 0.175-0.4 0.504-0.26 0.731 0.27 0.429-0.44 3.028-1.34 4.894-0.81 1.698-0.3 2.834 1.61 3.57 1.61 0.619 1.63 0.655 0.26 0.384-2.93-0.576-3.39-1.811-2.04-5.533 0.51-1.439 0.64-3.143 0.43-5.883-0.27-3.484-0.2-3.961 0.78-4.937 0.76-0.759 1.72-1.082 3.23-1.087 2.41-0.009 2.87-0.23 4.06-1.97 0.62-0.92 0.7-1.459 0.3-2.205-0.76-1.426-0.09-4.225 1.86-7.717 0.93-1.671 2.26-4.797 2.96-6.946 1.58-4.862 1.98-5.607 4.64-8.751 1.17-1.392 2.83-3.637 3.69-4.987l1.54-2.456-0.3-9.799c-0.34-11.096 0.02-12.896 3.25-16.478 2.41-2.6629 5.35-3.6959 9.64-3.3863 5.48 0.3948 9.5 2.8938 12.15 7.5492 1.39 2.4461 1.65 3.8181 2.1 11.044 0.37 5.991 0.44 6.24 2.8 10.902 1.33 2.625 3.54 6.057 4.91 7.627 2.86 3.269 4.15 5.594 5.85 10.589 1.45 4.266 1.94 9.256 1.25 12.687-0.4 2-0.35 2.768 0.22 3.654 0.4 0.617 0.73 1.707 0.73 2.423 0 1.806 1.28 3.588 3.87 5.369 3.67 2.527 3.07 4.2-2.66 7.392-2.33 1.299-5.27 3.359-6.52 4.579-1.26 1.219-2.5 2.085-2.76 1.924s-0.63-0.026-0.84 0.3c-0.23 0.37-0.14 0.457 0.22 0.232 0.32-0.199 0.59-0.24 0.59-0.092 0 0.624-3.12 1.816-4.76 1.816-2.14 0-4.52-0.842-4.14-1.461 0.15-0.248-0.12-0.419-0.6-0.381-0.52 0.04-0.89-0.286-0.89-0.781 0-0.468-0.21-1.037-0.46-1.266-0.26-0.241-0.29-0.128-0.06 0.268 0.32 0.549 0.19 0.574-0.65 0.127-0.63-0.341-4.31-0.557-9.48-0.557h-8.44l-1.9 1.504c-3.36 2.662-5.46 3.072-8.75 1.708zm4.05-0.017c-0.49-0.127-1.29-0.127-1.77 0-0.49 0.128-0.09 0.232 0.88 0.232 0.98 0 1.38-0.104 0.89-0.232zm32.15-0.008c-0.62-0.121-1.65-0.121-2.28 0-0.62 0.12-0.11 0.219 1.14 0.219 1.26 0 1.77-0.099 1.14-0.219zm-26.77-2.829c0.16 0.161 0.44-0.081 0.61-0.539 0.28-0.728 1.42-0.832 9.13-0.832 4.84 0 8.8 0.204 8.8 0.453s0.52 0.42 1.14 0.38c1.11-0.071 1.14-0.249 1.2-5.517 0.03-2.994-0.11-5.443-0.32-5.443-0.2 0-0.65 0.339-1 0.754-0.34 0.415-0.8 0.645-1.02 0.511-0.21-0.134-0.77 0.331-1.23 1.034s-1.05 1.143-1.32 0.979c-0.27-0.165-0.48-0.045-0.48 0.267 0 0.311-0.21 0.44-0.46 0.285-0.25-0.154-0.59 0.075-0.75 0.509-0.17 0.434-0.54 0.647-0.82 0.474-0.28-0.174-0.51-0.05-0.51 0.275s-0.34 0.459-0.76 0.299c-0.41-0.16-0.76-0.056-0.76 0.233 0 0.294-0.44 0.383-1.01 0.203-0.55-0.177-1.01-0.135-1.01 0.092 0 0.228-1.82 0.414-4.05 0.414s-4.05-0.163-4.05-0.364c0-0.2-0.38-0.218-0.84-0.04-0.61 0.232-0.73 0.138-0.44-0.335 0.27-0.442 0.18-0.58-0.3-0.419-0.4 0.137-0.71 0.966-0.73 1.964-0.06 2.93-0.18 3.32-1.51 4.646-0.91 0.907-1.09 1.362-0.63 1.541 0.36 0.14 1.14-0.279 1.74-0.932 0.6-0.652 1.22-1.054 1.38-0.892zm-2.22 0.908c0.35-0.418 0.75-0.76 0.89-0.76s-0.03 0.342-0.38 0.76c-0.35 0.417-0.74 0.759-0.88 0.759s0.03-0.342 0.37-0.759zm32.33-1.276c1.22-0.549 2.38-0.894 2.59-0.766 0.2 0.128 1.02-0.442 1.81-1.268 1.8-1.881 1.46-1.879-2.29 0.018-3.42 1.722-6.55 1.994-7.86 0.681-1.4-1.399-1.77-3.065-1.77-8.026 0-2.641-0.22-4.887-0.51-5.062-0.76-0.472-1.21 1.173-0.54 1.98 0.36 0.435 0.55 2.432 0.48 5.273-0.08 3.597 0.09 4.856 0.77 5.903 1.58 2.406 3.92 2.812 7.32 1.267zm-18.94-6.314c1.09-0.391 2.21-0.573 2.48-0.406s0.34 0.057 0.15-0.245c-0.34-0.554 1.52-1.45 2.47-1.185 0.27 0.078 0.33-0.027 0.13-0.234-0.33-0.322 1.41-1.937 2.14-2.001 0.62-0.053 2.54-1.54 2.54-1.968 0-0.26-0.62 0.08-1.38 0.755s-1.05 0.805-0.66 0.289c0.4-0.516 0.9-2.112 1.12-3.545 1.01-6.849 1.12-7.11 3.19-7.494 1.13-0.21 1.62-1.824 1.72-5.648 0.03-1.481 0.25-2.313 0.56-2.122 0.63 0.386 0.68 4.81 0.06 4.81-0.25 0-0.34 1.538-0.21 3.418 0.21 2.857 0.46 3.613 1.55 4.608 1.1 0.998 1.64 1.137 3.37 0.86 1.2-0.191 2.65-0.891 3.46-1.665 0.77-0.734 1.39-1.103 1.39-0.821 0 0.775-2.09 2.578-3.7 3.187-3.24 1.227-5.69 0.075-6.41-3.016l-0.42-1.76-0.05 1.932c-0.07 2.597 0.61 3.697 2.72 4.393 2.04 0.673 3.45 0.355 5.58-1.262 1.46-1.096 4.07-4.841 2.86-4.096-0.73 0.45-0.73 0.167 0-1.434 0.32-0.701 0.78-1.156 1.01-1.011 0.23 0.144 0.28-0.433 0.11-1.282-0.17-0.85-0.1-1.544 0.14-1.544s0.44-1.254 0.44-2.785c0-1.532-0.2-2.785-0.44-2.785s-0.31-0.684-0.14-1.519c0.19-0.939 0.09-1.519-0.24-1.519-0.31 0-0.42-0.342-0.26-0.76s0.05-0.759-0.25-0.759-0.42-0.342-0.26-0.76 0.05-0.759-0.25-0.759-0.41-0.342-0.25-0.76 0.04-0.76-0.26-0.76-0.41-0.341-0.25-0.759 0.06-0.76-0.23-0.76c-0.28 0-0.38-0.227-0.21-0.506 0.18-0.278 0.06-0.506-0.25-0.506s-0.42-0.228-0.25-0.507c0.17-0.278 0.06-0.506-0.26-0.506-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.06-0.507-0.25-0.507s-0.43-0.229-0.25-0.51c0.17-0.28-0.04-0.646-0.48-0.812-0.43-0.167-0.67-0.484-0.54-0.705 0.14-0.221-0.6-1.154-1.65-2.073-1.04-0.919-1.83-1.859-1.76-2.09s-0.21-0.552-0.63-0.713c-0.42-0.16-0.64-0.496-0.48-0.745 0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.23-0.25-0.51c0.17-0.281-0.04-0.646-0.47-0.813-0.44-0.166-0.67-0.507-0.51-0.756 0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.25-0.507s-0.43-0.228-0.26-0.506c0.18-0.279 0.06-0.507-0.25-0.507s-0.43-0.227-0.25-0.506c0.17-0.278 0.06-0.506-0.26-0.506-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.05-0.507-0.28-0.507-0.32 0-0.46-0.342-0.3-0.759 0.16-0.418 0.05-0.76-0.25-0.76s-0.41-0.342-0.25-0.759c0.16-0.418 0.05-0.76-0.25-0.76-0.36 0-0.48-1.47-0.37-4.304 0.1-2.367-0.02-4.304-0.26-4.304-0.25 0-0.33-0.911-0.18-2.025 0.16-1.161 0.06-2.026-0.22-2.026-0.27 0-0.35-0.457-0.17-1.015 0.21-0.674 0.06-1.117-0.47-1.319-0.44-0.167-0.67-0.5076-0.51-0.7569 0.15-0.2493 0.02-0.4533-0.29-0.4533s-0.42-0.2278-0.25-0.5063 0.06-0.5064-0.25-0.5064-0.45-0.193-0.3-0.4289c0.34-0.557-2.45-3.2379-2.9-2.7851-0.19 0.1896-0.35 0.0654-0.35-0.2759 0-0.3414-0.23-0.4798-0.5-0.3077-0.28 0.1721-0.51 0.0582-0.51-0.2532s-0.23-0.4253-0.51-0.2532-0.5 0.0582-0.5-0.2531c0-0.3114-0.23-0.4253-0.51-0.2532s-0.51 0.0563-0.51-0.2574c0-0.34-0.41-0.4405-1.01-0.249-0.56 0.1768-1.01 0.1352-1.01-0.0924 0-0.2277-1.48-0.4139-3.29-0.4139s-3.29 0.1952-3.29 0.4339-0.35 0.3028-0.76 0.1425c-0.42-0.1603-0.76-0.0573-0.76 0.2289s-0.23 0.3795-0.51 0.2074-0.51-0.0582-0.51 0.2532c0 0.3113-0.19 0.4468-0.42 0.301-0.56-0.3443-3.24 2.4459-2.79 2.8988 0.19 0.1895 0.07 0.3446-0.28 0.3446-0.34 0-0.48 0.2279-0.3 0.5064 0.17 0.2785 0.05 0.5063-0.26 0.5063s-0.42 0.2279-0.25 0.5064 0.08 0.5063-0.21 0.5063c-0.28 0-0.39 0.3418-0.23 0.7595s0.1 0.7597-0.14 0.7597-0.43 3.418-0.43 7.595c0 4.178 0.13 7.595 0.3 7.595s0.34 1.254 0.39 2.785c0.06 1.72-0.12 2.785-0.46 2.785-0.3 0-0.4 0.228-0.23 0.507 0.17 0.278 0.06 0.506-0.26 0.506-0.31 0-0.44 0.204-0.28 0.453 0.15 0.249-0.08 0.59-0.51 0.756-0.43 0.167-0.66 0.508-0.51 0.76 0.16 0.251-0.07 0.593-0.5 0.759-0.44 0.167-0.67 0.507-0.51 0.757 0.15 0.25-0.29 0.832-1 1.292-0.7 0.461-1.16 1.019-1.03 1.241 0.14 0.222-0.43 0.907-1.26 1.522-0.83 0.616-1.38 1.335-1.22 1.6 0.17 0.264 0.05 0.481-0.26 0.481-0.32 0-0.43 0.227-0.26 0.506 0.17 0.278 0.06 0.506-0.25 0.506s-0.43 0.228-0.25 0.507c0.17 0.278 0.07 0.506-0.21 0.506-0.29 0-0.39 0.342-0.23 0.76 0.16 0.417 0.02 0.759-0.3 0.759-0.37 0-0.47 0.393-0.28 1.013 0.18 0.568 0.09 1.012-0.2 1.012s-0.39 0.342-0.23 0.76 0.02 0.76-0.3 0.76c-0.33 0-0.45 0.227-0.28 0.506 0.17 0.278 0.08 0.506-0.21 0.506-0.28 0-0.39 0.342-0.23 0.76s0.03 0.759-0.29 0.759c-0.33 0-0.45 0.228-0.28 0.507 0.17 0.278 0.06 0.506-0.26 0.506-0.31 0-0.42 0.228-0.25 0.506 0.17 0.279 0.06 0.507-0.25 0.507s-0.44 0.204-0.29 0.453c0.16 0.249-0.07 0.589-0.51 0.756-0.43 0.166-0.64 0.532-0.47 0.812 0.17 0.281 0.06 0.51-0.25 0.51s-0.43 0.228-0.25 0.507c0.17 0.278 0.05 0.506-0.26 0.506-0.34 0-0.44 0.409-0.25 1.013 0.18 0.557 0.09 1.012-0.19 1.012-0.64 0-0.54 2.161 0.12 2.614 0.27 0.184 1.21 0.216 2.1 0.073 1.3-0.212 1.97 0.05 3.46 1.363 1.02 0.894 1.85 1.876 1.85 2.182s-0.87-0.29-1.93-1.326c-1.6-1.562-2.23-1.859-3.74-1.748-1.01 0.074-1.72 0.297-1.6 0.497s0.91 0.225 1.76 0.057c1.28-0.258 1.83-0.016 3.39 1.514 1.03 1.002 2.1 1.831 2.38 1.843 0.27 0.011 0.59 0.28 0.69 0.597 0.12 0.356-0.05 0.423-0.45 0.175-0.43-0.265-0.53-0.201-0.29 0.191 0.2 0.326 0.56 0.475 0.79 0.331 0.23-0.143 1.02 0.748 1.74 1.981 1.46 2.499 1.61 3.054 0.68 2.517-0.37-0.211-0.46-0.171-0.21 0.097 0.23 0.253 0.67 0.461 0.97 0.461s0.65 0.316 0.78 0.703c0.16 0.469 0.02 0.57-0.41 0.302-0.44-0.272-0.53-0.201-0.27 0.216 0.21 0.34 0.51 0.487 0.67 0.327s0.86 0.223 1.55 0.852 1.08 0.83 0.86 0.446c-0.28-0.47-0.19-0.626 0.26-0.475 0.37 0.123 1.09-0.189 1.59-0.694 1.01-1.006 1.23-2.437 0.38-2.437-0.29 0-0.41-0.197-0.26-0.438 0.32-0.527-1.43-2.225-1.86-1.797-0.16 0.164-0.68-0.29-1.15-1.008s-1.05-1.186-1.29-1.04c-0.23 0.146-0.8-0.31-1.26-1.013s-1.01-1.174-1.21-1.047c-0.21 0.127-1-0.414-1.75-1.202-1.2-1.253-1.39-1.888-1.49-5.081-0.06-2.007 0.08-3.77 0.32-3.917 0.24-0.148 0.31-0.588 0.16-0.977-0.15-0.39-0.03-0.708 0.27-0.708s0.42-0.342 0.26-0.76c-0.17-0.418-0.08-0.759 0.18-0.759s0.34-0.342 0.18-0.76-0.02-0.759 0.3-0.759c0.33 0 0.45-0.228 0.28-0.507-0.17-0.278-0.06-0.506 0.25-0.506s0.43-0.228 0.25-0.506c-0.17-0.279-0.05-0.507 0.26-0.507s0.42-0.228 0.25-0.506c-0.17-0.279-0.06-0.507 0.25-0.507 0.32 0 0.43-0.227 0.26-0.506-0.18-0.278-0.06-0.506 0.25-0.506s0.42-0.23 0.25-0.51c-0.17-0.281 0.04-0.646 0.47-0.813 0.44-0.166 0.67-0.506 0.51-0.756-0.15-0.249-0.06-0.453 0.21-0.453s0.38-0.513 0.24-1.139c-0.21-0.947-0.15-1.011 0.34-0.38 0.48 0.605 0.54 0.375 0.33-1.139-0.15-1.1-0.05-1.899 0.24-1.899 0.28 0 0.37-0.228 0.19-0.507-0.17-0.278-0.05-0.506 0.26-0.506s0.42-0.228 0.25-0.506c-0.17-0.279-0.06-0.507 0.25-0.507 0.32 0 0.43-0.227 0.26-0.506-0.17-0.278-0.06-0.506 0.25-0.506s0.43-0.23 0.25-0.51c-0.17-0.281 0.04-0.646 0.48-0.813 0.43-0.166 0.66-0.506 0.5-0.756-0.15-0.249-0.02-0.453 0.29-0.453s0.43-0.228 0.25-0.506c-0.17-0.279-0.07-0.507 0.23-0.507 0.59 0 0.45-3.696-0.2-5.184-0.21-0.483-0.14-1.566 0.15-2.405 0.3-0.875 0.33-1.525 0.07-1.525s-0.32-0.379-0.15-0.843c0.2-0.503 0.12-0.715-0.18-0.527-0.7 0.432-0.51-5.463 0.21-6.322 1.08-1.307 5.74-0.198 4.9 1.167-0.15 0.247-0.02 0.449 0.29 0.449s0.53 0.398 0.48 0.886c-0.18 1.802 0.06 2.152 1.49 2.152 1.59 0 2.17-0.823 1.73-2.483-0.16-0.633-0.03-1.062 0.32-1.062 0.33 0 0.46-0.224 0.29-0.498-0.4-0.639 2.71-2.551 4.04-2.487 0.85 0.04 0.81 0.119-0.25 0.48-1.22 0.416-1.21 0.428 0.25 0.348 1.73-0.095 2.95 0.478 2.51 1.18-0.16 0.259-0.03 0.471 0.28 0.471s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.507 0.21 0.507s0.39 0.342 0.23 0.759c-0.16 0.418-0.04 0.76 0.27 0.76s0.56 0.569 0.56 1.266c0 0.696-0.25 1.266-0.56 1.266s-0.43 0.341-0.27 0.759 0.06 0.76-0.22 0.76c-0.33 0-0.32 0.351 0.03 1.003 0.3 0.552 0.53 1.862 0.52 2.912-0.04 2.879 0.16 4.186 0.64 4.186 0.23 0 0.28 0.228 0.11 0.507-0.17 0.278-0.06 0.506 0.25 0.506 0.32 0 0.43 0.228 0.26 0.506-0.17 0.279-0.06 0.507 0.25 0.507s0.44 0.204 0.29 0.453c-0.16 0.249 0.08 0.593 0.53 0.764 0.46 0.177 0.68 0.635 0.52 1.066-0.16 0.415-0.06 0.755 0.23 0.755 0.28 0 0.38 0.228 0.2 0.506-0.17 0.279-0.05 0.506 0.26 0.506 0.34 0 0.44 0.41 0.25 1.013-0.2 0.624-0.09 1.013 0.28 1.013 0.35 0 0.49 0.421 0.33 1.013-0.14 0.556-0.02 1.012 0.28 1.012s0.39 0.151 0.21 0.335c-0.18 0.183 0.12 0.655 0.68 1.047s0.89 0.925 0.73 1.185c-0.16 0.259-0.04 0.471 0.27 0.471 0.32 0 0.43 0.228 0.26 0.507-0.17 0.278-0.06 0.506 0.25 0.506s0.43 0.228 0.25 0.506c-0.17 0.279-0.05 0.507 0.26 0.507s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.506 0.21 0.506 0.28 0 0.37 0.38 0.19 0.843-0.23 0.61-0.13 0.729 0.35 0.431 0.51-0.316 0.59-0.109 0.34 0.888-0.19 0.765-0.1 1.374 0.22 1.482 0.37 0.125 0.4 0.745 0.09 1.941l-0.46 1.757-0.33-2.73c-0.32-2.716-2.19-6.982-3.89-8.916-0.49-0.556-1.04-1.998-1.22-3.203-0.39-2.533-2.78-7.52-4.24-8.843-0.97-0.876-1.06-0.866-2.46 0.286-2.49 2.042-6.25 4.394-7.53 4.715-1.23 0.31-3.35-1.229-3.88-2.822-0.44-1.315-1.86-0.077-3.72 3.248-1.48 2.654-1.79 3.633-1.51 4.884 0.26 1.175 0.1 1.839-0.64 2.663-3.09 3.464-5.7 10.213-5.7 14.751v3.25l3.15 2.688c8.04 6.866 8.68 7.985 5.95 10.475l-1.53 1.399 1.04 0.94c0.8 0.726 0.89 1.042 0.39 1.39-0.43 0.304-0.31 0.361 0.37 0.175 0.56-0.151 1.35-0.056 1.77 0.212 1.14 0.729 8.07 0.56 10.35-0.251zm-22.93-18.487c0-0.697 0.12-0.982 0.26-0.633 0.14 0.348 0.14 0.917 0 1.265-0.14 0.349-0.26 0.064-0.26-0.632zm31.33-30.348c-0.72-1.358-0.66-1.552 0.48-1.552 1.01 0 2.26 1.634 1.68 2.212-0.62 0.62-1.64 0.308-2.16-0.66zm1.51-0.004c0-0.262-0.23-0.617-0.51-0.789s-0.51 0.042-0.51 0.477c0 0.434 0.23 0.789 0.51 0.789s0.51-0.215 0.51-0.477zm-8.11-22.562c0-0.9044 0.28-1.2658 0.96-1.2658 1.35 0 1.75 1.3911 0.58 2.0176-1.38 0.7375-1.54 0.6613-1.54-0.7518zm-16.2 68.942c0-0.096-0.51-0.609-1.14-1.139l-1.14-0.965 0.97 1.14c0.9 1.07 1.31 1.369 1.31 0.964zm-22.18-8.925c-0.33-0.501-1.1 1.312-1.1 2.602-0.02 2.91 0.75 3.231 1 0.422 0.14-1.532 0.19-2.893 0.1-3.024zm17.12 1.505c-0.3-0.558-0.66-1.013-0.8-1.013s-0.01 0.455 0.29 1.013c0.3 0.556 0.66 1.012 0.8 1.012s0.01-0.456-0.29-1.012zm-12.41-2.026c0.17-0.278 0.09-0.506-0.19-0.506s-0.65 0.228-0.82 0.506c-0.17 0.279-0.09 0.506 0.19 0.506s0.65-0.227 0.82-0.506zm35.71-39.859c0.41-1.193 0.41-1.872 0-2.532-0.5-0.79-0.53-0.761-0.25 0.237 0.21 0.79 0.09 1.14-0.41 1.14-0.39 0-2.14 0.714-3.89 1.588-4.41 2.207-7 2.438-8.9 0.797l-1.48-1.27 0.87-1.827c0.48-1.005 1.61-2.28 2.52-2.834s1.35-1.008 0.98-1.01c-0.38-0.001-1.26 0.454-1.97 1.011s-1.6 1.013-1.98 1.013-0.69 0.285-0.7 0.633c0 0.348-0.14 1.132-0.3 1.741-0.23 0.858 0.23 1.626 2.05 3.392 2.09 2.035 2.64 2.301 4.99 2.436 3.46 0.2 7.62-2.015 8.47-4.515zm-1.83-4.518c0.24-0.622 0.16-0.703-0.32-0.321-0.36 0.28-0.99 0.636-1.41 0.791-0.51 0.192-0.41 0.294 0.33 0.321 0.6 0.022 1.23-0.334 1.4-0.791zm-10.84-1.449c0-0.463 0.32-0.623 0.89-0.441 0.72 0.232 0.75 0.189 0.15-0.236-0.41-0.286-0.87-0.437-1.04-0.334s-0.61-0.311-0.99-0.919c-0.65-1.049-0.64-1.067 0.28-0.347 0.88 0.693 0.91 0.686 0.31-0.079-1.06-1.355-2.4-0.828-2.27 0.888 0.1 1.25 0.05 1.318-0.34 0.457-0.32-0.711-0.47-0.782-0.5-0.24-0.02 0.426 0.32 1.281 0.76 1.901 0.63 0.91 0.97 1.026 1.77 0.601 0.54-0.289 0.98-0.852 0.98-1.251zm7.6 1.014c-0.75-0.894 0.03-1.033 0.9-0.162 0.95 0.95 2.94-0.356 2.87-1.886-0.03-0.68-0.24-1.408-0.48-1.619-0.23-0.211-0.22-0.042 0.01 0.376 0.37 0.653 0.32 0.663-0.42 0.069-0.46-0.38-0.72-0.892-0.57-1.139s0.02-0.449-0.29-0.449c-0.78 0-2.05 1.319-1.66 1.712 0.17 0.172 0.05 0.313-0.28 0.313-0.32 0-0.59 0.456-0.59 1.013 0 0.828-0.34 1.013-1.86 1.013-1.02 0-1.7 0.148-1.52 0.33s1.01 0.311 1.84 0.287c0.84-0.023 1.65 0.17 1.81 0.429 0.16 0.26 0.42 0.473 0.58 0.473s0-0.342-0.34-0.76zm5.37-2.721c-0.34-2.201-1.64-3.608-3.31-3.608-1.81 0-3.59 1.338-3.56 2.687 0.01 1.062 0.06 1.05 1.15-0.282 2.29-2.789 5.26-1.053 4.75 2.773-0.26 2.009-0.23 2.092 0.48 1.151 0.49-0.651 0.66-1.623 0.49-2.721zm-12.2-2.097c-0.04-0.562-0.38-1.302-0.75-1.646-0.54-0.5-0.6-0.488-0.28 0.062 0.29 0.517 0.13 0.606-0.65 0.36-0.56-0.181-1.18-0.091-1.36 0.198-0.17 0.29 0.01 0.527 0.41 0.527s1.01 0.342 1.35 0.76c0.88 1.05 1.37 0.949 1.28-0.261z" transform="translate(10 1098.9)"/>
- <path id="tracing-f04-fr.svgpath5262" d="m227.11 88.785c-1.07-0.443-1.75-1.018-1.57-1.318 0.19-0.298 0.09-0.382-0.22-0.192-0.3 0.186-3.07-0.348-6.16-1.188s-5.78-1.541-5.99-1.559c-0.2-0.017 0.13-0.231 0.73-0.474 1.22-0.493 6.35 0.111 10.85 1.278 4.27 1.106 5.77 0.968 7.64-0.707 1.4-1.252 1.64-1.817 1.71-4.064 0.05-1.435-0.11-2.731-0.35-2.879-0.24-0.149-0.44 0.751-0.44 1.999 0 3.33-1.84 5.386-4.82 5.386-1.21 0-2.83-0.24-3.6-0.532-0.77-0.293-4.03-0.982-7.24-1.531-6.88-1.176-7.55-1.617-6.71-4.43 0.74-2.453 0.78-4.82 0.08-4.389-0.28 0.175-0.4 0.504-0.26 0.732 0.27 0.428-0.44 3.028-1.34 4.893-0.81 1.698-0.3 2.834 1.61 3.571 1.61 0.618 1.63 0.654 0.26 0.384-2.93-0.577-3.39-1.811-2.04-5.534 0.51-1.439 0.64-3.142 0.43-5.882-0.27-3.484-0.2-3.962 0.78-4.937 0.76-0.76 1.72-1.082 3.23-1.088 2.41-0.009 2.87-0.229 4.06-1.969 0.62-0.92 0.7-1.459 0.3-2.206-0.76-1.426-0.09-4.224 1.86-7.716 0.93-1.671 2.26-4.797 2.96-6.947 1.58-4.862 1.98-5.607 4.64-8.75 1.17-1.393 2.83-3.637 3.69-4.988l1.54-2.455-0.3-9.799c-0.34-11.096 0.02-12.897 3.25-16.479 2.41-2.6625 5.35-3.6955 9.64-3.3859 5.48 0.3948 9.5 2.8938 12.15 7.5492 1.39 2.4457 1.65 3.8187 2.1 11.044 0.37 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.54 6.056 4.91 7.626 2.86 3.269 4.15 5.595 5.85 10.589 1.45 4.266 1.94 9.256 1.25 12.688-0.4 1.999-0.35 2.768 0.22 3.653 0.4 0.617 0.73 1.707 0.73 2.423 0 1.806 1.28 3.589 3.87 5.37 3.67 2.526 3.07 4.2-2.66 7.391-2.33 1.299-5.27 3.359-6.52 4.579-1.26 1.22-2.5 2.086-2.76 1.924-0.26-0.161-0.63-0.026-0.84 0.3-0.23 0.371-0.14 0.458 0.22 0.232 0.32-0.199 0.59-0.24 0.59-0.091 0 0.623-3.12 1.815-4.76 1.815-2.14 0-4.52-0.842-4.14-1.461 0.15-0.248-0.12-0.419-0.6-0.381-0.52 0.041-0.89-0.286-0.89-0.781 0-0.467-0.21-1.037-0.46-1.265-0.26-0.241-0.29-0.128-0.06 0.267 0.32 0.549 0.19 0.574-0.65 0.127-0.63-0.341-4.31-0.557-9.48-0.557h-8.44l-1.9 1.504c-3.36 2.662-5.46 3.073-8.75 1.708zm4.05-0.016c-0.49-0.128-1.29-0.128-1.77 0-0.49 0.127-0.09 0.231 0.88 0.231 0.98 0 1.38-0.104 0.89-0.231zm32.15-0.009c-0.62-0.12-1.65-0.12-2.28 0-0.62 0.121-0.11 0.22 1.14 0.22 1.26 0 1.77-0.099 1.14-0.22zm-26.77-2.829c0.16 0.161 0.44-0.081 0.61-0.539 0.28-0.727 1.42-0.832 9.13-0.832 4.84 0 8.8 0.204 8.8 0.453s0.52 0.42 1.14 0.38c1.11-0.071 1.14-0.249 1.2-5.516 0.03-2.994-0.11-5.444-0.32-5.444-0.2 0-0.65 0.34-1 0.754-0.34 0.415-0.8 0.645-1.02 0.511-0.21-0.134-0.77 0.332-1.23 1.034-0.46 0.703-1.05 1.144-1.32 0.979s-0.48-0.045-0.48 0.267c0 0.311-0.21 0.44-0.46 0.286s-0.59 0.075-0.75 0.508c-0.17 0.434-0.54 0.647-0.82 0.474s-0.51-0.05-0.51 0.275-0.34 0.459-0.76 0.299c-0.41-0.16-0.76-0.055-0.76 0.233 0 0.295-0.44 0.384-1.01 0.203-0.55-0.176-1.01-0.135-1.01 0.093s-1.82 0.414-4.05 0.414-4.05-0.164-4.05-0.364-0.38-0.218-0.84-0.041c-0.61 0.233-0.73 0.138-0.44-0.334 0.27-0.443 0.18-0.58-0.3-0.42-0.4 0.138-0.71 0.967-0.73 1.964-0.06 2.931-0.18 3.321-1.51 4.647-0.91 0.906-1.09 1.361-0.63 1.54 0.36 0.14 1.14-0.279 1.74-0.931s1.22-1.054 1.38-0.893zm-2.22 0.908c0.35-0.418 0.75-0.759 0.89-0.759s-0.03 0.341-0.38 0.759-0.74 0.759-0.88 0.759 0.03-0.341 0.37-0.759zm32.33-1.275c1.22-0.55 2.38-0.895 2.59-0.767 0.2 0.129 1.02-0.442 1.81-1.267 1.8-1.882 1.46-1.879-2.29 0.018-3.42 1.722-6.55 1.993-7.86 0.681-1.4-1.4-1.77-3.066-1.77-8.026 0-2.641-0.22-4.888-0.51-5.063-0.76-0.471-1.21 1.173-0.54 1.981 0.36 0.435 0.55 2.432 0.48 5.272-0.08 3.597 0.09 4.857 0.77 5.904 1.58 2.406 3.92 2.811 7.32 1.267zm-18.94-6.315c1.09-0.39 2.21-0.573 2.48-0.406s0.34 0.057 0.15-0.244c-0.34-0.554 1.52-1.451 2.47-1.186 0.27 0.079 0.33-0.027 0.13-0.234-0.33-0.322 1.41-1.937 2.14-2 0.62-0.054 2.54-1.541 2.54-1.968 0-0.26-0.62 0.079-1.38 0.754-0.76 0.676-1.05 0.805-0.66 0.289 0.4-0.516 0.9-2.111 1.12-3.544 1.01-6.85 1.12-7.111 3.19-7.495 1.13-0.21 1.62-1.824 1.72-5.648 0.03-1.481 0.25-2.312 0.56-2.122 0.63 0.387 0.68 4.811 0.06 4.811-0.25 0-0.34 1.538-0.21 3.418 0.21 2.857 0.46 3.612 1.55 4.607 1.1 0.999 1.64 1.137 3.37 0.86 1.2-0.191 2.65-0.89 3.46-1.664 0.77-0.734 1.39-1.104 1.39-0.822 0 0.775-2.09 2.578-3.7 3.187-3.24 1.227-5.69 0.076-6.41-3.016l-0.42-1.76-0.05 1.932c-0.07 2.598 0.61 3.697 2.72 4.393 2.04 0.673 3.45 0.355 5.58-1.261 1.46-1.097 4.07-4.841 2.86-4.096-0.73 0.45-0.73 0.166 0-1.435 0.32-0.7 0.78-1.155 1.01-1.011s0.28-0.432 0.11-1.282c-0.17-0.849-0.1-1.544 0.14-1.544s0.44-1.253 0.44-2.785-0.2-2.785-0.44-2.785-0.31-0.684-0.14-1.519c0.19-0.939 0.09-1.519-0.24-1.519-0.31 0-0.42-0.342-0.26-0.76 0.16-0.417 0.05-0.759-0.25-0.759s-0.42-0.342-0.26-0.76c0.16-0.417 0.05-0.759-0.25-0.759s-0.41-0.342-0.25-0.76c0.16-0.417 0.04-0.759-0.26-0.759s-0.41-0.342-0.25-0.76c0.16-0.417 0.06-0.759-0.23-0.759-0.28 0-0.38-0.228-0.21-0.507 0.18-0.278 0.06-0.506-0.25-0.506s-0.42-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.26-0.507-0.31 0-0.42-0.228-0.25-0.506s0.06-0.506-0.25-0.506-0.43-0.23-0.25-0.51c0.17-0.281-0.04-0.646-0.48-0.813-0.43-0.166-0.67-0.483-0.54-0.705 0.14-0.221-0.6-1.154-1.65-2.072-1.04-0.919-1.83-1.86-1.76-2.091s-0.21-0.551-0.63-0.712-0.64-0.496-0.48-0.746c0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.229-0.25-0.51c0.17-0.28-0.04-0.646-0.47-0.812-0.44-0.167-0.67-0.507-0.51-0.756 0.15-0.25 0.02-0.454-0.29-0.454s-0.42-0.228-0.25-0.506 0.06-0.506-0.25-0.506-0.43-0.228-0.26-0.507c0.18-0.278 0.06-0.506-0.25-0.506s-0.43-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.26-0.507-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.05-0.506-0.28-0.506-0.32 0-0.46-0.342-0.3-0.76s0.05-0.76-0.25-0.76-0.41-0.341-0.25-0.759 0.05-0.76-0.25-0.76c-0.36 0-0.48-1.47-0.37-4.304 0.1-2.367-0.02-4.304-0.26-4.304-0.25 0-0.33-0.911-0.18-2.025 0.16-1.16 0.06-2.025-0.22-2.025-0.27 0-0.35-0.457-0.17-1.015 0.21-0.674 0.06-1.118-0.47-1.32-0.44-0.166-0.67-0.5072-0.51-0.7565 0.15-0.2493 0.02-0.4533-0.29-0.4533s-0.42-0.2278-0.25-0.5063 0.06-0.5064-0.25-0.5064-0.45-0.193-0.3-0.4289c0.34-0.557-2.45-3.2379-2.9-2.7851-0.19 0.1896-0.35 0.0654-0.35-0.2759 0-0.3414-0.23-0.4798-0.5-0.3077-0.28 0.1721-0.51 0.0582-0.51-0.2532s-0.23-0.4253-0.51-0.2532-0.5 0.0582-0.5-0.2531c0-0.3114-0.23-0.4253-0.51-0.2532s-0.51 0.0563-0.51-0.2574c0-0.34-0.41-0.4405-1.01-0.249-0.56 0.1768-1.01 0.1352-1.01-0.0924 0-0.2277-1.48-0.4139-3.29-0.4139s-3.29 0.1952-3.29 0.4339-0.35 0.3028-0.76 0.1425c-0.42-0.1603-0.76-0.0573-0.76 0.2289s-0.23 0.3795-0.51 0.2074-0.51-0.0582-0.51 0.2532c0 0.3113-0.19 0.4468-0.42 0.301-0.56-0.3443-3.24 2.4459-2.79 2.8988 0.19 0.1895 0.07 0.3446-0.28 0.3446-0.34 0-0.48 0.2279-0.3 0.5064 0.17 0.2785 0.05 0.5063-0.26 0.5063s-0.42 0.2279-0.25 0.5064 0.08 0.5063-0.21 0.5063c-0.28 0-0.39 0.3418-0.23 0.7595 0.16 0.4183 0.1 0.7593-0.14 0.7593s-0.43 3.418-0.43 7.595c0 4.178 0.13 7.596 0.3 7.596s0.34 1.253 0.39 2.785c0.06 1.719-0.12 2.785-0.46 2.785-0.3 0-0.4 0.228-0.23 0.506s0.06 0.506-0.26 0.506c-0.31 0-0.44 0.204-0.28 0.454 0.15 0.249-0.08 0.589-0.51 0.756-0.43 0.166-0.66 0.508-0.51 0.759 0.16 0.251-0.07 0.593-0.5 0.76-0.44 0.166-0.67 0.507-0.51 0.757 0.15 0.25-0.29 0.831-1 1.292-0.7 0.46-1.16 1.018-1.03 1.24 0.14 0.222-0.43 0.907-1.26 1.523-0.83 0.615-1.38 1.335-1.22 1.599 0.17 0.265 0.05 0.481-0.26 0.481-0.32 0-0.43 0.228-0.26 0.506 0.17 0.279 0.06 0.507-0.25 0.507s-0.43 0.228-0.25 0.506c0.17 0.278 0.07 0.506-0.21 0.506-0.29 0-0.39 0.342-0.23 0.76s0.02 0.759-0.3 0.759c-0.37 0-0.47 0.393-0.28 1.013 0.18 0.568 0.09 1.013-0.2 1.013s-0.39 0.342-0.23 0.759c0.16 0.418 0.02 0.76-0.3 0.76-0.33 0-0.45 0.228-0.28 0.506 0.17 0.279 0.08 0.507-0.21 0.507-0.28 0-0.39 0.341-0.23 0.759s0.03 0.76-0.29 0.76c-0.33 0-0.45 0.228-0.28 0.506s0.06 0.506-0.26 0.506c-0.31 0-0.42 0.228-0.25 0.507 0.17 0.278 0.06 0.506-0.25 0.506s-0.44 0.204-0.29 0.453c0.16 0.25-0.07 0.59-0.51 0.756-0.43 0.167-0.64 0.532-0.47 0.813 0.17 0.28 0.06 0.51-0.25 0.51s-0.43 0.228-0.25 0.506c0.17 0.279 0.05 0.507-0.26 0.507-0.34 0-0.44 0.409-0.25 1.012 0.18 0.557 0.09 1.013-0.19 1.013-0.64 0-0.54 2.161 0.12 2.613 0.27 0.184 1.21 0.217 2.1 0.073 1.3-0.211 1.97 0.051 3.46 1.364 1.02 0.893 1.85 1.875 1.85 2.181s-0.87-0.29-1.93-1.325c-1.6-1.562-2.23-1.86-3.74-1.749-1.01 0.074-1.72 0.298-1.6 0.497 0.12 0.2 0.91 0.226 1.76 0.057 1.28-0.258 1.83-0.016 3.39 1.515 1.03 1.001 2.1 1.831 2.38 1.842 0.27 0.011 0.59 0.28 0.69 0.598 0.12 0.355-0.05 0.422-0.45 0.175-0.43-0.266-0.53-0.201-0.29 0.19 0.2 0.327 0.56 0.476 0.79 0.332s1.02 0.747 1.74 1.981c1.46 2.498 1.61 3.054 0.68 2.517-0.37-0.212-0.46-0.172-0.21 0.096 0.23 0.254 0.67 0.461 0.97 0.461s0.65 0.317 0.78 0.704c0.16 0.469 0.02 0.569-0.41 0.301-0.44-0.271-0.53-0.201-0.27 0.216 0.21 0.341 0.51 0.488 0.67 0.327 0.16-0.16 0.86 0.224 1.55 0.853s1.08 0.829 0.86 0.445c-0.28-0.47-0.19-0.625 0.26-0.475 0.37 0.124 1.09-0.189 1.59-0.694 1.01-1.006 1.23-2.436 0.38-2.436-0.29 0-0.41-0.198-0.26-0.439 0.32-0.526-1.43-2.224-1.86-1.797-0.16 0.164-0.68-0.289-1.15-1.007s-1.05-1.187-1.29-1.041c-0.23 0.146-0.8-0.31-1.26-1.012-0.46-0.703-1.01-1.174-1.21-1.047-0.21 0.127-1-0.414-1.75-1.202-1.2-1.254-1.39-1.889-1.49-5.082-0.06-2.007 0.08-3.769 0.32-3.917s0.31-0.587 0.16-0.977c-0.15-0.389-0.03-0.708 0.27-0.708s0.42-0.342 0.26-0.759c-0.17-0.418-0.08-0.76 0.18-0.76s0.34-0.342 0.18-0.76c-0.16-0.417-0.02-0.759 0.3-0.759 0.33 0 0.45-0.228 0.28-0.506-0.17-0.279-0.06-0.507 0.25-0.507s0.43-0.228 0.25-0.506c-0.17-0.279-0.05-0.506 0.26-0.506s0.42-0.228 0.25-0.507c-0.17-0.278-0.06-0.506 0.25-0.506 0.32 0 0.43-0.228 0.26-0.507-0.18-0.278-0.06-0.506 0.25-0.506s0.42-0.229 0.25-0.51c-0.17-0.28 0.04-0.646 0.47-0.812 0.44-0.167 0.67-0.507 0.51-0.756-0.15-0.25-0.06-0.454 0.21-0.454s0.38-0.512 0.24-1.139c-0.21-0.946-0.15-1.011 0.34-0.38 0.48 0.606 0.54 0.375 0.33-1.139-0.15-1.1-0.05-1.899 0.24-1.899 0.28 0 0.37-0.228 0.19-0.506-0.17-0.279-0.05-0.507 0.26-0.507s0.42-0.227 0.25-0.506c-0.17-0.278-0.06-0.506 0.25-0.506 0.32 0 0.43-0.228 0.26-0.506-0.17-0.279-0.06-0.507 0.25-0.507s0.43-0.229 0.25-0.51c-0.17-0.28 0.04-0.646 0.48-0.812 0.43-0.167 0.66-0.507 0.5-0.756-0.15-0.25-0.02-0.454 0.29-0.454s0.43-0.227 0.25-0.506c-0.17-0.279-0.07-0.506 0.23-0.506 0.59 0 0.45-3.696-0.2-5.184-0.21-0.484-0.14-1.566 0.15-2.405 0.3-0.875 0.33-1.526 0.07-1.526s-0.32-0.379-0.15-0.842c0.2-0.504 0.12-0.716-0.18-0.528-0.7 0.432-0.51-5.462 0.21-6.322 1.08-1.307 5.74-0.198 4.9 1.167-0.15 0.247-0.02 0.449 0.29 0.449s0.53 0.399 0.48 0.886c-0.18 1.802 0.06 2.152 1.49 2.152 1.59 0 2.17-0.822 1.73-2.483-0.16-0.633-0.03-1.061 0.32-1.061 0.33 0 0.46-0.224 0.29-0.499-0.4-0.639 2.71-2.551 4.04-2.487 0.85 0.041 0.81 0.119-0.25 0.48-1.22 0.416-1.21 0.428 0.25 0.348 1.73-0.095 2.95 0.479 2.51 1.18-0.16 0.259-0.03 0.472 0.28 0.472s0.42 0.227 0.25 0.506c-0.17 0.278-0.08 0.506 0.21 0.506s0.39 0.342 0.23 0.76c-0.16 0.417-0.04 0.759 0.27 0.759s0.56 0.57 0.56 1.266-0.25 1.266-0.56 1.266-0.43 0.342-0.27 0.759c0.16 0.418 0.06 0.76-0.22 0.76-0.33 0-0.32 0.351 0.03 1.004 0.3 0.552 0.53 1.862 0.52 2.911-0.04 2.879 0.16 4.187 0.64 4.187 0.23 0 0.28 0.228 0.11 0.506s-0.06 0.506 0.25 0.506c0.32 0 0.43 0.228 0.26 0.507-0.17 0.278-0.06 0.506 0.25 0.506s0.44 0.204 0.29 0.453c-0.16 0.25 0.08 0.593 0.53 0.764 0.46 0.177 0.68 0.635 0.52 1.066-0.16 0.415-0.06 0.755 0.23 0.755 0.28 0 0.38 0.228 0.2 0.507-0.17 0.278-0.05 0.506 0.26 0.506 0.34 0 0.44 0.409 0.25 1.012-0.2 0.624-0.09 1.013 0.28 1.013 0.35 0 0.49 0.421 0.33 1.013-0.14 0.557-0.02 1.013 0.28 1.013s0.39 0.15 0.21 0.334 0.12 0.655 0.68 1.047 0.89 0.926 0.73 1.185-0.04 0.472 0.27 0.472c0.32 0 0.43 0.228 0.26 0.506-0.17 0.279-0.06 0.506 0.25 0.506s0.43 0.228 0.25 0.507c-0.17 0.278-0.05 0.506 0.26 0.506s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.507 0.21 0.507 0.28 0 0.37 0.379 0.19 0.842-0.23 0.61-0.13 0.729 0.35 0.431 0.51-0.315 0.59-0.108 0.34 0.888-0.19 0.765-0.1 1.375 0.22 1.482 0.37 0.125 0.4 0.746 0.09 1.941l-0.46 1.758-0.33-2.731c-0.32-2.715-2.19-6.981-3.89-8.915-0.49-0.557-1.04-1.999-1.22-3.203-0.39-2.533-2.78-7.521-4.24-8.844-0.97-0.875-1.06-0.865-2.46 0.286-2.49 2.042-6.25 4.394-7.53 4.715-1.23 0.311-3.35-1.228-3.88-2.821-0.44-1.316-1.86-0.078-3.72 3.248-1.48 2.654-1.79 3.633-1.51 4.884 0.26 1.174 0.1 1.838-0.64 2.662-3.09 3.465-5.7 10.213-5.7 14.751v3.25l3.15 2.689c8.04 6.866 8.68 7.984 5.95 10.474l-1.53 1.4 1.04 0.939c0.8 0.726 0.89 1.042 0.39 1.39-0.43 0.304-0.31 0.361 0.37 0.175 0.56-0.151 1.35-0.055 1.77 0.213 1.14 0.728 8.07 0.56 10.35-0.252zm-22.93-18.487c0-0.696 0.12-0.981 0.26-0.633s0.14 0.918 0 1.266-0.26 0.063-0.26-0.633zm31.33-30.348c-0.72-1.358-0.66-1.552 0.48-1.552 1.01 0 2.26 1.635 1.68 2.212-0.62 0.62-1.64 0.308-2.16-0.66zm1.51-0.003c0-0.262-0.23-0.617-0.51-0.79-0.28-0.172-0.51 0.043-0.51 0.477s0.23 0.789 0.51 0.789 0.51-0.214 0.51-0.476zm-8.11-22.563c0-0.9044 0.28-1.2658 0.96-1.2658 1.35 0 1.75 1.3911 0.58 2.0176-1.38 0.7375-1.54 0.6613-1.54-0.7518zm-16.2 68.942c0-0.096-0.51-0.608-1.14-1.139l-1.14-0.964 0.97 1.139c0.9 1.07 1.31 1.37 1.31 0.964zm-22.18-8.924c-0.33-0.501-1.1 1.311-1.1 2.602-0.02 2.91 0.75 3.23 1 0.421 0.14-1.532 0.19-2.892 0.1-3.023zm17.12 1.504c-0.3-0.557-0.66-1.013-0.8-1.013s-0.01 0.456 0.29 1.013 0.66 1.013 0.8 1.013 0.01-0.456-0.29-1.013zm-12.41-2.026c0.17-0.278 0.09-0.506-0.19-0.506s-0.65 0.228-0.82 0.506c-0.17 0.279-0.09 0.507 0.19 0.507s0.65-0.228 0.82-0.507zm35.71-39.859c0.41-1.193 0.41-1.871 0-2.531-0.5-0.791-0.53-0.762-0.25 0.237 0.21 0.789 0.09 1.139-0.41 1.139-0.39 0-2.14 0.715-3.89 1.588-4.41 2.208-7 2.439-8.9 0.797l-1.48-1.27 0.87-1.827c0.48-1.004 1.61-2.28 2.52-2.834s1.35-1.008 0.98-1.009c-0.38-0.001-1.26 0.454-1.97 1.011s-1.6 1.012-1.98 1.012-0.69 0.285-0.7 0.633c0 0.348-0.14 1.132-0.3 1.742-0.23 0.857 0.23 1.625 2.05 3.392 2.09 2.035 2.64 2.3 4.99 2.436 3.46 0.2 7.62-2.015 8.47-4.516zm-1.83-4.518c0.24-0.621 0.16-0.702-0.32-0.321-0.36 0.281-0.99 0.637-1.41 0.791-0.51 0.192-0.41 0.294 0.33 0.321 0.6 0.022 1.23-0.334 1.4-0.791zm-10.84-1.449c0-0.462 0.32-0.622 0.89-0.441 0.72 0.233 0.75 0.189 0.15-0.236-0.41-0.286-0.87-0.436-1.04-0.333s-0.61-0.311-0.99-0.92c-0.65-1.048-0.64-1.066 0.28-0.347 0.88 0.693 0.91 0.686 0.31-0.078-1.06-1.356-2.4-0.829-2.27 0.888 0.1 1.249 0.05 1.317-0.34 0.456-0.32-0.71-0.47-0.781-0.5-0.239-0.02 0.425 0.32 1.28 0.76 1.9 0.63 0.91 0.97 1.026 1.77 0.602 0.54-0.29 0.98-0.853 0.98-1.252zm7.6 1.014c-0.75-0.894 0.03-1.033 0.9-0.162 0.95 0.951 2.94-0.355 2.87-1.885-0.03-0.68-0.24-1.409-0.48-1.62-0.23-0.211-0.22-0.041 0.01 0.376 0.37 0.653 0.32 0.663-0.42 0.069-0.46-0.379-0.72-0.892-0.57-1.139s0.02-0.449-0.29-0.449c-0.78 0-2.05 1.32-1.66 1.712 0.17 0.172 0.05 0.314-0.28 0.314-0.32 0-0.59 0.455-0.59 1.012 0 0.829-0.34 1.013-1.86 1.013-1.02 0-1.7 0.149-1.52 0.33 0.18 0.182 1.01 0.311 1.84 0.288 0.84-0.024 1.65 0.169 1.81 0.429s0.42 0.472 0.58 0.472 0-0.342-0.34-0.76zm5.37-2.721c-0.34-2.2-1.64-3.608-3.31-3.608-1.81 0-3.59 1.339-3.56 2.687 0.01 1.063 0.06 1.051 1.15-0.282 2.29-2.788 5.26-1.052 4.75 2.774-0.26 2.009-0.23 2.091 0.48 1.15 0.49-0.65 0.66-1.623 0.49-2.721zm-12.2-2.097c-0.04-0.561-0.38-1.302-0.75-1.645-0.54-0.501-0.6-0.489-0.28 0.062 0.29 0.517 0.13 0.606-0.65 0.359-0.56-0.18-1.18-0.091-1.36 0.199-0.17 0.29 0.01 0.527 0.41 0.527s1.01 0.342 1.35 0.759c0.88 1.051 1.37 0.95 1.28-0.261z" transform="translate(10 1098.9)" stroke="#000" stroke-width=".375" fill="none"/>
- <rect id="d0e113" display="none" height="1e3px" width="288" y="1215.6" x="10"/>
+ <text id="tracing-f04-fr.svgtext4626" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1088.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.153664" x="69.581543" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan4627" y="97.153664" x="69.581543" sodipodi:role="line">Image originale</tspan></text>
+ <text id="tracing-f04-fr.svgtext4629" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1088.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="156.37865" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan5892" sodipodi:role="line" y="97.378670" x="156.37865">Quantification (12 coul.)</tspan><tspan id="tracing-f04-fr.svgtspan5894" sodipodi:role="line" y="103.37867" x="156.37865">Rempli, sans contour</tspan></text>
+ <text id="tracing-f04-fr.svgtext4634" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1088.9)" xml:space="preserve" line-height="100.00000%" font-size="6" y="97.37867" x="245.12865" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f04-fr.svgtspan5896" sodipodi:role="line" y="97.378670" x="245.12865">Quantification (12 coul.)</tspan><tspan id="tracing-f04-fr.svgtspan5898" sodipodi:role="line" y="103.37867" x="245.12865">Contour, non rempli</tspan></text>
+ <image id="tracing-f04-fr.svgimage4639" sodipodi:absref="/tux.png" xlink:href="tux.png" transform="translate(10 1088.9)" height="91.143" width="76.965" y="-.000097656" x="31.099"/>
+ <path id="tracing-f04-fr.svgpath5261" d="m138.36 88.785c-1.07-0.444-1.75-1.018-1.57-1.318 0.19-0.298 0.09-0.383-0.22-0.193-0.3 0.187-3.07-0.348-6.16-1.187-3.09-0.84-5.78-1.541-5.99-1.559-0.2-0.018 0.13-0.231 0.73-0.474 1.22-0.493 6.35 0.11 10.85 1.278 4.27 1.106 5.77 0.967 7.64-0.707 1.4-1.253 1.64-1.817 1.71-4.064 0.05-1.435-0.11-2.731-0.35-2.88-0.24-0.148-0.44 0.752-0.44 2 0 3.33-1.84 5.385-4.82 5.385-1.21 0-2.83-0.239-3.6-0.532s-4.03-0.982-7.24-1.531c-6.88-1.176-7.55-1.616-6.71-4.429 0.74-2.453 0.78-4.821 0.08-4.389-0.28 0.175-0.4 0.504-0.26 0.731 0.27 0.429-0.44 3.028-1.34 4.894-0.81 1.698-0.3 2.834 1.61 3.57 1.61 0.619 1.63 0.655 0.26 0.384-2.93-0.576-3.39-1.811-2.04-5.533 0.51-1.439 0.64-3.143 0.43-5.883-0.27-3.484-0.2-3.961 0.78-4.937 0.76-0.759 1.72-1.082 3.23-1.087 2.41-0.009 2.87-0.23 4.06-1.97 0.62-0.92 0.7-1.459 0.3-2.205-0.76-1.426-0.09-4.225 1.86-7.717 0.93-1.671 2.26-4.797 2.96-6.946 1.58-4.862 1.98-5.607 4.64-8.751 1.17-1.392 2.83-3.637 3.69-4.987l1.54-2.456-0.3-9.799c-0.34-11.096 0.02-12.896 3.25-16.478 2.41-2.6629 5.35-3.6959 9.64-3.3863 5.48 0.3948 9.5 2.8938 12.15 7.5492 1.39 2.4461 1.65 3.8181 2.1 11.044 0.37 5.991 0.44 6.24 2.8 10.902 1.33 2.625 3.54 6.057 4.91 7.627 2.86 3.269 4.15 5.594 5.85 10.589 1.45 4.266 1.94 9.256 1.25 12.687-0.4 2-0.35 2.768 0.22 3.654 0.4 0.617 0.73 1.707 0.73 2.423 0 1.806 1.28 3.588 3.87 5.369 3.67 2.527 3.07 4.2-2.66 7.392-2.33 1.299-5.27 3.359-6.52 4.579-1.26 1.219-2.5 2.085-2.76 1.924s-0.63-0.026-0.84 0.3c-0.23 0.37-0.14 0.457 0.22 0.232 0.32-0.199 0.59-0.24 0.59-0.092 0 0.624-3.12 1.816-4.76 1.816-2.14 0-4.52-0.842-4.14-1.461 0.15-0.248-0.12-0.419-0.6-0.381-0.52 0.04-0.89-0.286-0.89-0.781 0-0.468-0.21-1.037-0.46-1.266-0.26-0.241-0.29-0.128-0.06 0.268 0.32 0.549 0.19 0.574-0.65 0.127-0.63-0.341-4.31-0.557-9.48-0.557h-8.44l-1.9 1.504c-3.36 2.662-5.46 3.072-8.75 1.708zm4.05-0.017c-0.49-0.127-1.29-0.127-1.77 0-0.49 0.128-0.09 0.232 0.88 0.232 0.98 0 1.38-0.104 0.89-0.232zm32.15-0.008c-0.62-0.121-1.65-0.121-2.28 0-0.62 0.12-0.11 0.219 1.14 0.219 1.26 0 1.77-0.099 1.14-0.219zm-26.77-2.829c0.16 0.161 0.44-0.081 0.61-0.539 0.28-0.728 1.42-0.832 9.13-0.832 4.84 0 8.8 0.204 8.8 0.453s0.52 0.42 1.14 0.38c1.11-0.071 1.14-0.249 1.2-5.517 0.03-2.994-0.11-5.443-0.32-5.443-0.2 0-0.65 0.339-1 0.754-0.34 0.415-0.8 0.645-1.02 0.511-0.21-0.134-0.77 0.331-1.23 1.034s-1.05 1.143-1.32 0.979c-0.27-0.165-0.48-0.045-0.48 0.267 0 0.311-0.21 0.44-0.46 0.285-0.25-0.154-0.59 0.075-0.75 0.509-0.17 0.434-0.54 0.647-0.82 0.474-0.28-0.174-0.51-0.05-0.51 0.275s-0.34 0.459-0.76 0.299c-0.41-0.16-0.76-0.056-0.76 0.233 0 0.294-0.44 0.383-1.01 0.203-0.55-0.177-1.01-0.135-1.01 0.092 0 0.228-1.82 0.414-4.05 0.414s-4.05-0.163-4.05-0.364c0-0.2-0.38-0.218-0.84-0.04-0.61 0.232-0.73 0.138-0.44-0.335 0.27-0.442 0.18-0.58-0.3-0.419-0.4 0.137-0.71 0.966-0.73 1.964-0.06 2.93-0.18 3.32-1.51 4.646-0.91 0.907-1.09 1.362-0.63 1.541 0.36 0.14 1.14-0.279 1.74-0.932 0.6-0.652 1.22-1.054 1.38-0.892zm-2.22 0.908c0.35-0.418 0.75-0.76 0.89-0.76s-0.03 0.342-0.38 0.76c-0.35 0.417-0.74 0.759-0.88 0.759s0.03-0.342 0.37-0.759zm32.33-1.276c1.22-0.549 2.38-0.894 2.59-0.766 0.2 0.128 1.02-0.442 1.81-1.268 1.8-1.881 1.46-1.879-2.29 0.018-3.42 1.722-6.55 1.994-7.86 0.681-1.4-1.399-1.77-3.065-1.77-8.026 0-2.641-0.22-4.887-0.51-5.062-0.76-0.472-1.21 1.173-0.54 1.98 0.36 0.435 0.55 2.432 0.48 5.273-0.08 3.597 0.09 4.856 0.77 5.903 1.58 2.406 3.92 2.812 7.32 1.267zm-18.94-6.314c1.09-0.391 2.21-0.573 2.48-0.406s0.34 0.057 0.15-0.245c-0.34-0.554 1.52-1.45 2.47-1.185 0.27 0.078 0.33-0.027 0.13-0.234-0.33-0.322 1.41-1.937 2.14-2.001 0.62-0.053 2.54-1.54 2.54-1.968 0-0.26-0.62 0.08-1.38 0.755s-1.05 0.805-0.66 0.289c0.4-0.516 0.9-2.112 1.12-3.545 1.01-6.849 1.12-7.11 3.19-7.494 1.13-0.21 1.62-1.824 1.72-5.648 0.03-1.481 0.25-2.313 0.56-2.122 0.63 0.386 0.68 4.81 0.06 4.81-0.25 0-0.34 1.538-0.21 3.418 0.21 2.857 0.46 3.613 1.55 4.608 1.1 0.998 1.64 1.137 3.37 0.86 1.2-0.191 2.65-0.891 3.46-1.665 0.77-0.734 1.39-1.103 1.39-0.821 0 0.775-2.09 2.578-3.7 3.187-3.24 1.227-5.69 0.075-6.41-3.016l-0.42-1.76-0.05 1.932c-0.07 2.597 0.61 3.697 2.72 4.393 2.04 0.673 3.45 0.355 5.58-1.262 1.46-1.096 4.07-4.841 2.86-4.096-0.73 0.45-0.73 0.167 0-1.434 0.32-0.701 0.78-1.156 1.01-1.011 0.23 0.144 0.28-0.433 0.11-1.282-0.17-0.85-0.1-1.544 0.14-1.544s0.44-1.254 0.44-2.785c0-1.532-0.2-2.785-0.44-2.785s-0.31-0.684-0.14-1.519c0.19-0.939 0.09-1.519-0.24-1.519-0.31 0-0.42-0.342-0.26-0.76s0.05-0.759-0.25-0.759-0.42-0.342-0.26-0.76 0.05-0.759-0.25-0.759-0.41-0.342-0.25-0.76 0.04-0.76-0.26-0.76-0.41-0.341-0.25-0.759 0.06-0.76-0.23-0.76c-0.28 0-0.38-0.227-0.21-0.506 0.18-0.278 0.06-0.506-0.25-0.506s-0.42-0.228-0.25-0.507c0.17-0.278 0.06-0.506-0.26-0.506-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.06-0.507-0.25-0.507s-0.43-0.229-0.25-0.51c0.17-0.28-0.04-0.646-0.48-0.812-0.43-0.167-0.67-0.484-0.54-0.705 0.14-0.221-0.6-1.154-1.65-2.073-1.04-0.919-1.83-1.859-1.76-2.09s-0.21-0.552-0.63-0.713c-0.42-0.16-0.64-0.496-0.48-0.745 0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.23-0.25-0.51c0.17-0.281-0.04-0.646-0.47-0.813-0.44-0.166-0.67-0.507-0.51-0.756 0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.25-0.507s-0.43-0.228-0.26-0.506c0.18-0.279 0.06-0.507-0.25-0.507s-0.43-0.227-0.25-0.506c0.17-0.278 0.06-0.506-0.26-0.506-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.05-0.507-0.28-0.507-0.32 0-0.46-0.342-0.3-0.759 0.16-0.418 0.05-0.76-0.25-0.76s-0.41-0.342-0.25-0.759c0.16-0.418 0.05-0.76-0.25-0.76-0.36 0-0.48-1.47-0.37-4.304 0.1-2.367-0.02-4.304-0.26-4.304-0.25 0-0.33-0.911-0.18-2.025 0.16-1.161 0.06-2.026-0.22-2.026-0.27 0-0.35-0.457-0.17-1.015 0.21-0.674 0.06-1.117-0.47-1.319-0.44-0.167-0.67-0.5076-0.51-0.7569 0.15-0.2493 0.02-0.4533-0.29-0.4533s-0.42-0.2278-0.25-0.5063 0.06-0.5064-0.25-0.5064-0.45-0.193-0.3-0.4289c0.34-0.557-2.45-3.2379-2.9-2.7851-0.19 0.1896-0.35 0.0654-0.35-0.2759 0-0.3414-0.23-0.4798-0.5-0.3077-0.28 0.1721-0.51 0.0582-0.51-0.2532s-0.23-0.4253-0.51-0.2532-0.5 0.0582-0.5-0.2531c0-0.3114-0.23-0.4253-0.51-0.2532s-0.51 0.0563-0.51-0.2574c0-0.34-0.41-0.4405-1.01-0.249-0.56 0.1768-1.01 0.1352-1.01-0.0924 0-0.2277-1.48-0.4139-3.29-0.4139s-3.29 0.1952-3.29 0.4339-0.35 0.3028-0.76 0.1425c-0.42-0.1603-0.76-0.0573-0.76 0.2289s-0.23 0.3795-0.51 0.2074-0.51-0.0582-0.51 0.2532c0 0.3113-0.19 0.4468-0.42 0.301-0.56-0.3443-3.24 2.4459-2.79 2.8988 0.19 0.1895 0.07 0.3446-0.28 0.3446-0.34 0-0.48 0.2279-0.3 0.5064 0.17 0.2785 0.05 0.5063-0.26 0.5063s-0.42 0.2279-0.25 0.5064 0.08 0.5063-0.21 0.5063c-0.28 0-0.39 0.3418-0.23 0.7595s0.1 0.7597-0.14 0.7597-0.43 3.418-0.43 7.595c0 4.178 0.13 7.595 0.3 7.595s0.34 1.254 0.39 2.785c0.06 1.72-0.12 2.785-0.46 2.785-0.3 0-0.4 0.228-0.23 0.507 0.17 0.278 0.06 0.506-0.26 0.506-0.31 0-0.44 0.204-0.28 0.453 0.15 0.249-0.08 0.59-0.51 0.756-0.43 0.167-0.66 0.508-0.51 0.76 0.16 0.251-0.07 0.593-0.5 0.759-0.44 0.167-0.67 0.507-0.51 0.757 0.15 0.25-0.29 0.832-1 1.292-0.7 0.461-1.16 1.019-1.03 1.241 0.14 0.222-0.43 0.907-1.26 1.522-0.83 0.616-1.38 1.335-1.22 1.6 0.17 0.264 0.05 0.481-0.26 0.481-0.32 0-0.43 0.227-0.26 0.506 0.17 0.278 0.06 0.506-0.25 0.506s-0.43 0.228-0.25 0.507c0.17 0.278 0.07 0.506-0.21 0.506-0.29 0-0.39 0.342-0.23 0.76 0.16 0.417 0.02 0.759-0.3 0.759-0.37 0-0.47 0.393-0.28 1.013 0.18 0.568 0.09 1.012-0.2 1.012s-0.39 0.342-0.23 0.76 0.02 0.76-0.3 0.76c-0.33 0-0.45 0.227-0.28 0.506 0.17 0.278 0.08 0.506-0.21 0.506-0.28 0-0.39 0.342-0.23 0.76s0.03 0.759-0.29 0.759c-0.33 0-0.45 0.228-0.28 0.507 0.17 0.278 0.06 0.506-0.26 0.506-0.31 0-0.42 0.228-0.25 0.506 0.17 0.279 0.06 0.507-0.25 0.507s-0.44 0.204-0.29 0.453c0.16 0.249-0.07 0.589-0.51 0.756-0.43 0.166-0.64 0.532-0.47 0.812 0.17 0.281 0.06 0.51-0.25 0.51s-0.43 0.228-0.25 0.507c0.17 0.278 0.05 0.506-0.26 0.506-0.34 0-0.44 0.409-0.25 1.013 0.18 0.557 0.09 1.012-0.19 1.012-0.64 0-0.54 2.161 0.12 2.614 0.27 0.184 1.21 0.216 2.1 0.073 1.3-0.212 1.97 0.05 3.46 1.363 1.02 0.894 1.85 1.876 1.85 2.182s-0.87-0.29-1.93-1.326c-1.6-1.562-2.23-1.859-3.74-1.748-1.01 0.074-1.72 0.297-1.6 0.497s0.91 0.225 1.76 0.057c1.28-0.258 1.83-0.016 3.39 1.514 1.03 1.002 2.1 1.831 2.38 1.843 0.27 0.011 0.59 0.28 0.69 0.597 0.12 0.356-0.05 0.423-0.45 0.175-0.43-0.265-0.53-0.201-0.29 0.191 0.2 0.326 0.56 0.475 0.79 0.331 0.23-0.143 1.02 0.748 1.74 1.981 1.46 2.499 1.61 3.054 0.68 2.517-0.37-0.211-0.46-0.171-0.21 0.097 0.23 0.253 0.67 0.461 0.97 0.461s0.65 0.316 0.78 0.703c0.16 0.469 0.02 0.57-0.41 0.302-0.44-0.272-0.53-0.201-0.27 0.216 0.21 0.34 0.51 0.487 0.67 0.327s0.86 0.223 1.55 0.852 1.08 0.83 0.86 0.446c-0.28-0.47-0.19-0.626 0.26-0.475 0.37 0.123 1.09-0.189 1.59-0.694 1.01-1.006 1.23-2.437 0.38-2.437-0.29 0-0.41-0.197-0.26-0.438 0.32-0.527-1.43-2.225-1.86-1.797-0.16 0.164-0.68-0.29-1.15-1.008s-1.05-1.186-1.29-1.04c-0.23 0.146-0.8-0.31-1.26-1.013s-1.01-1.174-1.21-1.047c-0.21 0.127-1-0.414-1.75-1.202-1.2-1.253-1.39-1.888-1.49-5.081-0.06-2.007 0.08-3.77 0.32-3.917 0.24-0.148 0.31-0.588 0.16-0.977-0.15-0.39-0.03-0.708 0.27-0.708s0.42-0.342 0.26-0.76c-0.17-0.418-0.08-0.759 0.18-0.759s0.34-0.342 0.18-0.76-0.02-0.759 0.3-0.759c0.33 0 0.45-0.228 0.28-0.507-0.17-0.278-0.06-0.506 0.25-0.506s0.43-0.228 0.25-0.506c-0.17-0.279-0.05-0.507 0.26-0.507s0.42-0.228 0.25-0.506c-0.17-0.279-0.06-0.507 0.25-0.507 0.32 0 0.43-0.227 0.26-0.506-0.18-0.278-0.06-0.506 0.25-0.506s0.42-0.23 0.25-0.51c-0.17-0.281 0.04-0.646 0.47-0.813 0.44-0.166 0.67-0.506 0.51-0.756-0.15-0.249-0.06-0.453 0.21-0.453s0.38-0.513 0.24-1.139c-0.21-0.947-0.15-1.011 0.34-0.38 0.48 0.605 0.54 0.375 0.33-1.139-0.15-1.1-0.05-1.899 0.24-1.899 0.28 0 0.37-0.228 0.19-0.507-0.17-0.278-0.05-0.506 0.26-0.506s0.42-0.228 0.25-0.506c-0.17-0.279-0.06-0.507 0.25-0.507 0.32 0 0.43-0.227 0.26-0.506-0.17-0.278-0.06-0.506 0.25-0.506s0.43-0.23 0.25-0.51c-0.17-0.281 0.04-0.646 0.48-0.813 0.43-0.166 0.66-0.506 0.5-0.756-0.15-0.249-0.02-0.453 0.29-0.453s0.43-0.228 0.25-0.506c-0.17-0.279-0.07-0.507 0.23-0.507 0.59 0 0.45-3.696-0.2-5.184-0.21-0.483-0.14-1.566 0.15-2.405 0.3-0.875 0.33-1.525 0.07-1.525s-0.32-0.379-0.15-0.843c0.2-0.503 0.12-0.715-0.18-0.527-0.7 0.432-0.51-5.463 0.21-6.322 1.08-1.307 5.74-0.198 4.9 1.167-0.15 0.247-0.02 0.449 0.29 0.449s0.53 0.398 0.48 0.886c-0.18 1.802 0.06 2.152 1.49 2.152 1.59 0 2.17-0.823 1.73-2.483-0.16-0.633-0.03-1.062 0.32-1.062 0.33 0 0.46-0.224 0.29-0.498-0.4-0.639 2.71-2.551 4.04-2.487 0.85 0.04 0.81 0.119-0.25 0.48-1.22 0.416-1.21 0.428 0.25 0.348 1.73-0.095 2.95 0.478 2.51 1.18-0.16 0.259-0.03 0.471 0.28 0.471s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.507 0.21 0.507s0.39 0.342 0.23 0.759c-0.16 0.418-0.04 0.76 0.27 0.76s0.56 0.569 0.56 1.266c0 0.696-0.25 1.266-0.56 1.266s-0.43 0.341-0.27 0.759 0.06 0.76-0.22 0.76c-0.33 0-0.32 0.351 0.03 1.003 0.3 0.552 0.53 1.862 0.52 2.912-0.04 2.879 0.16 4.186 0.64 4.186 0.23 0 0.28 0.228 0.11 0.507-0.17 0.278-0.06 0.506 0.25 0.506 0.32 0 0.43 0.228 0.26 0.506-0.17 0.279-0.06 0.507 0.25 0.507s0.44 0.204 0.29 0.453c-0.16 0.249 0.08 0.593 0.53 0.764 0.46 0.177 0.68 0.635 0.52 1.066-0.16 0.415-0.06 0.755 0.23 0.755 0.28 0 0.38 0.228 0.2 0.506-0.17 0.279-0.05 0.506 0.26 0.506 0.34 0 0.44 0.41 0.25 1.013-0.2 0.624-0.09 1.013 0.28 1.013 0.35 0 0.49 0.421 0.33 1.013-0.14 0.556-0.02 1.012 0.28 1.012s0.39 0.151 0.21 0.335c-0.18 0.183 0.12 0.655 0.68 1.047s0.89 0.925 0.73 1.185c-0.16 0.259-0.04 0.471 0.27 0.471 0.32 0 0.43 0.228 0.26 0.507-0.17 0.278-0.06 0.506 0.25 0.506s0.43 0.228 0.25 0.506c-0.17 0.279-0.05 0.507 0.26 0.507s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.506 0.21 0.506 0.28 0 0.37 0.38 0.19 0.843-0.23 0.61-0.13 0.729 0.35 0.431 0.51-0.316 0.59-0.109 0.34 0.888-0.19 0.765-0.1 1.374 0.22 1.482 0.37 0.125 0.4 0.745 0.09 1.941l-0.46 1.757-0.33-2.73c-0.32-2.716-2.19-6.982-3.89-8.916-0.49-0.556-1.04-1.998-1.22-3.203-0.39-2.533-2.78-7.52-4.24-8.843-0.97-0.876-1.06-0.866-2.46 0.286-2.49 2.042-6.25 4.394-7.53 4.715-1.23 0.31-3.35-1.229-3.88-2.822-0.44-1.315-1.86-0.077-3.72 3.248-1.48 2.654-1.79 3.633-1.51 4.884 0.26 1.175 0.1 1.839-0.64 2.663-3.09 3.464-5.7 10.213-5.7 14.751v3.25l3.15 2.688c8.04 6.866 8.68 7.985 5.95 10.475l-1.53 1.399 1.04 0.94c0.8 0.726 0.89 1.042 0.39 1.39-0.43 0.304-0.31 0.361 0.37 0.175 0.56-0.151 1.35-0.056 1.77 0.212 1.14 0.729 8.07 0.56 10.35-0.251zm-22.93-18.487c0-0.697 0.12-0.982 0.26-0.633 0.14 0.348 0.14 0.917 0 1.265-0.14 0.349-0.26 0.064-0.26-0.632zm31.33-30.348c-0.72-1.358-0.66-1.552 0.48-1.552 1.01 0 2.26 1.634 1.68 2.212-0.62 0.62-1.64 0.308-2.16-0.66zm1.51-0.004c0-0.262-0.23-0.617-0.51-0.789s-0.51 0.042-0.51 0.477c0 0.434 0.23 0.789 0.51 0.789s0.51-0.215 0.51-0.477zm-8.11-22.562c0-0.9044 0.28-1.2658 0.96-1.2658 1.35 0 1.75 1.3911 0.58 2.0176-1.38 0.7375-1.54 0.6613-1.54-0.7518zm-16.2 68.942c0-0.096-0.51-0.609-1.14-1.139l-1.14-0.965 0.97 1.14c0.9 1.07 1.31 1.369 1.31 0.964zm-22.18-8.925c-0.33-0.501-1.1 1.312-1.1 2.602-0.02 2.91 0.75 3.231 1 0.422 0.14-1.532 0.19-2.893 0.1-3.024zm17.12 1.505c-0.3-0.558-0.66-1.013-0.8-1.013s-0.01 0.455 0.29 1.013c0.3 0.556 0.66 1.012 0.8 1.012s0.01-0.456-0.29-1.012zm-12.41-2.026c0.17-0.278 0.09-0.506-0.19-0.506s-0.65 0.228-0.82 0.506c-0.17 0.279-0.09 0.506 0.19 0.506s0.65-0.227 0.82-0.506zm35.71-39.859c0.41-1.193 0.41-1.872 0-2.532-0.5-0.79-0.53-0.761-0.25 0.237 0.21 0.79 0.09 1.14-0.41 1.14-0.39 0-2.14 0.714-3.89 1.588-4.41 2.207-7 2.438-8.9 0.797l-1.48-1.27 0.87-1.827c0.48-1.005 1.61-2.28 2.52-2.834s1.35-1.008 0.98-1.01c-0.38-0.001-1.26 0.454-1.97 1.011s-1.6 1.013-1.98 1.013-0.69 0.285-0.7 0.633c0 0.348-0.14 1.132-0.3 1.741-0.23 0.858 0.23 1.626 2.05 3.392 2.09 2.035 2.64 2.301 4.99 2.436 3.46 0.2 7.62-2.015 8.47-4.515zm-1.83-4.518c0.24-0.622 0.16-0.703-0.32-0.321-0.36 0.28-0.99 0.636-1.41 0.791-0.51 0.192-0.41 0.294 0.33 0.321 0.6 0.022 1.23-0.334 1.4-0.791zm-10.84-1.449c0-0.463 0.32-0.623 0.89-0.441 0.72 0.232 0.75 0.189 0.15-0.236-0.41-0.286-0.87-0.437-1.04-0.334s-0.61-0.311-0.99-0.919c-0.65-1.049-0.64-1.067 0.28-0.347 0.88 0.693 0.91 0.686 0.31-0.079-1.06-1.355-2.4-0.828-2.27 0.888 0.1 1.25 0.05 1.318-0.34 0.457-0.32-0.711-0.47-0.782-0.5-0.24-0.02 0.426 0.32 1.281 0.76 1.901 0.63 0.91 0.97 1.026 1.77 0.601 0.54-0.289 0.98-0.852 0.98-1.251zm7.6 1.014c-0.75-0.894 0.03-1.033 0.9-0.162 0.95 0.95 2.94-0.356 2.87-1.886-0.03-0.68-0.24-1.408-0.48-1.619-0.23-0.211-0.22-0.042 0.01 0.376 0.37 0.653 0.32 0.663-0.42 0.069-0.46-0.38-0.72-0.892-0.57-1.139s0.02-0.449-0.29-0.449c-0.78 0-2.05 1.319-1.66 1.712 0.17 0.172 0.05 0.313-0.28 0.313-0.32 0-0.59 0.456-0.59 1.013 0 0.828-0.34 1.013-1.86 1.013-1.02 0-1.7 0.148-1.52 0.33s1.01 0.311 1.84 0.287c0.84-0.023 1.65 0.17 1.81 0.429 0.16 0.26 0.42 0.473 0.58 0.473s0-0.342-0.34-0.76zm5.37-2.721c-0.34-2.201-1.64-3.608-3.31-3.608-1.81 0-3.59 1.338-3.56 2.687 0.01 1.062 0.06 1.05 1.15-0.282 2.29-2.789 5.26-1.053 4.75 2.773-0.26 2.009-0.23 2.092 0.48 1.151 0.49-0.651 0.66-1.623 0.49-2.721zm-12.2-2.097c-0.04-0.562-0.38-1.302-0.75-1.646-0.54-0.5-0.6-0.488-0.28 0.062 0.29 0.517 0.13 0.606-0.65 0.36-0.56-0.181-1.18-0.091-1.36 0.198-0.17 0.29 0.01 0.527 0.41 0.527s1.01 0.342 1.35 0.76c0.88 1.05 1.37 0.949 1.28-0.261z" transform="translate(10 1088.9)"/>
+ <path id="tracing-f04-fr.svgpath5262" d="m227.11 88.785c-1.07-0.443-1.75-1.018-1.57-1.318 0.19-0.298 0.09-0.382-0.22-0.192-0.3 0.186-3.07-0.348-6.16-1.188s-5.78-1.541-5.99-1.559c-0.2-0.017 0.13-0.231 0.73-0.474 1.22-0.493 6.35 0.111 10.85 1.278 4.27 1.106 5.77 0.968 7.64-0.707 1.4-1.252 1.64-1.817 1.71-4.064 0.05-1.435-0.11-2.731-0.35-2.879-0.24-0.149-0.44 0.751-0.44 1.999 0 3.33-1.84 5.386-4.82 5.386-1.21 0-2.83-0.24-3.6-0.532-0.77-0.293-4.03-0.982-7.24-1.531-6.88-1.176-7.55-1.617-6.71-4.43 0.74-2.453 0.78-4.82 0.08-4.389-0.28 0.175-0.4 0.504-0.26 0.732 0.27 0.428-0.44 3.028-1.34 4.893-0.81 1.698-0.3 2.834 1.61 3.571 1.61 0.618 1.63 0.654 0.26 0.384-2.93-0.577-3.39-1.811-2.04-5.534 0.51-1.439 0.64-3.142 0.43-5.882-0.27-3.484-0.2-3.962 0.78-4.937 0.76-0.76 1.72-1.082 3.23-1.088 2.41-0.009 2.87-0.229 4.06-1.969 0.62-0.92 0.7-1.459 0.3-2.206-0.76-1.426-0.09-4.224 1.86-7.716 0.93-1.671 2.26-4.797 2.96-6.947 1.58-4.862 1.98-5.607 4.64-8.75 1.17-1.393 2.83-3.637 3.69-4.988l1.54-2.455-0.3-9.799c-0.34-11.096 0.02-12.897 3.25-16.479 2.41-2.6625 5.35-3.6955 9.64-3.3859 5.48 0.3948 9.5 2.8938 12.15 7.5492 1.39 2.4457 1.65 3.8187 2.1 11.044 0.37 5.991 0.44 6.24 2.8 10.903 1.33 2.624 3.54 6.056 4.91 7.626 2.86 3.269 4.15 5.595 5.85 10.589 1.45 4.266 1.94 9.256 1.25 12.688-0.4 1.999-0.35 2.768 0.22 3.653 0.4 0.617 0.73 1.707 0.73 2.423 0 1.806 1.28 3.589 3.87 5.37 3.67 2.526 3.07 4.2-2.66 7.391-2.33 1.299-5.27 3.359-6.52 4.579-1.26 1.22-2.5 2.086-2.76 1.924-0.26-0.161-0.63-0.026-0.84 0.3-0.23 0.371-0.14 0.458 0.22 0.232 0.32-0.199 0.59-0.24 0.59-0.091 0 0.623-3.12 1.815-4.76 1.815-2.14 0-4.52-0.842-4.14-1.461 0.15-0.248-0.12-0.419-0.6-0.381-0.52 0.041-0.89-0.286-0.89-0.781 0-0.467-0.21-1.037-0.46-1.265-0.26-0.241-0.29-0.128-0.06 0.267 0.32 0.549 0.19 0.574-0.65 0.127-0.63-0.341-4.31-0.557-9.48-0.557h-8.44l-1.9 1.504c-3.36 2.662-5.46 3.073-8.75 1.708zm4.05-0.016c-0.49-0.128-1.29-0.128-1.77 0-0.49 0.127-0.09 0.231 0.88 0.231 0.98 0 1.38-0.104 0.89-0.231zm32.15-0.009c-0.62-0.12-1.65-0.12-2.28 0-0.62 0.121-0.11 0.22 1.14 0.22 1.26 0 1.77-0.099 1.14-0.22zm-26.77-2.829c0.16 0.161 0.44-0.081 0.61-0.539 0.28-0.727 1.42-0.832 9.13-0.832 4.84 0 8.8 0.204 8.8 0.453s0.52 0.42 1.14 0.38c1.11-0.071 1.14-0.249 1.2-5.516 0.03-2.994-0.11-5.444-0.32-5.444-0.2 0-0.65 0.34-1 0.754-0.34 0.415-0.8 0.645-1.02 0.511-0.21-0.134-0.77 0.332-1.23 1.034-0.46 0.703-1.05 1.144-1.32 0.979s-0.48-0.045-0.48 0.267c0 0.311-0.21 0.44-0.46 0.286s-0.59 0.075-0.75 0.508c-0.17 0.434-0.54 0.647-0.82 0.474s-0.51-0.05-0.51 0.275-0.34 0.459-0.76 0.299c-0.41-0.16-0.76-0.055-0.76 0.233 0 0.295-0.44 0.384-1.01 0.203-0.55-0.176-1.01-0.135-1.01 0.093s-1.82 0.414-4.05 0.414-4.05-0.164-4.05-0.364-0.38-0.218-0.84-0.041c-0.61 0.233-0.73 0.138-0.44-0.334 0.27-0.443 0.18-0.58-0.3-0.42-0.4 0.138-0.71 0.967-0.73 1.964-0.06 2.931-0.18 3.321-1.51 4.647-0.91 0.906-1.09 1.361-0.63 1.54 0.36 0.14 1.14-0.279 1.74-0.931s1.22-1.054 1.38-0.893zm-2.22 0.908c0.35-0.418 0.75-0.759 0.89-0.759s-0.03 0.341-0.38 0.759-0.74 0.759-0.88 0.759 0.03-0.341 0.37-0.759zm32.33-1.275c1.22-0.55 2.38-0.895 2.59-0.767 0.2 0.129 1.02-0.442 1.81-1.267 1.8-1.882 1.46-1.879-2.29 0.018-3.42 1.722-6.55 1.993-7.86 0.681-1.4-1.4-1.77-3.066-1.77-8.026 0-2.641-0.22-4.888-0.51-5.063-0.76-0.471-1.21 1.173-0.54 1.981 0.36 0.435 0.55 2.432 0.48 5.272-0.08 3.597 0.09 4.857 0.77 5.904 1.58 2.406 3.92 2.811 7.32 1.267zm-18.94-6.315c1.09-0.39 2.21-0.573 2.48-0.406s0.34 0.057 0.15-0.244c-0.34-0.554 1.52-1.451 2.47-1.186 0.27 0.079 0.33-0.027 0.13-0.234-0.33-0.322 1.41-1.937 2.14-2 0.62-0.054 2.54-1.541 2.54-1.968 0-0.26-0.62 0.079-1.38 0.754-0.76 0.676-1.05 0.805-0.66 0.289 0.4-0.516 0.9-2.111 1.12-3.544 1.01-6.85 1.12-7.111 3.19-7.495 1.13-0.21 1.62-1.824 1.72-5.648 0.03-1.481 0.25-2.312 0.56-2.122 0.63 0.387 0.68 4.811 0.06 4.811-0.25 0-0.34 1.538-0.21 3.418 0.21 2.857 0.46 3.612 1.55 4.607 1.1 0.999 1.64 1.137 3.37 0.86 1.2-0.191 2.65-0.89 3.46-1.664 0.77-0.734 1.39-1.104 1.39-0.822 0 0.775-2.09 2.578-3.7 3.187-3.24 1.227-5.69 0.076-6.41-3.016l-0.42-1.76-0.05 1.932c-0.07 2.598 0.61 3.697 2.72 4.393 2.04 0.673 3.45 0.355 5.58-1.261 1.46-1.097 4.07-4.841 2.86-4.096-0.73 0.45-0.73 0.166 0-1.435 0.32-0.7 0.78-1.155 1.01-1.011s0.28-0.432 0.11-1.282c-0.17-0.849-0.1-1.544 0.14-1.544s0.44-1.253 0.44-2.785-0.2-2.785-0.44-2.785-0.31-0.684-0.14-1.519c0.19-0.939 0.09-1.519-0.24-1.519-0.31 0-0.42-0.342-0.26-0.76 0.16-0.417 0.05-0.759-0.25-0.759s-0.42-0.342-0.26-0.76c0.16-0.417 0.05-0.759-0.25-0.759s-0.41-0.342-0.25-0.76c0.16-0.417 0.04-0.759-0.26-0.759s-0.41-0.342-0.25-0.76c0.16-0.417 0.06-0.759-0.23-0.759-0.28 0-0.38-0.228-0.21-0.507 0.18-0.278 0.06-0.506-0.25-0.506s-0.42-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.26-0.507-0.31 0-0.42-0.228-0.25-0.506s0.06-0.506-0.25-0.506-0.43-0.23-0.25-0.51c0.17-0.281-0.04-0.646-0.48-0.813-0.43-0.166-0.67-0.483-0.54-0.705 0.14-0.221-0.6-1.154-1.65-2.072-1.04-0.919-1.83-1.86-1.76-2.091s-0.21-0.551-0.63-0.712-0.64-0.496-0.48-0.746c0.15-0.249 0.02-0.453-0.29-0.453s-0.42-0.229-0.25-0.51c0.17-0.28-0.04-0.646-0.47-0.812-0.44-0.167-0.67-0.507-0.51-0.756 0.15-0.25 0.02-0.454-0.29-0.454s-0.42-0.228-0.25-0.506 0.06-0.506-0.25-0.506-0.43-0.228-0.26-0.507c0.18-0.278 0.06-0.506-0.25-0.506s-0.43-0.228-0.25-0.506c0.17-0.279 0.06-0.507-0.26-0.507-0.31 0-0.42-0.228-0.25-0.506 0.17-0.279 0.05-0.506-0.28-0.506-0.32 0-0.46-0.342-0.3-0.76s0.05-0.76-0.25-0.76-0.41-0.341-0.25-0.759 0.05-0.76-0.25-0.76c-0.36 0-0.48-1.47-0.37-4.304 0.1-2.367-0.02-4.304-0.26-4.304-0.25 0-0.33-0.911-0.18-2.025 0.16-1.16 0.06-2.025-0.22-2.025-0.27 0-0.35-0.457-0.17-1.015 0.21-0.674 0.06-1.118-0.47-1.32-0.44-0.166-0.67-0.5072-0.51-0.7565 0.15-0.2493 0.02-0.4533-0.29-0.4533s-0.42-0.2278-0.25-0.5063 0.06-0.5064-0.25-0.5064-0.45-0.193-0.3-0.4289c0.34-0.557-2.45-3.2379-2.9-2.7851-0.19 0.1896-0.35 0.0654-0.35-0.2759 0-0.3414-0.23-0.4798-0.5-0.3077-0.28 0.1721-0.51 0.0582-0.51-0.2532s-0.23-0.4253-0.51-0.2532-0.5 0.0582-0.5-0.2531c0-0.3114-0.23-0.4253-0.51-0.2532s-0.51 0.0563-0.51-0.2574c0-0.34-0.41-0.4405-1.01-0.249-0.56 0.1768-1.01 0.1352-1.01-0.0924 0-0.2277-1.48-0.4139-3.29-0.4139s-3.29 0.1952-3.29 0.4339-0.35 0.3028-0.76 0.1425c-0.42-0.1603-0.76-0.0573-0.76 0.2289s-0.23 0.3795-0.51 0.2074-0.51-0.0582-0.51 0.2532c0 0.3113-0.19 0.4468-0.42 0.301-0.56-0.3443-3.24 2.4459-2.79 2.8988 0.19 0.1895 0.07 0.3446-0.28 0.3446-0.34 0-0.48 0.2279-0.3 0.5064 0.17 0.2785 0.05 0.5063-0.26 0.5063s-0.42 0.2279-0.25 0.5064 0.08 0.5063-0.21 0.5063c-0.28 0-0.39 0.3418-0.23 0.7595 0.16 0.4183 0.1 0.7593-0.14 0.7593s-0.43 3.418-0.43 7.595c0 4.178 0.13 7.596 0.3 7.596s0.34 1.253 0.39 2.785c0.06 1.719-0.12 2.785-0.46 2.785-0.3 0-0.4 0.228-0.23 0.506s0.06 0.506-0.26 0.506c-0.31 0-0.44 0.204-0.28 0.454 0.15 0.249-0.08 0.589-0.51 0.756-0.43 0.166-0.66 0.508-0.51 0.759 0.16 0.251-0.07 0.593-0.5 0.76-0.44 0.166-0.67 0.507-0.51 0.757 0.15 0.25-0.29 0.831-1 1.292-0.7 0.46-1.16 1.018-1.03 1.24 0.14 0.222-0.43 0.907-1.26 1.523-0.83 0.615-1.38 1.335-1.22 1.599 0.17 0.265 0.05 0.481-0.26 0.481-0.32 0-0.43 0.228-0.26 0.506 0.17 0.279 0.06 0.507-0.25 0.507s-0.43 0.228-0.25 0.506c0.17 0.278 0.07 0.506-0.21 0.506-0.29 0-0.39 0.342-0.23 0.76s0.02 0.759-0.3 0.759c-0.37 0-0.47 0.393-0.28 1.013 0.18 0.568 0.09 1.013-0.2 1.013s-0.39 0.342-0.23 0.759c0.16 0.418 0.02 0.76-0.3 0.76-0.33 0-0.45 0.228-0.28 0.506 0.17 0.279 0.08 0.507-0.21 0.507-0.28 0-0.39 0.341-0.23 0.759s0.03 0.76-0.29 0.76c-0.33 0-0.45 0.228-0.28 0.506s0.06 0.506-0.26 0.506c-0.31 0-0.42 0.228-0.25 0.507 0.17 0.278 0.06 0.506-0.25 0.506s-0.44 0.204-0.29 0.453c0.16 0.25-0.07 0.59-0.51 0.756-0.43 0.167-0.64 0.532-0.47 0.813 0.17 0.28 0.06 0.51-0.25 0.51s-0.43 0.228-0.25 0.506c0.17 0.279 0.05 0.507-0.26 0.507-0.34 0-0.44 0.409-0.25 1.012 0.18 0.557 0.09 1.013-0.19 1.013-0.64 0-0.54 2.161 0.12 2.613 0.27 0.184 1.21 0.217 2.1 0.073 1.3-0.211 1.97 0.051 3.46 1.364 1.02 0.893 1.85 1.875 1.85 2.181s-0.87-0.29-1.93-1.325c-1.6-1.562-2.23-1.86-3.74-1.749-1.01 0.074-1.72 0.298-1.6 0.497 0.12 0.2 0.91 0.226 1.76 0.057 1.28-0.258 1.83-0.016 3.39 1.515 1.03 1.001 2.1 1.831 2.38 1.842 0.27 0.011 0.59 0.28 0.69 0.598 0.12 0.355-0.05 0.422-0.45 0.175-0.43-0.266-0.53-0.201-0.29 0.19 0.2 0.327 0.56 0.476 0.79 0.332s1.02 0.747 1.74 1.981c1.46 2.498 1.61 3.054 0.68 2.517-0.37-0.212-0.46-0.172-0.21 0.096 0.23 0.254 0.67 0.461 0.97 0.461s0.65 0.317 0.78 0.704c0.16 0.469 0.02 0.569-0.41 0.301-0.44-0.271-0.53-0.201-0.27 0.216 0.21 0.341 0.51 0.488 0.67 0.327 0.16-0.16 0.86 0.224 1.55 0.853s1.08 0.829 0.86 0.445c-0.28-0.47-0.19-0.625 0.26-0.475 0.37 0.124 1.09-0.189 1.59-0.694 1.01-1.006 1.23-2.436 0.38-2.436-0.29 0-0.41-0.198-0.26-0.439 0.32-0.526-1.43-2.224-1.86-1.797-0.16 0.164-0.68-0.289-1.15-1.007s-1.05-1.187-1.29-1.041c-0.23 0.146-0.8-0.31-1.26-1.012-0.46-0.703-1.01-1.174-1.21-1.047-0.21 0.127-1-0.414-1.75-1.202-1.2-1.254-1.39-1.889-1.49-5.082-0.06-2.007 0.08-3.769 0.32-3.917s0.31-0.587 0.16-0.977c-0.15-0.389-0.03-0.708 0.27-0.708s0.42-0.342 0.26-0.759c-0.17-0.418-0.08-0.76 0.18-0.76s0.34-0.342 0.18-0.76c-0.16-0.417-0.02-0.759 0.3-0.759 0.33 0 0.45-0.228 0.28-0.506-0.17-0.279-0.06-0.507 0.25-0.507s0.43-0.228 0.25-0.506c-0.17-0.279-0.05-0.506 0.26-0.506s0.42-0.228 0.25-0.507c-0.17-0.278-0.06-0.506 0.25-0.506 0.32 0 0.43-0.228 0.26-0.507-0.18-0.278-0.06-0.506 0.25-0.506s0.42-0.229 0.25-0.51c-0.17-0.28 0.04-0.646 0.47-0.812 0.44-0.167 0.67-0.507 0.51-0.756-0.15-0.25-0.06-0.454 0.21-0.454s0.38-0.512 0.24-1.139c-0.21-0.946-0.15-1.011 0.34-0.38 0.48 0.606 0.54 0.375 0.33-1.139-0.15-1.1-0.05-1.899 0.24-1.899 0.28 0 0.37-0.228 0.19-0.506-0.17-0.279-0.05-0.507 0.26-0.507s0.42-0.227 0.25-0.506c-0.17-0.278-0.06-0.506 0.25-0.506 0.32 0 0.43-0.228 0.26-0.506-0.17-0.279-0.06-0.507 0.25-0.507s0.43-0.229 0.25-0.51c-0.17-0.28 0.04-0.646 0.48-0.812 0.43-0.167 0.66-0.507 0.5-0.756-0.15-0.25-0.02-0.454 0.29-0.454s0.43-0.227 0.25-0.506c-0.17-0.279-0.07-0.506 0.23-0.506 0.59 0 0.45-3.696-0.2-5.184-0.21-0.484-0.14-1.566 0.15-2.405 0.3-0.875 0.33-1.526 0.07-1.526s-0.32-0.379-0.15-0.842c0.2-0.504 0.12-0.716-0.18-0.528-0.7 0.432-0.51-5.462 0.21-6.322 1.08-1.307 5.74-0.198 4.9 1.167-0.15 0.247-0.02 0.449 0.29 0.449s0.53 0.399 0.48 0.886c-0.18 1.802 0.06 2.152 1.49 2.152 1.59 0 2.17-0.822 1.73-2.483-0.16-0.633-0.03-1.061 0.32-1.061 0.33 0 0.46-0.224 0.29-0.499-0.4-0.639 2.71-2.551 4.04-2.487 0.85 0.041 0.81 0.119-0.25 0.48-1.22 0.416-1.21 0.428 0.25 0.348 1.73-0.095 2.95 0.479 2.51 1.18-0.16 0.259-0.03 0.472 0.28 0.472s0.42 0.227 0.25 0.506c-0.17 0.278-0.08 0.506 0.21 0.506s0.39 0.342 0.23 0.76c-0.16 0.417-0.04 0.759 0.27 0.759s0.56 0.57 0.56 1.266-0.25 1.266-0.56 1.266-0.43 0.342-0.27 0.759c0.16 0.418 0.06 0.76-0.22 0.76-0.33 0-0.32 0.351 0.03 1.004 0.3 0.552 0.53 1.862 0.52 2.911-0.04 2.879 0.16 4.187 0.64 4.187 0.23 0 0.28 0.228 0.11 0.506s-0.06 0.506 0.25 0.506c0.32 0 0.43 0.228 0.26 0.507-0.17 0.278-0.06 0.506 0.25 0.506s0.44 0.204 0.29 0.453c-0.16 0.25 0.08 0.593 0.53 0.764 0.46 0.177 0.68 0.635 0.52 1.066-0.16 0.415-0.06 0.755 0.23 0.755 0.28 0 0.38 0.228 0.2 0.507-0.17 0.278-0.05 0.506 0.26 0.506 0.34 0 0.44 0.409 0.25 1.012-0.2 0.624-0.09 1.013 0.28 1.013 0.35 0 0.49 0.421 0.33 1.013-0.14 0.557-0.02 1.013 0.28 1.013s0.39 0.15 0.21 0.334 0.12 0.655 0.68 1.047 0.89 0.926 0.73 1.185-0.04 0.472 0.27 0.472c0.32 0 0.43 0.228 0.26 0.506-0.17 0.279-0.06 0.506 0.25 0.506s0.43 0.228 0.25 0.507c-0.17 0.278-0.05 0.506 0.26 0.506s0.42 0.228 0.25 0.506c-0.17 0.279-0.08 0.507 0.21 0.507 0.28 0 0.37 0.379 0.19 0.842-0.23 0.61-0.13 0.729 0.35 0.431 0.51-0.315 0.59-0.108 0.34 0.888-0.19 0.765-0.1 1.375 0.22 1.482 0.37 0.125 0.4 0.746 0.09 1.941l-0.46 1.758-0.33-2.731c-0.32-2.715-2.19-6.981-3.89-8.915-0.49-0.557-1.04-1.999-1.22-3.203-0.39-2.533-2.78-7.521-4.24-8.844-0.97-0.875-1.06-0.865-2.46 0.286-2.49 2.042-6.25 4.394-7.53 4.715-1.23 0.311-3.35-1.228-3.88-2.821-0.44-1.316-1.86-0.078-3.72 3.248-1.48 2.654-1.79 3.633-1.51 4.884 0.26 1.174 0.1 1.838-0.64 2.662-3.09 3.465-5.7 10.213-5.7 14.751v3.25l3.15 2.689c8.04 6.866 8.68 7.984 5.95 10.474l-1.53 1.4 1.04 0.939c0.8 0.726 0.89 1.042 0.39 1.39-0.43 0.304-0.31 0.361 0.37 0.175 0.56-0.151 1.35-0.055 1.77 0.213 1.14 0.728 8.07 0.56 10.35-0.252zm-22.93-18.487c0-0.696 0.12-0.981 0.26-0.633s0.14 0.918 0 1.266-0.26 0.063-0.26-0.633zm31.33-30.348c-0.72-1.358-0.66-1.552 0.48-1.552 1.01 0 2.26 1.635 1.68 2.212-0.62 0.62-1.64 0.308-2.16-0.66zm1.51-0.003c0-0.262-0.23-0.617-0.51-0.79-0.28-0.172-0.51 0.043-0.51 0.477s0.23 0.789 0.51 0.789 0.51-0.214 0.51-0.476zm-8.11-22.563c0-0.9044 0.28-1.2658 0.96-1.2658 1.35 0 1.75 1.3911 0.58 2.0176-1.38 0.7375-1.54 0.6613-1.54-0.7518zm-16.2 68.942c0-0.096-0.51-0.608-1.14-1.139l-1.14-0.964 0.97 1.139c0.9 1.07 1.31 1.37 1.31 0.964zm-22.18-8.924c-0.33-0.501-1.1 1.311-1.1 2.602-0.02 2.91 0.75 3.23 1 0.421 0.14-1.532 0.19-2.892 0.1-3.023zm17.12 1.504c-0.3-0.557-0.66-1.013-0.8-1.013s-0.01 0.456 0.29 1.013 0.66 1.013 0.8 1.013 0.01-0.456-0.29-1.013zm-12.41-2.026c0.17-0.278 0.09-0.506-0.19-0.506s-0.65 0.228-0.82 0.506c-0.17 0.279-0.09 0.507 0.19 0.507s0.65-0.228 0.82-0.507zm35.71-39.859c0.41-1.193 0.41-1.871 0-2.531-0.5-0.791-0.53-0.762-0.25 0.237 0.21 0.789 0.09 1.139-0.41 1.139-0.39 0-2.14 0.715-3.89 1.588-4.41 2.208-7 2.439-8.9 0.797l-1.48-1.27 0.87-1.827c0.48-1.004 1.61-2.28 2.52-2.834s1.35-1.008 0.98-1.009c-0.38-0.001-1.26 0.454-1.97 1.011s-1.6 1.012-1.98 1.012-0.69 0.285-0.7 0.633c0 0.348-0.14 1.132-0.3 1.742-0.23 0.857 0.23 1.625 2.05 3.392 2.09 2.035 2.64 2.3 4.99 2.436 3.46 0.2 7.62-2.015 8.47-4.516zm-1.83-4.518c0.24-0.621 0.16-0.702-0.32-0.321-0.36 0.281-0.99 0.637-1.41 0.791-0.51 0.192-0.41 0.294 0.33 0.321 0.6 0.022 1.23-0.334 1.4-0.791zm-10.84-1.449c0-0.462 0.32-0.622 0.89-0.441 0.72 0.233 0.75 0.189 0.15-0.236-0.41-0.286-0.87-0.436-1.04-0.333s-0.61-0.311-0.99-0.92c-0.65-1.048-0.64-1.066 0.28-0.347 0.88 0.693 0.91 0.686 0.31-0.078-1.06-1.356-2.4-0.829-2.27 0.888 0.1 1.249 0.05 1.317-0.34 0.456-0.32-0.71-0.47-0.781-0.5-0.239-0.02 0.425 0.32 1.28 0.76 1.9 0.63 0.91 0.97 1.026 1.77 0.602 0.54-0.29 0.98-0.853 0.98-1.252zm7.6 1.014c-0.75-0.894 0.03-1.033 0.9-0.162 0.95 0.951 2.94-0.355 2.87-1.885-0.03-0.68-0.24-1.409-0.48-1.62-0.23-0.211-0.22-0.041 0.01 0.376 0.37 0.653 0.32 0.663-0.42 0.069-0.46-0.379-0.72-0.892-0.57-1.139s0.02-0.449-0.29-0.449c-0.78 0-2.05 1.32-1.66 1.712 0.17 0.172 0.05 0.314-0.28 0.314-0.32 0-0.59 0.455-0.59 1.012 0 0.829-0.34 1.013-1.86 1.013-1.02 0-1.7 0.149-1.52 0.33 0.18 0.182 1.01 0.311 1.84 0.288 0.84-0.024 1.65 0.169 1.81 0.429s0.42 0.472 0.58 0.472 0-0.342-0.34-0.76zm5.37-2.721c-0.34-2.2-1.64-3.608-3.31-3.608-1.81 0-3.59 1.339-3.56 2.687 0.01 1.063 0.06 1.051 1.15-0.282 2.29-2.788 5.26-1.052 4.75 2.774-0.26 2.009-0.23 2.091 0.48 1.15 0.49-0.65 0.66-1.623 0.49-2.721zm-12.2-2.097c-0.04-0.561-0.38-1.302-0.75-1.645-0.54-0.501-0.6-0.489-0.28 0.062 0.29 0.517 0.13 0.606-0.65 0.359-0.56-0.18-1.18-0.091-1.36 0.199-0.17 0.29 0.01 0.527 0.41 0.527s1.01 0.342 1.35 0.759c0.88 1.051 1.37 0.95 1.28-0.261z" transform="translate(10 1088.9)" stroke="#000" stroke-width=".375" fill="none"/>
+ <rect id="d0e113" display="none" height="1e3px" width="288" y="1205.6" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e113"/>
</flowRegion>
<flowDiv xml:space="preserve">Vous devriez essayer ces trois filtres et observer les résultats différents qu&apos;ils produisent pour différents types d&apos;images. Pour une image donnée, il y en aura un qui donnera de meilleurs résultats que les autres.</flowDiv>
</flowRoot>
- <rect id="d0e116" display="none" height="1e3px" width="288" y="1264" x="10"/>
+ <rect id="d0e116" display="none" height="1e3px" width="288" y="1254" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e116"/>
</flowRegion>
<flowDiv xml:space="preserve">Après la vectorisation, vous devriez essayer d&apos;appliquer la commande <flowSpan font-family="sans-serif">Chemin &gt; Simplifier</flowSpan> (<flowSpan font-weight="bold">Ctrl+L</flowSpan>) au chemin résultant, afin de diminuer le nombre de nœuds. Cela peut rendre l&apos;édition du résultat de Potrace bien plus facile. Par exemple, voici un exemple typique de vectorisation du « Vieil homme jouant de la guitare » :</flowDiv>
</flowRoot>
- <text id="tracing-f05-fr.svgtext2879" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1332.7)" xml:space="preserve" line-height="100.00000%" font-size="6" y="128.14566" x="81.327339" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f05-fr.svgtspan2880" y="128.14566" x="81.327339" sodipodi:role="line">Image originale</tspan></text>
- <text id="tracing-f05-fr.svgtext2882" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1332.7)" xml:space="preserve" line-height="100.00000%" font-size="6" y="124.44067" x="227.33034" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f05-fr.svgtspan2883" y="124.44067" x="227.33034" sodipodi:role="line">Image vectorisée / Chemin résultant</tspan><tspan id="tracing-f05-fr.svgtspan2893" y="130.44067" x="227.33034" sodipodi:role="line">(1 551 nœuds)</tspan></text>
- <image id="tracing-f05-fr.svgimage1651" sodipodi:absref="/oldguitar.jpg" xlink:href="oldguitar.jpg" transform="translate(10 1332.7)" height="115.89" width="83.347" y=".000066406" x="39.654"/>
- <path id="tracing-f05-fr.svgpath1653" d="m185.42 89.583v-26.312l0.69-0.042 0.68-0.041-0.69-0.133-0.69-0.133 0.02-14.959 0.03-14.959 0.95-0.068c0.52-0.037 1.06-0.242 1.19-0.456 0.18-0.284 0.25-0.245 0.25 0.144 0.01 0.921 1.05 0.497 1.31-0.532 0.11-0.467 0.16-0.413 0.18 0.228 0.03 0.702 0.17 0.836 0.88 0.832 0.63-0.004 0.72-0.073 0.38-0.288-0.24-0.156-0.36-0.366-0.26-0.466 0.1-0.101 0.38 0.011 0.62 0.249 0.45 0.456 4.62 0.633 4.34 0.185-0.08-0.128 0.03-0.311 0.24-0.407 0.21-0.097 0.07-0.099-0.31-0.006-0.37 0.093-0.68 0.047-0.68-0.104 0-0.514 0.31-0.583 1.69-0.373 0.75 0.114 1.45 0.093 1.53-0.049 0.22-0.357 0.73-0.324 0.73 0.047 0 0.167-0.2 0.304-0.45 0.304s-0.46 0.127-0.46 0.283c0 0.155-0.31 0.341-0.68 0.411-0.38 0.071-0.17 0.127 0.47 0.124 0.63-0.003 1.22-0.12 1.31-0.26 0.08-0.14 0.43-0.254 0.76-0.254 0.34 0 0.53-0.129 0.43-0.286-0.09-0.157 0.07-0.294 0.37-0.304 1.91-0.063 3.68-0.251 4.34-0.46 0.42-0.133 0.66-0.135 0.53-0.004-0.12 0.131 0.07 0.446 0.44 0.7 0.77 0.54 6.33 0.862 6.33 0.368 0-0.165-0.21-0.22-0.46-0.124s-0.45 0.046-0.45-0.111-0.21-0.286-0.46-0.286-0.46 0.091-0.46 0.203c0 0.111-0.21 0.202-0.47 0.202s-0.42-0.206-0.36-0.481c0.06-0.31 0.37-0.454 0.85-0.405 0.58 0.06 0.64 0.012 0.29-0.223-0.67-0.438-1.26-0.377-1.66 0.171-0.27 0.374-0.62 0.432-1.55 0.258-1.15-0.217-1.17-0.238-0.46-0.552 0.55-0.246 0.76-0.234 0.86 0.047 0.17 0.509 0.68 0.475 0.68-0.044 0-0.863 1.73-0.81 4.02 0.122 1.22 0.497 2.3 0.903 2.4 0.904 0.36 0.002 0.51-3.488 0.16-3.709-0.18-0.116-0.23-0.307-0.12-0.424 0.43-0.428 1.2 0.59 1.04 1.379-0.14 0.706 0.36 1.842 0.81 1.842 0.1 0 0.34-0.513 0.52-1.141 0.53-1.745 1.51-2.804 2.32-2.495 0.53 0.2 0.64 0.438 0.53 1.138-0.2 1.236 0.5 1.702 2.63 1.757l1.78 0.045-0.17-0.945c-0.1-0.519-0.57-1.45-1.05-2.067-0.48-0.618-0.88-1.388-0.88-1.712 0-0.842-0.62-1.243-2.25-1.468-0.9-0.123-1.77-0.489-2.33-0.98-1.23-1.081-1.12-1.38 0.24-0.65 1.28 0.686 2.82 0.809 2.82 0.226 0-0.211-0.31-0.731-0.68-1.156-0.9-1.012-1.45-1.989-1.45-2.575 0-0.506 0.39-0.288 1.43 0.807 0.26 0.272 0.69 0.436 0.96 0.365 0.31-0.079 0.62 0.141 0.8 0.57 0.31 0.694 3.24 2.095 4.56 2.181 0.34 0.021 0.92 0.347 1.29 0.724l0.67 0.684h-0.69c-0.37 0-0.81 0.114-0.97 0.253s-0.9 0.425-1.64 0.636c-1.57 0.448-1.17 0.985 0.54 0.709 0.9-0.147 1.03-0.097 0.87 0.331-0.14 0.354-0.03 0.504 0.35 0.504 0.56 0 1.86 1.176 1.88 1.693 0 0.157 0.34 0.524 0.74 0.817l0.73 0.533 0.22-1.422c0.23-1.58-0.03-6.439-0.43-7.856l-0.26-0.913-0.21 1.141c-0.12 0.627-0.35 1.141-0.5 1.141-0.16 0-1.08-0.42-2.04-0.932-1.75-0.928-3.12-2.223-3.13-2.947 0-0.556-0.93-0.464-1.37 0.135-0.35 0.476-0.42 0.478-0.87 0.02-0.36-0.357-0.4-0.558-0.15-0.714 0.25-0.152 0.18-0.348-0.22-0.645-0.54-0.397-0.52-0.416 0.27-0.276 0.74 0.133 0.87 0.041 1.02-0.743 0.24-1.181 0.57-1.143 0.56 0.065 0 0.549 0.18 1.021 0.42 1.104 0.24 0.079 0.35 0.013 0.25-0.148-0.1-0.162 0.01-0.293 0.26-0.293 0.24 0 0.44 0.114 0.44 0.253s0.32 0.254 0.7 0.254 0.85 0.153 1.04 0.342c0.41 0.411 3.13 0.08 3.13-0.381 0-0.694-0.64-1.452-1.08-1.282-0.26 0.098-0.76-0.078-1.11-0.392-0.55-0.48-0.62-0.49-0.47-0.068 0.14 0.381-0.04 0.534-0.74 0.636-1.58 0.233-2.38-0.058-2.38-0.868 0-0.425 0.19-0.741 0.45-0.763 0.59-0.049 0.75-0.095 1.75-0.511 0.46-0.191 1.08-0.26 1.37-0.154 0.4 0.145 0.35-0.007-0.21-0.626-0.41-0.45-0.93-0.75-1.14-0.667-0.22 0.083-0.4-0.049-0.4-0.295 0-0.771-0.5-0.601-1.91 0.642-0.21 0.181-0.54 0.275-0.73 0.21-0.2-0.066-0.66 0.175-1.02 0.536-0.39 0.392-0.89 0.594-1.23 0.503-0.32-0.083-0.58-0.062-0.58 0.048s-0.58 0.2-1.3 0.2c-0.71 0-1.36 0.081-1.44 0.18s-0.63 0.271-1.22 0.383l-1.06 0.202 0.91-0.609c0.5-0.335 0.74-0.609 0.52-0.611-0.32-0.001-0.32-0.082 0-0.439 0.34-0.381 0.44-0.377 0.75 0.03 0.73 0.946 4.33-0.287 6.35-2.173 0.5-0.46 1.99-1.36 3.33-2.0001 1.34-0.6404 3.53-1.7571 4.87-2.4814 2.63-1.4232 2.78-1.4433 7.36-1.0003 2.46 0.2383 2.49 0.2327 2.67-0.4871 0.1-0.4005 0.14-1.7548 0.1-3.0096l-0.09-2.2814 8.67-0.0812c7.53-0.0706 8.71-0.0196 9.01 0.3891 0.3 0.4121 0.37 0.4143 0.52 0.0178 0.14-0.3777 0.87-0.4354 4.37-0.3481 2.31 0.0575 4.3 0.1203 4.43 0.1395 0.17 0.0259 0.12 95.017-0.06 113.12l-0.02 2.5h-41.52-41.53v-26.307zm6.99 25.117c0.42-0.78 0.4-0.93-0.11-0.93-0.4 0-0.79 0.61-0.79 1.24 0 0.49 0.58 0.29 0.9-0.31zm2.36-1.64c0.14-1.09-0.08-1.03-0.49 0.12-0.24 0.69-0.23 0.9 0.03 0.82 0.19-0.07 0.4-0.49 0.46-0.94zm1.18-0.12c-0.1-0.11-0.17 0.07-0.16 0.39 0.02 0.36 0.09 0.43 0.18 0.19 0.09-0.22 0.08-0.48-0.02-0.58zm-2.31-0.52c0-0.4 0.08-0.98 0.18-1.29 0.13-0.4 0-0.34-0.45 0.2-0.74 0.9-0.84 1.83-0.19 1.83 0.28 0 0.46-0.29 0.46-0.74zm-1.8 0.2c0.11-1.07 1.02-3.42 1.34-3.43 0.17 0 0.56-0.55 0.86-1.21 0.31-0.67 0.7-1.21 0.88-1.21 0.17 0 0.78-0.41 1.35-0.91 0.57-0.51 0.94-0.92 0.82-0.92s0.24-0.34 0.8-0.76c0.57-0.41 1.14-0.92 1.27-1.13 0.17-0.28 0.32-0.29 0.57-0.05 0.55 0.56 2.21 0.04 2.71-0.86 0.47-0.82 0.47-0.78-0.59-3.028-0.39-0.83-0.21-2.381 0.28-2.381 0.55 0-0.87-2.327-1.62-2.672-0.69-0.314-0.84-0.271-1.26 0.37-0.26 0.399-0.86 2.141-1.33 3.871-0.87 3.19-1.69 5.25-2.38 5.98-0.21 0.22-0.38 0.56-0.38 0.75 0 0.42-1.76 1.98-2.51 2.22-0.63 0.2-1.28 1.36-1.59 2.83-0.17 0.79-0.14 0.97 0.16 0.79 0.39-0.25 0.34 0.23-0.17 1.45-0.15 0.38-0.07 0.53 0.27 0.53 0.27 0 0.5-0.1 0.52-0.23zm55.06-3.05c-0.18-0.06-0.33-0.44-0.33-0.85 0-0.45-0.18-0.73-0.46-0.73-0.25 0-0.46 0.2-0.46 0.45s0.14 0.46 0.31 0.46c0.16 0 0.3 0.13 0.3 0.28 0 0.16 0.16 0.67 0.36 1.14l0.36 0.86 0.13-0.75c0.07-0.41-0.03-0.8-0.21-0.86zm-1.73-0.17c-0.1-0.27-0.31-0.42-0.46-0.33s-0.1 0.35 0.11 0.57c0.47 0.51 0.6 0.42 0.35-0.24zm-1.33-1.99c-0.2-0.38-0.51-0.55-0.79-0.44-0.4 0.15-0.36 0.3 0.22 0.92 0.76 0.8 1.1 0.51 0.57-0.48zm2.28-1.54c-0.07-0.87-0.77-1.24-0.77-0.41 0 0.31-0.21 0.87-0.47 1.24-0.7 0.99-0.23 1.46 0.61 0.62 0.39-0.41 0.66-1.02 0.63-1.45zm-2.6-1.19c0-0.15-0.2-0.44-0.45-0.65-0.5-0.41-0.56-0.31-0.27 0.43 0.19 0.51 0.72 0.67 0.72 0.22zm2.44-0.36c0-0.18-0.14-0.24-0.31-0.14-0.16 0.11-0.3 0.25-0.3 0.33 0 0.07 0.14 0.13 0.3 0.13 0.17 0 0.31-0.15 0.31-0.32zm-7.49-2.42c-0.17-0.17-0.76-0.44-1.32-0.6-0.98-0.28-0.99-0.28-0.46 0.31 0.3 0.33 0.89 0.6 1.31 0.6 0.53 0 0.68-0.1 0.47-0.31zm6.02-0.21c-0.22-0.08-0.48-0.07-0.58 0.03s0.08 0.17 0.4 0.16c0.35-0.02 0.43-0.09 0.18-0.19zm-8.57-0.59c0-0.35-1.05-1-1.62-1.01-0.3-0.01-0.47-0.136-0.38-0.285 0.1-0.15-0.03-0.351-0.28-0.447-0.61-0.231-0.59-0.802 0.02-0.802 0.79 0 0.3-0.752-0.56-0.854-0.43-0.052-0.97-0.314-1.19-0.583-0.36-0.435-0.33-0.449 0.26-0.134 0.37 0.195 1.03 0.354 1.48 0.354 0.71 0 0.8 0.102 0.67 0.768-0.17 0.883 0.22 1.288 0.6 0.618 0.27-0.485 1.61-0.328 1.61 0.189 0 0.157 0.13 0.202 0.3 0.098 0.17-0.103 0.31-0.043 0.31 0.134 0 0.178 0.4 0.323 0.88 0.323 0.49 0 0.94 0.129 0.99 0.287 0.06 0.157 0.79 0.464 1.62 0.674 0.84 0.22 1.6 0.5 1.69 0.63 0.27 0.37 1.83-0.48 1.67-0.91-0.11-0.287 0.17-0.333 1.14-0.186 0.71 0.106 1.45 0.336 1.66 0.496 0.28 0.21 0.38 0.16 0.38-0.2 0-0.953-2.33-1.287-3.49-0.503-0.38 0.253-1.8 0.209-3.2-0.108-2.36-0.535-8.33-4.086-15.66-9.314-3.19-2.274-5.35-3.293-8.78-4.134-1.7-0.417-3.5-0.913-4-1.101-1.7-0.638-5.11-2.815-5.25-3.35-0.09-0.344-0.79-0.722-1.98-1.072-1.61-0.474-1.78-0.596-1.4-0.989 0.48-0.485 1.79-2.549 1.79-2.81 0-0.315-2.62 0.421-4.18 1.176-0.88 0.423-1.73 0.683-1.91 0.578-1.02-0.631-2.66 1.757-3.38 4.912-0.32 1.391-0.29 1.68 0.22 2.563 0.58 0.984 2.19 2.146 2.63 1.895 0.13-0.071 0.23 0.063 0.23 0.298 0 0.236 0.26 0.729 0.58 1.098l0.58 0.67 0.2-0.924c0.26-1.151 0.64-1.407 1.23-0.82 0.49 0.491 0.59 0.823 0.22 0.765-0.73-0.116-1.29 0.096-1.29 0.493 0 0.251 0.14 0.456 0.3 0.456 0.17 0 0.31-0.137 0.31-0.304 0-0.168 0.14-0.304 0.3-0.304 0.17 0 0.31 0.202 0.31 0.45 0 0.519 1.4 0.926 2.73 0.793 0.41-0.041 0.41-0.088 0-0.424-0.25-0.207-0.6-0.648-0.78-0.978-0.19-0.331-0.7-0.78-1.15-0.999-0.44-0.218-0.8-0.537-0.8-0.708 0-0.191-0.37-0.231-0.95-0.103-0.66 0.145-0.89 0.106-0.75-0.128 0.12-0.185 0.44-0.341 0.73-0.347 0.46-0.008 0.45-0.053-0.05-0.436-0.69-0.519-0.39-1.195 0.35-0.813 0.28 0.146 0.69 0.203 0.89 0.128 0.21-0.075 0.38 0.08 0.38 0.345s0.25 0.482 0.55 0.482c1.01 0 1.85 0.869 1.95 2.034 0.05 0.612 0.26 1.169 0.47 1.239 0.3 0.097 0.31-0.066 0.07-0.714-0.25-0.647-0.22-0.938 0.11-1.267 0.36-0.368 0.51-0.312 1.07 0.398 0.36 0.454 0.65 1.021 0.65 1.26s0.24 0.41 0.53 0.38c0.97-0.098 1.22 0.01 1.38 0.589 0.11 0.434 0.34 0.536 0.94 0.421 0.88-0.167 0.97-0.421 0.48-1.325-0.39-0.727-0.13-1.227 0.51-0.982 0.35 0.133 0.37 0.241 0.1 0.409-0.2 0.126-0.26 0.396-0.13 0.607 0.17 0.277 0.38 0.183 0.79-0.346 0.31-0.399 0.56-0.573 0.57-0.387 0.02 1.031 4.72 4.386 5.49 3.914 0.16-0.102 0.53 0.045 0.81 0.325 0.48 0.478 0.52 0.469 0.75-0.137l0.24-0.648 0.77 0.668c0.42 0.367 0.76 0.834 0.76 1.037 0 0.51-0.94 0.826-1.32 0.444-0.52-0.518-0.85-0.357-0.75 0.362 0.08 0.528 0.31 0.687 1.09 0.725 0.54 0.027 1.16 0.185 1.37 0.353 0.2 0.168 0.85 0.401 1.44 0.518 0.59 0.118 1.82 0.465 2.74 0.772s2.35 0.766 3.19 1.02c0.84 0.255 2.34 0.837 3.35 1.295 1 0.453 1.91 0.813 2.02 0.783 0.11-0.02 0.37 0.16 0.57 0.41 0.37 0.44 1.21 0.62 1.21 0.25zm-5.78-3.456c0-0.168 0.14-0.305 0.3-0.305 0.17 0 0.31 0.137 0.31 0.305 0 0.167-0.14 0.304-0.31 0.304-0.16 0-0.3-0.137-0.3-0.304zm-1.22-0.609c0-0.167-0.38-0.304-0.86-0.304-0.47 0-0.96-0.103-1.09-0.228-0.23-0.228-0.38-0.271-1.24-0.342-0.54-0.045-0.65-1.863-0.12-1.863 0.21 0 0.26 0.289 0.15 0.741-0.17 0.686-0.08 0.757 1.2 0.949 1.26 0.189 3.23 1.318 2.34 1.341-0.21 0.006-0.38-0.127-0.38-0.294zm-4.94-1.242c-0.3-0.171-0.67-0.227-0.84-0.124-0.41 0.254-0.72-0.634-0.45-1.295 0.19-0.473 0.24-0.456 0.47 0.152 0.15 0.376 0.46 0.684 0.7 0.684s0.51 0.205 0.61 0.456c0.2 0.533 0.2 0.533-0.49 0.127zm-2.36-1.325c0-0.535 0.19-0.613 0.45-0.192 0.09 0.156 0.03 0.37-0.14 0.475s-0.31-0.023-0.31-0.283zm2.36-0.068c0.21-0.084 0.55-0.084 0.76 0 0.21 0.085 0.04 0.154-0.38 0.154s-0.59-0.069-0.38-0.154zm-21.83-4.495c0-0.074 0.14-0.219 0.31-0.322 0.17-0.104 0.3-0.043 0.3 0.134s-0.13 0.322-0.3 0.322-0.31-0.06-0.31-0.134zm2.54-3.073c-0.27-0.701-0.02-0.739 0.64-0.1 0.52 0.511 0.53 0.569 0.06 0.569-0.28 0-0.6-0.211-0.7-0.469zm1.47 11.779c0.73-0.304 2.12-0.727 3.09-0.939 0.98-0.213 1.7-0.459 1.61-0.547-0.09-0.089-1.53-0.339-3.2-0.557-1.67-0.217-3.36-0.492-3.74-0.61-0.39-0.118-0.6-0.107-0.47 0.026 0.12 0.133 0 0.495-0.28 0.806-0.39 0.432-0.43 0.647-0.16 0.922 0.2 0.196 0.36 0.604 0.36 0.905 0 0.72 1.07 0.718 2.79-0.006zm12.42-3.575c0-0.372-0.88-1.022-1.64-1.213-1.1-0.277-0.98 0.217 0.2 0.833 1.06 0.553 1.44 0.652 1.44 0.38zm-4.26-1.043c0-0.167-0.13-0.304-0.3-0.304s-0.31 0.137-0.31 0.304c0 0.168 0.14 0.305 0.31 0.305s0.3-0.137 0.3-0.305zm1.45-0.38c-0.15-0.431-0.64-0.383-0.79 0.076-0.05 0.167 0.13 0.304 0.41 0.304s0.45-0.171 0.38-0.38zm-7.53-2.966c0-0.167-0.21-0.304-0.46-0.304s-0.45 0.137-0.45 0.304c0 0.168 0.2 0.305 0.45 0.305s0.46-0.137 0.46-0.305zm23.57-8.213c-0.1-0.167-0.25-0.304-0.32-0.304s-0.13 0.137-0.13 0.304c0 0.168 0.14 0.304 0.32 0.304s0.24-0.136 0.13-0.304zm-3.34-0.608c-0.11-0.167-0.33-0.304-0.5-0.304-0.16 0-0.21 0.137-0.11 0.304s0.32 0.304 0.49 0.304 0.22-0.137 0.12-0.304zm13.27-0.814c-0.36-0.616-0.45-0.419-0.16 0.346 0.11 0.272 0.26 0.43 0.34 0.352 0.07-0.079-0.01-0.392-0.18-0.698zm-14.5 0.24c-0.16-0.149-0.64-0.36-1.05-0.469l-0.76-0.199 0.76 0.458c0.84 0.511 1.51 0.644 1.05 0.21zm3.51-0.661c0-0.157-0.14-0.286-0.31-0.286-0.16 0-0.3 0.213-0.3 0.474s0.14 0.39 0.3 0.287c0.17-0.104 0.31-0.317 0.31-0.475zm-5.63-0.286c-0.1-0.167-0.35-0.302-0.55-0.299-0.22 0.002-0.18 0.122 0.09 0.299 0.59 0.378 0.69 0.378 0.46 0zm17.49-0.735c0-0.237 0.17-0.511 0.38-0.608 0.3-0.142 0.31-0.214 0-0.355-0.26-0.121-0.09-0.464 0.54-1.088 0.5-0.501 0.9-1.072 0.9-1.268 0-0.264-0.06-0.266-0.23-0.01-0.16 0.246-0.35 0.208-0.67-0.134-0.39-0.426-0.38-0.458 0.08-0.28 0.32 0.121 0.52 0.055 0.53-0.17 0-0.234 0.11-0.202 0.29 0.085 0.24 0.378 0.4 0.39 0.91 0.074 0.5-0.308 0.62-0.308 0.61 0-0.02 0.587-0.78 1.466-1.06 1.214-0.14-0.123-0.17 0.003-0.07 0.279 0.12 0.329-0.01 0.553-0.37 0.648-0.38 0.098-0.55 0.401-0.52 0.914 0.06 0.939 0.32 0.801 1.23-0.645 1.4-2.226 2.58-7.879 1.75-8.392-0.24-0.149-0.34 0.437-0.34 1.986 0 1.209-0.11 2.096-0.23 1.97-0.24-0.241-0.28-0.406-0.34-1.412-0.03-0.344-0.16-0.554-0.3-0.465-0.15 0.089-0.24-0.48-0.2-1.264 0.03-0.784-0.13-2.037-0.35-2.786-0.23-0.748-0.34-1.608-0.24-1.911 0.11-0.344 0.02-0.55-0.22-0.547-0.54 0.006-1.45 0.592-0.94 0.599 0.21 0.002 0.38 0.133 0.38 0.289 0 0.157-0.56 0.278-1.25 0.268-0.69-0.009-1.34 0.123-1.44 0.293-0.26 0.407-0.95 0.49-1.79 0.216-0.81-0.26-0.92-1.053-0.16-1.081 0.41-0.015 0.38-0.084-0.15-0.294-0.37-0.152-0.68-0.425-0.68-0.607 0-0.183 0.13-0.248 0.3-0.144 0.45 0.277 0.37-0.623-0.17-1.911-0.26-0.622-0.43-1.157-0.38-1.189 0.25-0.157-2.46-3.324-3.88-4.539-1.1-0.939-1.56-1.53-1.43-1.855 0.13-0.355 0.91 0.291 3.01 2.51 2.37 2.506 2.94 3.304 3.51 4.946 0.39 1.076 0.87 2.024 1.08 2.106 0.21 0.081 0.31 0.27 0.22 0.42s-0.02 0.272 0.15 0.272c0.48 0 0.39-0.648-0.24-1.683-0.31-0.508-0.66-1.545-0.77-2.305-0.17-1.162-0.51-1.691-2.13-3.335-1.06-1.075-2.39-2.327-2.96-2.782-0.56-0.455-0.87-0.831-0.67-0.836s0.55 0.178 0.78 0.407c0.23 0.23 0.86 0.649 1.41 0.932 0.55 0.284 1.66 1.224 2.47 2.089 0.82 0.865 1.57 1.481 1.69 1.368 0.23-0.232-1.65-2.981-2.04-2.981-0.14 0-0.26-0.197-0.26-0.438s-0.82-0.877-1.83-1.414c-1-0.537-1.78-1.023-1.72-1.082 0.06-0.058 0.74 0.112 1.53 0.379 1.48 0.504 2.06 1.028 4.14 3.696 0.68 0.879 1.38 1.597 1.54 1.597 0.59 0 0.28-0.816-0.64-1.692-0.52-0.491-1.28-1.467-1.69-2.167-0.65-1.1-1.02-1.363-2.7-1.921-2.94-0.978-4.42-2.433-2.49-2.433 0.75 0 1.06-0.565 2.38-4.359 0.45-1.309 0.9-2.462 1-2.56s0.18-0.35 0.18-0.559 0.3-1.042 0.66-1.85c0.67-1.504 1.46-3.494 1.46-3.733 0.01-0.074-0.27 0.166-0.61 0.532-0.83 0.887-1.34 0.852-0.75-0.052 0.26-0.394 0.38-0.942 0.28-1.216-0.15-0.398 0.01-0.507 0.83-0.538 0.93-0.034 0.89-0.06-0.35-0.281-1.94-0.346-3.91-0.35-3.37-0.007 0.23 0.15 0.87 0.201 1.4 0.114 0.86-0.14 0.99-0.066 1.13 0.636 0.1 0.541 0.02 0.793-0.27 0.793-0.22 0-0.41 0.258-0.41 0.573 0 0.464-0.19 0.555-0.99 0.476-0.54-0.054-1.09-0.106-1.22-0.117-0.12-0.011-0.2-0.122-0.16-0.247 0.03-0.126-0.03-0.686-0.15-1.244-0.21-1.005-0.23-1.014-1.51-0.801-1.76 0.293-2.79 0.866-3.77 2.099-1.6 2.007-1.9 3.263-1.92 8.159-0.01 3.167-0.12 4.486-0.36 4.486-0.2 0-1.82 0.671-3.6 1.49-3.37 1.546-5.41 2.183-8.92 2.79-1.83 0.317-2.12 0.459-2.54 1.289-0.59 1.123-0.44 4.113 0.28 5.71 0.26 0.572 0.65 1.657 0.88 2.41 0.34 1.167 0.53 1.383 1.29 1.469 0.52 0.061 1.2-0.136 1.68-0.492 0.44-0.326 1.39-0.895 2.12-1.265 0.72-0.37 1.92-1.29 2.65-2.045s1.33-1.193 1.33-0.974c0 0.253 0.24 0.162 0.65-0.246 0.36-0.356 0.65-1.002 0.65-1.437 0-0.493 0.16-0.79 0.45-0.79 0.24 0 1.07-0.616 1.83-1.369 0.92-0.904 1.66-1.37 2.18-1.373 0.62-0.004 0.69-0.067 0.33-0.304-0.32-0.211-0.14-0.242 0.61-0.107 0.58 0.105 1.2 0.331 1.36 0.501 0.21 0.207 0.13 0.247-0.22 0.121-0.81-0.284-0.65 0.023 0.6 1.176 0.63 0.577 1.42 1.054 1.75 1.062 0.8 0.018 3.86 2.394 4.32 3.35 0.19 0.41 0.45 1.156 0.57 1.658l0.22 0.913-0.65-0.582c-0.36-0.319-0.74-0.496-0.85-0.392-0.36 0.366-0.18 1.762 0.31 2.3 0.27 0.301 0.49 0.686 0.49 0.856 0 0.481 1.09 1.344 1.37 1.088 0.14-0.126 0.15-0.051 0.03 0.165-0.13 0.217-0.08 0.573 0.1 0.793 0.31 0.375 0.69 2.798 0.69 4.395 0 0.521 0.1 0.624 0.34 0.381 0.5-0.504 0.82-0.405 0.82 0.255 0 0.325 0.14 0.675 0.3 0.779 0.4 0.245 0.4 1.278 0 1.526-0.17 0.106-0.46-0.228-0.64-0.743-0.18-0.514-0.46-0.935-0.62-0.935-0.4 0-0.01 1.226 0.61 1.928 0.27 0.308 0.5 0.719 0.5 0.913 0 0.541 0.88 2.33 1.14 2.33 0.13 0 0.23-0.194 0.23-0.431zm-0.4-2.199c-0.39-0.397-0.2-0.716 0.43-0.716 0.35 0 0.58 0.159 0.51 0.361-0.15 0.444-0.66 0.637-0.94 0.355zm0.1-2.407c0-0.261 0.13-0.39 0.3-0.286 0.17 0.103 0.31 0.316 0.31 0.474 0 0.157-0.14 0.286-0.31 0.286s-0.3-0.213-0.3-0.474zm3.52 0.211c-0.13-0.212-0.16-0.468-0.05-0.568 0.27-0.273 0.56 0.128 0.42 0.569-0.11 0.309-0.18 0.309-0.37-0.001zm-4.74-6.134c0-0.163 0.21-0.295 0.46-0.295s0.45 0.054 0.45 0.12c0 0.065-0.2 0.198-0.45 0.294s-0.46 0.043-0.46-0.119zm3.07-1.639c-0.02-0.32 0.06-0.5 0.16-0.399s0.11 0.364 0.02 0.583c-0.1 0.243-0.17 0.171-0.18-0.184zm-11.43-8.998c-0.11-0.168-0.05-0.305 0.13-0.305s0.32 0.137 0.32 0.305c0 0.167-0.06 0.304-0.13 0.304-0.08 0-0.22-0.137-0.32-0.304zm-1.24-3.489c-0.32-0.245-0.44-0.451-0.25-0.456s0.52 0.195 0.73 0.447c0.48 0.579 0.28 0.583-0.48 0.009zm3.52-6.397c0-0.251 0.11-0.457 0.25-0.457s0.25 0.206 0.25 0.457-0.11 0.456-0.25 0.456-0.25-0.205-0.25-0.456zm-1.31-0.043c-0.11-0.107-0.12-0.314-0.03-0.461 0.19-0.315 0.73-0.043 0.73 0.37 0 0.326-0.41 0.38-0.7 0.091zm3.13-4.502c0-0.074 0.14-0.219 0.31-0.322 0.16-0.104 0.3-0.043 0.3 0.134s-0.14 0.322-0.3 0.322c-0.17 0-0.31-0.061-0.31-0.134zm0-2.129c0-0.261 0.14-0.475 0.31-0.475 0.16 0 0.3 0.129 0.3 0.287 0 0.157-0.14 0.37-0.3 0.474-0.17 0.103-0.31-0.026-0.31-0.286zm0.61-0.779c0-0.167 0.14-0.304 0.3-0.304 0.17 0 0.31 0.137 0.31 0.304s-0.14 0.304-0.31 0.304c-0.16 0-0.3-0.137-0.3-0.304zm-0.56-0.608c0-0.419 0.07-0.59 0.15-0.381 0.09 0.21 0.09 0.552 0 0.761-0.08 0.209-0.15 0.038-0.15-0.38zm-4.81-2.244c-0.27-0.311-0.12-0.478 0.71-0.777 0.58-0.21 1.13-0.304 1.23-0.21 0.09 0.095-0.2 0.312-0.65 0.484s-0.74 0.449-0.63 0.617c0.27 0.442-0.25 0.352-0.66-0.114zm2.33-0.722c0-0.377 0.14-0.685 0.3-0.685 0.38 0 0.38 0.323 0 0.913-0.24 0.369-0.29 0.325-0.3-0.228zm-10.54 41.427c-0.13-0.314 0.02-0.53 0.44-0.638 0.82-0.215 0.96-0.692 0.47-1.625l-0.4-0.761-0.05 0.913c-0.04 0.686-0.1 0.573-0.24-0.456-0.11-0.753-0.07-1.544 0.09-1.757 0.15-0.213 0.19-0.478 0.08-0.588-0.44-0.432-0.86 0.534-1.02 2.309-0.09 1.024-0.26 1.861-0.37 1.861-0.4 0-1.29-1.302-1-1.484 0.41-0.265 0.64-2.484 0.33-3.307-0.33-0.917-0.87-0.871-0.87 0.076 0 0.583-0.16 0.763-0.69 0.77-0.64 0.009-0.65 0.034-0.13 0.427 0.64 0.483 0.19 0.942-0.64 0.654-0.47-0.163-0.47-0.142 0.01 0.235 0.3 0.228 0.54 0.508 0.54 0.622 0 0.266 0.51 0.906 1.75 2.194 1.04 1.076 2.02 1.397 1.7 0.555zm-0.34-2.263c0-0.586 0.06-0.825 0.14-0.533 0.07 0.293 0.07 0.772 0 1.065-0.08 0.293-0.14 0.053-0.14-0.532zm-2.3-0.507c-0.11-0.112-0.21-0.344-0.21-0.517 0-0.191 0.15-0.173 0.36 0.045 0.2 0.198 0.29 0.431 0.21 0.517-0.09 0.087-0.25 0.066-0.36-0.045zm14.09 0.507c0-0.167-0.14-0.304-0.3-0.304-0.17 0-0.31 0.137-0.31 0.304s0.14 0.304 0.31 0.304c0.16 0 0.3-0.137 0.3-0.304zm-16.12-2.7c0-0.146-0.2-0.83-0.44-1.521-0.25-0.69-0.33-1.255-0.18-1.255s0.4 0.377 0.56 0.837c0.27 0.773 0.31 0.79 0.53 0.228 0.12-0.334 0.45-0.871 0.72-1.193 0.39-0.478 0.4-0.535 0.03-0.313-0.99 0.589-1.3 0.436-1.1-0.547 0.24-1.204 0.31-1.258 1.05-0.861 0.34 0.18 0.9 0.328 1.24 0.328 0.53 0 0.64 0.201 0.67 1.293l0.03 1.293 0.28-1.521c0.15-0.836 0.29-1.929 0.31-2.427 0.03-0.499 0.24-1.098 0.47-1.332 0.24-0.234 0.35-0.637 0.25-0.895-0.1-0.257-0.03-0.562 0.15-0.677 0.24-0.144 0.2-0.348-0.12-0.667-0.34-0.343-0.37-0.547-0.11-0.805s0.22-0.345-0.15-0.345c-0.27 0-0.54 0.105-0.59 0.233-0.06 0.129-1.06 0.735-2.23 1.348-1.28 0.669-2.17 1.334-2.22 1.667-0.05 0.305-0.24 0.854-0.42 1.22-0.52 1.031 0.3 6.178 0.98 6.178 0.16 0 0.29-0.119 0.29-0.266zm-0.86-4.525c0.04-0.292-0.02-0.702-0.15-0.909-0.16-0.258-0.09-0.319 0.23-0.195 0.53 0.202 0.66 1.637 0.15 1.637-0.18 0-0.28-0.24-0.23-0.533zm17.1 4.042c0.27-0.413 0.49-1.207 0.49-1.765s0.16-1.176 0.36-1.374 0.28-0.437 0.19-0.532c-0.1-0.094-0.4 0.057-0.68 0.336-0.47 0.465-0.54 0.467-0.87 0.021-0.27-0.349-0.5-0.403-0.83-0.19-0.4 0.266-0.4 0.332 0 0.598 0.28 0.181 0.32 0.302 0.1 0.305-0.57 0.007-0.76-0.536-0.42-1.179 0.21-0.397 0.52-0.534 0.95-0.422 0.46 0.121 0.67-0.006 0.8-0.484 0.11-0.427 0.41-0.648 0.87-0.648 1.67 0 1.01-1.022-0.85-1.307-0.93-0.144-1.22-0.059-1.59 0.475-0.35 0.507-0.37 0.708-0.08 0.916 0.3 0.211 0.3 0.298 0 0.42-0.21 0.085-0.38 0.417-0.38 0.738 0 0.32-0.14 0.583-0.31 0.583-0.6 0-0.29 0.583 0.58 1.097s1.45 2.088 0.89 2.432c-0.14 0.086-0.25 0.286-0.25 0.443 0 0.532 0.53 0.291 1.03-0.463zm-1.13-5.233c-0.31-0.309-0.24-0.71 0.12-0.71 0.17 0 0.24 0.125 0.15 0.278-0.1 0.153 0 0.348 0.21 0.433s0.23 0.164 0.05 0.178c-0.18 0.013-0.42-0.068-0.53-0.179zm-3.98 4.848c-0.1-0.101-0.17 0.079-0.16 0.399 0.02 0.354 0.09 0.427 0.19 0.184 0.09-0.22 0.07-0.482-0.03-0.583zm8.03 0.526c0-0.167-0.13-0.304-0.3-0.304s-0.31 0.137-0.31 0.304 0.14 0.304 0.31 0.304 0.3-0.137 0.3-0.304zm-13.99-0.989c-0.01-0.534-0.07-0.587-0.29-0.242-0.15 0.243-0.21 0.551-0.13 0.684 0.27 0.427 0.42 0.262 0.42-0.442zm12.64-0.148c0.27-0.375 0.3-0.694 0.08-1.103-0.19-0.358-0.2-0.647-0.02-0.765 0.41-0.268 0.72-2.109 0.39-2.312-0.15-0.092-0.36-0.027-0.47 0.146-0.1 0.172-0.32 0.235-0.47 0.139-0.16-0.096-0.29-0.03-0.29 0.147s0.14 0.322 0.31 0.322 0.3 0.342 0.3 0.761c0 0.418-0.13 0.76-0.3 0.76s-0.31 0.548-0.31 1.217c0 1.331 0.19 1.495 0.78 0.688zm1.66-0.725c0-0.795-0.5-0.717-0.72 0.113-0.29 1.065-0.23 1.246 0.26 0.836 0.25-0.208 0.46-0.635 0.46-0.949zm-5.32-3.935c0.13-0.621 0.1-0.903-0.09-0.783-0.46 0.284-0.74-1.253-0.36-1.97 0.19-0.345 0.26-0.71 0.16-0.81s-0.35 0.254-0.55 0.787c-0.38 1-0.95 1.382-0.65 0.436 0.09-0.308-0.17-0.147-0.63 0.38l-0.79 0.913 0.17-1.673c0.35-3.286 0.37-3.174-0.46-3.184-0.58-0.008-0.77-0.178-0.8-0.715-0.04-0.855-0.72-1.68-0.72-0.877 0 0.284 0.1 0.518 0.23 0.519 0.12 0 0.26 0.646 0.31 1.433 0.04 0.788 0.3 1.759 0.56 2.157 0.27 0.422 0.4 1.022 0.29 1.437-0.1 0.392-0.03 0.806 0.16 0.919 0.19 0.122 0.26 0.653 0.15 1.311-0.15 0.96-0.13 1.007 0.14 0.357 0.44-1.034 0.5-1.063 1.06-0.504 0.27 0.271 0.35 0.493 0.17 0.493-0.17 0-0.23 0.228-0.12 0.506 0.13 0.34 0.08 0.434-0.16 0.286-0.2-0.121-0.36-0.075-0.36 0.102 0 0.574 0.53 0.342 1.06-0.464 0.28-0.433 0.59-0.711 0.68-0.618s-0.05 0.5-0.31 0.904c-0.27 0.404-0.4 0.817-0.3 0.917 0.24 0.239 0.89-1.029 1.16-2.259zm-7.89 1.202c-0.8-0.631-1.39-0.747-1.39-0.272 0 0.167 0.21 0.304 0.46 0.304 0.26 0 0.54 0.197 0.64 0.437 0.09 0.241 0.36 0.363 0.59 0.272 0.33-0.126 0.26-0.303-0.3-0.741zm2.71-0.272c-0.1-0.167-0.35-0.302-0.55-0.3-0.22 0.003-0.18 0.123 0.1 0.3 0.58 0.378 0.69 0.378 0.45 0zm18.23-1.574c-0.28-0.869-0.41-2.125-0.41-3.825 0-0.711-0.14-1.293-0.31-1.293-0.18 0-0.32-0.206-0.32-0.456 0-0.251 0.14-0.457 0.32-0.457s0.23-0.158 0.11-0.351c-0.14-0.218-0.09-0.268 0.13-0.134 0.19 0.119 0.35 0.059 0.35-0.134 0-0.192-0.26-0.417-0.57-0.5-0.31-0.082-0.74-0.512-0.94-0.957-0.33-0.735-0.4-0.761-0.75-0.289-0.25 0.353-0.47 0.42-0.69 0.209-0.21-0.211-0.36 0.255-0.49 1.454-0.1 0.971-0.06 1.888 0.09 2.039 0.15 0.15 0.2 0.664 0.1 1.141-0.11 0.567-0.04 0.868 0.19 0.868s0.29-0.232 0.17-0.606c-0.15-0.49-0.09-0.567 0.35-0.399 0.43 0.165 0.4 0.054-0.15-0.534-0.52-0.552-0.65-0.966-0.52-1.617 0.09-0.481 0.18-1.097 0.19-1.368 0.02-0.381 0.08-0.354 0.29 0.114 0.26 0.591 0.27 0.589 0.47-0.076 0.11-0.377 0.33-0.685 0.49-0.685s0.2 0.146 0.09 0.325c-0.11 0.178 0.05 0.518 0.36 0.754 0.49 0.374 0.5 0.47 0.11 0.733-0.34 0.22-0.49 0.176-0.56-0.164-0.06-0.255-0.26-0.408-0.46-0.338-0.41 0.147-0.33 1.426 0.13 1.878 0.21 0.212 0.24 0.13 0.09-0.264-0.15-0.413-0.1-0.534 0.21-0.433 0.65 0.217 0.85 1.555 0.3 1.971-0.42 0.316-0.4 0.439 0.22 1.094 0.4 0.431 0.61 0.936 0.51 1.216-0.1 0.264 0.05 0.837 0.33 1.274 0.61 0.925 0.9 0.828 0.57-0.19zm-21.59 0.389c0.09-0.15-0.04-0.351-0.29-0.447-0.28-0.106-0.45 0.001-0.45 0.273 0 0.492 0.47 0.604 0.74 0.174zm2.3-0.673c0-0.185-0.21-0.258-0.46-0.161-0.25 0.096-0.45 0.042-0.45-0.12s0.2-0.295 0.45-0.295 0.46-0.151 0.46-0.336c0-0.186-0.22-0.254-0.48-0.152-0.27 0.101-0.61 0.184-0.76 0.184-0.16 0-0.28 0.274-0.28 0.609 0 0.446 0.2 0.608 0.76 0.608 0.42 0 0.76-0.151 0.76-0.337zm1.99 0.054c-0.1-0.156-0.05-0.359 0.09-0.451 0.15-0.092 0.28-0.495 0.28-0.895 0-0.675-0.04-0.692-0.51-0.234-0.52 0.504-0.5 1.863 0.03 1.863 0.15 0 0.2-0.127 0.11-0.283zm-25.3-1.694c-0.19-0.497-0.72-0.628-0.72-0.178 0 0.231 0.21 0.388 0.82 0.61 0.04 0.013-0.01-0.181-0.1-0.432zm3.67 0.118c-0.09-0.149 0.11-0.27 0.46-0.27 0.84 0 0.8-0.533-0.06-0.698l-0.69-0.132 0.69-0.041c0.41-0.025 0.68-0.239 0.68-0.535 0-0.384-0.09-0.417-0.41-0.147-0.23 0.191-0.63 0.266-0.89 0.168-0.25-0.098-0.56-0.025-0.67 0.162-0.15 0.248-0.33 0.244-0.64-0.017-0.35-0.291-0.43-0.21-0.43 0.442 0 0.439-0.14 0.798-0.3 0.798-0.17 0-0.31 0.104-0.31 0.232s0.62 0.25 1.37 0.27c0.75 0.021 1.29-0.084 1.2-0.232zm4.29-0.69c0.29-1.139 0.04-2.482-0.43-2.382-0.27 0.057-0.35-0.082-0.24-0.38 0.12-0.297 0.01-0.468-0.29-0.468-0.31 0-0.43 0.229-0.37 0.684 0.06 0.376 0.27 0.684 0.48 0.684s0.35 0.137 0.3 0.304c-0.04 0.168-0.17 0.27-0.3 0.229-0.27-0.092-0.3 0.899-0.04 1.572 0.27 0.702 0.69 0.588 0.89-0.243zm13.83 0.42c-0.6-0.385-1.22-0.385-1.22 0 0 0.167 0.38 0.302 0.84 0.299 0.65-0.003 0.73-0.069 0.38-0.299zm1.66-0.283c0.09-0.156 0.05-0.361-0.11-0.455-0.15-0.094-0.35 0.033-0.45 0.283-0.19 0.493 0.27 0.634 0.56 0.172zm-16.87-0.941c0-0.736-1.08-0.455-1.13 0.296-0.03 0.407 0.11 0.514 0.54 0.402 0.32-0.084 0.59-0.399 0.59-0.698zm-9.76-0.677c0.01-0.126-0.11-0.229-0.28-0.229s-0.29 0.377-0.28 0.837c0.02 0.741 0.05 0.767 0.28 0.228 0.14-0.335 0.27-0.711 0.28-0.836zm25.44 0.152c-0.03-0.779-0.18-1.141-0.49-1.141-0.29 0-0.41 0.26-0.36 0.76 0.19 1.826 0.91 2.148 0.85 0.381zm6.52 0.058c0-0.261-0.13-0.39-0.3-0.287-0.17 0.104-0.3 0.317-0.3 0.475 0 0.157 0.13 0.286 0.3 0.286s0.3-0.213 0.3-0.474zm-5.02-0.134c-0.1-0.168 0.03-0.305 0.29-0.305s0.47-0.226 0.47-0.503c0-0.455-0.05-0.451-0.6 0.041-0.52 0.471-0.59 1.071-0.12 1.071 0.08 0 0.07-0.137-0.04-0.304zm9.39-0.143c0.25-0.663-0.28-0.841-0.76-0.252-0.28 0.352-0.29 0.44-0.03 0.283 0.21-0.126 0.38-0.083 0.38 0.094 0 0.461 0.21 0.397 0.41-0.125zm-30.99-0.846c0.03-0.417 0.38-0.844 0.89-1.092 0.46-0.225 0.77-0.471 0.7-0.548-0.29-0.282-3.26-0.362-3.26-0.088 0 0.156 0.23 0.283 0.5 0.283 0.39 0 0.42 0.091 0.14 0.427-0.27 0.327-0.27 0.469 0.04 0.608 0.32 0.148 0.32 0.216-0.01 0.365-0.3 0.138-0.26 0.28 0.15 0.583 0.65 0.472 0.79 0.383 0.85-0.538zm-13.53 0.313c0-0.15 0.12-0.197 0.27-0.105 0.15 0.093 0.35-0.036 0.45-0.286s0.44-0.454 0.76-0.454 0.67-0.214 0.77-0.476c0.1-0.261 0.31-0.396 0.47-0.299 0.15 0.097 0.37 0.029 0.48-0.151 0.25-0.394-3.34-0.07-4.21 0.381-0.31 0.158-0.75 0.213-0.99 0.123-0.61-0.236-1.18 0.921-0.61 1.242 0.61 0.339 2.61 0.359 2.61 0.025zm0.02-0.972c-0.01-0.321 0.06-0.5 0.16-0.399 0.11 0.101 0.12 0.363 0.03 0.583-0.1 0.242-0.17 0.17-0.19-0.184zm10.56 0.431c-0.45-0.719-0.57-0.636-0.34 0.238 0.09 0.367 0.29 0.594 0.44 0.505 0.14-0.09 0.1-0.424-0.1-0.743zm-6.32 0.304c0-0.167-0.15-0.304-0.32-0.304-0.18 0-0.24 0.137-0.14 0.304 0.11 0.167 0.25 0.304 0.33 0.304 0.07 0 0.13-0.137 0.13-0.304zm3.64-0.598c-0.01-0.676-0.05-0.705-0.32-0.232-0.17 0.296-0.44 0.459-0.6 0.362s-0.29 0.008-0.29 0.233 0.28 0.409 0.61 0.409c0.45 0 0.61-0.2 0.6-0.772zm9.74 0.453c0-0.198-0.47-0.282-1.21-0.211-0.67 0.063-1.16 0.211-1.09 0.327 0.22 0.345 2.3 0.24 2.3-0.116zm22.36-0.159c0.22 0 0.46 0.102 0.53 0.228s0.11 0.103 0.09-0.05-0.33-0.466-0.67-0.696c-0.59-0.39-0.63-0.36-0.63 0.43 0.01 0.467 0.07 0.677 0.14 0.468 0.08-0.209 0.32-0.38 0.54-0.38zm2.51 0.397c-0.3-0.077-0.71-0.072-0.92 0.012-0.2 0.083 0.04 0.146 0.54 0.14s0.67-0.074 0.38-0.152zm12.45-2.298c0.52-1.046 1.67-2.86 2.56-4.031 1.41-1.855 1.62-2.312 1.63-3.549 0.01-0.78 0.12-1.529 0.26-1.663 0.13-0.135 0.15-0.009 0.04 0.278-0.11 0.301-0.05 0.524 0.14 0.524 0.18 0 0.34-0.377 0.35-0.837s0.09-1.562 0.18-2.449c0.21-2.069-0.3-4.16-1.43-5.861-0.49-0.741-0.89-1.227-0.89-1.079s-0.29-0.096-0.64-0.542c-0.69-0.872-3.43-2.408-3.74-2.096-0.37 0.37-0.18 0.758 0.29 0.58 0.27-0.104 0.39-0.053 0.28 0.12-0.1 0.165 0.09 0.3 0.42 0.3 0.93 0 1.56 0.327 1.56 0.811 0 0.265 0.15 0.356 0.38 0.227 0.31-0.171 0.31-0.132 0 0.195-0.58 0.631-0.46 1.181 0.24 1.046 0.44-0.084 0.79 0.149 1.17 0.777 0.3 0.493 0.66 0.794 0.81 0.67 0.14-0.125 0.01 0.166-0.29 0.647-0.44 0.702-0.48 1.019-0.21 1.611 0.46 1.005 0.42 1.159-0.16 0.679-0.42-0.354-0.47-0.329-0.37 0.191 0.08 0.42 0.32 0.57 0.8 0.504 0.37-0.053 0.67 0.05 0.67 0.228s-0.13 0.323-0.3 0.323c-0.39 0-0.39 0.625 0 1.217 0.27 0.406 0.34 0.406 0.6 0 0.26-0.394 0.3-0.386 0.31 0.058 0 0.725-0.47 0.93-0.91 0.395-0.53-0.631-0.84-0.566-1.1 0.231l-0.23 0.685-0.17-0.703c-0.19-0.774-0.78-0.798-0.78-0.031 0 0.547-0.7 1.494-1.1 1.494-0.15 0-0.27-0.205-0.27-0.456 0-0.55-0.36-0.588-0.85-0.091-0.26 0.259-0.37 0.265-0.37 0.02 0-0.189 0.31-0.442 0.69-0.56 1.17-0.37 2.04-1.402 1.71-2.022-0.19-0.357-0.18-0.541 0.02-0.541 0.18 0 0.32 0.189 0.32 0.421 0 0.231 0.27 0.492 0.61 0.58 0.71 0.187 0.81-0.331 0.14-0.816-0.51-0.378-0.78-1.48-0.85-3.556-0.04-1.012-0.18-1.396-0.51-1.399-0.25-0.003-0.54 0.126-0.65 0.286-0.11 0.177-0.27 0.159-0.39-0.046-0.12-0.185-0.07-0.337 0.11-0.337s0.32-0.205 0.32-0.456c0-0.551-0.5-0.609-0.68-0.079-0.09 0.279-0.25 0.252-0.61-0.103-0.3-0.302-0.38-0.634-0.22-0.895 0.14-0.228 0.18-0.538 0.09-0.689-0.1-0.151-0.42 0.253-0.72 0.898-0.58 1.24-0.8 0.994-0.3-0.329 0.16-0.429 0.19-0.781 0.06-0.781-0.14 0-0.7 1.13-1.25 2.51s-1.27 3.106-1.59 3.836c-0.33 0.729-0.5 1.414-0.38 1.521s0.27 0.023 0.35-0.188c0.07-0.21 0.26-0.305 0.41-0.21s0.28 0 0.28-0.211c0-0.298 0.08-0.302 0.36-0.018 0.57 0.567 0.86 0.435 0.86-0.395 0-0.419 0.12-0.761 0.26-0.761 0.15 0 0.35-0.41 0.45-0.912 0.19-0.933 1.11-1.313 1.11-0.457 0 0.251-0.19 0.457-0.42 0.457-0.49 0-0.78 0.92-0.79 2.491 0 1.094-0.61 1.941-0.85 1.2-0.1-0.287-0.23-0.283-0.6 0.02-0.41 0.34-0.44 0.293-0.24-0.368l0.22-0.758-0.52 0.716c-0.4 0.548-0.58 0.621-0.78 0.313-0.31-0.504-0.29-0.532-1.28 1.943-1 2.516-1.01 2.763-0.05 1.591l0.75-0.912v0.988c0 0.544 0.14 0.989 0.3 0.989 0.17 0 0.31-0.206 0.31-0.457 0-0.713 0.55-0.534 0.7 0.228l0.13 0.685 0.24-0.71c0.17-0.547 0.29-0.617 0.51-0.304 0.2 0.281 0.23 0.203 0.1-0.253-0.24-0.865 0.34-1.202 1.02-0.588 0.3 0.267 0.7 0.486 0.9 0.486 0.19 0 0.35 0.137 0.35 0.304 0 0.168-0.12 0.304-0.26 0.304s-0.19 0.377-0.1 0.837c0.13 0.688 0.08 0.777-0.27 0.5-0.74-0.576-1.8-0.72-1.8-0.243 0 0.235 0.17 0.393 0.38 0.351 0.21-0.041 0.38 0.198 0.38 0.533 0 0.334-0.17 0.574-0.38 0.532s-0.4 0.232-0.42 0.608c-0.02 0.542-0.06 0.57-0.17 0.135-0.08-0.302-0.48-0.674-0.88-0.827-0.48-0.184-0.66-0.435-0.55-0.746 0.14-0.339 0.05-0.417-0.31-0.282-0.58 0.226-0.61 0.483-0.11 0.988 0.3 0.301 0.29 0.441-0.07 0.689-0.36 0.246-0.32 0.274 0.18 0.135 0.41-0.114 0.82 0.032 1.17 0.416 0.29 0.326 0.73 0.514 0.98 0.419 0.32-0.12 0.42-0.003 0.35 0.389-0.07 0.42 0.1 0.564 0.67 0.573 0.61 0.01 0.74 0.151 0.68 0.715-0.04 0.386 0.03 0.64 0.15 0.564 0.13-0.076 0.39 0.038 0.59 0.254 0.28 0.303 0.27 0.518-0.07 0.956-0.47 0.623-0.58 1.326-0.2 1.326 0.13 0 0.66-0.856 1.18-1.901zm-1.81-3.27c-0.11-0.396-0.01-0.609 0.26-0.609 0.24 0 0.43 0.274 0.43 0.609 0 0.334-0.12 0.608-0.27 0.608-0.14 0-0.34-0.274-0.42-0.608zm-1.44-0.305c0-0.167 0.14-0.304 0.31-0.304 0.16 0 0.3 0.137 0.3 0.304 0 0.168-0.14 0.305-0.3 0.305-0.17 0-0.31-0.137-0.31-0.305zm2.49-1.096c0.12-0.658 1.07-0.938 1.56-0.458 0.4 0.41 0.28 0.537-0.81 0.81-0.74 0.186-0.85 0.134-0.75-0.352zm2.68-0.576c0-0.252 0.24-0.461 0.54-0.466 0.48-0.009 0.48-0.049-0.05-0.449-0.51-0.388-0.63-0.378-1.01 0.085-0.38 0.473-0.39 0.459-0.1-0.139 0.4-0.839 0.41-1.406 0.02-1.161-0.17 0.104-0.31-0.017-0.31-0.268s0.15-0.547 0.33-0.657c0.17-0.111 0.26-0.365 0.18-0.564-0.08-0.207 0.14-0.377 0.51-0.395 0.36-0.017 0.48 0.035 0.27 0.115-0.23 0.089-0.36 0.646-0.33 1.414l0.04 1.268 0.21-1.217c0.2-1.177 0.21-1.192 0.52-0.456 0.18 0.418 0.44 0.692 0.59 0.608s0.28 0.181 0.3 0.589c0.04 0.71 0.02 0.716-0.39 0.156-0.4-0.547-0.42-0.526-0.35 0.332 0.07 0.975-0.21 1.661-0.68 1.661-0.16 0-0.29-0.206-0.29-0.456zm-2.13-1.369c0-0.356 0.21-0.609 0.49-0.609 0.32 0 0.43 0.166 0.31 0.482-0.1 0.264-0.19 0.538-0.19 0.608s-0.13 0.127-0.3 0.127-0.31-0.274-0.31-0.608zm-0.3-1.199c0-0.177 0.14-0.322 0.3-0.322 0.17 0 0.31 0.06 0.31 0.134s-0.14 0.219-0.31 0.322c-0.16 0.103-0.3 0.043-0.3-0.134zm-5.17-1.977c0-0.074 0.14-0.219 0.3-0.323 0.17-0.103 0.31-0.042 0.31 0.135s-0.14 0.322-0.31 0.322c-0.16 0-0.3-0.061-0.3-0.134zm5.06-1.843c-0.1-0.251-0.04-0.457 0.12-0.457s0.29 0.206 0.29 0.457-0.05 0.456-0.12 0.456c-0.06 0-0.19-0.205-0.29-0.456zm4.99-1.799c-0.24-0.6-0.61-1.091-0.83-1.091-0.53 0-0.5-0.243 0.07-0.819 0.56-0.556 0.53-0.586 1.03 1.012 0.51 1.613 0.29 2.335-0.27 0.898zm-5.03 0.43c-0.11-0.167 0.02-0.304 0.28-0.304 0.27 0 0.48 0.137 0.48 0.304s-0.13 0.304-0.29 0.304-0.37-0.137-0.47-0.304zm-2.59-2.89c0.21-0.251 0.43-0.456 0.5-0.456 0.06 0 0.11 0.205 0.11 0.456s-0.22 0.456-0.49 0.456c-0.41 0-0.43-0.082-0.12-0.456zm2.44 0.152c0-0.167 0.21-0.304 0.47-0.304s0.39 0.137 0.29 0.304c-0.11 0.167-0.32 0.304-0.48 0.304s-0.28-0.137-0.28-0.304zm-58.96 17.131c-0.22-0.088-0.48-0.077-0.58 0.024s0.08 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm15.96-1.215c-0.08-0.085-0.47-0.053-0.85 0.069l-0.71 0.223 0.68 0.251c0.38 0.139 0.7 0.427 0.72 0.642 0.03 0.214 0.11 0.07 0.18-0.321s0.07-0.779-0.02-0.864zm-17.08 0.814c-0.1-0.167-0.32-0.304-0.47-0.304-0.16 0-0.29 0.137-0.29 0.304 0 0.168 0.21 0.305 0.47 0.305s0.39-0.137 0.29-0.305zm13.07-0.859c-0.13-0.113-0.28-0.049-0.35 0.143-0.07 0.191-0.43 0.282-0.8 0.203-0.6-0.131-0.59-0.104 0.09 0.279 0.65 0.363 0.8 0.363 1.02 0.003 0.14-0.233 0.16-0.515 0.04-0.628zm1.68 0.555c0-0.167-0.24-0.302-0.53-0.299-0.45 0.004-0.47 0.047-0.08 0.299 0.58 0.371 0.61 0.371 0.61 0zm-4.03-0.211c-0.3-0.077-0.71-0.072-0.92 0.012-0.2 0.083 0.04 0.146 0.54 0.14s0.67-0.075 0.38-0.152zm11.39 0.003c-0.22-0.087-0.48-0.077-0.58 0.024s0.08 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm22.07-0.882c-0.29-0.29-0.87 0.18-0.65 0.529 0.13 0.208 0.3 0.203 0.51-0.016 0.18-0.179 0.25-0.41 0.14-0.513zm-22.55-0.957c-0.1-0.101-0.17 0.079-0.16 0.399 0.01 0.355 0.09 0.427 0.18 0.184 0.09-0.219 0.08-0.482-0.02-0.583zm-0.49-0.082c0-0.168-0.13-0.304-0.29-0.304-0.15 0-0.37 0.136-0.47 0.304-0.1 0.167 0.03 0.304 0.29 0.304s0.47-0.137 0.47-0.304zm22.81-0.295c0-0.162-0.2-0.216-0.45-0.119-0.25 0.096-0.46 0.228-0.46 0.294s0.21 0.12 0.46 0.12 0.45-0.133 0.45-0.295zm13.27-0.535c-0.1-0.101-0.18 0.078-0.16 0.399 0.01 0.354 0.08 0.426 0.18 0.184 0.09-0.22 0.08-0.482-0.02-0.583zm-0.87-0.597c-0.29-0.283-0.62-0.412-0.74-0.288-0.13 0.125-0.03 0.354 0.22 0.51 0.74 0.468 1.07 0.328 0.52-0.222zm-2.16-2.358c-0.44-0.412-0.81-0.6-0.81-0.419 0 0.402 1.26 1.53 1.47 1.319 0.08-0.083-0.21-0.488-0.66-0.9zm-26.21-0.474c0.11-0.167-0.02-0.304-0.28-0.304s-0.48 0.137-0.48 0.304 0.13 0.304 0.29 0.304 0.37-0.137 0.47-0.304zm26.78-0.631c0.11-0.347 0.12-0.712 0.02-0.811s-0.18 0.048-0.18 0.327-0.14 0.507-0.3 0.507c-0.17 0-0.31 0.137-0.31 0.304 0 0.555 0.57 0.315 0.77-0.327zm-25.72-0.27c0.75-0.475 0.22-0.589-0.75-0.16-0.71 0.312-0.78 0.408-0.31 0.424 0.34 0.01 0.81-0.108 1.06-0.264zm2.78-1.625c-0.25-0.241-0.34-0.162-0.34 0.285 0 0.805 0.43 1.231 0.56 0.563 0.06-0.284-0.04-0.665-0.22-0.848zm-2.47-1.834c0-0.631-0.36-0.839-0.81-0.467-0.58 0.49-0.5 0.873 0.2 0.873 0.34 0 0.61-0.183 0.61-0.406zm2.2-1.475c-0.19-0.19-0.23 0.01-0.12 0.565 0.13 0.637 0.21 0.713 0.29 0.295 0.07-0.311-0.01-0.698-0.17-0.86zm-0.68 0.664c0-0.167-0.14-0.304-0.32-0.304s-0.24 0.137-0.13 0.304c0.1 0.167 0.25 0.304 0.32 0.304s0.13-0.137 0.13-0.304zm-2.31-0.741c-0.09-0.241-0.36-0.363-0.6-0.273-0.51 0.198-0.27 0.71 0.34 0.71 0.24 0 0.35-0.185 0.26-0.437zm2.92-2.32c0-0.818-0.09-0.893-1.06-0.893-0.59 0-1.07 0.136-1.07 0.304 0 0.167 0.21 0.304 0.46 0.304s0.46 0.245 0.46 0.544c0 0.325 0.24 0.562 0.6 0.589 0.48 0.036 0.61-0.142 0.61-0.848zm-17.64-0.893c0-0.168-0.15-0.304-0.32-0.304-0.18 0-0.24 0.136-0.14 0.304 0.11 0.167 0.25 0.304 0.33 0.304 0.07 0 0.13-0.137 0.13-0.304zm16.57-1.416c-0.84-0.614-1.23-0.493-0.61 0.192 0.3 0.33 0.69 0.515 0.86 0.41 0.18-0.114 0.08-0.358-0.25-0.602zm10.4-1.094c-0.08-0.209-0.15-0.038-0.15 0.38 0 0.419 0.07 0.59 0.15 0.381s0.08-0.552 0-0.761zm-11.46-0.246c0-0.157-0.13-0.286-0.3-0.286s-0.31 0.213-0.31 0.474 0.14 0.39 0.31 0.286c0.17-0.103 0.3-0.316 0.3-0.474zm1.16-0.347c0.2-0.201 0.36-0.564 0.36-0.808 0-0.351-0.12-0.329-0.6 0.108-0.63 0.566-0.8 1.065-0.37 1.065 0.13 0 0.41-0.164 0.61-0.365zm-24.58-0.395c0-0.251-0.13-0.457-0.29-0.457-0.17 0-0.22 0.206-0.12 0.457 0.09 0.25 0.23 0.456 0.29 0.456 0.07 0 0.12-0.206 0.12-0.456zm34.57-1.451c-0.08-0.206-0.14 0.036-0.14 0.538 0.01 0.502 0.08 0.67 0.15 0.374 0.08-0.296 0.08-0.706-0.01-0.912zm20.87 0.792c-0.21-0.085-0.31-0.279-0.21-0.432 0.09-0.153 0.03-0.278-0.14-0.278-0.16 0-0.38 0.125-0.47 0.278-0.17 0.275 0.3 0.586 0.89 0.586 0.17 0 0.14-0.069-0.07-0.154zm-31.25-0.715c0.1-0.17 0.32-0.231 0.47-0.134 0.34 0.21 0.33-0.103-0.02-0.926-0.23-0.532-0.26-0.541-0.28-0.066-0.01 0.298-0.23 0.62-0.48 0.716-0.5 0.193-0.63 0.719-0.17 0.719 0.16 0 0.37-0.139 0.48-0.309zm-30.07-4.336c-0.09-0.206-0.15 0.036-0.14 0.538 0 0.502 0.07 0.671 0.15 0.375s0.07-0.707-0.01-0.913zm18.35-0.258c0-0.167-0.13-0.22-0.3-0.116-0.17 0.103-0.31 0.325-0.31 0.492s0.14 0.22 0.31 0.116c0.17-0.103 0.3-0.325 0.3-0.492zm53.05-5.988c0.11-0.181 0.27-1.741 0.35-3.465s0.36-3.778 0.62-4.564c0.35-1.059 0.39-1.585 0.15-2.033-0.18-0.332-0.33-0.818-0.33-1.078s-0.46-1.084-1.03-1.83-1.13-1.91-1.25-2.587c-0.24-1.454-0.76-1.942-0.76-0.719 0 0.47 0.41 1.723 0.91 2.783 0.56 1.164 0.92 2.422 0.92 3.173 0 1.187-1.87 8.286-2.49 9.442-0.47 0.877 0 2.182 1.21 3.397l1.12 1.126 0.19-1.657c0.1-0.911 0.27-1.806 0.39-1.988zm-53.05 2.678c0-0.167-0.51-0.291-1.14-0.274-1.02 0.027-1.06 0.056-0.38 0.274 1.09 0.348 1.52 0.348 1.52 0zm22.51-1.369c0-0.251-0.05-0.456-0.12-0.456-0.06 0-0.2 0.205-0.29 0.456-0.1 0.251-0.04 0.456 0.12 0.456s0.29-0.205 0.29-0.456zm-8.22-1.463c0-0.366-0.13-0.872-0.29-1.123-0.22-0.333-0.3-0.103-0.3 0.855-0.01 0.797 0.11 1.237 0.3 1.123 0.16-0.104 0.3-0.488 0.29-0.855zm9.13-8.879c-0.2-0.251-0.51-0.457-0.68-0.457s-0.13 0.202 0.08 0.457c0.2 0.251 0.51 0.456 0.68 0.456s0.14-0.202-0.08-0.456zm0.77-0.761c-0.11-0.167-0.25-0.304-0.33-0.304-0.07 0-0.13 0.137-0.13 0.304 0 0.168 0.14 0.304 0.32 0.304s0.24-0.136 0.14-0.304zm-0.92-1.216c-0.1-0.168-0.25-0.305-0.32-0.305s-0.13 0.137-0.13 0.305c0 0.167 0.14 0.304 0.32 0.304s0.24-0.137 0.13-0.304zm15.67-3.346c0-0.335-0.14-0.609-0.31-0.609-0.16 0-0.3-0.151-0.3-0.336s-0.35-0.615-0.79-0.954c-0.49-0.387-0.73-0.823-0.64-1.165 0.08-0.301-0.02-0.612-0.23-0.692-0.27-0.102-0.34-0.754-0.25-2.2333l0.13-2.0891-1.11-0.5312c-1.47-0.6998-4.41-1.0035-5.27-0.5438-0.86 0.4582-0.84 0.6119 0.24 1.7966 0.72 0.7821 0.82 1.0288 0.46 1.1649-0.25 0.095-0.45 0.295-0.45 0.4444 0 0.3975 1.04 0.3315 1.46-0.0934 0.29-0.2839 0.37-0.267 0.37 0.076 0 0.5319 0.88 1.5969 3.57 4.3199 2.05 2.084 3.12 2.577 3.12 1.445zm12.4-5.34c-0.07-0.071-0.56-0.2165-1.09-0.3228-1.3-0.2603-1.28 0.3898 0.02 0.7358 0.86 0.228 1.48-0.008 1.07-0.413zm-3.77-0.146c0.15-0.1379-0.54-0.2501-1.52-0.2495-1.64 0.001-1.74 0.0383-1.19 0.4435 0.61 0.443 2.15 0.333 2.71-0.194zm1.82-1.6493c1.15 0.0572 2.16 0.1802 2.26 0.2734 0.32 0.3199 0.67 0.1687 0.67-0.287 0-0.3336-0.35-0.457-1.29-0.4589-0.71-0.0015-2.01-0.089-2.89-0.1945-1.51-0.1816-1.6-0.1553-1.6 0.4962 0 0.5132 0.1 0.6091 0.38 0.3774 0.21-0.1709 1.32-0.2638 2.47-0.2066zm4.04-1.5214c-0.09-0.2582-0.41-0.4694-0.7-0.4694s-0.8-0.2529-1.15-0.5621c-0.75-0.6739-3.07-1.611-3.33-1.3482-0.38 0.3803-0.18 1.0608 0.26 0.8912 0.45-0.1708 2.23 0.549 3.96 1.6008 1.02 0.6127 1.23 0.5873 0.96-0.1123zm-5.98-0.9078c-0.01-0.1771-0.21-0.0564-0.46 0.2684s-0.44 0.7354-0.44 0.9126c0.01 0.1771 0.21 0.0563 0.46-0.2684 0.24-0.3248 0.44-0.7354 0.44-0.9126zm6.7-0.9038c0-0.6384-0.33-0.8573-2.49-1.683-1.93-0.7387-2.54-0.8626-2.73-0.5589-0.15 0.2486-0.05 0.463 0.28 0.5909 0.29 0.1104 1.31 0.5005 2.26 0.867 0.96 0.3664 1.9 0.8578 2.09 1.092 0.49 0.5886 0.59 0.5386 0.59-0.308zm-67.31 27.014c-0.12-0.122-0.22-0.432-0.22-0.688 0-0.343 0.09-0.377 0.34-0.128 0.18 0.186 0.28 0.496 0.22 0.688-0.07 0.192-0.22 0.25-0.34 0.128zm1.2-0.019c-0.37-0.372-0.21-0.71 0.33-0.686 0.32 0.015 0.38 0.085 0.15 0.178-0.21 0.085-0.31 0.279-0.21 0.433 0.2 0.323 0.02 0.371-0.27 0.075zm6.96-0.642c-0.06-0.057-0.03-0.364 0.05-0.682 0.13-0.489 0.37-0.559 1.56-0.453 0.78 0.069 1.66 0.132 1.97 0.14s0.46 0.155 0.34 0.345c-0.11 0.182-0.46 0.263-0.78 0.181-0.31-0.083-0.57-0.041-0.57 0.094 0 0.236-2.36 0.582-2.57 0.375zm1.41-0.58c-0.22-0.088-0.48-0.077-0.58 0.024s0.07 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm-7.36 0.208c0-0.167 0.14-0.304 0.31-0.304 0.16 0 0.3 0.137 0.3 0.304s-0.14 0.304-0.3 0.304c-0.17 0-0.31-0.137-0.31-0.304zm-2.13-0.566c0-0.144 0.34-0.197 0.76-0.117s0.76 0.198 0.76 0.262-0.34 0.117-0.76 0.117-0.76-0.118-0.76-0.262zm4.42-0.034c-0.09-0.143-0.74-0.348-1.45-0.455-2.16-0.328-2.62-0.676-2.37-1.798 0.12-0.532 0.18-1.265 0.12-1.628s0.04-0.744 0.2-0.848c0.46-0.279 0.05-0.756-0.47-0.557-0.25 0.094-0.45 0.004-0.45-0.201 0-0.219 0.25-0.308 0.6-0.217 0.79 0.207 0.85-0.09 0.51-2.554-0.23-1.746-0.34-2.009-0.65-1.59-0.2 0.277-0.52 0.405-0.72 0.286-0.43-0.266-0.46-1.093-0.04-1.093 0.17 0 0.3-0.146 0.3-0.325 0-0.193-0.26-0.241-0.65-0.117-0.52 0.166-0.62 0.107-0.47-0.283 0.11-0.271 0.07-0.492-0.07-0.492-0.15 0-0.34 0.206-0.44 0.457-0.28 0.723-1.19 0.58-0.95-0.15 0.1-0.333 0.08-0.778-0.05-0.988-0.16-0.257-0.31-0.082-0.44 0.529-0.19 0.877-0.2 0.868-0.24-0.248-0.03-1.063-0.09-1.142-0.72-0.936-1.56 0.515-1.88 0.351-2.1-1.097-0.27-1.78-0.31-5.285-0.06-5.932 0.15-0.4046 0.25-0.425 0.45-0.101 0.19 0.303 0.26 0.31 0.26 0.025 0.01-0.209 0.15-0.3801 0.33-0.3801 0.19 0 0.24 0.2594 0.13 0.6081-0.11 0.349-0.05 0.609 0.14 0.609 0.17 0 0.32-0.214 0.32-0.475 0-0.26 0.14-0.389 0.3-0.286 0.17 0.104 0.31-0.084 0.31-0.4158 0-0.7029 0.71-0.9316 1.91-0.6104 0.5 0.1358 0.77 0.1126 0.66-0.0578-0.1-0.1656 0.65-0.2846 1.8-0.2846 1.09 0 2.07 0.1462 2.18 0.3249s0.38 0.2579 0.59 0.1759 0.53-0.0047 0.71 0.1717c0.18 0.1774 0.57 0.2184 0.87 0.0917 0.31-0.1261 1.24-0.2906 2.07-0.3656s1.67-0.2626 1.85-0.417c0.19-0.1543 0.43-0.1916 0.54-0.083 0.32 0.319-0.42 1.0109-1.13 1.0492-0.52 0.0284-0.54 0.0629-0.11 0.1751 0.3 0.0767 0.46 0.2667 0.36 0.4207-0.28 0.465 0.39 0.317 0.91-0.197 0.53-0.5279 2.64-0.7554 3.82-0.4115 0.54 0.1565 0.23 0.2302-1.06 0.2525-1.45 0.025-2.09 0.204-3.08 0.867-1.03 0.683-1.19 0.904-0.86 1.212 0.23 0.207 0.62 0.295 0.88 0.196 0.26-0.1 0.47-0.03 0.47 0.155s-0.23 0.337-0.51 0.337-0.73 0.208-1.02 0.463c-0.63 0.572-1.51 0.282-1.51-0.496 0-0.317-0.2-0.576-0.43-0.576-0.61 0-1.52 0.954-1.14 1.189 0.18 0.108-0.07 0.69-0.58 1.378-0.49 0.656-0.9 0.996-0.91 0.758-0.02-0.262-0.13-0.192-0.29 0.174-0.36 0.837-0.36 1.134 0 0.912 0.26-0.158 0.5 1.756 0.34 2.684-0.03 0.138 0.08 0.174 0.23 0.08 0.33-0.205 0.65 0.742 0.82 2.407 0.09 0.899 0.04 1.058-0.16 0.609-0.15-0.335-0.28-0.917-0.29-1.293-0.03-0.822-0.63-0.931-0.63-0.114 0 0.313 0.22 1.169 0.49 1.901s0.48 1.646 0.46 2.032c-0.02 0.456 0.09 0.626 0.31 0.485 0.22-0.131 0.27-0.081 0.14 0.127-0.29 0.476 0.48 1.835 1.76 3.097 1.11 1.097 1.38 1.802 0.72 1.856-0.21 0.017-0.89 0.078-1.52 0.135-0.62 0.057-1.2-0.014-1.29-0.157zm-2.29-2.442c0-0.167-0.21-0.304-0.47-0.304s-0.39 0.137-0.29 0.304 0.32 0.304 0.48 0.304c0.15 0 0.28-0.137 0.28-0.304zm-2.66-15.818c0.31 0 0.48-0.137 0.38-0.304-0.26-0.426 0.26-0.38 0.7 0.061 0.28 0.284 0.37 0.212 0.37-0.323 0-0.539-0.15-0.668-0.69-0.593-0.51 0.071-0.71-0.075-0.78-0.59-0.13-0.9382-0.67-0.8692-0.59 0.076 0.03 0.419 0.17 0.761 0.3 0.761 0.5 0 0.21 0.545-0.37 0.696-0.34 0.088-0.61 0.337-0.61 0.553 0 0.306 0.08 0.312 0.36 0.028 0.2-0.2 0.62-0.365 0.93-0.365zm2.3-0.988c-0.47-1.3823-0.55-1.4011-0.55-0.127 0 0.771 0.14 1.115 0.44 1.115 0.36 0 0.38-0.174 0.11-0.988zm4.94-0.176c-0.85-0.128-1.63 0.164-1.4 0.527 0.1 0.165 0.56 0.134 1.12-0.074 0.84-0.312 0.87-0.365 0.28-0.453zm-8.53-0.339c0-0.41-0.56-0.6951-0.92-0.471-0.17 0.105-0.23 0.319-0.13 0.475 0.22 0.369 1.05 0.367 1.05-0.004zm3.4-1.442c-0.22-0.0879-0.48-0.0771-0.58 0.024s0.08 0.1729 0.4 0.1597c0.35-0.0146 0.42-0.0866 0.18-0.1837zm11.43 21.286c0.37-0.072 0.99-0.072 1.37 0 0.37 0.073 0.06 0.132-0.69 0.132s-1.06-0.059-0.68-0.132zm-16.84-1.875c0.02-0.412 0.22-0.812 0.44-0.887 0.3-0.099 0.36 0.041 0.21 0.507-0.12 0.382-0.07 0.645 0.12 0.645 0.18 0 0.32 0.128 0.32 0.285s-0.25 0.266-0.56 0.243c-0.39-0.03-0.55-0.269-0.53-0.793zm33.72 0.459c-0.85-0.42-0.89-0.808-0.08-0.65 0.8 0.152 1.22 0.422 1.22 0.778 0 0.345-0.24 0.318-1.14-0.128zm-13.25-0.118c-0.36-0.636-0.5-1.902-0.21-1.902 0.17 0 0.45-0.344 0.61-0.765 0.26-0.675 1.34-1.364 2.14-1.364 0.15 0 0.5 0.336 0.77 0.747 0.56 0.86 0.32 1.619-0.34 1.071-0.33-0.273-0.45-0.123-0.61 0.749-0.29 1.545-0.89 1.816-0.66 0.294 0.17-1.08 0.15-1.135-0.25-0.606-0.25 0.333-0.36 0.884-0.25 1.292 0.14 0.573 0.05 0.712-0.45 0.712-0.34 0-0.68-0.103-0.75-0.228zm4.86-0.888c-0.33-0.332-0.23-1.014 0.15-1.014 0.2 0 0.27 0.091 0.16 0.201s-0.05 0.383 0.13 0.608c0.34 0.408-0.06 0.591-0.44 0.205zm-16.01-1.447c-0.46-1.189-0.37-1.376 0.18-0.376 0.25 0.475 0.39 0.939 0.3 1.031-0.1 0.092-0.31-0.203-0.48-0.655zm19.62 0.448c-0.25-0.405 1-1.511 1.72-1.525 0.8-0.016 2.07 0.65 2.07 1.085 0 0.305-0.18 0.295-0.84-0.047-1.09-0.573-1.28-0.556-2.07 0.191-0.45 0.42-0.75 0.519-0.88 0.296zm-2.4-0.894c0.26-1.077 0.38-1.25 0.86-1.25 0.46 0 0.91 1.047 0.64 1.482-0.09 0.149-0.51 0.336-0.93 0.416-0.68 0.131-0.74 0.069-0.57-0.648zm-23.85-0.083c-0.21-0.206-0.38-0.583-0.38-0.836 0-0.399 0.07-0.395 0.49 0.03 0.27 0.271 0.44 0.648 0.38 0.838-0.08 0.249-0.22 0.24-0.49-0.032zm37.26-0.454c0.2-0.083 0.62-0.088 0.91-0.011 0.3 0.077 0.13 0.145-0.37 0.151-0.5 0.007-0.75-0.056-0.54-0.14zm-42.3-1.524c-0.31-0.303-0.25-1.38 0.06-1.189 0.35 0.216 0.66 1.392 0.37 1.392-0.13 0-0.32-0.091-0.43-0.203zm28.01-1.391c-0.77-0.877-1.36-1.641-1.3-1.698 0.26-0.263 1.38 0.65 1.98 1.615 0.48 0.774 0.88 1.074 1.47 1.09 0.73 0.019 0.75 0.048 0.21 0.283-0.34 0.143-0.69 0.271-0.78 0.283-0.1 0.011-0.81-0.696-1.58-1.573zm-23.76-0.079c0.11-0.289-0.01-0.456-0.32-0.456-0.27 0-0.49-0.103-0.49-0.229s0.72-0.247 1.6-0.269 1.43 0.024 1.22 0.102-0.38 0.321-0.38 0.54c0 0.411-0.65 0.768-1.39 0.768-0.25 0-0.35-0.186-0.24-0.456zm-3.64-0.659c-0.12-0.112-0.2-0.557-0.18-0.989 0.02-0.771 0.03-0.769 0.29 0.112 0.28 0.925 0.24 1.23-0.11 0.877zm35.84-1.014c-0.1-0.167-0.04-0.304 0.13-0.304 0.18 0 0.33 0.137 0.33 0.304s-0.07 0.304-0.14 0.304-0.22-0.137-0.32-0.304zm-33.01-0.743c0-0.534 0.19-0.613 0.45-0.191 0.09 0.156 0.03 0.369-0.14 0.475-0.17 0.104-0.31-0.023-0.31-0.284zm18.81-2.331c-0.48-0.536-0.75-1.115-0.64-1.387 0.35-0.926 1.52-1.825 2.24-1.716 0.9 0.138 1.16 0.397 0.4 0.397-1.03 0-1.99 0.89-1.89 1.755 0.05 0.431 0.25 0.834 0.44 0.896 0.22 0.071 0.28-0.183 0.18-0.709-0.31-1.637 2.11-2.245 3.66-0.917 0.46 0.395 0.84 0.818 0.84 0.939s-0.43-0.135-0.94-0.568c-0.52-0.433-1.14-0.787-1.39-0.787-0.73 0-1.63 0.593-1.63 1.075 0 0.582 0.49 0.575 0.72-0.011 0.26-0.682 1.61-0.555 2.14 0.202 0.56 0.802 0.38 1.167-0.58 1.167-0.4 0-0.79 0.107-0.87 0.238s-0.53 0.262-1.01 0.291c-0.61 0.039-1.09-0.208-1.67-0.865zm4.79 0.669c-0.1-0.152 0.1-0.204 0.44-0.117 0.71 0.186 0.8 0.393 0.17 0.393-0.25 0-0.52-0.125-0.61-0.276zm-17.06-0.333c-0.1-0.167-0.04-0.304 0.14-0.304s0.32 0.137 0.32 0.304-0.06 0.304-0.13 0.304c-0.08 0-0.22-0.137-0.33-0.304zm18.41-0.621c0-0.175-0.34-0.682-0.75-1.127-0.41-0.444-0.68-0.878-0.6-0.964 0.21-0.202 1.96 1.668 1.96 2.087 0 0.177-0.14 0.321-0.31 0.321-0.16 0-0.3-0.143-0.3-0.317zm1.6-1.101c-0.21-0.085-0.39-0.294-0.39-0.465 0-0.18 0.23-0.216 0.54-0.086 0.29 0.124 1.01 0.329 1.59 0.454l1.07 0.228-1.22 0.011c-0.67 0.006-1.39-0.058-1.59-0.142zm-1.22-3.651c-0.21-0.084-0.38-0.295-0.38-0.469 0-0.207 0.14-0.199 0.41 0.023 0.22 0.186 0.49 0.248 0.6 0.138s0.2-0.04 0.2 0.155c0 0.372-0.2 0.409-0.83 0.153zm-3.27-0.851c-2.09-0.332-3.98-1.046-2.83-1.067 0.28-0.005 0.58 0.108 0.67 0.253 0.09 0.144 1.07 0.334 2.17 0.422 1.81 0.146 2.59 0.363 2.24 0.632-0.07 0.055-1.08-0.053-2.25-0.24zm-5.02-1.667c0-0.177 0.14-0.322 0.3-0.322 0.17 0 0.31 0.06 0.31 0.134s-0.14 0.219-0.31 0.322c-0.16 0.104-0.3 0.043-0.3-0.134zm1.91 0.103c0.1-0.101 0.36-0.112 0.58-0.024 0.24 0.097 0.17 0.169-0.18 0.183-0.32 0.014-0.5-0.058-0.4-0.159zm-21.38-1.3374c0.59-0.3812 0.91-0.3812 0.91 0 0 0.1673-0.3 0.3021-0.68 0.2995-0.55-0.0038-0.6-0.0611-0.23-0.2995zm18.17 0.1187c-0.1-0.1028-0.57-0.2236-1.04-0.2686-1.13-0.108-1.92-0.4509-1.92-0.8325 0-0.1699 0.22-0.1262 0.49 0.0971 0.42 0.3451 0.55 0.3184 0.92-0.1776 0.41-0.5705 0.43-0.5685 0.89 0.0875 0.52 0.7388 1.12 0.9151 0.87 0.2537-0.12-0.3084 0.04-0.378 0.63-0.2663 0.43 0.0832 0.75 0.1698 0.7 0.1926s-0.37 0.2798-0.72 0.5711c-0.35 0.2914-0.72 0.4457-0.82 0.343zm-11.09-0.9109c0.1-0.1011 0.36-0.1119 0.58-0.024 0.25 0.0971 0.17 0.1692-0.18 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm4.95-0.5006c0.29-0.9301 0.39-1.0064 0.81-0.5881 0.28 0.272 0.28 0.3599 0.01 0.3599-0.2 0-0.28 0.2054-0.18 0.4563 0.11 0.2936-0.01 0.4563-0.34 0.4563-0.38 0-0.46-0.1634-0.3-0.6844zm-6.78 0.1964c0.11-0.101 0.37-0.1119 0.59-0.024 0.24 0.0971 0.17 0.1692-0.19 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm3.96-1.0254c-0.05-0.7347 0.11-0.771 0.72-0.1596 0.25 0.2509 0.39 0.4563 0.31 0.4563s-0.34 0.0718-0.57 0.1595c-0.26 0.1-0.43-0.0704-0.46-0.4562zm-9.59-1.2487c0.1-0.4113 0.24-0.5492 0.32-0.3213 0.07 0.2194-0.01 0.5436-0.19 0.7203-0.23 0.2258-0.27 0.107-0.13-0.399zm1.98-0.2695c-0.29-0.4548-0.71-0.6186-1.6-0.6186-1.19 0-1.22-0.0203-1.22-1.0972 0-0.8755 0.1-1.0599 0.49-0.9126 0.26 0.1016 0.64 0.189 0.83 0.1943 0.2 0.0054 0.12 0.1898-0.17 0.4099-0.49 0.3701-0.47 0.4264 0.24 0.7489 0.62 0.2841 0.8 0.2645 0.94-0.1056 0.18-0.4727 0.93-0.5875 1.76-0.2698 0.86 0.33 0.52 0.8127-0.44 0.6214-0.85-0.17-1.32 0.2222-0.57 0.4729 0.19 0.0622 0.29 0.352 0.23 0.644-0.1 0.4777-0.15 0.4689-0.49-0.0876zm2.13-1.1066c0.11-0.1011 0.37-0.1119 0.59-0.024 0.24 0.0971 0.17 0.1692-0.19 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm3.01-1.033c0-0.4182 0.07-0.5893 0.15-0.3802 0.09 0.2091 0.09 0.5513 0 0.7605-0.08 0.2091-0.15 0.038-0.15-0.3803z" transform="translate(10 1332.7)"/>
- <rect id="d0e135" display="none" height="1e3px" width="288" y="1475.9" x="10"/>
+ <text id="tracing-f05-fr.svgtext2879" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1322.7)" xml:space="preserve" line-height="100.00000%" font-size="6" y="128.14566" x="81.327339" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f05-fr.svgtspan2880" y="128.14566" x="81.327339" sodipodi:role="line">Image originale</tspan></text>
+ <text id="tracing-f05-fr.svgtext2882" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1322.7)" xml:space="preserve" line-height="100.00000%" font-size="6" y="124.44067" x="227.33034" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f05-fr.svgtspan2883" y="124.44067" x="227.33034" sodipodi:role="line">Image vectorisée / Chemin résultant</tspan><tspan id="tracing-f05-fr.svgtspan2893" y="130.44067" x="227.33034" sodipodi:role="line">(1 551 nœuds)</tspan></text>
+ <image id="tracing-f05-fr.svgimage1651" sodipodi:absref="/oldguitar.jpg" xlink:href="oldguitar.jpg" transform="translate(10 1322.7)" height="115.89" width="83.347" y=".000066406" x="39.654"/>
+ <path id="tracing-f05-fr.svgpath1653" d="m185.42 89.583v-26.312l0.69-0.042 0.68-0.041-0.69-0.133-0.69-0.133 0.02-14.959 0.03-14.959 0.95-0.068c0.52-0.037 1.06-0.242 1.19-0.456 0.18-0.284 0.25-0.245 0.25 0.144 0.01 0.921 1.05 0.497 1.31-0.532 0.11-0.467 0.16-0.413 0.18 0.228 0.03 0.702 0.17 0.836 0.88 0.832 0.63-0.004 0.72-0.073 0.38-0.288-0.24-0.156-0.36-0.366-0.26-0.466 0.1-0.101 0.38 0.011 0.62 0.249 0.45 0.456 4.62 0.633 4.34 0.185-0.08-0.128 0.03-0.311 0.24-0.407 0.21-0.097 0.07-0.099-0.31-0.006-0.37 0.093-0.68 0.047-0.68-0.104 0-0.514 0.31-0.583 1.69-0.373 0.75 0.114 1.45 0.093 1.53-0.049 0.22-0.357 0.73-0.324 0.73 0.047 0 0.167-0.2 0.304-0.45 0.304s-0.46 0.127-0.46 0.283c0 0.155-0.31 0.341-0.68 0.411-0.38 0.071-0.17 0.127 0.47 0.124 0.63-0.003 1.22-0.12 1.31-0.26 0.08-0.14 0.43-0.254 0.76-0.254 0.34 0 0.53-0.129 0.43-0.286-0.09-0.157 0.07-0.294 0.37-0.304 1.91-0.063 3.68-0.251 4.34-0.46 0.42-0.133 0.66-0.135 0.53-0.004-0.12 0.131 0.07 0.446 0.44 0.7 0.77 0.54 6.33 0.862 6.33 0.368 0-0.165-0.21-0.22-0.46-0.124s-0.45 0.046-0.45-0.111-0.21-0.286-0.46-0.286-0.46 0.091-0.46 0.203c0 0.111-0.21 0.202-0.47 0.202s-0.42-0.206-0.36-0.481c0.06-0.31 0.37-0.454 0.85-0.405 0.58 0.06 0.64 0.012 0.29-0.223-0.67-0.438-1.26-0.377-1.66 0.171-0.27 0.374-0.62 0.432-1.55 0.258-1.15-0.217-1.17-0.238-0.46-0.552 0.55-0.246 0.76-0.234 0.86 0.047 0.17 0.509 0.68 0.475 0.68-0.044 0-0.863 1.73-0.81 4.02 0.122 1.22 0.497 2.3 0.903 2.4 0.904 0.36 0.002 0.51-3.488 0.16-3.709-0.18-0.116-0.23-0.307-0.12-0.424 0.43-0.428 1.2 0.59 1.04 1.379-0.14 0.706 0.36 1.842 0.81 1.842 0.1 0 0.34-0.513 0.52-1.141 0.53-1.745 1.51-2.804 2.32-2.495 0.53 0.2 0.64 0.438 0.53 1.138-0.2 1.236 0.5 1.702 2.63 1.757l1.78 0.045-0.17-0.945c-0.1-0.519-0.57-1.45-1.05-2.067-0.48-0.618-0.88-1.388-0.88-1.712 0-0.842-0.62-1.243-2.25-1.468-0.9-0.123-1.77-0.489-2.33-0.98-1.23-1.081-1.12-1.38 0.24-0.65 1.28 0.686 2.82 0.809 2.82 0.226 0-0.211-0.31-0.731-0.68-1.156-0.9-1.012-1.45-1.989-1.45-2.575 0-0.506 0.39-0.288 1.43 0.807 0.26 0.272 0.69 0.436 0.96 0.365 0.31-0.079 0.62 0.141 0.8 0.57 0.31 0.694 3.24 2.095 4.56 2.181 0.34 0.021 0.92 0.347 1.29 0.724l0.67 0.684h-0.69c-0.37 0-0.81 0.114-0.97 0.253s-0.9 0.425-1.64 0.636c-1.57 0.448-1.17 0.985 0.54 0.709 0.9-0.147 1.03-0.097 0.87 0.331-0.14 0.354-0.03 0.504 0.35 0.504 0.56 0 1.86 1.176 1.88 1.693 0 0.157 0.34 0.524 0.74 0.817l0.73 0.533 0.22-1.422c0.23-1.58-0.03-6.439-0.43-7.856l-0.26-0.913-0.21 1.141c-0.12 0.627-0.35 1.141-0.5 1.141-0.16 0-1.08-0.42-2.04-0.932-1.75-0.928-3.12-2.223-3.13-2.947 0-0.556-0.93-0.464-1.37 0.135-0.35 0.476-0.42 0.478-0.87 0.02-0.36-0.357-0.4-0.558-0.15-0.714 0.25-0.152 0.18-0.348-0.22-0.645-0.54-0.397-0.52-0.416 0.27-0.276 0.74 0.133 0.87 0.041 1.02-0.743 0.24-1.181 0.57-1.143 0.56 0.065 0 0.549 0.18 1.021 0.42 1.104 0.24 0.079 0.35 0.013 0.25-0.148-0.1-0.162 0.01-0.293 0.26-0.293 0.24 0 0.44 0.114 0.44 0.253s0.32 0.254 0.7 0.254 0.85 0.153 1.04 0.342c0.41 0.411 3.13 0.08 3.13-0.381 0-0.694-0.64-1.452-1.08-1.282-0.26 0.098-0.76-0.078-1.11-0.392-0.55-0.48-0.62-0.49-0.47-0.068 0.14 0.381-0.04 0.534-0.74 0.636-1.58 0.233-2.38-0.058-2.38-0.868 0-0.425 0.19-0.741 0.45-0.763 0.59-0.049 0.75-0.095 1.75-0.511 0.46-0.191 1.08-0.26 1.37-0.154 0.4 0.145 0.35-0.007-0.21-0.626-0.41-0.45-0.93-0.75-1.14-0.667-0.22 0.083-0.4-0.049-0.4-0.295 0-0.771-0.5-0.601-1.91 0.642-0.21 0.181-0.54 0.275-0.73 0.21-0.2-0.066-0.66 0.175-1.02 0.536-0.39 0.392-0.89 0.594-1.23 0.503-0.32-0.083-0.58-0.062-0.58 0.048s-0.58 0.2-1.3 0.2c-0.71 0-1.36 0.081-1.44 0.18s-0.63 0.271-1.22 0.383l-1.06 0.202 0.91-0.609c0.5-0.335 0.74-0.609 0.52-0.611-0.32-0.001-0.32-0.082 0-0.439 0.34-0.381 0.44-0.377 0.75 0.03 0.73 0.946 4.33-0.287 6.35-2.173 0.5-0.46 1.99-1.36 3.33-2.0001 1.34-0.6404 3.53-1.7571 4.87-2.4814 2.63-1.4232 2.78-1.4433 7.36-1.0003 2.46 0.2383 2.49 0.2327 2.67-0.4871 0.1-0.4005 0.14-1.7548 0.1-3.0096l-0.09-2.2814 8.67-0.0812c7.53-0.0706 8.71-0.0196 9.01 0.3891 0.3 0.4121 0.37 0.4143 0.52 0.0178 0.14-0.3777 0.87-0.4354 4.37-0.3481 2.31 0.0575 4.3 0.1203 4.43 0.1395 0.17 0.0259 0.12 95.017-0.06 113.12l-0.02 2.5h-41.52-41.53v-26.307zm6.99 25.117c0.42-0.78 0.4-0.93-0.11-0.93-0.4 0-0.79 0.61-0.79 1.24 0 0.49 0.58 0.29 0.9-0.31zm2.36-1.64c0.14-1.09-0.08-1.03-0.49 0.12-0.24 0.69-0.23 0.9 0.03 0.82 0.19-0.07 0.4-0.49 0.46-0.94zm1.18-0.12c-0.1-0.11-0.17 0.07-0.16 0.39 0.02 0.36 0.09 0.43 0.18 0.19 0.09-0.22 0.08-0.48-0.02-0.58zm-2.31-0.52c0-0.4 0.08-0.98 0.18-1.29 0.13-0.4 0-0.34-0.45 0.2-0.74 0.9-0.84 1.83-0.19 1.83 0.28 0 0.46-0.29 0.46-0.74zm-1.8 0.2c0.11-1.07 1.02-3.42 1.34-3.43 0.17 0 0.56-0.55 0.86-1.21 0.31-0.67 0.7-1.21 0.88-1.21 0.17 0 0.78-0.41 1.35-0.91 0.57-0.51 0.94-0.92 0.82-0.92s0.24-0.34 0.8-0.76c0.57-0.41 1.14-0.92 1.27-1.13 0.17-0.28 0.32-0.29 0.57-0.05 0.55 0.56 2.21 0.04 2.71-0.86 0.47-0.82 0.47-0.78-0.59-3.028-0.39-0.83-0.21-2.381 0.28-2.381 0.55 0-0.87-2.327-1.62-2.672-0.69-0.314-0.84-0.271-1.26 0.37-0.26 0.399-0.86 2.141-1.33 3.871-0.87 3.19-1.69 5.25-2.38 5.98-0.21 0.22-0.38 0.56-0.38 0.75 0 0.42-1.76 1.98-2.51 2.22-0.63 0.2-1.28 1.36-1.59 2.83-0.17 0.79-0.14 0.97 0.16 0.79 0.39-0.25 0.34 0.23-0.17 1.45-0.15 0.38-0.07 0.53 0.27 0.53 0.27 0 0.5-0.1 0.52-0.23zm55.06-3.05c-0.18-0.06-0.33-0.44-0.33-0.85 0-0.45-0.18-0.73-0.46-0.73-0.25 0-0.46 0.2-0.46 0.45s0.14 0.46 0.31 0.46c0.16 0 0.3 0.13 0.3 0.28 0 0.16 0.16 0.67 0.36 1.14l0.36 0.86 0.13-0.75c0.07-0.41-0.03-0.8-0.21-0.86zm-1.73-0.17c-0.1-0.27-0.31-0.42-0.46-0.33s-0.1 0.35 0.11 0.57c0.47 0.51 0.6 0.42 0.35-0.24zm-1.33-1.99c-0.2-0.38-0.51-0.55-0.79-0.44-0.4 0.15-0.36 0.3 0.22 0.92 0.76 0.8 1.1 0.51 0.57-0.48zm2.28-1.54c-0.07-0.87-0.77-1.24-0.77-0.41 0 0.31-0.21 0.87-0.47 1.24-0.7 0.99-0.23 1.46 0.61 0.62 0.39-0.41 0.66-1.02 0.63-1.45zm-2.6-1.19c0-0.15-0.2-0.44-0.45-0.65-0.5-0.41-0.56-0.31-0.27 0.43 0.19 0.51 0.72 0.67 0.72 0.22zm2.44-0.36c0-0.18-0.14-0.24-0.31-0.14-0.16 0.11-0.3 0.25-0.3 0.33 0 0.07 0.14 0.13 0.3 0.13 0.17 0 0.31-0.15 0.31-0.32zm-7.49-2.42c-0.17-0.17-0.76-0.44-1.32-0.6-0.98-0.28-0.99-0.28-0.46 0.31 0.3 0.33 0.89 0.6 1.31 0.6 0.53 0 0.68-0.1 0.47-0.31zm6.02-0.21c-0.22-0.08-0.48-0.07-0.58 0.03s0.08 0.17 0.4 0.16c0.35-0.02 0.43-0.09 0.18-0.19zm-8.57-0.59c0-0.35-1.05-1-1.62-1.01-0.3-0.01-0.47-0.136-0.38-0.285 0.1-0.15-0.03-0.351-0.28-0.447-0.61-0.231-0.59-0.802 0.02-0.802 0.79 0 0.3-0.752-0.56-0.854-0.43-0.052-0.97-0.314-1.19-0.583-0.36-0.435-0.33-0.449 0.26-0.134 0.37 0.195 1.03 0.354 1.48 0.354 0.71 0 0.8 0.102 0.67 0.768-0.17 0.883 0.22 1.288 0.6 0.618 0.27-0.485 1.61-0.328 1.61 0.189 0 0.157 0.13 0.202 0.3 0.098 0.17-0.103 0.31-0.043 0.31 0.134 0 0.178 0.4 0.323 0.88 0.323 0.49 0 0.94 0.129 0.99 0.287 0.06 0.157 0.79 0.464 1.62 0.674 0.84 0.22 1.6 0.5 1.69 0.63 0.27 0.37 1.83-0.48 1.67-0.91-0.11-0.287 0.17-0.333 1.14-0.186 0.71 0.106 1.45 0.336 1.66 0.496 0.28 0.21 0.38 0.16 0.38-0.2 0-0.953-2.33-1.287-3.49-0.503-0.38 0.253-1.8 0.209-3.2-0.108-2.36-0.535-8.33-4.086-15.66-9.314-3.19-2.274-5.35-3.293-8.78-4.134-1.7-0.417-3.5-0.913-4-1.101-1.7-0.638-5.11-2.815-5.25-3.35-0.09-0.344-0.79-0.722-1.98-1.072-1.61-0.474-1.78-0.596-1.4-0.989 0.48-0.485 1.79-2.549 1.79-2.81 0-0.315-2.62 0.421-4.18 1.176-0.88 0.423-1.73 0.683-1.91 0.578-1.02-0.631-2.66 1.757-3.38 4.912-0.32 1.391-0.29 1.68 0.22 2.563 0.58 0.984 2.19 2.146 2.63 1.895 0.13-0.071 0.23 0.063 0.23 0.298 0 0.236 0.26 0.729 0.58 1.098l0.58 0.67 0.2-0.924c0.26-1.151 0.64-1.407 1.23-0.82 0.49 0.491 0.59 0.823 0.22 0.765-0.73-0.116-1.29 0.096-1.29 0.493 0 0.251 0.14 0.456 0.3 0.456 0.17 0 0.31-0.137 0.31-0.304 0-0.168 0.14-0.304 0.3-0.304 0.17 0 0.31 0.202 0.31 0.45 0 0.519 1.4 0.926 2.73 0.793 0.41-0.041 0.41-0.088 0-0.424-0.25-0.207-0.6-0.648-0.78-0.978-0.19-0.331-0.7-0.78-1.15-0.999-0.44-0.218-0.8-0.537-0.8-0.708 0-0.191-0.37-0.231-0.95-0.103-0.66 0.145-0.89 0.106-0.75-0.128 0.12-0.185 0.44-0.341 0.73-0.347 0.46-0.008 0.45-0.053-0.05-0.436-0.69-0.519-0.39-1.195 0.35-0.813 0.28 0.146 0.69 0.203 0.89 0.128 0.21-0.075 0.38 0.08 0.38 0.345s0.25 0.482 0.55 0.482c1.01 0 1.85 0.869 1.95 2.034 0.05 0.612 0.26 1.169 0.47 1.239 0.3 0.097 0.31-0.066 0.07-0.714-0.25-0.647-0.22-0.938 0.11-1.267 0.36-0.368 0.51-0.312 1.07 0.398 0.36 0.454 0.65 1.021 0.65 1.26s0.24 0.41 0.53 0.38c0.97-0.098 1.22 0.01 1.38 0.589 0.11 0.434 0.34 0.536 0.94 0.421 0.88-0.167 0.97-0.421 0.48-1.325-0.39-0.727-0.13-1.227 0.51-0.982 0.35 0.133 0.37 0.241 0.1 0.409-0.2 0.126-0.26 0.396-0.13 0.607 0.17 0.277 0.38 0.183 0.79-0.346 0.31-0.399 0.56-0.573 0.57-0.387 0.02 1.031 4.72 4.386 5.49 3.914 0.16-0.102 0.53 0.045 0.81 0.325 0.48 0.478 0.52 0.469 0.75-0.137l0.24-0.648 0.77 0.668c0.42 0.367 0.76 0.834 0.76 1.037 0 0.51-0.94 0.826-1.32 0.444-0.52-0.518-0.85-0.357-0.75 0.362 0.08 0.528 0.31 0.687 1.09 0.725 0.54 0.027 1.16 0.185 1.37 0.353 0.2 0.168 0.85 0.401 1.44 0.518 0.59 0.118 1.82 0.465 2.74 0.772s2.35 0.766 3.19 1.02c0.84 0.255 2.34 0.837 3.35 1.295 1 0.453 1.91 0.813 2.02 0.783 0.11-0.02 0.37 0.16 0.57 0.41 0.37 0.44 1.21 0.62 1.21 0.25zm-5.78-3.456c0-0.168 0.14-0.305 0.3-0.305 0.17 0 0.31 0.137 0.31 0.305 0 0.167-0.14 0.304-0.31 0.304-0.16 0-0.3-0.137-0.3-0.304zm-1.22-0.609c0-0.167-0.38-0.304-0.86-0.304-0.47 0-0.96-0.103-1.09-0.228-0.23-0.228-0.38-0.271-1.24-0.342-0.54-0.045-0.65-1.863-0.12-1.863 0.21 0 0.26 0.289 0.15 0.741-0.17 0.686-0.08 0.757 1.2 0.949 1.26 0.189 3.23 1.318 2.34 1.341-0.21 0.006-0.38-0.127-0.38-0.294zm-4.94-1.242c-0.3-0.171-0.67-0.227-0.84-0.124-0.41 0.254-0.72-0.634-0.45-1.295 0.19-0.473 0.24-0.456 0.47 0.152 0.15 0.376 0.46 0.684 0.7 0.684s0.51 0.205 0.61 0.456c0.2 0.533 0.2 0.533-0.49 0.127zm-2.36-1.325c0-0.535 0.19-0.613 0.45-0.192 0.09 0.156 0.03 0.37-0.14 0.475s-0.31-0.023-0.31-0.283zm2.36-0.068c0.21-0.084 0.55-0.084 0.76 0 0.21 0.085 0.04 0.154-0.38 0.154s-0.59-0.069-0.38-0.154zm-21.83-4.495c0-0.074 0.14-0.219 0.31-0.322 0.17-0.104 0.3-0.043 0.3 0.134s-0.13 0.322-0.3 0.322-0.31-0.06-0.31-0.134zm2.54-3.073c-0.27-0.701-0.02-0.739 0.64-0.1 0.52 0.511 0.53 0.569 0.06 0.569-0.28 0-0.6-0.211-0.7-0.469zm1.47 11.779c0.73-0.304 2.12-0.727 3.09-0.939 0.98-0.213 1.7-0.459 1.61-0.547-0.09-0.089-1.53-0.339-3.2-0.557-1.67-0.217-3.36-0.492-3.74-0.61-0.39-0.118-0.6-0.107-0.47 0.026 0.12 0.133 0 0.495-0.28 0.806-0.39 0.432-0.43 0.647-0.16 0.922 0.2 0.196 0.36 0.604 0.36 0.905 0 0.72 1.07 0.718 2.79-0.006zm12.42-3.575c0-0.372-0.88-1.022-1.64-1.213-1.1-0.277-0.98 0.217 0.2 0.833 1.06 0.553 1.44 0.652 1.44 0.38zm-4.26-1.043c0-0.167-0.13-0.304-0.3-0.304s-0.31 0.137-0.31 0.304c0 0.168 0.14 0.305 0.31 0.305s0.3-0.137 0.3-0.305zm1.45-0.38c-0.15-0.431-0.64-0.383-0.79 0.076-0.05 0.167 0.13 0.304 0.41 0.304s0.45-0.171 0.38-0.38zm-7.53-2.966c0-0.167-0.21-0.304-0.46-0.304s-0.45 0.137-0.45 0.304c0 0.168 0.2 0.305 0.45 0.305s0.46-0.137 0.46-0.305zm23.57-8.213c-0.1-0.167-0.25-0.304-0.32-0.304s-0.13 0.137-0.13 0.304c0 0.168 0.14 0.304 0.32 0.304s0.24-0.136 0.13-0.304zm-3.34-0.608c-0.11-0.167-0.33-0.304-0.5-0.304-0.16 0-0.21 0.137-0.11 0.304s0.32 0.304 0.49 0.304 0.22-0.137 0.12-0.304zm13.27-0.814c-0.36-0.616-0.45-0.419-0.16 0.346 0.11 0.272 0.26 0.43 0.34 0.352 0.07-0.079-0.01-0.392-0.18-0.698zm-14.5 0.24c-0.16-0.149-0.64-0.36-1.05-0.469l-0.76-0.199 0.76 0.458c0.84 0.511 1.51 0.644 1.05 0.21zm3.51-0.661c0-0.157-0.14-0.286-0.31-0.286-0.16 0-0.3 0.213-0.3 0.474s0.14 0.39 0.3 0.287c0.17-0.104 0.31-0.317 0.31-0.475zm-5.63-0.286c-0.1-0.167-0.35-0.302-0.55-0.299-0.22 0.002-0.18 0.122 0.09 0.299 0.59 0.378 0.69 0.378 0.46 0zm17.49-0.735c0-0.237 0.17-0.511 0.38-0.608 0.3-0.142 0.31-0.214 0-0.355-0.26-0.121-0.09-0.464 0.54-1.088 0.5-0.501 0.9-1.072 0.9-1.268 0-0.264-0.06-0.266-0.23-0.01-0.16 0.246-0.35 0.208-0.67-0.134-0.39-0.426-0.38-0.458 0.08-0.28 0.32 0.121 0.52 0.055 0.53-0.17 0-0.234 0.11-0.202 0.29 0.085 0.24 0.378 0.4 0.39 0.91 0.074 0.5-0.308 0.62-0.308 0.61 0-0.02 0.587-0.78 1.466-1.06 1.214-0.14-0.123-0.17 0.003-0.07 0.279 0.12 0.329-0.01 0.553-0.37 0.648-0.38 0.098-0.55 0.401-0.52 0.914 0.06 0.939 0.32 0.801 1.23-0.645 1.4-2.226 2.58-7.879 1.75-8.392-0.24-0.149-0.34 0.437-0.34 1.986 0 1.209-0.11 2.096-0.23 1.97-0.24-0.241-0.28-0.406-0.34-1.412-0.03-0.344-0.16-0.554-0.3-0.465-0.15 0.089-0.24-0.48-0.2-1.264 0.03-0.784-0.13-2.037-0.35-2.786-0.23-0.748-0.34-1.608-0.24-1.911 0.11-0.344 0.02-0.55-0.22-0.547-0.54 0.006-1.45 0.592-0.94 0.599 0.21 0.002 0.38 0.133 0.38 0.289 0 0.157-0.56 0.278-1.25 0.268-0.69-0.009-1.34 0.123-1.44 0.293-0.26 0.407-0.95 0.49-1.79 0.216-0.81-0.26-0.92-1.053-0.16-1.081 0.41-0.015 0.38-0.084-0.15-0.294-0.37-0.152-0.68-0.425-0.68-0.607 0-0.183 0.13-0.248 0.3-0.144 0.45 0.277 0.37-0.623-0.17-1.911-0.26-0.622-0.43-1.157-0.38-1.189 0.25-0.157-2.46-3.324-3.88-4.539-1.1-0.939-1.56-1.53-1.43-1.855 0.13-0.355 0.91 0.291 3.01 2.51 2.37 2.506 2.94 3.304 3.51 4.946 0.39 1.076 0.87 2.024 1.08 2.106 0.21 0.081 0.31 0.27 0.22 0.42s-0.02 0.272 0.15 0.272c0.48 0 0.39-0.648-0.24-1.683-0.31-0.508-0.66-1.545-0.77-2.305-0.17-1.162-0.51-1.691-2.13-3.335-1.06-1.075-2.39-2.327-2.96-2.782-0.56-0.455-0.87-0.831-0.67-0.836s0.55 0.178 0.78 0.407c0.23 0.23 0.86 0.649 1.41 0.932 0.55 0.284 1.66 1.224 2.47 2.089 0.82 0.865 1.57 1.481 1.69 1.368 0.23-0.232-1.65-2.981-2.04-2.981-0.14 0-0.26-0.197-0.26-0.438s-0.82-0.877-1.83-1.414c-1-0.537-1.78-1.023-1.72-1.082 0.06-0.058 0.74 0.112 1.53 0.379 1.48 0.504 2.06 1.028 4.14 3.696 0.68 0.879 1.38 1.597 1.54 1.597 0.59 0 0.28-0.816-0.64-1.692-0.52-0.491-1.28-1.467-1.69-2.167-0.65-1.1-1.02-1.363-2.7-1.921-2.94-0.978-4.42-2.433-2.49-2.433 0.75 0 1.06-0.565 2.38-4.359 0.45-1.309 0.9-2.462 1-2.56s0.18-0.35 0.18-0.559 0.3-1.042 0.66-1.85c0.67-1.504 1.46-3.494 1.46-3.733 0.01-0.074-0.27 0.166-0.61 0.532-0.83 0.887-1.34 0.852-0.75-0.052 0.26-0.394 0.38-0.942 0.28-1.216-0.15-0.398 0.01-0.507 0.83-0.538 0.93-0.034 0.89-0.06-0.35-0.281-1.94-0.346-3.91-0.35-3.37-0.007 0.23 0.15 0.87 0.201 1.4 0.114 0.86-0.14 0.99-0.066 1.13 0.636 0.1 0.541 0.02 0.793-0.27 0.793-0.22 0-0.41 0.258-0.41 0.573 0 0.464-0.19 0.555-0.99 0.476-0.54-0.054-1.09-0.106-1.22-0.117-0.12-0.011-0.2-0.122-0.16-0.247 0.03-0.126-0.03-0.686-0.15-1.244-0.21-1.005-0.23-1.014-1.51-0.801-1.76 0.293-2.79 0.866-3.77 2.099-1.6 2.007-1.9 3.263-1.92 8.159-0.01 3.167-0.12 4.486-0.36 4.486-0.2 0-1.82 0.671-3.6 1.49-3.37 1.546-5.41 2.183-8.92 2.79-1.83 0.317-2.12 0.459-2.54 1.289-0.59 1.123-0.44 4.113 0.28 5.71 0.26 0.572 0.65 1.657 0.88 2.41 0.34 1.167 0.53 1.383 1.29 1.469 0.52 0.061 1.2-0.136 1.68-0.492 0.44-0.326 1.39-0.895 2.12-1.265 0.72-0.37 1.92-1.29 2.65-2.045s1.33-1.193 1.33-0.974c0 0.253 0.24 0.162 0.65-0.246 0.36-0.356 0.65-1.002 0.65-1.437 0-0.493 0.16-0.79 0.45-0.79 0.24 0 1.07-0.616 1.83-1.369 0.92-0.904 1.66-1.37 2.18-1.373 0.62-0.004 0.69-0.067 0.33-0.304-0.32-0.211-0.14-0.242 0.61-0.107 0.58 0.105 1.2 0.331 1.36 0.501 0.21 0.207 0.13 0.247-0.22 0.121-0.81-0.284-0.65 0.023 0.6 1.176 0.63 0.577 1.42 1.054 1.75 1.062 0.8 0.018 3.86 2.394 4.32 3.35 0.19 0.41 0.45 1.156 0.57 1.658l0.22 0.913-0.65-0.582c-0.36-0.319-0.74-0.496-0.85-0.392-0.36 0.366-0.18 1.762 0.31 2.3 0.27 0.301 0.49 0.686 0.49 0.856 0 0.481 1.09 1.344 1.37 1.088 0.14-0.126 0.15-0.051 0.03 0.165-0.13 0.217-0.08 0.573 0.1 0.793 0.31 0.375 0.69 2.798 0.69 4.395 0 0.521 0.1 0.624 0.34 0.381 0.5-0.504 0.82-0.405 0.82 0.255 0 0.325 0.14 0.675 0.3 0.779 0.4 0.245 0.4 1.278 0 1.526-0.17 0.106-0.46-0.228-0.64-0.743-0.18-0.514-0.46-0.935-0.62-0.935-0.4 0-0.01 1.226 0.61 1.928 0.27 0.308 0.5 0.719 0.5 0.913 0 0.541 0.88 2.33 1.14 2.33 0.13 0 0.23-0.194 0.23-0.431zm-0.4-2.199c-0.39-0.397-0.2-0.716 0.43-0.716 0.35 0 0.58 0.159 0.51 0.361-0.15 0.444-0.66 0.637-0.94 0.355zm0.1-2.407c0-0.261 0.13-0.39 0.3-0.286 0.17 0.103 0.31 0.316 0.31 0.474 0 0.157-0.14 0.286-0.31 0.286s-0.3-0.213-0.3-0.474zm3.52 0.211c-0.13-0.212-0.16-0.468-0.05-0.568 0.27-0.273 0.56 0.128 0.42 0.569-0.11 0.309-0.18 0.309-0.37-0.001zm-4.74-6.134c0-0.163 0.21-0.295 0.46-0.295s0.45 0.054 0.45 0.12c0 0.065-0.2 0.198-0.45 0.294s-0.46 0.043-0.46-0.119zm3.07-1.639c-0.02-0.32 0.06-0.5 0.16-0.399s0.11 0.364 0.02 0.583c-0.1 0.243-0.17 0.171-0.18-0.184zm-11.43-8.998c-0.11-0.168-0.05-0.305 0.13-0.305s0.32 0.137 0.32 0.305c0 0.167-0.06 0.304-0.13 0.304-0.08 0-0.22-0.137-0.32-0.304zm-1.24-3.489c-0.32-0.245-0.44-0.451-0.25-0.456s0.52 0.195 0.73 0.447c0.48 0.579 0.28 0.583-0.48 0.009zm3.52-6.397c0-0.251 0.11-0.457 0.25-0.457s0.25 0.206 0.25 0.457-0.11 0.456-0.25 0.456-0.25-0.205-0.25-0.456zm-1.31-0.043c-0.11-0.107-0.12-0.314-0.03-0.461 0.19-0.315 0.73-0.043 0.73 0.37 0 0.326-0.41 0.38-0.7 0.091zm3.13-4.502c0-0.074 0.14-0.219 0.31-0.322 0.16-0.104 0.3-0.043 0.3 0.134s-0.14 0.322-0.3 0.322c-0.17 0-0.31-0.061-0.31-0.134zm0-2.129c0-0.261 0.14-0.475 0.31-0.475 0.16 0 0.3 0.129 0.3 0.287 0 0.157-0.14 0.37-0.3 0.474-0.17 0.103-0.31-0.026-0.31-0.286zm0.61-0.779c0-0.167 0.14-0.304 0.3-0.304 0.17 0 0.31 0.137 0.31 0.304s-0.14 0.304-0.31 0.304c-0.16 0-0.3-0.137-0.3-0.304zm-0.56-0.608c0-0.419 0.07-0.59 0.15-0.381 0.09 0.21 0.09 0.552 0 0.761-0.08 0.209-0.15 0.038-0.15-0.38zm-4.81-2.244c-0.27-0.311-0.12-0.478 0.71-0.777 0.58-0.21 1.13-0.304 1.23-0.21 0.09 0.095-0.2 0.312-0.65 0.484s-0.74 0.449-0.63 0.617c0.27 0.442-0.25 0.352-0.66-0.114zm2.33-0.722c0-0.377 0.14-0.685 0.3-0.685 0.38 0 0.38 0.323 0 0.913-0.24 0.369-0.29 0.325-0.3-0.228zm-10.54 41.427c-0.13-0.314 0.02-0.53 0.44-0.638 0.82-0.215 0.96-0.692 0.47-1.625l-0.4-0.761-0.05 0.913c-0.04 0.686-0.1 0.573-0.24-0.456-0.11-0.753-0.07-1.544 0.09-1.757 0.15-0.213 0.19-0.478 0.08-0.588-0.44-0.432-0.86 0.534-1.02 2.309-0.09 1.024-0.26 1.861-0.37 1.861-0.4 0-1.29-1.302-1-1.484 0.41-0.265 0.64-2.484 0.33-3.307-0.33-0.917-0.87-0.871-0.87 0.076 0 0.583-0.16 0.763-0.69 0.77-0.64 0.009-0.65 0.034-0.13 0.427 0.64 0.483 0.19 0.942-0.64 0.654-0.47-0.163-0.47-0.142 0.01 0.235 0.3 0.228 0.54 0.508 0.54 0.622 0 0.266 0.51 0.906 1.75 2.194 1.04 1.076 2.02 1.397 1.7 0.555zm-0.34-2.263c0-0.586 0.06-0.825 0.14-0.533 0.07 0.293 0.07 0.772 0 1.065-0.08 0.293-0.14 0.053-0.14-0.532zm-2.3-0.507c-0.11-0.112-0.21-0.344-0.21-0.517 0-0.191 0.15-0.173 0.36 0.045 0.2 0.198 0.29 0.431 0.21 0.517-0.09 0.087-0.25 0.066-0.36-0.045zm14.09 0.507c0-0.167-0.14-0.304-0.3-0.304-0.17 0-0.31 0.137-0.31 0.304s0.14 0.304 0.31 0.304c0.16 0 0.3-0.137 0.3-0.304zm-16.12-2.7c0-0.146-0.2-0.83-0.44-1.521-0.25-0.69-0.33-1.255-0.18-1.255s0.4 0.377 0.56 0.837c0.27 0.773 0.31 0.79 0.53 0.228 0.12-0.334 0.45-0.871 0.72-1.193 0.39-0.478 0.4-0.535 0.03-0.313-0.99 0.589-1.3 0.436-1.1-0.547 0.24-1.204 0.31-1.258 1.05-0.861 0.34 0.18 0.9 0.328 1.24 0.328 0.53 0 0.64 0.201 0.67 1.293l0.03 1.293 0.28-1.521c0.15-0.836 0.29-1.929 0.31-2.427 0.03-0.499 0.24-1.098 0.47-1.332 0.24-0.234 0.35-0.637 0.25-0.895-0.1-0.257-0.03-0.562 0.15-0.677 0.24-0.144 0.2-0.348-0.12-0.667-0.34-0.343-0.37-0.547-0.11-0.805s0.22-0.345-0.15-0.345c-0.27 0-0.54 0.105-0.59 0.233-0.06 0.129-1.06 0.735-2.23 1.348-1.28 0.669-2.17 1.334-2.22 1.667-0.05 0.305-0.24 0.854-0.42 1.22-0.52 1.031 0.3 6.178 0.98 6.178 0.16 0 0.29-0.119 0.29-0.266zm-0.86-4.525c0.04-0.292-0.02-0.702-0.15-0.909-0.16-0.258-0.09-0.319 0.23-0.195 0.53 0.202 0.66 1.637 0.15 1.637-0.18 0-0.28-0.24-0.23-0.533zm17.1 4.042c0.27-0.413 0.49-1.207 0.49-1.765s0.16-1.176 0.36-1.374 0.28-0.437 0.19-0.532c-0.1-0.094-0.4 0.057-0.68 0.336-0.47 0.465-0.54 0.467-0.87 0.021-0.27-0.349-0.5-0.403-0.83-0.19-0.4 0.266-0.4 0.332 0 0.598 0.28 0.181 0.32 0.302 0.1 0.305-0.57 0.007-0.76-0.536-0.42-1.179 0.21-0.397 0.52-0.534 0.95-0.422 0.46 0.121 0.67-0.006 0.8-0.484 0.11-0.427 0.41-0.648 0.87-0.648 1.67 0 1.01-1.022-0.85-1.307-0.93-0.144-1.22-0.059-1.59 0.475-0.35 0.507-0.37 0.708-0.08 0.916 0.3 0.211 0.3 0.298 0 0.42-0.21 0.085-0.38 0.417-0.38 0.738 0 0.32-0.14 0.583-0.31 0.583-0.6 0-0.29 0.583 0.58 1.097s1.45 2.088 0.89 2.432c-0.14 0.086-0.25 0.286-0.25 0.443 0 0.532 0.53 0.291 1.03-0.463zm-1.13-5.233c-0.31-0.309-0.24-0.71 0.12-0.71 0.17 0 0.24 0.125 0.15 0.278-0.1 0.153 0 0.348 0.21 0.433s0.23 0.164 0.05 0.178c-0.18 0.013-0.42-0.068-0.53-0.179zm-3.98 4.848c-0.1-0.101-0.17 0.079-0.16 0.399 0.02 0.354 0.09 0.427 0.19 0.184 0.09-0.22 0.07-0.482-0.03-0.583zm8.03 0.526c0-0.167-0.13-0.304-0.3-0.304s-0.31 0.137-0.31 0.304 0.14 0.304 0.31 0.304 0.3-0.137 0.3-0.304zm-13.99-0.989c-0.01-0.534-0.07-0.587-0.29-0.242-0.15 0.243-0.21 0.551-0.13 0.684 0.27 0.427 0.42 0.262 0.42-0.442zm12.64-0.148c0.27-0.375 0.3-0.694 0.08-1.103-0.19-0.358-0.2-0.647-0.02-0.765 0.41-0.268 0.72-2.109 0.39-2.312-0.15-0.092-0.36-0.027-0.47 0.146-0.1 0.172-0.32 0.235-0.47 0.139-0.16-0.096-0.29-0.03-0.29 0.147s0.14 0.322 0.31 0.322 0.3 0.342 0.3 0.761c0 0.418-0.13 0.76-0.3 0.76s-0.31 0.548-0.31 1.217c0 1.331 0.19 1.495 0.78 0.688zm1.66-0.725c0-0.795-0.5-0.717-0.72 0.113-0.29 1.065-0.23 1.246 0.26 0.836 0.25-0.208 0.46-0.635 0.46-0.949zm-5.32-3.935c0.13-0.621 0.1-0.903-0.09-0.783-0.46 0.284-0.74-1.253-0.36-1.97 0.19-0.345 0.26-0.71 0.16-0.81s-0.35 0.254-0.55 0.787c-0.38 1-0.95 1.382-0.65 0.436 0.09-0.308-0.17-0.147-0.63 0.38l-0.79 0.913 0.17-1.673c0.35-3.286 0.37-3.174-0.46-3.184-0.58-0.008-0.77-0.178-0.8-0.715-0.04-0.855-0.72-1.68-0.72-0.877 0 0.284 0.1 0.518 0.23 0.519 0.12 0 0.26 0.646 0.31 1.433 0.04 0.788 0.3 1.759 0.56 2.157 0.27 0.422 0.4 1.022 0.29 1.437-0.1 0.392-0.03 0.806 0.16 0.919 0.19 0.122 0.26 0.653 0.15 1.311-0.15 0.96-0.13 1.007 0.14 0.357 0.44-1.034 0.5-1.063 1.06-0.504 0.27 0.271 0.35 0.493 0.17 0.493-0.17 0-0.23 0.228-0.12 0.506 0.13 0.34 0.08 0.434-0.16 0.286-0.2-0.121-0.36-0.075-0.36 0.102 0 0.574 0.53 0.342 1.06-0.464 0.28-0.433 0.59-0.711 0.68-0.618s-0.05 0.5-0.31 0.904c-0.27 0.404-0.4 0.817-0.3 0.917 0.24 0.239 0.89-1.029 1.16-2.259zm-7.89 1.202c-0.8-0.631-1.39-0.747-1.39-0.272 0 0.167 0.21 0.304 0.46 0.304 0.26 0 0.54 0.197 0.64 0.437 0.09 0.241 0.36 0.363 0.59 0.272 0.33-0.126 0.26-0.303-0.3-0.741zm2.71-0.272c-0.1-0.167-0.35-0.302-0.55-0.3-0.22 0.003-0.18 0.123 0.1 0.3 0.58 0.378 0.69 0.378 0.45 0zm18.23-1.574c-0.28-0.869-0.41-2.125-0.41-3.825 0-0.711-0.14-1.293-0.31-1.293-0.18 0-0.32-0.206-0.32-0.456 0-0.251 0.14-0.457 0.32-0.457s0.23-0.158 0.11-0.351c-0.14-0.218-0.09-0.268 0.13-0.134 0.19 0.119 0.35 0.059 0.35-0.134 0-0.192-0.26-0.417-0.57-0.5-0.31-0.082-0.74-0.512-0.94-0.957-0.33-0.735-0.4-0.761-0.75-0.289-0.25 0.353-0.47 0.42-0.69 0.209-0.21-0.211-0.36 0.255-0.49 1.454-0.1 0.971-0.06 1.888 0.09 2.039 0.15 0.15 0.2 0.664 0.1 1.141-0.11 0.567-0.04 0.868 0.19 0.868s0.29-0.232 0.17-0.606c-0.15-0.49-0.09-0.567 0.35-0.399 0.43 0.165 0.4 0.054-0.15-0.534-0.52-0.552-0.65-0.966-0.52-1.617 0.09-0.481 0.18-1.097 0.19-1.368 0.02-0.381 0.08-0.354 0.29 0.114 0.26 0.591 0.27 0.589 0.47-0.076 0.11-0.377 0.33-0.685 0.49-0.685s0.2 0.146 0.09 0.325c-0.11 0.178 0.05 0.518 0.36 0.754 0.49 0.374 0.5 0.47 0.11 0.733-0.34 0.22-0.49 0.176-0.56-0.164-0.06-0.255-0.26-0.408-0.46-0.338-0.41 0.147-0.33 1.426 0.13 1.878 0.21 0.212 0.24 0.13 0.09-0.264-0.15-0.413-0.1-0.534 0.21-0.433 0.65 0.217 0.85 1.555 0.3 1.971-0.42 0.316-0.4 0.439 0.22 1.094 0.4 0.431 0.61 0.936 0.51 1.216-0.1 0.264 0.05 0.837 0.33 1.274 0.61 0.925 0.9 0.828 0.57-0.19zm-21.59 0.389c0.09-0.15-0.04-0.351-0.29-0.447-0.28-0.106-0.45 0.001-0.45 0.273 0 0.492 0.47 0.604 0.74 0.174zm2.3-0.673c0-0.185-0.21-0.258-0.46-0.161-0.25 0.096-0.45 0.042-0.45-0.12s0.2-0.295 0.45-0.295 0.46-0.151 0.46-0.336c0-0.186-0.22-0.254-0.48-0.152-0.27 0.101-0.61 0.184-0.76 0.184-0.16 0-0.28 0.274-0.28 0.609 0 0.446 0.2 0.608 0.76 0.608 0.42 0 0.76-0.151 0.76-0.337zm1.99 0.054c-0.1-0.156-0.05-0.359 0.09-0.451 0.15-0.092 0.28-0.495 0.28-0.895 0-0.675-0.04-0.692-0.51-0.234-0.52 0.504-0.5 1.863 0.03 1.863 0.15 0 0.2-0.127 0.11-0.283zm-25.3-1.694c-0.19-0.497-0.72-0.628-0.72-0.178 0 0.231 0.21 0.388 0.82 0.61 0.04 0.013-0.01-0.181-0.1-0.432zm3.67 0.118c-0.09-0.149 0.11-0.27 0.46-0.27 0.84 0 0.8-0.533-0.06-0.698l-0.69-0.132 0.69-0.041c0.41-0.025 0.68-0.239 0.68-0.535 0-0.384-0.09-0.417-0.41-0.147-0.23 0.191-0.63 0.266-0.89 0.168-0.25-0.098-0.56-0.025-0.67 0.162-0.15 0.248-0.33 0.244-0.64-0.017-0.35-0.291-0.43-0.21-0.43 0.442 0 0.439-0.14 0.798-0.3 0.798-0.17 0-0.31 0.104-0.31 0.232s0.62 0.25 1.37 0.27c0.75 0.021 1.29-0.084 1.2-0.232zm4.29-0.69c0.29-1.139 0.04-2.482-0.43-2.382-0.27 0.057-0.35-0.082-0.24-0.38 0.12-0.297 0.01-0.468-0.29-0.468-0.31 0-0.43 0.229-0.37 0.684 0.06 0.376 0.27 0.684 0.48 0.684s0.35 0.137 0.3 0.304c-0.04 0.168-0.17 0.27-0.3 0.229-0.27-0.092-0.3 0.899-0.04 1.572 0.27 0.702 0.69 0.588 0.89-0.243zm13.83 0.42c-0.6-0.385-1.22-0.385-1.22 0 0 0.167 0.38 0.302 0.84 0.299 0.65-0.003 0.73-0.069 0.38-0.299zm1.66-0.283c0.09-0.156 0.05-0.361-0.11-0.455-0.15-0.094-0.35 0.033-0.45 0.283-0.19 0.493 0.27 0.634 0.56 0.172zm-16.87-0.941c0-0.736-1.08-0.455-1.13 0.296-0.03 0.407 0.11 0.514 0.54 0.402 0.32-0.084 0.59-0.399 0.59-0.698zm-9.76-0.677c0.01-0.126-0.11-0.229-0.28-0.229s-0.29 0.377-0.28 0.837c0.02 0.741 0.05 0.767 0.28 0.228 0.14-0.335 0.27-0.711 0.28-0.836zm25.44 0.152c-0.03-0.779-0.18-1.141-0.49-1.141-0.29 0-0.41 0.26-0.36 0.76 0.19 1.826 0.91 2.148 0.85 0.381zm6.52 0.058c0-0.261-0.13-0.39-0.3-0.287-0.17 0.104-0.3 0.317-0.3 0.475 0 0.157 0.13 0.286 0.3 0.286s0.3-0.213 0.3-0.474zm-5.02-0.134c-0.1-0.168 0.03-0.305 0.29-0.305s0.47-0.226 0.47-0.503c0-0.455-0.05-0.451-0.6 0.041-0.52 0.471-0.59 1.071-0.12 1.071 0.08 0 0.07-0.137-0.04-0.304zm9.39-0.143c0.25-0.663-0.28-0.841-0.76-0.252-0.28 0.352-0.29 0.44-0.03 0.283 0.21-0.126 0.38-0.083 0.38 0.094 0 0.461 0.21 0.397 0.41-0.125zm-30.99-0.846c0.03-0.417 0.38-0.844 0.89-1.092 0.46-0.225 0.77-0.471 0.7-0.548-0.29-0.282-3.26-0.362-3.26-0.088 0 0.156 0.23 0.283 0.5 0.283 0.39 0 0.42 0.091 0.14 0.427-0.27 0.327-0.27 0.469 0.04 0.608 0.32 0.148 0.32 0.216-0.01 0.365-0.3 0.138-0.26 0.28 0.15 0.583 0.65 0.472 0.79 0.383 0.85-0.538zm-13.53 0.313c0-0.15 0.12-0.197 0.27-0.105 0.15 0.093 0.35-0.036 0.45-0.286s0.44-0.454 0.76-0.454 0.67-0.214 0.77-0.476c0.1-0.261 0.31-0.396 0.47-0.299 0.15 0.097 0.37 0.029 0.48-0.151 0.25-0.394-3.34-0.07-4.21 0.381-0.31 0.158-0.75 0.213-0.99 0.123-0.61-0.236-1.18 0.921-0.61 1.242 0.61 0.339 2.61 0.359 2.61 0.025zm0.02-0.972c-0.01-0.321 0.06-0.5 0.16-0.399 0.11 0.101 0.12 0.363 0.03 0.583-0.1 0.242-0.17 0.17-0.19-0.184zm10.56 0.431c-0.45-0.719-0.57-0.636-0.34 0.238 0.09 0.367 0.29 0.594 0.44 0.505 0.14-0.09 0.1-0.424-0.1-0.743zm-6.32 0.304c0-0.167-0.15-0.304-0.32-0.304-0.18 0-0.24 0.137-0.14 0.304 0.11 0.167 0.25 0.304 0.33 0.304 0.07 0 0.13-0.137 0.13-0.304zm3.64-0.598c-0.01-0.676-0.05-0.705-0.32-0.232-0.17 0.296-0.44 0.459-0.6 0.362s-0.29 0.008-0.29 0.233 0.28 0.409 0.61 0.409c0.45 0 0.61-0.2 0.6-0.772zm9.74 0.453c0-0.198-0.47-0.282-1.21-0.211-0.67 0.063-1.16 0.211-1.09 0.327 0.22 0.345 2.3 0.24 2.3-0.116zm22.36-0.159c0.22 0 0.46 0.102 0.53 0.228s0.11 0.103 0.09-0.05-0.33-0.466-0.67-0.696c-0.59-0.39-0.63-0.36-0.63 0.43 0.01 0.467 0.07 0.677 0.14 0.468 0.08-0.209 0.32-0.38 0.54-0.38zm2.51 0.397c-0.3-0.077-0.71-0.072-0.92 0.012-0.2 0.083 0.04 0.146 0.54 0.14s0.67-0.074 0.38-0.152zm12.45-2.298c0.52-1.046 1.67-2.86 2.56-4.031 1.41-1.855 1.62-2.312 1.63-3.549 0.01-0.78 0.12-1.529 0.26-1.663 0.13-0.135 0.15-0.009 0.04 0.278-0.11 0.301-0.05 0.524 0.14 0.524 0.18 0 0.34-0.377 0.35-0.837s0.09-1.562 0.18-2.449c0.21-2.069-0.3-4.16-1.43-5.861-0.49-0.741-0.89-1.227-0.89-1.079s-0.29-0.096-0.64-0.542c-0.69-0.872-3.43-2.408-3.74-2.096-0.37 0.37-0.18 0.758 0.29 0.58 0.27-0.104 0.39-0.053 0.28 0.12-0.1 0.165 0.09 0.3 0.42 0.3 0.93 0 1.56 0.327 1.56 0.811 0 0.265 0.15 0.356 0.38 0.227 0.31-0.171 0.31-0.132 0 0.195-0.58 0.631-0.46 1.181 0.24 1.046 0.44-0.084 0.79 0.149 1.17 0.777 0.3 0.493 0.66 0.794 0.81 0.67 0.14-0.125 0.01 0.166-0.29 0.647-0.44 0.702-0.48 1.019-0.21 1.611 0.46 1.005 0.42 1.159-0.16 0.679-0.42-0.354-0.47-0.329-0.37 0.191 0.08 0.42 0.32 0.57 0.8 0.504 0.37-0.053 0.67 0.05 0.67 0.228s-0.13 0.323-0.3 0.323c-0.39 0-0.39 0.625 0 1.217 0.27 0.406 0.34 0.406 0.6 0 0.26-0.394 0.3-0.386 0.31 0.058 0 0.725-0.47 0.93-0.91 0.395-0.53-0.631-0.84-0.566-1.1 0.231l-0.23 0.685-0.17-0.703c-0.19-0.774-0.78-0.798-0.78-0.031 0 0.547-0.7 1.494-1.1 1.494-0.15 0-0.27-0.205-0.27-0.456 0-0.55-0.36-0.588-0.85-0.091-0.26 0.259-0.37 0.265-0.37 0.02 0-0.189 0.31-0.442 0.69-0.56 1.17-0.37 2.04-1.402 1.71-2.022-0.19-0.357-0.18-0.541 0.02-0.541 0.18 0 0.32 0.189 0.32 0.421 0 0.231 0.27 0.492 0.61 0.58 0.71 0.187 0.81-0.331 0.14-0.816-0.51-0.378-0.78-1.48-0.85-3.556-0.04-1.012-0.18-1.396-0.51-1.399-0.25-0.003-0.54 0.126-0.65 0.286-0.11 0.177-0.27 0.159-0.39-0.046-0.12-0.185-0.07-0.337 0.11-0.337s0.32-0.205 0.32-0.456c0-0.551-0.5-0.609-0.68-0.079-0.09 0.279-0.25 0.252-0.61-0.103-0.3-0.302-0.38-0.634-0.22-0.895 0.14-0.228 0.18-0.538 0.09-0.689-0.1-0.151-0.42 0.253-0.72 0.898-0.58 1.24-0.8 0.994-0.3-0.329 0.16-0.429 0.19-0.781 0.06-0.781-0.14 0-0.7 1.13-1.25 2.51s-1.27 3.106-1.59 3.836c-0.33 0.729-0.5 1.414-0.38 1.521s0.27 0.023 0.35-0.188c0.07-0.21 0.26-0.305 0.41-0.21s0.28 0 0.28-0.211c0-0.298 0.08-0.302 0.36-0.018 0.57 0.567 0.86 0.435 0.86-0.395 0-0.419 0.12-0.761 0.26-0.761 0.15 0 0.35-0.41 0.45-0.912 0.19-0.933 1.11-1.313 1.11-0.457 0 0.251-0.19 0.457-0.42 0.457-0.49 0-0.78 0.92-0.79 2.491 0 1.094-0.61 1.941-0.85 1.2-0.1-0.287-0.23-0.283-0.6 0.02-0.41 0.34-0.44 0.293-0.24-0.368l0.22-0.758-0.52 0.716c-0.4 0.548-0.58 0.621-0.78 0.313-0.31-0.504-0.29-0.532-1.28 1.943-1 2.516-1.01 2.763-0.05 1.591l0.75-0.912v0.988c0 0.544 0.14 0.989 0.3 0.989 0.17 0 0.31-0.206 0.31-0.457 0-0.713 0.55-0.534 0.7 0.228l0.13 0.685 0.24-0.71c0.17-0.547 0.29-0.617 0.51-0.304 0.2 0.281 0.23 0.203 0.1-0.253-0.24-0.865 0.34-1.202 1.02-0.588 0.3 0.267 0.7 0.486 0.9 0.486 0.19 0 0.35 0.137 0.35 0.304 0 0.168-0.12 0.304-0.26 0.304s-0.19 0.377-0.1 0.837c0.13 0.688 0.08 0.777-0.27 0.5-0.74-0.576-1.8-0.72-1.8-0.243 0 0.235 0.17 0.393 0.38 0.351 0.21-0.041 0.38 0.198 0.38 0.533 0 0.334-0.17 0.574-0.38 0.532s-0.4 0.232-0.42 0.608c-0.02 0.542-0.06 0.57-0.17 0.135-0.08-0.302-0.48-0.674-0.88-0.827-0.48-0.184-0.66-0.435-0.55-0.746 0.14-0.339 0.05-0.417-0.31-0.282-0.58 0.226-0.61 0.483-0.11 0.988 0.3 0.301 0.29 0.441-0.07 0.689-0.36 0.246-0.32 0.274 0.18 0.135 0.41-0.114 0.82 0.032 1.17 0.416 0.29 0.326 0.73 0.514 0.98 0.419 0.32-0.12 0.42-0.003 0.35 0.389-0.07 0.42 0.1 0.564 0.67 0.573 0.61 0.01 0.74 0.151 0.68 0.715-0.04 0.386 0.03 0.64 0.15 0.564 0.13-0.076 0.39 0.038 0.59 0.254 0.28 0.303 0.27 0.518-0.07 0.956-0.47 0.623-0.58 1.326-0.2 1.326 0.13 0 0.66-0.856 1.18-1.901zm-1.81-3.27c-0.11-0.396-0.01-0.609 0.26-0.609 0.24 0 0.43 0.274 0.43 0.609 0 0.334-0.12 0.608-0.27 0.608-0.14 0-0.34-0.274-0.42-0.608zm-1.44-0.305c0-0.167 0.14-0.304 0.31-0.304 0.16 0 0.3 0.137 0.3 0.304 0 0.168-0.14 0.305-0.3 0.305-0.17 0-0.31-0.137-0.31-0.305zm2.49-1.096c0.12-0.658 1.07-0.938 1.56-0.458 0.4 0.41 0.28 0.537-0.81 0.81-0.74 0.186-0.85 0.134-0.75-0.352zm2.68-0.576c0-0.252 0.24-0.461 0.54-0.466 0.48-0.009 0.48-0.049-0.05-0.449-0.51-0.388-0.63-0.378-1.01 0.085-0.38 0.473-0.39 0.459-0.1-0.139 0.4-0.839 0.41-1.406 0.02-1.161-0.17 0.104-0.31-0.017-0.31-0.268s0.15-0.547 0.33-0.657c0.17-0.111 0.26-0.365 0.18-0.564-0.08-0.207 0.14-0.377 0.51-0.395 0.36-0.017 0.48 0.035 0.27 0.115-0.23 0.089-0.36 0.646-0.33 1.414l0.04 1.268 0.21-1.217c0.2-1.177 0.21-1.192 0.52-0.456 0.18 0.418 0.44 0.692 0.59 0.608s0.28 0.181 0.3 0.589c0.04 0.71 0.02 0.716-0.39 0.156-0.4-0.547-0.42-0.526-0.35 0.332 0.07 0.975-0.21 1.661-0.68 1.661-0.16 0-0.29-0.206-0.29-0.456zm-2.13-1.369c0-0.356 0.21-0.609 0.49-0.609 0.32 0 0.43 0.166 0.31 0.482-0.1 0.264-0.19 0.538-0.19 0.608s-0.13 0.127-0.3 0.127-0.31-0.274-0.31-0.608zm-0.3-1.199c0-0.177 0.14-0.322 0.3-0.322 0.17 0 0.31 0.06 0.31 0.134s-0.14 0.219-0.31 0.322c-0.16 0.103-0.3 0.043-0.3-0.134zm-5.17-1.977c0-0.074 0.14-0.219 0.3-0.323 0.17-0.103 0.31-0.042 0.31 0.135s-0.14 0.322-0.31 0.322c-0.16 0-0.3-0.061-0.3-0.134zm5.06-1.843c-0.1-0.251-0.04-0.457 0.12-0.457s0.29 0.206 0.29 0.457-0.05 0.456-0.12 0.456c-0.06 0-0.19-0.205-0.29-0.456zm4.99-1.799c-0.24-0.6-0.61-1.091-0.83-1.091-0.53 0-0.5-0.243 0.07-0.819 0.56-0.556 0.53-0.586 1.03 1.012 0.51 1.613 0.29 2.335-0.27 0.898zm-5.03 0.43c-0.11-0.167 0.02-0.304 0.28-0.304 0.27 0 0.48 0.137 0.48 0.304s-0.13 0.304-0.29 0.304-0.37-0.137-0.47-0.304zm-2.59-2.89c0.21-0.251 0.43-0.456 0.5-0.456 0.06 0 0.11 0.205 0.11 0.456s-0.22 0.456-0.49 0.456c-0.41 0-0.43-0.082-0.12-0.456zm2.44 0.152c0-0.167 0.21-0.304 0.47-0.304s0.39 0.137 0.29 0.304c-0.11 0.167-0.32 0.304-0.48 0.304s-0.28-0.137-0.28-0.304zm-58.96 17.131c-0.22-0.088-0.48-0.077-0.58 0.024s0.08 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm15.96-1.215c-0.08-0.085-0.47-0.053-0.85 0.069l-0.71 0.223 0.68 0.251c0.38 0.139 0.7 0.427 0.72 0.642 0.03 0.214 0.11 0.07 0.18-0.321s0.07-0.779-0.02-0.864zm-17.08 0.814c-0.1-0.167-0.32-0.304-0.47-0.304-0.16 0-0.29 0.137-0.29 0.304 0 0.168 0.21 0.305 0.47 0.305s0.39-0.137 0.29-0.305zm13.07-0.859c-0.13-0.113-0.28-0.049-0.35 0.143-0.07 0.191-0.43 0.282-0.8 0.203-0.6-0.131-0.59-0.104 0.09 0.279 0.65 0.363 0.8 0.363 1.02 0.003 0.14-0.233 0.16-0.515 0.04-0.628zm1.68 0.555c0-0.167-0.24-0.302-0.53-0.299-0.45 0.004-0.47 0.047-0.08 0.299 0.58 0.371 0.61 0.371 0.61 0zm-4.03-0.211c-0.3-0.077-0.71-0.072-0.92 0.012-0.2 0.083 0.04 0.146 0.54 0.14s0.67-0.075 0.38-0.152zm11.39 0.003c-0.22-0.087-0.48-0.077-0.58 0.024s0.08 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm22.07-0.882c-0.29-0.29-0.87 0.18-0.65 0.529 0.13 0.208 0.3 0.203 0.51-0.016 0.18-0.179 0.25-0.41 0.14-0.513zm-22.55-0.957c-0.1-0.101-0.17 0.079-0.16 0.399 0.01 0.355 0.09 0.427 0.18 0.184 0.09-0.219 0.08-0.482-0.02-0.583zm-0.49-0.082c0-0.168-0.13-0.304-0.29-0.304-0.15 0-0.37 0.136-0.47 0.304-0.1 0.167 0.03 0.304 0.29 0.304s0.47-0.137 0.47-0.304zm22.81-0.295c0-0.162-0.2-0.216-0.45-0.119-0.25 0.096-0.46 0.228-0.46 0.294s0.21 0.12 0.46 0.12 0.45-0.133 0.45-0.295zm13.27-0.535c-0.1-0.101-0.18 0.078-0.16 0.399 0.01 0.354 0.08 0.426 0.18 0.184 0.09-0.22 0.08-0.482-0.02-0.583zm-0.87-0.597c-0.29-0.283-0.62-0.412-0.74-0.288-0.13 0.125-0.03 0.354 0.22 0.51 0.74 0.468 1.07 0.328 0.52-0.222zm-2.16-2.358c-0.44-0.412-0.81-0.6-0.81-0.419 0 0.402 1.26 1.53 1.47 1.319 0.08-0.083-0.21-0.488-0.66-0.9zm-26.21-0.474c0.11-0.167-0.02-0.304-0.28-0.304s-0.48 0.137-0.48 0.304 0.13 0.304 0.29 0.304 0.37-0.137 0.47-0.304zm26.78-0.631c0.11-0.347 0.12-0.712 0.02-0.811s-0.18 0.048-0.18 0.327-0.14 0.507-0.3 0.507c-0.17 0-0.31 0.137-0.31 0.304 0 0.555 0.57 0.315 0.77-0.327zm-25.72-0.27c0.75-0.475 0.22-0.589-0.75-0.16-0.71 0.312-0.78 0.408-0.31 0.424 0.34 0.01 0.81-0.108 1.06-0.264zm2.78-1.625c-0.25-0.241-0.34-0.162-0.34 0.285 0 0.805 0.43 1.231 0.56 0.563 0.06-0.284-0.04-0.665-0.22-0.848zm-2.47-1.834c0-0.631-0.36-0.839-0.81-0.467-0.58 0.49-0.5 0.873 0.2 0.873 0.34 0 0.61-0.183 0.61-0.406zm2.2-1.475c-0.19-0.19-0.23 0.01-0.12 0.565 0.13 0.637 0.21 0.713 0.29 0.295 0.07-0.311-0.01-0.698-0.17-0.86zm-0.68 0.664c0-0.167-0.14-0.304-0.32-0.304s-0.24 0.137-0.13 0.304c0.1 0.167 0.25 0.304 0.32 0.304s0.13-0.137 0.13-0.304zm-2.31-0.741c-0.09-0.241-0.36-0.363-0.6-0.273-0.51 0.198-0.27 0.71 0.34 0.71 0.24 0 0.35-0.185 0.26-0.437zm2.92-2.32c0-0.818-0.09-0.893-1.06-0.893-0.59 0-1.07 0.136-1.07 0.304 0 0.167 0.21 0.304 0.46 0.304s0.46 0.245 0.46 0.544c0 0.325 0.24 0.562 0.6 0.589 0.48 0.036 0.61-0.142 0.61-0.848zm-17.64-0.893c0-0.168-0.15-0.304-0.32-0.304-0.18 0-0.24 0.136-0.14 0.304 0.11 0.167 0.25 0.304 0.33 0.304 0.07 0 0.13-0.137 0.13-0.304zm16.57-1.416c-0.84-0.614-1.23-0.493-0.61 0.192 0.3 0.33 0.69 0.515 0.86 0.41 0.18-0.114 0.08-0.358-0.25-0.602zm10.4-1.094c-0.08-0.209-0.15-0.038-0.15 0.38 0 0.419 0.07 0.59 0.15 0.381s0.08-0.552 0-0.761zm-11.46-0.246c0-0.157-0.13-0.286-0.3-0.286s-0.31 0.213-0.31 0.474 0.14 0.39 0.31 0.286c0.17-0.103 0.3-0.316 0.3-0.474zm1.16-0.347c0.2-0.201 0.36-0.564 0.36-0.808 0-0.351-0.12-0.329-0.6 0.108-0.63 0.566-0.8 1.065-0.37 1.065 0.13 0 0.41-0.164 0.61-0.365zm-24.58-0.395c0-0.251-0.13-0.457-0.29-0.457-0.17 0-0.22 0.206-0.12 0.457 0.09 0.25 0.23 0.456 0.29 0.456 0.07 0 0.12-0.206 0.12-0.456zm34.57-1.451c-0.08-0.206-0.14 0.036-0.14 0.538 0.01 0.502 0.08 0.67 0.15 0.374 0.08-0.296 0.08-0.706-0.01-0.912zm20.87 0.792c-0.21-0.085-0.31-0.279-0.21-0.432 0.09-0.153 0.03-0.278-0.14-0.278-0.16 0-0.38 0.125-0.47 0.278-0.17 0.275 0.3 0.586 0.89 0.586 0.17 0 0.14-0.069-0.07-0.154zm-31.25-0.715c0.1-0.17 0.32-0.231 0.47-0.134 0.34 0.21 0.33-0.103-0.02-0.926-0.23-0.532-0.26-0.541-0.28-0.066-0.01 0.298-0.23 0.62-0.48 0.716-0.5 0.193-0.63 0.719-0.17 0.719 0.16 0 0.37-0.139 0.48-0.309zm-30.07-4.336c-0.09-0.206-0.15 0.036-0.14 0.538 0 0.502 0.07 0.671 0.15 0.375s0.07-0.707-0.01-0.913zm18.35-0.258c0-0.167-0.13-0.22-0.3-0.116-0.17 0.103-0.31 0.325-0.31 0.492s0.14 0.22 0.31 0.116c0.17-0.103 0.3-0.325 0.3-0.492zm53.05-5.988c0.11-0.181 0.27-1.741 0.35-3.465s0.36-3.778 0.62-4.564c0.35-1.059 0.39-1.585 0.15-2.033-0.18-0.332-0.33-0.818-0.33-1.078s-0.46-1.084-1.03-1.83-1.13-1.91-1.25-2.587c-0.24-1.454-0.76-1.942-0.76-0.719 0 0.47 0.41 1.723 0.91 2.783 0.56 1.164 0.92 2.422 0.92 3.173 0 1.187-1.87 8.286-2.49 9.442-0.47 0.877 0 2.182 1.21 3.397l1.12 1.126 0.19-1.657c0.1-0.911 0.27-1.806 0.39-1.988zm-53.05 2.678c0-0.167-0.51-0.291-1.14-0.274-1.02 0.027-1.06 0.056-0.38 0.274 1.09 0.348 1.52 0.348 1.52 0zm22.51-1.369c0-0.251-0.05-0.456-0.12-0.456-0.06 0-0.2 0.205-0.29 0.456-0.1 0.251-0.04 0.456 0.12 0.456s0.29-0.205 0.29-0.456zm-8.22-1.463c0-0.366-0.13-0.872-0.29-1.123-0.22-0.333-0.3-0.103-0.3 0.855-0.01 0.797 0.11 1.237 0.3 1.123 0.16-0.104 0.3-0.488 0.29-0.855zm9.13-8.879c-0.2-0.251-0.51-0.457-0.68-0.457s-0.13 0.202 0.08 0.457c0.2 0.251 0.51 0.456 0.68 0.456s0.14-0.202-0.08-0.456zm0.77-0.761c-0.11-0.167-0.25-0.304-0.33-0.304-0.07 0-0.13 0.137-0.13 0.304 0 0.168 0.14 0.304 0.32 0.304s0.24-0.136 0.14-0.304zm-0.92-1.216c-0.1-0.168-0.25-0.305-0.32-0.305s-0.13 0.137-0.13 0.305c0 0.167 0.14 0.304 0.32 0.304s0.24-0.137 0.13-0.304zm15.67-3.346c0-0.335-0.14-0.609-0.31-0.609-0.16 0-0.3-0.151-0.3-0.336s-0.35-0.615-0.79-0.954c-0.49-0.387-0.73-0.823-0.64-1.165 0.08-0.301-0.02-0.612-0.23-0.692-0.27-0.102-0.34-0.754-0.25-2.2333l0.13-2.0891-1.11-0.5312c-1.47-0.6998-4.41-1.0035-5.27-0.5438-0.86 0.4582-0.84 0.6119 0.24 1.7966 0.72 0.7821 0.82 1.0288 0.46 1.1649-0.25 0.095-0.45 0.295-0.45 0.4444 0 0.3975 1.04 0.3315 1.46-0.0934 0.29-0.2839 0.37-0.267 0.37 0.076 0 0.5319 0.88 1.5969 3.57 4.3199 2.05 2.084 3.12 2.577 3.12 1.445zm12.4-5.34c-0.07-0.071-0.56-0.2165-1.09-0.3228-1.3-0.2603-1.28 0.3898 0.02 0.7358 0.86 0.228 1.48-0.008 1.07-0.413zm-3.77-0.146c0.15-0.1379-0.54-0.2501-1.52-0.2495-1.64 0.001-1.74 0.0383-1.19 0.4435 0.61 0.443 2.15 0.333 2.71-0.194zm1.82-1.6493c1.15 0.0572 2.16 0.1802 2.26 0.2734 0.32 0.3199 0.67 0.1687 0.67-0.287 0-0.3336-0.35-0.457-1.29-0.4589-0.71-0.0015-2.01-0.089-2.89-0.1945-1.51-0.1816-1.6-0.1553-1.6 0.4962 0 0.5132 0.1 0.6091 0.38 0.3774 0.21-0.1709 1.32-0.2638 2.47-0.2066zm4.04-1.5214c-0.09-0.2582-0.41-0.4694-0.7-0.4694s-0.8-0.2529-1.15-0.5621c-0.75-0.6739-3.07-1.611-3.33-1.3482-0.38 0.3803-0.18 1.0608 0.26 0.8912 0.45-0.1708 2.23 0.549 3.96 1.6008 1.02 0.6127 1.23 0.5873 0.96-0.1123zm-5.98-0.9078c-0.01-0.1771-0.21-0.0564-0.46 0.2684s-0.44 0.7354-0.44 0.9126c0.01 0.1771 0.21 0.0563 0.46-0.2684 0.24-0.3248 0.44-0.7354 0.44-0.9126zm6.7-0.9038c0-0.6384-0.33-0.8573-2.49-1.683-1.93-0.7387-2.54-0.8626-2.73-0.5589-0.15 0.2486-0.05 0.463 0.28 0.5909 0.29 0.1104 1.31 0.5005 2.26 0.867 0.96 0.3664 1.9 0.8578 2.09 1.092 0.49 0.5886 0.59 0.5386 0.59-0.308zm-67.31 27.014c-0.12-0.122-0.22-0.432-0.22-0.688 0-0.343 0.09-0.377 0.34-0.128 0.18 0.186 0.28 0.496 0.22 0.688-0.07 0.192-0.22 0.25-0.34 0.128zm1.2-0.019c-0.37-0.372-0.21-0.71 0.33-0.686 0.32 0.015 0.38 0.085 0.15 0.178-0.21 0.085-0.31 0.279-0.21 0.433 0.2 0.323 0.02 0.371-0.27 0.075zm6.96-0.642c-0.06-0.057-0.03-0.364 0.05-0.682 0.13-0.489 0.37-0.559 1.56-0.453 0.78 0.069 1.66 0.132 1.97 0.14s0.46 0.155 0.34 0.345c-0.11 0.182-0.46 0.263-0.78 0.181-0.31-0.083-0.57-0.041-0.57 0.094 0 0.236-2.36 0.582-2.57 0.375zm1.41-0.58c-0.22-0.088-0.48-0.077-0.58 0.024s0.07 0.173 0.4 0.16c0.35-0.015 0.42-0.087 0.18-0.184zm-7.36 0.208c0-0.167 0.14-0.304 0.31-0.304 0.16 0 0.3 0.137 0.3 0.304s-0.14 0.304-0.3 0.304c-0.17 0-0.31-0.137-0.31-0.304zm-2.13-0.566c0-0.144 0.34-0.197 0.76-0.117s0.76 0.198 0.76 0.262-0.34 0.117-0.76 0.117-0.76-0.118-0.76-0.262zm4.42-0.034c-0.09-0.143-0.74-0.348-1.45-0.455-2.16-0.328-2.62-0.676-2.37-1.798 0.12-0.532 0.18-1.265 0.12-1.628s0.04-0.744 0.2-0.848c0.46-0.279 0.05-0.756-0.47-0.557-0.25 0.094-0.45 0.004-0.45-0.201 0-0.219 0.25-0.308 0.6-0.217 0.79 0.207 0.85-0.09 0.51-2.554-0.23-1.746-0.34-2.009-0.65-1.59-0.2 0.277-0.52 0.405-0.72 0.286-0.43-0.266-0.46-1.093-0.04-1.093 0.17 0 0.3-0.146 0.3-0.325 0-0.193-0.26-0.241-0.65-0.117-0.52 0.166-0.62 0.107-0.47-0.283 0.11-0.271 0.07-0.492-0.07-0.492-0.15 0-0.34 0.206-0.44 0.457-0.28 0.723-1.19 0.58-0.95-0.15 0.1-0.333 0.08-0.778-0.05-0.988-0.16-0.257-0.31-0.082-0.44 0.529-0.19 0.877-0.2 0.868-0.24-0.248-0.03-1.063-0.09-1.142-0.72-0.936-1.56 0.515-1.88 0.351-2.1-1.097-0.27-1.78-0.31-5.285-0.06-5.932 0.15-0.4046 0.25-0.425 0.45-0.101 0.19 0.303 0.26 0.31 0.26 0.025 0.01-0.209 0.15-0.3801 0.33-0.3801 0.19 0 0.24 0.2594 0.13 0.6081-0.11 0.349-0.05 0.609 0.14 0.609 0.17 0 0.32-0.214 0.32-0.475 0-0.26 0.14-0.389 0.3-0.286 0.17 0.104 0.31-0.084 0.31-0.4158 0-0.7029 0.71-0.9316 1.91-0.6104 0.5 0.1358 0.77 0.1126 0.66-0.0578-0.1-0.1656 0.65-0.2846 1.8-0.2846 1.09 0 2.07 0.1462 2.18 0.3249s0.38 0.2579 0.59 0.1759 0.53-0.0047 0.71 0.1717c0.18 0.1774 0.57 0.2184 0.87 0.0917 0.31-0.1261 1.24-0.2906 2.07-0.3656s1.67-0.2626 1.85-0.417c0.19-0.1543 0.43-0.1916 0.54-0.083 0.32 0.319-0.42 1.0109-1.13 1.0492-0.52 0.0284-0.54 0.0629-0.11 0.1751 0.3 0.0767 0.46 0.2667 0.36 0.4207-0.28 0.465 0.39 0.317 0.91-0.197 0.53-0.5279 2.64-0.7554 3.82-0.4115 0.54 0.1565 0.23 0.2302-1.06 0.2525-1.45 0.025-2.09 0.204-3.08 0.867-1.03 0.683-1.19 0.904-0.86 1.212 0.23 0.207 0.62 0.295 0.88 0.196 0.26-0.1 0.47-0.03 0.47 0.155s-0.23 0.337-0.51 0.337-0.73 0.208-1.02 0.463c-0.63 0.572-1.51 0.282-1.51-0.496 0-0.317-0.2-0.576-0.43-0.576-0.61 0-1.52 0.954-1.14 1.189 0.18 0.108-0.07 0.69-0.58 1.378-0.49 0.656-0.9 0.996-0.91 0.758-0.02-0.262-0.13-0.192-0.29 0.174-0.36 0.837-0.36 1.134 0 0.912 0.26-0.158 0.5 1.756 0.34 2.684-0.03 0.138 0.08 0.174 0.23 0.08 0.33-0.205 0.65 0.742 0.82 2.407 0.09 0.899 0.04 1.058-0.16 0.609-0.15-0.335-0.28-0.917-0.29-1.293-0.03-0.822-0.63-0.931-0.63-0.114 0 0.313 0.22 1.169 0.49 1.901s0.48 1.646 0.46 2.032c-0.02 0.456 0.09 0.626 0.31 0.485 0.22-0.131 0.27-0.081 0.14 0.127-0.29 0.476 0.48 1.835 1.76 3.097 1.11 1.097 1.38 1.802 0.72 1.856-0.21 0.017-0.89 0.078-1.52 0.135-0.62 0.057-1.2-0.014-1.29-0.157zm-2.29-2.442c0-0.167-0.21-0.304-0.47-0.304s-0.39 0.137-0.29 0.304 0.32 0.304 0.48 0.304c0.15 0 0.28-0.137 0.28-0.304zm-2.66-15.818c0.31 0 0.48-0.137 0.38-0.304-0.26-0.426 0.26-0.38 0.7 0.061 0.28 0.284 0.37 0.212 0.37-0.323 0-0.539-0.15-0.668-0.69-0.593-0.51 0.071-0.71-0.075-0.78-0.59-0.13-0.9382-0.67-0.8692-0.59 0.076 0.03 0.419 0.17 0.761 0.3 0.761 0.5 0 0.21 0.545-0.37 0.696-0.34 0.088-0.61 0.337-0.61 0.553 0 0.306 0.08 0.312 0.36 0.028 0.2-0.2 0.62-0.365 0.93-0.365zm2.3-0.988c-0.47-1.3823-0.55-1.4011-0.55-0.127 0 0.771 0.14 1.115 0.44 1.115 0.36 0 0.38-0.174 0.11-0.988zm4.94-0.176c-0.85-0.128-1.63 0.164-1.4 0.527 0.1 0.165 0.56 0.134 1.12-0.074 0.84-0.312 0.87-0.365 0.28-0.453zm-8.53-0.339c0-0.41-0.56-0.6951-0.92-0.471-0.17 0.105-0.23 0.319-0.13 0.475 0.22 0.369 1.05 0.367 1.05-0.004zm3.4-1.442c-0.22-0.0879-0.48-0.0771-0.58 0.024s0.08 0.1729 0.4 0.1597c0.35-0.0146 0.42-0.0866 0.18-0.1837zm11.43 21.286c0.37-0.072 0.99-0.072 1.37 0 0.37 0.073 0.06 0.132-0.69 0.132s-1.06-0.059-0.68-0.132zm-16.84-1.875c0.02-0.412 0.22-0.812 0.44-0.887 0.3-0.099 0.36 0.041 0.21 0.507-0.12 0.382-0.07 0.645 0.12 0.645 0.18 0 0.32 0.128 0.32 0.285s-0.25 0.266-0.56 0.243c-0.39-0.03-0.55-0.269-0.53-0.793zm33.72 0.459c-0.85-0.42-0.89-0.808-0.08-0.65 0.8 0.152 1.22 0.422 1.22 0.778 0 0.345-0.24 0.318-1.14-0.128zm-13.25-0.118c-0.36-0.636-0.5-1.902-0.21-1.902 0.17 0 0.45-0.344 0.61-0.765 0.26-0.675 1.34-1.364 2.14-1.364 0.15 0 0.5 0.336 0.77 0.747 0.56 0.86 0.32 1.619-0.34 1.071-0.33-0.273-0.45-0.123-0.61 0.749-0.29 1.545-0.89 1.816-0.66 0.294 0.17-1.08 0.15-1.135-0.25-0.606-0.25 0.333-0.36 0.884-0.25 1.292 0.14 0.573 0.05 0.712-0.45 0.712-0.34 0-0.68-0.103-0.75-0.228zm4.86-0.888c-0.33-0.332-0.23-1.014 0.15-1.014 0.2 0 0.27 0.091 0.16 0.201s-0.05 0.383 0.13 0.608c0.34 0.408-0.06 0.591-0.44 0.205zm-16.01-1.447c-0.46-1.189-0.37-1.376 0.18-0.376 0.25 0.475 0.39 0.939 0.3 1.031-0.1 0.092-0.31-0.203-0.48-0.655zm19.62 0.448c-0.25-0.405 1-1.511 1.72-1.525 0.8-0.016 2.07 0.65 2.07 1.085 0 0.305-0.18 0.295-0.84-0.047-1.09-0.573-1.28-0.556-2.07 0.191-0.45 0.42-0.75 0.519-0.88 0.296zm-2.4-0.894c0.26-1.077 0.38-1.25 0.86-1.25 0.46 0 0.91 1.047 0.64 1.482-0.09 0.149-0.51 0.336-0.93 0.416-0.68 0.131-0.74 0.069-0.57-0.648zm-23.85-0.083c-0.21-0.206-0.38-0.583-0.38-0.836 0-0.399 0.07-0.395 0.49 0.03 0.27 0.271 0.44 0.648 0.38 0.838-0.08 0.249-0.22 0.24-0.49-0.032zm37.26-0.454c0.2-0.083 0.62-0.088 0.91-0.011 0.3 0.077 0.13 0.145-0.37 0.151-0.5 0.007-0.75-0.056-0.54-0.14zm-42.3-1.524c-0.31-0.303-0.25-1.38 0.06-1.189 0.35 0.216 0.66 1.392 0.37 1.392-0.13 0-0.32-0.091-0.43-0.203zm28.01-1.391c-0.77-0.877-1.36-1.641-1.3-1.698 0.26-0.263 1.38 0.65 1.98 1.615 0.48 0.774 0.88 1.074 1.47 1.09 0.73 0.019 0.75 0.048 0.21 0.283-0.34 0.143-0.69 0.271-0.78 0.283-0.1 0.011-0.81-0.696-1.58-1.573zm-23.76-0.079c0.11-0.289-0.01-0.456-0.32-0.456-0.27 0-0.49-0.103-0.49-0.229s0.72-0.247 1.6-0.269 1.43 0.024 1.22 0.102-0.38 0.321-0.38 0.54c0 0.411-0.65 0.768-1.39 0.768-0.25 0-0.35-0.186-0.24-0.456zm-3.64-0.659c-0.12-0.112-0.2-0.557-0.18-0.989 0.02-0.771 0.03-0.769 0.29 0.112 0.28 0.925 0.24 1.23-0.11 0.877zm35.84-1.014c-0.1-0.167-0.04-0.304 0.13-0.304 0.18 0 0.33 0.137 0.33 0.304s-0.07 0.304-0.14 0.304-0.22-0.137-0.32-0.304zm-33.01-0.743c0-0.534 0.19-0.613 0.45-0.191 0.09 0.156 0.03 0.369-0.14 0.475-0.17 0.104-0.31-0.023-0.31-0.284zm18.81-2.331c-0.48-0.536-0.75-1.115-0.64-1.387 0.35-0.926 1.52-1.825 2.24-1.716 0.9 0.138 1.16 0.397 0.4 0.397-1.03 0-1.99 0.89-1.89 1.755 0.05 0.431 0.25 0.834 0.44 0.896 0.22 0.071 0.28-0.183 0.18-0.709-0.31-1.637 2.11-2.245 3.66-0.917 0.46 0.395 0.84 0.818 0.84 0.939s-0.43-0.135-0.94-0.568c-0.52-0.433-1.14-0.787-1.39-0.787-0.73 0-1.63 0.593-1.63 1.075 0 0.582 0.49 0.575 0.72-0.011 0.26-0.682 1.61-0.555 2.14 0.202 0.56 0.802 0.38 1.167-0.58 1.167-0.4 0-0.79 0.107-0.87 0.238s-0.53 0.262-1.01 0.291c-0.61 0.039-1.09-0.208-1.67-0.865zm4.79 0.669c-0.1-0.152 0.1-0.204 0.44-0.117 0.71 0.186 0.8 0.393 0.17 0.393-0.25 0-0.52-0.125-0.61-0.276zm-17.06-0.333c-0.1-0.167-0.04-0.304 0.14-0.304s0.32 0.137 0.32 0.304-0.06 0.304-0.13 0.304c-0.08 0-0.22-0.137-0.33-0.304zm18.41-0.621c0-0.175-0.34-0.682-0.75-1.127-0.41-0.444-0.68-0.878-0.6-0.964 0.21-0.202 1.96 1.668 1.96 2.087 0 0.177-0.14 0.321-0.31 0.321-0.16 0-0.3-0.143-0.3-0.317zm1.6-1.101c-0.21-0.085-0.39-0.294-0.39-0.465 0-0.18 0.23-0.216 0.54-0.086 0.29 0.124 1.01 0.329 1.59 0.454l1.07 0.228-1.22 0.011c-0.67 0.006-1.39-0.058-1.59-0.142zm-1.22-3.651c-0.21-0.084-0.38-0.295-0.38-0.469 0-0.207 0.14-0.199 0.41 0.023 0.22 0.186 0.49 0.248 0.6 0.138s0.2-0.04 0.2 0.155c0 0.372-0.2 0.409-0.83 0.153zm-3.27-0.851c-2.09-0.332-3.98-1.046-2.83-1.067 0.28-0.005 0.58 0.108 0.67 0.253 0.09 0.144 1.07 0.334 2.17 0.422 1.81 0.146 2.59 0.363 2.24 0.632-0.07 0.055-1.08-0.053-2.25-0.24zm-5.02-1.667c0-0.177 0.14-0.322 0.3-0.322 0.17 0 0.31 0.06 0.31 0.134s-0.14 0.219-0.31 0.322c-0.16 0.104-0.3 0.043-0.3-0.134zm1.91 0.103c0.1-0.101 0.36-0.112 0.58-0.024 0.24 0.097 0.17 0.169-0.18 0.183-0.32 0.014-0.5-0.058-0.4-0.159zm-21.38-1.3374c0.59-0.3812 0.91-0.3812 0.91 0 0 0.1673-0.3 0.3021-0.68 0.2995-0.55-0.0038-0.6-0.0611-0.23-0.2995zm18.17 0.1187c-0.1-0.1028-0.57-0.2236-1.04-0.2686-1.13-0.108-1.92-0.4509-1.92-0.8325 0-0.1699 0.22-0.1262 0.49 0.0971 0.42 0.3451 0.55 0.3184 0.92-0.1776 0.41-0.5705 0.43-0.5685 0.89 0.0875 0.52 0.7388 1.12 0.9151 0.87 0.2537-0.12-0.3084 0.04-0.378 0.63-0.2663 0.43 0.0832 0.75 0.1698 0.7 0.1926s-0.37 0.2798-0.72 0.5711c-0.35 0.2914-0.72 0.4457-0.82 0.343zm-11.09-0.9109c0.1-0.1011 0.36-0.1119 0.58-0.024 0.25 0.0971 0.17 0.1692-0.18 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm4.95-0.5006c0.29-0.9301 0.39-1.0064 0.81-0.5881 0.28 0.272 0.28 0.3599 0.01 0.3599-0.2 0-0.28 0.2054-0.18 0.4563 0.11 0.2936-0.01 0.4563-0.34 0.4563-0.38 0-0.46-0.1634-0.3-0.6844zm-6.78 0.1964c0.11-0.101 0.37-0.1119 0.59-0.024 0.24 0.0971 0.17 0.1692-0.19 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm3.96-1.0254c-0.05-0.7347 0.11-0.771 0.72-0.1596 0.25 0.2509 0.39 0.4563 0.31 0.4563s-0.34 0.0718-0.57 0.1595c-0.26 0.1-0.43-0.0704-0.46-0.4562zm-9.59-1.2487c0.1-0.4113 0.24-0.5492 0.32-0.3213 0.07 0.2194-0.01 0.5436-0.19 0.7203-0.23 0.2258-0.27 0.107-0.13-0.399zm1.98-0.2695c-0.29-0.4548-0.71-0.6186-1.6-0.6186-1.19 0-1.22-0.0203-1.22-1.0972 0-0.8755 0.1-1.0599 0.49-0.9126 0.26 0.1016 0.64 0.189 0.83 0.1943 0.2 0.0054 0.12 0.1898-0.17 0.4099-0.49 0.3701-0.47 0.4264 0.24 0.7489 0.62 0.2841 0.8 0.2645 0.94-0.1056 0.18-0.4727 0.93-0.5875 1.76-0.2698 0.86 0.33 0.52 0.8127-0.44 0.6214-0.85-0.17-1.32 0.2222-0.57 0.4729 0.19 0.0622 0.29 0.352 0.23 0.644-0.1 0.4777-0.15 0.4689-0.49-0.0876zm2.13-1.1066c0.11-0.1011 0.37-0.1119 0.59-0.024 0.24 0.0971 0.17 0.1692-0.19 0.1838-0.32 0.0132-0.5-0.0587-0.4-0.1598zm3.01-1.033c0-0.4182 0.07-0.5893 0.15-0.3802 0.09 0.2091 0.09 0.5513 0 0.7605-0.08 0.2091-0.15 0.038-0.15-0.3803z" transform="translate(10 1322.7)"/>
+ <rect id="d0e135" display="none" height="1e3px" width="288" y="1465.9" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e135"/>
</flowRegion>
<flowDiv xml:space="preserve">Notez le très grand nombre de nœuds du chemin. Après avoir appuyé sur <flowSpan font-weight="bold">Ctrl+L</flowSpan>, voici un résultat typique :</flowDiv>
</flowRoot>
- <text id="tracing-f06-fr.svgtext2885" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1512.8)" xml:space="preserve" line-height="100.00000%" font-size="6" y="128.33766" x="81.327339" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f06-fr.svgtspan2886" y="128.33766" x="81.327339" sodipodi:role="line">Image originale</tspan></text>
- <text id="tracing-f06-fr.svgtext2888" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1512.8)" xml:space="preserve" line-height="100.00000%" font-size="6" y="124.67367" x="227.35374" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f06-fr.svgtspan2889" y="124.67367" x="227.35374" sodipodi:role="line">Image vectorisée / Chemin résultant — Simplifié</tspan><tspan id="tracing-f06-fr.svgtspan2891" y="130.67367" x="227.35374" sodipodi:role="line">(384 nœuds)</tspan></text>
- <image id="tracing-f06-fr.svgimage1855" sodipodi:absref="/oldguitar.jpg" xlink:href="oldguitar.jpg" transform="translate(10 1512.8)" height="115.89" width="83.347" y=".058779" x="39.654"/>
- <path id="tracing-f06-fr.svgpath1856" d="m185.36 89.642v-26.312c2.75 0.214-1.46-0.484-0.01-2.745 0.01-9.174 0.03-18.348 0.04-27.522 3.14-0.382 3.52-0.813 5.15-0.14-0.1-0.543 6.61 1.062 4.27-1.007 2.32 0.05 5.04-0.393 1.89 1.17 3.75-0.672 7.61-2.582 11.13-0.349 5.33 0.097 3.03 0.037 1.6-1.05 3.17-0.429-6.19-0.139-1.76-0.086 2.08-2.801 9.63 3.884 6.92-3.22 1.56-0.493 1.39 6.127 2.89 0.699 2.56-3.733 2.4 3.493 6.37 1.604 1.07-3.701-4.17-6.684-7.12-8.166 2.81 1.684 5.26 0.793 2.17-2.023-0.34-3.194 5.23 3.836 8 3.024 4.33 1.742-7.33 2.644-0.51 2.855 1.09 1.705 4.84 6.01 3.95 0.683-0.04-1.819-0.23-10.127-1.49-4.793-3.46-0.879-5.06-4.836-7.71-4.155-0.62-1.477 1.16-1.504 1.74-2.567-0.82 2.324 6.49 3.348 5.91 0.852-1.43-2.129-5.79 1.75-4.95-1.772 4.54 0.377 2.67-2.664 0.35-2.344-1.5 1.835-9.89 3.443-8.62 2.425 1.63-1.707 7.28-1.237 9.99-4.7142 4.79-2.7554 9.75-5.3947 15.44-3.8839 1.82-1.8037-1.44-7.1732 2.88-5.9164 5.09 0.1172 10.31-0.5425 15.28 0.3304 3.71-0.4323 11.96-2.1157 9.38 4.9761 0.07 36.819 0.1 73.64-0.14 110.46-27.68-0.01-55.36-0.01-83.04-0.01v-26.308zm6.98 25.118c0.82-2.96-2.27 2.08 0 0zm2.36-1.64c-0.1-2.46-1.09 2.95 0 0zm1.18-0.13c-0.59 0.22 0.42 1.43 0 0zm-2.31-0.51c1.58-4.77-2.71 2.96 0 0zm-1.8 0.2c1.25-4.6 5.42-9.67 10.05-9.89 1.46-2.07-0.48-5.022-0.08-7.207-4.92-4.349-3.53 8.547-7.62 10.687-2.95 0.78-3.96 5.99-2.35 6.41zm55.06-3.05c-2.48-4.85 0.76 4.44 0 0zm-1.72-0.17c-1.39-1.41 0.42 1.88 0 0zm-1.33-2c-2.35-1.71 0.91 2.63 0 0zm2.27-1.53c-1.46-2.69-1.86 5.24 0 0zm-2.59-1.19c-1.89-3.23-0.52 1.45 0 0zm2.43-0.36c-0.62-0.67-0.69 1.01 0 0zm-7.49-2.42c-2.83-2.008-1.69 0.97 0 0zm6.03-0.21c-1.76-0.19 0.57 0.54 0 0zm-8.58-0.59c-3.11-1.194-2.11-3.874-3.74-4.116 2.63 0.914 2.1 2.124 4.87 1.989 3.48 2.777 6.6 0.793 10.04 1.597-2.31-2.311-8.5 0.46-11.59-3.244-7.35-3.872-13.34-10.542-21.9-11.762-3.12-1.3-9.61-4.182-9.7-6.483 3.78-4.319-6.22-0.693-7.05 1.356-4.07 3.426 2.15 9.561 3.33 8.707 1.3-2.198 1.89 0.297 0.24 0.76 0.88-0.786 6.31 2.681 2.61-1.175-2.48-1.531-3.67-1.488-2.15-2.992 2.87-0.736 4.68 6.909 4.42 2.247 1.83 1.796 5.58 4.532 5.56 0.741 0.52 0.625 4.94 3.58 8.1 4.86 1.02-2.932 3.16 2.699-0.02 0.955 3.2 2.982 9.7 2.899 13.91 5.44 1.06-0.077 2.23 1.74 3.07 1.12zm-5.78-3.458c0.76-1.184 0.76 1.185 0 0zm-1.21-0.608c-2.07 0.726-4.67-3.14-3.17-1.996-1.02 0.642 5.87 2.494 3.17 1.996zm-4.95-1.242c-2.89-0.68-0.27-2.401 0.59 0.288l-0.59-0.288zm-2.35-1.326c0.39-1.445 0.64 1.131 0 0zm2.35-0.067c2.17-0.346-0.21 0.54 0 0zm-21.82-4.495c0.77-1.191 0.84 0.639 0 0zm2.54-3.073c-0.18-1.645 1.9 1.716 0 0zm1.46 11.779c2.71-0.829 6.9-1.752 1.5-2.043-2.64-1.777-6.75 0.069-3.54 2.587l0.88-0.136 1.16-0.408zm12.42-3.575c-1.67-2.741-4.27-0.34 0 0zm-4.25-1.043c-0.76-1.184-0.76 1.184 0 0zm1.44-0.38c-1.08-1.196-0.86 1.472 0 0zm-7.53-2.966c-1.14-1.246-1.14 1.247 0 0zm23.58-8.213c-0.94-0.978-0.1 1.048 0 0zm-3.35-0.608c-1.4-1.082-0.02 1.039 0 0zm13.27-0.814c-1.11-1.392 0.83 2.245 0 0zm-14.5 0.24c-2.97-1.669-0.75 0.574 0 0zm3.51-0.661c-1.2 0.175-0.19-0.133 0 0zm-5.63-0.286c-1.61-1.111 0.35 1.048 0 0zm17.5-0.735c0.47-1.524 2.41-3.786 0.99-3.743 3.69-0.781 0.85 1.257 0.42 3.543 2.48-0.456 3.82-10.563 2.56-8.535-0.93 7.587-0.43-5.934-2.76-5.131 0.73 1.541-6.22 1.882-4.48-0.009-0.1-2.711-2.98-7.476-6.23-9.95 3.28 0.879 6.37 6.586 7.96 9.959 1.43-3.843-6.33-9.943-6-10.534 2.4 1.448 8.09 7.021 3.53 1.408-0.99-1.744-6.27-3.938-1.3-2.14 1.78 1.666 7.31 7.629 3.18 2.181-0.76-3.718-10.23-3.685-4.75-6.829 0.79-3.15 4.5-10.265 3.82-11.216-3.19 1.477 3.02-3.677-0.71-2.201-2.69-0.577-3.57 0.48-0.41 0.223 1.29 2.785-3.91 3.588-3.26 0.011-7.35-0.081-7.05 8.541-6.94 13.745-3.06 5.006-12.88 2.877-15.63 7.765-0.74 5.201 2.88 11.909 7.87 5.813 3.28-2.178 5.77-6.327 8.65-7.843 2.82 0.052 1.67 2.693 5.8 3.752 2.35 1.154 5.09 6.088 1.84 4.569 1.25 3.463 3.76 5.648 3.5 9.54 1.92-0.653 1.44 4.986-0.14 0.882-0.15 0.962 1.93 5.404 2.49 4.74zm-0.4-2.199c-0.66-1.585 2.33 0.146 0 0zm0.09-2.407c1.14 0.349 0.28-0.003 0 0zm3.52 0.211c-0.2-1.884 0.92 0.724 0 0zm-4.74-6.134c0.9-1.017 1.41 0.578 0 0zm3.07-1.638c0.13-1.322 0.28 1.138 0 0zm-11.43-8.999c-0.06-1.227 1.25 1.145 0 0zm-1.24-3.489c-1.24-1.454 2.22 1.459 0 0zm3.52-6.398c0.54-1.458 0.54 1.459 0 0zm-1.31-0.042c-0.2-1.668 1.51 0.757 0 0zm3.14-4.502c0.76-1.192 0.83 0.639 0 0zm0-2.13c0.9-1.838 0.61 1.385 0 0zm0.6-0.778c0.76-1.184 0.76 1.184 0 0zm-0.56-0.608c0.21-1.771 0.21 1.771 0 0zm-4.8-2.244c1.85-2.685 1.9 0.799 0 0zm2.33-0.722c1.26-2.756 0.04 2.034 0 0zm-10.55 41.427c2.09-1.901 0.15-2.928 0.22-2.567 0.64-6.943-1.89 5.81-1.95-0.172 1.21-4.798-2.06-2.684-1.73-0.78-2.96-2.157 3.58 5.713 3.46 3.519zm-0.34-2.263c0.17-2.077 0.17 2.076 0 0zm-2.3-0.507c-1.38-1.545 1.59 0.267 0 0zm14.09 0.507c-0.75-1.184-0.75 1.184 0 0zm-16.12-2.7c-0.85-2.691-0.73-2.76 0.47-1.711 2.69-2.567-2.17-0.216 0.26-3.117 3.54-0.062 1.92 5.57 2.86 0.256 0.92-2.793 2.11-8.138-2.22-4.227-3.65 0.708-3.43 7.869-1.37 8.799zm-0.86-4.525c-0.74-3.312 1.57 1.878 0 0zm17.1 4.041c2.74-4.011-1.05-4.045-1.59-2.691-0.67-2.235 7.12-3.356 0.7-3.966-2.01 2.365-0.83 4.029 0.12 6.678-0.92 0.797 0.76 1.116 0.77-0.021zm-1.13-5.232c-0.63-2.287 1.51 1.233 0 0zm-3.97 4.848c-0.59 0.219 0.42 1.426 0 0zm8.03 0.526c-0.76-1.184-0.76 1.184 0 0zm-14-0.989c-0.45-1.954-0.29 2.679 0 0zm12.64-0.148c1.19-2.489-0.87-6.203-0.25-2.128-0.76 0.289-0.82 3.848 0.25 2.128zm1.66-0.725c-0.86-1.772-1.06 3.159 0 0zm-5.32-3.935c-0.96-1.302 0.43-5.475-1.57-1.869-0.52-0.44-2.06 1.709-1.05-1.931 0.69-1.855-3.43-5.943-1.56-1.744 1.45 2.221 0.13 7.732 2.36 5.677-1.19 3.591 2.13-1.639 0.66 2.126 0.81-0.296 0.87-1.579 1.16-2.259zm-7.88 1.202c-3.64-1.948 1.48 2.216 0 0zm2.71-0.272c-1.61-1.111 0.34 1.048 0 0zm18.23-1.574c-1.48-3.111 0.31-6.392-1.22-7.493-2.92-4.395-3.05 7.292-1.16 3.818-3.38-3.834 2.33-4.719 0.47-2.533-1.29-0.263-0.38 2.221 0.37 1.184-0.56 1.063 1.2 7.036 1.54 5.024zm-21.6 0.389c-0.64-1.695-1.23 1.137 0 0zm2.3-0.673c-1.49-0.005 0.77-2.184-1.52-0.271-0.09 0.798 1.25 0.778 1.52 0.271zm1.99 0.054c1.72-3.875-1.75-0.072 0 0zm-25.3-1.694c-1.6-1.594 0.2 1.558 0 0zm3.67 0.118c1.97-1.146-1.26-0.601 1-1.995-2.4-0.193-5.7 2.944-1 1.995zm4.3-0.69c-0.36-4.705-1.62-2.487-0.67 0.618 0.37 0.338 0.64-0.415 0.67-0.618zm13.82 0.42c-2.59-1.399 0.01 1.384 0 0zm1.66-0.283c-0.07-1.416-1.13 1.018 0 0zm-16.87-0.941c-1.32-1.524-1.18 2.256 0 0zm-9.75-0.678c-1.11-0.592-0.31 2.733 0 0zm25.43 0.153c-1.17-3.726-0.54 3.648 0 0zm6.53 0.058c-1.14 0.349-0.28-0.003 0 0zm-5.02-0.134c1.98-2.281-0.92 0.136 0 0zm9.38-0.143c-0.28-1.809-1.41 1.127 0 0zm-30.98-0.846c3.73-2.006-1.83-2.412-1.18-1.445 0.23-0.087 0.05 4.156 1.18 1.445zm-13.54 0.313c2.25-1.034 4.71-2.709 0.05-1.695-3.06 0.012-4.51 2.543-0.05 1.695zm0.03-0.972c0.13-1.322 0.28 1.138 0 0zm10.55 0.43c-1.35-1.53 0.64 2.202 0 0zm-6.32 0.305c-0.73-1.215-0.48 1.131 0 0zm3.64-0.598c-0.66-1.516-1.81 2.374 0 0zm9.75 0.453c-3.25-1.087-2.48 1.328 0 0zm22.36-0.159c1.92 0.16-2.12-0.711-0.33 0.111l0.33-0.111zm2.5 0.397c-2.6-0.262 0.43 0.499 0 0zm12.45-2.298c3.09-4.364 4.75-7.99 5.1-11.035 1.17-4.263-2.99-10.455-6.81-9.774 3.3 0.379 2.31 2.315 4.51 3.56 1.02 2.691-0.36 3.899 0.74 4.96 1.38 2.316 1.07 0.837-0.89 1.794-0.29 1.194-1.26-2.244-1.94 1.289-3.41-0.177 0.5-1.44 0.82-3.37 2.04 3.276 0.09-6.077-1.56-4.654 1.22-1.671-1.84-0.558-1.27-2.408-1.78 4.003 0.22-2.847-1.52 1.172-1.75 3.046-3.33 8.045-0.12 5.31 2.17-4.923 1.31-0.357 0 2.297-1.37-1.04-0.95-1.401-2.86 0.168-0.89 1.737-2.11 5.343 0.12 2.097-0.31 2.071 1.47 1.882 1.68 1.724 0.19-2.098 4.08-0.797 2.25 1.286-2.97-2.22-0.05 4.435-3.38 0.764-1.59-1.025 0.06 2.243 2.14 2.332 3.26-0.032 0.46 7.457 2.99 2.488zm-1.81-3.27c0.43-2.005 1.03 1.923 0 0zm-1.43-0.305c0.75-1.184 0.75 1.185 0 0zm2.48-1.096c1.88-2.568 2.71 2.19 0 0zm2.69-0.577c1.8-1.717-1.96 0.146-0.61-2.129 0.45-4.219 0.95 0.951 0.81 0.238 0.3-2.891 2.38 1.392 0.76 0.687 0.65 0.297-0.75 2.651-0.96 1.204zm-2.13-1.368c1.09-2.079 0.68 1.965 0 0zm-0.31-1.199c0.66-1.103 0.85 0.673 0 0zm-5.17-1.977c0.77-1.192 0.84 0.639 0 0zm5.06-1.844c0.11-1.67 0.91 1.577 0 0zm4.99-1.798c-3.22-3.183 1.97-2.412 0 0zm-5.03 0.43c1.4-0.162 0.24-0.149 0 0zm-2.58-2.89c1.64-1.393-0.4 1.613 0 0zm2.43 0.152c1.41-1.305 0.59 1.212 0 0zm-58.96 17.131c-1.75-0.192 0.58 0.536 0 0zm15.96-1.215c-3.42-0.764 0.99 2.656 0 0zm-17.08 0.814c-1.58-1.173-0.34 1.261 0 0zm13.07-0.859c-2.95-0.04 0.01 1.891 0 0zm1.69 0.555c-1.13-1.06-0.82 0.618 0 0zm-4.04-0.211c-2.6-0.262 0.43 0.499 0 0zm11.39 0.003c-1.75-0.192 0.58 0.536 0 0zm22.08-0.882c-1.52-0.382-0.12 1.791 0 0zm-22.56-0.957c-0.59 0.219 0.42 1.427 0 0zm-0.49-0.082c-0.68-1.248-1.31 1.267 0 0zm22.82-0.295c-0.93-0.673-1.38 1.063 0 0zm13.26-0.535c-0.59 0.219 0.42 1.426 0 0zm-0.87-0.597c-2.32-1.309 1.05 1.821 0 0zm-2.15-2.358c-2.43-1.51 2.14 2.531 0 0zm-26.21-0.474c-1.4-0.162-0.24-0.148 0 0zm26.77-0.631c0.54-2.564-1.74 2.37 0 0zm-25.72-0.269c1.37-1.396-3.43 1.117 0 0zm2.78-1.626c-1.14 0.308 0.93 2.053 0 0zm-2.46-1.834c-0.75-2.027-1.79 1.707 0 0zm2.19-1.475c-0.69 0.626 0.81 1.923 0 0zm-0.67 0.664c-0.73-1.215-0.49 1.131 0 0zm-2.32-0.741c-1.4-1.1-0.43 1.429 0 0zm2.93-2.32c-2.71-4.102-2.27 2.386 0 0zm-17.65-0.893c-0.72-1.216-0.48 1.131 0 0zm16.57-1.416c-2.59-1.418 1.22 1.839 0 0zm10.4-1.094c-0.53-0.197 0.34 2.131 0 0zm-11.45-0.246c-1.21 0.175-0.2-0.133 0 0zm1.15-0.347c1.5-2.786-2.37 1.445 0 0zm-24.58-0.396c-0.73-1.696-0.33 1.612 0 0zm34.58-1.45c-0.39-0.762 0.17 4.267 0 0zm20.86 0.792c-0.69-1.79-1.04 0.708 0 0zm-31.25-0.715c3.49-3.39-3.25 1.01 0 0zm-30.07-4.336c-0.39-0.745 0.18 4.244 0 0zm18.36-0.258c-0.69-0.67-0.66 1.573 0 0zm53.04-5.988c1.5-5.207 1.19-14.231-2.24-16.276 2.87 4.949 1.25 10.413-0.66 15.397 0.23 3.498 3.01 6.894 2.9 0.879zm-53.04 2.678c-3.12-1.197-1.75 0.887 0 0zm22.51-1.369c-0.37-1.443-0.61 1.513 0 0zm-8.22-1.463c-0.71-3.95-0.73 2.913 0 0zm9.13-8.879c-2.08-1.599 0.69 1.522 0 0zm0.76-0.761c-0.93-0.977-0.1 1.048 0 0zm-0.91-1.217c-0.94-0.978-0.1 1.049 0 0zm15.66-3.346c-1.89-2.162-3.08-4.936-2.39-8.0387-2.37-1.9045-9.4-2.0434-5.68 1.8477 1.33-0.6548 5.12 7.193 8.07 6.191zm12.41-5.339c-3.6-1.6279-0.81 1.688 0 0zm-3.78-0.146c-4.12-1.3219-3.64 1.43 0 0zm1.82-1.6493c7.47 1.0245-3.66-2.2752-2.46 0.2065 0.79-0.2777 1.64-0.224 2.46-0.2065zm4.05-1.5215c-2.38-2.4059-8.62-2.5656-2.25-0.6056 0.39-0.0295 2.86 2.1469 2.25 0.6056zm-5.99-0.9077c-1.29 0.4219-0.73 2.3512 0 0zm6.7-0.9039c-1.05-2.6216-8.7-2.745-2.67-0.784 0.73-0.2943 3.07 2.6033 2.67 0.784zm-67.31 27.014c-1.1-2.571 1.29 0.232 0 0zm1.2-0.019c-0.02-1.746 0.98 0.286 0 0zm6.96-0.642c0.52-2.798 6.75-0.164 1.37-0.022l-1.37 0.022zm1.41-0.58c-1.75-0.192 0.58 0.536 0 0zm-7.35 0.208c0.75-1.184 0.75 1.184 0 0zm-2.13-0.566c1.63-0.646 2.28 0.982 0 0zm4.41-0.034c-4.06 0.368-3.98-2.948-3.61-5.322-0.85 0.793 2.04-5.422-1.31-4.523 1.11-3.037-2.37 0.117-2.36-2.769-0.59 2.782-0.07-2.511-2.72-0.406-1.67-1.905-0.59-10.205 0.7-6.456 1.16-2.5712 5.04-2.3132 7.74-1.6191 2.21 0.7971 8.55-1.6254 5.13 0.6121 0.22 0.938 8.73-1.0241 3.08 0.118-2.39 0.173-3.86 2.191-1.78 2.615-2.54 1.935-4.26-2.363-5.05 2.057-3.02 1.626 0.38 4.854 0.22 7.825-2-5.451-0.16 3.9 1.2 5.085 2.83 2.483 2.28 3.402-1.24 2.783zm-2.28-2.442c-1.41-1.305-0.6 1.212 0 0zm-2.66-15.818c2.58 0.263 0.01-2.7269-0.62-1.673 1.62 1.225-2.51 2.832 0.62 1.673zm2.29-0.988c-1.42-3.4483 0.22 3.434 0 0zm4.94-0.176c-3.49 0.067 0.9 1.216 0 0zm-8.53-0.339c-1.22-2.1177-1.52 1.434 0 0zm3.4-1.4421c-1.75-0.1917 0.58 0.5357 0 0zm11.43 21.286c3.41-0.153-0.16 0.432 0 0zm-16.84-1.875c0.89-2.904 1.32 2.978 0 0zm33.72 0.459c-2.24-2.221 3.4 1.277 0 0zm-13.25-0.118c-2.46-4.069 6-4.041 2.61-2.268-0.86 4.798-1.15-2.368-1.39 2.355l-0.46 0.141-0.76-0.228zm4.86-0.888c-0.77-2.831 1.56 0.877 0 0zm-16.01-1.447c-1.04-3.251 1.44 2.399 0 0zm19.62 0.448c0.96-3.378 6.35 0.725 1.39-0.722-0.45 0.148-0.81 1.123-1.39 0.722zm-2.39-0.894c1.56-3.98 1.93 2.882 0 0zm-23.86-0.083c-2.03-3.741 1.86 1.13 0 0zm37.26-0.454c4.28-0.174-0.77 0.387 0 0zm-42.3-1.524c-1.06-3.201 1.7 0.927 0 0zm28.01-1.391c-4.11-4.092 4.65 1.826 1.58 1.572-0.6-0.441-1.07-1.029-1.58-1.572zm-23.76-0.079c-2.02-2.201 4.74-0.051-0.01 0.329l0.01-0.329zm-3.64-0.659c-0.96-3.087 1.16 0.37 0 0zm35.84-1.014c-0.06-1.227 1.25 1.145 0 0zm-33-0.743c0.39-1.445 0.64 1.131 0 0zm18.8-2.331c-2.55-3.038 5.47-3.996 0.22-1.59-0.1 3.906 1.42-3.759 4.17-0.092 2.93 0.373-5.29-0.049-2.4 0.649 5.71-1.122 0.15 4.002-1.99 1.033zm4.79 0.669c0.31-0.744 2.48 1.139 0 0zm-17.05-0.333c-0.07-1.226 1.25 1.146 0 0zm18.4-0.622c-3.22-3.203 0.91-1.51 0.31 0.318l-0.22-0.093-0.09-0.225zm1.6-1.1c-0.61-1.418 5.35 0.922 0.62 0.105l-0.62-0.105zm-1.22-3.651c-1.5-1.579 2.55 0.626 0 0zm-3.27-0.851c-6.2-1.265 0.19-0.852 2.26 0.24-0.76 0.014-1.51-0.137-2.26-0.24zm-5.02-1.667c0.66-1.1024 0.85 0.673 0 0zm1.91 0.103c1.5-0.52 0.22 0.626 0 0zm-21.37-1.3375c2.2-1.1364-0.51 1.3665 0 0zm18.16 0.1188c-4.61-0.2578-1.89-2.3707 0.26-0.4972-0.29-1.5971 3.16-0.1293-0.26 0.4972zm-11.09-0.9111c1.51-0.5199 0.22 0.6263 0 0zm4.96-0.5004c1.4-2.6223 0.52 2.3152 0-0.0001v0.0001zm-6.78 0.1962c1.5-0.5198 0.22 0.6263 0 0zm3.95-1.0253c0.58-1.8572 1.45 1.8571 0 0zm-9.59-1.2487c0.89-1.6927-0.18 1.9301 0 0zm1.98-0.2695c-2.04 0.7421-4.42-3.3555-1.4-2.3097-1.65 1.8686 6.08 0.1224 1.32 1.5497 0.79-0.0983 0.72 2.0665 0.08 0.76zm2.14-1.1066c1.5-0.5198 0.21 0.6261 0 0zm3.01-1.033c0.21-1.7729 0.21 1.7727 0 0z" transform="translate(10 1512.8)"/>
- <rect id="d0e151" display="none" height="1e3px" width="288" y="1656.2" x="10"/>
+ <text id="tracing-f06-fr.svgtext2885" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1502.8)" xml:space="preserve" line-height="100.00000%" font-size="6" y="128.33766" x="81.327339" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f06-fr.svgtspan2886" y="128.33766" x="81.327339" sodipodi:role="line">Image originale</tspan></text>
+ <text id="tracing-f06-fr.svgtext2888" style="text-anchor:middle" font-weight="bold" sodipodi:linespacing="100.00000%" display="block" transform="translate(10 1502.8)" xml:space="preserve" line-height="100.00000%" font-size="6" y="124.67367" x="227.35374" font-family="sans-serif" sodipodi:insensitive="true" fill="#000000"><tspan id="tracing-f06-fr.svgtspan2889" y="124.67367" x="227.35374" sodipodi:role="line">Image vectorisée / Chemin résultant — Simplifié</tspan><tspan id="tracing-f06-fr.svgtspan2891" y="130.67367" x="227.35374" sodipodi:role="line">(384 nœuds)</tspan></text>
+ <image id="tracing-f06-fr.svgimage1855" sodipodi:absref="/oldguitar.jpg" xlink:href="oldguitar.jpg" transform="translate(10 1502.8)" height="115.89" width="83.347" y=".058779" x="39.654"/>
+ <path id="tracing-f06-fr.svgpath1856" d="m185.36 89.642v-26.312c2.75 0.214-1.46-0.484-0.01-2.745 0.01-9.174 0.03-18.348 0.04-27.522 3.14-0.382 3.52-0.813 5.15-0.14-0.1-0.543 6.61 1.062 4.27-1.007 2.32 0.05 5.04-0.393 1.89 1.17 3.75-0.672 7.61-2.582 11.13-0.349 5.33 0.097 3.03 0.037 1.6-1.05 3.17-0.429-6.19-0.139-1.76-0.086 2.08-2.801 9.63 3.884 6.92-3.22 1.56-0.493 1.39 6.127 2.89 0.699 2.56-3.733 2.4 3.493 6.37 1.604 1.07-3.701-4.17-6.684-7.12-8.166 2.81 1.684 5.26 0.793 2.17-2.023-0.34-3.194 5.23 3.836 8 3.024 4.33 1.742-7.33 2.644-0.51 2.855 1.09 1.705 4.84 6.01 3.95 0.683-0.04-1.819-0.23-10.127-1.49-4.793-3.46-0.879-5.06-4.836-7.71-4.155-0.62-1.477 1.16-1.504 1.74-2.567-0.82 2.324 6.49 3.348 5.91 0.852-1.43-2.129-5.79 1.75-4.95-1.772 4.54 0.377 2.67-2.664 0.35-2.344-1.5 1.835-9.89 3.443-8.62 2.425 1.63-1.707 7.28-1.237 9.99-4.7142 4.79-2.7554 9.75-5.3947 15.44-3.8839 1.82-1.8037-1.44-7.1732 2.88-5.9164 5.09 0.1172 10.31-0.5425 15.28 0.3304 3.71-0.4323 11.96-2.1157 9.38 4.9761 0.07 36.819 0.1 73.64-0.14 110.46-27.68-0.01-55.36-0.01-83.04-0.01v-26.308zm6.98 25.118c0.82-2.96-2.27 2.08 0 0zm2.36-1.64c-0.1-2.46-1.09 2.95 0 0zm1.18-0.13c-0.59 0.22 0.42 1.43 0 0zm-2.31-0.51c1.58-4.77-2.71 2.96 0 0zm-1.8 0.2c1.25-4.6 5.42-9.67 10.05-9.89 1.46-2.07-0.48-5.022-0.08-7.207-4.92-4.349-3.53 8.547-7.62 10.687-2.95 0.78-3.96 5.99-2.35 6.41zm55.06-3.05c-2.48-4.85 0.76 4.44 0 0zm-1.72-0.17c-1.39-1.41 0.42 1.88 0 0zm-1.33-2c-2.35-1.71 0.91 2.63 0 0zm2.27-1.53c-1.46-2.69-1.86 5.24 0 0zm-2.59-1.19c-1.89-3.23-0.52 1.45 0 0zm2.43-0.36c-0.62-0.67-0.69 1.01 0 0zm-7.49-2.42c-2.83-2.008-1.69 0.97 0 0zm6.03-0.21c-1.76-0.19 0.57 0.54 0 0zm-8.58-0.59c-3.11-1.194-2.11-3.874-3.74-4.116 2.63 0.914 2.1 2.124 4.87 1.989 3.48 2.777 6.6 0.793 10.04 1.597-2.31-2.311-8.5 0.46-11.59-3.244-7.35-3.872-13.34-10.542-21.9-11.762-3.12-1.3-9.61-4.182-9.7-6.483 3.78-4.319-6.22-0.693-7.05 1.356-4.07 3.426 2.15 9.561 3.33 8.707 1.3-2.198 1.89 0.297 0.24 0.76 0.88-0.786 6.31 2.681 2.61-1.175-2.48-1.531-3.67-1.488-2.15-2.992 2.87-0.736 4.68 6.909 4.42 2.247 1.83 1.796 5.58 4.532 5.56 0.741 0.52 0.625 4.94 3.58 8.1 4.86 1.02-2.932 3.16 2.699-0.02 0.955 3.2 2.982 9.7 2.899 13.91 5.44 1.06-0.077 2.23 1.74 3.07 1.12zm-5.78-3.458c0.76-1.184 0.76 1.185 0 0zm-1.21-0.608c-2.07 0.726-4.67-3.14-3.17-1.996-1.02 0.642 5.87 2.494 3.17 1.996zm-4.95-1.242c-2.89-0.68-0.27-2.401 0.59 0.288l-0.59-0.288zm-2.35-1.326c0.39-1.445 0.64 1.131 0 0zm2.35-0.067c2.17-0.346-0.21 0.54 0 0zm-21.82-4.495c0.77-1.191 0.84 0.639 0 0zm2.54-3.073c-0.18-1.645 1.9 1.716 0 0zm1.46 11.779c2.71-0.829 6.9-1.752 1.5-2.043-2.64-1.777-6.75 0.069-3.54 2.587l0.88-0.136 1.16-0.408zm12.42-3.575c-1.67-2.741-4.27-0.34 0 0zm-4.25-1.043c-0.76-1.184-0.76 1.184 0 0zm1.44-0.38c-1.08-1.196-0.86 1.472 0 0zm-7.53-2.966c-1.14-1.246-1.14 1.247 0 0zm23.58-8.213c-0.94-0.978-0.1 1.048 0 0zm-3.35-0.608c-1.4-1.082-0.02 1.039 0 0zm13.27-0.814c-1.11-1.392 0.83 2.245 0 0zm-14.5 0.24c-2.97-1.669-0.75 0.574 0 0zm3.51-0.661c-1.2 0.175-0.19-0.133 0 0zm-5.63-0.286c-1.61-1.111 0.35 1.048 0 0zm17.5-0.735c0.47-1.524 2.41-3.786 0.99-3.743 3.69-0.781 0.85 1.257 0.42 3.543 2.48-0.456 3.82-10.563 2.56-8.535-0.93 7.587-0.43-5.934-2.76-5.131 0.73 1.541-6.22 1.882-4.48-0.009-0.1-2.711-2.98-7.476-6.23-9.95 3.28 0.879 6.37 6.586 7.96 9.959 1.43-3.843-6.33-9.943-6-10.534 2.4 1.448 8.09 7.021 3.53 1.408-0.99-1.744-6.27-3.938-1.3-2.14 1.78 1.666 7.31 7.629 3.18 2.181-0.76-3.718-10.23-3.685-4.75-6.829 0.79-3.15 4.5-10.265 3.82-11.216-3.19 1.477 3.02-3.677-0.71-2.201-2.69-0.577-3.57 0.48-0.41 0.223 1.29 2.785-3.91 3.588-3.26 0.011-7.35-0.081-7.05 8.541-6.94 13.745-3.06 5.006-12.88 2.877-15.63 7.765-0.74 5.201 2.88 11.909 7.87 5.813 3.28-2.178 5.77-6.327 8.65-7.843 2.82 0.052 1.67 2.693 5.8 3.752 2.35 1.154 5.09 6.088 1.84 4.569 1.25 3.463 3.76 5.648 3.5 9.54 1.92-0.653 1.44 4.986-0.14 0.882-0.15 0.962 1.93 5.404 2.49 4.74zm-0.4-2.199c-0.66-1.585 2.33 0.146 0 0zm0.09-2.407c1.14 0.349 0.28-0.003 0 0zm3.52 0.211c-0.2-1.884 0.92 0.724 0 0zm-4.74-6.134c0.9-1.017 1.41 0.578 0 0zm3.07-1.638c0.13-1.322 0.28 1.138 0 0zm-11.43-8.999c-0.06-1.227 1.25 1.145 0 0zm-1.24-3.489c-1.24-1.454 2.22 1.459 0 0zm3.52-6.398c0.54-1.458 0.54 1.459 0 0zm-1.31-0.042c-0.2-1.668 1.51 0.757 0 0zm3.14-4.502c0.76-1.192 0.83 0.639 0 0zm0-2.13c0.9-1.838 0.61 1.385 0 0zm0.6-0.778c0.76-1.184 0.76 1.184 0 0zm-0.56-0.608c0.21-1.771 0.21 1.771 0 0zm-4.8-2.244c1.85-2.685 1.9 0.799 0 0zm2.33-0.722c1.26-2.756 0.04 2.034 0 0zm-10.55 41.427c2.09-1.901 0.15-2.928 0.22-2.567 0.64-6.943-1.89 5.81-1.95-0.172 1.21-4.798-2.06-2.684-1.73-0.78-2.96-2.157 3.58 5.713 3.46 3.519zm-0.34-2.263c0.17-2.077 0.17 2.076 0 0zm-2.3-0.507c-1.38-1.545 1.59 0.267 0 0zm14.09 0.507c-0.75-1.184-0.75 1.184 0 0zm-16.12-2.7c-0.85-2.691-0.73-2.76 0.47-1.711 2.69-2.567-2.17-0.216 0.26-3.117 3.54-0.062 1.92 5.57 2.86 0.256 0.92-2.793 2.11-8.138-2.22-4.227-3.65 0.708-3.43 7.869-1.37 8.799zm-0.86-4.525c-0.74-3.312 1.57 1.878 0 0zm17.1 4.041c2.74-4.011-1.05-4.045-1.59-2.691-0.67-2.235 7.12-3.356 0.7-3.966-2.01 2.365-0.83 4.029 0.12 6.678-0.92 0.797 0.76 1.116 0.77-0.021zm-1.13-5.232c-0.63-2.287 1.51 1.233 0 0zm-3.97 4.848c-0.59 0.219 0.42 1.426 0 0zm8.03 0.526c-0.76-1.184-0.76 1.184 0 0zm-14-0.989c-0.45-1.954-0.29 2.679 0 0zm12.64-0.148c1.19-2.489-0.87-6.203-0.25-2.128-0.76 0.289-0.82 3.848 0.25 2.128zm1.66-0.725c-0.86-1.772-1.06 3.159 0 0zm-5.32-3.935c-0.96-1.302 0.43-5.475-1.57-1.869-0.52-0.44-2.06 1.709-1.05-1.931 0.69-1.855-3.43-5.943-1.56-1.744 1.45 2.221 0.13 7.732 2.36 5.677-1.19 3.591 2.13-1.639 0.66 2.126 0.81-0.296 0.87-1.579 1.16-2.259zm-7.88 1.202c-3.64-1.948 1.48 2.216 0 0zm2.71-0.272c-1.61-1.111 0.34 1.048 0 0zm18.23-1.574c-1.48-3.111 0.31-6.392-1.22-7.493-2.92-4.395-3.05 7.292-1.16 3.818-3.38-3.834 2.33-4.719 0.47-2.533-1.29-0.263-0.38 2.221 0.37 1.184-0.56 1.063 1.2 7.036 1.54 5.024zm-21.6 0.389c-0.64-1.695-1.23 1.137 0 0zm2.3-0.673c-1.49-0.005 0.77-2.184-1.52-0.271-0.09 0.798 1.25 0.778 1.52 0.271zm1.99 0.054c1.72-3.875-1.75-0.072 0 0zm-25.3-1.694c-1.6-1.594 0.2 1.558 0 0zm3.67 0.118c1.97-1.146-1.26-0.601 1-1.995-2.4-0.193-5.7 2.944-1 1.995zm4.3-0.69c-0.36-4.705-1.62-2.487-0.67 0.618 0.37 0.338 0.64-0.415 0.67-0.618zm13.82 0.42c-2.59-1.399 0.01 1.384 0 0zm1.66-0.283c-0.07-1.416-1.13 1.018 0 0zm-16.87-0.941c-1.32-1.524-1.18 2.256 0 0zm-9.75-0.678c-1.11-0.592-0.31 2.733 0 0zm25.43 0.153c-1.17-3.726-0.54 3.648 0 0zm6.53 0.058c-1.14 0.349-0.28-0.003 0 0zm-5.02-0.134c1.98-2.281-0.92 0.136 0 0zm9.38-0.143c-0.28-1.809-1.41 1.127 0 0zm-30.98-0.846c3.73-2.006-1.83-2.412-1.18-1.445 0.23-0.087 0.05 4.156 1.18 1.445zm-13.54 0.313c2.25-1.034 4.71-2.709 0.05-1.695-3.06 0.012-4.51 2.543-0.05 1.695zm0.03-0.972c0.13-1.322 0.28 1.138 0 0zm10.55 0.43c-1.35-1.53 0.64 2.202 0 0zm-6.32 0.305c-0.73-1.215-0.48 1.131 0 0zm3.64-0.598c-0.66-1.516-1.81 2.374 0 0zm9.75 0.453c-3.25-1.087-2.48 1.328 0 0zm22.36-0.159c1.92 0.16-2.12-0.711-0.33 0.111l0.33-0.111zm2.5 0.397c-2.6-0.262 0.43 0.499 0 0zm12.45-2.298c3.09-4.364 4.75-7.99 5.1-11.035 1.17-4.263-2.99-10.455-6.81-9.774 3.3 0.379 2.31 2.315 4.51 3.56 1.02 2.691-0.36 3.899 0.74 4.96 1.38 2.316 1.07 0.837-0.89 1.794-0.29 1.194-1.26-2.244-1.94 1.289-3.41-0.177 0.5-1.44 0.82-3.37 2.04 3.276 0.09-6.077-1.56-4.654 1.22-1.671-1.84-0.558-1.27-2.408-1.78 4.003 0.22-2.847-1.52 1.172-1.75 3.046-3.33 8.045-0.12 5.31 2.17-4.923 1.31-0.357 0 2.297-1.37-1.04-0.95-1.401-2.86 0.168-0.89 1.737-2.11 5.343 0.12 2.097-0.31 2.071 1.47 1.882 1.68 1.724 0.19-2.098 4.08-0.797 2.25 1.286-2.97-2.22-0.05 4.435-3.38 0.764-1.59-1.025 0.06 2.243 2.14 2.332 3.26-0.032 0.46 7.457 2.99 2.488zm-1.81-3.27c0.43-2.005 1.03 1.923 0 0zm-1.43-0.305c0.75-1.184 0.75 1.185 0 0zm2.48-1.096c1.88-2.568 2.71 2.19 0 0zm2.69-0.577c1.8-1.717-1.96 0.146-0.61-2.129 0.45-4.219 0.95 0.951 0.81 0.238 0.3-2.891 2.38 1.392 0.76 0.687 0.65 0.297-0.75 2.651-0.96 1.204zm-2.13-1.368c1.09-2.079 0.68 1.965 0 0zm-0.31-1.199c0.66-1.103 0.85 0.673 0 0zm-5.17-1.977c0.77-1.192 0.84 0.639 0 0zm5.06-1.844c0.11-1.67 0.91 1.577 0 0zm4.99-1.798c-3.22-3.183 1.97-2.412 0 0zm-5.03 0.43c1.4-0.162 0.24-0.149 0 0zm-2.58-2.89c1.64-1.393-0.4 1.613 0 0zm2.43 0.152c1.41-1.305 0.59 1.212 0 0zm-58.96 17.131c-1.75-0.192 0.58 0.536 0 0zm15.96-1.215c-3.42-0.764 0.99 2.656 0 0zm-17.08 0.814c-1.58-1.173-0.34 1.261 0 0zm13.07-0.859c-2.95-0.04 0.01 1.891 0 0zm1.69 0.555c-1.13-1.06-0.82 0.618 0 0zm-4.04-0.211c-2.6-0.262 0.43 0.499 0 0zm11.39 0.003c-1.75-0.192 0.58 0.536 0 0zm22.08-0.882c-1.52-0.382-0.12 1.791 0 0zm-22.56-0.957c-0.59 0.219 0.42 1.427 0 0zm-0.49-0.082c-0.68-1.248-1.31 1.267 0 0zm22.82-0.295c-0.93-0.673-1.38 1.063 0 0zm13.26-0.535c-0.59 0.219 0.42 1.426 0 0zm-0.87-0.597c-2.32-1.309 1.05 1.821 0 0zm-2.15-2.358c-2.43-1.51 2.14 2.531 0 0zm-26.21-0.474c-1.4-0.162-0.24-0.148 0 0zm26.77-0.631c0.54-2.564-1.74 2.37 0 0zm-25.72-0.269c1.37-1.396-3.43 1.117 0 0zm2.78-1.626c-1.14 0.308 0.93 2.053 0 0zm-2.46-1.834c-0.75-2.027-1.79 1.707 0 0zm2.19-1.475c-0.69 0.626 0.81 1.923 0 0zm-0.67 0.664c-0.73-1.215-0.49 1.131 0 0zm-2.32-0.741c-1.4-1.1-0.43 1.429 0 0zm2.93-2.32c-2.71-4.102-2.27 2.386 0 0zm-17.65-0.893c-0.72-1.216-0.48 1.131 0 0zm16.57-1.416c-2.59-1.418 1.22 1.839 0 0zm10.4-1.094c-0.53-0.197 0.34 2.131 0 0zm-11.45-0.246c-1.21 0.175-0.2-0.133 0 0zm1.15-0.347c1.5-2.786-2.37 1.445 0 0zm-24.58-0.396c-0.73-1.696-0.33 1.612 0 0zm34.58-1.45c-0.39-0.762 0.17 4.267 0 0zm20.86 0.792c-0.69-1.79-1.04 0.708 0 0zm-31.25-0.715c3.49-3.39-3.25 1.01 0 0zm-30.07-4.336c-0.39-0.745 0.18 4.244 0 0zm18.36-0.258c-0.69-0.67-0.66 1.573 0 0zm53.04-5.988c1.5-5.207 1.19-14.231-2.24-16.276 2.87 4.949 1.25 10.413-0.66 15.397 0.23 3.498 3.01 6.894 2.9 0.879zm-53.04 2.678c-3.12-1.197-1.75 0.887 0 0zm22.51-1.369c-0.37-1.443-0.61 1.513 0 0zm-8.22-1.463c-0.71-3.95-0.73 2.913 0 0zm9.13-8.879c-2.08-1.599 0.69 1.522 0 0zm0.76-0.761c-0.93-0.977-0.1 1.048 0 0zm-0.91-1.217c-0.94-0.978-0.1 1.049 0 0zm15.66-3.346c-1.89-2.162-3.08-4.936-2.39-8.0387-2.37-1.9045-9.4-2.0434-5.68 1.8477 1.33-0.6548 5.12 7.193 8.07 6.191zm12.41-5.339c-3.6-1.6279-0.81 1.688 0 0zm-3.78-0.146c-4.12-1.3219-3.64 1.43 0 0zm1.82-1.6493c7.47 1.0245-3.66-2.2752-2.46 0.2065 0.79-0.2777 1.64-0.224 2.46-0.2065zm4.05-1.5215c-2.38-2.4059-8.62-2.5656-2.25-0.6056 0.39-0.0295 2.86 2.1469 2.25 0.6056zm-5.99-0.9077c-1.29 0.4219-0.73 2.3512 0 0zm6.7-0.9039c-1.05-2.6216-8.7-2.745-2.67-0.784 0.73-0.2943 3.07 2.6033 2.67 0.784zm-67.31 27.014c-1.1-2.571 1.29 0.232 0 0zm1.2-0.019c-0.02-1.746 0.98 0.286 0 0zm6.96-0.642c0.52-2.798 6.75-0.164 1.37-0.022l-1.37 0.022zm1.41-0.58c-1.75-0.192 0.58 0.536 0 0zm-7.35 0.208c0.75-1.184 0.75 1.184 0 0zm-2.13-0.566c1.63-0.646 2.28 0.982 0 0zm4.41-0.034c-4.06 0.368-3.98-2.948-3.61-5.322-0.85 0.793 2.04-5.422-1.31-4.523 1.11-3.037-2.37 0.117-2.36-2.769-0.59 2.782-0.07-2.511-2.72-0.406-1.67-1.905-0.59-10.205 0.7-6.456 1.16-2.5712 5.04-2.3132 7.74-1.6191 2.21 0.7971 8.55-1.6254 5.13 0.6121 0.22 0.938 8.73-1.0241 3.08 0.118-2.39 0.173-3.86 2.191-1.78 2.615-2.54 1.935-4.26-2.363-5.05 2.057-3.02 1.626 0.38 4.854 0.22 7.825-2-5.451-0.16 3.9 1.2 5.085 2.83 2.483 2.28 3.402-1.24 2.783zm-2.28-2.442c-1.41-1.305-0.6 1.212 0 0zm-2.66-15.818c2.58 0.263 0.01-2.7269-0.62-1.673 1.62 1.225-2.51 2.832 0.62 1.673zm2.29-0.988c-1.42-3.4483 0.22 3.434 0 0zm4.94-0.176c-3.49 0.067 0.9 1.216 0 0zm-8.53-0.339c-1.22-2.1177-1.52 1.434 0 0zm3.4-1.4421c-1.75-0.1917 0.58 0.5357 0 0zm11.43 21.286c3.41-0.153-0.16 0.432 0 0zm-16.84-1.875c0.89-2.904 1.32 2.978 0 0zm33.72 0.459c-2.24-2.221 3.4 1.277 0 0zm-13.25-0.118c-2.46-4.069 6-4.041 2.61-2.268-0.86 4.798-1.15-2.368-1.39 2.355l-0.46 0.141-0.76-0.228zm4.86-0.888c-0.77-2.831 1.56 0.877 0 0zm-16.01-1.447c-1.04-3.251 1.44 2.399 0 0zm19.62 0.448c0.96-3.378 6.35 0.725 1.39-0.722-0.45 0.148-0.81 1.123-1.39 0.722zm-2.39-0.894c1.56-3.98 1.93 2.882 0 0zm-23.86-0.083c-2.03-3.741 1.86 1.13 0 0zm37.26-0.454c4.28-0.174-0.77 0.387 0 0zm-42.3-1.524c-1.06-3.201 1.7 0.927 0 0zm28.01-1.391c-4.11-4.092 4.65 1.826 1.58 1.572-0.6-0.441-1.07-1.029-1.58-1.572zm-23.76-0.079c-2.02-2.201 4.74-0.051-0.01 0.329l0.01-0.329zm-3.64-0.659c-0.96-3.087 1.16 0.37 0 0zm35.84-1.014c-0.06-1.227 1.25 1.145 0 0zm-33-0.743c0.39-1.445 0.64 1.131 0 0zm18.8-2.331c-2.55-3.038 5.47-3.996 0.22-1.59-0.1 3.906 1.42-3.759 4.17-0.092 2.93 0.373-5.29-0.049-2.4 0.649 5.71-1.122 0.15 4.002-1.99 1.033zm4.79 0.669c0.31-0.744 2.48 1.139 0 0zm-17.05-0.333c-0.07-1.226 1.25 1.146 0 0zm18.4-0.622c-3.22-3.203 0.91-1.51 0.31 0.318l-0.22-0.093-0.09-0.225zm1.6-1.1c-0.61-1.418 5.35 0.922 0.62 0.105l-0.62-0.105zm-1.22-3.651c-1.5-1.579 2.55 0.626 0 0zm-3.27-0.851c-6.2-1.265 0.19-0.852 2.26 0.24-0.76 0.014-1.51-0.137-2.26-0.24zm-5.02-1.667c0.66-1.1024 0.85 0.673 0 0zm1.91 0.103c1.5-0.52 0.22 0.626 0 0zm-21.37-1.3375c2.2-1.1364-0.51 1.3665 0 0zm18.16 0.1188c-4.61-0.2578-1.89-2.3707 0.26-0.4972-0.29-1.5971 3.16-0.1293-0.26 0.4972zm-11.09-0.9111c1.51-0.5199 0.22 0.6263 0 0zm4.96-0.5004c1.4-2.6223 0.52 2.3152 0-0.0001v0.0001zm-6.78 0.1962c1.5-0.5198 0.22 0.6263 0 0zm3.95-1.0253c0.58-1.8572 1.45 1.8571 0 0zm-9.59-1.2487c0.89-1.6927-0.18 1.9301 0 0zm1.98-0.2695c-2.04 0.7421-4.42-3.3555-1.4-2.3097-1.65 1.8686 6.08 0.1224 1.32 1.5497 0.79-0.0983 0.72 2.0665 0.08 0.76zm2.14-1.1066c1.5-0.5198 0.21 0.6261 0 0zm3.01-1.033c0.21-1.7729 0.21 1.7727 0 0z" transform="translate(10 1502.8)"/>
+ <rect id="d0e151" display="none" height="1e3px" width="288" y="1646.2" x="10"/>
<flowRoot font-size="8" font-family="serif" line-height="133.00000%" fill="#000000">
<flowRegion>
<use y="0" x="0" xlink:href="#d0e151"/>
</flowRegion>
<flowDiv xml:space="preserve">La représentation est un peu plus approximative et grossière, mais le dessin est plus simple et plus facile à éditer. Gardez à l&apos;esprit que ce que vous devez obtenir n&apos;est pas un rendu exact de l&apos;image mais un ensemble de courbes que vous pourrez utiliser dans votre dessin.</flowDiv>
</flowRoot>
- <g transform="translate(0 1706.2)">
+ <g transform="translate(0 1696.2)">
<defs id="defs3" xmlns:cc="http://creativecommons.org/ns#">
<linearGradient id="linearGradient2465" y2="-7528.7" xlink:href="#linearGradient841" gradientUnits="userSpaceOnUse" x2="76.847" gradientTransform="matrix(2.1496 0 0 .46519 -.13015 3495.4)" y1="-7656.4" x1="76.847" inkscape:collect="always"/>
<filter id="filter57" height="1.2" width="1.2" color-interpolation-filters="sRGB" y="-.1" x="-.1" inkscape:label="Drop shadow, custom">
diff --git a/src/2geom/sbasis-geometric.cpp b/src/2geom/sbasis-geometric.cpp
index 3fe27748e..19eccc451 100644
--- a/src/2geom/sbasis-geometric.cpp
+++ b/src/2geom/sbasis-geometric.cpp
@@ -227,7 +227,7 @@ Geom::unitVector(D2<SBasis> const &V_in, double tol, unsigned order){
// -This approach is numerically bad. Find a stable way to rescale V_in to have non vanishing ends.
// -This done, unitVector will have jumps at zeros: fill the gaps with arcs of circles.
D2<SBasis> V = RescaleForNonVanishingEnds(V_in);
- if (V[0].isZero(tol) && V[1].isZero(tol))
+ if (V[0].isZero(0) && V[1].isZero(0))
return Piecewise<D2<SBasis> >(D2<SBasis>(Linear(1),SBasis()));
SBasis x = V[0], y = V[1];
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ed46cbe3c..4ba738635 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -228,6 +228,7 @@ set(inkscape_SRC
message-stack.cpp
mod360.cpp
object-hierarchy.cpp
+ object-set.cpp
object-snapper.cpp
path-chemistry.cpp
persp3d-reference.cpp
@@ -352,6 +353,7 @@ set(inkscape_SRC
mod360.h
number-opt-number.h
object-hierarchy.h
+ object-set.h
object-snapper.h
object-test.h
path-chemistry.h
diff --git a/src/box3d.cpp b/src/box3d.cpp
index e50cc4afb..dfc4d06e7 100644
--- a/src/box3d.cpp
+++ b/src/box3d.cpp
@@ -253,8 +253,8 @@ void box3d_position_set(SPBox3D *box)
{
/* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in
box3d_side_position_set() to avoid update conflicts with the parent box) */
- for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) {
- Box3DSide *side = dynamic_cast<Box3DSide *>(obj);
+ for (auto& obj: box->children) {
+ Box3DSide *side = dynamic_cast<Box3DSide *>(&obj);
if (side) {
box3d_side_position_set(side);
}
@@ -269,8 +269,8 @@ Geom::Affine SPBox3D::set_transform(Geom::Affine const &xform) {
gdouble const sw = hypot(ret[0], ret[1]);
gdouble const sh = hypot(ret[2], ret[3]);
- for ( SPObject *child = firstChild(); child; child = child->getNext() ) {
- SPItem *childitem = dynamic_cast<SPItem *>(child);
+ for (auto& child: children) {
+ SPItem *childitem = dynamic_cast<SPItem *>(&child);
if (childitem) {
// Adjust stroke width
childitem->adjust_stroke(sqrt(fabs(sw * sh)));
@@ -1068,8 +1068,8 @@ box3d_recompute_z_orders (SPBox3D *box) {
static std::map<int, Box3DSide *> box3d_get_sides(SPBox3D *box)
{
std::map<int, Box3DSide *> sides;
- for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) {
- Box3DSide *side = dynamic_cast<Box3DSide *>(obj);
+ for (auto& obj: box->children) {
+ Box3DSide *side = dynamic_cast<Box3DSide *>(&obj);
if (side) {
sides[Box3D::face_to_int(side->getFaceId())] = side;
}
@@ -1211,8 +1211,8 @@ static void box3d_extract_boxes_rec(SPObject *obj, std::list<SPBox3D *> &boxes)
if (box) {
boxes.push_back(box);
} else if (dynamic_cast<SPGroup *>(obj)) {
- for ( SPObject *child = obj->firstChild(); child; child = child->getNext() ) {
- box3d_extract_boxes_rec(child, boxes);
+ for (auto& child: obj->children) {
+ box3d_extract_boxes_rec(&child, boxes);
}
}
}
@@ -1270,8 +1270,8 @@ SPGroup *box3d_convert_to_group(SPBox3D *box)
// create a new group and add the sides (converted to ordinary paths) as its children
Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g");
- for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) {
- Box3DSide *side = dynamic_cast<Box3DSide *>(obj);
+ for (auto& obj: box->children) {
+ Box3DSide *side = dynamic_cast<Box3DSide *>(&obj);
if (side) {
Inkscape::XML::Node *repr = box3d_side_convert_to_path(side);
grepr->appendChild(repr);
diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp
index e4c8ce7b5..71743fda5 100644
--- a/src/conn-avoid-ref.cpp
+++ b/src/conn-avoid-ref.cpp
@@ -328,19 +328,19 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item)
std::vector<SPItem *> get_avoided_items(std::vector<SPItem *> &list, SPObject *from, SPDesktop *desktop,
bool initialised)
{
- for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) {
- if (SP_IS_ITEM(child) &&
- !desktop->isLayer(SP_ITEM(child)) &&
- !SP_ITEM(child)->isLocked() &&
- !desktop->itemIsHidden(SP_ITEM(child)) &&
- (!initialised || SP_ITEM(child)->avoidRef->shapeRef)
+ for (auto& child: from->children) {
+ if (SP_IS_ITEM(&child) &&
+ !desktop->isLayer(SP_ITEM(&child)) &&
+ !SP_ITEM(&child)->isLocked() &&
+ !desktop->itemIsHidden(SP_ITEM(&child)) &&
+ (!initialised || SP_ITEM(&child)->avoidRef->shapeRef)
)
{
- list.push_back(SP_ITEM(child));
+ list.push_back(SP_ITEM(&child));
}
- if (SP_IS_ITEM(child) && desktop->isLayer(SP_ITEM(child))) {
- list = get_avoided_items(list, child, desktop, initialised);
+ if (SP_IS_ITEM(&child) && desktop->isLayer(SP_ITEM(&child))) {
+ list = get_avoided_items(list, &child, desktop, initialised);
}
}
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index 393e0caa7..81aa95b48 100644
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
@@ -156,17 +156,17 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines)
return;
}
- for ( SPObject *child = o->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: o->children) {
if (sp_repr_css_property(css, "opacity", NULL) != NULL) {
// Unset properties which are accumulating and thus should not be set recursively.
// For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group.
SPCSSAttr *css_recurse = sp_repr_css_attr_new();
sp_repr_css_merge(css_recurse, css);
sp_repr_css_set_property(css_recurse, "opacity", NULL);
- sp_desktop_apply_css_recursive(child, css_recurse, skip_lines);
+ sp_desktop_apply_css_recursive(&child, css_recurse, skip_lines);
sp_repr_css_attr_unref(css_recurse);
} else {
- sp_desktop_apply_css_recursive(child, css, skip_lines);
+ sp_desktop_apply_css_recursive(&child, css, skip_lines);
}
}
}
@@ -187,8 +187,8 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write
sp_repr_css_merge(css_write, css);
sp_css_attr_unset_uris(css_write);
prefs->mergeStyle("/desktop/style", css_write);
- std::vector<SPItem*> const itemlist = desktop->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) {
+ auto itemlist = desktop->selection->items();
+ for (auto i = itemlist.begin(); i!= itemlist.end(); ++i) {
/* last used styles for 3D box faces are stored separately */
SPObject *obj = *i;
Box3DSide *side = dynamic_cast<Box3DSide *>(obj);
@@ -227,8 +227,8 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write
sp_repr_css_merge(css_no_text, css);
css_no_text = sp_css_attr_unset_text(css_no_text);
- std::vector<SPItem*> const itemlist = desktop->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) {
+ auto itemlist = desktop->selection->items();
+ for (auto i = itemlist.begin(); i!= itemlist.end(); ++i) {
SPItem *item = *i;
// If not text, don't apply text attributes (can a group have text attributes? Yes! FIXME)
@@ -1707,10 +1707,11 @@ objects_query_blend (const std::vector<SPItem*> &objects, SPStyle *style_res)
int blendcount = 0;
// determine whether filter is simple (blend and/or blur) or complex
- for(SPObject *primitive_obj = style->getFilter()->children;
- primitive_obj && dynamic_cast<SPFilterPrimitive *>(primitive_obj);
- primitive_obj = primitive_obj->next) {
- SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(primitive_obj);
+ for(auto& primitive_obj: style->getFilter()->children) {
+ SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(&primitive_obj);
+ if (!primitive) {
+ break;
+ }
if (dynamic_cast<SPFeBlend *>(primitive)) {
++blendcount;
} else if (dynamic_cast<SPGaussianBlur *>(primitive)) {
@@ -1723,10 +1724,12 @@ objects_query_blend (const std::vector<SPItem*> &objects, SPStyle *style_res)
// simple filter
if(blurcount == 1 || blendcount == 1) {
- for(SPObject *primitive_obj = style->getFilter()->children;
- primitive_obj && dynamic_cast<SPFilterPrimitive *>(primitive_obj);
- primitive_obj = primitive_obj->next) {
- SPFeBlend *spblend = dynamic_cast<SPFeBlend *>(primitive_obj);
+ for(auto& primitive_obj: style->getFilter()->children) {
+ SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(&primitive_obj);
+ if (!primitive) {
+ break;
+ }
+ SPFeBlend *spblend = dynamic_cast<SPFeBlend *>(&primitive_obj);
if (spblend) {
blend = spblend->blend_mode;
}
@@ -1800,9 +1803,8 @@ objects_query_blur (const std::vector<SPItem*> &objects, SPStyle *style_res)
//if object has a filter
if (style->filter.set && style->getFilter()) {
//cycle through filter primitives
- SPObject *primitive_obj = style->getFilter()->children;
- while (primitive_obj) {
- SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(primitive_obj);
+ for(auto& primitive_obj: style->getFilter()->children) {
+ SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(&primitive_obj);
if (primitive) {
//if primitive is gaussianblur
@@ -1820,7 +1822,6 @@ objects_query_blur (const std::vector<SPItem*> &objects, SPStyle *style_res)
}
}
}
- primitive_obj = primitive_obj->next;
}
}
}
@@ -1910,7 +1911,8 @@ sp_desktop_query_style(SPDesktop *desktop, SPStyle *style, int property)
// otherwise, do querying and averaging over selection
if (desktop->selection != NULL) {
- return sp_desktop_query_style_from_list (desktop->selection->itemList(), style, property);
+ std::vector<SPItem *> vec(desktop->selection->items().begin(), desktop->selection->items().end());
+ return sp_desktop_query_style_from_list (vec, style, property);
}
return QUERY_STYLE_NOTHING;
diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp
index 011f51977..53a5cba49 100644
--- a/src/display/nr-svgfonts.cpp
+++ b/src/display/nr-svgfonts.cpp
@@ -203,14 +203,19 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/,
//check whether is there a glyph declared on the SVG document
// that matches with the text string in its current position
if ( (len = size_of_substring(this->glyphs[i]->unicode.c_str(), _utf8)) ){
- for(SPObject* node = this->font->children;previous_unicode && node;node=node->next){
+ for(auto& node: font->children) {
+ if (!previous_unicode) {
+ break;
+ }
//apply glyph kerning if appropriate
- SPHkern *hkern = dynamic_cast<SPHkern *>(node);
- if (hkern && is_horizontal_text && MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){
+ SPHkern *hkern = dynamic_cast<SPHkern *>(&node);
+ if (hkern && is_horizontal_text &&
+ MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name)) {
x -= (hkern->k / 1000.0);//TODO: use here the height of the font
}
- SPVkern *vkern = dynamic_cast<SPVkern *>(node);
- if (vkern && !is_horizontal_text && MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){
+ SPVkern *vkern = dynamic_cast<SPVkern *>(&node);
+ if (vkern && !is_horizontal_text &&
+ MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name)) {
y -= (vkern->k / 1000.0);//TODO: use here the "height" of the font
}
}
@@ -271,10 +276,10 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){
Geom::PathVector
SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){
double units_per_em = 1000;
- for (SPObject *obj = spfont->children; obj; obj = obj->next){
- if (dynamic_cast<SPFontFace *>(obj)) {
+ for(auto& obj: spfont->children) {
+ if (dynamic_cast<SPFontFace *>(&obj)) {
//XML Tree being directly used here while it shouldn't be.
- sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em);
+ sp_repr_get_double(obj.getRepr(), "units_per_em", &units_per_em);
}
}
@@ -339,19 +344,19 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/,
if (node->hasChildren()){
//render the SVG described on this glyph's child nodes.
- for(node = node->children; node; node=node->next){
+ for(auto& child: node->children) {
{
- SPPath *path = dynamic_cast<SPPath *>(node);
+ SPPath *path = dynamic_cast<SPPath *>(&child);
if (path) {
pathv = path->_curve->get_pathvector();
pathv = flip_coordinate_system(spfont, pathv);
render_glyph_path(cr, &pathv);
}
}
- if (dynamic_cast<SPObjectGroup *>(node)) {
+ if (dynamic_cast<SPObjectGroup *>(&child)) {
g_warning("TODO: svgfonts: render OBJECTGROUP");
}
- SPUse *use = dynamic_cast<SPUse *>(node);
+ SPUse *use = dynamic_cast<SPUse *>(&child);
if (use) {
SPItem* item = use->ref->getObject();
SPPath *path = dynamic_cast<SPPath *>(item);
@@ -374,12 +379,12 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/,
cairo_font_face_t*
SvgFont::get_font_face(){
if (!this->userfont) {
- for(SPObject* node = this->font->children;node;node=node->next){
- SPGlyph *glyph = dynamic_cast<SPGlyph *>(node);
+ for(auto& node: font->children) {
+ SPGlyph *glyph = dynamic_cast<SPGlyph *>(&node);
if (glyph) {
glyphs.push_back(glyph);
}
- SPMissingGlyph *missing = dynamic_cast<SPMissingGlyph *>(node);
+ SPMissingGlyph *missing = dynamic_cast<SPMissingGlyph *>(&node);
if (missing) {
missingglyph = missing;
}
diff --git a/src/document.cpp b/src/document.cpp
index 0ff01b587..920e47cb8 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -250,9 +250,9 @@ void SPDocument::setCurrentPersp3D(Persp3D * const persp) {
void SPDocument::getPerspectivesInDefs(std::vector<Persp3D*> &list) const
{
- for (SPObject *i = root->defs->firstChild(); i; i = i->getNext() ) {
- if (SP_IS_PERSP3D(i)) {
- list.push_back(SP_PERSP3D(i));
+ for (auto& i: root->defs->children) {
+ if (SP_IS_PERSP3D(&i)) {
+ list.push_back(SP_PERSP3D(&i));
}
}
}
@@ -1252,12 +1252,12 @@ static std::vector<SPItem*> &find_items_in_area(std::vector<SPItem*> &s, SPGroup
{
g_return_val_if_fail(SP_IS_GROUP(group), s);
- for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
- if ( SP_IS_ITEM(o) ) {
- if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) {
- s = find_items_in_area(s, SP_GROUP(o), dkey, area, test, take_insensitive, into_groups);
+ for (auto& o: group->children) {
+ if ( SP_IS_ITEM(&o) ) {
+ if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) {
+ s = find_items_in_area(s, SP_GROUP(&o), dkey, area, test, take_insensitive, into_groups);
} else {
- SPItem *child = SP_ITEM(o);
+ SPItem *child = SP_ITEM(&o);
Geom::OptRect box = child->desktopVisualBounds();
if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) {
s.push_back(child);
@@ -1274,17 +1274,16 @@ Returns true if an item is among the descendants of group (recursively).
*/
static bool item_is_in_group(SPItem *item, SPGroup *group)
{
- bool inGroup = false;
- for ( SPObject *o = group->firstChild() ; o && !inGroup; o = o->getNext() ) {
- if ( SP_IS_ITEM(o) ) {
- if (SP_ITEM(o) == item) {
- inGroup = true;
- } else if ( SP_IS_GROUP(o) ) {
- inGroup = item_is_in_group(item, SP_GROUP(o));
+ for (auto& o: group->children) {
+ if ( SP_IS_ITEM(&o) ) {
+ if (SP_ITEM(&o) == item) {
+ return true;
+ } else if (SP_IS_GROUP(&o) && item_is_in_group(item, SP_GROUP(&o))) {
+ return true;
}
}
}
- return inGroup;
+ return false;
}
SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, std::vector<SPItem*> const &list,Geom::Point const &p, bool take_insensitive)
@@ -1295,21 +1294,24 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0);
- for ( SPObject *o = group->firstChild() ; o && !bottomMost; o = o->getNext() ) {
- if ( SP_IS_ITEM(o) ) {
- SPItem *item = SP_ITEM(o);
+ for (auto& o: group->children) {
+ if (bottomMost) {
+ break;
+ }
+ if (SP_IS_ITEM(&o)) {
+ SPItem *item = SP_ITEM(&o);
Inkscape::DrawingItem *arenaitem = item->get_arenaitem(dkey);
arenaitem->drawing().update();
if (arenaitem && arenaitem->pick(p, delta, 1) != NULL
&& (take_insensitive || item->isVisibleAndUnlocked(dkey))) {
- if (find(list.begin(),list.end(),item)!=list.end() ) {
+ if (find(list.begin(), list.end(), item) != list.end()) {
bottomMost = item;
}
}
- if ( !bottomMost && SP_IS_GROUP(o) ) {
+ if (!bottomMost && SP_IS_GROUP(&o)) {
// return null if not found:
- bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(o), list, p, take_insensitive);
+ bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(&o), list, p, take_insensitive);
}
}
}
@@ -1322,15 +1324,15 @@ The list can be persisted, which improves "find at multiple points" speed.
*/
void SPDocument::build_flat_item_list(unsigned int dkey, SPGroup *group, gboolean into_groups) const
{
- for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
- if (!SP_IS_ITEM(o)) {
+ for (auto& o: group->children) {
+ if (!SP_IS_ITEM(&o)) {
continue;
}
- if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) {
- build_flat_item_list(dkey, SP_GROUP(o), into_groups);
+ if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) {
+ build_flat_item_list(dkey, SP_GROUP(&o), into_groups);
} else {
- SPItem *child = SP_ITEM(o);
+ SPItem *child = SP_ITEM(&o);
if (child->isVisibleAndUnlocked(dkey)) {
_node_cache.push_front(child);
@@ -1386,18 +1388,18 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0);
- for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
- if (!SP_IS_ITEM(o)) {
+ for (auto& o: group->children) {
+ if (!SP_IS_ITEM(&o)) {
continue;
}
- if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER) {
- SPItem *newseen = find_group_at_point(dkey, SP_GROUP(o), p);
+ if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER) {
+ SPItem *newseen = find_group_at_point(dkey, SP_GROUP(&o), p);
if (newseen) {
seen = newseen;
}
}
- if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) {
- SPItem *child = SP_ITEM(o);
+ if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) {
+ SPItem *child = SP_ITEM(&o);
Inkscape::DrawingItem *arenaitem = child->get_arenaitem(dkey);
arenaitem->drawing().update();
@@ -1591,8 +1593,8 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count)
{
count++; // obj itself
- for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) {
- count = count_objects_recursive(i, count);
+ for (auto& i: obj->children) {
+ count = count_objects_recursive(&i, count);
}
return count;
@@ -1617,13 +1619,13 @@ static unsigned int objects_in_document(SPDocument *document)
static void vacuum_document_recursive(SPObject *obj)
{
if (SP_IS_DEFS(obj)) {
- for ( SPObject *def = obj->firstChild(); def; def = def->getNext()) {
+ for (auto& def: obj->children) {
// fixme: some inkscape-internal nodes in the future might not be collectable
- def->requestOrphanCollection();
+ def.requestOrphanCollection();
}
} else {
- for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) {
- vacuum_document_recursive(i);
+ for (auto& i: obj->children) {
+ vacuum_document_recursive(&i);
}
}
}
@@ -1751,14 +1753,14 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I
// Prevent duplicates of solid swatches by checking if equivalent swatch already exists
if (src && SP_IS_GRADIENT(src)) {
SPGradient *s_gr = SP_GRADIENT(src);
- for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) {
- if (trg && (src != trg) && SP_IS_GRADIENT(trg)) {
- SPGradient *t_gr = SP_GRADIENT(trg);
+ for (auto& trg: getDefs()->children) {
+ if (&trg && (src != &trg) && SP_IS_GRADIENT(&trg)) {
+ SPGradient *t_gr = SP_GRADIENT(&trg);
if (t_gr && s_gr->isEquivalent(t_gr)) {
// Change object references to the existing equivalent gradient
- Glib::ustring newid = trg->getId();
+ Glib::ustring newid = trg.getId();
if(newid != defid){ // id could be the same if it is a second paste into the same document
- change_def_references(src, trg);
+ change_def_references(src, &trg);
}
gchar *longid = g_strdup_printf("%s_%9.9d", DuplicateDefString.c_str(), stagger++);
def->setAttribute("id", longid );
@@ -1822,9 +1824,9 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I
id.erase( pos );
// Check that it really is a duplicate
- for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) {
- if( trg && SP_IS_SYMBOL(trg) && src != trg ) {
- std::string id2 = trg->getRepr()->attribute("id");
+ for (auto& trg: getDefs()->children) {
+ if(&trg && SP_IS_SYMBOL(&trg) && src != &trg ) {
+ std::string id2 = trg.getRepr()->attribute("id");
if( !id.compare( id2 ) ) {
duplicate = true;
diff --git a/src/extension/dbus/document-interface.cpp b/src/extension/dbus/document-interface.cpp
index d0a2e81aa..5a8fb0918 100644
--- a/src/extension/dbus/document-interface.cpp
+++ b/src/extension/dbus/document-interface.cpp
@@ -189,7 +189,7 @@ selection_get_center_y (Inkscape::Selection *sel){
std::vector<SPObject*>
selection_swap(Inkscape::Selection *sel, gchar *name, GError **error)
{
- std::vector<SPObject*> oldsel = sel->list();
+ std::vector<SPObject*> oldsel = std::vector<SPObject*>(sel->objects().begin(), sel->objects().end());
sel->set(get_object_by_name(sel->layers()->getDocument(), name, error));
return oldsel;
@@ -1087,14 +1087,14 @@ void document_interface_update(DocumentInterface *doc_interface, GError ** error
gboolean document_interface_selection_get(DocumentInterface *doc_interface, char ***out, GError ** /*error*/)
{
Inkscape::Selection * sel = doc_interface->target.getSelection();
- std::vector<SPObject*> oldsel = sel->list();
+ auto oldsel = sel->objects();
int size = oldsel.size();
*out = g_new0 (char *, size + 1);
int i = 0;
- for (std::vector<SPObject*>::iterator iter = oldsel.begin(), e = oldsel.end(); iter != e; ++iter) {
+ for (auto iter = oldsel.begin(); iter != oldsel.end(); ++iter) {
(*out)[i] = g_strdup((*iter)->getId());
i++;
}
@@ -1252,7 +1252,7 @@ gboolean document_interface_selection_move_to(DocumentInterface *doc_interface,
Geom::OptRect sel_bbox = sel->visualBounds();
if (sel_bbox) {
Geom::Point m( x - selection_get_center_x(sel) , 0 - (y - selection_get_center_y(sel)) );
- sp_selection_move_relative(sel, m, true);
+ sp_object_set_move_relative(sel, m, true);
}
return TRUE;
}
diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp
index 569e2c762..624813863 100644
--- a/src/extension/execution-env.cpp
+++ b/src/extension/execution-env.cpp
@@ -55,8 +55,8 @@ ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Imp
sp_namedview_document_from_window(desktop);
if (desktop != NULL) {
- std::vector<SPItem*> selected = desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator x = selected.begin(); x != selected.end(); ++x){
+ auto selected = desktop->getSelection()->items();
+ for(auto x = selected.begin(); x != selected.end(); ++x){
Glib::ustring selected_id;
selected_id = (*x)->getId();
_selected.insert(_selected.end(), selected_id);
diff --git a/src/extension/implementation/implementation.cpp b/src/extension/implementation/implementation.cpp
index 995d3d9ad..6e6100d2b 100644
--- a/src/extension/implementation/implementation.cpp
+++ b/src/extension/implementation/implementation.cpp
@@ -45,10 +45,10 @@ Gtk::Widget *Implementation::prefs_effect(Inkscape::Extension::Effect *module, I
SPDocument * current_document = view->doc();
- std::vector<SPItem*> selected = ((SPDesktop *)view)->getSelection()->itemList();
+ auto selected = ((SPDesktop *) view)->getSelection()->items();
Inkscape::XML::Node const* first_select = NULL;
if (!selected.empty()) {
- const SPItem * item = selected[0];
+ const SPItem * item = selected.front();
first_select = item->getRepr();
}
diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp
index 72a189c3f..d2319c2e0 100644
--- a/src/extension/implementation/script.cpp
+++ b/src/extension/implementation/script.cpp
@@ -689,9 +689,9 @@ void Script::effect(Inkscape::Extension::Effect *module,
return;
}
- std::vector<SPItem*> selected =
- desktop->getSelection()->itemList(); //desktop should not be NULL since doc was checked and desktop is a casted pointer
- for(std::vector<SPItem*>::const_iterator x = selected.begin(); x != selected.end(); ++x){
+ auto selected =
+ desktop->getSelection()->items(); //desktop should not be NULL since doc was checked and desktop is a casted pointer
+ for(auto x = selected.begin(); x != selected.end(); ++x){
Glib::ustring selected_id;
selected_id += "--id=";
selected_id += (*x)->getId();
diff --git a/src/extension/internal/bitmap/imagemagick.cpp b/src/extension/internal/bitmap/imagemagick.cpp
index a235dcb0f..472c2db91 100644
--- a/src/extension/internal/bitmap/imagemagick.cpp
+++ b/src/extension/internal/bitmap/imagemagick.cpp
@@ -65,8 +65,8 @@ ImageMagickDocCache::ImageMagickDocCache(Inkscape::UI::View::View * view) :
_imageItems(NULL)
{
SPDesktop *desktop = (SPDesktop*)view;
- const std::vector<SPItem*> selectedItemList = desktop->selection->itemList();
- int selectCount = selectedItemList.size();
+ auto selectedItemList = desktop->selection->items();
+ int selectCount = (int) boost::distance(selectedItemList);
// Init the data-holders
_nodes = new Inkscape::XML::Node*[selectCount];
@@ -78,7 +78,7 @@ ImageMagickDocCache::ImageMagickDocCache(Inkscape::UI::View::View * view) :
_imageItems = new SPItem*[selectCount];
// Loop through selected items
- for (std::vector<SPItem*>::const_iterator i = selectedItemList.begin(); i != selectedItemList.end(); ++i) {
+ for (auto i = selectedItemList.begin(); i != selectedItemList.end(); ++i) {
SPItem *item = *i;
Inkscape::XML::Node *node = reinterpret_cast<Inkscape::XML::Node *>(item->getRepr());
if (!strcmp(node->name(), "image") || !strcmp(node->name(), "svg:image"))
@@ -235,7 +235,7 @@ ImageMagick::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::Vie
{
SPDocument * current_document = view->doc();
- std::vector<SPItem*> selected = ((SPDesktop *)view)->getSelection()->itemList();
+ auto selected = ((SPDesktop *) view)->getSelection()->items();
Inkscape::XML::Node * first_select = NULL;
if (!selected.empty()) {
first_select = (selected.front())->getRepr();
diff --git a/src/extension/internal/bluredge.cpp b/src/extension/internal/bluredge.cpp
index 4a04e3c33..4f66b39fc 100644
--- a/src/extension/internal/bluredge.cpp
+++ b/src/extension/internal/bluredge.cpp
@@ -62,7 +62,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View
double old_offset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px");
// TODO need to properly refcount the items, at least
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
selection->clear();
for(std::vector<SPItem*>::iterator item = items.begin();
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 5d8b0e076..1310bb343 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -986,13 +986,12 @@ void CairoRenderContext::popState(void)
static bool pattern_hasItemChildren(SPPattern *pat)
{
- bool hasItems = false;
- for ( SPObject *child = pat->firstChild() ; child && !hasItems; child = child->getNext() ) {
- if (SP_IS_ITEM (child)) {
- hasItems = true;
+ for (auto& child: pat->children) {
+ if (SP_IS_ITEM (&child)) {
+ return true;
}
}
- return hasItems;
+ return false;
}
cairo_pattern_t*
@@ -1087,10 +1086,10 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
// show items and render them
for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children
- for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS);
- _renderer->renderItem(pattern_ctx, SP_ITEM(child));
+ for (auto& child: pat_i->children) {
+ if (SP_IS_ITEM(&child)) {
+ SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS);
+ _renderer->renderItem(pattern_ctx, SP_ITEM(&child));
}
}
break; // do not go further up the chain if children are found
@@ -1116,9 +1115,9 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
// hide all items
for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children
- for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- SP_ITEM(child)->invoke_hide(dkey);
+ for (auto& child: pat_i->children) {
+ if (SP_IS_ITEM(&child)) {
+ SP_ITEM(&child)->invoke_hide(dkey);
}
}
break; // do not go further up the chain if children are found
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index 5dc20ab06..cd96a7f58 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -741,8 +741,8 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp)
TRACE(("BEGIN clip\n"));
SPObject const *co = cp;
- for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) {
- SPItem const *item = dynamic_cast<SPItem const *>(child);
+ for (auto& child: co->children) {
+ SPItem const *item = dynamic_cast<SPItem const *>(&child);
if (item) {
// combine transform of the item in clippath and the item using clippath:
@@ -800,8 +800,8 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask)
TRACE(("BEGIN mask\n"));
SPObject const *co = mask;
- for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) {
- SPItem const *item = dynamic_cast<SPItem const *>(child);
+ for (auto& child: co->children) {
+ SPItem const *item = dynamic_cast<SPItem const *>(&child);
if (item) {
// TODO fix const correctness:
renderItem(ctx, const_cast<SPItem*>(item));
diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp
index 9f3b5475f..d4c5d95a3 100644
--- a/src/extension/internal/emf-print.cpp
+++ b/src/extension/internal/emf-print.cpp
@@ -1042,8 +1042,12 @@ void PrintEmf::do_clip_if_present(SPStyle const *style){
/* find the clipping path */
Geom::PathVector combined_pathvector;
Geom::Affine tfc; // clipping transform, generally not the same as item transform
- for(item = SP_ITEM(scp->firstChild()); item; item=SP_ITEM(item->getNext())){
- if (SP_IS_GROUP(item)) { // not implemented
+ for (auto& child: scp->children) {
+ item = SP_ITEM(&child);
+ if (!item) {
+ break;
+ }
+ if (SP_IS_GROUP(item)) { // not implemented
// return sp_group_render(item);
combined_pathvector = merge_PathVector_with_group(combined_pathvector, item, tfc);
} else if (SP_IS_SHAPE(item)) {
@@ -1081,7 +1085,11 @@ Geom::PathVector PrintEmf::merge_PathVector_with_group(Geom::PathVector const &c
new_combined_pathvector = combined_pathvector;
SPGroup *group = SP_GROUP(item);
Geom::Affine tfc = item->transform * transform;
- for(SPItem *item = SP_ITEM(group->firstChild()); item; item=SP_ITEM(item->getNext())){
+ for (auto& child: group->children) {
+ item = SP_ITEM(&child);
+ if (!item) {
+ break;
+ }
if (SP_IS_GROUP(item)) {
new_combined_pathvector = merge_PathVector_with_group(new_combined_pathvector, item, tfc); // could be endlessly recursive on a badly formed SVG
} else if (SP_IS_SHAPE(item)) {
diff --git a/src/extension/internal/filter/filter.cpp b/src/extension/internal/filter/filter.cpp
index 25e89bbf3..0907845f8 100644
--- a/src/extension/internal/filter/filter.cpp
+++ b/src/extension/internal/filter/filter.cpp
@@ -125,7 +125,7 @@ void Filter::effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::Vie
Inkscape::Selection * selection = ((SPDesktop *)document)->selection;
// TODO need to properly refcount the items, at least
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
Inkscape::XML::Document * xmldoc = document->doc()->getReprDoc();
Inkscape::XML::Node * defsrepr = document->doc()->getDefs()->getRepr();
diff --git a/src/extension/internal/grid.cpp b/src/extension/internal/grid.cpp
index c766bd828..9e730f5e5 100644
--- a/src/extension/internal/grid.cpp
+++ b/src/extension/internal/grid.cpp
@@ -180,10 +180,10 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View
{
SPDocument * current_document = view->doc();
- std::vector<SPItem*> selected = ((SPDesktop *)view)->getSelection()->itemList();
+ auto selected = ((SPDesktop *) view)->getSelection()->items();
Inkscape::XML::Node * first_select = NULL;
if (!selected.empty()) {
- first_select = selected[0]->getRepr();
+ first_select = selected.front()->getRepr();
}
return module->autogui(current_document, first_select, changeSignal);
diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp
index 386bde1d6..d7ad7e6f7 100644
--- a/src/extension/internal/javafx-out.cpp
+++ b/src/extension/internal/javafx-out.cpp
@@ -732,9 +732,9 @@ bool JavaFXOutput::doTreeRecursive(SPDocument *doc, SPObject *obj)
/**
* Descend into children
*/
- for (SPObject *child = obj->firstChild() ; child ; child = child->next)
+ for (auto &child: obj->children)
{
- if (!doTreeRecursive(doc, child)) {
+ if (!doTreeRecursive(doc, &child)) {
return false;
}
}
@@ -804,9 +804,9 @@ bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj)
/**
* Descend into children
*/
- for (SPObject *child = obj->firstChild() ; child ; child = child->next)
+ for (auto &child: obj->children)
{
- if (!doBody(doc, child)) {
+ if (!doBody(doc, &child)) {
return false;
}
}
diff --git a/src/extension/internal/metafile-print.cpp b/src/extension/internal/metafile-print.cpp
index 47ba5971c..061eb634d 100644
--- a/src/extension/internal/metafile-print.cpp
+++ b/src/extension/internal/metafile-print.cpp
@@ -293,20 +293,22 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf
}
// still looking? Look at this pattern's children, if there are any
- SPObject *child = pat_i->firstChild();
- while (child && !(*epixbuf) && (*hatchType == -1)) {
- brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor);
- child = child->getNext();
+ for (auto& child: pat_i->children) {
+ if (*epixbuf || *hatchType != -1) {
+ break;
+ }
+ brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor);
}
}
} else if (SP_IS_IMAGE(parent)) {
*epixbuf = ((SPImage *)parent)->pixbuf;
return;
} else { // some inkscape rearrangements pass through nodes between pattern and image which are not classified as either.
- SPObject *child = parent->firstChild();
- while (child && !(*epixbuf) && (*hatchType == -1)) {
- brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor);
- child = child->getNext();
+ for (auto& child: parent->children) {
+ if (*epixbuf || *hatchType != -1) {
+ break;
+ }
+ brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor);
}
}
}
diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp
index bd2168b68..8df883069 100644
--- a/src/extension/internal/pov-out.cpp
+++ b/src/extension/internal/pov-out.cpp
@@ -479,9 +479,9 @@ bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj)
/**
* Descend into children
*/
- for (SPObject *child = obj->firstChild() ; child ; child = child->next)
+ for (auto &child: obj->children)
{
- if (!doTreeRecursive(doc, child))
+ if (!doTreeRecursive(doc, &child))
return false;
}
diff --git a/src/extension/param/bool.cpp b/src/extension/param/bool.cpp
index e67d3e3f5..ca61d8c51 100644
--- a/src/extension/param/bool.cpp
+++ b/src/extension/param/bool.cpp
@@ -14,6 +14,7 @@
#include <gtkmm/box.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/checkbutton.h>
+#include <glib/gi18n.h>
#include "xml/node.h"
#include "../extension.h"
@@ -132,7 +133,7 @@ Gtk::Widget *ParamBool::get_widget(SPDocument * doc, Inkscape::XML::Node * node,
auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4));
hbox->set_homogeneous(false);
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START));
label->show();
hbox->pack_end(*label, true, true);
diff --git a/src/extension/param/enum.cpp b/src/extension/param/enum.cpp
index 4e7420807..8bc0fbda7 100644
--- a/src/extension/param/enum.cpp
+++ b/src/extension/param/enum.cpp
@@ -251,7 +251,7 @@ Gtk::Widget *ParamComboBox::get_widget(SPDocument * doc, Inkscape::XML::Node * n
}
Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, false, false, _indent);
diff --git a/src/extension/param/float.cpp b/src/extension/param/float.cpp
index d4c33ec94..23a03ea8f 100644
--- a/src/extension/param/float.cpp
+++ b/src/extension/param/float.cpp
@@ -15,6 +15,7 @@
#include <gtkmm/scale.h>
#include "ui/widget/spinbutton.h"
#include "ui/widget/spin-scale.h"
+#include <glib/gi18n.h>
#include "xml/node.h"
#include "extension/extension.h"
@@ -181,7 +182,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod
if (_mode == FULL) {
- UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_text, fadjust, _precision);
+ UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_(_text), fadjust, _precision);
scale->set_size_request(400, -1);
scale->show();
hbox->pack_start(*scale, false, false);
@@ -189,7 +190,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod
}
else if (_mode == MINIMAL) {
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, true, true, _indent);
diff --git a/src/extension/param/int.cpp b/src/extension/param/int.cpp
index 533ee3886..222d4f243 100644
--- a/src/extension/param/int.cpp
+++ b/src/extension/param/int.cpp
@@ -15,6 +15,7 @@
#include <gtkmm/scale.h>
#include "ui/widget/spinbutton.h"
#include "ui/widget/spin-scale.h"
+#include <glib/gi18n.h>
#include "xml/node.h"
#include "extension/extension.h"
@@ -162,14 +163,14 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal
if (_mode == FULL) {
- UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_text, fadjust, 0);
+ UI::Widget::SpinScale *scale = new UI::Widget::SpinScale(_(_text), fadjust, 0);
scale->set_size_request(400, -1);
scale->show();
hbox->pack_start(*scale, false, false);
}
else if (_mode == MINIMAL) {
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, true, true, _indent);
diff --git a/src/extension/param/parameter.cpp b/src/extension/param/parameter.cpp
index e4a614667..a5632a39a 100644
--- a/src/extension/param/parameter.cpp
+++ b/src/extension/param/parameter.cpp
@@ -58,16 +58,6 @@ Parameter *Parameter::make(Inkscape::XML::Node *in_repr, Inkscape::Extension::Ex
const char *guitext = in_repr->attribute("gui-text");
if (guitext == NULL) {
guitext = in_repr->attribute("_gui-text");
- if (guitext == NULL) {
- // guitext = ""; // propably better to require devs to explicitly set an empty gui-text if this is what they want
- } else {
- const char *context = in_repr->attribute("msgctxt");
- if (context != NULL) {
- guitext = g_dpgettext2(NULL, context, guitext);
- } else {
- guitext = _(guitext);
- }
- }
}
const char *gui_tip = in_repr->attribute("gui-tip");
if (gui_tip == NULL) {
diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp
index ed28c0d75..c54cc0ec3 100644
--- a/src/extension/param/radiobutton.cpp
+++ b/src/extension/param/radiobutton.cpp
@@ -308,7 +308,7 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node
auto vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0));
vbox->set_homogeneous(false);
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START, Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, false, false, _indent);
diff --git a/src/extension/param/string.cpp b/src/extension/param/string.cpp
index 6b082b133..1d9205502 100644
--- a/src/extension/param/string.cpp
+++ b/src/extension/param/string.cpp
@@ -166,7 +166,7 @@ Gtk::Widget * ParamString::get_widget(SPDocument * doc, Inkscape::XML::Node * no
}
Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4));
- Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START));
+ Gtk::Label * label = Gtk::manage(new Gtk::Label(_(_text), Gtk::ALIGN_START));
label->show();
hbox->pack_start(*label, false, false, _indent);
diff --git a/src/extension/plugins/grid2/grid.cpp b/src/extension/plugins/grid2/grid.cpp
index 6880c574d..233d4e522 100644
--- a/src/extension/plugins/grid2/grid.cpp
+++ b/src/extension/plugins/grid2/grid.cpp
@@ -186,10 +186,10 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View
{
SPDocument * current_document = view->doc();
- std::vector<SPItem*> selected = ((SPDesktop *)view)->getSelection()->itemList();
+ auto selected = ((SPDesktop *) view)->getSelection()->items();
Inkscape::XML::Node * first_select = NULL;
if (!selected.empty()) {
- first_select = selected[0]->getRepr();
+ first_select = selected.front()->getRepr();
}
return module->autogui(current_document, first_select, changeSignal);
diff --git a/src/file.cpp b/src/file.cpp
index 56fdffb3c..7c17a6158 100644
--- a/src/file.cpp
+++ b/src/file.cpp
@@ -1118,14 +1118,14 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place)
Inkscape::Selection *selection = desktop->getSelection();
selection->setReprList(pasted_objects_not);
Geom::Affine doc2parent = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse();
- sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false);
+ sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false);
sp_selection_delete(desktop);
// Change the selection to the freshly pasted objects
selection->setReprList(pasted_objects);
// Apply inverse of parent transform
- sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false);
+ sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false);
// Update (among other things) all curves in paths, for bounds() to work
target_document->ensureUpToDate();
@@ -1155,7 +1155,7 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place)
m.unSetup();
}
- sp_selection_move_relative(selection, offset);
+ sp_object_set_move_relative(selection, offset);
}
}
@@ -1193,8 +1193,8 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
// Count the number of top-level items in the imported document.
guint items_count = 0;
- for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext()) {
- if (SP_IS_ITEM(child)) {
+ for (auto& child: doc->getRoot()->children) {
+ if (SP_IS_ITEM(&child)) {
items_count++;
}
}
@@ -1223,9 +1223,9 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
// Construct a new object representing the imported image,
// and insert it into the current document.
SPObject *new_obj = NULL;
- for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- Inkscape::XML::Node *newitem = child->getRepr()->duplicate(xml_in_doc);
+ for (auto& child: doc->getRoot()->children) {
+ if (SP_IS_ITEM(&child)) {
+ Inkscape::XML::Node *newitem = child.getRepr()->duplicate(xml_in_doc);
// convert layers to groups, and make sure they are unlocked
// FIXME: add "preserve layers" mode where each layer from
@@ -1238,10 +1238,10 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
}
// don't lose top-level defs or style elements
- else if (child->getRepr()->type() == Inkscape::XML::ELEMENT_NODE) {
- const gchar *tag = child->getRepr()->name();
+ else if (child.getRepr()->type() == Inkscape::XML::ELEMENT_NODE) {
+ const gchar *tag = child.getRepr()->name();
if (!strcmp(tag, "svg:style")) {
- in_doc->getRoot()->appendChildRepr(child->getRepr()->duplicate(xml_in_doc));
+ in_doc->getRoot()->appendChildRepr(child.getRepr()->duplicate(xml_in_doc));
}
}
}
@@ -1260,7 +1260,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
// c2p is identity matrix at this point unless ensureUpToDate is called
doc->ensureUpToDate();
Geom::Affine affine = doc->getRoot()->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse();
- sp_selection_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false);
+ sp_object_set_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false);
// move to mouse pointer
{
@@ -1268,7 +1268,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri,
Geom::OptRect sel_bbox = selection->visualBounds();
if (sel_bbox) {
Geom::Point m( desktop->point() - sel_bbox->midpoint() );
- sp_selection_move_relative(selection, m, false);
+ sp_object_set_move_relative(selection, m, false);
}
}
}
diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp
index 3618b2642..560e73322 100644
--- a/src/filter-chemistry.cpp
+++ b/src/filter-chemistry.cpp
@@ -46,8 +46,8 @@ static guint count_filter_hrefs(SPObject *o, SPFilter *filter)
i ++;
}
- for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) {
- i += count_filter_hrefs(child, filter);
+ for (auto& child: o->children) {
+ i += count_filter_hrefs(&child, filter);
}
return i;
@@ -486,16 +486,14 @@ void remove_filter_gaussian_blur (SPObject *item)
bool filter_is_single_gaussian_blur(SPFilter *filter)
{
- return (filter->firstChild() &&
- (filter->firstChild() == filter->lastChild()) &&
- SP_IS_GAUSSIANBLUR(filter->firstChild()));
+ return (filter->children.size() == 1 &&
+ SP_IS_GAUSSIANBLUR(&filter->children.front()));
}
double get_single_gaussian_blur_radius(SPFilter *filter)
{
- if (filter->firstChild() &&
- (filter->firstChild() == filter->lastChild()) &&
- SP_IS_GAUSSIANBLUR(filter->firstChild())) {
+ if (filter->children.size() == 1 &&
+ SP_IS_GAUSSIANBLUR(&filter->children.front())) {
SPGaussianBlur *gb = SP_GAUSSIANBLUR(filter->firstChild());
double x = gb->stdDeviation.getNumber();
diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp
index b3767632f..0c7f87542 100644
--- a/src/filters/blend.cpp
+++ b/src/filters/blend.cpp
@@ -195,11 +195,11 @@ Inkscape::XML::Node* SPFeBlend::write(Inkscape::XML::Document *doc, Inkscape::XM
if( !in2_name ) {
// This code is very similar to sp_filter_primtive_name_previous_out()
- SPObject *i = parent->children;
+ SPObject *i = parent->firstChild();
// Find previous filter primitive
- while (i && i->next != this) {
- i = i->next;
+ while (i && i->getNext() != this) {
+ i = i->getNext();
}
if( i ) {
diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp
index 47e570fa4..19843eebd 100644
--- a/src/filters/componenttransfer.cpp
+++ b/src/filters/componenttransfer.cpp
@@ -45,11 +45,10 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c
{
if (sp_componenttransfer->renderer) {
bool set[4] = {false, false, false, false};
- SPObject* node = sp_componenttransfer->children;
- for(;node;node=node->next){
+ for(auto& node: sp_componenttransfer->children) {
int i = 4;
- SPFeFuncNode *funcNode = SP_FEFUNCNODE(node);
+ SPFeFuncNode *funcNode = SP_FEFUNCNODE(&node);
switch (funcNode->channel) {
case SPFeFuncNode::R:
@@ -70,13 +69,13 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c
g_warning("Unrecognized channel for component transfer.");
break;
}
- sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type;
- sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues;
- sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope;
- sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept;
- sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude;
- sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent;
- sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset;
+ sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) &node)->type;
+ sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) &node)->tableValues;
+ sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) &node)->slope;
+ sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) &node)->intercept;
+ sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) &node)->amplitude;
+ sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) &node)->exponent;
+ sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) &node)->offset;
set[i] = true;
}
// Set any types not explicitly set to the identity transform
diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp
index 3e651a778..42f06915f 100644
--- a/src/filters/composite.cpp
+++ b/src/filters/composite.cpp
@@ -221,11 +221,11 @@ Inkscape::XML::Node* SPFeComposite::write(Inkscape::XML::Document *doc, Inkscape
if( !in2_name ) {
// This code is very similar to sp_filter_primitive_name_previous_out()
- SPObject *i = parent->children;
+ SPObject *i = parent->firstChild();
// Find previous filter primitive
- while (i && i->next != this) {
- i = i->next;
+ while (i && i->getNext() != this) {
+ i = i->getNext();
}
if( i ) {
diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp
index 120c058d2..a46b367ec 100644
--- a/src/filters/diffuselighting.cpp
+++ b/src/filters/diffuselighting.cpp
@@ -258,17 +258,17 @@ static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffu
{
if (sp_diffuselighting->renderer) {
sp_diffuselighting->renderer->light_type = Inkscape::Filters::NO_LIGHT;
- if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->children)) {
+ if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->firstChild())) {
sp_diffuselighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT;
- sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->children);
+ sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->firstChild());
}
- if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->children)) {
+ if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->firstChild())) {
sp_diffuselighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT;
- sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->children);
+ sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->firstChild());
}
- if (SP_IS_FESPOTLIGHT(sp_diffuselighting->children)) {
+ if (SP_IS_FESPOTLIGHT(sp_diffuselighting->firstChild())) {
sp_diffuselighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT;
- sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->children);
+ sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->firstChild());
}
}
}
@@ -293,19 +293,19 @@ void SPFeDiffuseLighting::build_renderer(Inkscape::Filters::Filter* filter) {
//We assume there is at most one child
nr_diffuselighting->light_type = Inkscape::Filters::NO_LIGHT;
- if (SP_IS_FEDISTANTLIGHT(this->children)) {
+ if (SP_IS_FEDISTANTLIGHT(this->firstChild())) {
nr_diffuselighting->light_type = Inkscape::Filters::DISTANT_LIGHT;
- nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->children);
+ nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild());
}
- if (SP_IS_FEPOINTLIGHT(this->children)) {
+ if (SP_IS_FEPOINTLIGHT(this->firstChild())) {
nr_diffuselighting->light_type = Inkscape::Filters::POINT_LIGHT;
- nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->children);
+ nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->firstChild());
}
- if (SP_IS_FESPOTLIGHT(this->children)) {
+ if (SP_IS_FESPOTLIGHT(this->firstChild())) {
nr_diffuselighting->light_type = Inkscape::Filters::SPOT_LIGHT;
- nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->children);
+ nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->firstChild());
}
//nr_offset->set_dx(sp_offset->dx);
diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp
index 1dbea67ff..f0ca36079 100644
--- a/src/filters/displacementmap.cpp
+++ b/src/filters/displacementmap.cpp
@@ -193,11 +193,11 @@ Inkscape::XML::Node* SPFeDisplacementMap::write(Inkscape::XML::Document *doc, In
if( !in2_name ) {
// This code is very similar to sp_filter_primtive_name_previous_out()
- SPObject *i = parent->children;
+ SPObject *i = parent->firstChild();
// Find previous filter primitive
- while (i && i->next != this) {
- i = i->next;
+ while (i && i->getNext() != this) {
+ i = i->getNext();
}
if( i ) {
diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp
index 68f671b11..8ec40cb46 100644
--- a/src/filters/merge.cpp
+++ b/src/filters/merge.cpp
@@ -92,17 +92,14 @@ void SPFeMerge::build_renderer(Inkscape::Filters::Filter* filter) {
sp_filter_primitive_renderer_common(this, nr_primitive);
- SPObject *input = this->children;
int in_nr = 0;
- while (input) {
- if (SP_IS_FEMERGENODE(input)) {
- SPFeMergeNode *node = SP_FEMERGENODE(input);
+ for(auto& input: children) {
+ if (SP_IS_FEMERGENODE(&input)) {
+ SPFeMergeNode *node = SP_FEMERGENODE(&input);
nr_merge->set_input(in_nr, node->input);
in_nr++;
}
-
- input = input->next;
}
}
diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp
index bda1a0f30..ac7253ad9 100644
--- a/src/filters/specularlighting.cpp
+++ b/src/filters/specularlighting.cpp
@@ -266,19 +266,19 @@ static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_spe
if (sp_specularlighting->renderer) {
sp_specularlighting->renderer->light_type = Inkscape::Filters::NO_LIGHT;
- if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->children)) {
+ if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->firstChild())) {
sp_specularlighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT;
- sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->children);
+ sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->firstChild());
}
- if (SP_IS_FEPOINTLIGHT(sp_specularlighting->children)) {
+ if (SP_IS_FEPOINTLIGHT(sp_specularlighting->firstChild())) {
sp_specularlighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT;
- sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->children);
+ sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->firstChild());
}
- if (SP_IS_FESPOTLIGHT(sp_specularlighting->children)) {
+ if (SP_IS_FESPOTLIGHT(sp_specularlighting->firstChild())) {
sp_specularlighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT;
- sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->children);
+ sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->firstChild());
}
}
}
@@ -304,19 +304,19 @@ void SPFeSpecularLighting::build_renderer(Inkscape::Filters::Filter* filter) {
//We assume there is at most one child
nr_specularlighting->light_type = Inkscape::Filters::NO_LIGHT;
- if (SP_IS_FEDISTANTLIGHT(this->children)) {
+ if (SP_IS_FEDISTANTLIGHT(this->firstChild())) {
nr_specularlighting->light_type = Inkscape::Filters::DISTANT_LIGHT;
- nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->children);
+ nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild());
}
- if (SP_IS_FEPOINTLIGHT(this->children)) {
+ if (SP_IS_FEPOINTLIGHT(this->firstChild())) {
nr_specularlighting->light_type = Inkscape::Filters::POINT_LIGHT;
- nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->children);
+ nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->firstChild());
}
- if (SP_IS_FESPOTLIGHT(this->children)) {
+ if (SP_IS_FESPOTLIGHT(this->firstChild())) {
nr_specularlighting->light_type = Inkscape::Filters::SPOT_LIGHT;
- nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->children);
+ nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->firstChild());
}
//nr_offset->set_dx(sp_offset->dx);
diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp
index ae82499de..4521d72fd 100644
--- a/src/gradient-chemistry.cpp
+++ b/src/gradient-chemistry.cpp
@@ -195,8 +195,8 @@ static guint count_gradient_hrefs(SPObject *o, SPGradient *gr)
i ++;
}
- for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) {
- i += count_gradient_hrefs(child, gr);
+ for (auto& child: o->children) {
+ i += count_gradient_hrefs(&child, gr);
}
return i;
@@ -922,11 +922,11 @@ void sp_item_gradient_reverse_vector(SPItem *item, Inkscape::PaintTarget fill_or
GSList *child_objects = NULL;
std::vector<double> offsets;
double offset;
- for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) {
- child_reprs = g_slist_prepend (child_reprs, child->getRepr());
- child_objects = g_slist_prepend (child_objects, child);
+ for (auto& child: vector->children) {
+ child_reprs = g_slist_prepend (child_reprs, child.getRepr());
+ child_objects = g_slist_prepend (child_objects, &child);
offset=0;
- sp_repr_get_double(child->getRepr(), "offset", &offset);
+ sp_repr_get_double(child.getRepr(), "offset", &offset);
offsets.push_back(offset);
}
@@ -975,9 +975,9 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi
sp_gradient_repr_set_link(gradient->getRepr(), vector);
}
- for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) {
- if (SP_IS_STOP(child)) {
- guint32 color = SP_STOP(child)->get_rgba32();
+ for (auto& child: vector->children) {
+ if (SP_IS_STOP(&child)) {
+ guint32 color = SP_STOP(&child)->get_rgba32();
//g_message("Stop color %d", color);
gchar c[64];
sp_svg_write_color (c, sizeof(c),
@@ -990,7 +990,7 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi
);
SPCSSAttr *css = sp_repr_css_attr_new ();
sp_repr_css_set_property (css, "stop-color", c);
- sp_repr_css_change(child->getRepr(), css, "style");
+ sp_repr_css_change(child.getRepr(), css, "style");
sp_repr_css_attr_unref (css);
}
}
@@ -1566,8 +1566,8 @@ void sp_gradient_invert_selected_gradients(SPDesktop *desktop, Inkscape::PaintTa
{
Inkscape::Selection *selection = desktop->getSelection();
- const std::vector<SPItem*> list=selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = list.begin(); i != list.end(); ++i) {
+ auto list= selection->items();
+ for (auto i = list.begin(); i != list.end(); ++i) {
sp_item_gradient_invert_vector_color(*i, fill_or_stroke);
}
@@ -1591,8 +1591,8 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop)
if (drag && !drag->selected.empty()) {
drag->selected_reverse_vector();
} else { // If no drag or no dragger selected, act on selection (both fill and stroke gradients)
- const std::vector<SPItem*> list=selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = list.begin(); i != list.end(); ++i) {
+ auto list= selection->items();
+ for (auto i = list.begin(); i != list.end(); ++i) {
sp_item_gradient_reverse_vector(*i, Inkscape::FOR_FILL);
sp_item_gradient_reverse_vector(*i, Inkscape::FOR_STROKE);
}
diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp
index aa4da7fcc..5b91bdc9f 100644
--- a/src/gradient-drag.cpp
+++ b/src/gradient-drag.cpp
@@ -2065,8 +2065,8 @@ void GrDrag::updateDraggers()
this->draggers.clear();
g_return_if_fail(this->selection != NULL);
- std::vector<SPItem*> list = this->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = list.begin(); i != list.end(); ++i) {
+ auto list = this->selection->items();
+ for (auto i = list.begin(); i != list.end(); ++i) {
SPItem *item = *i;
SPStyle *style = item->style;
@@ -2133,8 +2133,8 @@ void GrDrag::updateLines()
g_return_if_fail(this->selection != NULL);
- std::vector<SPItem*> list = this->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = list.begin(); i != list.end(); ++i) {
+ auto list = this->selection->items();
+ for (auto i = list.begin(); i != list.end(); ++i) {
SPItem *item = *i;
SPStyle *style = item->style;
@@ -2277,8 +2277,8 @@ void GrDrag::updateLevels()
g_return_if_fail (this->selection != NULL);
- std::vector<SPItem*> list = this->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = list.begin(); i != list.end(); ++i) {
+ auto list = this->selection->items();
+ for (auto i = list.begin(); i != list.end(); ++i) {
SPItem *item = *i;
Geom::OptRect rect = item->desktopVisualBounds();
if (rect) {
@@ -2534,9 +2534,9 @@ void GrDrag::deleteSelected(bool just_one)
// cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop
// manually count the children, don't know if there already exists a function for this...
int len = 0;
- for ( SPObject *child = (stopinfo->vector)->firstChild() ; child ; child = child->getNext() )
+ for (auto& child: stopinfo->vector->children)
{
- if ( SP_IS_STOP(child) ) {
+ if ( SP_IS_STOP(&child) ) {
len ++;
}
}
diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp
index 8a363d736..bab998fdb 100644
--- a/src/helper/pixbuf-ops.cpp
+++ b/src/helper/pixbuf-ops.cpp
@@ -49,8 +49,8 @@ static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dke
// recurse
if (!g_slist_find(list, o)) {
- for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) {
- hide_other_items_recursively(child, list, dkey);
+ for (auto& child: o->children) {
+ hide_other_items_recursively(&child, list, dkey);
}
}
}
diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp
index e2b7e5b8c..682aee9b2 100644
--- a/src/helper/png-write.cpp
+++ b/src/helper/png-write.cpp
@@ -372,8 +372,8 @@ static void hide_other_items_recursively(SPObject *o, const std::vector<SPItem*>
// recurse
if (list.end()==find(list.begin(),list.end(),o)) {
- for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) {
- hide_other_items_recursively(child, list, dkey);
+ for (auto& child: o->children) {
+ hide_other_items_recursively(&child, list, dkey);
}
}
}
diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp
index 5a56b89ff..647e42916 100644
--- a/src/helper/stock-items.cpp
+++ b/src/helper/stock-items.cpp
@@ -204,37 +204,37 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock)
}
SPObject *object = NULL;
if (!strcmp(base, "marker") && !stock) {
- for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
+ for (auto& child: defs->children)
{
- if (child->getRepr()->attribute("inkscape:stockid") &&
- !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) &&
- SP_IS_MARKER(child))
+ if (child.getRepr()->attribute("inkscape:stockid") &&
+ !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) &&
+ SP_IS_MARKER(&child))
{
- object = child;
+ object = &child;
}
}
}
else if (!strcmp(base,"pattern") && !stock) {
- for ( SPObject *child = defs->firstChild() ; child; child = child->getNext() )
+ for (auto& child: defs->children)
{
- if (child->getRepr()->attribute("inkscape:stockid") &&
- !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) &&
- SP_IS_PATTERN(child))
+ if (child.getRepr()->attribute("inkscape:stockid") &&
+ !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) &&
+ SP_IS_PATTERN(&child))
{
- object = child;
+ object = &child;
}
}
}
else if (!strcmp(base,"gradient") && !stock) {
- for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
+ for (auto& child: defs->children)
{
- if (child->getRepr()->attribute("inkscape:stockid") &&
- !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) &&
- SP_IS_GRADIENT(child))
+ if (child.getRepr()->attribute("inkscape:stockid") &&
+ !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) &&
+ SP_IS_GRADIENT(&child))
{
- object = child;
+ object = &child;
}
}
diff --git a/src/id-clash.cpp b/src/id-clash.cpp
index b14526e79..c284843b8 100644
--- a/src/id-clash.cpp
+++ b/src/id-clash.cpp
@@ -185,9 +185,9 @@ find_references(SPObject *elem, refmap_type &refmap)
}
// recurse
- for (SPObject *child = elem->firstChild(); child; child = child->getNext() )
+ for (auto& child: elem->children)
{
- find_references(child, refmap);
+ find_references(&child, refmap);
}
}
@@ -240,9 +240,9 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc,
// recurse
- for (SPObject *child = elem->firstChild(); child; child = child->getNext() )
+ for (auto& child: elem->children)
{
- change_clashing_ids(imported_doc, current_doc, child, refmap, id_changes);
+ change_clashing_ids(imported_doc, current_doc, &child, refmap, id_changes);
}
}
diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp
index 3e794a0a4..030ebc07e 100644
--- a/src/layer-fns.cpp
+++ b/src/layer-fns.cpp
@@ -36,11 +36,9 @@ bool is_layer(SPObject &object) {
* @returns NULL if there are no further layers under a parent
*/
SPObject *next_sibling_layer(SPObject *layer) {
- using std::find_if;
-
- return find_if<SPObject::SiblingIterator>(
- layer->getNext(), NULL, &is_layer
- );
+ SPObject::ChildrenList &list = layer->parent->children;
+ auto l = std::find_if(++list.iterator_to(*layer), list.end(), &is_layer);
+ return l != list.end() ? &*l : nullptr;
}
/** Finds the previous sibling layer for a \a layer
@@ -50,11 +48,9 @@ SPObject *next_sibling_layer(SPObject *layer) {
SPObject *previous_sibling_layer(SPObject *layer) {
using Inkscape::Algorithms::find_last_if;
- SPObject *sibling(find_last_if<SPObject::SiblingIterator>(
- layer->parent->firstChild(), layer, &is_layer
- ));
-
- return ( sibling != layer ) ? sibling : NULL;
+ SPObject::ChildrenList &list = layer->parent->children;
+ auto l = find_last_if(list.begin(), list.iterator_to(*layer), &is_layer);
+ return l != list.iterator_to(*layer) ? &*(l) : nullptr;
}
/** Finds the first child of a \a layer
@@ -62,16 +58,15 @@ SPObject *previous_sibling_layer(SPObject *layer) {
* @returns NULL if layer has no sublayers
*/
SPObject *first_descendant_layer(SPObject *layer) {
- using std::find_if;
-
- SPObject *first_descendant=NULL;
- while (layer) {
- layer = find_if<SPObject::SiblingIterator>(
- layer->firstChild(), NULL, &is_layer
- );
- if (layer) {
+ SPObject *first_descendant = nullptr;
+ while (true) {
+ auto tmp = std::find_if(layer->children.begin(), layer->children.end(), &is_layer);
+ if (tmp != layer->children.end()) {
first_descendant = layer;
+ } else {
+ break;
}
+ layer = &*tmp;
}
return first_descendant;
@@ -84,9 +79,8 @@ SPObject *first_descendant_layer(SPObject *layer) {
SPObject *last_child_layer(SPObject *layer) {
using Inkscape::Algorithms::find_last_if;
- return find_last_if<SPObject::SiblingIterator>(
- layer->firstChild(), NULL, &is_layer
- );
+ auto l = find_last_if(layer->children.begin(), layer->children.end(), &is_layer);
+ return l != layer->children.end() ? &*l : nullptr;
}
SPObject *last_elder_layer(SPObject *root, SPObject *layer) {
diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp
index 568a7c8cc..4deae821a 100644
--- a/src/libnrtype/font-lister.cpp
+++ b/src/libnrtype/font-lister.cpp
@@ -298,8 +298,8 @@ void FontLister::update_font_list_recursive(SPObject *r, std::list<Glib::ustring
l->push_back(Glib::ustring(font_family));
}
- for (SPObject *child = r->firstChild(); child; child = child->getNext()) {
- update_font_list_recursive(child, l);
+ for (auto& child: r->children) {
+ update_font_list_recursive(&child, l);
}
}
diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp
index 6857d4363..cb4e43d87 100644
--- a/src/live_effects/lpe-perspective_path.cpp
+++ b/src/live_effects/lpe-perspective_path.cpp
@@ -102,12 +102,12 @@ void LPEPerspectivePath::refresh(Gtk::Entry* perspective) {
perspectiveID = perspective->get_text();
Persp3D *first = 0;
Persp3D *persp = 0;
- for ( SPObject *child = this->lpeobj->document->getDefs()->firstChild(); child && !persp; child = child->getNext() ) {
- if (SP_IS_PERSP3D(child) && first == 0) {
- first = SP_PERSP3D(child);
+ for (auto& child: lpeobj->document->getDefs()->children) {
+ if (SP_IS_PERSP3D(&child) && first == 0) {
+ first = SP_PERSP3D(&child);
}
- if (SP_IS_PERSP3D(child) && strcmp(child->getId(), const_cast<const gchar *>(perspectiveID.c_str())) == 0) {
- persp = SP_PERSP3D(child);
+ if (SP_IS_PERSP3D(&child) && strcmp(child.getId(), const_cast<const gchar *>(perspectiveID.c_str())) == 0) {
+ persp = SP_PERSP3D(&child);
break;
}
}
diff --git a/src/main-cmdlineact.cpp b/src/main-cmdlineact.cpp
index d22b513d6..c1b756ad5 100644
--- a/src/main-cmdlineact.cpp
+++ b/src/main-cmdlineact.cpp
@@ -61,7 +61,7 @@ CmdLineAction::doIt (ActionContext const & context) {
}
Inkscape::Selection * selection = context.getSelection();
- selection->add(obj, false);
+ selection->add(obj);
}
return;
}
diff --git a/src/main.cpp b/src/main.cpp
index 990909701..28bdf8359 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1209,8 +1209,8 @@ static int sp_process_file_list(GSList *fl)
std::vector<SPItem*> items;
SPRoot *root = doc->getRoot();
doc->ensureUpToDate();
- for ( SPObject *iter = root->firstChild(); iter ; iter = iter->getNext()) {
- SPItem* item = (SPItem*) iter;
+ for (auto& iter: root->children) {
+ SPItem* item = (SPItem*) &iter;
if (! (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item) || SP_IS_GROUP(item))) {
continue;
}
@@ -1464,10 +1464,8 @@ do_query_all_recurse (SPObject *o)
}
}
- SPObject *child = o->children;
- while (child) {
- do_query_all_recurse (child);
- child = child->next;
+ for(auto& child: o->children) {
+ do_query_all_recurse (&child);
}
}
diff --git a/src/object-set.cpp b/src/object-set.cpp
new file mode 100644
index 000000000..92bcf6b07
--- /dev/null
+++ b/src/object-set.cpp
@@ -0,0 +1,370 @@
+/*
+ * Multiindex container for selection
+ *
+ * Authors:
+ * Adrian Boguszewski
+ *
+ * Copyright (C) 2016 Adrian Boguszewski
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include <sigc++/sigc++.h>
+#include <glib.h>
+#include "object-set.h"
+#include "box3d.h"
+#include "persp3d.h"
+#include "preferences.h"
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/transformed.hpp>
+
+namespace Inkscape {
+
+bool ObjectSet::add(SPObject* object) {
+ g_return_val_if_fail(object != NULL, false);
+ g_return_val_if_fail(SP_IS_OBJECT(object), false);
+
+ // any ancestor is in the set - do nothing
+ if (_anyAncestorIsInSet(object)) {
+ return false;
+ }
+
+ // very nice function, but changes selection behavior (probably needs new selection option to deal with it)
+ // check if there is mutual ancestor for some elements, which can replace all of them in the set
+// object = _getMutualAncestor(object);
+
+ // remove all descendants from the set
+ _removeDescendantsFromSet(object);
+
+ _add(object);
+ _emitSignals();
+ return true;
+}
+
+bool ObjectSet::remove(SPObject* object) {
+ g_return_val_if_fail(object != NULL, false);
+ g_return_val_if_fail(SP_IS_OBJECT(object), false);
+
+ // object is the top of subtree
+ if (includes(object)) {
+ _remove(object);
+ _emitSignals();
+ return true;
+ }
+
+ // any ancestor of object is in the set
+ if (_anyAncestorIsInSet(object)) {
+ _removeAncestorsFromSet(object);
+ _emitSignals();
+ return true;
+ }
+
+ // no object nor any parent in the set
+ return false;
+}
+
+bool ObjectSet::includes(SPObject *object) {
+ g_return_val_if_fail(object != NULL, false);
+ g_return_val_if_fail(SP_IS_OBJECT(object), false);
+
+ return _container.get<hashed>().find(object) != _container.get<hashed>().end();
+}
+
+void ObjectSet::clear() {
+ _clear();
+ _emitSignals();
+}
+
+int ObjectSet::size() {
+ return _container.size();
+}
+
+bool ObjectSet::_anyAncestorIsInSet(SPObject *object) {
+ SPObject* o = object;
+ while (o != nullptr) {
+ if (includes(o)) {
+ return true;
+ }
+ o = o->parent;
+ }
+
+ return false;
+}
+
+void ObjectSet::_removeDescendantsFromSet(SPObject *object) {
+ for (auto& child: object->children) {
+ if (includes(&child)) {
+ _remove(&child);
+ // there is certainly no children of this child in the set
+ continue;
+ }
+
+ _removeDescendantsFromSet(&child);
+ }
+}
+
+void ObjectSet::_remove(SPObject *object) {
+ _releaseConnections[object].disconnect();
+ _releaseConnections.erase(object);
+ _container.get<hashed>().erase(object);
+ _remove3DBoxesRecursively(object);
+ _releaseSignals(object);
+}
+
+void ObjectSet::_add(SPObject *object) {
+ _releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove)));
+ _container.push_back(object);
+ _add3DBoxesRecursively(object);
+ _connectSignals(object);
+}
+
+void ObjectSet::_clear() {
+ for (auto object: _container) {
+ _remove(object);
+ }
+}
+
+SPObject *ObjectSet::_getMutualAncestor(SPObject *object) {
+ SPObject *o = object;
+
+ bool flag = true;
+ while (o->parent != nullptr) {
+ for (auto &child: o->parent->children) {
+ if(&child != o && !includes(&child)) {
+ flag = false;
+ break;
+ }
+ }
+ if (!flag) {
+ break;
+ }
+ o = o->parent;
+ }
+ return o;
+}
+
+void ObjectSet::_removeAncestorsFromSet(SPObject *object) {
+ SPObject* o = object;
+ while (o->parent != nullptr) {
+ for (auto &child: o->parent->children) {
+ if (&child != o) {
+ _add(&child);
+ }
+ }
+ if (includes(o->parent)) {
+ _remove(o->parent);
+ break;
+ }
+ o = o->parent;
+ }
+}
+
+ObjectSet::~ObjectSet() {
+ _clear();
+}
+
+void ObjectSet::toggle(SPObject *obj) {
+ if (includes(obj)) {
+ remove(obj);
+ } else {
+ add(obj);
+ }
+}
+
+bool ObjectSet::isEmpty() {
+ return _container.size() == 0;
+}
+
+SPObject *ObjectSet::single() {
+ return _container.size() == 1 ? *_container.begin() : nullptr;
+}
+
+SPItem *ObjectSet::singleItem() {
+ if (_container.size() == 1) {
+ SPObject* obj = *_container.begin();
+ if (SP_IS_ITEM(obj)) {
+ return SP_ITEM(obj);
+ }
+ }
+
+ return nullptr;
+}
+
+SPItem *ObjectSet::smallestItem(CompareSize compare) {
+ return _sizeistItem(true, compare);
+}
+
+SPItem *ObjectSet::largestItem(CompareSize compare) {
+ return _sizeistItem(false, compare);
+}
+
+SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) {
+ auto items = this->items();
+ gdouble max = sml ? 1e18 : 0;
+ SPItem *ist = NULL;
+
+ for (auto i = items.begin(); i != items.end(); ++i) {
+ Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds();
+ if (!obox || obox.empty()) {
+ continue;
+ }
+
+ Geom::Rect bbox = *obox;
+
+ gdouble size = compare == AREA ? bbox.area() :
+ (compare == VERTICAL ? bbox.width() : bbox.height());
+ size = sml ? size : size * -1;
+ if (size < max) {
+ max = size;
+ ist = SP_ITEM(*i);
+ }
+ }
+
+ return ist;
+}
+
+SPObjectRange ObjectSet::objects() {
+ return SPObjectRange(_container.get<random_access>().begin(), _container.get<random_access>().end());
+}
+
+Inkscape::XML::Node *ObjectSet::singleRepr() {
+ SPObject *obj = single();
+ return obj ? obj->getRepr() : nullptr;
+}
+
+void ObjectSet::set(SPObject *object) {
+ _clear();
+ _add(object);
+ // can't emit signal here due to boolean argument in Selection
+// _emitSignals();
+}
+
+Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const
+{
+ return (type == SPItem::GEOMETRIC_BBOX) ?
+ geometricBounds() : visualBounds();
+}
+
+Geom::OptRect ObjectSet::geometricBounds() const
+{
+ auto items = const_cast<ObjectSet *>(this)->items();
+
+ Geom::OptRect bbox;
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
+ bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds());
+ }
+ return bbox;
+}
+
+Geom::OptRect ObjectSet::visualBounds() const
+{
+ auto items = const_cast<ObjectSet *>(this)->items();
+
+ Geom::OptRect bbox;
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
+ bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds());
+ }
+ return bbox;
+}
+
+Geom::OptRect ObjectSet::preferredBounds() const
+{
+ if (Inkscape::Preferences::get()->getInt("/tools/bounding_box") == 0) {
+ return bounds(SPItem::VISUAL_BBOX);
+ } else {
+ return bounds(SPItem::GEOMETRIC_BBOX);
+ }
+}
+
+Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const
+{
+ Geom::OptRect bbox;
+ auto items = const_cast<ObjectSet *>(this)->items();
+ if (items.empty()) return bbox;
+
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
+ SPItem *item = SP_ITEM(*iter);
+ bbox |= item->documentBounds(type);
+ }
+
+ return bbox;
+}
+
+// If we have a selection of multiple items, then the center of the first item
+// will be returned; this is also the case in SelTrans::centerRequest()
+boost::optional<Geom::Point> ObjectSet::center() const {
+ auto items = const_cast<ObjectSet *>(this)->items();
+ if (!items.empty()) {
+ SPItem *first = items.back(); // from the first item in selection
+ if (first->isCenterSet()) { // only if set explicitly
+ return first->getCenter();
+ }
+ }
+ Geom::OptRect bbox = preferredBounds();
+ if (bbox) {
+ return bbox->midpoint();
+ } else {
+ return boost::optional<Geom::Point>();
+ }
+}
+
+std::list<Persp3D *> const ObjectSet::perspList() {
+ std::list<Persp3D *> pl;
+ for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
+ Persp3D *persp = box3d_get_perspective(*i);
+ if (std::find(pl.begin(), pl.end(), persp) == pl.end())
+ pl.push_back(persp);
+ }
+ return pl;
+}
+
+std::list<SPBox3D *> const ObjectSet::box3DList(Persp3D *persp) {
+ std::list<SPBox3D *> boxes;
+ if (persp) {
+ for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
+ SPBox3D *box = *i;
+ if (persp == box3d_get_perspective(box)) {
+ boxes.push_back(box);
+ }
+ }
+ } else {
+ boxes = _3dboxes;
+ }
+ return boxes;
+}
+
+void ObjectSet::_add3DBoxesRecursively(SPObject *obj) {
+ std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
+
+ for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
+ SPBox3D *box = *i;
+ _3dboxes.push_back(box);
+ }
+}
+
+void ObjectSet::_remove3DBoxesRecursively(SPObject *obj) {
+ std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
+
+ for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
+ SPBox3D *box = *i;
+ std::list<SPBox3D *>::iterator b = std::find(_3dboxes.begin(), _3dboxes.end(), box);
+ if (b == _3dboxes.end()) {
+ g_print ("Warning! Trying to remove unselected box from selection.\n");
+ return;
+ }
+ _3dboxes.erase(b);
+ }
+}
+
+} // namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/object-set.h b/src/object-set.h
new file mode 100644
index 000000000..fae365f70
--- /dev/null
+++ b/src/object-set.h
@@ -0,0 +1,329 @@
+/*
+ * Multiindex container for selection
+ *
+ * Authors:
+ * Adrian Boguszewski
+ *
+ * Copyright (C) 2016 Adrian Boguszewski
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifndef INKSCAPE_PROTOTYPE_OBJECTSET_H
+#define INKSCAPE_PROTOTYPE_OBJECTSET_H
+
+#include <string>
+#include <unordered_map>
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/sequenced_index.hpp>
+#include <boost/multi_index/hashed_index.hpp>
+#include <boost/multi_index/random_access_index.hpp>
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/transformed.hpp>
+#include <boost/range/sub_range.hpp>
+#include <boost/range/any_range.hpp>
+#include <boost/type_traits.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <sigc++/connection.h>
+#include <inkgc/gc-soft-ptr.h>
+#include "sp-object.h"
+#include "sp-item.h"
+#include "sp-item-group.h"
+
+class SPBox3D;
+class Persp3D;
+class SPDesktop;
+
+namespace Inkscape {
+
+namespace XML {
+class Node;
+}
+
+struct hashed{};
+struct random_access{};
+
+struct is_item {
+ bool operator()(SPObject* obj) {
+ return SP_IS_ITEM(obj);
+ }
+};
+
+struct is_group {
+ bool operator()(SPObject* obj) {
+ return SP_IS_GROUP(obj);
+ }
+};
+
+struct object_to_item {
+ typedef SPItem* result_type;
+ SPItem* operator()(SPObject* obj) const {
+ return SP_ITEM(obj);
+ }
+};
+
+struct object_to_node {
+ typedef XML::Node* result_type;
+ XML::Node* operator()(SPObject* obj) const {
+ return obj->getRepr();
+ }
+};
+
+struct object_to_group {
+ typedef SPGroup* result_type;
+ SPGroup* operator()(SPObject* obj) const {
+ return SP_GROUP(obj);
+ }
+};
+
+typedef boost::multi_index_container<
+ SPObject*,
+ boost::multi_index::indexed_by<
+ boost::multi_index::sequenced<>,
+ boost::multi_index::random_access<
+ boost::multi_index::tag<random_access>>,
+ boost::multi_index::hashed_unique<
+ boost::multi_index::tag<hashed>,
+ boost::multi_index::identity<SPObject*>>
+ >> MultiIndexContainer;
+
+typedef boost::any_range<
+ SPObject*,
+ boost::random_access_traversal_tag,
+ SPObject* const&,
+ std::ptrdiff_t> SPObjectRange;
+
+class ObjectSet {
+public:
+ enum CompareSize {HORIZONTAL, VERTICAL, AREA};
+ typedef decltype(MultiIndexContainer().get<random_access>() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange;
+ typedef decltype(MultiIndexContainer().get<random_access>() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange;
+ typedef decltype(MultiIndexContainer().get<random_access>() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange;
+
+ ObjectSet(SPDesktop* desktop): _desktop(desktop) {};
+ ObjectSet(): _desktop(nullptr) {};
+ virtual ~ObjectSet();
+
+ /**
+ * Add an SPObject to the set of selected objects.
+ *
+ * @param obj the SPObject to add
+ */
+ bool add(SPObject* object);
+
+ /** Add items from an STL iterator range to the selection.
+ * \param from the begin iterator
+ * \param to the end iterator
+ */
+ template <typename InputIterator>
+ void add(InputIterator from, InputIterator to) {
+ for(auto it = from; it != to; ++it) {
+ _add(*it);
+ }
+ _emitSignals();
+ }
+
+ /**
+ * Removes an item from the set of selected objects.
+ *
+ * It is ok to call this method for an unselected item.
+ *
+ * @param item the item to unselect
+ *
+ * @return is success
+ */
+ bool remove(SPObject* object);
+
+ /**
+ * Returns true if the given object is selected.
+ */
+ bool includes(SPObject *object);
+
+ /**
+ * Set the selection to a single specific object.
+ *
+ * @param obj the object to select
+ */
+ void set(SPObject *object);
+
+ /**
+ * Unselects all selected objects.
+ */
+ void clear();
+
+ /**
+ * Returns size of the selection.
+ */
+ int size();
+
+ /**
+ * Returns true if no items are selected.
+ */
+ bool isEmpty();
+
+ /**
+ * Removes an item if selected, adds otherwise.
+ *
+ * @param item the item to unselect
+ */
+ void toggle(SPObject *obj);
+
+ /**
+ * Returns a single selected object.
+ *
+ * @return NULL unless exactly one object is selected
+ */
+ SPObject *single();
+
+ /**
+ * Returns a single selected item.
+ *
+ * @return NULL unless exactly one object is selected
+ */
+ SPItem *singleItem();
+
+ /**
+ * Returns the smallest item from this selection.
+ */
+ SPItem *smallestItem(CompareSize compare);
+
+ /**
+ * Returns the largest item from this selection.
+ */
+ SPItem *largestItem(CompareSize compare);
+
+ /** Returns the list of selected objects. */
+ SPObjectRange objects();
+
+ /** Returns a range of selected SPItems. */
+ SPItemRange items() {
+ return SPItemRange(_container.get<random_access>()
+ | boost::adaptors::filtered(is_item())
+ | boost::adaptors::transformed(object_to_item()));
+ };
+
+ /** Returns a range of selected groups. */
+ SPGroupRange groups() {
+ return SPGroupRange (_container.get<random_access>()
+ | boost::adaptors::filtered(is_group())
+ | boost::adaptors::transformed(object_to_group()));
+ }
+
+ /** Returns a range of the xml nodes of all selected objects. */
+ XMLNodeRange xmlNodes() {
+ return XMLNodeRange(_container.get<random_access>()
+ | boost::adaptors::filtered(is_item())
+ | boost::adaptors::transformed(object_to_node()));
+ }
+
+ /**
+ * Returns a single selected object's xml node.
+ *
+ * @return NULL unless exactly one object is selected
+ */
+ XML::Node *singleRepr();
+
+ /**
+ * Selects exactly the specified objects.
+ *
+ * @param objs the objects to select
+ */
+ template <class T>
+ typename boost::enable_if<boost::is_base_of<SPObject, T>, void>::type
+ setList(const std::vector<T*> &objs) {
+ _clear();
+ addList(objs);
+ }
+
+ /**
+ * Adds the specified objects to selection, without deselecting first.
+ *
+ * @param objs the objects to select
+ */
+ template <class T>
+ typename boost::enable_if<boost::is_base_of<SPObject, T>, void>::type
+ addList(const std::vector<T*> &objs) {
+ for (auto obj: objs) {
+ if (!includes(obj)) {
+ add(obj);
+ }
+ }
+ }
+
+ /** Returns the bounding rectangle of the selection. */
+ Geom::OptRect bounds(SPItem::BBoxType type) const;
+ Geom::OptRect visualBounds() const;
+ Geom::OptRect geometricBounds() const;
+
+ /**
+ * Returns either the visual or geometric bounding rectangle of the selection, based on the
+ * preferences specified for the selector tool
+ */
+ Geom::OptRect preferredBounds() const;
+
+ /* Returns the bounding rectangle of the selectionin document coordinates.*/
+ Geom::OptRect documentBounds(SPItem::BBoxType type) const;
+
+ /**
+ * Returns the rotation/skew center of the selection.
+ */
+ boost::optional<Geom::Point> center() const;
+
+ /** Returns a list of all perspectives which have a 3D box in the current selection.
+ (these may also be nested in groups) */
+ std::list<Persp3D *> const perspList();
+
+ /**
+ * Returns a list of all 3D boxes in the current selection which are associated to @c
+ * persp. If @c pers is @c NULL, return all selected boxes.
+ */
+ std::list<SPBox3D *> const box3DList(Persp3D *persp = NULL);
+
+ /**
+ * Returns the desktop the selection is bound to
+ *
+ * @return the desktop the selection is bound to, or NULL if in console mode
+ */
+ SPDesktop *desktop() { return _desktop; }
+
+protected:
+ virtual void _connectSignals(SPObject* object) {};
+ virtual void _releaseSignals(SPObject* object) {};
+ virtual void _emitSignals() {};
+ void _add(SPObject* object);
+ void _clear();
+ void _remove(SPObject* object);
+ bool _anyAncestorIsInSet(SPObject *object);
+ void _removeDescendantsFromSet(SPObject *object);
+ void _removeAncestorsFromSet(SPObject *object);
+ SPItem *_sizeistItem(bool sml, CompareSize compare);
+ SPObject *_getMutualAncestor(SPObject *object);
+ virtual void _add3DBoxesRecursively(SPObject *obj);
+ virtual void _remove3DBoxesRecursively(SPObject *obj);
+
+ MultiIndexContainer _container;
+ GC::soft_ptr<SPDesktop> _desktop;
+ std::list<SPBox3D *> _3dboxes;
+ std::unordered_map<SPObject*, sigc::connection> _releaseConnections;
+
+};
+
+typedef ObjectSet::SPItemRange SPItemRange;
+typedef ObjectSet::SPGroupRange SPGroupRange;
+typedef ObjectSet::XMLNodeRange XMLNodeRange;
+
+} // namespace Inkscape
+
+#endif //INKSCAPE_PROTOTYPE_OBJECTSET_H
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp
index af33415a1..b4f4024cc 100644
--- a/src/object-snapper.cpp
+++ b/src/object-snapper.cpp
@@ -84,9 +84,9 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance
bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see?
- for ( SPObject *o = parent->firstChild(); o; o = o->getNext() ) {
+ for (auto& o: parent->children) {
g_assert(dt != NULL);
- SPItem *item = dynamic_cast<SPItem *>(o);
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if (item && !(dt->itemIsHidden(item) && !clip_or_mask)) {
// Snapping to items in a locked layer is allowed
// Don't snap to hidden objects, unless they're a clipped path or a mask
@@ -94,7 +94,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
std::vector<SPItem const *>::const_iterator i;
if (it != NULL) {
i = it->begin();
- while (i != it->end() && *i != o) {
+ while (i != it->end() && *i != &o) {
++i;
}
}
@@ -116,7 +116,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent,
}
if (dynamic_cast<SPGroup *>(item)) {
- _findCandidates(o, it, false, bbox_to_snap, clip_or_mask, additional_affine);
+ _findCandidates(&o, it, false, bbox_to_snap, clip_or_mask, additional_affine);
} else {
Geom::OptRect bbox_of_item;
Preferences *prefs = Preferences::get();
diff --git a/src/object-test.h b/src/object-test.h
index 4f0be3251..0af823684 100644
--- a/src/object-test.h
+++ b/src/object-test.h
@@ -115,7 +115,6 @@ public:
prev = next;
next = next->getNext();
}
- TS_ASSERT(child->lastChild() == next);
// Test hrefcount
TS_ASSERT(path->isReferenced());
diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp
index 79a15f509..5295b7a70 100644
--- a/src/path-chemistry.cpp
+++ b/src/path-chemistry.cpp
@@ -54,7 +54,7 @@ sp_selected_path_combine(SPDesktop *desktop, bool skip_undo)
Inkscape::Selection *selection = desktop->getSelection();
SPDocument *doc = desktop->getDocument();
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
if (items.size() < 1) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to combine."));
@@ -200,7 +200,7 @@ sp_selected_path_break_apart(SPDesktop *desktop, bool skip_undo)
bool did = false;
- std::vector<SPItem*> itemlist(selection->itemList());
+ std::vector<SPItem*> itemlist(selection->items().begin(), selection->items().end());
for (std::vector<SPItem*>::const_iterator i = itemlist.begin(); i != itemlist.end(); ++i){
SPItem *item = *i;
@@ -300,7 +300,7 @@ sp_selected_path_to_curves(Inkscape::Selection *selection, SPDesktop *desktop, b
desktop->setWaitingCursor();
}
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
std::vector<Inkscape::XML::Node*> to_select;
selection->clear();
std::vector<SPItem*> items(selected);
@@ -331,7 +331,7 @@ void sp_selected_to_lpeitems(SPDesktop *desktop)
return;
}
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
std::vector<Inkscape::XML::Node*> to_select;
selection->clear();
std::vector<SPItem*> items(selected);
@@ -600,7 +600,7 @@ void
sp_selected_path_reverse(SPDesktop *desktop)
{
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> items = selection->itemList();
+ auto items = selection->items();
if (items.empty()) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>path(s)</b> to reverse."));
@@ -614,7 +614,7 @@ sp_selected_path_reverse(SPDesktop *desktop)
bool did = false;
desktop->messageStack()->flash(Inkscape::IMMEDIATE_MESSAGE, _("Reversing paths..."));
- for (std::vector<SPItem*>::const_iterator i = items.begin(); i != items.end(); ++i){
+ for (auto i = items.begin(); i != items.end(); ++i){
SPPath *path = dynamic_cast<SPPath *>(*i);
if (!path) {
diff --git a/src/persp3d.cpp b/src/persp3d.cpp
index 809242ed8..ff00f9441 100644
--- a/src/persp3d.cpp
+++ b/src/persp3d.cpp
@@ -213,9 +213,10 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {//
Persp3D *persp3d_document_first_persp(SPDocument *document)
{
Persp3D *first = 0;
- for ( SPObject *child = document->getDefs()->firstChild(); child && !first; child = child->getNext() ) {
- if (SP_IS_PERSP3D(child)) {
- first = SP_PERSP3D(child);
+ for (auto& child: document->getDefs()->children) {
+ if (SP_IS_PERSP3D(&child)) {
+ first = SP_PERSP3D(&child);
+ break;
}
}
return first;
@@ -491,10 +492,10 @@ persp3d_on_repr_attr_changed ( Inkscape::XML::Node * /*repr*/,
/* checks whether all boxes linked to this perspective are currently selected */
bool
-persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection) {
+persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set) {
Persp3DImpl *persp_impl = persp->perspective_impl;
- std::list<SPBox3D *> selboxes = selection->box3DList();
+ std::list<SPBox3D *> selboxes = set->box3DList();
for (std::vector<SPBox3D *>::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) {
if (std::find(selboxes.begin(), selboxes.end(), *i) == selboxes.end()) {
@@ -531,9 +532,9 @@ persp3d_print_debugging_info (Persp3D *persp) {
void persp3d_print_debugging_info_all(SPDocument *document)
{
- for ( SPObject *child = document->getDefs()->firstChild(); child; child = child->getNext() ) {
- if (SP_IS_PERSP3D(child)) {
- persp3d_print_debugging_info(SP_PERSP3D(child));
+ for (auto& child: document->getDefs()->children) {
+ if (SP_IS_PERSP3D(&child)) {
+ persp3d_print_debugging_info(SP_PERSP3D(&child));
}
}
persp3d_print_all_selected();
diff --git a/src/persp3d.h b/src/persp3d.h
index be5680bcb..ce0e3c120 100644
--- a/src/persp3d.h
+++ b/src/persp3d.h
@@ -107,7 +107,7 @@ void persp3d_absorb(Persp3D *persp1, Persp3D *persp2);
Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup = NULL);
Persp3D * persp3d_document_first_persp (SPDocument *document);
-bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection);
+bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set);
void persp3d_print_debugging_info (Persp3D *persp);
void persp3d_print_debugging_info_all(SPDocument *doc);
diff --git a/src/selcue.cpp b/src/selcue.cpp
index 3d9f3c619..13600231a 100644
--- a/src/selcue.cpp
+++ b/src/selcue.cpp
@@ -93,15 +93,15 @@ void Inkscape::SelCue::_updateItemBboxes(Inkscape::Preferences *prefs)
void Inkscape::SelCue::_updateItemBboxes(gint mode, int prefs_bbox)
{
- const std::vector<SPItem*> items = _selection->itemList();
- if (_item_bboxes.size() != items.size()) {
+ auto items = _selection->items();
+ if (_item_bboxes.size() != boost::distance(items)) {
_newItemBboxes();
return;
}
int bcount = 0;
- std::vector<SPItem*> ll=_selection->itemList();
- for (std::vector<SPItem*>::const_iterator l = ll.begin(); l != ll.end(); ++l) {
+ auto ll= _selection->items();
+ for (auto l = ll.begin(); l != ll.end(); ++l) {
SPItem *item = *l;
SPCanvasItem* box = _item_bboxes[bcount ++];
@@ -143,8 +143,8 @@ void Inkscape::SelCue::_newItemBboxes()
int prefs_bbox = prefs->getBool("/tools/bounding_box");
- std::vector<SPItem*> ll=_selection->itemList();
- for (std::vector<SPItem*>::const_iterator l = ll.begin(); l != ll.end(); ++l) {
+ auto ll= _selection->items();
+ for (auto l = ll.begin(); l != ll.end(); ++l) {
SPItem *item = *l;
Geom::OptRect const b = (prefs_bbox == 0) ?
@@ -198,8 +198,8 @@ void Inkscape::SelCue::_newTextBaselines()
}
_text_baselines.clear();
- std::vector<SPItem*> ll = _selection->itemList();
- for (std::vector<SPItem*>::const_iterator l=ll.begin();l!=ll.end();++l) {
+ auto ll = _selection->items();
+ for (auto l=ll.begin();l!=ll.end();++l) {
SPItem *item = *l;
SPCanvasItem* baseline_point = NULL;
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index f6923d1ea..37a0e42e1 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -12,8 +12,9 @@
* Abhishek Sharma
* Kris De Gussem <Kris.DeGussem@gmail.com>
* Tavmjong Bah <tavmjong@free.fr> (Symbol additions)
+ * Adrian Boguszewski
*
- * Copyright (C) 1999-2010,2012 authors
+ * Copyright (C) 1999-2016 authors
* Copyright (C) 2001-2002 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -78,6 +79,11 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS;
#include "helper/png-write.h"
#include "layer-fns.h"
#include "context-fns.h"
+#include <map>
+#include <cstring>
+#include <string>
+#include <boost/range/adaptor/reversed.hpp>
+#include "sp-item.h"
#include "box3d.h"
#include "persp3d.h"
#include "xml/simple-document.h"
@@ -89,6 +95,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS;
#include "live_effects/effect.h"
#include "live_effects/parameter/originalpath.h"
#include "layer-manager.h"
+#include "object-set.h"
// For clippath editing
#include "ui/tools/node-tool.h"
@@ -100,6 +107,7 @@ using Inkscape::DocumentUndo;
using Geom::X;
using Geom::Y;
using Inkscape::UI::Tools::NodeTool;
+using namespace Inkscape;
/* The clipboard handling is in ui/clipboard.cpp now. There are some legacy functions left here,
because the layer manipulation code uses them. It should be rewritten specifically
@@ -259,9 +267,9 @@ void SelectionHelper::fixSelection(SPDesktop *dt)
std::vector<SPItem*> items ;
- std::vector<SPItem*> const selList = selection->itemList();
+ auto selList = selection->items();
- for( std::vector<SPItem*>::const_reverse_iterator i = selList.rbegin(); i != selList.rend(); ++i ) {
+ for(auto i = boost::rbegin(selList); i != boost::rend(selList); ++i) {
SPItem *item = *i;
if( item &&
!dt->isLayer(item) &&
@@ -386,7 +394,7 @@ void sp_selection_delete(SPDesktop *desktop)
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("<b>Nothing</b> was deleted."));
return;
}
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
selection->clear();
sp_selection_delete_impl(selected);
desktop->currentLayer()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
@@ -409,8 +417,8 @@ static void add_ids_recursive(std::vector<const gchar *> &ids, SPObject *obj)
ids.push_back(obj->getId());
if (dynamic_cast<SPGroup *>(obj)) {
- for (SPObject *child = obj->firstChild() ; child; child = child->getNext() ) {
- add_ids_recursive(ids, child);
+ for (auto& child: obj->children) {
+ add_ids_recursive(ids, &child);
}
}
}
@@ -431,7 +439,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to duplicate."));
return;
}
- std::vector<Inkscape::XML::Node*> reprs(selection->reprList());
+ std::vector<Inkscape::XML::Node*> reprs(selection->xmlNodes().begin(), selection->xmlNodes().end());
if(duplicateLayer){
reprs.clear();
@@ -563,20 +571,20 @@ void sp_edit_clear_all(Inkscape::Selection *selection)
*/
std::vector<SPItem*> &get_all_items(std::vector<SPItem*> &list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, bool ingroups, std::vector<SPItem*> const &exclude)
{
- for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) {
- SPItem *item = dynamic_cast<SPItem *>(child);
+ for (auto& child: from->children) {
+ SPItem *item = dynamic_cast<SPItem *>(&child);
if (item &&
!desktop->isLayer(item) &&
(!onlysensitive || !item->isLocked()) &&
(!onlyvisible || !desktop->itemIsHidden(item)) &&
- (exclude.empty() || exclude.end() == std::find(exclude.begin(),exclude.end(),child))
+ (exclude.empty() || exclude.end() == std::find(exclude.begin(), exclude.end(), &child))
)
{
list.insert(list.begin(),item);
}
if (ingroups || (item && desktop->isLayer(item))) {
- list = get_all_items(list, child, desktop, onlyvisible, onlysensitive, ingroups, exclude);
+ list = get_all_items(list, &child, desktop, onlyvisible, onlysensitive, ingroups, exclude);
}
}
@@ -601,7 +609,7 @@ static void sp_edit_select_all_full(SPDesktop *dt, bool force_all_layers, bool i
std::vector<SPItem*> exclude;
if (invert) {
- exclude = selection->itemList();
+ exclude.insert(exclude.end(), selection->items().begin(), selection->items().end());
}
if (force_all_layers)
@@ -667,9 +675,13 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop)
sp_edit_select_all_full(desktop, true, true);
}
-static void sp_selection_group_impl(std::vector<Inkscape::XML::Node*> p, Inkscape::XML::Node *group, Inkscape::XML::Document *xml_doc, SPDocument *doc) {
+static Inkscape::XML::Node* sp_object_set_group(ObjectSet *set) {
+ SPDocument *doc = set->desktop()->getDocument();
+ Inkscape::XML::Document *xml_doc = doc->getReprDoc();
+ Inkscape::XML::Node *group = xml_doc->createElement("svg:g");
- sort(p.begin(),p.end(),sp_repr_compare_position_bool);
+ std::vector<Inkscape::XML::Node*> p(set->xmlNodes().begin(), set->xmlNodes().end());
+ std::sort(p.begin(), p.end(), sp_repr_compare_position_bool);
// Remember the position and parent of the topmost object.
gint topmost = p.back()->position();
@@ -727,31 +739,24 @@ static void sp_selection_group_impl(std::vector<Inkscape::XML::Node*> p, Inkscap
// Move to the position of the topmost, reduced by the number of items deleted from topmost_parent
group->setPosition(topmost + 1);
+
+ set->set(doc->getObjectByRepr(group));
+
+ return group;
}
void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop)
{
- SPDocument *doc = selection->layers()->getDocument();
- Inkscape::XML::Document *xml_doc = doc->getReprDoc();
-
// Check if something is selected.
if (selection->isEmpty()) {
selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>some objects</b> to group."));
return;
}
+ Inkscape::XML::Node* group = sp_object_set_group(selection);
- std::vector<Inkscape::XML::Node*> p (selection->reprList());
-
- selection->clear();
-
- Inkscape::XML::Node *group = xml_doc->createElement("svg:g");
-
- sp_selection_group_impl(p, group, xml_doc, doc);
-
- DocumentUndo::done(doc, SP_VERB_SELECTION_GROUP,
+ DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_GROUP,
C_("Verb", "Group"));
- selection->set(group);
Inkscape::GC::release(group);
}
@@ -775,9 +780,8 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto
selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("<b>No objects selected</b> to pop out of group."));
return;
}
- std::vector<SPItem*> selection_list = selection->itemList();
- std::vector<SPItem*>::const_iterator item = selection_list.begin(); // leaving this because it will be useful for
+ auto item = selection->items().begin(); // leaving this because it will be useful for
// future implementation of complex pop ungrouping
SPItem *obj = *item;
SPItem *parent_group = static_cast<SPItem*>(obj->parent);
@@ -800,32 +804,16 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto
}
-
-void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop)
+static void sp_object_set_ungroup(ObjectSet *set)
{
- if (selection->isEmpty()) {
- selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a <b>group</b> to ungroup."));
- }
-
- // first check whether there is anything to ungroup
- std::vector<SPItem*> old_select = selection->itemList();
- std::vector<SPItem*> new_select;
GSList *groups = NULL;
- for (std::vector<SPItem*>::const_iterator item = old_select.begin(); item!=old_select.end(); ++item) {
- SPItem *obj = *item;
- if (dynamic_cast<SPGroup *>(obj)) {
- groups = g_slist_prepend(groups, obj);
- }
+ for (auto g: set->groups()) {
+ groups = g_slist_prepend(groups, g);
}
- if (groups == NULL) {
- selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("<b>No groups</b> to ungroup in the selection."));
- g_slist_free(groups);
- return;
- }
-
- std::vector<SPItem*> items(old_select);
- selection->clear();
+ std::vector<SPItem*> new_select;
+ auto old_select = set->items();
+ std::vector<SPItem*> items(old_select.begin(), old_select.end());
// If any of the clones refer to the groups, unlink them and replace them with successors
// in the items list.
@@ -872,7 +860,21 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop)
}
}
- selection->addList(new_select);
+ set->setList(new_select);
+}
+
+void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop)
+{
+ if (selection->isEmpty()) {
+ selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a <b>group</b> to ungroup."));
+ }
+
+ if (boost::distance(selection->groups()) == 0) {
+ selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("<b>No groups</b> to ungroup in the selection."));
+ return;
+ }
+
+ sp_object_set_ungroup(selection);
DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP,
_("Ungroup"));
@@ -908,18 +910,18 @@ sp_degroup_list(std::vector<SPItem*> &items)
/** If items in the list have a common parent, return it, otherwise return NULL */
static SPGroup *
-sp_item_list_common_parent_group(std::vector<SPItem*> const &items)
+sp_item_list_common_parent_group(const SPItemRange &items)
{
if (items.empty()) {
return NULL;
}
- SPObject *parent = items[0]->parent;
+ SPObject *parent = items.front()->parent;
// Strictly speaking this CAN happen, if user selects <svg> from Inkscape::XML editor
if (!dynamic_cast<SPGroup *>(parent)) {
return NULL;
}
- for (std::vector<SPItem*>::const_iterator item=items.begin();item!=items.end();++item) {
- if((*item)==items[0])continue;
+ for (auto item=items.begin();item!=items.end();++item) {
+ if((*item)==items.front())continue;
if ((*item)->parent != parent) {
return NULL;
}
@@ -957,22 +959,9 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s
((SPItem*)second)->getRepr())<0;
}
-void
-sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop)
-{
- std::vector<SPItem*> items= selection->itemList();
- if (items.empty()) {
- selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to raise."));
- return;
- }
-
- SPGroup const *group = sp_item_list_common_parent_group(items);
- if (!group) {
- selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."));
- return;
- }
-
- Inkscape::XML::Node *grepr = const_cast<Inkscape::XML::Node *>(group->getRepr());
+void sp_object_set_raise(ObjectSet *set) {
+ std::vector<SPItem*> items(set->items().begin(), set->items().end());
+ Inkscape::XML::Node *grepr = const_cast<Inkscape::XML::Node *>(items.front()->parent->getRepr());
/* Construct reverse-ordered list of selected children. */
std::vector<SPItem*> rev(items);
@@ -986,7 +975,7 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop)
for (std::vector<SPItem*>::const_iterator item=rev.begin();item!=rev.end();++item) {
SPObject *child = *item;
// for each selected object, find the next sibling
- for (SPObject *newref = child->next; newref; newref = newref->next) {
+ for (SPObject *newref = child->getNext(); newref; newref = newref->getNext()) {
// if the sibling is an item AND overlaps our selection,
SPItem *newItem = dynamic_cast<SPItem *>(newref);
if (newItem) {
@@ -1003,55 +992,61 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop)
}
}
}
- DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE,
- //TRANSLATORS: "Raise" means "to raise an object" in the undo history
- C_("Undo action", "Raise"));
}
-void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop)
+void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop)
{
- SPDocument *document = selection->layers()->getDocument();
-
- if (selection->isEmpty()) {
- selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to raise to top."));
+ if (selection->items().empty()) {
+ selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to raise."));
return;
}
- std::vector<SPItem*> items = selection->itemList();
-
- SPGroup const *group = sp_item_list_common_parent_group(items);
+ SPGroup const *group = sp_item_list_common_parent_group(selection->items());
if (!group) {
selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."));
return;
}
+ sp_object_set_raise(selection);
- std::vector<Inkscape::XML::Node*> rl(selection->reprList());
+ DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE,
+ //TRANSLATORS: "Raise" means "to raise an object" in the undo history
+ C_("Undo action", "Raise"));
+}
+
+void sp_object_set_raise_to_top(ObjectSet *set) {
+ std::vector<Inkscape::XML::Node*> rl(set->xmlNodes().begin(), set->xmlNodes().end());
sort(rl.begin(),rl.end(),sp_repr_compare_position_bool);
for (std::vector<Inkscape::XML::Node*>::const_iterator l=rl.begin(); l!=rl.end();++l) {
Inkscape::XML::Node *repr =(*l);
repr->setPosition(-1);
}
-
- DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT,
- _("Raise to top"));
}
-void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop)
+void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop)
{
- std::vector<SPItem*> items = selection->itemList();
- if (items.empty()) {
- selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to lower."));
+ SPDocument *document = selection->layers()->getDocument();
+
+ if (selection->isEmpty()) {
+ selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to raise to top."));
return;
}
- SPGroup const *group = sp_item_list_common_parent_group(items);
+ SPGroup const *group = sp_item_list_common_parent_group(selection->items());
if (!group) {
selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."));
return;
}
- Inkscape::XML::Node *grepr = const_cast<Inkscape::XML::Node *>(group->getRepr());
+ sp_object_set_raise_to_top(selection);
+
+ DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT,
+ _("Raise to top"));
+}
+
+void sp_object_set_lower(ObjectSet *set) {
+ std::vector<SPItem*> items(set->items().begin(), set->items().end());
+ Inkscape::XML::Node *grepr = const_cast<Inkscape::XML::Node *>(items.front()->parent->getRepr());
// Determine the common bbox of the selected items.
Geom::OptRect selected = enclose_items(items);
@@ -1086,48 +1081,65 @@ void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop)
}
}
}
-
- DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER,
- //TRANSLATORS: "Lower" means "to lower an object" in the undo history
- C_("Undo action", "Lower"));
}
-void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop)
+void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop)
{
- SPDocument *document = selection->layers()->getDocument();
-
- if (selection->isEmpty()) {
- selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to lower to bottom."));
+ if (selection->items().empty()) {
+ selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to lower."));
return;
}
- std::vector<SPItem*> items =selection->itemList();
-
- SPGroup const *group = sp_item_list_common_parent_group(items);
+ SPGroup const *group = sp_item_list_common_parent_group(selection->items());
if (!group) {
selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."));
return;
}
- std::vector<Inkscape::XML::Node*> rl(selection->reprList());
+ sp_object_set_lower(selection);
+
+ DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER,
+ //TRANSLATORS: "Lower" means "to lower an object" in the undo history
+ C_("Undo action", "Lower"));
+}
+
+void sp_object_set_lower_to_bottom(ObjectSet *set) {
+ std::vector<Inkscape::XML::Node*> rl(set->xmlNodes().begin(), set->xmlNodes().end());
sort(rl.begin(),rl.end(),sp_repr_compare_position_bool);
for (std::vector<Inkscape::XML::Node*>::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) {
gint minpos;
- SPObject *pp, *pc;
+ SPObject *pp;
Inkscape::XML::Node *repr = (*l);
- pp = document->getObjectByRepr(repr->parent());
+ pp = set->desktop()->getDocument()->getObjectByRepr(repr->parent());
minpos = 0;
g_assert(dynamic_cast<SPGroup *>(pp));
- pc = pp->firstChild();
- while (!dynamic_cast<SPItem *>(pc)) {
+ for (auto& pc: pp->children) {
+ if(dynamic_cast<SPItem *>(&pc)) {
+ break;
+ }
minpos += 1;
- pc = pc->next;
}
repr->setPosition(minpos);
}
+}
+
+void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop)
+{
+ if (selection->isEmpty()) {
+ selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to lower to bottom."));
+ return;
+ }
+
+ SPGroup const *group = sp_item_list_common_parent_group(selection->items());
+ if (!group) {
+ selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from <b>different groups</b> or <b>layers</b>."));
+ return;
+ }
- DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK,
+ sp_object_set_lower_to_bottom(selection);
+
+ DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_TO_BACK,
_("Lower to bottom"));
}
@@ -1173,13 +1185,14 @@ take_style_from_item(SPObject *object)
if (css == NULL)
return NULL;
- if ((dynamic_cast<SPGroup *>(object) && object->children) ||
- (dynamic_cast<SPText *>(object) && object->children && object->children->next == NULL)) {
+ if ((dynamic_cast<SPGroup *>(object) && object->firstChild()) ||
+ (dynamic_cast<SPText *>(object) && object->firstChild() && object->firstChild()->getNext() == NULL)) {
// if this is a text with exactly one tspan child, merge the style of that tspan as well
// If this is a group, merge the style of its topmost (last) child with style
- for (SPObject *last_element = object->lastChild(); last_element != NULL; last_element = last_element->getPrev()) {
- if ( last_element->style ) {
- SPCSSAttr *temp = sp_css_attr_from_object(last_element, SP_STYLE_FLAG_IFSET);
+ auto list = object->children | boost::adaptors::reversed;
+ for (auto& element: list) {
+ if (element.style ) {
+ SPCSSAttr *temp = sp_css_attr_from_object(&element, SP_STYLE_FLAG_IFSET);
if (temp) {
sp_repr_css_merge(css, temp);
sp_repr_css_attr_unref(temp);
@@ -1264,8 +1277,8 @@ void sp_selection_remove_livepatheffect(SPDesktop *desktop)
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to remove live path effects from."));
return;
}
- std::vector<SPItem*> list=selection->itemList();
- for ( std::vector<SPItem*>::const_iterator itemlist=list.begin();itemlist!=list.end();++itemlist) {
+ auto list= selection->items();
+ for (auto itemlist=list.begin();itemlist!=list.end();++itemlist) {
SPItem *item = *itemlist;
sp_selection_remove_livepatheffect_impl(item);
@@ -1345,7 +1358,7 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone)
return;
}
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
bool no_more = false; // Set to true, if no more layers above
SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer());
@@ -1389,7 +1402,7 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone)
return;
}
- const std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
bool no_more = false; // Set to true, if no more layers below
SPObject *next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer());
@@ -1432,7 +1445,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone)
return;
}
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
if (moveto) {
selection->clear();
@@ -1452,7 +1465,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone)
}
static bool
-selection_contains_original(SPItem *item, Inkscape::Selection *selection)
+object_set_contains_original(SPItem *item, ObjectSet *set)
{
bool contains_original = false;
@@ -1463,7 +1476,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection)
{
item_use = use->get_original();
use = dynamic_cast<SPUse *>(item_use);
- contains_original |= selection->includes(item_use);
+ contains_original |= set->includes(item_use);
if (item_use == item_use_first)
break;
}
@@ -1472,7 +1485,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection)
// data is part of the selection
SPTRef *tref = dynamic_cast<SPTRef *>(item);
if (!contains_original && tref) {
- contains_original = selection->includes(tref->getObjectReferredTo());
+ contains_original = set->includes(tref->getObjectReferredTo());
}
return contains_original;
@@ -1480,14 +1493,14 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection)
static bool
-selection_contains_both_clone_and_original(Inkscape::Selection *selection)
+object_set_contains_both_clone_and_original(ObjectSet *set)
{
bool clone_with_original = false;
- std::vector<SPItem*> items = selection->itemList();
- for (std::vector<SPItem*>::const_iterator l=items.begin();l!=items.end() ;++l) {
+ auto items = set->items();
+ for (auto l=items.begin();l!=items.end() ;++l) {
SPItem *item = *l;
if (item) {
- clone_with_original |= selection_contains_original(item, selection);
+ clone_with_original |= object_set_contains_original(item, set);
if (clone_with_original)
break;
}
@@ -1501,21 +1514,22 @@ value of set_i2d==false is only used by seltrans when it's dragging objects live
that case, items are already in the new position, but the repr is in the old, and this function
then simply updates the repr from item->transform.
*/
-void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center)
+void sp_object_set_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate,
+ bool adjust_transf_center)
{
- if (selection->isEmpty())
+ if (set->isEmpty())
return;
// For each perspective with a box in selection, check whether all boxes are selected and
// unlink all non-selected boxes.
Persp3D *persp;
Persp3D *transf_persp;
- std::list<Persp3D *> plist = selection->perspList();
+ std::list<Persp3D *> plist = set->perspList();
for (std::list<Persp3D *>::iterator i = plist.begin(); i != plist.end(); ++i) {
persp = (Persp3D *) (*i);
- if (!persp3d_has_all_boxes_in_selection (persp, selection)) {
- std::list<SPBox3D *> selboxes = selection->box3DList(persp);
+ if (!persp3d_has_all_boxes_in_selection (persp, set)) {
+ std::list<SPBox3D *> selboxes = set->box3DList(persp);
// create a new perspective as a copy of the current one and link the selected boxes to it
transf_persp = persp3d_create_xml_element (persp->document, persp->perspective_impl);
@@ -1528,14 +1542,14 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons
persp3d_apply_affine_transformation(transf_persp, affine);
}
- std::vector<SPItem*> items = selection->itemList();
- for (std::vector<SPItem*>::const_iterator l=items.begin();l!=items.end() ;++l) {
+ auto items = set->items();
+ for (auto l=items.begin();l!=items.end() ;++l) {
SPItem *item = *l;
if( dynamic_cast<SPRoot *>(item) ) {
// An SVG element cannot have a transform. We could change 'x' and 'y' in response
// to a translation... but leave that for another day.
- selection->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG."));
+ set->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG."));
break;
}
@@ -1549,17 +1563,17 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons
#endif
// we're moving both a clone and its original or any ancestor in clone chain?
- bool transform_clone_with_original = selection_contains_original(item, selection);
+ bool transform_clone_with_original = object_set_contains_original(item, set);
// ...both a text-on-path and its path?
bool transform_textpath_with_path = ((dynamic_cast<SPText *>(item) && item->firstChild() && dynamic_cast<SPTextPath *>(item->firstChild()))
- && selection->includes( sp_textpath_get_path_item(dynamic_cast<SPTextPath *>(item->firstChild())) ));
+ && set->includes( sp_textpath_get_path_item(dynamic_cast<SPTextPath *>(item->firstChild())) ));
// ...both a flowtext and its frame?
- bool transform_flowtext_with_frame = (dynamic_cast<SPFlowtext *>(item) && selection->includes( dynamic_cast<SPFlowtext *>(item)->get_frame(NULL))); // (only the first frame is checked so far)
+ bool transform_flowtext_with_frame = (dynamic_cast<SPFlowtext *>(item) && set->includes( dynamic_cast<SPFlowtext *>(item)->get_frame(NULL))); // (only the first frame is checked so far)
// ...both an offset and its source?
- bool transform_offset_with_source = (dynamic_cast<SPOffset *>(item) && dynamic_cast<SPOffset *>(item)->sourceHref) && selection->includes( sp_offset_get_source(dynamic_cast<SPOffset *>(item)) );
+ bool transform_offset_with_source = (dynamic_cast<SPOffset *>(item) && dynamic_cast<SPOffset *>(item)->sourceHref) && set->includes( sp_offset_get_source(dynamic_cast<SPOffset *>(item)) );
// If we're moving a connector, we want to detach it
// from shapes that aren't part of the selection, but
@@ -1570,7 +1584,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons
SPItem *attItem[2] = {0, 0};
path->connEndPair.getAttachedItems(attItem);
for (int n = 0; n < 2; ++n) {
- if (!selection->includes(attItem[n])) {
+ if (!set->includes(attItem[n])) {
sp_conn_end_detach(item, n);
}
}
@@ -1598,10 +1612,10 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons
} else if (transform_flowtext_with_frame) {
// apply the inverse of the region's transform to the <use> so that the flow remains
// the same (even though the output itself gets transformed)
- for ( SPObject *region = item->firstChild() ; region ; region = region->getNext() ) {
- if (dynamic_cast<SPFlowregion *>(region) || dynamic_cast<SPFlowregionExclude *>(region)) {
- for ( SPObject *item = region->firstChild() ; item ; item = item->getNext() ) {
- SPUse *use = dynamic_cast<SPUse *>(item);
+ for (auto& region: item->children) {
+ if (dynamic_cast<SPFlowregion *>(&region) || dynamic_cast<SPFlowregionExclude *>(&region)) {
+ for (auto& itm: region.children) {
+ SPUse *use = dynamic_cast<SPUse *>(&itm);
if ( use ) {
use->doWriteTransform(use->getRepr(), use->transform.inverse(), NULL, compensate);
}
@@ -1692,15 +1706,15 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons
}
}
-void sp_selection_remove_transform(SPDesktop *desktop)
+void sp_object_set_remove_transform(SPDesktop *desktop)
{
if (desktop == NULL)
return;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<Inkscape::XML::Node*> items = selection->reprList();
- for (std::vector<Inkscape::XML::Node*>::const_iterator l=items.begin();l!=items.end() ;++l) {
+ auto items = selection->xmlNodes();
+ for (auto l=items.begin();l!=items.end() ;++l) {
(*l)->setAttribute("transform", NULL, false);
}
@@ -1709,14 +1723,14 @@ void sp_selection_remove_transform(SPDesktop *desktop)
}
void
-sp_selection_scale_absolute(Inkscape::Selection *selection,
- double const x0, double const x1,
- double const y0, double const y1)
+sp_object_set_scale_absolute(ObjectSet *set,
+ double x0, double x1,
+ double y0, double y1)
{
- if (selection->isEmpty())
+ if (set->isEmpty())
return;
- Geom::OptRect bbox = selection->visualBounds();
+ Geom::OptRect bbox = set->visualBounds();
if ( !bbox ) {
return;
}
@@ -1729,16 +1743,16 @@ sp_selection_scale_absolute(Inkscape::Selection *selection,
Geom::Translate const o2n(x0, y0);
Geom::Affine const final( p2o * scale * o2n );
- sp_selection_apply_affine(selection, final);
+ sp_object_set_apply_affine(set, final);
}
-void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale)
+void sp_object_set_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale)
{
- if (selection->isEmpty())
+ if (set->isEmpty())
return;
- Geom::OptRect bbox = selection->visualBounds();
+ Geom::OptRect bbox = set->visualBounds();
if ( !bbox ) {
return;
@@ -1754,21 +1768,21 @@ void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point con
Geom::Translate const n2d(-align);
Geom::Translate const d2n(align);
Geom::Affine const final( n2d * scale * d2n );
- sp_selection_apply_affine(selection, final);
+ sp_object_set_apply_affine(set, final);
}
void
-sp_selection_rotate_relative(Inkscape::Selection *selection, Geom::Point const &center, gdouble const angle_degrees)
+sp_object_set_rotate_relative(ObjectSet *set, Geom::Point const &center, double angle_degrees)
{
Geom::Translate const d2n(center);
Geom::Translate const n2d(-center);
Geom::Rotate const rotate(Geom::Rotate::from_degrees(angle_degrees));
Geom::Affine const final( Geom::Affine(n2d) * rotate * d2n );
- sp_selection_apply_affine(selection, final);
+ sp_object_set_apply_affine(set, final);
}
void
-sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy)
+sp_object_set_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy)
{
Geom::Translate const d2n(align);
Geom::Translate const n2d(-align);
@@ -1776,17 +1790,17 @@ sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &al
dx, 1,
0, 0);
Geom::Affine const final( n2d * skew * d2n );
- sp_selection_apply_affine(selection, final);
+ sp_object_set_apply_affine(set, final);
}
-void sp_selection_move_relative(Inkscape::Selection *selection, Geom::Point const &move, bool compensate)
+void sp_object_set_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate)
{
- sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(move)), true, compensate);
+ sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate);
}
-void sp_selection_move_relative(Inkscape::Selection *selection, double dx, double dy)
+void sp_object_set_move_relative(ObjectSet *set, double dx, double dy)
{
- sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(dx, dy)));
+ sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy)));
}
/**
@@ -1799,9 +1813,9 @@ void sp_selection_rotate_90(SPDesktop *desktop, bool ccw)
if (selection->isEmpty())
return;
- std::vector<SPItem*> items = selection->itemList();
+ auto items = selection->items();
Geom::Rotate const rot_90(Geom::Point(0, ccw ? 1 : -1)); // pos. or neg. rotation, depending on the value of ccw
- for (std::vector<SPItem*>::const_iterator l=items.begin();l!=items.end() ;++l) {
+ for (auto l=items.begin();l!=items.end() ;++l) {
SPItem *item = *l;
if (item) {
sp_item_rotate_rel(item, rot_90);
@@ -1826,7 +1840,7 @@ sp_selection_rotate(Inkscape::Selection *selection, gdouble const angle_degrees)
return;
}
- sp_selection_rotate_relative(selection, *center, angle_degrees);
+ sp_object_set_rotate_relative(selection, *center, angle_degrees);
DocumentUndo::maybeDone(selection->desktop()->getDocument(),
( ( angle_degrees > 0 )
@@ -1863,7 +1877,7 @@ void sp_select_same_fill_stroke_style(SPDesktop *desktop, gboolean fill, gboolea
std::vector<SPItem*> all_matches;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> items = selection->itemList();
+ auto items = selection->items();
std::vector<SPItem*> tmp;
for (std::vector<SPItem*>::const_iterator iter=all_list.begin();iter!=all_list.end();++iter) {
@@ -1873,7 +1887,7 @@ void sp_select_same_fill_stroke_style(SPDesktop *desktop, gboolean fill, gboolea
}
all_list=tmp;
- for (std::vector<SPItem*>::const_iterator sel_iter=items.begin();sel_iter!=items.end();++sel_iter) {
+ for (auto sel_iter=items.begin();sel_iter!=items.end();++sel_iter) {
SPItem *sel = *sel_iter;
std::vector<SPItem*> matches = all_list;
if (fill && stroke && style) {
@@ -1920,8 +1934,8 @@ void sp_select_same_object_type(SPDesktop *desktop)
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> items=selection->itemList();
- for (std::vector<SPItem*>::const_iterator sel_iter=items.begin();sel_iter!=items.end();++sel_iter) {
+ auto items= selection->items();
+ for (auto sel_iter=items.begin();sel_iter!=items.end();++sel_iter) {
SPItem *sel = *sel_iter;
if (sel) {
matches = sp_get_same_object_type(sel, matches);
@@ -2175,7 +2189,7 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle)
gdouble const zangle = 180 * atan2(zmove, r) / M_PI;
- sp_selection_rotate_relative(selection, *center, zangle);
+ sp_object_set_rotate_relative(selection, *center, zangle);
DocumentUndo::maybeDone(selection->desktop()->getDocument(),
( (angle > 0)
@@ -2205,7 +2219,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow)
}
double const times = 1.0 + grow / max_len;
- sp_selection_scale_relative(selection, center, Geom::Scale(times, times));
+ sp_object_set_scale_relative(selection, center, Geom::Scale(times, times));
DocumentUndo::maybeDone(selection->desktop()->getDocument(),
( (grow > 0)
@@ -2218,8 +2232,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow)
void
sp_selection_scale_screen(Inkscape::Selection *selection, gdouble grow_pixels)
{
- sp_selection_scale(selection,
- grow_pixels / selection->desktop()->current_zoom());
+ sp_selection_scale(selection, grow_pixels / selection->desktop()->current_zoom());
}
void
@@ -2235,7 +2248,7 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times)
}
Geom::Point const center(sel_bbox->midpoint());
- sp_selection_scale_relative(selection, center, Geom::Scale(times, times));
+ sp_object_set_scale_relative(selection, center, Geom::Scale(times, times));
DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_CONTEXT_SELECT,
_("Scale by whole factor"));
}
@@ -2247,7 +2260,7 @@ sp_selection_move(Inkscape::Selection *selection, gdouble dx, gdouble dy)
return;
}
- sp_selection_move_relative(selection, dx, dy);
+ sp_object_set_move_relative(selection, dx, dy);
SPDocument *doc = selection->layers()->getDocument();
if (dx == 0) {
@@ -2273,7 +2286,7 @@ sp_selection_move_screen(Inkscape::Selection *selection, gdouble dx, gdouble dy)
gdouble const zoom = selection->desktop()->current_zoom();
gdouble const zdx = dx / zoom;
gdouble const zdy = dy / zoom;
- sp_selection_move_relative(selection, zdx, zdy);
+ sp_object_set_move_relative(selection, zdx, zdy);
SPDocument *doc = selection->layers()->getDocument();
if (dx == 0) {
@@ -2305,10 +2318,10 @@ typedef struct ListReverse {
typedef GSList *Iterator;
static Iterator children(SPObject *o) {
- return make_list(o->firstChild(), NULL);
+ return make_list(o, NULL);
}
static Iterator siblings_after(SPObject *o) {
- return make_list(o->parent->firstChild(), o);
+ return make_list(o->parent, o);
}
static void dispose(Iterator i) {
g_slist_free(i);
@@ -2322,13 +2335,12 @@ typedef struct ListReverse {
private:
static GSList *make_list(SPObject *object, SPObject *limit) {
GSList *list = NULL;
- while ( object != limit ) {
- if (!object) { // TODO check if this happens in practice
- g_warning("Unexpected list overrun");
+ for (auto &child: object->children) {
+ if (&child == limit) {
break;
}
- list = g_slist_prepend(list, object);
- object = object->getNext();
+ list = g_slist_prepend(list, &child);
+
}
return list;
}
@@ -2433,7 +2445,8 @@ sp_selection_item_next(SPDesktop *desktop)
root = desktop->currentRoot();
}
- SPItem *item=next_item_from_list<Forward>(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
+ std::vector<SPItem *> vec(selection->items().begin(), selection->items().end());
+ SPItem *item=next_item_from_list<Forward>(desktop, vec, root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
if (item) {
selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer);
@@ -2463,7 +2476,8 @@ sp_selection_item_prev(SPDesktop *desktop)
root = desktop->currentRoot();
}
- SPItem *item=next_item_from_list<ListReverse>(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
+ std::vector<SPItem *> vec(selection->items().begin(), selection->items().end());
+ SPItem *item=next_item_from_list<ListReverse>(desktop, vec, root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive);
if (item) {
selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer);
@@ -2580,7 +2594,7 @@ void sp_selection_clone(SPDesktop *desktop)
return;
}
- std::vector<Inkscape::XML::Node*> reprs (selection->reprList());
+ std::vector<Inkscape::XML::Node*> reprs(selection->xmlNodes().begin(), selection->xmlNodes().end());
selection->clear();
@@ -2639,8 +2653,8 @@ sp_selection_relink(SPDesktop *desktop)
// Get a copy of current selection.
bool relinked = false;
- std::vector<SPItem*> items=selection->itemList();
- for (std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= selection->items();
+ for (auto i=items.begin();i!=items.end();++i){
SPItem *item = *i;
if (dynamic_cast<SPUse *>(item)) {
@@ -2677,8 +2691,9 @@ sp_selection_unlink(SPDesktop *desktop)
// Get a copy of current selection.
std::vector<SPItem*> new_select;
bool unlinked = false;
- std::vector<SPItem*> items=selection->itemList();
- for (std::vector<SPItem*>::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){
+ std::vector<SPItem *> items(selection->items().begin(), selection->items().end());
+
+ for (auto i=items.rbegin();i!=items.rend();++i){
SPItem *item = *i;
if (dynamic_cast<SPText *>(item)) {
@@ -2744,8 +2759,8 @@ sp_select_clone_original(SPDesktop *desktop)
// Check if other than two objects are selected
- std::vector<SPItem*> items=selection->itemList();
- if (items.size() != 1 || !item) {
+ auto items= selection->items();
+ if (boost::distance(items) != 1 || !item) {
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, error);
return;
}
@@ -2842,8 +2857,8 @@ void sp_selection_clone_original_path_lpe(SPDesktop *desktop)
Inkscape::SVGOStringStream os;
SPObject * firstItem = NULL;
- std::vector<SPItem*> items=selection->itemList();
- for (std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= selection->items();
+ for (auto i=items.begin();i!=items.end();++i){
if (SP_IS_SHAPE(*i) || SP_IS_TEXT(*i)) {
if (firstItem) {
os << "|";
@@ -2927,12 +2942,12 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply)
Geom::Point center( *c - corner ); // As defined by rotation center
center[Geom::Y] = -center[Geom::Y];
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
//items = g_slist_sort(items, (GCompareFunc) sp_object_compare_position); // Why needed?
// bottommost object, after sorting
- SPObject *parent = items[0]->parent;
+ SPObject *parent = items.front()->parent;
Geom::Affine parent_transform;
{
@@ -3001,7 +3016,7 @@ void sp_selection_to_guides(SPDesktop *desktop)
SPDocument *doc = desktop->getDocument();
Inkscape::Selection *selection = desktop->getSelection();
// we need to copy the list because it gets reset when objects are deleted
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
if (items.empty()) {
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to convert to guides."));
@@ -3067,7 +3082,7 @@ void sp_selection_symbol(SPDesktop *desktop, bool /*apply*/ )
doc->ensureUpToDate();
- std::vector<SPObject*> items(selection->list());
+ std::vector<SPObject*> items(selection->objects().begin(), selection->objects().end());
sort(items.begin(),items.end(),sp_object_compare_position_bool);
// Keep track of parent, this is where <use> will be inserted.
@@ -3279,7 +3294,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply)
move_p[Geom::Y] = -move_p[Geom::Y];
Geom::Affine move = Geom::Affine(Geom::Translate(move_p));
- std::vector<SPItem*> items (selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
sort(items.begin(),items.end(),sp_object_compare_position_bool);
@@ -3384,7 +3399,7 @@ void sp_selection_untile(SPDesktop *desktop)
bool did = false;
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
for (std::vector<SPItem*>::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){
SPItem *item = *i;
@@ -3407,9 +3422,9 @@ void sp_selection_untile(SPDesktop *desktop)
Geom::Affine pat_transform = basePat->getTransform();
pat_transform *= item->transform;
- for (SPObject *child = pattern->firstChild() ; child != NULL; child = child->next ) {
- if (dynamic_cast<SPItem *>(child)) {
- Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc);
+ for (auto& child: pattern->children) {
+ if (dynamic_cast<SPItem *>(&child)) {
+ Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc);
SPItem *i = dynamic_cast<SPItem *>(desktop->currentLayer()->appendChildRepr(copy));
// FIXME: relink clones to the new canvas objects
@@ -3443,18 +3458,18 @@ void sp_selection_untile(SPDesktop *desktop)
}
}
-void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi)
+void sp_object_set_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi)
{
- if (selection->isEmpty()) {
+ if (set->isEmpty()) {
return;
}
- std::vector<Inkscape::XML::Node*> const reprlst = selection->reprList();
+ auto reprlst = set->xmlNodes();
bool filename_search = TRUE;
bool xdpi_search = TRUE;
bool ydpi_search = TRUE;
- for (std::vector<Inkscape::XML::Node*>::const_iterator i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){
+ for (auto i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){
gchar const *dpi_string;
Inkscape::XML::Node *repr = *i;
@@ -3541,7 +3556,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop)
}
// List of the items to show; all others will be hidden
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
// Sort items so that the topmost comes last
sort(items.begin(),items.end(),sp_item_repr_compare_position_bool);
@@ -3594,7 +3609,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop)
float hint_xdpi = 0, hint_ydpi = 0;
Glib::ustring hint_filename;
// take resolution hint from the selected objects
- sp_selection_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi);
+ sp_object_set_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi);
if (hint_xdpi != 0) {
res = hint_xdpi;
} else {
@@ -3742,7 +3757,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop)
return;
}
- std::vector<Inkscape::XML::Node*> p(selection->reprList());
+ std::vector<Inkscape::XML::Node*> p(selection->xmlNodes().begin(), selection->xmlNodes().end());
sort(p.begin(),p.end(),sp_repr_compare_position_bool);
@@ -3852,14 +3867,14 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_
if ( apply_to_layer && is_empty) {
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>object(s)</b> to create clippath or mask from."));
return;
- } else if (!apply_to_layer && ( is_empty || selection->itemList().size()==1 )) {
+ } else if (!apply_to_layer && ( is_empty || boost::distance(selection->items())==1 )) {
desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select mask object and <b>object(s)</b> to apply clippath or mask to."));
return;
}
// FIXME: temporary patch to prevent crash!
// Remove this when bboxes are fixed to not blow up on an item clipped/masked with its own clone
- bool clone_with_original = selection_contains_both_clone_and_original(selection);
+ bool clone_with_original = object_set_contains_both_clone_and_original(selection);
if (clone_with_original) {
return; // in this version, you cannot clip/mask an object with its own clone
}
@@ -3867,7 +3882,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_
doc->ensureUpToDate();
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
sort(items.begin(),items.end(),sp_object_compare_position_bool);
@@ -3919,18 +3934,13 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_
if (grouping == PREFS_MASKOBJECT_GROUPING_ALL) {
// group all those objects into one group
// and apply mask to that
- Inkscape::XML::Node *group = xml_doc->createElement("svg:g");
+ ObjectSet* set = new ObjectSet(selection->desktop());
+ set->add(apply_to_items.begin(), apply_to_items.end());
- // make a note we should ungroup this when unsetting mask
- group->setAttribute("inkscape:groupmode", "maskhelper");
-
- std::vector<Inkscape::XML::Node*> reprs_to_group;
- for (std::vector<SPItem*>::const_iterator i = apply_to_items.begin(); i != apply_to_items.end(); ++i) {
- reprs_to_group.push_back(static_cast<SPObject*>(*i)->getRepr());
- }
items_to_select.clear();
- sp_selection_group_impl(reprs_to_group, group, xml_doc, doc);
+ Inkscape::XML::Node *group = sp_object_set_group(set);
+ group->setAttribute("inkscape:groupmode", "maskhelper");
// apply clip/mask only to newly created group
apply_to_items.clear();
@@ -3938,6 +3948,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_
items_to_select.push_back((SPItem*)(doc->getObjectByRepr(group)));
+ delete set;
Inkscape::GC::release(group);
}
if (grouping == PREFS_MASKOBJECT_GROUPING_SEPARATE) {
@@ -4029,7 +4040,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
gchar const *attributeName = apply_clip_path ? "clip-path" : "mask";
std::map<SPObject*,SPItem*> referenced_objects;
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
selection->clear();
GSList *items_to_ungroup = NULL;
@@ -4075,9 +4086,9 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
for ( std::map<SPObject*,SPItem*>::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) {
SPObject *obj = (*it).first; // Group containing the clipped paths or masks
GSList *items_to_move = NULL;
- for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) {
+ for (auto& child: obj->children) {
// Collect all clipped paths and masks within a single group
- Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc);
+ Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc);
if(copy->attribute("inkscape:original-d") && copy->attribute("inkscape:path-effect"))
{
copy->setAttribute("d", copy->attribute("inkscape:original-d"));
@@ -4236,11 +4247,11 @@ static void itemtree_map(void (*f)(SPItem *, SPDesktop *), SPObject *root, SPDes
f(item, desktop);
}
}
- for ( SPObject::SiblingIterator iter = root->firstChild() ; iter ; ++iter ) {
+ for (auto& child: root->children) {
//don't recurse into locked layers
- SPItem *item = dynamic_cast<SPItem *>(&*iter);
+ SPItem *item = dynamic_cast<SPItem *>(&child);
if (!(item && desktop->isLayer(item) && item->isLocked())) {
- itemtree_map(f, iter, desktop);
+ itemtree_map(f, &child, desktop);
}
}
}
diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h
index 82b91c617..ca9062320 100644
--- a/src/selection-chemistry.h
+++ b/src/selection-chemistry.h
@@ -26,6 +26,7 @@ class SPDesktop;
namespace Inkscape {
class Selection;
+class ObjectSet;
namespace LivePathEffect {
class PathParam;
@@ -78,6 +79,11 @@ void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop);
void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop);
void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_object_set_raise(Inkscape::ObjectSet *set);
+void sp_object_set_raise_to_top(Inkscape::ObjectSet *set);
+void sp_object_set_lower(Inkscape::ObjectSet *set);
+void sp_object_set_lower_to_bottom(Inkscape::ObjectSet *set);
+
void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop);
void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop);
void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop);
@@ -103,14 +109,15 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false )
void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false );
void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false );
-void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true);
-void sp_selection_remove_transform (SPDesktop *desktop);
-void sp_selection_scale_absolute (Inkscape::Selection *selection, double x0, double x1, double y0, double y1);
-void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale);
-void sp_selection_rotate_relative (Inkscape::Selection *selection, Geom::Point const &center, double angle);
-void sp_selection_skew_relative (Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy);
-void sp_selection_move_relative (Inkscape::Selection *selection, Geom::Point const &move, bool compensate = true);
-void sp_selection_move_relative (Inkscape::Selection *selection, double dx, double dy);
+void sp_object_set_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true,
+ bool compensate = true, bool adjust_transf_center = true);
+void sp_object_set_remove_transform(SPDesktop *desktop);
+void sp_object_set_scale_absolute(Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1);
+void sp_object_set_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale);
+void sp_object_set_rotate_relative(Inkscape::ObjectSet *set, Geom::Point const &center, double angle);
+void sp_object_set_skew_relative(Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy);
+void sp_object_set_move_relative(Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true);
+void sp_object_set_move_relative(Inkscape::ObjectSet *set, double dx, double dy);
void sp_selection_rotate_90 (SPDesktop *desktop, bool ccw);
void sp_selection_rotate (Inkscape::Selection *selection, double angle);
@@ -151,7 +158,7 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item);
void sp_undo (SPDesktop *desktop, SPDocument *doc);
void sp_redo (SPDesktop *desktop, SPDocument *doc);
-void sp_selection_get_export_hints (Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi);
+void sp_object_set_get_export_hints(Inkscape::ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi);
void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, float *xdpi, float *ydpi);
void sp_selection_create_bitmap_copy (SPDesktop *desktop);
diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp
index 584510756..43fe1311d 100644
--- a/src/selection-describer.cpp
+++ b/src/selection-describer.cpp
@@ -113,7 +113,7 @@ void SelectionDescriber::_selectionModified(Inkscape::Selection *selection, guin
}
void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *selection) {
- std::vector<SPItem*> const items = selection->itemList();
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
if (items.empty()) { // no items
_context.set(Inkscape::NORMAL_MESSAGE, _when_nothing);
diff --git a/src/selection.cpp b/src/selection.cpp
index 05ab68550..bdd4f0dc7 100644
--- a/src/selection.cpp
+++ b/src/selection.cpp
@@ -7,8 +7,10 @@
* bulia byak <buliabyak@users.sf.net>
* Andrius R. <knutux@gmail.com>
* Abhishek Sharma
+ * Adrian Boguszewski
*
- * Copyright (C) 2006 Andrius R.
+ * Copyright (C) 2016 Adrian Boguszewski
+ * Copyright (C) 2006 Andrius R.
* Copyright (C) 2004-2005 MenTaLguY
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -17,32 +19,24 @@
*/
#ifdef HAVE_CONFIG_H
-#include <config.h>
#endif
#include "inkscape.h"
-#include "document.h"
#include "xml/repr.h"
#include "preferences.h"
#include "sp-shape.h"
#include "sp-path.h"
-#include "sp-item-group.h"
-#include "box3d.h"
-#include "persp3d.h"
+#include "desktop.h"
+#include "document.h"
#define SP_SELECTION_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE + 1)
namespace Inkscape {
-Selection::Selection(LayerModel *layers, SPDesktop *desktop) :
- _objs(std::list<SPObject*>()),
- _objs_vector(std::vector<SPObject*>()),
- _objs_set(std::set<SPObject*>()),
- _reprs(std::vector<XML::Node*>()),
- _items(std::vector<SPItem*>()),
+Selection::Selection(LayerModel *layers, SPDesktop *desktop):
+ ObjectSet(desktop),
_layers(layers),
- _desktop(desktop),
_selection_context(NULL),
_flags(0),
_idle(0)
@@ -50,7 +44,6 @@ Selection::Selection(LayerModel *layers, SPDesktop *desktop) :
}
Selection::~Selection() {
- _clear();
_layers = NULL;
if (_idle) {
g_source_remove(_idle);
@@ -70,8 +63,7 @@ void Selection::_schedule_modified(SPObject */*obj*/, guint flags) {
this->_flags |= flags;
}
-gboolean
-Selection::_emit_modified(Selection *selection)
+gboolean Selection::_emit_modified(Selection *selection)
{
/* force new handler to be created if requested before we return */
selection->_idle = 0;
@@ -104,8 +96,7 @@ void Selection::_emitChanged(bool persist_selection_context/* = false */) {
_changed_signal.emit(this);
}
-void
-Selection::_releaseContext(SPObject *obj)
+void Selection::_releaseContext(SPObject *obj)
{
if (NULL == _selection_context || _selection_context != obj)
return;
@@ -116,354 +107,38 @@ Selection::_releaseContext(SPObject *obj)
_selection_context = NULL;
}
-void Selection::_invalidateCachedLists() {
- _items.clear();
- _reprs.clear();
- _objs_vector.clear();
-}
-
-void Selection::_clear() {
- _invalidateCachedLists();
- while (!_objs.empty()) {
- SPObject *obj=_objs.front();
- _remove(obj);
- }
-}
-
SPObject *Selection::activeContext() {
if (NULL != _selection_context)
return _selection_context;
return _layers->currentLayer();
- }
-
-bool Selection::includes(SPObject *obj) const {
- if (obj == NULL)
- return FALSE;
-
- g_return_val_if_fail(SP_IS_OBJECT(obj), FALSE);
-
- return ( _objs_set.find(obj)!=_objs_set.end() );
-}
-
-void Selection::add(SPObject *obj, bool persist_selection_context/* = false */) {
- g_return_if_fail(obj != NULL);
- g_return_if_fail(SP_IS_OBJECT(obj));
- g_return_if_fail(obj->document != NULL);
-
- if (includes(obj)) {
- return;
- }
-
- _invalidateCachedLists();
- _add(obj);
- _emitChanged(persist_selection_context);
-}
-
-void Selection::add_3D_boxes_recursively(SPObject *obj) {
- std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
-
- for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
- SPBox3D *box = *i;
- _3dboxes.push_back(box);
- }
-}
-
-void Selection::_add(SPObject *obj) {
- // unselect any of the item's ancestors and descendants which may be selected
- // (to prevent double-selection)
- _removeObjectDescendants(obj);
- _removeObjectAncestors(obj);
- g_return_if_fail(SP_IS_OBJECT(obj));
-
- _objs.push_front(obj);
- _objs_set.insert(obj);
-
- add_3D_boxes_recursively(obj);
-
- _release_connections[obj] = obj->connectRelease(sigc::mem_fun(*this, (void (Selection::*)(SPObject *))&Selection::remove));
- _modified_connections[obj] = obj->connectModified(sigc::mem_fun(*this, &Selection::_schedule_modified));
}
void Selection::set(SPObject *object, bool persist_selection_context) {
- _clear();
- add(object, persist_selection_context);
-}
-
-void Selection::toggle(SPObject *obj) {
- if (includes (obj)) {
- remove (obj);
- } else {
- add(obj);
- }
-}
-
-void Selection::remove(SPObject *obj) {
- g_return_if_fail(obj != NULL);
- g_return_if_fail(SP_IS_OBJECT(obj));
- g_return_if_fail(includes(obj));
-
- _invalidateCachedLists();
- _remove(obj);
- _emitChanged();
-}
-
-void Selection::remove_3D_boxes_recursively(SPObject *obj) {
- std::list<SPBox3D *> boxes = box3d_extract_boxes(obj);
-
- for (std::list<SPBox3D *>::iterator i = boxes.begin(); i != boxes.end(); ++i) {
- SPBox3D *box = *i;
- std::list<SPBox3D *>::iterator b = std::find(_3dboxes.begin(), _3dboxes.end(), box);
- if (b == _3dboxes.end()) {
- g_print ("Warning! Trying to remove unselected box from selection.\n");
- return;
- }
- _3dboxes.erase(b);
- }
-}
-
-void Selection::_remove(SPObject *obj) {
- _modified_connections[obj].disconnect();
- _modified_connections.erase(obj);
-
- _release_connections[obj].disconnect();
- _release_connections.erase(obj);
-
- remove_3D_boxes_recursively(obj);
-
- _objs.remove(obj);
- _objs_set.erase(obj);
-}
-
-void Selection::setList(std::vector<SPItem*> const &list) {
- // Clear and add, or just clear with emit.
- if (!list.empty()) {
- _clear();
- addList(list);
- } else clear();
-}
-
-void Selection::addList(std::vector<SPItem*> const &list) {
-
- if (list.empty())
- return;
-
- _invalidateCachedLists();
-
- for ( std::vector<SPItem*>::const_iterator iter=list.begin();iter!=list.end(); ++iter) {
- SPObject *obj = *iter;
- if (includes(obj)) continue;
- _add (obj);
- }
-
- _emitChanged();
+ ObjectSet::set(object);
+ _emitChanged(persist_selection_context);
}
void Selection::setReprList(std::vector<XML::Node*> const &list) {
- _clear();
+ clear();
- for ( std::vector<XML::Node*>::const_reverse_iterator iter=list.rbegin();iter!=list.rend(); ++iter) {
- SPObject *obj=_objectForXMLNode(*iter);
+ for (std::vector<XML::Node*>::const_reverse_iterator iter = list.rbegin(); iter != list.rend(); ++iter) {
+ SPObject *obj = _objectForXMLNode(*iter);
if (obj) {
- _add(obj);
+ add(obj);
}
}
_emitChanged();
}
-void Selection::clear() {
- _clear();
- _emitChanged();
-}
-
-std::vector<SPObject*> const &Selection::list() {
- if(!_objs_vector.empty())
- return _objs_vector;
-
- for ( std::list<SPObject*>::const_iterator iter=_objs.begin();iter!=_objs.end(); ++iter) {
- _objs_vector.push_back(*iter);
- }
- return _objs_vector;
-
-}
-
-std::vector<SPItem*> const &Selection::itemList() {
- if (!_items.empty()) {
- return _items;
- }
-
- for ( std::list<SPObject*>::const_iterator iter=_objs.begin();iter!=_objs.end(); ++iter) {
- SPObject *obj=*iter;
- if (SP_IS_ITEM(obj)) {
- _items.push_back(SP_ITEM(obj));
- }
- }
- return _items;
-}
-
-std::vector<XML::Node*> const &Selection::reprList() {
- if (!_reprs.empty()) { return _reprs; }
- std::vector<SPItem*> list = itemList();
- for ( std::vector<SPItem*>::const_iterator iter=list.begin();iter!=list.end(); ++iter) {
- SPObject *obj = *iter;
- _reprs.push_back(obj->getRepr());
- }
- return _reprs;
-}
-
-std::list<Persp3D *> const Selection::perspList() {
- std::list<Persp3D *> pl;
- for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
- Persp3D *persp = box3d_get_perspective(*i);
- if (std::find(pl.begin(), pl.end(), persp) == pl.end())
- pl.push_back(persp);
- }
- return pl;
-}
-
-std::list<SPBox3D *> const Selection::box3DList(Persp3D *persp) {
- std::list<SPBox3D *> boxes;
- if (persp) {
- for (std::list<SPBox3D *>::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) {
- SPBox3D *box = *i;
- if (persp == box3d_get_perspective(box)) {
- boxes.push_back(box);
- }
- }
- } else {
- boxes = _3dboxes;
- }
- return boxes;
-}
-
-SPObject *Selection::single() {
- if ( _objs.size() == 1 ) {
- return _objs.front();
- } else {
- return NULL;
- }
-}
-
-SPItem *Selection::singleItem() {
- std::vector<SPItem*> const items=itemList();
- if ( items.size()==1) {
- return items[0];
- } else {
- return NULL;
- }
-}
-
-SPItem *Selection::smallestItem(Selection::CompareSize compare) {
- return _sizeistItem(true, compare);
-}
-
-SPItem *Selection::largestItem(Selection::CompareSize compare) {
- return _sizeistItem(false, compare);
-}
-
-SPItem *Selection::_sizeistItem(bool sml, Selection::CompareSize compare) {
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
- gdouble max = sml ? 1e18 : 0;
- SPItem *ist = NULL;
-
- for ( std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end(); ++i) {
- Geom::OptRect obox = SP_ITEM(*i)->desktopPreferredBounds();
- if (!obox || obox.empty()) continue;
- Geom::Rect bbox = *obox;
-
- gdouble size = compare == 2 ? bbox.area() :
- (compare == 1 ? bbox.width() : bbox.height());
- size = sml ? size : size * -1;
- if (size < max) {
- max = size;
- ist = SP_ITEM(*i);
- }
- }
- return ist;
-}
-
-Inkscape::XML::Node *Selection::singleRepr() {
- SPObject *obj=single();
- return obj ? obj->getRepr() : NULL;
-}
-
-Geom::OptRect Selection::bounds(SPItem::BBoxType type) const
-{
- return (type == SPItem::GEOMETRIC_BBOX) ?
- geometricBounds() : visualBounds();
-}
-
-Geom::OptRect Selection::geometricBounds() const
-{
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
-
- Geom::OptRect bbox;
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
- bbox.unionWith(SP_ITEM(*iter)->desktopGeometricBounds());
- }
- return bbox;
-}
-
-Geom::OptRect Selection::visualBounds() const
-{
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
-
- Geom::OptRect bbox;
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
- bbox.unionWith(SP_ITEM(*iter)->desktopVisualBounds());
- }
- return bbox;
-}
-
-Geom::OptRect Selection::preferredBounds() const
-{
- if (Inkscape::Preferences::get()->getInt("/tools/bounding_box") == 0) {
- return bounds(SPItem::VISUAL_BBOX);
- } else {
- return bounds(SPItem::GEOMETRIC_BBOX);
- }
-}
-
-Geom::OptRect Selection::documentBounds(SPItem::BBoxType type) const
-{
- Geom::OptRect bbox;
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
- if (items.empty()) return bbox;
-
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
- SPItem *item = SP_ITEM(*iter);
- bbox |= item->documentBounds(type);
- }
-
- return bbox;
-}
-
-// If we have a selection of multiple items, then the center of the first item
-// will be returned; this is also the case in SelTrans::centerRequest()
-boost::optional<Geom::Point> Selection::center() const {
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
- if (!items.empty()) {
- SPItem *first = items.back(); // from the first item in selection
- if (first->isCenterSet()) { // only if set explicitly
- return first->getCenter();
- }
- }
- Geom::OptRect bbox = preferredBounds();
- if (bbox) {
- return bbox->midpoint();
- } else {
- return boost::optional<Geom::Point>();
- }
-}
-
std::vector<Inkscape::SnapCandidatePoint> Selection::getSnapPoints(SnapPreferences const *snapprefs) const {
std::vector<Inkscape::SnapCandidatePoint> p;
if (snapprefs != NULL){
SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs
snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ auto items = const_cast<Selection *>(this)->items();
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
SPItem *this_item = *iter;
this_item->getSnappoints(p, &snapprefs_dummy);
@@ -478,34 +153,6 @@ std::vector<Inkscape::SnapCandidatePoint> Selection::getSnapPoints(SnapPreferenc
return p;
}
-void Selection::_removeObjectDescendants(SPObject *obj) {
- std::vector<SPObject*> toremove;
- for ( std::list<SPObject*>::const_iterator iter=_objs.begin();iter!=_objs.end(); ++iter) {
- SPObject *sel_obj= dynamic_cast<SPObject*>(*iter);
- SPObject *parent = sel_obj->parent;
- while (parent) {
- if ( parent == obj ) {
- toremove.push_back(sel_obj);
- break;
- }
- parent = parent->parent;
- }
- }
- for ( std::vector<SPObject*>::const_iterator iter=toremove.begin();iter!=toremove.end(); ++iter) {
- _remove(*iter);
- }
-}
-
-void Selection::_removeObjectAncestors(SPObject *obj) {
- SPObject *parent = obj->parent;
- while (parent) {
- if (includes(parent)) {
- _remove(parent);
- }
- parent = parent->parent;
- }
-}
-
SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const {
g_return_val_if_fail(repr != NULL, NULL);
gchar const *id = repr->attribute("id");
@@ -516,25 +163,39 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const {
}
size_t Selection::numberOfLayers() {
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
+ auto items = this->items();
std::set<SPObject*> layers;
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
SPObject *layer = _layers->layerForObject(*iter);
layers.insert(layer);
}
+
return layers.size();
}
size_t Selection::numberOfParents() {
- std::vector<SPItem*> const items = const_cast<Selection *>(this)->itemList();
+ auto items = this->items();
std::set<SPObject*> parents;
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ for (auto iter = items.begin(); iter != items.end(); ++iter) {
SPObject *parent = (*iter)->parent;
parents.insert(parent);
}
return parents.size();
}
+void Selection::_emitSignals() {
+ _emitChanged();
+}
+
+void Selection::_connectSignals(SPObject *object) {
+ _modified_connections[object] = object->connectModified(sigc::mem_fun(*this, &Selection::_schedule_modified));
+}
+
+void Selection::_releaseSignals(SPObject *object) {
+ _modified_connections[object].disconnect();
+ _modified_connections.erase(object);
+}
+
}
/*
diff --git a/src/selection.h b/src/selection.h
index 04bcca402..4ea70c38d 100644
--- a/src/selection.h
+++ b/src/selection.h
@@ -5,7 +5,9 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* MenTaLguY <mental@rydia.net>
* bulia byak <buliabyak@users.sf.net>
+ * Adrian Boguszewski
*
+ * Copyright (C) 2016 Adrian Boguszewski
* Copyright (C) 2004-2005 MenTaLguY
* Copyright (C) 1999-2002 Lauris Kaplinski
* Copyright (C) 2001-2002 Ximian, Inc.
@@ -15,21 +17,16 @@
#include <vector>
#include <map>
-#include <list>
-#include <set>
#include <stddef.h>
#include <sigc++/sigc++.h>
#include "inkgc/gc-managed.h"
#include "gc-finalized.h"
#include "gc-anchored.h"
-#include "inkgc/gc-soft-ptr.h"
#include "sp-item.h"
+#include "object-set.h"
-class SPDesktop;
class SPItem;
-class SPBox3D;
-class Persp3D;
namespace Inkscape {
class LayerModel;
@@ -38,7 +35,6 @@ class Node;
}
}
-
namespace Inkscape {
/**
@@ -60,10 +56,10 @@ namespace Inkscape {
*/
class Selection : public Inkscape::GC::Managed<>,
public Inkscape::GC::Finalized,
- public Inkscape::GC::Anchored
+ public Inkscape::GC::Anchored,
+ public ObjectSet
{
public:
- enum CompareSize { HORIZONTAL, VERTICAL, AREA };
/**
* Constructs an selection object, bound to a particular
* layer model
@@ -82,12 +78,7 @@ public:
*/
LayerModel *layers() { return _layers; }
- /**
- * Returns the desktop the selection is bound to
- *
- * @return the desktop the selection is bound to, or NULL if in console mode
- */
- SPDesktop *desktop() { return _desktop; }
+
/**
* Returns active layer for selection (currentLayer or its parent).
@@ -96,19 +87,16 @@ public:
*/
SPObject *activeContext();
- /**
- * Add an SPObject to the set of selected objects.
- *
- * @param obj the SPObject to add
- */
- void add(SPObject *obj, bool persist_selection_context = false);
+ using ObjectSet::add;
/**
* Add an XML node's SPObject to the set of selected objects.
*
* @param the xml node of the item to add
*/
- void add(XML::Node *repr) { add(_objectForXMLNode(repr)); }
+ void add(XML::Node *repr) {
+ add(_objectForXMLNode(repr));
+ }
/**
* Set the selection to a single specific object.
@@ -122,23 +110,11 @@ public:
*
* @param repr the xml node of the item to select
*/
- void set(XML::Node *repr) { set(_objectForXMLNode(repr)); }
-
- /**
- * Removes an item from the set of selected objects.
- *
- * It is ok to call this method for an unselected item.
- *
- * @param item the item to unselect
- */
- void remove(SPObject *obj);
+ void set(XML::Node *repr) {
+ set(_objectForXMLNode(repr));
+ }
- /**
- * Removes an item if selected, adds otherwise.
- *
- * @param item the item to unselect
- */
- void toggle(SPObject *obj);
+ using ObjectSet::remove;
/**
* Removes an item from the set of selected objects.
@@ -147,21 +123,9 @@ public:
*
* @param repr the xml node of the item to remove
*/
- void remove(XML::Node *repr) { remove(_objectForXMLNode(repr)); }
-
- /**
- * Selects exactly the specified objects.
- *
- * @param objs the objects to select
- */
- void setList(std::vector<SPItem*> const &objs);
-
- /**
- * Adds the specified objects to selection, without deselecting first.
- *
- * @param objs the objects to select
- */
- void addList(std::vector<SPItem*> const &objs);
+ void remove(XML::Node *repr) {
+ remove(_objectForXMLNode(repr));
+ }
/**
* Clears the selection and selects the specified objects.
@@ -170,117 +134,21 @@ public:
*/
void setReprList(std::vector<XML::Node*> const &reprs);
- /** Add items from an STL iterator range to the selection.
- * \param from the begin iterator
- * \param to the end iterator
- */
- template <typename InputIterator>
- void add(InputIterator from, InputIterator to) {
- _invalidateCachedLists();
- while ( from != to ) {
- _add(*from);
- ++from;
- }
- _emitChanged();
- }
-
- /**
- * Unselects all selected objects..
- */
- void clear();
-
- /**
- * Returns true if no items are selected.
- */
- bool isEmpty() const { return _objs.empty(); }
-
- /**
- * Returns true if the given object is selected.
- */
- bool includes(SPObject *obj) const;
+ using ObjectSet::includes;
/**
* Returns true if the given item is selected.
*/
- bool includes(XML::Node *repr) const {
+ bool includes(XML::Node *repr) {
return includes(_objectForXMLNode(repr));
}
- /**
- * Returns a single selected object.
- *
- * @return NULL unless exactly one object is selected
- */
- SPObject *single();
-
- /**
- * Returns a single selected item.
- *
- * @return NULL unless exactly one object is selected
- */
- SPItem *singleItem();
-
- /**
- * Returns the smallest item from this selection.
- */
- SPItem *smallestItem(CompareSize compare);
-
- /**
- * Returns the largest item from this selection.
- */
- SPItem *largestItem(CompareSize compare);
-
- /**
- * Returns a single selected object's xml node.
- *
- * @return NULL unless exactly one object is selected
- */
- XML::Node *singleRepr();
-
- /** Returns the list of selected objects. */
- std::vector<SPObject*> const &list();
- /** Returns the list of selected SPItems. */
- std::vector<SPItem*> const &itemList();
- /** Returns a list of the xml nodes of all selected objects. */
- /// \todo only returns reprs of SPItems currently; need a separate
- /// method for that
- std::vector<XML::Node*> const &reprList();
-
- /** Returns a list of all perspectives which have a 3D box in the current selection.
- (these may also be nested in groups) */
- std::list<Persp3D *> const perspList();
-
- /**
- * Returns a list of all 3D boxes in the current selection which are associated to @c
- * persp. If @c pers is @c NULL, return all selected boxes.
- */
- std::list<SPBox3D *> const box3DList(Persp3D *persp = NULL);
-
/** Returns the number of layers in which there are selected objects. */
size_t numberOfLayers();
/** Returns the number of parents to which the selected objects belong. */
size_t numberOfParents();
- /** Returns the bounding rectangle of the selection. */
- Geom::OptRect bounds(SPItem::BBoxType type) const;
- Geom::OptRect visualBounds() const;
- Geom::OptRect geometricBounds() const;
-
- /**
- * Returns either the visual or geometric bounding rectangle of the selection, based on the
- * preferences specified for the selector tool
- */
- Geom::OptRect preferredBounds() const;
-
- /// Returns the bounding rectangle of the selectionin document coordinates.
- Geom::OptRect documentBounds(SPItem::BBoxType type) const;
-
- /**
- * Returns the rotation/skew center of the selection.
- */
- boost::optional<Geom::Point> center() const;
-
/**
* Compute the list of points in the selection that are to be considered for snapping from.
*
@@ -327,6 +195,11 @@ public:
return _modified_signal.slots().insert(_modified_signal.slots().begin(), slot);
}
+protected:
+ void _emitSignals();
+ void _connectSignals(SPObject* object);
+ void _releaseSignals(SPObject* object);
+
private:
/** no copy. */
Selection(Selection const &);
@@ -342,46 +215,17 @@ private:
void _emitModified(unsigned int flags);
/** Issues changed selection signal. */
void _emitChanged(bool persist_selection_context = false);
-
- void _invalidateCachedLists();
-
- /** unselect all descendants of the given item. */
- void _removeObjectDescendants(SPObject *obj);
- /** unselect all ancestors of the given item. */
- void _removeObjectAncestors(SPObject *obj);
- /** clears the selection (without issuing a notification). */
- void _clear();
- /** adds an object (without issuing a notification). */
- void _add(SPObject *obj);
- /** removes an object (without issuing a notification). */
- void _remove(SPObject *obj);
/** returns the SPObject corresponding to an xml node (if any). */
SPObject *_objectForXMLNode(XML::Node *repr) const;
/** Releases an active layer object that is being removed. */
void _releaseContext(SPObject *obj);
- mutable std::list<SPObject*> _objs; //to more efficiently remove arbitrary elements
- mutable std::vector<SPObject*> _objs_vector; // to be returned by list();
- mutable std::set<SPObject*> _objs_set; //to efficiently test if object is selected
- mutable std::vector<XML::Node*> _reprs;
- mutable std::vector<SPItem*> _items;
-
- void add_box_perspective(SPBox3D *box);
- void add_3D_boxes_recursively(SPObject *obj);
- void remove_box_perspective(SPBox3D *box);
- void remove_3D_boxes_recursively(SPObject *obj);
- SPItem *_sizeistItem(bool sml, CompareSize compare);
-
- std::list<SPBox3D *> _3dboxes;
-
LayerModel *_layers;
- GC::soft_ptr<SPDesktop> _desktop;
SPObject* _selection_context;
unsigned int _flags;
unsigned int _idle;
std::map<SPObject *, sigc::connection> _modified_connections;
- std::map<SPObject *, sigc::connection> _release_connections;
sigc::connection _context_release_connection;
sigc::signal<void, Selection *> _changed_signal;
diff --git a/src/seltrans.cpp b/src/seltrans.cpp
index c1fb652be..7b17a294a 100644
--- a/src/seltrans.cpp
+++ b/src/seltrans.cpp
@@ -234,8 +234,8 @@ void Inkscape::SelTrans::setCenter(Geom::Point const &p)
_center_is_set = true;
// Write the new center position into all selected items
- std::vector<SPItem*> items=_desktop->selection->itemList();
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ auto items= _desktop->selection->items();
+ for (auto iter=items.begin();iter!=items.end(); ++iter) {
SPItem *it = SP_ITEM(*iter);
it->setCenter(p);
// only set the value; updating repr and document_done will be done once, on ungrab
@@ -264,8 +264,8 @@ void Inkscape::SelTrans::grab(Geom::Point const &p, gdouble x, gdouble y, bool s
return;
}
- std::vector<SPItem*> items=_desktop->selection->itemList();
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ auto items= _desktop->selection->items();
+ for (auto iter=items.begin();iter!=items.end(); ++iter) {
SPItem *it = static_cast<SPItem*>(sp_object_ref(*iter, NULL));
_items.push_back(it);
_items_const.push_back(it);
@@ -439,7 +439,7 @@ void Inkscape::SelTrans::ungrab()
if (!_current_relative_affine.isIdentity()) { // we can have a identity affine
// when trying to stretch a perfectly vertical line in horizontal direction, which will not be allowed by the handles;
- sp_selection_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE)? true : false);
+ sp_object_set_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE) ? true : false);
if (_center) {
*_center *= _current_relative_affine;
_center_is_set = true;
@@ -486,8 +486,8 @@ void Inkscape::SelTrans::ungrab()
if (_center_is_set) {
// we were dragging center; update reprs and commit undoable action
- std::vector<SPItem*> items=_desktop->selection->itemList();
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ auto items= _desktop->selection->items();
+ for (auto iter=items.begin();iter!=items.end(); ++iter) {
SPItem *it = *iter;
it->updateRepr();
}
@@ -523,8 +523,8 @@ void Inkscape::SelTrans::stamp()
l = _stamp_cache;
} else {
/* Build cache */
- l = selection->itemList();
- sort(l.begin(),l.end(),sp_object_compare_position_bool);
+ l.insert(l.end(), selection->items().begin(), selection->items().end());
+ sort(l.begin(), l.end(), sp_object_compare_position_bool);
_stamp_cache = l;
}
@@ -615,7 +615,8 @@ void Inkscape::SelTrans::_updateVolatileState()
return;
}
- _strokewidth = stroke_average_width (selection->itemList());
+ std::vector<SPItem *> vec(selection->items().begin(), selection->items().end());
+ _strokewidth = stroke_average_width(vec);
}
void Inkscape::SelTrans::_showHandles(SPSelTransType type)
@@ -705,8 +706,8 @@ void Inkscape::SelTrans::handleClick(SPKnot */*knot*/, guint state, SPSelTransHa
case HANDLE_CENTER:
if (state & GDK_SHIFT_MASK) {
// Unset the center position for all selected items
- std::vector<SPItem*> items=_desktop->selection->itemList();
- for ( std::vector<SPItem*>::const_iterator iter=items.begin();iter!=items.end(); ++iter) {
+ auto items = _desktop->selection->items();
+ for (auto iter=items.begin();iter!=items.end(); ++iter) {
SPItem *it = *iter;
it->unsetCenter();
it->updateRepr();
@@ -1281,7 +1282,7 @@ gboolean Inkscape::SelTrans::centerRequest(Geom::Point &pt, guint state)
// items will share a single center. While dragging that single center, it should never snap to the
// centers of any of the selected objects. Therefore we will have to pass the list of selected items
// to the snapper, to avoid self-snapping of the rotation center
- std::vector<SPItem*> items = const_cast<Selection *>(_selection)->itemList();
+ std::vector<SPItem *> items(_selection->items().begin(), _selection->items().end());
SnapManager &m = _desktop->namedview->snap_manager;
m.setup(_desktop);
m.setRotationCenterSource(items);
diff --git a/src/snap.cpp b/src/snap.cpp
index 50f40a9a1..c84da0491 100644
--- a/src/snap.cpp
+++ b/src/snap.cpp
@@ -702,8 +702,8 @@ void SnapManager::setupIgnoreSelection(SPDesktop const *desktop,
_items_to_ignore.clear();
Inkscape::Selection *sel = _desktop->selection;
- std::vector<SPItem*> const items = sel->itemList();
- for (std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i) {
+ auto items = sel->items();
+ for (auto i=items.begin();i!=items.end();++i) {
_items_to_ignore.push_back(*i);
}
}
diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp
index 915c57e45..b371e15b2 100644
--- a/src/sp-clippath.cpp
+++ b/src/sp-clippath.cpp
@@ -127,9 +127,9 @@ void SPClipPath::update(SPCtx* ctx, unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = this->firstChild(); child; child = child->getNext()) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -166,9 +166,9 @@ void SPClipPath::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for (SPObject *child = this->firstChild(); child; child = child->getNext()) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -199,9 +199,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int
Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing);
display = sp_clippath_view_new_prepend(display, key, ai);
- for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- Inkscape::DrawingItem *ac = SP_ITEM(child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS);
+ for (auto& child: children) {
+ if (SP_IS_ITEM(&child)) {
+ Inkscape::DrawingItem *ac = SP_ITEM(&child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS);
if (ac) {
/* The order is not important in clippath */
@@ -222,9 +222,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int
}
void SPClipPath::hide(unsigned int key) {
- for ( SPObject *child = firstChild() ; child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- SP_ITEM(child)->invoke_hide(key);
+ for (auto& child: children) {
+ if (SP_IS_ITEM(&child)) {
+ SP_ITEM(&child)->invoke_hide(key);
}
}
@@ -251,9 +251,9 @@ void SPClipPath::setBBox(unsigned int key, Geom::OptRect const &bbox) {
Geom::OptRect SPClipPath::geometricBounds(Geom::Affine const &transform) {
Geom::OptRect bbox;
- for (SPObject *i = firstChild(); i; i = i->getNext()) {
- if (SP_IS_ITEM(i)) {
- Geom::OptRect tmp = SP_ITEM(i)->geometricBounds(Geom::Affine(SP_ITEM(i)->transform) * transform);
+ for (auto& i: children) {
+ if (SP_IS_ITEM(&i)) {
+ Geom::OptRect tmp = SP_ITEM(&i)->geometricBounds(Geom::Affine(SP_ITEM(&i)->transform) * transform);
bbox.unionWith(tmp);
}
}
diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp
index dd779c0da..865c6891e 100644
--- a/src/sp-defs.cpp
+++ b/src/sp-defs.cpp
@@ -54,9 +54,9 @@ void SPDefs::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -79,8 +79,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X
}
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
}
@@ -93,8 +93,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X
}
} else {
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ child.updateRepr(flags);
}
}
diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp
index 2e6e06caf..0fbeed15b 100644
--- a/src/sp-filter-primitive.cpp
+++ b/src/sp-filter-primitive.cpp
@@ -242,8 +242,10 @@ int sp_filter_primitive_read_result(SPFilterPrimitive *prim, gchar const *name)
*/
int sp_filter_primitive_name_previous_out(SPFilterPrimitive *prim) {
SPFilter *parent = SP_FILTER(prim->parent);
- SPObject *i = parent->children;
- while (i && i->next != prim) i = i->next;
+ SPObject *i = parent->firstChild();
+ while (i && i->getNext() != prim) {
+ i = i->getNext();
+ }
if (i) {
SPFilterPrimitive *i_prim = SP_FILTER_PRIMITIVE(i);
if (i_prim->image_out < 0) {
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp
index 64a972ff4..26ea03c6c 100644
--- a/src/sp-filter.cpp
+++ b/src/sp-filter.cpp
@@ -264,8 +264,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML
}
GSList *l = NULL;
- for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) {
- Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags);
+ for (auto& child: children) {
+ Inkscape::XML::Node *crepr = child.updateRepr(doc, NULL, flags);
if (crepr) {
l = g_slist_prepend (l, crepr);
@@ -278,8 +278,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML
l = g_slist_remove (l, l->data);
}
} else {
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ child.updateRepr(flags);
}
}
@@ -416,10 +416,9 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr
}
nr_filter->clear_primitives();
- SPObject *primitive_obj = sp_filter->children;
- while (primitive_obj) {
- if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) {
- SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj);
+ for(auto& primitive_obj: sp_filter->children) {
+ if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) {
+ SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(&primitive_obj);
g_assert(primitive != NULL);
// if (((SPFilterPrimitiveClass*) G_OBJECT_GET_CLASS(primitive))->build_renderer) {
@@ -429,7 +428,6 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr
// } // CPPIFY: => FilterPrimitive should be abstract.
primitive->build_renderer(nr_filter);
}
- primitive_obj = primitive_obj->next;
}
}
@@ -437,11 +435,12 @@ int sp_filter_primitive_count(SPFilter *filter) {
g_assert(filter != NULL);
int count = 0;
- SPObject *primitive_obj = filter->children;
- while (primitive_obj) {
- if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) count++;
- primitive_obj = primitive_obj->next;
+ for(auto& primitive_obj: filter->children) {
+ if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) {
+ count++;
+ }
}
+
return count;
}
@@ -509,10 +508,9 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) {
g_assert(filter != NULL);
int largest = 0;
- SPObject *primitive_obj = filter->children;
- while (primitive_obj) {
- if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) {
- Inkscape::XML::Node *repr = primitive_obj->getRepr();
+ for(auto& primitive_obj: filter->children) {
+ if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) {
+ Inkscape::XML::Node *repr = primitive_obj.getRepr();
char const *result = repr->attribute("result");
int index;
if (result)
@@ -526,7 +524,6 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) {
}
}
}
- primitive_obj = primitive_obj->next;
}
return "result" + Glib::Ascii::dtostr(largest + 1);
diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp
index 8d9c51ab8..17b841e37 100644
--- a/src/sp-flowdiv.cpp
+++ b/src/sp-flowdiv.cpp
@@ -27,9 +27,9 @@ void SPFlowdiv::update(SPCtx *ctx, unsigned int flags) {
childflags &= SP_OBJECT_MODIFIED_CASCADE;
GSList* l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -65,9 +65,9 @@ void SPFlowdiv::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -104,15 +104,15 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape
GSList *l = NULL;
- for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node* c_repr = NULL;
- if ( SP_IS_FLOWTSPAN (child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if ( SP_IS_FLOWTSPAN (&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
}
if ( c_repr ) {
@@ -126,13 +126,13 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape
l = g_slist_remove(l, l->data);
}
} else {
- for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( SP_IS_FLOWTSPAN (child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ for (auto& child: children) {
+ if ( SP_IS_FLOWTSPAN (&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
}
}
}
@@ -168,9 +168,9 @@ void SPFlowtspan::update(SPCtx *ctx, unsigned int flags) {
childflags &= SP_OBJECT_MODIFIED_CASCADE;
GSList* l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -206,9 +206,9 @@ void SPFlowtspan::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -242,15 +242,15 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca
GSList *l = NULL;
- for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node* c_repr = NULL;
- if ( SP_IS_FLOWTSPAN(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if ( SP_IS_FLOWTSPAN(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
}
if ( c_repr ) {
@@ -264,13 +264,13 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca
l = g_slist_remove(l, l->data);
}
} else {
- for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( SP_IS_FLOWTSPAN(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ for (auto& child: children) {
+ if ( SP_IS_FLOWTSPAN(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
}
}
}
@@ -307,9 +307,9 @@ void SPFlowpara::update(SPCtx *ctx, unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList* l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -343,9 +343,9 @@ void SPFlowpara::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -379,15 +379,15 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap
GSList *l = NULL;
- for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node* c_repr = NULL;
- if ( SP_IS_FLOWTSPAN(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if ( SP_IS_FLOWTSPAN(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
}
if ( c_repr ) {
@@ -401,13 +401,13 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap
l = g_slist_remove(l, l->data);
}
} else {
- for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( SP_IS_FLOWTSPAN(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_FLOWPARA(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_STRING(child) ) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ for (auto& child: children) {
+ if ( SP_IS_FLOWTSPAN(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_FLOWPARA(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_STRING(&child) ) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
}
}
}
diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp
index 3dc02c3ca..4064c12f1 100644
--- a/src/sp-flowregion.cpp
+++ b/src/sp-flowregion.cpp
@@ -61,9 +61,9 @@ void SPFlowregion::update(SPCtx *ctx, unsigned int flags) {
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -100,9 +100,9 @@ void SPFlowregion::UpdateComputed(void)
}
computed.clear();
- for (SPObject* child = firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Shape *shape = 0;
- GetDest(child, &shape);
+ GetDest(&child, &shape);
computed.push_back(shape);
}
}
@@ -116,9 +116,9 @@ void SPFlowregion::modified(guint flags) {
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -143,9 +143,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc
}
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- if ( !dynamic_cast<SPTitle *>(child) && !dynamic_cast<SPDesc *>(child) ) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ if ( !dynamic_cast<SPTitle *>(&child) && !dynamic_cast<SPDesc *>(&child) ) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
@@ -159,10 +159,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc
l = g_slist_remove(l, l->data);
}
- } else {
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- if ( !dynamic_cast<SPTitle *>(child) && !dynamic_cast<SPDesc *>(child) ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ if ( !dynamic_cast<SPTitle *>(&child) && !dynamic_cast<SPDesc *>(&child) ) {
+ child.updateRepr(flags);
}
}
}
@@ -219,9 +218,9 @@ void SPFlowregionExclude::update(SPCtx *ctx, unsigned int flags) {
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -257,8 +256,8 @@ void SPFlowregionExclude::UpdateComputed(void)
computed = NULL;
}
- for ( SPObject* child = firstChild() ; child ; child = child->getNext() ) {
- GetDest(child, &computed);
+ for (auto& child: children) {
+ GetDest(&child, &computed);
}
}
@@ -271,9 +270,9 @@ void SPFlowregionExclude::modified(guint flags) {
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse (l);
@@ -299,8 +298,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc
GSList *l = NULL;
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
@@ -314,8 +313,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc
}
} else {
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ child.updateRepr(flags);
}
}
diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp
index d89de33bf..264558014 100644
--- a/src/sp-flowtext.cpp
+++ b/src/sp-flowtext.cpp
@@ -67,9 +67,9 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) {
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -130,9 +130,9 @@ void SPFlowtext::modified(unsigned int flags) {
}
}
- for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) {
- if (dynamic_cast<SPFlowregion *>(o)) {
- region = o;
+ for (auto& o: children) {
+ if (dynamic_cast<SPFlowregion *>(&o)) {
+ region = &o;
break;
}
}
@@ -218,11 +218,11 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node *c_repr = NULL;
- if ( dynamic_cast<SPFlowdiv *>(child) || dynamic_cast<SPFlowpara *>(child) || dynamic_cast<SPFlowregion *>(child) || dynamic_cast<SPFlowregionExclude *>(child)) {
- c_repr = child->updateRepr(doc, NULL, flags);
+ if ( dynamic_cast<SPFlowdiv *>(&child) || dynamic_cast<SPFlowpara *>(&child) || dynamic_cast<SPFlowregion *>(&child) || dynamic_cast<SPFlowregionExclude *>(&child)) {
+ c_repr = child.updateRepr(doc, NULL, flags);
}
if ( c_repr ) {
@@ -236,9 +236,9 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( dynamic_cast<SPFlowdiv *>(child) || dynamic_cast<SPFlowpara *>(child) || dynamic_cast<SPFlowregion *>(child) || dynamic_cast<SPFlowregionExclude *>(child)) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ if ( dynamic_cast<SPFlowdiv *>(&child) || dynamic_cast<SPFlowpara *>(&child) || dynamic_cast<SPFlowregion *>(&child) || dynamic_cast<SPFlowregionExclude *>(&child)) {
+ child.updateRepr(flags);
}
}
}
@@ -385,8 +385,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape,
*pending_line_break_object = NULL;
}
- for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) {
- SPString *str = dynamic_cast<SPString *>(child);
+ for (auto& child: root->children) {
+ SPString *str = dynamic_cast<SPString *>(&child);
if (str) {
if (*pending_line_break_object) {
if (dynamic_cast<SPFlowregionbreak *>(*pending_line_break_object))
@@ -397,12 +397,12 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape,
*pending_line_break_object = NULL;
}
if (with_indent) {
- layout.appendText(str->string, root->style, child, &pi);
+ layout.appendText(str->string, root->style, &child, &pi);
} else {
- layout.appendText(str->string, root->style, child);
+ layout.appendText(str->string, root->style, &child);
}
} else {
- SPFlowregion *region = dynamic_cast<SPFlowregion *>(child);
+ SPFlowregion *region = dynamic_cast<SPFlowregion *>(&child);
if (region) {
std::vector<Shape*> const &computed = region->computed;
for (std::vector<Shape*>::const_iterator it = computed.begin() ; it != computed.end() ; ++it) {
@@ -416,8 +416,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape,
}
}
//Xml Tree is being directly used while it shouldn't be.
- else if (!dynamic_cast<SPFlowregionExclude *>(child) && !sp_repr_is_meta_element(child->getRepr())) {
- _buildLayoutInput(child, exclusion_shape, shapes, pending_line_break_object);
+ else if (!dynamic_cast<SPFlowregionExclude *>(&child) && !sp_repr_is_meta_element(child.getRepr())) {
+ _buildLayoutInput(&child, exclusion_shape, shapes, pending_line_break_object);
}
}
}
@@ -435,9 +435,9 @@ Shape* SPFlowtext::_buildExclusionShape() const
Shape *shape = new Shape();
Shape *shape_temp = new Shape();
- for (SPObject *child = children ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
// RH: is it right that this shouldn't be recursive?
- SPFlowregionExclude *c_child = dynamic_cast<SPFlowregionExclude *>(child);
+ SPFlowregionExclude *c_child = dynamic_cast<SPFlowregionExclude *>(const_cast<SPObject*>(&child));
if ( c_child && c_child->computed && c_child->computed->hasEdges() ) {
if (shape->hasEdges()) {
shape_temp->Booleen(shape, c_child->computed, bool_op_union);
@@ -588,9 +588,9 @@ SPItem *SPFlowtext::get_frame(SPItem const *after)
SPItem *frame = 0;
SPObject *region = 0;
- for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
- if (dynamic_cast<SPFlowregion *>(o)) {
- region = o;
+ for (auto& o: children) {
+ if (dynamic_cast<SPFlowregion *>(&o)) {
+ region = &o;
break;
}
}
@@ -598,8 +598,8 @@ SPItem *SPFlowtext::get_frame(SPItem const *after)
if (region) {
bool past = false;
- for (SPObject *o = region->firstChild() ; o ; o = o->getNext() ) {
- SPItem *item = dynamic_cast<SPItem *>(o);
+ for (auto& o: region->children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if (item) {
if ( (after == NULL) || past ) {
frame = item;
@@ -702,9 +702,9 @@ Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform)
}
SPObject *region = NULL;
- for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) {
- if (dynamic_cast<SPFlowregion *>(o)) {
- region = o;
+ for (auto& o: children) {
+ if (dynamic_cast<SPFlowregion *>(&o)) {
+ region = &o;
break;
}
}
diff --git a/src/sp-flowtext.h b/src/sp-flowtext.h
index 9ee676893..d0b0a19a4 100644
--- a/src/sp-flowtext.h
+++ b/src/sp-flowtext.h
@@ -8,6 +8,7 @@
#include "libnrtype/Layout-TNG.h"
#include "sp-item.h"
+#include "desktop.h"
#define SP_FLOWTEXT(obj) (dynamic_cast<SPFlowtext*>((SPObject*)obj))
#define SP_IS_FLOWTEXT(obj) (dynamic_cast<const SPFlowtext*>((SPObject*)obj) != NULL)
diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp
index 49143bda4..f24e25ab1 100644
--- a/src/sp-gradient.cpp
+++ b/src/sp-gradient.cpp
@@ -269,8 +269,8 @@ void SPGradient::build(SPDocument *document, Inkscape::XML::Node *repr)
SPPaintServer::build(document, repr);
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
+ for (auto& ochild: children) {
+ if (SP_IS_STOP(&ochild)) {
this->has_stops = TRUE;
break;
}
@@ -474,8 +474,8 @@ void SPGradient::remove_child(Inkscape::XML::Node *child)
SPPaintServer::remove_child(child);
this->has_stops = FALSE;
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
+ for (auto& ochild: children) {
+ if (SP_IS_STOP(&ochild)) {
this->has_stops = TRUE;
break;
}
@@ -529,9 +529,9 @@ void SPGradient::modified(guint flags)
// FIXME: climb up the ladder of hrefs
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- sp_object_ref(child);
- l = g_slist_prepend(l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child);
+ l = g_slist_prepend(l, &child);
}
l = g_slist_reverse(l);
@@ -550,10 +550,11 @@ void SPGradient::modified(guint flags)
SPStop* SPGradient::getFirstStop()
{
- SPStop* first = 0;
- for (SPObject *ochild = firstChild(); ochild && !first; ochild = ochild->getNext()) {
- if (SP_IS_STOP(ochild)) {
- first = SP_STOP(ochild);
+ SPStop* first = nullptr;
+ for (auto& ochild: children) {
+ if (SP_IS_STOP(&ochild)) {
+ first = SP_STOP(&ochild);
+ break;
}
}
return first;
@@ -580,8 +581,8 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap
if (flags & SP_OBJECT_WRITE_BUILD) {
GSList *l = NULL;
- for (SPObject *child = this->firstChild(); child; child = child->getNext()) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
@@ -908,8 +909,8 @@ bool SPGradient::invalidateArray()
void SPGradient::rebuildVector()
{
gint len = 0;
- for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_STOP(child)) {
+ for (auto& child: children) {
+ if (SP_IS_STOP(&child)) {
len ++;
}
}
@@ -930,9 +931,9 @@ void SPGradient::rebuildVector()
}
}
- for ( SPObject *child = firstChild(); child; child = child->getNext() ) {
- if (SP_IS_STOP(child)) {
- SPStop *stop = SP_STOP(child);
+ for (auto& child: children) {
+ if (SP_IS_STOP(&child)) {
+ SPStop *stop = SP_STOP(&child);
SPGradientStop gstop;
if (!vector.stops.empty()) {
@@ -1015,8 +1016,8 @@ void SPGradient::rebuildArray()
array.read( SP_MESH( this ) );
has_patches = false;
- for ( SPObject *ro = firstChild() ; ro ; ro = ro->getNext() ) {
- if (SP_IS_MESHROW(ro)) {
+ for (auto& ro: children) {
+ if (SP_IS_MESHROW(&ro)) {
has_patches = true;
// std::cout << " Has Patches" << std::endl;
break;
diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp
index a17a555b8..02d95c75c 100644
--- a/src/sp-hatch.cpp
+++ b/src/sp-hatch.cpp
@@ -230,14 +230,13 @@ void SPHatch::set(unsigned int key, const gchar* value)
bool SPHatch::_hasHatchPatchChildren(SPHatch const *hatch)
{
- bool matched = false;
- for (SPObject const *child = hatch->firstChild(); child && !matched; child = child->getNext() ) {
- SPHatchPath const *hatchPath = dynamic_cast<SPHatchPath const *>(child);
+ for (auto& child: hatch->children) {
+ SPHatchPath const *hatchPath = dynamic_cast<SPHatchPath const *>(&child);
if (hatchPath) {
- matched = true;
+ return true;
}
}
- return matched;
+ return false;
}
std::vector<SPHatchPath*> SPHatch::hatchPaths()
@@ -246,8 +245,8 @@ std::vector<SPHatchPath*> SPHatch::hatchPaths()
SPHatch *src = chase_hrefs<SPHatch>(this, sigc::ptr_fun(&_hasHatchPatchChildren));
if (src) {
- for (SPObject *child = src->firstChild(); child; child = child->getNext()) {
- SPHatchPath *hatchPath = dynamic_cast<SPHatchPath *>(child);
+ for (auto& child: src->children) {
+ SPHatchPath *hatchPath = dynamic_cast<SPHatchPath *>(&child);
if (hatchPath) {
list.push_back(hatchPath);
}
@@ -262,8 +261,8 @@ std::vector<SPHatchPath const*> SPHatch::hatchPaths() const
SPHatch const *src = chase_hrefs<SPHatch const>(this, sigc::ptr_fun(&_hasHatchPatchChildren));
if (src) {
- for (SPObject const *child = src->firstChild(); child; child = child->getNext()) {
- SPHatchPath const *hatchPath = dynamic_cast<SPHatchPath const*>(child);
+ for (auto& child: src->children) {
+ SPHatchPath const *hatchPath = dynamic_cast<SPHatchPath const*>(&child);
if (hatchPath) {
list.push_back(hatchPath);
}
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index f5c8f348e..097026057 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -230,9 +230,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::
l = NULL;
- for (SPObject *child = firstChild(); child; child = child->getNext() ) {
- if ( !dynamic_cast<SPTitle *>(child) && !dynamic_cast<SPDesc *>(child) ) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ if ( !dynamic_cast<SPTitle *>(&child) && !dynamic_cast<SPDesc *>(&child) ) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend (l, crepr);
@@ -246,9 +246,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape::
l = g_slist_remove (l, l->data);
}
} else {
- for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if ( !dynamic_cast<SPTitle *>(child) && !dynamic_cast<SPDesc *>(child) ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ if ( !dynamic_cast<SPTitle *>(&child) && !dynamic_cast<SPDesc *>(&child) ) {
+ child.updateRepr(flags);
}
}
}
@@ -292,9 +292,8 @@ Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox
}
void SPGroup::print(SPPrintContext *ctx) {
- std::vector<SPObject*> l=this->childList(false);
- for(std::vector<SPObject*>::const_iterator i=l.begin();i!=l.end();++i){
- SPObject *o = *i;
+ for(auto& child: children){
+ SPObject *o = &child;
SPItem *item = dynamic_cast<SPItem *>(o);
if (item) {
item->invoke_print(ctx);
@@ -361,9 +360,9 @@ void SPGroup::hide (unsigned int key) {
void SPGroup::snappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscape::SnapPreferences const *snapprefs) const {
- for ( SPObject const *o = this->firstChild(); o; o = o->getNext() )
+ for (auto& o: children)
{
- SPItem const *item = dynamic_cast<SPItem const *>(o);
+ SPItem const *item = dynamic_cast<SPItem const *>(&o);
if (item) {
item->getSnappoints(p, snapprefs);
}
@@ -507,20 +506,21 @@ sp_item_group_ungroup (SPGroup *group, std::vector<SPItem*> &children, bool do_d
GSList *objects = NULL;
Geom::Affine const g(group->transform);
- for (SPObject *child = group->firstChild() ; child; child = child->getNext() )
- if (SPItem *citem = dynamic_cast<SPItem *>(child))
- sp_item_group_ungroup_handle_clones(citem,g);
-
+ for (auto& child: group->children) {
+ if (SPItem *citem = dynamic_cast<SPItem *>(&child)) {
+ sp_item_group_ungroup_handle_clones(citem, g);
+ }
+ }
- for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) {
- SPItem *citem = dynamic_cast<SPItem *>(child);
+ for (auto& child: group->children) {
+ SPItem *citem = dynamic_cast<SPItem *>(&child);
if (citem) {
/* Merging of style */
// this converts the gradient/pattern fill/stroke, if any, to userSpaceOnUse; we need to do
// it here _before_ the new transform is set, so as to use the pre-transform bbox
citem->adjust_paint_recursive (Geom::identity(), Geom::identity(), false);
- child->style->merge( group->style );
+ child.style->merge( group->style );
/*
* fixme: We currently make no allowance for the case where child is cloned
* and the group has any style settings.
@@ -542,9 +542,9 @@ sp_item_group_ungroup (SPGroup *group, std::vector<SPItem*> &children, bool do_d
* extra complication & maintenance burden and this case is rare.
*/
- child->updateRepr();
+ child.updateRepr();
- Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document());
+ Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document());
// Merging transform
Geom::Affine ctrans = citem->transform * g;
@@ -578,7 +578,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector<SPItem*> &children, bool do_d
if (text) {
//this causes a change in text-on-path appearance when there is a non-conformal transform, see bug #1594565
double scale = (ctrans.expansionX() + ctrans.expansionY()) / 2.0;
- SPTextPath * text_path = dynamic_cast<SPTextPath *>(text->children);
+ SPTextPath * text_path = dynamic_cast<SPTextPath *>(text->firstChild());
if (!text_path) {
nrepr->setAttribute("transform", affinestr);
} else {
@@ -595,7 +595,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector<SPItem*> &children, bool do_d
items = g_slist_prepend (items, nrepr);
} else {
- Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document());
+ Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document());
objects = g_slist_prepend (objects, nrepr);
}
}
@@ -657,9 +657,9 @@ std::vector<SPItem*> sp_item_group_item_list(SPGroup * group)
std::vector<SPItem*> s;
g_return_val_if_fail(group != NULL, s);
- for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) {
- if ( dynamic_cast<SPItem *>(o) ) {
- s.push_back((SPItem*)o);
+ for (auto& o: group->children) {
+ if ( dynamic_cast<SPItem *>(&o) ) {
+ s.push_back((SPItem*)&o);
}
}
return s;
@@ -730,8 +730,8 @@ void SPGroup::_updateLayerMode(unsigned int display_key) {
void SPGroup::translateChildItems(Geom::Translate const &tr)
{
if ( hasChildren() ) {
- for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
- SPItem *item = dynamic_cast<SPItem *>(o);
+ for (auto& o: children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if ( item ) {
sp_item_move_rel(item, tr);
}
@@ -743,14 +743,14 @@ void SPGroup::translateChildItems(Geom::Translate const &tr)
void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse)
{
if ( hasChildren() ) {
- for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
- if ( SPDefs *defs = dynamic_cast<SPDefs *>(o) ) { // select symbols from defs, ignore clips, masks, patterns
- for (SPObject *defschild = defs->firstChild() ; defschild ; defschild = defschild->getNext() ) {
- SPGroup *defsgroup = dynamic_cast<SPGroup *>(defschild);
+ for (auto& o: children) {
+ if ( SPDefs *defs = dynamic_cast<SPDefs *>(&o) ) { // select symbols from defs, ignore clips, masks, patterns
+ for (auto& defschild: defs->children) {
+ SPGroup *defsgroup = dynamic_cast<SPGroup *>(&defschild);
if (defsgroup)
defsgroup->scaleChildItemsRec(sc, p, false);
}
- } else if ( SPItem *item = dynamic_cast<SPItem *>(o) ) {
+ } else if ( SPItem *item = dynamic_cast<SPItem *>(&o) ) {
SPGroup *group = dynamic_cast<SPGroup *>(item);
if (group && !dynamic_cast<SPBox3D *>(item)) {
/* Using recursion breaks clipping because transforms are applied
@@ -866,8 +866,8 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bo
gint SPGroup::getItemCount() const {
gint len = 0;
- for (SPObject const *o = this->firstChild() ; o ; o = o->getNext() ) {
- if (dynamic_cast<SPItem const *>(o)) {
+ for (auto& child: children) {
+ if (dynamic_cast<SPItem const *>(&child)) {
len++;
}
}
diff --git a/src/sp-item.cpp b/src/sp-item.cpp
index 01cb2d09f..0ba74f9fd 100644
--- a/src/sp-item.cpp
+++ b/src/sp-item.cpp
@@ -298,50 +298,35 @@ bool is_item(SPObject const &object) {
void SPItem::raiseToTop() {
using Inkscape::Algorithms::find_last_if;
- SPObject *topmost=find_last_if<SPObject::SiblingIterator>(
- next, NULL, &is_item
- );
- if (topmost) {
+ auto topmost = find_last_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item);
+ if (topmost != parent->children.end()) {
getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() );
}
}
void SPItem::raiseOne() {
- SPObject *next_higher=std::find_if<SPObject::SiblingIterator>(
- next, NULL, &is_item
- );
- if (next_higher) {
+ auto next_higher = std::find_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item);
+ if (next_higher != parent->children.end()) {
Inkscape::XML::Node *ref = next_higher->getRepr();
getRepr()->parent()->changeOrder(getRepr(), ref);
}
}
void SPItem::lowerOne() {
- using Inkscape::Util::MutableList;
- using Inkscape::Util::reverse_list;
-
- MutableList<SPObject &> next_lower=std::find_if(
- reverse_list<SPObject::SiblingIterator>(
- parent->firstChild(), this
- ),
- MutableList<SPObject &>(),
- &is_item
- );
- if (next_lower) {
- ++next_lower;
- Inkscape::XML::Node *ref = ( next_lower ? next_lower->getRepr() : NULL );
+ using Inkscape::Algorithms::find_last_if;
+
+ auto next_lower = find_last_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item);
+ if (next_lower != parent->children.iterator_to(*this)) {
+ next_lower--;
+ Inkscape::XML::Node *ref = next_lower->getRepr();
getRepr()->parent()->changeOrder(getRepr(), ref);
}
}
void SPItem::lowerToBottom() {
- using Inkscape::Algorithms::find_last_if;
- using Inkscape::Util::MutableList;
- using Inkscape::Util::reverse_list;
-
- SPObject * bottom=parent->firstChild();
- while(dynamic_cast<SPObject*>(bottom) && dynamic_cast<SPObject*>(bottom->next) && bottom!=this && !is_item(*(bottom->next))) bottom=bottom->next;
- if (bottom && bottom != this) {
+ auto bottom = std::find_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item);
+ if (bottom != parent->children.iterator_to(*this)) {
+ bottom--;
Inkscape::XML::Node *ref = bottom->getRepr() ;
parent->getRepr()->changeOrder(getRepr(), ref);
}
@@ -356,8 +341,8 @@ void SPItem::moveTo(SPItem *target, bool intoafter) {
// Assume move to the "first" in the top node, find the top node
intoafter = false;
SPObject* bottom = this->document->getObjectByRepr(our_ref->root())->firstChild();
- while(!dynamic_cast<SPItem*>(bottom->next)){
- bottom=bottom->next;
+ while(!dynamic_cast<SPItem*>(bottom->getNext())){
+ bottom = bottom->getNext();
}
target_ref = bottom->getRepr();
}
@@ -710,9 +695,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X
// so we need to add any children from the underlying object to the new repr
if (flags & SP_OBJECT_WRITE_BUILD) {
GSList *l = NULL;
- for (SPObject *child = object->firstChild(); child != NULL; child = child->next ) {
- if (dynamic_cast<SPTitle *>(child) || dynamic_cast<SPDesc *>(child)) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: object->children) {
+ if (dynamic_cast<SPTitle *>(&child) || dynamic_cast<SPDesc *>(&child)) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend (l, crepr);
}
@@ -724,9 +709,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X
l = g_slist_remove (l, l->data);
}
} else {
- for (SPObject *child = object->firstChild() ; child != NULL; child = child->next ) {
- if (dynamic_cast<SPTitle *>(child) || dynamic_cast<SPDesc *>(child)) {
- child->updateRepr(flags);
+ for (auto& child: object->children) {
+ if (dynamic_cast<SPTitle *>(&child) || dynamic_cast<SPDesc *>(&child)) {
+ child.updateRepr(flags);
}
}
}
@@ -933,12 +918,12 @@ unsigned int SPItem::pos_in_parent() const {
unsigned int pos = 0;
- for ( SPObject *iter = parent->firstChild() ; iter ; iter = iter->next) {
- if (iter == this) {
+ for (auto& iter: parent->children) {
+ if (&iter == this) {
return pos;
}
- if (dynamic_cast<SPItem *>(iter)) {
+ if (dynamic_cast<SPItem *>(&iter)) {
pos++;
}
}
@@ -979,8 +964,8 @@ void SPItem::getSnappoints(std::vector<Inkscape::SnapCandidatePoint> &p, Inkscap
for (std::list<SPObject const *>::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); ++o) {
if (*o) {
// obj is a group object, the children are the actual clippers
- for (SPObject *child = (*o)->children ; child ; child = child->next) {
- SPItem *item = dynamic_cast<SPItem *>(child);
+ for(auto& child: (*o)->children) {
+ SPItem *item = dynamic_cast<SPItem *>(const_cast<SPObject*>(&child));
if (item) {
std::vector<Inkscape::SnapCandidatePoint> p_clip_or_mask;
// Please note the recursive call here!
@@ -1307,8 +1292,8 @@ void SPItem::adjust_stroke_width_recursive(double expansion)
// A clone's child is the ghost of its original - we must not touch it, skip recursion
if ( !dynamic_cast<SPUse *>(this) ) {
- for ( SPObject *o = children; o; o = o->getNext() ) {
- SPItem *item = dynamic_cast<SPItem *>(o);
+ for (auto& o: children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if (item) {
item->adjust_stroke_width_recursive(expansion);
}
@@ -1322,8 +1307,8 @@ void SPItem::freeze_stroke_width_recursive(bool freeze)
// A clone's child is the ghost of its original - we must not touch it, skip recursion
if ( !dynamic_cast<SPUse *>(this) ) {
- for ( SPObject *o = children; o; o = o->getNext() ) {
- SPItem *item = dynamic_cast<SPItem *>(o);
+ for (auto& o: children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if (item) {
item->freeze_stroke_width_recursive(freeze);
}
@@ -1342,10 +1327,10 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Affine advertized_transform)
rect->compensateRxRy(advertized_transform);
}
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- SPItem *item = dynamic_cast<SPItem *>(o);
- if (item) {
- sp_item_adjust_rects_recursive(item, advertized_transform);
+ for(auto& o: item->children) {
+ SPItem *itm = dynamic_cast<SPItem *>(&o);
+ if (itm) {
+ sp_item_adjust_rects_recursive(itm, advertized_transform);
}
}
}
@@ -1362,8 +1347,8 @@ void SPItem::adjust_paint_recursive (Geom::Affine advertized_transform, Geom::Af
// also we do not recurse into clones, because a clone's child is the ghost of its original -
// we must not touch it
if (!(this && (dynamic_cast<SPText *>(this) || dynamic_cast<SPUse *>(this)))) {
- for (SPObject *o = children; o != NULL; o = o->next) {
- SPItem *item = dynamic_cast<SPItem *>(o);
+ for (auto& o: children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
if (item) {
// At the level of the transformed item, t_ancestors is identity;
// below it, it is the accmmulated chain of transforms from this level to the top level
@@ -1671,8 +1656,8 @@ SPItem const *sp_item_first_item_child(SPObject const *obj)
SPItem *sp_item_first_item_child(SPObject *obj)
{
SPItem *child = 0;
- for ( SPObject *iter = obj->firstChild() ; iter ; iter = iter->next ) {
- SPItem *tmp = dynamic_cast<SPItem *>(iter);
+ for (auto& iter: obj->children) {
+ SPItem *tmp = dynamic_cast<SPItem *>(&iter);
if ( tmp ) {
child = tmp;
break;
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index e860206a2..4690ffda2 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -137,12 +137,8 @@ void SPMask::update(SPCtx* ctx, unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- std::vector<SPObject *> children = this->childList(false);
- for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();++child) {
- sp_object_ref(*child);
- }
-
-
+ std::vector<SPObject *> children = this->childList(true);
+
for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();++child) {
if (flags || ((*child)->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
(*child)->updateDisplay(ctx, flags);
@@ -171,11 +167,8 @@ void SPMask::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- std::vector<SPObject *> children = this->childList(false);
- for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();++child) {
- sp_object_ref(*child);
- }
-
+ std::vector<SPObject *> children = this->childList(true);
+
for (std::vector<SPObject *>::const_iterator child = children.begin();child != children.end();++child) {
if (flags || ((*child)->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
(*child)->emitModified(flags);
@@ -233,9 +226,9 @@ Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned
Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing);
this->display = sp_mask_view_new_prepend (this->display, key, ai);
- for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) {
- if (SP_IS_ITEM (child)) {
- Inkscape::DrawingItem *ac = SP_ITEM (child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS);
+ for (auto& child: children) {
+ if (SP_IS_ITEM (&child)) {
+ Inkscape::DrawingItem *ac = SP_ITEM (&child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS);
if (ac) {
ai->prependChild(ac);
@@ -256,9 +249,9 @@ void SPMask::sp_mask_hide(unsigned int key) {
g_return_if_fail (this != NULL);
g_return_if_fail (SP_IS_MASK (this));
- for ( SPObject *child = this->firstChild(); child; child = child->getNext()) {
- if (SP_IS_ITEM (child)) {
- SP_ITEM(child)->invoke_hide (key);
+ for (auto& child: children) {
+ if (SP_IS_ITEM (&child)) {
+ SP_ITEM(&child)->invoke_hide (key);
}
}
diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp
index 355150893..6bd5c85d7 100644
--- a/src/sp-mesh-array.cpp
+++ b/src/sp-mesh-array.cpp
@@ -632,16 +632,16 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) {
guint max_column = 0;
guint irow = 0; // Corresponds to top of patch being read in.
- for ( SPObject *ro = mg->firstChild() ; ro ; ro = ro->getNext() ) {
+ for (auto& ro: mg->children) {
- if (SP_IS_MESHROW(ro)) {
+ if (SP_IS_MESHROW(&ro)) {
guint icolumn = 0; // Corresponds to left of patch being read in.
- for ( SPObject *po = ro->firstChild() ; po ; po = po->getNext() ) {
+ for (auto& po: ro.children) {
- if (SP_IS_MESHPATCH(po)) {
+ if (SP_IS_MESHPATCH(&po)) {
- SPMeshpatch *patch = SP_MESHPATCH(po);
+ SPMeshpatch *patch = SP_MESHPATCH(&po);
// std::cout << "SPMeshNodeArray::read: row size: " << nodes.size() << std::endl;
SPMeshPatchI new_patch( &nodes, irow, icolumn ); // Adds new nodes.
@@ -652,15 +652,15 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) {
// Only 'top' side defined for first row.
if( irow != 0 ) ++istop;
- for ( SPObject *so = po->firstChild() ; so ; so = so->getNext() ) {
- if (SP_IS_STOP(so)) {
+ for (auto& so: po.children) {
+ if (SP_IS_STOP(&so)) {
if( istop > 3 ) {
// std::cout << " Mesh Gradient: Too many stops: " << istop << std::endl;
break;
}
- SPStop *stop = SP_STOP(so);
+ SPStop *stop = SP_STOP(&so);
// Handle top of first row.
if( istop == 0 && icolumn == 0 ) {
@@ -848,15 +848,15 @@ void SPMeshNodeArray::write( SPMesh *mg ) {
// First we must delete reprs for old mesh rows and patches.
GSList *descendant_reprs = NULL;
GSList *descendant_objects = NULL;
- for ( SPObject *row = mg->firstChild(); row; row = row->getNext() ) {
- descendant_reprs = g_slist_prepend (descendant_reprs, row->getRepr());
- descendant_objects = g_slist_prepend (descendant_objects, row );
- for ( SPObject *patch = row->firstChild(); patch; patch = patch->getNext() ) {
- descendant_reprs = g_slist_prepend (descendant_reprs, patch->getRepr());
- descendant_objects = g_slist_prepend (descendant_objects, patch );
- for ( SPObject *stop = patch->firstChild(); stop; stop = stop->getNext() ) {
- descendant_reprs = g_slist_prepend (descendant_reprs, stop->getRepr());
- descendant_objects = g_slist_prepend (descendant_objects, stop );
+ for (auto& row: mg->children) {
+ descendant_reprs = g_slist_prepend (descendant_reprs, row.getRepr());
+ descendant_objects = g_slist_prepend (descendant_objects, &row);
+ for (auto& patch: row.children) {
+ descendant_reprs = g_slist_prepend (descendant_reprs, patch.getRepr());
+ descendant_objects = g_slist_prepend (descendant_objects, &patch);
+ for (auto& stop: patch.children) {
+ descendant_reprs = g_slist_prepend (descendant_reprs, stop.getRepr());
+ descendant_objects = g_slist_prepend (descendant_objects, &stop);
}
}
}
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 45e3d4cf8..b9526433f 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -246,9 +246,9 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) {
this->readAttr( "inkscape:lockguides" );
/* Construct guideline list */
- for (SPObject *o = this->firstChild() ; o; o = o->getNext() ) {
- if (SP_IS_GUIDE(o)) {
- SPGuide * g = SP_GUIDE(o);
+ for (auto& o: children) {
+ if (SP_IS_GUIDE(&o)) {
+ SPGuide * g = SP_GUIDE(&o);
this->guides.push_back(g);
//g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL);
g->setColor(this->guidecolor);
@@ -856,9 +856,9 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop)
}
// if that didn't work out, look for the topmost layer
if (!layer) {
- for ( SPObject *iter = document->getRoot()->firstChild(); iter ; iter = iter->getNext() ) {
- if (desktop->isLayer(iter)) {
- layer = iter;
+ for (auto& iter: document->getRoot()->children) {
+ if (desktop->isLayer(&iter)) {
+ layer = &iter;
}
}
}
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp
index c3967461e..62c6f7a87 100644
--- a/src/sp-object-group.cpp
+++ b/src/sp-object-group.cpp
@@ -50,8 +50,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks
}
GSList *l = 0;
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags);
+ for (auto& child: children) {
+ Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags);
if (crepr) {
l = g_slist_prepend(l, crepr);
@@ -64,8 +64,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks
l = g_slist_remove(l, l->data);
}
} else {
- for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- child->updateRepr(flags);
+ for (auto& child: children) {
+ child.updateRepr(flags);
}
}
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 9cb386026..0cd7b371e 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -7,8 +7,9 @@
* Stephen Silver <sasilver@users.sourceforge.net>
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
+ * Adrian Boguszewski
*
- * Copyright (C) 1999-2008 authors
+ * Copyright (C) 1999-2016 authors
* Copyright (C) 2001-2002 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -16,6 +17,7 @@
#include <cstring>
#include <string>
+#include <boost/range/adaptor/transformed.hpp>
#include "helper/sp-marshal.h"
#include "xml/node-event-vector.h"
@@ -114,8 +116,7 @@ static gchar *sp_object_get_unique_id(SPObject *object,
*/
SPObject::SPObject()
: cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0),
- document(NULL), parent(NULL), children(NULL), _last_child(NULL),
- next(NULL), id(NULL), repr(NULL), refCount(1),hrefList(std::list<SPObject*>()),
+ document(NULL), parent(NULL), id(NULL), repr(NULL), refCount(1), hrefList(std::list<SPObject*>()),
_successor(NULL), _collection_policy(SPObject::COLLECT_WITH_PARENT),
_label(NULL), _default_label(NULL)
{
@@ -148,6 +149,9 @@ SPObject::~SPObject() {
sp_object_unref(this->_successor, NULL);
this->_successor = NULL;
}
+ if (parent) {
+ parent->children.erase(parent->children.iterator_to(*this));
+ }
if( style == NULL ) {
// style pointer could be NULL if unreffed too many times.
@@ -396,13 +400,12 @@ void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr)
}
std::vector<SPObject*> SPObject::childList(bool add_ref, Action) {
- std::vector<SPObject*> l;
- for ( SPObject *child = firstChild() ; child; child = child->getNext() ) {
+ std::vector<SPObject*> l;
+ for (auto& child: children) {
if (add_ref) {
- sp_object_ref (child);
+ sp_object_ref(&child);
}
-
- l.push_back(child);
+ l.push_back(&child);
}
return l;
@@ -465,9 +468,9 @@ void SPObject::requestOrphanCollection() {
}
void SPObject::_sendDeleteSignalRecursive() {
- for (SPObject *child = firstChild(); child; child = child->getNext()) {
- child->_delete_signal.emit(child);
- child->_sendDeleteSignalRecursive();
+ for (auto& child: children) {
+ child._delete_signal.emit(&child);
+ child._sendDeleteSignalRecursive();
}
}
@@ -495,12 +498,12 @@ void SPObject::deleteObject(bool propagate, bool propagate_descendants)
void SPObject::cropToObject(SPObject *except)
{
std::vector<SPObject*> toDelete;
- for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- if (child->isAncestorOf(except)) {
- child->cropToObject(except);
- } else if(child != except) {
- toDelete.push_back(child);
+ for (auto& child: children) {
+ if (SP_IS_ITEM(&child)) {
+ if (child.isAncestorOf(except)) {
+ child.cropToObject(except);
+ } else if(&child != except) {
+ toDelete.push_back(&child);
}
}
}
@@ -523,60 +526,29 @@ void SPObject::attach(SPObject *object, SPObject *prev)
object->parent = this;
this->_updateTotalHRefCount(object->_total_hrefcount);
- SPObject *next;
- if (prev) {
- next = prev->next;
- prev->next = object;
- } else {
- next = this->children;
- this->children = object;
- }
- object->next = next;
- if (!next) {
- this->_last_child = object;
+ auto it = children.begin();
+ if (prev != nullptr) {
+ it = ++children.iterator_to(*prev);
}
+ children.insert(it, *object);
+
if (!object->xml_space.set)
object->xml_space.value = this->xml_space.value;
}
-void SPObject::reorder(SPObject *prev)
-{
- //g_return_if_fail(object != NULL);
- //g_return_if_fail(SP_IS_OBJECT(object));
- g_return_if_fail(this->parent != NULL);
- g_return_if_fail(this != prev);
- g_return_if_fail(!prev || SP_IS_OBJECT(prev));
- g_return_if_fail(!prev || prev->parent == this->parent);
-
- SPObject *const parent=this->parent;
+void SPObject::reorder(SPObject* obj, SPObject* prev) {
+ g_return_if_fail(obj != nullptr);
+ g_return_if_fail(obj->parent);
+ g_return_if_fail(obj->parent == this);
+ g_return_if_fail(obj != prev);
+ g_return_if_fail(!prev || prev->parent == obj->parent);
- SPObject *old_prev=NULL;
- for ( SPObject *child = parent->children ; child && child != this ;
- child = child->next )
- {
- old_prev = child;
+ auto it = children.begin();
+ if (prev != nullptr) {
+ it = ++children.iterator_to(*prev);
}
- SPObject *next=this->next;
- if (old_prev) {
- old_prev->next = next;
- } else {
- parent->children = next;
- }
- if (!next) {
- parent->_last_child = old_prev;
- }
- if (prev) {
- next = prev->next;
- prev->next = this;
- } else {
- next = parent->children;
- parent->children = this;
- }
- this->next = next;
- if (!next) {
- parent->_last_child = this;
- }
+ children.splice(it, children, children.iterator_to(*obj));
}
void SPObject::detach(SPObject *object)
@@ -587,26 +559,9 @@ void SPObject::detach(SPObject *object)
g_return_if_fail(SP_IS_OBJECT(object));
g_return_if_fail(object->parent == this);
+ children.erase(children.iterator_to(*object));
object->releaseReferences();
- SPObject *prev=NULL;
- for ( SPObject *child = this->children ; child && child != object ;
- child = child->next )
- {
- prev = child;
- }
-
- SPObject *next=object->next;
- if (prev) {
- prev->next = next;
- } else {
- this->children = next;
- }
- if (!next) {
- this->_last_child = prev;
- }
-
- object->next = NULL;
object->parent = NULL;
this->_updateTotalHRefCount(-object->_total_hrefcount);
@@ -616,14 +571,14 @@ void SPObject::detach(SPObject *object)
SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr)
{
g_return_val_if_fail(repr != NULL, NULL);
- SPObject *result = 0;
+ SPObject *result = nullptr;
- if ( _last_child && (_last_child->getRepr() == repr) ) {
- result = _last_child; // optimization for common scenario
+ if (children.size() > 0 && children.back().getRepr() == repr) {
+ result = &children.back(); // optimization for common scenario
} else {
- for ( SPObject *child = children ; child ; child = child->next ) {
- if ( child->getRepr() == repr ) {
- result = child;
+ for (auto& child: children) {
+ if (child.getRepr() == repr) {
+ result = &child;
break;
}
}
@@ -654,10 +609,12 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
void SPObject::release() {
SPObject* object = this;
-
debug("id=%p, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object));
- while (object->children) {
- object->detach(object->children);
+ auto tmp = children | boost::adaptors::transformed([](SPObject& obj){return &obj;});
+ std::vector<SPObject *> toRelease(tmp.begin(), tmp.end());
+
+ for (auto& p: toRelease) {
+ object->detach(p);
}
}
@@ -678,7 +635,7 @@ void SPObject::order_changed(Inkscape::XML::Node *child, Inkscape::XML::Node * /
SPObject *ochild = object->get_child_by_repr(child);
g_return_if_fail(ochild != NULL);
SPObject *prev = new_ref ? object->get_child_by_repr(new_ref) : NULL;
- ochild->reorder(prev);
+ object->reorder(ochild, prev);
ochild->_position_changed_signal.emit(ochild);
}
@@ -840,15 +797,22 @@ void SPObject::releaseReferences() {
SPObject *SPObject::getPrev()
{
- SPObject *prev = 0;
- for ( SPObject *obj = parent->firstChild(); obj && !prev; obj = obj->getNext() ) {
- if (obj->getNext() == this) {
- prev = obj;
- }
+ SPObject *prev = nullptr;
+ if (parent && !parent->children.empty() && &parent->children.front() != this) {
+ prev = &*(--parent->children.iterator_to(*this));
}
return prev;
}
+SPObject* SPObject::getNext()
+{
+ SPObject *next = nullptr;
+ if (parent && !parent->children.empty() && &parent->children.back() != this) {
+ next = &*(++parent->children.iterator_to(*this));
+ }
+ return next;
+}
+
void SPObject::repr_child_added(Inkscape::XML::Node * /*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data)
{
SPObject *object = SP_OBJECT(data);
@@ -1512,8 +1476,11 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool
}
else {
// remove the current content of the 'text' or 'desc' element
- SPObject *child;
- while (NULL != (child = elem->firstChild())) child->deleteObject();
+ auto tmp = elem->children | boost::adaptors::transformed([](SPObject& obj) { return &obj; });
+ std::vector<SPObject*> vec(tmp.begin(), tmp.end());
+ for (auto &child: vec) {
+ child->deleteObject();
+ }
}
// add the new content
@@ -1521,33 +1488,33 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool
return true;
}
-SPObject * SPObject::findFirstChild(gchar const *tagname) const
+SPObject* SPObject::findFirstChild(gchar const *tagname) const
{
- for (SPObject *child = children; child; child = child->next)
+ for (auto& child: const_cast<SPObject*>(this)->children)
{
- if (child->repr->type() == Inkscape::XML::ELEMENT_NODE &&
- !strcmp(child->repr->name(), tagname)) {
- return child;
+ if (child.repr->type() == Inkscape::XML::ELEMENT_NODE &&
+ !strcmp(child.repr->name(), tagname)) {
+ return &child;
}
}
- return NULL;
+ return nullptr;
}
char* SPObject::textualContent() const
{
GString* text = g_string_new("");
- for (const SPObject *child = firstChild(); child; child = child->next)
+ for (auto& child: children)
{
- Inkscape::XML::NodeType child_type = child->repr->type();
+ Inkscape::XML::NodeType child_type = child.repr->type();
if (child_type == Inkscape::XML::ELEMENT_NODE) {
- char* new_string = child->textualContent();
+ char* new_string = child.textualContent();
g_string_append(text, new_string);
g_free(new_string);
}
else if (child_type == Inkscape::XML::TEXT_NODE) {
- g_string_append(text, child->repr->content());
+ g_string_append(text, child.repr->content());
}
}
return g_string_free(text, FALSE);
@@ -1564,8 +1531,8 @@ void SPObject::recursivePrintTree( unsigned level )
std::cout << " ";
}
std::cout << (getId()?getId():"No object id") << std::endl;
- for (SPObject *child = children; child; child = child->next) {
- child->recursivePrintTree( level+1 );
+ for (auto& child: children) {
+ child.recursivePrintTree(level + 1);
}
}
diff --git a/src/sp-object.h b/src/sp-object.h
index 70d3e5df5..1c6212664 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -6,8 +6,9 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
+ * Adrian Boguszewski
*
- * Copyright (C) 1999-2002 authors
+ * Copyright (C) 1999-2016 authors
* Copyright (C) 2001-2002 Ximian, Inc.
*
* Released under GNU GPL, read the file 'COPYING' for more information
@@ -53,6 +54,7 @@ class SPObject;
#include <sigc++/functors/slot.h>
#include <sigc++/signal.h>
#include <vector>
+#include <boost/intrusive/list.hpp>
#include "version.h"
#include "util/forward-pointer-iterator.h"
@@ -206,9 +208,6 @@ public:
unsigned int _total_hrefcount; /* our hrefcount + total descendants */
SPDocument *document; /* Document we are part of */
SPObject *parent; /* Our parent (only one allowed) */
- SPObject *children; /* Our children */
- SPObject *_last_child; /* Remembered last child */
- SPObject *next; /* Next object in linked list */
private:
SPObject(const SPObject&);
@@ -216,6 +215,7 @@ private:
char *id; /* Our very own unique id */
Inkscape::XML::Node *repr; /* Our xml representation */
+
public:
int refCount;
std::list<SPObject*> hrefList;
@@ -279,17 +279,9 @@ public:
return object->parent;
}
};
- /// Switch containing next() method.
- struct SiblingIteratorStrategy {
- static SPObject const *next(SPObject const *object) {
- return object->next;
- }
- };
typedef Inkscape::Util::ForwardPointerIterator<SPObject, ParentIteratorStrategy> ParentIterator;
typedef Inkscape::Util::ForwardPointerIterator<SPObject const, ParentIteratorStrategy> ConstParentIterator;
- typedef Inkscape::Util::ForwardPointerIterator<SPObject, SiblingIteratorStrategy> SiblingIterator;
- typedef Inkscape::Util::ForwardPointerIterator<SPObject const, SiblingIteratorStrategy> ConstSiblingIterator;
bool isSiblingOf(SPObject const *object) const {
if (object == NULL) return false;
@@ -306,24 +298,21 @@ public:
*/
SPObject const *nearestCommonAncestor(SPObject const *object) const;
- /* A non-const version can be similarly constructed if you want one.
- * (Don't just cast away the constness, which would be ill-formed.) */
- SPObject *getNext() {return next;}
-
- SPObject const *getNext() const {return next;}
+ /* Returns next object in sibling list or NULL. */
+ SPObject *getNext();
/**
* Returns previous object in sibling list or NULL.
*/
SPObject *getPrev();
- bool hasChildren() const { return ( children != NULL ); }
+ bool hasChildren() const { return ( children.size() > 0 ); }
- SPObject *firstChild() { return children; }
- SPObject const *firstChild() const { return children; }
+ SPObject *firstChild() { return children.empty() ? nullptr : &children.front(); }
+ SPObject const *firstChild() const { return children.empty() ? nullptr : &children.front(); }
- SPObject *lastChild() { return _last_child; }
- SPObject const *lastChild() const { return _last_child; }
+ SPObject *lastChild() { return children.empty() ? nullptr : &children.back(); }
+ SPObject const *lastChild() const { return children.empty() ? nullptr : &children.back(); }
enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow };
@@ -681,9 +670,9 @@ public:
void attach(SPObject *object, SPObject *prev);
/**
- * In list of object's siblings, move object behind prev.
+ * In list of object's children, move object behind prev.
*/
- void reorder(SPObject *prev);
+ void reorder(SPObject* obj, SPObject *prev);
/**
* Remove object from parent's children, release and unref it.
@@ -858,7 +847,17 @@ protected:
virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags);
+ typedef boost::intrusive::list_member_hook<> ListHook;
+ ListHook _child_hook;
public:
+ typedef boost::intrusive::list<
+ SPObject,
+ boost::intrusive::member_hook<
+ SPObject,
+ ListHook,
+ &SPObject::_child_hook
+ >> ChildrenList;
+ ChildrenList children;
virtual void read_content();
void recursivePrintTree(unsigned level = 0); // For debugging
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp
index a68bee721..77fa9034d 100644
--- a/src/sp-pattern.cpp
+++ b/src/sp-pattern.cpp
@@ -219,8 +219,8 @@ void SPPattern::_getChildren(std::list<SPObject *> &l)
{
for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) {
if (pat_i->firstChild()) { // find the first one with children
- for (SPObject *child = pat_i->firstChild(); child; child = child->getNext()) {
- l.push_back(child);
+ for (auto& child: pat_i->children) {
+ l.push_back(&child);
}
break; // do not go further up the chain if children are found
}
@@ -315,8 +315,8 @@ guint SPPattern::_countHrefs(SPObject *o) const
i++;
}
- for (SPObject *child = o->firstChild(); child != NULL; child = child->next) {
- i += _countHrefs(child);
+ for (auto& child: o->children) {
+ i += _countHrefs(&child);
}
return i;
@@ -504,13 +504,13 @@ Geom::OptRect SPPattern::viewbox() const
bool SPPattern::_hasItemChildren() const
{
- bool hasChildren = false;
- for (SPObject const *child = firstChild(); child && !hasChildren; child = child->getNext()) {
- if (SP_IS_ITEM(child)) {
- hasChildren = true;
+ for (auto& child: children) {
+ if (SP_IS_ITEM(&child)) {
+ return true;
}
}
- return hasChildren;
+
+ return false;
}
bool SPPattern::isValid() const
@@ -554,12 +554,12 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b
Inkscape::DrawingGroup *root = new Inkscape::DrawingGroup(drawing);
drawing.setRoot(root);
- for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) {
- if (SP_IS_ITEM(child)) {
+ for (auto& child: shown->children) {
+ if (SP_IS_ITEM(&child)) {
// for each item in pattern, show it on our drawing, add to the group,
// and connect to the release signal in case the item gets deleted
Inkscape::DrawingItem *cai;
- cai = SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY);
+ cai = SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY);
root->appendChild(cai);
}
}
@@ -650,9 +650,9 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b
// Render drawing to pattern_surface via drawing context, this calls root->render
// which is really DrawingItem->render().
drawing.render(dc, one_tile);
- for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) {
- if (SP_IS_ITEM(child)) {
- SP_ITEM(child)->invoke_hide(dkey);
+ for (auto& child: shown->children) {
+ if (SP_IS_ITEM(&child)) {
+ SP_ITEM(&child)->invoke_hide(dkey);
}
}
diff --git a/src/sp-root.cpp b/src/sp-root.cpp
index 98eae2159..34047054a 100644
--- a/src/sp-root.cpp
+++ b/src/sp-root.cpp
@@ -73,9 +73,9 @@ void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr)
SPGroup::build(document, repr);
// Search for first <defs> node
- for (SPObject *o = this->firstChild() ; o ; o = o->getNext()) {
- if (SP_IS_DEFS(o)) {
- this->defs = SP_DEFS(o);
+ for (auto& o: children) {
+ if (SP_IS_DEFS(&o)) {
+ this->defs = SP_DEFS(&o);
break;
}
}
@@ -174,9 +174,9 @@ void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
if (co && SP_IS_DEFS(co)) {
// We search for first <defs> node - it is not beautiful, but works
- for (SPObject *c = this->firstChild() ; c ; c = c->getNext()) {
- if (SP_IS_DEFS(c)) {
- this->defs = SP_DEFS(c);
+ for (auto& c: children) {
+ if (SP_IS_DEFS(&c)) {
+ this->defs = SP_DEFS(&c);
break;
}
}
@@ -189,7 +189,8 @@ void SPRoot::remove_child(Inkscape::XML::Node *child)
SPObject *iter = 0;
// We search for first remaining <defs> node - it is not beautiful, but works
- for (iter = this->firstChild() ; iter ; iter = iter->getNext()) {
+ for (auto& child: children) {
+ iter = &child;
if (SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs) {
this->defs = (SPDefs *)iter;
break;
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index 1e0d81db9..d6ab1e904 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -31,9 +31,10 @@ SPSwitch::~SPSwitch() {
SPObject *SPSwitch::_evaluateFirst() {
SPObject *first = 0;
- for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) {
- if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) {
- first = child;
+ for (auto& child: children) {
+ if (SP_IS_ITEM(&child) && sp_item_evaluate(SP_ITEM(&child))) {
+ first = &child;
+ break;
}
}
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index 2e1d4993d..9beb812f5 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -150,9 +150,9 @@ void SPText::update(SPCtx *ctx, guint flags) {
// Create temporary list of children
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child, this);
- l = g_slist_prepend (l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child, this);
+ l = g_slist_prepend (l, &child);
}
l = g_slist_reverse (l);
@@ -230,9 +230,9 @@ void SPText::modified(guint flags) {
// Create temporary list of children
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- sp_object_ref(child, this);
- l = g_slist_prepend (l, child);
+ for (auto& child: children) {
+ sp_object_ref(&child, this);
+ l = g_slist_prepend (l, &child);
}
l = g_slist_reverse (l);
@@ -257,17 +257,17 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
GSList *l = NULL;
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ for (auto& child: children) {
+ if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) {
continue;
}
Inkscape::XML::Node *crepr = NULL;
- if (SP_IS_STRING(child)) {
- crepr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if (SP_IS_STRING(&child)) {
+ crepr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
} else {
- crepr = child->updateRepr(xml_doc, NULL, flags);
+ crepr = child.updateRepr(xml_doc, NULL, flags);
}
if (crepr) {
@@ -281,15 +281,15 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X
l = g_slist_remove (l, l->data);
}
} else {
- for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TITLE(child) || SP_IS_DESC(child)) {
+ for (auto& child: children) {
+ if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) {
continue;
}
- if (SP_IS_STRING(child)) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ if (SP_IS_STRING(&child)) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
} else {
- child->updateRepr(flags);
+ child.updateRepr(flags);
}
}
}
@@ -601,16 +601,16 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio
}
}
- for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) {
- SPString *str = dynamic_cast<SPString *>(child);
+ for (auto& child: root->children) {
+ SPString *str = dynamic_cast<SPString *>(&child);
if (str) {
Glib::ustring const &string = str->string;
// std::cout << " Appending: >" << string << "<" << std::endl;
- layout.appendText(string, root->style, child, &optional_attrs, child_attrs_offset + length);
+ layout.appendText(string, root->style, &child, &optional_attrs, child_attrs_offset + length);
length += string.length();
- } else if (!sp_repr_is_meta_element(child->getRepr())) {
+ } else if (!sp_repr_is_meta_element(child.getRepr())) {
/* ^^^^ XML Tree being directly used here while it shouldn't be.*/
- length += _buildLayoutInput(child, optional_attrs, child_attrs_offset + length, in_textpath);
+ length += _buildLayoutInput(&child, optional_attrs, child_attrs_offset + length, in_textpath);
}
}
@@ -623,9 +623,9 @@ void SPText::rebuildLayout()
Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs;
_buildLayoutInput(this, optional_attrs, 0, false);
layout.calculateFlow();
- for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TEXTPATH(child)) {
- SPTextPath const *textpath = SP_TEXTPATH(child);
+ for (auto& child: children) {
+ if (SP_IS_TEXTPATH(&child)) {
+ SPTextPath const *textpath = SP_TEXTPATH(&child);
if (textpath->originalPath != NULL) {
//g_print("%s", layout.dumpAsText().c_str());
layout.fitToPathAlign(textpath->startOffset, *textpath->originalPath);
@@ -635,9 +635,9 @@ void SPText::rebuildLayout()
//g_print("%s", layout.dumpAsText().c_str());
// set the x,y attributes on role:line spans
- for (SPObject *child = firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_TSPAN(child)) {
- SPTSpan *tspan = SP_TSPAN(child);
+ for (auto& child: children) {
+ if (SP_IS_TSPAN(&child)) {
+ SPTSpan *tspan = SP_TSPAN(&child);
if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED)
&& tspan->attributes.singleXYCoordinates() ) {
Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan);
@@ -671,9 +671,9 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root)
item->updateRepr();
}
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o))
- _adjustFontsizeRecursive(SP_ITEM(o), ex, false);
+ for(auto& o: item->children) {
+ if (SP_IS_ITEM(&o))
+ _adjustFontsizeRecursive(SP_ITEM(&o), ex, false);
}
}
@@ -690,9 +690,9 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double
SP_TREF(item)->attributes.transform(m, ex, ex, is_root);
}
- for (SPObject *o = item->children; o != NULL; o = o->next) {
- if (SP_IS_ITEM(o))
- _adjustCoordsRecursive(SP_ITEM(o), m, ex, false);
+ for(auto& o: item->children) {
+ if (SP_IS_ITEM(&o))
+ _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false);
}
}
diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp
index 20bfc8cd0..e25ddb5a4 100644
--- a/src/sp-tref.cpp
+++ b/src/sp-tref.cpp
@@ -501,9 +501,9 @@ sp_tref_convert_to_tspan(SPObject *obj)
////////////////////
else {
GSList *l = NULL;
- for (SPObject *child = obj->firstChild() ; child != NULL ; child = child->getNext() ) {
- sp_object_ref(child, obj);
- l = g_slist_prepend (l, child);
+ for (auto& child: obj->children) {
+ sp_object_ref(&child, obj);
+ l = g_slist_prepend (l, &child);
}
l = g_slist_reverse (l);
while (l) {
diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp
index 2b4ecf92b..2e169ad77 100644
--- a/src/sp-tspan.cpp
+++ b/src/sp-tspan.cpp
@@ -94,9 +94,9 @@ void SPTSpan::update(SPCtx *ctx, guint flags) {
}
childflags &= SP_OBJECT_MODIFIED_CASCADE;
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) {
- ochild->updateDisplay(ctx, childflags);
+ for (auto& ochild: children) {
+ if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) {
+ ochild.updateDisplay(ctx, childflags);
}
}
@@ -126,9 +126,9 @@ void SPTSpan::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) {
- ochild->emitModified(flags);
+ for (auto& ochild: children) {
+ if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) {
+ ochild.emitModified(flags);
}
}
}
@@ -173,15 +173,15 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape::
if ( flags&SP_OBJECT_WRITE_BUILD ) {
GSList *l = NULL;
- for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node* c_repr=NULL;
- if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_TEXTPATH(child) ) {
- //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_TEXTPATH(&child) ) {
+ //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen
+ } else if ( SP_IS_STRING(&child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
}
if ( c_repr ) {
@@ -195,13 +195,13 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape::
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_TEXTPATH(child) ) {
+ for (auto& child: children) {
+ if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_TEXTPATH(&child) ) {
//c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen
- } else if ( SP_IS_STRING(child) ) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ } else if ( SP_IS_STRING(&child) ) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
}
}
}
@@ -311,9 +311,9 @@ void SPTextPath::update(SPCtx *ctx, guint flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) {
- ochild->updateDisplay(ctx, flags);
+ for (auto& ochild: children) {
+ if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) {
+ ochild.updateDisplay(ctx, flags);
}
}
@@ -365,9 +365,9 @@ void SPTextPath::modified(unsigned int flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) {
- ochild->emitModified(flags);
+ for (auto& ochild: children) {
+ if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) {
+ ochild.emitModified(flags);
}
}
}
@@ -397,15 +397,15 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap
if ( flags & SP_OBJECT_WRITE_BUILD ) {
GSList *l = NULL;
- for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: children) {
Inkscape::XML::Node* c_repr=NULL;
- if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
- c_repr = child->updateRepr(xml_doc, NULL, flags);
- } else if ( SP_IS_TEXTPATH(child) ) {
+ if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) {
+ c_repr = child.updateRepr(xml_doc, NULL, flags);
+ } else if ( SP_IS_TEXTPATH(&child) ) {
//c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen
- } else if ( SP_IS_STRING(child) ) {
- c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str());
+ } else if ( SP_IS_STRING(&child) ) {
+ c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str());
}
if ( c_repr ) {
@@ -419,13 +419,13 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap
l = g_slist_remove(l, l->data);
}
} else {
- for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) {
- if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) {
- child->updateRepr(flags);
- } else if ( SP_IS_TEXTPATH(child) ) {
- //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen
- } else if ( SP_IS_STRING(child) ) {
- child->getRepr()->setContent(SP_STRING(child)->string.c_str());
+ for (auto& child: children) {
+ if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) {
+ child.updateRepr(flags);
+ } else if ( SP_IS_TEXTPATH(&child) ) {
+ //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen
+ } else if ( SP_IS_STRING(&child) ) {
+ child.getRepr()->setContent(SP_STRING(&child)->string.c_str());
}
}
}
@@ -464,8 +464,8 @@ void sp_textpath_to_text(SPObject *tp)
// make a list of textpath children
GSList *tp_reprs = NULL;
- for (SPObject *o = tp->firstChild() ; o != NULL; o = o->next) {
- tp_reprs = g_slist_prepend(tp_reprs, o->getRepr());
+ for (auto& o: tp->children) {
+ tp_reprs = g_slist_prepend(tp_reprs, o.getRepr());
}
for ( GSList *i = tp_reprs ; i ; i = i->next ) {
diff --git a/src/sp-use.cpp b/src/sp-use.cpp
index 59064ce21..6ba03dad9 100644
--- a/src/sp-use.cpp
+++ b/src/sp-use.cpp
@@ -435,27 +435,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) {
//BUT move clippaths accordingly.
//if clone has a clippath, move it accordingly
if(clip_ref->getObject()){
- SPObject *clip = clip_ref->getObject()->firstChild() ;
- while(clip){
- SPItem *item = (SPItem*) clip;
+ for(auto& clip: clip_ref->getObject()->children){
+ SPItem *item = (SPItem*) &clip;
if(item){
item->transform *= m;
Geom::Affine identity;
- item->doWriteTransform(clip->getRepr(),item->transform, &identity);
+ item->doWriteTransform(clip.getRepr(),item->transform, &identity);
}
- clip = clip->getNext();
}
}
if(mask_ref->getObject()){
- SPObject *mask = mask_ref->getObject()->firstChild() ;
- while(mask){
- SPItem *item = (SPItem*) mask;
+ for(auto& mask: mask_ref->getObject()->children){
+ SPItem *item = (SPItem*) &mask;
if(item){
item->transform *= m;
Geom::Affine identity;
- item->doWriteTransform(mask->getRepr(),item->transform, &identity);
+ item->doWriteTransform(mask.getRepr(),item->transform, &identity);
}
- mask = mask->getNext();
}
}
return;
@@ -479,27 +475,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) {
//if clone has a clippath, move it accordingly
if(clip_ref->getObject()){
- SPObject *clip = clip_ref->getObject()->firstChild() ;
- while(clip){
- SPItem *item = (SPItem*) clip;
+ for(auto& clip: clip_ref->getObject()->children){
+ SPItem *item = (SPItem*) &clip;
if(item){
item->transform *= clone_move.inverse();
Geom::Affine identity;
- item->doWriteTransform(clip->getRepr(),item->transform, &identity);
+ item->doWriteTransform(clip.getRepr(),item->transform, &identity);
}
- clip = clip->getNext();
}
}
if(mask_ref->getObject()){
- SPObject *mask = mask_ref->getObject()->firstChild() ;
- while(mask){
- SPItem *item = (SPItem*) mask;
+ for(auto& mask: mask_ref->getObject()->children){
+ SPItem *item = (SPItem*) &mask;
if(item){
item->transform *= clone_move.inverse();
Geom::Affine identity;
- item->doWriteTransform(mask->getRepr(),item->transform, &identity);
+ item->doWriteTransform(mask.getRepr(),item->transform, &identity);
}
- mask = mask->getNext();
}
}
diff --git a/src/splivarot.cpp b/src/splivarot.cpp
index c2e5a2f2e..7a5df4c97 100644
--- a/src/splivarot.cpp
+++ b/src/splivarot.cpp
@@ -34,7 +34,6 @@
#include "message-stack.h"
#include "selection.h"
-#include "desktop.h"
#include <glibmm/i18n.h>
#include "xml/repr-sorting.h"
@@ -48,65 +47,96 @@
#include "verbs.h"
#include "2geom/svg-path-parser.h" // to get from SVG on boolean to Geom::Path
+enum BoolOpErrors {
+ DONE,
+ DONE_NO_PATH,
+ DONE_NO_ACTION,
+ ERR_TOO_LESS_PATHS_1,
+ ERR_TOO_LESS_PATHS_2,
+ ERR_NO_PATHS,
+ ERR_Z_ORDER
+};
+
using Inkscape::DocumentUndo;
bool Ancetre(Inkscape::XML::Node *a, Inkscape::XML::Node *who);
-void sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb=SP_VERB_NONE, const Glib::ustring description="");
+void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop,
+ const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = "");
+BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet *set, bool_op bop);
void sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset);
void sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updating);
void
sp_selected_path_union(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union"));
}
void
-sp_selected_path_union_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop)
+sp_selected_path_union_skip_undo(Inkscape::ObjectSet *set)
{
- sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_NONE, _("Union"));
+ sp_selected_path_boolop(set, bool_op_union);
}
void
sp_selected_path_intersect(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection"));
+}
+
+void
+sp_selected_path_intersect_skip_undo(Inkscape::ObjectSet *set)
+{
+ sp_selected_path_boolop(set, bool_op_inters);
}
void
sp_selected_path_diff(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference"));
}
void
-sp_selected_path_diff_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop)
+sp_selected_path_diff_skip_undo(Inkscape::ObjectSet *set)
{
- sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_NONE, _("Difference"));
+ sp_selected_path_boolop(set, bool_op_diff);
}
void
sp_selected_path_symdiff(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion"));
+}
+
+void
+sp_selected_path_symdiff_skip_undo(Inkscape::ObjectSet *set)
+{
+ sp_selected_path_boolop(set, bool_op_symdiff);
}
+
void
sp_selected_path_cut(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division"));
}
void
-sp_selected_path_cut_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop)
+sp_selected_path_cut_skip_undo(Inkscape::ObjectSet *set)
{
- sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_NONE, _("Division"));
+ sp_selected_path_boolop(set, bool_op_cut);
}
void
sp_selected_path_slice(Inkscape::Selection *selection, SPDesktop *desktop)
{
- sp_selected_path_boolop(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path"));
+ sp_selected_path_boolop_ui(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path"));
+}
+
+void
+sp_selected_path_slice_skip_undo(Inkscape::ObjectSet *set)
+{
+ sp_selected_path_boolop(set, bool_op_slice);
}
// helper for printing error messages, regardless of whether we have a GUI or not
@@ -322,20 +352,17 @@ Geom::PathVector pathliv_to_pathvector(Path *pathliv){
// boolean operations on the desktop
// take the source paths from the file, do the operation, delete the originals and add the results
-void
-sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, const Glib::ustring description)
+BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet * set, bool_op bop)
{
- SPDocument *doc = selection->layers()->getDocument();
- std::vector<SPItem*> il= selection->itemList();
-
+ SPDocument *doc = set->desktop()->getDocument();
+ std::vector<SPItem*> il(set->items().begin(), set->items().end());
+
// allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334)
- if ( (il.size() < 2) && (bop != bool_op_union)) {
- boolop_display_error_message(desktop, _("Select <b>at least 2 paths</b> to perform a boolean operation."));
- return;
+ if (il.size() < 2 && bop != bool_op_union) {
+ return ERR_TOO_LESS_PATHS_2;
}
- else if ( il.size() < 1 ) {
- boolop_display_error_message(desktop, _("Select <b>at least 1 path</b> to perform a boolean union."));
- return;
+ else if (il.size() < 1) {
+ return ERR_TOO_LESS_PATHS_1;
}
g_assert(!il.empty());
@@ -351,8 +378,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
Inkscape::XML::Node *b = il.back()->getRepr();
if (a == NULL || b == NULL) {
- boolop_display_error_message(desktop, _("Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."));
- return;
+ return ERR_Z_ORDER;
}
if (Ancetre(a, b)) {
@@ -366,8 +392,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
// find their lowest common ancestor
Inkscape::XML::Node *parent = LCA(a, b);
if (parent == NULL) {
- boolop_display_error_message(desktop, _("Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."));
- return;
+ return ERR_Z_ORDER;
}
// find the children of the LCA that lead from it to the a and b
@@ -396,8 +421,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
SPItem *item = *l;
if (!SP_IS_SHAPE(item) && !SP_IS_TEXT(item) && !SP_IS_FLOWTEXT(item))
{
- boolop_display_error_message(desktop, _("One of the objects is <b>not a path</b>, cannot perform boolean operation."));
- return;
+ return ERR_NO_PATHS;
}
}
@@ -430,7 +454,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
if (originaux[curOrig] == NULL || originaux[curOrig]->descr_cmd.size() <= 1)
{
for (int i = curOrig; i >= 0; i--) delete originaux[i];
- return;
+ return DONE_NO_ACTION;
}
curOrig++;
}
@@ -491,18 +515,18 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
bool zeroA = theShapeA->numberOfEdges() == 0;
bool zeroB = theShapeB->numberOfEdges() == 0;
if (zeroA || zeroB) {
- // We might need to do a swap. Apply the above rules depending on operation type.
- bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA)
- || ((bop == bool_op_inters) && zeroB)
- || (bop == bool_op_diff);
+ // We might need to do a swap. Apply the above rules depending on operation type.
+ bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA)
+ || ((bop == bool_op_inters) && zeroB)
+ || (bop == bool_op_diff);
if (resultIsB) {
- // Swap A and B to use B as the result
+ // Swap A and B to use B as the result
Shape *swap = theShapeB;
theShapeB = theShapeA;
theShapeA = swap;
}
} else {
- // Just do the Boolean operation as usual
+ // Just do the Boolean operation as usual
// les elements arrivent en ordre inverse dans la liste
theShape->Booleen(theShapeB, theShapeA, bop);
Shape *swap = theShape;
@@ -663,24 +687,23 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){
(*l)->deleteObject();
}
- DocumentUndo::done(doc, SP_VERB_NONE, description);
- selection->clear();
+ set->clear();
delete res;
- return;
+ return DONE_NO_PATH;
}
// get the source path object
SPObject *source;
if ( bop == bool_op_diff || bop == bool_op_cut || bop == bool_op_slice ) {
if (reverseOrderForOp) {
- source = il[0];
+ source = il[0];
} else {
- source = il.back();
+ source = il.back();
}
} else {
// find out the bottom object
- std::vector<Inkscape::XML::Node*> sorted(selection->reprList());
+ std::vector<Inkscape::XML::Node*> sorted(set->xmlNodes().begin(), set->xmlNodes().end());
sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool);
@@ -708,7 +731,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
gchar *title = source->title();
gchar *desc = source->desc();
// remove source paths
- selection->clear();
+ set->clear();
for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){
// if this is the bottommost object,
if (!strcmp(reinterpret_cast<SPObject *>(*l)->getRepr()->attribute("id"), id)) {
@@ -787,7 +810,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
// move to the saved position
repr->setPosition(pos > 0 ? pos : 0);
- selection->add(repr);
+ set->add(doc->getObjectByRepr(repr));
Inkscape::GC::release(repr);
delete resPath[i];
@@ -815,14 +838,14 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
repr->setAttribute("id", id);
parent->appendChild(repr);
if (title) {
- doc->getObjectByRepr(repr)->setTitle(title);
- }
+ doc->getObjectByRepr(repr)->setTitle(title);
+ }
if (desc) {
- doc->getObjectByRepr(repr)->setDesc(desc);
+ doc->getObjectByRepr(repr)->setDesc(desc);
}
- repr->setPosition(pos > 0 ? pos : 0);
+ repr->setPosition(pos > 0 ? pos : 0);
- selection->add(repr);
+ set->add(doc->getObjectByRepr(repr));
Inkscape::GC::release(repr);
}
@@ -830,11 +853,39 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool
if (title) g_free(title);
if (desc) g_free(desc);
- if (verb != SP_VERB_NONE) {
- DocumentUndo::done(doc, verb, description);
- }
-
delete res;
+
+ return DONE;
+}
+
+void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb,
+ const Glib::ustring description)
+{
+ SPDocument *doc = selection->desktop()->getDocument();
+ BoolOpErrors returnCode = sp_selected_path_boolop(selection, bop);
+ switch(returnCode) {
+ case ERR_TOO_LESS_PATHS_1:
+ boolop_display_error_message(desktop, _("Select <b>at least 1 path</b> to perform a boolean union."));
+ return;
+ case ERR_TOO_LESS_PATHS_2:
+ boolop_display_error_message(desktop, _("Select <b>at least 2 paths</b> to perform a boolean operation."));
+ return;
+ case ERR_NO_PATHS:
+ boolop_display_error_message(desktop, _("One of the objects is <b>not a path</b>, cannot perform boolean operation."));
+ return;
+ case ERR_Z_ORDER:
+ boolop_display_error_message(desktop, _("Unable to determine the <b>z-order</b> of the objects selected for difference, XOR, division, or path cut."));
+ return;
+ case DONE_NO_PATH:
+ DocumentUndo::done(doc, SP_VERB_NONE, description);
+ return;
+ case DONE:
+ DocumentUndo::done(doc, verb, description);
+ return;
+ case DONE_NO_ACTION:
+ default:
+ return;
+ }
}
static
@@ -880,9 +931,9 @@ void item_outline_add_marker_child( SPItem const *item, Geom::Affine marker_tran
// note: a marker child item can be an item group!
if (SP_IS_GROUP(item)) {
// recurse through all childs:
- for (SPObject const *o = item->firstChild() ; o ; o = o->getNext() ) {
- if ( SP_IS_ITEM(o) ) {
- item_outline_add_marker_child(SP_ITEM(o), tr, pathv_in);
+ for (auto& o: item->children) {
+ if ( SP_IS_ITEM(&o) ) {
+ item_outline_add_marker_child(SP_ITEM(&o), tr, pathv_in);
}
}
} else {
@@ -1150,6 +1201,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy)
if (lpeitem) {
lpeitem->removeAllPathEffects(true);
}
+
SPGroup *group = dynamic_cast<SPGroup *>(item);
if (group) {
if (legacy) {
@@ -1638,7 +1690,7 @@ sp_selected_path_outline(SPDesktop *desktop, bool legacy)
bool scale_stroke = prefs->getBool("/options/transform/stroke", true);
prefs->setBool("/options/transform/stroke", true);
bool did = false;
- std::vector<SPItem*> il(selection->itemList());
+ std::vector<SPItem*> il(selection->items().begin(), selection->items().end());
for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){
SPItem *item = *l;
did = sp_item_path_outline(item, desktop, legacy);
@@ -1910,7 +1962,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset)
}
bool did = false;
- std::vector<SPItem*> il(selection->itemList());
+ std::vector<SPItem*> il(selection->items().begin(), selection->items().end());
for (std::vector<SPItem*>::const_iterator l = il.begin(); l != il.end(); l++){
SPItem *item = *l;
SPCurve *curve = NULL;
@@ -2335,7 +2387,7 @@ sp_selected_path_simplify_selection(SPDesktop *desktop, float threshold, bool ju
return;
}
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
bool didSomething = sp_selected_path_simplify_items(desktop, selection,
items, threshold,
diff --git a/src/splivarot.h b/src/splivarot.h
index 665946f71..6adc05946 100644
--- a/src/splivarot.h
+++ b/src/splivarot.h
@@ -17,6 +17,7 @@ class SPItem;
namespace Inkscape {
class Selection;
+ class ObjectSet;
}
// boolean operations
@@ -27,14 +28,17 @@ namespace Inkscape {
// command-line mode, i.e. without a desktop. If a desktop is not
// provided (desktop == NULL), error messages will be shown on stderr.
void sp_selected_path_union (Inkscape::Selection *selection, SPDesktop *desktop);
-void sp_selected_path_union_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_union_skip_undo (Inkscape::ObjectSet *set);
void sp_selected_path_intersect (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_intersect_skip_undo (Inkscape::ObjectSet *set);
void sp_selected_path_diff (Inkscape::Selection *selection, SPDesktop *desktop);
-void sp_selected_path_diff_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_diff_skip_undo (Inkscape::ObjectSet *set);
void sp_selected_path_symdiff (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_symdiff_skip_undo (Inkscape::ObjectSet *set);
void sp_selected_path_cut (Inkscape::Selection *selection, SPDesktop *desktop);
-void sp_selected_path_cut_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_cut_skip_undo (Inkscape::ObjectSet *set);
void sp_selected_path_slice (Inkscape::Selection *selection, SPDesktop *desktop);
+void sp_selected_path_slice_skip_undo (Inkscape::ObjectSet *set);
// offset/inset of a curve
// takes the fill-rule in consideration
diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp
index ddadf8275..2b731c75d 100644
--- a/src/text-chemistry.cpp
+++ b/src/text-chemistry.cpp
@@ -42,8 +42,8 @@ using Inkscape::DocumentUndo;
static SPItem *
flowtext_in_selection(Inkscape::Selection *selection)
{
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
if (SP_IS_FLOWTEXT(*i))
return *i;
}
@@ -53,8 +53,8 @@ flowtext_in_selection(Inkscape::Selection *selection)
static SPItem *
text_or_flowtext_in_selection(Inkscape::Selection *selection)
{
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i))
return *i;
}
@@ -64,8 +64,8 @@ text_or_flowtext_in_selection(Inkscape::Selection *selection)
static SPItem *
shape_in_selection(Inkscape::Selection *selection)
{
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
if (SP_IS_SHAPE(*i))
return *i;
}
@@ -86,7 +86,7 @@ text_put_on_path()
Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc();
- if (!text || !shape || selection->itemList().size() != 2) {
+ if (!text || !shape || boost::distance(selection->items()) != 2) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>a text and a path</b> to put text on path."));
return;
}
@@ -141,8 +141,8 @@ text_put_on_path()
// make a list of text children
GSList *text_reprs = NULL;
- for (SPObject *o = text->children; o != NULL; o = o->next) {
- text_reprs = g_slist_prepend(text_reprs, o->getRepr());
+ for(auto& o: text->children) {
+ text_reprs = g_slist_prepend(text_reprs, o.getRepr());
}
// create textPath and put it into the text
@@ -195,8 +195,8 @@ text_remove_from_path()
}
bool did = false;
- std::vector<SPItem*> items(selection->itemList());
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPObject *obj = *i;
if (SP_IS_TEXT_TEXTPATH(obj)) {
@@ -213,7 +213,8 @@ text_remove_from_path()
} else {
DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_TEXT,
_("Remove text from path"));
- selection->setList(selection->itemList()); // reselect to update statusbar description
+ std::vector<SPItem *> vec(selection->items().begin(), selection->items().end());
+ selection->setList(vec); // reselect to update statusbar description
}
}
@@ -238,9 +239,9 @@ text_remove_all_kerns_recursively(SPObject *o)
g_strfreev(xa_comma);
}
- for (SPObject *i = o->firstChild(); i != NULL; i = i->getNext()) {
- text_remove_all_kerns_recursively(i);
- i->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
+ for (auto& i: o->children) {
+ text_remove_all_kerns_recursively(&i);
+ i.requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG);
}
}
@@ -259,8 +260,8 @@ text_remove_all_kerns()
bool did = false;
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPObject *obj = *i;
if (!SP_IS_TEXT(obj) && !SP_IS_TSPAN(obj) && !SP_IS_FLOWTEXT(obj)) {
@@ -295,7 +296,7 @@ text_flow_into_shape()
SPItem *text = text_or_flowtext_in_selection(selection);
SPItem *shape = shape_in_selection(selection);
- if (!text || !shape || selection->itemList().size() < 2) {
+ if (!text || !shape || boost::distance(selection->items()) < 2) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>a text</b> and one or more <b>paths or shapes</b> to flow text into frame."));
return;
}
@@ -319,8 +320,8 @@ text_flow_into_shape()
g_return_if_fail(SP_IS_FLOWREGION(object));
/* Add clones */
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPItem *item = *i;
if (SP_IS_SHAPE(item)){
Inkscape::XML::Node *clone = xml_doc->createElement("svg:use");
@@ -351,9 +352,9 @@ text_flow_into_shape()
Inkscape::GC::release(text_repr);
} else { // reflow an already flowed text, preserving paras
- for (SPObject *o = text->children; o != NULL; o = o->next) {
- if (SP_IS_FLOWPARA(o)) {
- Inkscape::XML::Node *para_repr = o->getRepr()->duplicate(xml_doc);
+ for(auto& o: text->children) {
+ if (SP_IS_FLOWPARA(&o)) {
+ Inkscape::XML::Node *para_repr = o.getRepr()->duplicate(xml_doc);
root_repr->appendChild(para_repr);
object = doc->getObjectByRepr(para_repr);
g_return_if_fail(SP_IS_FLOWPARA(object));
@@ -386,7 +387,7 @@ text_unflow ()
Inkscape::Selection *selection = desktop->getSelection();
- if (!flowtext_in_selection(selection) || selection->itemList().size() < 1) {
+ if (!flowtext_in_selection(selection) || boost::distance(selection->items()) < 1) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>a flowed text</b> to unflow it."));
return;
}
@@ -394,8 +395,8 @@ text_unflow ()
std::vector<SPItem*> new_objs;
GSList *old_objs = NULL;
- std::vector<SPItem*> items = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
if (!SP_IS_FLOWTEXT(*i)) {
continue;
@@ -479,7 +480,7 @@ flowtext_to_text()
bool did = false;
std::vector<Inkscape::XML::Node*> reprs;
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
SPItem *item = *i;
diff --git a/src/text-editing.cpp b/src/text-editing.cpp
index 6669abcef..6809a4bc5 100644
--- a/src/text-editing.cpp
+++ b/src/text-editing.cpp
@@ -89,8 +89,8 @@ bool sp_te_input_is_empty(SPObject const *item)
if (SP_IS_STRING(item)) {
empty = SP_STRING(item)->string.empty();
} else {
- for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
- if (!sp_te_input_is_empty(child)) {
+ for (auto& child: item->children) {
+ if (!sp_te_input_is_empty(&child)) {
empty = false;
break;
}
@@ -235,11 +235,11 @@ unsigned sp_text_get_length(SPObject const *item)
length++;
}
- for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
- if (SP_IS_STRING(child)) {
- length += SP_STRING(child)->string.length();
+ for (auto& child: item->children) {
+ if (SP_IS_STRING(&child)) {
+ length += SP_STRING(&child)->string.length();
} else {
- length += sp_text_get_length(child);
+ length += sp_text_get_length(&child);
}
}
}
@@ -265,22 +265,22 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto)
}
// Count the length of the children
- for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) {
- if (upto && child == upto) {
+ for (auto& child: item->children) {
+ if (upto && &child == upto) {
// hit upto, return immediately
return length;
}
- if (SP_IS_STRING(child)) {
- length += SP_STRING(child)->string.length();
+ if (SP_IS_STRING(&child)) {
+ length += SP_STRING(&child)->string.length();
}
else {
- if (upto && child->isAncestorOf(upto)) {
+ if (upto && child.isAncestorOf(upto)) {
// upto is below us, recurse and break loop
- length += sp_text_get_length_upto(child, upto);
+ length += sp_text_get_length_upto(&child, upto);
return length;
} else {
// recurse and go to the next sibling
- length += sp_text_get_length_upto(child, upto);
+ length += sp_text_get_length_upto(&child, upto);
}
}
}
@@ -321,8 +321,11 @@ to \a item at the same level. */
static unsigned sum_sibling_text_lengths_before(SPObject const *item)
{
unsigned char_index = 0;
- for (SPObject *sibling = item->parent->firstChild() ; sibling && sibling != item ; sibling = sibling->getNext()) {
- char_index += sp_text_get_length(sibling);
+ for (auto& sibling: item->parent->children) {
+ if (&sibling == item) {
+ break;
+ }
+ char_index += sp_text_get_length(&sibling);
}
return char_index;
}
@@ -855,11 +858,11 @@ static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *str
if (*pending_line_break) {
*string += '\n';
}
- for (SPObject const *child = root->firstChild() ; child ; child = child->getNext()) {
- if (SP_IS_STRING(child)) {
- *string += SP_STRING(child)->string;
+ for (auto& child: root->children) {
+ if (SP_IS_STRING(&child)) {
+ *string += SP_STRING(&child)->string;
} else {
- sp_te_get_ustring_multiline(child, string, pending_line_break);
+ sp_te_get_ustring_multiline(&child, string, pending_line_break);
}
}
if (!SP_IS_TEXT(root) && !SP_IS_TEXTPATH(root) && is_line_break_object(root)) {
@@ -939,13 +942,10 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str)
gchar *content = g_strdup (str);
repr->setContent("");
- SPObject *child = object->firstChild();
- while (child) {
- SPObject *next = child->getNext();
- if (!SP_IS_FLOWREGION(child) && !SP_IS_FLOWREGIONEXCLUDE(child)) {
- repr->removeChild(child->getRepr());
+ for (auto& child: object->children) {
+ if (!SP_IS_FLOWREGION(&child) && !SP_IS_FLOWREGIONEXCLUDE(&child)) {
+ repr->removeChild(child.getRepr());
}
- child = next;
}
gchar *p = content;
@@ -1403,17 +1403,17 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css)
{
sp_repr_css_change(o->getRepr(), const_cast<SPCSSAttr*>(css), "style");
- for (SPObject *child = o->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: o->children) {
if (sp_repr_css_property(const_cast<SPCSSAttr*>(css), "opacity", NULL) != NULL) {
// Unset properties which are accumulating and thus should not be set recursively.
// For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group.
SPCSSAttr *css_recurse = sp_repr_css_attr_new();
sp_repr_css_merge(css_recurse, const_cast<SPCSSAttr*>(css));
sp_repr_css_set_property(css_recurse, "opacity", NULL);
- apply_css_recursive(child, css_recurse);
+ apply_css_recursive(&child, css_recurse);
sp_repr_css_attr_unref(css_recurse);
} else {
- apply_css_recursive(child, const_cast<SPCSSAttr*>(css));
+ apply_css_recursive(&child, const_cast<SPCSSAttr*>(css));
}
}
}
@@ -1427,7 +1427,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const *
{
bool passed_start = start_item == NULL ? true : false;
Inkscape::XML::Document *xml_doc = common_ancestor->document->getReprDoc();
-
+
for (SPObject *child = common_ancestor->firstChild() ; child ; child = child->getNext()) {
if (start_item == child) {
passed_start = true;
@@ -2071,8 +2071,8 @@ bool has_visible_text(SPObject *obj)
if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) {
hasVisible = true; // maybe we should also check that it's not all whitespace?
} else {
- for (SPObject const *child = obj->firstChild() ; child ; child = child->getNext()) {
- if (has_visible_text(const_cast<SPObject *>(child))) {
+ for (auto& child: obj->children) {
+ if (has_visible_text(const_cast<SPObject *>(&child))) {
hasVisible = true;
break;
}
diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp
index 379682668..52e99886a 100644
--- a/src/trace/trace.cpp
+++ b/src/trace/trace.cpp
@@ -65,7 +65,7 @@ SPImage *Tracer::getSelectedSPImage()
if (sioxEnabled)
{
SPImage *img = NULL;
- std::vector<SPItem*> const list = sel->itemList();
+ auto list = sel->items();
std::vector<SPItem *> items;
sioxShapes.clear();
@@ -74,7 +74,7 @@ SPImage *Tracer::getSelectedSPImage()
them as bottom-to-top so that we can discover the image and any
SPItems above it
*/
- for (std::vector<SPItem*>::const_iterator i=list.begin() ; list.end()!=i ; ++i)
+ for (auto i=list.begin() ; list.end()!=i ; ++i)
{
if (!SP_IS_ITEM(*i))
{
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
index 14e9fdf32..66b13ed9d 100644
--- a/src/ui/clipboard.cpp
+++ b/src/ui/clipboard.cpp
@@ -510,8 +510,8 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a
// resize each object in the selection
if (separately) {
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (item) {
Geom::OptRect obj_size = item->desktopVisualBounds();
@@ -527,8 +527,8 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a
else {
Geom::OptRect sel_size = selection->visualBounds();
if ( sel_size ) {
- sp_selection_scale_relative(selection, sel_size->midpoint(),
- _getScale(desktop, min, max, *sel_size, apply_x, apply_y));
+ sp_object_set_scale_relative(selection, sel_size->midpoint(),
+ _getScale(desktop, min, max, *sel_size, apply_x, apply_y));
}
}
pasted = true;
@@ -566,8 +566,8 @@ bool ClipboardManagerImpl::pastePathEffect(SPDesktop *desktop)
desktop->doc()->importDefs(tempdoc);
// make sure all selected items are converted to paths first (i.e. rectangles)
sp_selected_to_lpeitems(desktop);
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
_applyPathEffect(item, effectstack);
}
@@ -649,9 +649,9 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop)
void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection)
{
// copy the defs used by all items
- std::vector<SPItem*> itemlist=selection->itemList();
+ auto itemlist= selection->items();
cloned_elements.clear();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (item) {
_copyUsedDefs(item);
@@ -662,7 +662,7 @@ void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection)
// copy the representation of the items
std::vector<SPObject*> sorted_items;
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i)
+ for(auto i=itemlist.begin();i!=itemlist.end();++i)
sorted_items.push_back(*i);
sort(sorted_items.begin(),sorted_items.end(),sp_object_compare_position_bool);
@@ -827,8 +827,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item)
SPObject *mask = item->mask_ref->getObject();
_copyNode(mask->getRepr(), _doc, _defs);
// recurse into the mask for its gradients etc.
- for (SPObject *o = mask->children ; o != NULL ; o = o->next) {
- SPItem *childItem = dynamic_cast<SPItem *>(o);
+ for(auto& o: mask->children) {
+ SPItem *childItem = dynamic_cast<SPItem *>(&o);
if (childItem) {
_copyUsedDefs(childItem);
}
@@ -845,8 +845,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item)
}
// recurse
- for (SPObject *o = item->children ; o != NULL ; o = o->next) {
- SPItem *childItem = dynamic_cast<SPItem *>(o);
+ for(auto& o: item->children) {
+ SPItem *childItem = dynamic_cast<SPItem *>(&o);
if (childItem) {
_copyUsedDefs(childItem);
}
@@ -882,8 +882,8 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern)
_copyNode(pattern->getRepr(), _doc, _defs);
// items in the pattern may also use gradients and other patterns, so recurse
- for ( SPObject *child = pattern->firstChild() ; child ; child = child->getNext() ) {
- SPItem *childItem = dynamic_cast<SPItem *>(child);
+ for (auto& child: pattern->children) {
+ SPItem *childItem = dynamic_cast<SPItem *>(&child);
if (childItem) {
_copyUsedDefs(childItem);
}
diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp
index 6006093ed..ed9ec3b0a 100644
--- a/src/ui/dialog/align-and-distribute.cpp
+++ b/src/ui/dialog/align-and-distribute.cpp
@@ -122,7 +122,7 @@ void ActionAlign::do_action(SPDesktop *desktop, int index)
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
bool sel_as_group = prefs->getBool("/dialogs/align/sel-as-groups");
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
if (selected.empty()) return;
const Coeffs &a = _allCoeffs[index];
@@ -282,7 +282,7 @@ private :
Inkscape::Selection *selection = desktop->getSelection();
if (!selection) return;
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
if (selected.empty()) return;
//Check 2 or more selected objects
@@ -477,7 +477,9 @@ private :
// xGap and yGap are the minimum space required between bounding rectangles.
double const xGap = removeOverlapXGap.get_value();
double const yGap = removeOverlapYGap.get_value();
- removeoverlap(_dialog.getDesktop()->getSelection()->itemList(), xGap, yGap);
+ auto tmp = _dialog.getDesktop()->getSelection()->items();
+ std::vector<SPItem *> vec(tmp.begin(), tmp.end());
+ removeoverlap(vec, xGap, yGap);
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
@@ -508,8 +510,9 @@ private :
int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
- graphlayout(_dialog.getDesktop()->getSelection()->itemList());
-
+ auto tmp = _dialog.getDesktop()->getSelection()->items();
+ std::vector<SPItem *> vec(tmp.begin(), tmp.end());
+ graphlayout(vec);
// restore compensation setting
prefs->setInt("/options/clonecompensation/value", saved_compensation);
@@ -568,7 +571,7 @@ private :
Inkscape::Selection *selection = desktop->getSelection();
if (!selection) return;
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
if (selected.empty()) return;
//Check 2 or more selected objects
@@ -634,7 +637,8 @@ private :
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
- std::vector<SPItem*> x(_dialog.getDesktop()->getSelection()->itemList());
+ auto tmp = _dialog.getDesktop()->getSelection()->items();
+ std::vector<SPItem*> x(tmp.begin(), tmp.end());
unclump (x);
// restore compensation setting
@@ -665,7 +669,7 @@ private :
Inkscape::Selection *selection = desktop->getSelection();
if (!selection) return;
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
if (selected.empty()) return;
//Check 2 or more selected objects
@@ -759,7 +763,7 @@ private :
Inkscape::Selection *selection = desktop->getSelection();
if (!selection) return;
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
//Check 2 or more selected objects
if (selected.size() < 2) return;
diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 97767e604..1fa7a6c71 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -1256,7 +1256,7 @@ void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, Gtk
return;
}
- if (selection->itemList().size() > 1) {
+ if (boost::distance(selection->items()) > 1) {
gtk_widget_set_sensitive (buttons, FALSE);
gtk_label_set_markup (GTK_LABEL(status), _("<small>More than one object selected.</small>"));
return;
@@ -1922,12 +1922,12 @@ void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from)
if (!trace_drawing)
return;
- for (SPObject *o = from->firstChild(); o != NULL; o = o->next) {
- SPItem *item = dynamic_cast<SPItem *>(o);
- if (item && clonetiler_is_a_clone_of(o, NULL)) {
+ for (auto& o: from->children) {
+ SPItem *item = dynamic_cast<SPItem *>(&o);
+ if (item && clonetiler_is_a_clone_of(&o, NULL)) {
item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too!
}
- clonetiler_trace_hide_tiled_clones_recursively (o);
+ clonetiler_trace_hide_tiled_clones_recursively (&o);
}
}
@@ -1993,7 +1993,7 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *)
Inkscape::Selection *selection = desktop->getSelection();
// check if something is selected
- if (selection->isEmpty() || selection->itemList().size() > 1) {
+ if (selection->isEmpty() || boost::distance(selection->items()) > 1) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>one object</b> whose tiled clones to unclump."));
return;
}
@@ -2003,9 +2003,9 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *)
std::vector<SPItem*> to_unclump; // not including the original
- for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
- if (clonetiler_is_a_clone_of (child, obj)) {
- to_unclump.push_back((SPItem*)child);
+ for (auto& child: parent->children) {
+ if (clonetiler_is_a_clone_of (&child, obj)) {
+ to_unclump.push_back((SPItem*)&child);
}
}
@@ -2023,8 +2023,8 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj)
guint n = 0;
- for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
- if (clonetiler_is_a_clone_of (child, obj)) {
+ for (auto& child: parent->children) {
+ if (clonetiler_is_a_clone_of (&child, obj)) {
n ++;
}
}
@@ -2042,7 +2042,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d
Inkscape::Selection *selection = desktop->getSelection();
// check if something is selected
- if (selection->isEmpty() || selection->itemList().size() > 1) {
+ if (selection->isEmpty() || boost::distance(selection->items()) > 1) {
desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select <b>one object</b> whose tiled clones to remove."));
return;
}
@@ -2052,9 +2052,9 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d
// remove old tiling
GSList *to_delete = NULL;
- for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) {
- if (clonetiler_is_a_clone_of (child, obj)) {
- to_delete = g_slist_prepend (to_delete, child);
+ for (auto& child: parent->children) {
+ if (clonetiler_is_a_clone_of (&child, obj)) {
+ to_delete = g_slist_prepend (to_delete, &child);
}
}
for (GSList *i = to_delete; i; i = i->next) {
@@ -2120,7 +2120,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
}
// Check if more than one object is selected.
- if (selection->itemList().size() > 1) {
+ if (boost::distance(selection->items()) > 1) {
desktop->getMessageStack()->flash(Inkscape::ERROR_MESSAGE, _("If you want to clone several objects, <b>group</b> them and <b>clone the group</b>."));
return;
}
diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp
index 88fefe4f2..053549b73 100644
--- a/src/ui/dialog/document-properties.cpp
+++ b/src/ui/dialog/document-properties.cpp
@@ -1176,12 +1176,7 @@ void DocumentProperties::changeEmbeddedScript(){
for (std::vector<SPObject *>::const_iterator it = current.begin(); it != current.end(); ++it) {
SPObject* obj = *it;
if (id == obj->getId()){
-
- int count=0;
- for ( SPObject *child = obj->children ; child; child = child->next )
- {
- count++;
- }
+ int count = (int) obj->children.size();
if (count>1)
g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count);
@@ -1225,8 +1220,11 @@ void DocumentProperties::editEmbeddedScript(){
//XML Tree being used directly here while it shouldn't be.
Inkscape::XML::Node *repr = obj->getRepr();
if (repr){
- SPObject *child;
- while (NULL != (child = obj->firstChild())) child->deleteObject();
+ auto tmp = obj->children | boost::adaptors::transformed([](SPObject& o) { return &o; });
+ std::vector<SPObject*> vec(tmp.begin(), tmp.end());
+ for (auto &child: vec) {
+ child->deleteObject();
+ }
obj->appendChildRepr(xml_doc->createTextNode(_EmbeddedContent.get_buffer()->get_text().c_str()));
//TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text());
diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp
index effbfc74d..670e4c8b5 100644
--- a/src/ui/dialog/export.cpp
+++ b/src/ui/dialog/export.cpp
@@ -543,7 +543,7 @@ void Export::onBatchClicked ()
void Export::updateCheckbuttons ()
{
- gint num = SP_ACTIVE_DESKTOP->getSelection()->itemList().size();
+ gint num = (gint) boost::distance(SP_ACTIVE_DESKTOP->getSelection()->items());
if (num >= 2) {
batch_export.set_sensitive(true);
batch_export.set_label(g_strdup_printf (ngettext("B_atch export %d selected object","B_atch export %d selected objects",num), num));
@@ -749,14 +749,14 @@ void Export::onAreaToggled ()
case SELECTION_SELECTION:
if ((SP_ACTIVE_DESKTOP->getSelection())->isEmpty() == false) {
- sp_selection_get_export_hints (SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi);
+ sp_object_set_get_export_hints(SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi);
/* If we still don't have a filename -- let's build
one that's nice */
if (filename.empty()) {
const gchar * id = "object";
- const std::vector<XML::Node*> reprlst = SP_ACTIVE_DESKTOP->getSelection()->reprList();
- for(std::vector<XML::Node*>::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) {
+ auto reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes();
+ for(auto i=reprlst.begin(); reprlst.end() != i; ++i) {
Inkscape::XML::Node * repr = *i;
if (repr->attribute("id")) {
id = repr->attribute("id");
@@ -946,7 +946,7 @@ void Export::onExport ()
if (batch_export.get_active ()) {
// Batch export of selected objects
- gint num = (desktop->getSelection()->itemList()).size();
+ gint num = (gint) boost::distance(desktop->getSelection()->items());
gint n = 0;
if (num < 1) {
@@ -960,8 +960,8 @@ void Export::onExport ()
gint export_count = 0;
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i = itemlist.begin();i!=itemlist.end() && !interrupted ;++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i = itemlist.begin();i!=itemlist.end() && !interrupted ;++i){
SPItem *item = *i;
prog_dlg->set_data("current", GINT_TO_POINTER(n));
@@ -1001,12 +1001,13 @@ void Export::onExport ()
MessageCleaner msgFlashCleanup(desktop->messageStack()->flashF(Inkscape::IMMEDIATE_MESSAGE,
_("Exporting file <b>%s</b>..."), safeFile), desktop);
std::vector<SPItem*> x;
+ std::vector<SPItem*> selected(desktop->getSelection()->items().begin(), desktop->getSelection()->items().end());
if (!sp_export_png_file (doc, path.c_str(),
*area, width, height, dpi, dpi,
nv->pagecolor,
onProgressCallback, (void*)prog_dlg,
TRUE, // overwrite without asking
- hide ? (desktop->getSelection()->itemList()) : x
+ hide ? selected : x
)) {
gchar * error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile);
@@ -1091,12 +1092,13 @@ void Export::onExport ()
/* Do export */
std::vector<SPItem*> x;
+ std::vector<SPItem*> selected(desktop->getSelection()->items().begin(), desktop->getSelection()->items().end());
ExportResult status = sp_export_png_file(desktop->getDocument(), path.c_str(),
Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, xdpi, ydpi,
nv->pagecolor,
onProgressCallback, (void*)prog_dlg,
FALSE,
- hide ? (desktop->getSelection()->itemList()) : x
+ hide ? selected : x
);
if (status == EXPORT_ERROR) {
gchar * safeFile = Inkscape::IO::sanitizeString(path.c_str());
@@ -1162,15 +1164,14 @@ void Export::onExport ()
break;
}
case SELECTION_SELECTION: {
- std::vector<XML::Node*> reprlst;
SPDocument * doc = SP_ACTIVE_DOCUMENT;
bool modified = false;
bool saved = DocumentUndo::getUndoSensitive(doc);
DocumentUndo::setUndoSensitive(doc, false);
- reprlst = desktop->getSelection()->reprList();
+ auto reprlst = desktop->getSelection()->xmlNodes();
- for(std::vector<Inkscape::XML::Node*>::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) {
+ for(auto i=reprlst.begin(); reprlst.end() != i; ++i) {
Inkscape::XML::Node * repr = *i;
const gchar * temp_string;
Glib::ustring dir = Glib::path_get_dirname(filename.c_str());
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index 97fa47f2f..8dbc90cc5 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -84,9 +84,7 @@ static int input_count(const SPFilterPrimitive* prim)
return 2;
else if(SP_IS_FEMERGE(prim)) {
// Return the number of feMergeNode connections plus an extra
- int count = 1;
- for(const SPObject* o = prim->firstChild(); o; o = o->next, ++count){};
- return count;
+ return (int) (prim->children.size() + 1);
}
else
return 1;
@@ -655,7 +653,7 @@ private:
void select_svg_element(){
Inkscape::Selection* sel = _desktop->getSelection();
if (sel->isEmpty()) return;
- Inkscape::XML::Node* node = sel->reprList()[0];
+ Inkscape::XML::Node* node = sel->xmlNodes().front();
if (!node || !node->matchAttributeName("id")) return;
std::ostringstream xlikhref;
@@ -1024,11 +1022,10 @@ public:
// FuncNode can be in any order so we must search to find correct one.
SPFeFuncNode* find_node(SPFeComponentTransfer* ct)
{
- SPObject* node = ct->children;
SPFeFuncNode* funcNode = NULL;
bool found = false;
- for(;node;node=node->next){
- funcNode = SP_FEFUNCNODE(node);
+ for(auto& node: ct->children) {
+ funcNode = SP_FEFUNCNODE(&node);
if( funcNode->channel == _channel ) {
found = true;
break;
@@ -1192,7 +1189,7 @@ protected:
_locked = true;
- SPObject* child = o->children;
+ SPObject* child = o->firstChild();
if(SP_IS_FEDISTANTLIGHT(child))
_light_source.set_active(0);
@@ -1217,7 +1214,7 @@ private:
if(prim) {
_locked = true;
- SPObject* child = prim->children;
+ SPObject* child = prim->firstChild();
const int ls = _light_source.get_active_row_number();
// Check if the light source type has changed
if(!(ls == -1 && !child) &&
@@ -1251,8 +1248,8 @@ private:
_light_box.show_all();
SPFilterPrimitive* prim = _dialog._primitive_list.get_selected();
- if(prim && prim->children)
- _settings.show_and_update(_light_source.get_active_data()->id, prim->children);
+ if(prim && prim->firstChild())
+ _settings.show_and_update(_light_source.get_active_data()->id, prim->firstChild());
}
FilterEffectsDialog& _dialog;
@@ -1438,8 +1435,8 @@ void FilterEffectsDialog::FilterModifier::update_selection(Selection *sel)
}
std::set<SPObject*> used;
- std::vector<SPItem*> itemlist=sel->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) {
+ auto itemlist= sel->items();
+ for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
SPObject *obj = *i;
SPStyle *style = obj->style;
if (!style || !SP_IS_ITEM(obj)) {
@@ -1519,8 +1516,8 @@ void FilterEffectsDialog::FilterModifier::on_selection_toggled(const Glib::ustri
if((*iter)[_columns.sel] == 1)
filter = 0;
- std::vector<SPItem*> itemlist=sel->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) {
+ auto itemlist= sel->items();
+ for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
SPItem * item = *i;
SPStyle *style = item->style;
g_assert(style != NULL);
@@ -1808,26 +1805,25 @@ void FilterEffectsDialog::PrimitiveList::update()
bool active_found = false;
_dialog._primitive_box->set_sensitive(true);
_dialog.update_filter_general_settings_view();
- for(SPObject *prim_obj = f->children;
- prim_obj && SP_IS_FILTER_PRIMITIVE(prim_obj);
- prim_obj = prim_obj->next) {
- SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(prim_obj);
- if(prim) {
- Gtk::TreeModel::Row row = *_model->append();
- row[_columns.primitive] = prim;
-
- //XML Tree being used directly here while it shouldn't be.
- row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name());
- row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str());
-
- if (prim->getId()) {
- row[_columns.id] = Glib::ustring(prim->getId());
- }
-
- if(prim == active_prim) {
- get_selection()->select(row);
- active_found = true;
- }
+ for(auto& prim_obj: f->children) {
+ SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(&prim_obj);
+ if(!prim) {
+ break;
+ }
+ Gtk::TreeModel::Row row = *_model->append();
+ row[_columns.primitive] = prim;
+
+ //XML Tree being used directly here while it shouldn't be.
+ row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name());
+ row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str());
+
+ if (prim->getId()) {
+ row[_columns.id] = Glib::ustring(prim->getId());
+ }
+
+ if(prim == active_prim) {
+ get_selection()->select(row);
+ active_found = true;
}
}
@@ -2214,11 +2210,12 @@ const Gtk::TreeIter FilterEffectsDialog::PrimitiveList::find_result(const Gtk::T
if(SP_IS_FEMERGE(prim)) {
int c = 0;
bool found = false;
- for(const SPObject* o = prim->firstChild(); o; o = o->next, ++c) {
- if(c == attr && SP_IS_FEMERGENODE(o)) {
- image = SP_FEMERGENODE(o)->input;
+ for (auto& o: prim->children) {
+ if(c == attr && SP_IS_FEMERGENODE(&o)) {
+ image = SP_FEMERGENODE(&o)->input;
found = true;
}
+ ++c;
}
if(!found)
return target;
@@ -2405,21 +2402,23 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton*
if(SP_IS_FEMERGE(prim)) {
int c = 1;
bool handled = false;
- for(SPObject* o = prim->firstChild(); o && !handled; o = o->next, ++c) {
- if(c == _in_drag && SP_IS_FEMERGENODE(o)) {
+ for (auto& o: prim->children) {
+ if(c == _in_drag && SP_IS_FEMERGENODE(&o)) {
// If input is null, delete it
if(!in_val) {
//XML Tree being used directly here while it shouldn't be.
- sp_repr_unparent(o->getRepr());
+ sp_repr_unparent(o.getRepr());
DocumentUndo::done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS,
_("Remove merge node"));
(*get_selection()->get_selected())[_columns.primitive] = prim;
+ } else {
+ _dialog.set_attr(&o, SP_ATTR_IN, in_val);
}
- else
- _dialog.set_attr(o, SP_ATTR_IN, in_val);
handled = true;
+ break;
}
+ ++c;
}
// Add new input?
if(!handled && c == _in_drag && in_val) {
@@ -2938,7 +2937,7 @@ void FilterEffectsDialog::set_filternode_attr(const AttrWidget* input)
void FilterEffectsDialog::set_child_attr_direct(const AttrWidget* input)
{
- set_attr(_primitive_list.get_selected()->children, input->get_attribute(), input->get_as_attribute().c_str());
+ set_attr(_primitive_list.get_selected()->firstChild(), input->get_attribute(), input->get_as_attribute().c_str());
}
void FilterEffectsDialog::set_attr(SPObject* o, const SPAttributeEnum attr, const gchar* val)
diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp
index 8b6067e82..b4f7902f5 100644
--- a/src/ui/dialog/find.cpp
+++ b/src/ui/dialog/find.cpp
@@ -740,22 +740,22 @@ std::vector<SPItem*> &Find::all_items (SPObject *r, std::vector<SPItem*> &l, boo
return l; // we're not interested in metadata
}
- for (SPObject *child = r->firstChild(); child; child = child->getNext()) {
- SPItem *item = dynamic_cast<SPItem *>(child);
- if (item && !child->cloned && !desktop->isLayer(item)) {
+ for (auto& child: r->children) {
+ SPItem *item = dynamic_cast<SPItem *>(&child);
+ if (item && !child.cloned && !desktop->isLayer(item)) {
if ((hidden || !desktop->itemIsHidden(item)) && (locked || !item->isLocked())) {
- l.insert(l.begin(),(SPItem*)child);
+ l.insert(l.begin(),(SPItem*)&child);
}
}
- l = all_items (child, l, hidden, locked);
+ l = all_items (&child, l, hidden, locked);
}
return l;
}
std::vector<SPItem*> &Find::all_selection_items (Inkscape::Selection *s, std::vector<SPItem*> &l, SPObject *ancestor, bool hidden, bool locked)
{
- std::vector<SPItem*> itemlist=s->itemList();
- for(std::vector<SPItem*>::const_reverse_iterator i=itemlist.rbegin(); itemlist.rend() != i; ++i) {
+ auto itemlist= s->items();
+ for(auto i=boost::rbegin(itemlist); boost::rend(itemlist) != i; ++i) {
SPObject *obj = *i;
SPItem *item = dynamic_cast<SPItem *>(obj);
g_assert(item != NULL);
diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp
index 76af412ca..abae8ea70 100644
--- a/src/ui/dialog/font-substitution.cpp
+++ b/src/ui/dialog/font-substitution.cpp
@@ -173,7 +173,7 @@ std::vector<SPItem*> FontSubstitution::getFontReplacedItems(SPDocument* doc, Gli
family = SP_TEXT(parent_text)->layout.getFontFamily(0);
// Add all the spans fonts to the set
gint ii = 0;
- for (SPObject *child = parent_text->firstChild() ; child ; child = child->getNext() ) {
+ for (auto& child: parent_text->children) {
family = SP_TEXT(parent_text)->layout.getFontFamily(ii);
setFontSpans.insert(family);
ii++;
diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp
index 3b9a13bdb..9c1236ca9 100644
--- a/src/ui/dialog/glyphs.cpp
+++ b/src/ui/dialog/glyphs.cpp
@@ -516,8 +516,8 @@ void GlyphsPanel::setTargetDesktop(SPDesktop *desktop)
void GlyphsPanel::insertText()
{
SPItem *textItem = 0;
- std::vector<SPItem*> itemlist=targetDesktop->selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) {
+ auto itemlist= targetDesktop->selection->items();
+ for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) {
textItem = *i;
break;
@@ -617,8 +617,8 @@ void GlyphsPanel::selectionModifiedCB(guint flags)
void GlyphsPanel::calcCanInsert()
{
int items = 0;
- std::vector<SPItem*> itemlist=targetDesktop->selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) {
+ auto itemlist= targetDesktop->selection->items();
+ for(auto i=itemlist.begin(); itemlist.end() != i; ++i) {
if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) {
++items;
}
diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp
index de84abd12..5872393ae 100644
--- a/src/ui/dialog/grid-arrange-tab.cpp
+++ b/src/ui/dialog/grid-arrange-tab.cpp
@@ -156,7 +156,11 @@ void GridArrangeTab::arrange()
desktop->getDocument()->ensureUpToDate();
Inkscape::Selection *selection = desktop->getSelection();
- const std::vector<SPItem*> items = selection ? selection->itemList() : std::vector<SPItem*>();
+ std::vector<SPItem*> items;
+ if (selection) {
+ items.insert(items.end(), selection->items().begin(), selection->items().end());
+ }
+
for(std::vector<SPItem*>::const_iterator i = items.begin();i!=items.end(); ++i){
SPItem *item = *i;
Geom::OptRect b = item->documentVisualBounds();
@@ -185,7 +189,7 @@ void GridArrangeTab::arrange()
// require the sorting done before we can calculate row heights etc.
g_return_if_fail(selection);
- std::vector<SPItem*> sorted(selection->itemList());
+ std::vector<SPItem*> sorted(selection->items().begin(), selection->items().end());
sort(sorted.begin(),sorted.end(),sp_compare_y_position);
sort(sorted.begin(),sorted.end(),sp_compare_x_position);
@@ -361,8 +365,7 @@ void GridArrangeTab::on_row_spinbutton_changed()
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
g_return_if_fail( selection );
- std::vector<SPItem*> const items = selection->itemList();
- int selcount = items.size();
+ int selcount = (int) boost::distance(selection->items());
double PerCol = ceil(selcount / NoOfColsSpinner.get_value());
NoOfRowsSpinner.set_value(PerCol);
@@ -387,7 +390,7 @@ void GridArrangeTab::on_col_spinbutton_changed()
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
g_return_if_fail(selection);
- int selcount = selection->itemList().size();
+ int selcount = (int) boost::distance(selection->items());
double PerRow = ceil(selcount / NoOfRowsSpinner.get_value());
NoOfColsSpinner.set_value(PerRow);
@@ -524,7 +527,10 @@ void GridArrangeTab::updateSelection()
updating = true;
SPDesktop *desktop = Parent->getDesktop();
Inkscape::Selection *selection = desktop ? desktop->selection : 0;
- std::vector<SPItem*> const items = selection ? selection->itemList() : std::vector<SPItem*>();
+ std::vector<SPItem*> items;
+ if (selection) {
+ items.insert(items.end(), selection->items().begin(), selection->items().end());
+ }
if (!items.empty()) {
int selcount = items.size();
@@ -591,7 +597,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent)
g_return_if_fail( selection );
int selcount = 1;
if (!selection->isEmpty()) {
- selcount = selection->itemList().size();
+ selcount = (int) boost::distance(selection->items());
}
diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp
index 8dd0ae489..a4fcc9947 100644
--- a/src/ui/dialog/icon-preview.cpp
+++ b/src/ui/dialog/icon-preview.cpp
@@ -359,8 +359,8 @@ void IconPreviewPanel::refreshPreview()
if ( sel ) {
//g_message("found a selection to play with");
- std::vector<SPItem*> const items = sel->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();!target && i!=items.end();++i){
+ auto items = sel->items();
+ for(auto i=items.begin();!target && i!=items.end();++i){
SPItem* item = *i;
gchar const *id = item->getId();
if ( id ) {
diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp
index 471097797..09ffc9c4c 100644
--- a/src/ui/dialog/objects.cpp
+++ b/src/ui/dialog/objects.cpp
@@ -330,12 +330,11 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/)
void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow)
{
if ( _desktop && obj ) {
- for ( SPObject *child = obj->children; child != NULL; child = child->next) {
-
- if (SP_IS_ITEM(child))
+ for(auto& child: obj->children) {
+ if (SP_IS_ITEM(&child))
{
- SPItem * item = SP_ITEM(child);
- SPGroup * group = SP_IS_GROUP(child) ? SP_GROUP(child) : 0;
+ SPItem * item = SP_ITEM(&child);
+ SPGroup * group = SP_IS_GROUP(&child) ? SP_GROUP(&child) : 0;
//Add the item to the tree and set the column information
Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend();
@@ -362,14 +361,14 @@ void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow)
}
//Add an object watcher to the item
- ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, child);
- child->getRepr()->addObserver(*w);
+ ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, &child);
+ child.getRepr()->addObserver(*w);
_objectWatchers.push_back(w);
//If the item is a group, recursively add its children
if (group)
{
- _addObject( child, &row );
+ _addObject( &child, &row );
}
}
}
@@ -389,9 +388,8 @@ void ObjectsPanel::_updateObject( SPObject *obj, bool recurse ) {
//end mark
if (recurse)
{
- for (SPObject * iter = obj->children; iter != NULL; iter = iter->next)
- {
- _updateObject(iter, recurse);
+ for (auto& iter: obj->children) {
+ _updateObject(&iter, recurse);
}
}
}
@@ -468,8 +466,8 @@ void ObjectsPanel::_objectsSelected( Selection *sel ) {
_selectedConnection.block();
_tree.get_selection()->unselect_all();
SPItem *item = NULL;
- std::vector<SPItem*> const items = sel->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin(); i!=items.end(); ++i){
+ auto items = sel->items();
+ for(auto i=items.begin(); i!=items.end(); ++i){
item = *i;
if (setOpacity)
{
@@ -506,19 +504,22 @@ void ObjectsPanel::_setCompositingValues(SPItem *item)
SPGaussianBlur *spblur = NULL;
if (item->style->getFilter())
{
- for(SPObject *primitive_obj = item->style->getFilter()->children; primitive_obj && SP_IS_FILTER_PRIMITIVE(primitive_obj); primitive_obj = primitive_obj->next) {
- if(SP_IS_FEBLEND(primitive_obj) && !spblend) {
- //Get the blend mode
- spblend = SP_FEBLEND(primitive_obj);
- }
-
- if(SP_IS_GAUSSIANBLUR(primitive_obj) && !spblur) {
- //Get the blur value
- spblur = SP_GAUSSIANBLUR(primitive_obj);
- }
+ for (auto& primitive_obj: item->style->getFilter()->children) {
+ if (!SP_IS_FILTER_PRIMITIVE(&primitive_obj)) {
+ break;
}
+ if(SP_IS_FEBLEND(&primitive_obj) && !spblend) {
+ //Get the blend mode
+ spblend = SP_FEBLEND(&primitive_obj);
+ }
+
+ if(SP_IS_GAUSSIANBLUR(&primitive_obj) && !spblur) {
+ //Get the blur value
+ spblur = SP_GAUSSIANBLUR(&primitive_obj);
+ }
+ }
}
-
+
//Set the blend mode
_fe_cb.set_blend_mode(spblend ? spblend->blend_mode : Inkscape::Filters::BLEND_NORMAL);
@@ -1278,9 +1279,9 @@ bool ObjectsPanel::_executeAction()
break;
case BUTTON_COLLAPSE_ALL:
{
- for (SPObject* obj = _document->getRoot()->firstChild(); obj != NULL; obj = obj->next) {
- if (SP_IS_GROUP(obj)) {
- _setCollapsed(SP_GROUP(obj));
+ for (auto& obj: _document->getRoot()->children) {
+ if (SP_IS_GROUP(&obj)) {
+ _setCollapsed(SP_GROUP(&obj));
}
}
_objectsChanged(_document->getRoot());
@@ -1390,9 +1391,10 @@ void ObjectsPanel::_setCollapsed(SPGroup * group)
{
group->setExpanded(false);
group->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT);
- for (SPObject *iter = group->children; iter != NULL; iter = iter->next)
- {
- if (SP_IS_GROUP(iter)) _setCollapsed(SP_GROUP(iter));
+ for (auto& iter: group->children) {
+ if (SP_IS_GROUP(&iter)) {
+ _setCollapsed(SP_GROUP(&iter));
+ }
}
}
@@ -1503,11 +1505,14 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl
if (blendmode != "normal") {
gdouble radius = 0;
if (item->style->getFilter()) {
- for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) {
- if (SP_IS_GAUSSIANBLUR(primitive)) {
+ for (auto& primitive: item->style->getFilter()->children) {
+ if (!SP_IS_FILTER_PRIMITIVE(&primitive)) {
+ break;
+ }
+ if (SP_IS_GAUSSIANBLUR(&primitive)) {
Geom::OptRect bbox = item->bounds(SPItem::GEOMETRIC_BBOX);
if (bbox) {
- radius = SP_GAUSSIANBLUR(primitive)->stdDeviation.getNumber();
+ radius = SP_GAUSSIANBLUR(&primitive)->stdDeviation.getNumber();
}
}
}
@@ -1515,13 +1520,16 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl
SPFilter *filter = new_filter_simple_from_item(_document, item, blendmode.c_str(), radius);
sp_style_set_property_url(item, "filter", filter, false);
} else {
- for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) {
- if (SP_IS_FEBLEND(primitive)) {
- primitive->deleteObject();
+ for (auto& primitive: item->style->getFilter()->children) {
+ if (!SP_IS_FILTER_PRIMITIVE(&primitive)) {
+ break;
+ }
+ if (SP_IS_FEBLEND(&primitive)) {
+ primitive.deleteObject();
break;
}
}
- if (!item->style->getFilter()->children) {
+ if (!item->style->getFilter()->firstChild()) {
remove_filter(item, false);
}
}
@@ -1572,13 +1580,16 @@ void ObjectsPanel::_blurChangedIter(const Gtk::TreeIter& iter, double blur)
SPFilter *filter = modify_filter_gaussian_blur_from_item(_document, item, radius);
sp_style_set_property_url(item, "filter", filter, false);
} else if (item->style->filter.set && item->style->getFilter()) {
- for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) {
- if (SP_IS_GAUSSIANBLUR(primitive)) {
- primitive->deleteObject();
+ for (auto& primitive: item->style->getFilter()->children) {
+ if (!SP_IS_FILTER_PRIMITIVE(&primitive)) {
+ break;
+ }
+ if (SP_IS_GAUSSIANBLUR(&primitive)) {
+ primitive.deleteObject();
break;
}
}
- if (!item->style->getFilter()->children) {
+ if (!item->style->getFilter()->firstChild()) {
remove_filter(item, false);
}
}
diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp
index 62e6bf591..b838b0842 100644
--- a/src/ui/dialog/pixelartdialog.cpp
+++ b/src/ui/dialog/pixelartdialog.cpp
@@ -366,8 +366,8 @@ void PixelArtDialogImpl::vectorize()
return;
}
- std::vector<SPItem*> const items = desktop->selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin(); i!=items.end();++i){
+ auto items = desktop->selection->items();
+ for(auto i=items.begin(); i!=items.end();++i){
if ( !SP_IS_IMAGE(*i) )
continue;
diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp
index 6324ec57f..c51881a96 100644
--- a/src/ui/dialog/polar-arrange-tab.cpp
+++ b/src/ui/dialog/polar-arrange-tab.cpp
@@ -264,7 +264,7 @@ static void moveToPoint(int anchor, SPItem *item, Geom::Point p)
void PolarArrangeTab::arrange()
{
Inkscape::Selection *selection = parent->getDesktop()->getSelection();
- const std::vector<SPItem*> tmp(selection->itemList());
+ const std::vector<SPItem*> tmp(selection->items().begin(), selection->items().end());
SPGenericEllipse *referenceEllipse = NULL; // Last ellipse in selection
bool arrangeOnEllipse = !arrangeOnParametersRadio.get_active();
diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp
index 61fa4c22b..045ce3459 100644
--- a/src/ui/dialog/spellcheck.cpp
+++ b/src/ui/dialog/spellcheck.cpp
@@ -227,14 +227,14 @@ GSList *SpellCheck::allTextItems (SPObject *r, GSList *l, bool hidden, bool lock
return l; // we're not interested in metadata
}
- for (SPObject *child = r->firstChild(); child; child = child->next) {
- if (SP_IS_ITEM (child) && !child->cloned && !desktop->isLayer(SP_ITEM(child))) {
- if ((hidden || !desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) {
- if (SP_IS_TEXT(child) || SP_IS_FLOWTEXT(child))
- l = g_slist_prepend (l, child);
+ for (auto& child: r->children) {
+ if (SP_IS_ITEM (&child) && !child.cloned && !desktop->isLayer(SP_ITEM(&child))) {
+ if ((hidden || !desktop->itemIsHidden(SP_ITEM(&child))) && (locked || !SP_ITEM(&child)->isLocked())) {
+ if (SP_IS_TEXT(&child) || SP_IS_FLOWTEXT(&child))
+ l = g_slist_prepend (l, &child);
}
}
- l = allTextItems (child, l, hidden, locked);
+ l = allTextItems (&child, l, hidden, locked);
}
return l;
}
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 87bab72e9..6a87f3714 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -113,11 +113,11 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){
void SvgFontsDialog::AttrEntry::on_attr_changed(){
SPObject* o = NULL;
- for(SPObject* node = this->dialog->get_selected_spfont()->children; node; node=node->next){
+ for (auto& node: dialog->get_selected_spfont()->children) {
switch(this->attr){
case SP_PROP_FONT_FAMILY:
- if (SP_IS_FONTFACE(node)){
- o = node;
+ if (SP_IS_FONTFACE(&node)){
+ o = &node;
continue;
}
break;
@@ -168,9 +168,9 @@ void GlyphComboBox::update(SPFont* spfont){
this->append(""); //Gtk is refusing to clear the combobox when I comment out this line
this->remove_all();
- for(SPObject* node = spfont->children; node; node=node->next){
- if (SP_IS_GLYPH(node)){
- this->append((static_cast<SPGlyph*>(node))->unicode);
+ for (auto& node: spfont->children) {
+ if (SP_IS_GLYPH(&node)){
+ this->append((static_cast<SPGlyph*>(&node))->unicode);
}
}
}
@@ -306,10 +306,9 @@ void SvgFontsDialog::update_global_settings_tab(){
SPFont* font = get_selected_spfont();
if (!font) return;
- SPObject* obj;
- for (obj=font->children; obj; obj=obj->next){
- if (SP_IS_FONTFACE(obj)){
- _familyname_entry->set_text((SP_FONTFACE(obj))->font_family);
+ for (auto& obj: font->children) {
+ if (SP_IS_FONTFACE(&obj)){
+ _familyname_entry->set_text((SP_FONTFACE(&obj))->font_family);
}
}
}
@@ -412,12 +411,12 @@ SvgFontsDialog::populate_glyphs_box()
SPFont* spfont = this->get_selected_spfont();
_glyphs_observer.set(spfont);
- for(SPObject* node = spfont->children; node; node=node->next){
- if (SP_IS_GLYPH(node)){
+ for (auto& node: spfont->children) {
+ if (SP_IS_GLYPH(&node)){
Gtk::TreeModel::Row row = *(_GlyphsListStore->append());
- row[_GlyphsListColumns.glyph_node] = static_cast<SPGlyph*>(node);
- row[_GlyphsListColumns.glyph_name] = (static_cast<SPGlyph*>(node))->glyph_name;
- row[_GlyphsListColumns.unicode] = (static_cast<SPGlyph*>(node))->unicode;
+ row[_GlyphsListColumns.glyph_node] = static_cast<SPGlyph*>(&node);
+ row[_GlyphsListColumns.glyph_name] = (static_cast<SPGlyph*>(&node))->glyph_name;
+ row[_GlyphsListColumns.unicode] = (static_cast<SPGlyph*>(&node))->unicode;
}
}
}
@@ -430,13 +429,13 @@ SvgFontsDialog::populate_kerning_pairs_box()
SPFont* spfont = this->get_selected_spfont();
- for(SPObject* node = spfont->children; node; node=node->next){
- if (SP_IS_HKERN(node)){
+ for (auto& node: spfont->children) {
+ if (SP_IS_HKERN(&node)){
Gtk::TreeModel::Row row = *(_KerningPairsListStore->append());
- row[_KerningPairsListColumns.first_glyph] = (static_cast<SPGlyphKerning*>(node))->u1->attribute_string().c_str();
- row[_KerningPairsListColumns.second_glyph] = (static_cast<SPGlyphKerning*>(node))->u2->attribute_string().c_str();
- row[_KerningPairsListColumns.kerning_value] = (static_cast<SPGlyphKerning*>(node))->k;
- row[_KerningPairsListColumns.spnode] = static_cast<SPGlyphKerning*>(node);
+ row[_KerningPairsListColumns.first_glyph] = (static_cast<SPGlyphKerning*>(&node))->u1->attribute_string().c_str();
+ row[_KerningPairsListColumns.second_glyph] = (static_cast<SPGlyphKerning*>(&node))->u2->attribute_string().c_str();
+ row[_KerningPairsListColumns.kerning_value] = (static_cast<SPGlyphKerning*>(&node))->k;
+ row[_KerningPairsListColumns.spnode] = static_cast<SPGlyphKerning*>(&node);
}
}
}
@@ -491,11 +490,10 @@ void SvgFontsDialog::add_glyph(){
Geom::PathVector
SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){
double units_per_em = 1000;
- SPObject* obj;
- for (obj = get_selected_spfont()->children; obj; obj=obj->next){
- if (SP_IS_FONTFACE(obj)){
+ for (auto& obj: get_selected_spfont()->children) {
+ if (SP_IS_FONTFACE(&obj)){
//XML Tree being directly used here while it shouldn't be.
- sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em);
+ sp_repr_get_double(obj.getRepr(), "units-per-em", &units_per_em);
}
}
@@ -522,7 +520,7 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){
return;
}
- Inkscape::XML::Node* node = sel->reprList().front();
+ Inkscape::XML::Node* node = sel->xmlNodes().front();
if (!node) return;//TODO: should this be an assert?
if (!node->matchAttributeName("d") || !node->attribute("d")){
char *msg = _("The selected object does not have a <b>path</b> description.");
@@ -564,7 +562,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){
return;
}
- Inkscape::XML::Node* node = sel->reprList().front();
+ Inkscape::XML::Node* node = sel->xmlNodes().front();
if (!node) return;//TODO: should this be an assert?
if (!node->matchAttributeName("d") || !node->attribute("d")){
char *msg = _("The selected object does not have a <b>path</b> description.");
@@ -574,13 +572,12 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){
Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d"));
- SPObject* obj;
- for (obj = get_selected_spfont()->children; obj; obj=obj->next){
- if (SP_IS_MISSING_GLYPH(obj)){
+ for (auto& obj: get_selected_spfont()->children) {
+ if (SP_IS_MISSING_GLYPH(&obj)){
//XML Tree being directly used here while it shouldn't be.
gchar *str = sp_svg_write_path (flip_coordinate_system(pathv));
- obj->getRepr()->setAttribute("d", str);
+ obj.getRepr()->setAttribute("d", str);
g_free(str);
DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves"));
}
@@ -597,11 +594,10 @@ void SvgFontsDialog::reset_missing_glyph_description(){
}
SPDocument* doc = desktop->getDocument();
- SPObject* obj;
- for (obj = get_selected_spfont()->children; obj; obj=obj->next){
- if (SP_IS_MISSING_GLYPH(obj)){
+ for (auto& obj: get_selected_spfont()->children) {
+ if (SP_IS_MISSING_GLYPH(&obj)){
//XML Tree being directly used here while it shouldn't be.
- obj->getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z");
+ obj.getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z");
DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Reset missing-glyph"));
}
}
@@ -736,12 +732,12 @@ void SvgFontsDialog::add_kerning_pair(){
//look for this kerning pair on the currently selected font
this->kerning_pair = NULL;
- for(SPObject* node = this->get_selected_spfont()->children; node; node=node->next){
+ for (auto& node: get_selected_spfont()->children) {
//TODO: It is not really correct to get only the first byte of each string.
//TODO: We should also support vertical kerning
- if (SP_IS_HKERN(node) && (static_cast<SPGlyphKerning*>(node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0])
- && (static_cast<SPGlyphKerning*>(node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){
- this->kerning_pair = static_cast<SPGlyphKerning*>(node);
+ if (SP_IS_HKERN(&node) && (static_cast<SPGlyphKerning*>(&node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0])
+ && (static_cast<SPGlyphKerning*>(&node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){
+ this->kerning_pair = static_cast<SPGlyphKerning*>(&node);
continue;
}
}
@@ -850,11 +846,10 @@ SPFont *new_font(SPDocument *document)
void set_font_family(SPFont* font, char* str){
if (!font) return;
- SPObject* obj;
- for (obj=font->children; obj; obj=obj->next){
- if (SP_IS_FONTFACE(obj)){
+ for (auto& obj: font->children) {
+ if (SP_IS_FONTFACE(&obj)){
//XML Tree being directly used here while it shouldn't be.
- obj->getRepr()->setAttribute("font-family", str);
+ obj.getRepr()->setAttribute("font-family", str);
}
}
@@ -871,11 +866,10 @@ void SvgFontsDialog::add_font(){
font->setLabel(os.str().c_str());
os2 << "SVGFont " << count;
- SPObject* obj;
- for (obj=font->children; obj; obj=obj->next){
- if (SP_IS_FONTFACE(obj)){
+ for (auto& obj: font->children) {
+ if (SP_IS_FONTFACE(&obj)){
//XML Tree being directly used here while it shouldn't be.
- obj->getRepr()->setAttribute("font-family", os2.str().c_str());
+ obj.getRepr()->setAttribute("font-family", os2.str().c_str());
}
}
diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp
index b3767f584..3012c5c26 100644
--- a/src/ui/dialog/swatches.cpp
+++ b/src/ui/dialog/swatches.cpp
@@ -114,7 +114,7 @@ static void editGradientImpl( SPDesktop* desktop, SPGradient* gr )
bool shown = false;
if ( desktop && desktop->doc() ) {
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> const items = selection->itemList();
+ std::vector<SPItem*> const items(selection->items().begin(), selection->items().end());
if (!items.empty()) {
SPStyle query( desktop->doc() );
int result = objects_query_fillstroke((items), &query, true);
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index de4e127bd..4840b897b 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -432,11 +432,6 @@ void SymbolsDialog::iconChanged() {
SPObject* symbol = symbolDocument->getObjectById(symbol_id);
if( symbol ) {
- if( symbolDocument == currentDocument ) {
- // Select the symbol on the canvas so it can be manipulated
- currentDesktop->selection->set( symbol, false );
- }
-
// Find style for use in <use>
// First look for default style stored in <symbol>
gchar const* style = symbol->getAttribute("inkscape:symbol-style");
@@ -619,8 +614,8 @@ GSList* SymbolsDialog::symbols_in_doc_recursive (SPObject *r, GSList *l)
l = g_slist_prepend (l, r);
}
- for (SPObject *child = r->firstChild(); child; child = child->getNext()) {
- l = symbols_in_doc_recursive( child, l );
+ for (auto& child: r->children) {
+ l = symbols_in_doc_recursive( &child, l );
}
return l;
@@ -641,8 +636,8 @@ GSList* SymbolsDialog::use_in_doc_recursive (SPObject *r, GSList *l)
l = g_slist_prepend (l, r);
}
- for (SPObject *child = r->firstChild(); child; child = child->getNext()) {
- l = use_in_doc_recursive( child, l );
+ for (auto& child: r->children) {
+ l = use_in_doc_recursive( &child, l );
}
return l;
diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp
index 768e13d43..dfe71bddb 100644
--- a/src/ui/dialog/tags.cpp
+++ b/src/ui/dialog/tags.cpp
@@ -335,8 +335,8 @@ void TagsPanel::_objectsSelected( Selection *sel ) {
_selectedConnection.block();
_tree.get_selection()->unselect_all();
- std::vector<SPObject*> tmp=sel->list();
- for(std::vector<SPObject*>::const_iterator i=tmp.begin();i!=tmp.end();++i)
+ auto tmp = sel->objects();
+ for(auto i = tmp.begin(); i != tmp.end(); ++i)
{
SPObject *obj = *i;
_store->foreach(sigc::bind<SPObject *>( sigc::mem_fun(*this, &TagsPanel::_checkForSelected), obj));
@@ -386,26 +386,26 @@ void TagsPanel::_objectsChanged(SPObject* root)
void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* parentRow )
{
if ( _desktop && obj ) {
- for ( SPObject *child = obj->children; child != NULL; child = child->next) {
- if (SP_IS_TAG(child))
+ for (auto& child: obj->children) {
+ if (SP_IS_TAG(&child))
{
Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend();
Gtk::TreeModel::Row row = *iter;
- row[_model->_colObject] = child;
+ row[_model->_colObject] = &child;
row[_model->_colParentObject] = NULL;
- row[_model->_colLabel] = child->label() ? child->label() : child->getId();
+ row[_model->_colLabel] = child.label() ? child.label() : child.getId();
row[_model->_colAddRemove] = true;
row[_model->_colAllowAddRemove] = true;
_tree.expand_to_path( _store->get_path(iter) );
- TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child);
- child->getRepr()->addObserver(*w);
+ TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child);
+ child.getRepr()->addObserver(*w);
_objectWatchers.push_back(w);
- _addObject( doc, child, &row );
+ _addObject( doc, &child, &row );
}
}
- if (SP_IS_TAG(obj) && obj->children)
+ if (SP_IS_TAG(obj) && obj->firstChild())
{
Gtk::TreeModel::iterator iteritems = parentRow ? _store->append(parentRow->children()) : _store->prepend();
Gtk::TreeModel::Row rowitems = *iteritems;
@@ -416,16 +416,16 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row*
rowitems[_model->_colAllowAddRemove] = false;
_tree.expand_to_path( _store->get_path(iteritems) );
-
- for ( SPObject *child = obj->children; child != NULL; child = child->next) {
- if (SP_IS_TAG_USE(child))
+
+ for (auto& child: obj->children) {
+ if (SP_IS_TAG_USE(&child))
{
- SPItem *item = SP_TAG_USE(child)->ref->getObject();
+ SPItem *item = SP_TAG_USE(&child)->ref->getObject();
Gtk::TreeModel::iterator iter = _store->prepend(rowitems->children());
Gtk::TreeModel::Row row = *iter;
- row[_model->_colObject] = child;
+ row[_model->_colObject] = &child;
row[_model->_colParentObject] = NULL;
- row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(child)->href;
+ row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(&child)->href;
row[_model->_colAddRemove] = false;
row[_model->_colAllowAddRemove] = true;
@@ -434,7 +434,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row*
}
if (item) {
- TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child, item->getRepr());
+ TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child, item->getRepr());
item->getRepr()->addObserver(*w);
_objectWatchers.push_back(w);
}
@@ -446,12 +446,11 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row*
void TagsPanel::_select_tag( SPTag * tag )
{
- for (SPObject * child = tag->children; child != NULL; child = child->next)
- {
- if (SP_IS_TAG(child)) {
- _select_tag(SP_TAG(child));
- } else if (SP_IS_TAG_USE(child)) {
- SPObject * obj = SP_TAG_USE(child)->ref->getObject();
+ for (auto& child: tag->children) {
+ if (SP_IS_TAG(&child)) {
+ _select_tag(SP_TAG(&child));
+ } else if (SP_IS_TAG_USE(&child)) {
+ SPObject * obj = SP_TAG_USE(&child)->ref->getObject();
if (obj) {
if (_desktop->selection->isEmpty()) _desktop->setCurrentLayer(obj->parent);
_desktop->selection->add(obj);
@@ -633,12 +632,12 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event)
if (col == _tree.get_column(COL_ADD - 1) && down_at_add) {
if (SP_IS_TAG(obj)) {
bool wasadded = false;
- std::vector<SPItem*> items=_desktop->selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= _desktop->selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPObject *newobj = *i;
bool addchild = true;
- for ( SPObject *child = obj->children; child != NULL; child = child->next) {
- if (SP_IS_TAG_USE(child) && SP_TAG_USE(child)->ref->getObject() == newobj) {
+ for (auto& child: obj->children) {
+ if (SP_IS_TAG_USE(&child) && SP_TAG_USE(&child)->ref->getObject() == newobj) {
addchild = false;
}
}
diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp
index 5d50a6c30..50c6c1553 100644
--- a/src/ui/dialog/text-edit.cpp
+++ b/src/ui/dialog/text-edit.cpp
@@ -413,8 +413,8 @@ SPItem *TextEdit::getSelectedTextItem (void)
if (!SP_ACTIVE_DESKTOP)
return NULL;
- std::vector<SPItem*> tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=tmp.begin();i!=tmp.end();++i)
+ auto tmp= SP_ACTIVE_DESKTOP->getSelection()->items();
+ for(auto i=tmp.begin();i!=tmp.end();++i)
{
if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i))
return *i;
@@ -431,8 +431,8 @@ unsigned TextEdit::getSelectedTextCount (void)
unsigned int items = 0;
- std::vector<SPItem*> tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=tmp.begin();i!=tmp.end();++i)
+ auto tmp= SP_ACTIVE_DESKTOP->getSelection()->items();
+ for(auto i=tmp.begin();i!=tmp.end();++i)
{
if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i))
++items;
@@ -538,11 +538,11 @@ void TextEdit::onApply()
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
unsigned items = 0;
- const std::vector<SPItem*> item_list = desktop->getSelection()->itemList();
+ auto item_list = desktop->getSelection()->items();
SPCSSAttr *css = fillTextStyle ();
sp_desktop_set_style(desktop, css, true);
- for(std::vector<SPItem*>::const_iterator i=item_list.begin();i!=item_list.end();++i){
+ for(auto i=item_list.begin();i!=item_list.end();++i){
// apply style to the reprs of all text objects in the selection
if (SP_IS_TEXT (*i)) {
diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp
index 5fb5bdfc4..7f1492cd7 100644
--- a/src/ui/dialog/transformation.cpp
+++ b/src/ui/dialog/transformation.cpp
@@ -544,7 +544,7 @@ void Transformation::updatePageTransform(Inkscape::Selection *selection)
{
if (selection && !selection->isEmpty()) {
if (_check_replace_matrix.get_active()) {
- Geom::Affine current (selection->itemList()[0]->transform); // take from the first item in selection
+ Geom::Affine current (selection->items().front()->transform); // take from the first item in selection
Geom::Affine new_displayed = current;
@@ -617,19 +617,19 @@ void Transformation::applyPageMove(Inkscape::Selection *selection)
if (!prefs->getBool("/dialogs/transformation/applyseparately")) {
// move selection as a whole
if (_check_move_relative.get_active()) {
- sp_selection_move_relative(selection, x, y);
+ sp_object_set_move_relative(selection, x, y);
} else {
Geom::OptRect bbox = selection->preferredBounds();
if (bbox) {
- sp_selection_move_relative(selection,
- x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
+ sp_object_set_move_relative(selection,
+ x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
}
}
} else {
if (_check_move_relative.get_active()) {
// shift each object relatively to the previous one
- std::vector<SPItem*> selected(selection->itemList());
+ std::vector<SPItem*> selected(selection->items().begin(), selection->items().end());
if (selected.empty()) return;
if (fabs(x) > 1e-6) {
@@ -685,8 +685,8 @@ void Transformation::applyPageMove(Inkscape::Selection *selection)
} else {
Geom::OptRect bbox = selection->preferredBounds();
if (bbox) {
- sp_selection_move_relative(selection,
- x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
+ sp_object_set_move_relative(selection,
+ x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]);
}
}
}
@@ -704,8 +704,8 @@ void Transformation::applyPageScale(Inkscape::Selection *selection)
bool transform_stroke = prefs->getBool("/options/transform/stroke", true);
bool preserve = prefs->getBool("/options/preservetransform/value", false);
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- std::vector<SPItem*> tmp=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=tmp.begin();i!=tmp.end();++i){
+ auto tmp= selection->items();
+ for(auto i=tmp.begin();i!=tmp.end();++i){
SPItem *item = *i;
Geom::OptRect bbox_pref = item->desktopPreferredBounds();
Geom::OptRect bbox_geom = item->desktopGeometricBounds();
@@ -750,7 +750,7 @@ void Transformation::applyPageScale(Inkscape::Selection *selection)
double y1 = bbox_pref->midpoint()[Geom::Y] + new_height/2;
Geom::Affine scaler = get_scale_transform_for_variable_stroke (*bbox_pref, *bbox_geom, transform_stroke, preserve, x0, y0, x1, y1);
- sp_selection_apply_affine(selection, scaler);
+ sp_object_set_apply_affine(selection, scaler);
}
}
@@ -768,15 +768,15 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection)
}
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- std::vector<SPItem*> tmp=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=tmp.begin();i!=tmp.end();++i){
+ auto tmp= selection->items();
+ for(auto i=tmp.begin();i!=tmp.end();++i){
SPItem *item = *i;
sp_item_rotate_rel(item, Geom::Rotate (angle*M_PI/180.0));
}
} else {
boost::optional<Geom::Point> center = selection->center();
if (center) {
- sp_selection_rotate_relative(selection, *center, angle);
+ sp_object_set_rotate_relative(selection, *center, angle);
}
}
@@ -788,8 +788,8 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/dialogs/transformation/applyseparately")) {
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i = items.begin();i!=items.end();++i){
+ auto items = selection->items();
+ for(auto i = items.begin();i!=items.end();++i){
SPItem *item = *i;
if (!_units_skew.isAbsolute()) { // percentage
@@ -843,7 +843,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection)
getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, <b>not used</b>."));
return;
}
- sp_selection_skew_relative(selection, *center, 0.01*skewX, 0.01*skewY);
+ sp_object_set_skew_relative(selection, *center, 0.01 * skewX, 0.01 * skewY);
} else if (_units_skew.isRadial()) { //deg or rad
double angleX = _scalar_skew_horizontal.getValue("rad");
double angleY = _scalar_skew_vertical.getValue("rad");
@@ -856,7 +856,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection)
}
double skewX = tan(-angleX);
double skewY = tan(angleY);
- sp_selection_skew_relative(selection, *center, skewX, skewY);
+ sp_object_set_skew_relative(selection, *center, skewX, skewY);
} else { // absolute displacement
double skewX = _scalar_skew_horizontal.getValue("px");
double skewY = _scalar_skew_vertical.getValue("px");
@@ -864,7 +864,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection)
getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, <b>not used</b>."));
return;
}
- sp_selection_skew_relative(selection, *center, skewX/height, skewY/width);
+ sp_object_set_skew_relative(selection, *center, skewX / height, skewY / width);
}
}
}
@@ -890,14 +890,14 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection)
}
if (_check_replace_matrix.get_active()) {
- std::vector<SPItem*> tmp=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=tmp.begin();i!=tmp.end();++i){
+ auto tmp = selection->items();
+ for(auto i=tmp.begin();i!=tmp.end();++i){
SPItem *item = *i;
item->set_item_transform(displayed);
item->updateRepr();
}
} else {
- sp_selection_apply_affine(selection, displayed); // post-multiply each object's transform
+ sp_object_set_apply_affine(selection, displayed); // post-multiply each object's transform
}
DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_DIALOG_TRANSFORM,
@@ -1043,7 +1043,7 @@ void Transformation::onReplaceMatrixToggled()
double f = _scalar_transform_f.getValue();
Geom::Affine displayed (a, b, c, d, e, f);
- Geom::Affine current = selection->itemList()[0]->transform; // take from the first item in selection
+ Geom::Affine current = selection->items().front()->transform; // take from the first item in selection
Geom::Affine new_displayed;
if (_check_replace_matrix.get_active()) {
diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp
index 3c754be29..b47e66451 100644
--- a/src/ui/interface.cpp
+++ b/src/ui/interface.cpp
@@ -1210,7 +1210,7 @@ sp_ui_drag_data_received(GtkWidget *widget,
Geom::OptRect sel_bbox = selection->visualBounds();
if (sel_bbox) {
Geom::Point m( desktop->point() - sel_bbox->midpoint() );
- sp_selection_move_relative(selection, m, false);
+ sp_object_set_move_relative(selection, m, false);
}
}
@@ -2056,8 +2056,8 @@ void ContextMenu::ImageEdit(void)
}
#endif
- std::vector<SPItem*> itemlist=_desktop->selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= _desktop->selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
Inkscape::XML::Node *ir = (*i)->getRepr();
const gchar *href = ir->attribute("xlink:href");
diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp
index 9b5b264bc..94488a700 100644
--- a/src/ui/tools/box3d-tool.cpp
+++ b/src/ui/tools/box3d-tool.cpp
@@ -109,8 +109,8 @@ static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) {
SPDefs *defs = document->getDefs();
bool has_persp = false;
- for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) {
- if (SP_IS_PERSP3D(child)) {
+ for (auto& child: defs->children) {
+ if (SP_IS_PERSP3D(&child)) {
has_persp = true;
break;
}
diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp
index 84c4adc89..d623035d9 100644
--- a/src/ui/tools/calligraphic-tool.cpp
+++ b/src/ui/tools/calligraphic-tool.cpp
@@ -921,10 +921,10 @@ void CalligraphicTool::set_to_accumulated(bool unionize, bool subtract) {
if (unionize) {
desktop->getSelection()->add(this->repr);
- sp_selected_path_union_skip_undo(desktop->getSelection(), desktop);
+ sp_selected_path_union_skip_undo(desktop->getSelection());
} else if (subtract) {
desktop->getSelection()->add(this->repr);
- sp_selected_path_diff_skip_undo(desktop->getSelection(), desktop);
+ sp_selected_path_diff_skip_undo(desktop->getSelection());
} else {
if (this->keep_selected) {
desktop->getSelection()->set(this->repr);
diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp
index 605b573d7..84f7f318c 100644
--- a/src/ui/tools/connector-tool.cpp
+++ b/src/ui/tools/connector-tool.cpp
@@ -1107,9 +1107,9 @@ void ConnectorTool::_setActiveShape(SPItem *item) {
// The idea here is to try and add a group's children to solidify
// connection handling. We react to path objects with only one node.
- for (SPObject *child = item->firstChild() ; child ; child = child->getNext() ) {
- if (SP_IS_PATH(child) && SP_PATH(child)->nodesInPath() == 1) {
- this->_activeShapeAddKnot((SPItem *) child);
+ for (auto& child: item->children) {
+ if (SP_IS_PATH(&child) && SP_PATH(&child)->nodesInPath() == 1) {
+ this->_activeShapeAddKnot((SPItem *) &child);
}
}
this->_activeShapeAddKnot(item);
@@ -1299,8 +1299,8 @@ void cc_selection_set_avoid(bool const set_avoid)
int changes = 0;
- std::vector<SPItem*> l = selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=l.begin();i!=l.end(); ++i) {
+ auto l = selection->items();
+ for(auto i=l.begin();i!=l.end(); ++i) {
SPItem *item = *i;
char const *value = (set_avoid) ? "true" : NULL;
diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp
index 838522b34..d18db8266 100644
--- a/src/ui/tools/eraser-tool.cpp
+++ b/src/ui/tools/eraser-tool.cpp
@@ -681,7 +681,7 @@ void EraserTool::set_to_accumulated() {
}
}
} else {
- toWorkOn = selection->itemList();
+ toWorkOn.insert(toWorkOn.end(), selection->items().begin(), selection->items().end());
}
wasSelection = true;
}
@@ -697,7 +697,6 @@ void EraserTool::set_to_accumulated() {
item->deleteObject(true);
sp_object_unref(item);
workDone = true;
- workDone = true;
} else if (SP_IS_GROUP(item) || use ) {
/*Do nothing*/
} else {
@@ -708,7 +707,7 @@ void EraserTool::set_to_accumulated() {
Inkscape::GC::release(dup); // parent takes over
selection->set(dup);
if (!this->nowidth) {
- sp_selected_path_union_skip_undo(selection, desktop);
+ sp_selected_path_union_skip_undo(selection);
}
selection->add(item);
if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){
@@ -719,9 +718,9 @@ void EraserTool::set_to_accumulated() {
css = 0;
}
if (this->nowidth) {
- sp_selected_path_cut_skip_undo(selection, desktop);
+ sp_selected_path_cut_skip_undo(selection);
} else {
- sp_selected_path_diff_skip_undo(selection, desktop);
+ sp_selected_path_diff_skip_undo(selection);
}
workDone = true; // TODO set this only if something was cut.
bool break_apart = prefs->getBool("/tools/eraser/break_apart", false);
@@ -734,7 +733,7 @@ void EraserTool::set_to_accumulated() {
}
if ( !selection->isEmpty() ) {
// If the item was not completely erased, track the new remainder.
- std::vector<SPItem*> nowSel(selection->itemList());
+ std::vector<SPItem*> nowSel(selection->items().begin(), selection->items().end());
for (std::vector<SPItem*>::const_iterator i2 = nowSel.begin();i2!=nowSel.end();++i2) {
remainingItems.push_back(*i2);
}
diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp
index 2f125e6ed..0b893a7ba 100644
--- a/src/ui/tools/flood-tool.cpp
+++ b/src/ui/tools/flood-tool.cpp
@@ -446,7 +446,7 @@ static void do_trace(bitmap_coords_info bci, guchar *trace_px, SPDesktop *deskto
ngettext("Area filled, path with <b>%d</b> node created and unioned with selection.","Area filled, path with <b>%d</b> nodes created and unioned with selection.",
SP_PATH(reprobj)->nodesInPath()), SP_PATH(reprobj)->nodesInPath() );
selection->add(reprobj);
- sp_selected_path_union_skip_undo(desktop->getSelection(), desktop);
+ sp_selected_path_union_skip_undo(desktop->getSelection());
} else {
desktop->messageStack()->flashF( Inkscape::WARNING_MESSAGE,
ngettext("Area filled, path with <b>%d</b> node created.","Area filled, path with <b>%d</b> nodes created.",
diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp
index e4814c3de..a084a8fd9 100644
--- a/src/ui/tools/gradient-tool.cpp
+++ b/src/ui/tools/gradient-tool.cpp
@@ -99,7 +99,7 @@ void GradientTool::selection_changed(Inkscape::Selection*) {
if (selection == NULL) {
return;
}
- guint n_obj = selection->itemList().size();
+ guint n_obj = (guint) boost::distance(selection->items());
if (!drag->isNonEmpty() || selection->isEmpty())
return;
@@ -485,10 +485,10 @@ bool GradientTool::root_handler(GdkEvent* event) {
if (over_line) {
// we take the first item in selection, because with doubleclick, the first click
// always resets selection to the single object under cursor
- sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->itemList().front()), this->mousepoint_doc, event->button.time);
+ sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->items().front()), this->mousepoint_doc, event->button.time);
} else {
- std::vector<SPItem*> items=selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = items.begin();i!=items.end();++i) {
+ auto items= selection->items();
+ for (auto i = items.begin();i!=items.end();++i) {
SPItem *item = *i;
SPGradientType new_type = (SPGradientType) prefs->getInt("/tools/gradient/newgradient", SP_GRADIENT_TYPE_LINEAR);
Inkscape::PaintTarget fsmode = (prefs->getInt("/tools/gradient/newfillorstroke", 1) != 0) ? Inkscape::FOR_FILL : Inkscape::FOR_STROKE;
@@ -890,7 +890,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
} else {
// Starting from empty space:
// Sort items so that the topmost comes last
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
sort(items.begin(),items.end(),sp_item_repr_compare_position);
// take topmost
vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke);
@@ -900,8 +900,8 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
SPCSSAttr *css = sp_repr_css_attr_new();
sp_repr_css_set_property(css, "fill-opacity", "1.0");
- std::vector<SPItem*> itemlist = selection->itemList();
- for (std::vector<SPItem*>::const_iterator i = itemlist.begin();i!=itemlist.end();++i) {
+ auto itemlist = selection->items();
+ for (auto i = itemlist.begin();i!=itemlist.end();++i) {
//FIXME: see above
sp_repr_css_change_recursive((*i)->getRepr(), css, "style");
@@ -924,7 +924,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
ec->_grdrag->local_change = true;
// give the grab out-of-bounds values of xp/yp because we're already dragging
// and therefore are already out of tolerance
- ec->_grdrag->grabKnot (selection->itemList()[0],
+ ec->_grdrag->grabKnot (selection->items().front(),
type == SP_GRADIENT_TYPE_LINEAR? POINT_LG_END : POINT_RG_R1,
-1, // ignore number (though it is always 1)
fill_or_stroke, 99999, 99999, etime);
@@ -933,7 +933,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta
// status text; we do not track coords because this branch is run once, not all the time
// during drag
- int n_objects = selection->itemList().size();
+ int n_objects = (int) boost::distance(selection->items());
rc.message_context->setF(Inkscape::NORMAL_MESSAGE,
ngettext("<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle",
"<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle", n_objects),
diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp
index ee85dd28c..29e4c9e74 100644
--- a/src/ui/tools/lpe-tool.cpp
+++ b/src/ui/tools/lpe-tool.cpp
@@ -393,8 +393,8 @@ lpetool_create_measuring_items(LpeTool *lc, Inkscape::Selection *selection)
SPCanvasGroup *tmpgrp = lc->desktop->getTempGroup();
gchar *arc_length;
double lengthval;
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
if (SP_IS_PATH(*i)) {
path = SP_PATH(*i);
curve = path->getCurve();
diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp
index 32e70bc19..f2cf8c4a2 100644
--- a/src/ui/tools/mesh-tool.cpp
+++ b/src/ui/tools/mesh-tool.cpp
@@ -102,7 +102,7 @@ void MeshTool::selection_changed(Inkscape::Selection* /*sel*/) {
return;
}
- guint n_obj = selection->itemList().size();
+ guint n_obj = (guint) boost::distance(selection->items());
if (!drag->isNonEmpty() || selection->isEmpty()) {
return;
@@ -466,11 +466,11 @@ bool MeshTool::root_handler(GdkEvent* event) {
if (over_line) {
// We take the first item in selection, because with doubleclick, the first click
// always resets selection to the single object under cursor
- sp_mesh_context_split_near_point(this, selection->itemList()[0], this->mousepoint_doc, event->button.time);
+ sp_mesh_context_split_near_point(this, selection->items().front(), this->mousepoint_doc, event->button.time);
} else {
// Create a new gradient with default coordinates.
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPItem *item = *i;
SPGradientType new_type = SP_GRADIENT_TYPE_MESH;
Inkscape::PaintTarget fsmode = (prefs->getInt("/tools/gradient/newfillorstroke", 1) != 0) ? Inkscape::FOR_FILL : Inkscape::FOR_STROKE;
@@ -944,7 +944,7 @@ static void sp_mesh_end_drag(MeshTool &rc) {
} else {
// Starting from empty space:
// Sort items so that the topmost comes last
- std::vector<SPItem*> items(selection->itemList());
+ std::vector<SPItem*> items(selection->items().begin(), selection->items().end());
sort(items.begin(),items.end(),sp_item_repr_compare_position);
// take topmost
vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke);
@@ -954,8 +954,8 @@ static void sp_mesh_end_drag(MeshTool &rc) {
SPCSSAttr *css = sp_repr_css_attr_new();
sp_repr_css_set_property(css, "fill-opacity", "1.0");
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= selection->items();
+ for(auto i=items.begin();i!=items.end();++i){
//FIXME: see above
sp_repr_css_change_recursive((*i)->getRepr(), css, "style");
@@ -971,7 +971,7 @@ static void sp_mesh_end_drag(MeshTool &rc) {
// status text; we do not track coords because this branch is run once, not all the time
// during drag
- int n_objects = selection->itemList().size();
+ int n_objects = (int) boost::distance(selection->items());
rc.message_context->setF(Inkscape::NORMAL_MESSAGE,
ngettext("<b>Gradient</b> for %d object; with <b>Ctrl</b> to snap angle",
"<b>Gradient</b> for %d objects; with <b>Ctrl</b> to snap angle", n_objects),
diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp
index bf18d4a2e..f7f09610c 100644
--- a/src/ui/tools/node-tool.cpp
+++ b/src/ui/tools/node-tool.cpp
@@ -372,8 +372,8 @@ void gather_items(NodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Shape
r.role = role;
s.insert(r);
} else if (role != SHAPE_ROLE_NORMAL && (SP_IS_GROUP(obj) || SP_IS_OBJECTGROUP(obj))) {
- for (SPObject *c = obj->children; c; c = c->next) {
- gather_items(nt, base, c, role, s);
+ for (auto& c: obj->children) {
+ gather_items(nt, base, &c, role, s);
}
} else if (SP_IS_ITEM(obj)) {
SPItem *item = static_cast<SPItem*>(obj);
@@ -401,8 +401,8 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) {
std::set<ShapeRecord> shapes;
- std::vector<SPItem*> items=sel->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ auto items= sel->items();
+ for(auto i=items.begin();i!=items.end();++i){
SPObject *obj = *i;
if (SP_IS_ITEM(obj)) {
@@ -437,8 +437,9 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) {
}
}
+ std::vector<SPItem *> vec(sel->items().begin(), sel->items().end());
_previous_selection = _current_selection;
- _current_selection = sel->itemList();
+ _current_selection = vec;
this->_multipath->setItems(shapes);
this->update_tip(NULL);
diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp
index 34ca2926d..86a2dbed3 100644
--- a/src/ui/tools/select-tool.cpp
+++ b/src/ui/tools/select-tool.cpp
@@ -467,7 +467,7 @@ bool SelectTool::root_handler(GdkEvent* event) {
case GDK_2BUTTON_PRESS:
if (event->button.button == 1) {
if (!selection->isEmpty()) {
- SPItem *clicked_item = selection->itemList()[0];
+ SPItem *clicked_item = selection->items().front();
if (dynamic_cast<SPGroup *>(clicked_item) && !dynamic_cast<SPBox3D *>(clicked_item)) { // enter group if it's not a 3D box
desktop->setCurrentLayer(clicked_item);
diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp
index 3fafac2a7..3649008ff 100644
--- a/src/ui/tools/spray-tool.cpp
+++ b/src/ui/tools/spray-tool.cpp
@@ -13,6 +13,7 @@
* Jon A. Cruz <jon@joncruz.org>
* Abhishek Sharma
* Jabiertxo Arraiza <jabier.arraiza@marker.es>
+ * Adrian Boguszewski
*
* Copyright (C) 2009 authors
*
@@ -182,6 +183,7 @@ SprayTool::SprayTool()
}
SprayTool::~SprayTool() {
+ object_set.clear();
this->enableGrDrag(false);
this->style_set_connection.disconnect();
@@ -196,7 +198,7 @@ void SprayTool::update_cursor(bool /*with_shift*/) {
gchar *sel_message = NULL;
if (!desktop->selection->isEmpty()) {
- num = desktop->selection->itemList().size();
+ num = (guint) boost::distance(desktop->selection->items());
sel_message = g_strdup_printf(ngettext("<b>%i</b> object selected","<b>%i</b> objects selected",num), num);
} else {
sel_message = g_strdup_printf("%s", _("<b>Nothing</b> selected"));
@@ -577,7 +579,7 @@ static bool fit_item(SPDesktop *desktop,
if (selection->isEmpty()) {
return false;
}
- std::vector<SPItem*> const items_selected(selection->itemList());
+ std::vector<SPItem*> const items_selected(selection->items().begin(), selection->items().end());
std::vector<SPItem*> items_down_erased;
for (std::vector<SPItem*>::const_iterator i=items_down.begin(); i!=items_down.end(); ++i) {
SPItem *item_down = *i;
@@ -848,7 +850,7 @@ static bool fit_item(SPDesktop *desktop,
}
static bool sp_spray_recursive(SPDesktop *desktop,
- Inkscape::Selection *selection,
+ Inkscape::ObjectSet *set,
SPItem *item,
Geom::Point p,
Geom::Point /*vector*/,
@@ -893,7 +895,7 @@ static bool sp_spray_recursive(SPDesktop *desktop,
if (box) {
// convert 3D boxes to ordinary groups before spraying their shapes
item = box3d_convert_to_group(box);
- selection->add(item);
+ set->add(item);
}
}
@@ -982,23 +984,11 @@ static bool sp_spray_recursive(SPDesktop *desktop,
}
#ifdef ENABLE_SPRAY_MODE_SINGLE_PATH
} else if (mode == SPRAY_MODE_SINGLE_PATH) {
+ long setSize = boost::distance(set->items());
+ SPItem *parent_item = setSize > 0 ? set->items().front() : nullptr; // Initial object
+ SPItem *unionResult = setSize > 1 ? *(++set->items().begin()) : nullptr; // Previous union
+ SPItem *item_copied = nullptr; // Projected object
- SPItem *parent_item = NULL; // Initial object
- SPItem *item_copied = NULL; // Projected object
- SPItem *unionResult = NULL; // Previous union
-
- int i=1;
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator it=items.begin();it!=items.end(); ++it){
- SPItem *item1 = *it;
- if (i == 1) {
- parent_item = item1;
- }
- if (i == 2) {
- unionResult = item1;
- }
- i++;
- }
if (parent_item) {
SPDocument *doc = parent_item->document;
Inkscape::XML::Document* xml_doc = doc->getReprDoc();
@@ -1031,13 +1021,13 @@ static bool sp_spray_recursive(SPDesktop *desktop,
sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y]));
// Union and duplication
- selection->clear();
- selection->add(item_copied);
+ set->clear();
+ set->add(item_copied);
if (unionResult) { // No need to add the very first item (initialized with NULL).
- selection->add(unionResult);
+ set->add(unionResult);
}
- sp_selected_path_union_skip_undo(selection, selection->desktop());
- selection->add(parent_item);
+ sp_selected_path_union_skip_undo(set);
+ set->add(parent_item);
Inkscape::GC::release(copy);
did = true;
}
@@ -1132,9 +1122,8 @@ static bool sp_spray_recursive(SPDesktop *desktop,
static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point p, Geom::Point vector, bool reverse)
{
SPDesktop *desktop = tc->desktop;
- Inkscape::Selection *selection = desktop->getSelection();
-
- if (selection->isEmpty()) {
+ Inkscape::ObjectSet *set = tc->objectSet();
+ if (set->isEmpty()) {
return false;
}
@@ -1156,7 +1145,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point
double move_standard_deviation = get_move_standard_deviation(tc);
{
- std::vector<SPItem*> const items(selection->itemList());
+ std::vector<SPItem*> const items(set->items().begin(), set->items().end());
for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end(); ++i){
SPItem *item = *i;
@@ -1168,7 +1157,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point
SPItem *item = *i;
g_assert(item != NULL);
if (sp_spray_recursive(desktop
- , selection
+ , set
, item
, p, vector
, tc->mode
@@ -1262,6 +1251,11 @@ bool SprayTool::root_handler(GdkEvent* event) {
this->is_dilating = true;
this->has_dilated = false;
+ object_set = *desktop->getSelection();
+ if (mode == SPRAY_MODE_SINGLE_PATH) {
+ desktop->getSelection()->clear();
+ }
+
if(this->is_dilating && event->button.button == 1 && !this->space_panning) {
sp_spray_dilate(this, motion_w, desktop->dt2doc(motion_dt), Geom::Point(0,0), MOD__SHIFT(event));
}
@@ -1285,7 +1279,7 @@ bool SprayTool::root_handler(GdkEvent* event) {
guint num = 0;
if (!desktop->selection->isEmpty()) {
- num = desktop->selection->itemList().size();
+ num = (guint) boost::distance(desktop->selection->items());
}
if (num == 0) {
this->message_context->flash(Inkscape::ERROR_MESSAGE, _("<b>Nothing selected!</b> Select objects to spray."));
@@ -1370,6 +1364,8 @@ bool SprayTool::root_handler(GdkEvent* event) {
SP_VERB_CONTEXT_SPRAY, _("Spray with clones"));
break;
case SPRAY_MODE_SINGLE_PATH:
+ sp_selected_path_union_skip_undo(objectSet());
+ desktop->getSelection()->add(object_set.objects().begin(), object_set.objects().end());
DocumentUndo::done(this->desktop->getDocument(),
SP_VERB_CONTEXT_SPRAY, _("Spray in single path"));
break;
diff --git a/src/ui/tools/spray-tool.h b/src/ui/tools/spray-tool.h
index c81110b37..d5504d565 100644
--- a/src/ui/tools/spray-tool.h
+++ b/src/ui/tools/spray-tool.h
@@ -13,6 +13,7 @@
* Vincent MONTAGNE
* Pierre BARBRY-BLOT
* Jabiertxo ARRAIZA
+ * Adrian Boguszewski
*
* Copyright (C) 2009 authors
*
@@ -120,8 +121,14 @@ public:
virtual const std::string& getPrefsPath();
-
void update_cursor(bool /*with_shift*/);
+
+ ObjectSet* objectSet() {
+ return &object_set;
+ }
+
+private:
+ ObjectSet object_set;
};
}
diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp
index f85744744..8a35882b9 100644
--- a/src/ui/tools/tool-base.cpp
+++ b/src/ui/tools/tool-base.cpp
@@ -1051,9 +1051,8 @@ void sp_event_root_menu_popup(SPDesktop *desktop, SPItem *item, GdkEvent *event)
item = sp_event_context_find_item (desktop,
Geom::Point(event->button.x, event->button.y), FALSE, FALSE);
- /* fixme: This is not what I want but works for now (Lauris) */
- if (event->type == GDK_KEY_PRESS) {
- item = desktop->getSelection()->itemList().front();
+ if (event->type == GDK_KEY_PRESS && !desktop->getSelection()->isEmpty()) {
+ item = desktop->getSelection()->items().front();
}
ContextMenu* CM = new ContextMenu(desktop, item);
@@ -1127,8 +1126,9 @@ SPItem *sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p,
SPItem *item = 0;
if (select_under) {
- SPItem *selected_at_point = desktop->getItemFromListAtPointBottom(
- desktop->selection->itemList(), p);
+ auto tmp = desktop->selection->items();
+ std::vector<SPItem *> vec(tmp.begin(), tmp.end());
+ SPItem *selected_at_point = desktop->getItemFromListAtPointBottom(vec, p);
item = desktop->getItemAtPoint(p, into_groups, selected_at_point);
if (item == NULL) { // we may have reached bottom, flip over to the top
item = desktop->getItemAtPoint(p, into_groups, NULL);
diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp
index fbf1b2a0b..a0394ecd4 100644
--- a/src/ui/tools/tweak-tool.cpp
+++ b/src/ui/tools/tweak-tool.cpp
@@ -141,7 +141,7 @@ void TweakTool::update_cursor (bool with_shift) {
gchar *sel_message = NULL;
if (!desktop->selection->isEmpty()) {
- num = desktop->selection->itemList().size();
+ num = (guint) boost::distance(desktop->selection->items());
sel_message = g_strdup_printf(ngettext("<b>%i</b> object selected","<b>%i</b> objects selected",num), num);
} else {
sel_message = g_strdup_printf("%s", _("<b>Nothing</b> selected"));
@@ -373,9 +373,9 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P
if (dynamic_cast<SPGroup *>(item) && !dynamic_cast<SPBox3D *>(item)) {
GSList *children = NULL;
- for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) {
- if (dynamic_cast<SPItem *>(static_cast<SPObject *>(child))) {
- children = g_slist_prepend(children, child);
+ for (auto& child: item->children) {
+ if (dynamic_cast<SPItem *>(static_cast<SPObject *>(&child))) {
+ children = g_slist_prepend(children, &child);
}
}
@@ -820,8 +820,8 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or
double offset_l = 0;
double offset_h = 0;
SPObject *child_prev = NULL;
- for (SPObject *child = vector->firstChild(); child; child = child->getNext()) {
- SPStop *stop = dynamic_cast<SPStop *>(child);
+ for (auto& child: vector->children) {
+ SPStop *stop = dynamic_cast<SPStop *>(&child);
if (!stop) {
continue;
}
@@ -866,7 +866,7 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or
}
offset_l = offset_h;
- child_prev = child;
+ child_prev = &child;
}
}
@@ -882,8 +882,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
bool did = false;
if (dynamic_cast<SPGroup *>(item)) {
- for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) {
- SPItem *childItem = dynamic_cast<SPItem *>(child);
+ for (auto& child: item->children) {
+ SPItem *childItem = dynamic_cast<SPItem *>(&child);
if (childItem) {
if (sp_tweak_color_recursive (mode, childItem, item_at_point,
fill_goal, do_fill,
@@ -939,9 +939,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
Geom::Affine i2dt = item->i2dt_affine ();
if (style->filter.set && style->getFilter()) {
//cycle through filter primitives
- SPObject *primitive_obj = style->getFilter()->children;
- while (primitive_obj) {
- SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(primitive_obj);
+ for (auto& primitive_obj: style->getFilter()->children) {
+ SPFilterPrimitive *primitive = dynamic_cast<SPFilterPrimitive *>(&primitive_obj);
if (primitive) {
//if primitive is gaussianblur
SPGaussianBlur * spblur = dynamic_cast<SPGaussianBlur *>(primitive);
@@ -950,7 +949,6 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point,
blur_now += num * i2dt.descrim(); // sum all blurs in the filter
}
}
- primitive_obj = primitive_obj->next;
}
}
double perimeter = bbox->dimensions()[Geom::X] + bbox->dimensions()[Geom::Y];
@@ -1064,8 +1062,8 @@ sp_tweak_dilate (TweakTool *tc, Geom::Point event_p, Geom::Point p, Geom::Point
double move_force = get_move_force(tc);
double color_force = MIN(sqrt(path_force)/20.0, 1);
- std::vector<SPItem*> items=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end(); ++i){
+ auto items= selection->items();
+ for(auto i=items.begin();i!=items.end(); ++i){
SPItem *item = *i;
if (is_color_mode (tc->mode)) {
@@ -1173,7 +1171,7 @@ bool TweakTool::root_handler(GdkEvent* event) {
guint num = 0;
if (!desktop->selection->isEmpty()) {
- num = desktop->selection->itemList().size();
+ num = (guint) boost::distance(desktop->selection->items());
}
if (num == 0) {
this->message_context->flash(Inkscape::ERROR_MESSAGE, _("<b>Nothing selected!</b> Select objects to tweak."));
diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp
index 7ee34f3b3..4432a6e09 100644
--- a/src/ui/widget/layer-selector.cpp
+++ b/src/ui/widget/layer-selector.cpp
@@ -19,6 +19,8 @@
#include "ui/dialog/layer-properties.h"
#include <glibmm/i18n.h>
+#include <boost/range/adaptor/filtered.hpp>
+#include <boost/range/adaptor/reversed.hpp>
#include "desktop.h"
@@ -346,27 +348,17 @@ void LayerSelector::_buildSiblingEntries(
unsigned depth, SPObject &parent,
Inkscape::Util::List<SPObject &> hierarchy
) {
- using Inkscape::Util::List;
using Inkscape::Util::rest;
- using Inkscape::Util::reverse_list_in_place;
- using Inkscape::Util::filter_list;
- Inkscape::Util::List<SPObject &> siblings(
- reverse_list_in_place(
- filter_list<SPObject::SiblingIterator>(
- is_layer(_desktop), parent.firstChild(), NULL
- )
- )
- );
+ auto siblings = parent.children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed;
SPObject *layer( hierarchy ? &*hierarchy : NULL );
- while (siblings) {
- _buildEntry(depth, *siblings);
- if ( &*siblings == layer ) {
+ for (auto& sib: siblings) {
+ _buildEntry(depth, sib);
+ if ( &sib == layer ) {
_buildSiblingEntries(depth+1, *layer, rest(hierarchy));
}
- ++siblings;
}
}
diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp
index c8ac20c54..1727660c8 100644
--- a/src/ui/widget/object-composite-settings.cpp
+++ b/src/ui/widget/object-composite-settings.cpp
@@ -118,7 +118,7 @@ ObjectCompositeSettings::_blendBlurValueChanged()
const Glib::ustring blendmode = _fe_cb.get_blend_mode();
//apply created filter to every selected item
- std::vector<SPObject*> sel=_subject->list();
+ std::vector<SPObject*> sel = _subject->list();
for (std::vector<SPObject*>::const_iterator i = sel.begin() ; i != sel.end() ; ++i ) {
if (!SP_IS_ITEM(*i)) {
continue;
diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp
index 811ed2221..a779e6feb 100644
--- a/src/ui/widget/style-subject.cpp
+++ b/src/ui/widget/style-subject.cpp
@@ -54,11 +54,13 @@ Inkscape::Selection *StyleSubject::Selection::_getSelection() const {
}
}
-std::vector<SPObject*> StyleSubject::Selection::list(){
+std::vector<SPObject*> StyleSubject::Selection::list() {
Inkscape::Selection *selection = _getSelection();
- if(selection)
- return selection->list();
- else return std::vector<SPObject*>();
+ if(selection) {
+ return std::vector<SPObject *>(selection->objects().begin(), selection->objects().end());
+ }
+
+ return std::vector<SPObject*>();
}
Geom::OptRect StyleSubject::Selection::getBounds(SPItem::BBoxType type) {
diff --git a/src/uri-references.cpp b/src/uri-references.cpp
index d626d0e41..07f2d168b 100644
--- a/src/uri-references.cpp
+++ b/src/uri-references.cpp
@@ -74,10 +74,11 @@ bool URIReference::_acceptObject(SPObject *obj) const
std::vector<int> positions;
while (owner->cloned) {
int position = 0;
- SPObject *c = owner->parent->firstChild();
- while (c != owner && dynamic_cast<SPObject *>(c)) {
+ for (auto &child: owner->parent->children) {
+ if(&child == owner) {
+ break;
+ }
position++;
- c = c->next;
}
positions.push_back(position);
owner = owner->parent;
@@ -90,7 +91,7 @@ bool URIReference::_acceptObject(SPObject *obj) const
g_warning("cloned object with no known type\n");
return false;
}
- for (int i = positions.size() - 2; i >= 0; i--)
+ for (int i = (int) (positions.size() - 2); i >= 0; i--)
owner = owner->childList(false)[positions[i]];
}
// once we have the "original" object (hopefully) we look at who is referencing it
diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp
index 987211edc..d849b35d9 100644
--- a/src/vanishing-point.cpp
+++ b/src/vanishing-point.cpp
@@ -256,8 +256,8 @@ VanishingPoint::set_pos(Proj::Pt2 const &pt) {
std::list<SPBox3D *>
VanishingPoint::selectedBoxes(Inkscape::Selection *sel) {
std::list<SPBox3D *> sel_boxes;
- std::vector<SPItem*> itemlist=sel->itemList();
- for (std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i) {
+ auto itemlist= sel->items();
+ for (auto i=itemlist.begin();i!=itemlist.end();++i) {
SPItem *item = *i;
SPBox3D *box = dynamic_cast<SPBox3D *>(item);
if (box && this->hasBox(box)) {
@@ -395,8 +395,8 @@ VPDragger::VPsOfSelectedBoxes() {
VanishingPoint *vp;
// FIXME: Should we take the selection from the parent VPDrag? I guess it shouldn't make a difference.
Inkscape::Selection *sel = SP_ACTIVE_DESKTOP->getSelection();
- std::vector<SPItem*> itemlist=sel->itemList();
- for (std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i) {
+ auto itemlist= sel->items();
+ for (auto i=itemlist.begin();i!=itemlist.end();++i) {
SPItem *item = *i;
SPBox3D *box = dynamic_cast<SPBox3D *>(item);
if (box) {
@@ -573,8 +573,8 @@ VPDrag::updateDraggers ()
g_return_if_fail (this->selection != NULL);
- std::vector<SPItem*> itemlist=this->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i) {
+ auto itemlist= this->selection->items();
+ for (auto i=itemlist.begin();i!=itemlist.end();++i) {
SPItem *item = *i;
SPBox3D *box = dynamic_cast<SPBox3D *>(item);
if (box) {
@@ -605,8 +605,8 @@ VPDrag::updateLines ()
g_return_if_fail (this->selection != NULL);
- std::vector<SPItem*> itemlist=this->selection->itemList();
- for (std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i) {
+ auto itemlist= this->selection->items();
+ for (auto i=itemlist.begin();i!=itemlist.end();++i) {
SPItem *item = *i;
SPBox3D *box = dynamic_cast<SPBox3D *>(item);
if (box) {
@@ -623,11 +623,11 @@ VPDrag::updateBoxHandles ()
// FIXME: Is there a way to update the knots without accessing the
// (previously) statically linked function KnotHolder::update_knots?
- std::vector<SPItem*> sel = selection->itemList();
+ auto sel = selection->items();
if (sel.empty())
return; // no selection
- if (sel.size() > 1) {
+ if (boost::distance(sel) > 1) {
// Currently we only show handles if a single box is selected
return;
}
diff --git a/src/verbs.cpp b/src/verbs.cpp
index d781442eb..59ad06fa1 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -1517,7 +1517,7 @@ void ObjectVerb::perform( SPAction *action, void *data)
sp_selection_rotate_90(dt, true);
break;
case SP_VERB_OBJECT_FLATTEN:
- sp_selection_remove_transform(dt);
+ sp_object_set_remove_transform(dt);
break;
case SP_VERB_OBJECT_FLOW_TEXT:
text_flow_into_shape();
@@ -1529,12 +1529,12 @@ void ObjectVerb::perform( SPAction *action, void *data)
flowtext_to_text();
break;
case SP_VERB_OBJECT_FLIP_HORIZONTAL:
- sp_selection_scale_relative(sel, center, Geom::Scale(-1.0, 1.0));
+ sp_object_set_scale_relative(sel, center, Geom::Scale(-1.0, 1.0));
DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_HORIZONTAL,
_("Flip horizontally"));
break;
case SP_VERB_OBJECT_FLIP_VERTICAL:
- sp_selection_scale_relative(sel, center, Geom::Scale(1.0, -1.0));
+ sp_object_set_scale_relative(sel, center, Geom::Scale(1.0, -1.0));
DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_VERTICAL,
_("Flip vertically"));
break;
diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp
index 81cde97d4..9b408a7b2 100644
--- a/src/widgets/arc-toolbar.cpp
+++ b/src/widgets/arc-toolbar.cpp
@@ -96,8 +96,8 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v
gchar* namespaced_name = g_strconcat("sodipodi:", value_name, NULL);
bool modmade = false;
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_GENERICELLIPSE(item)) {
@@ -162,8 +162,8 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl )
bool modmade = false;
if ( ege_select_one_action_get_active(act) != 0 ) {
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_GENERICELLIPSE(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -173,8 +173,8 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl )
}
}
} else {
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_GENERICELLIPSE(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -263,8 +263,8 @@ static void sp_arc_toolbox_selection_changed(Inkscape::Selection *selection, GOb
purge_repr_listener( tbl, tbl );
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_GENERICELLIPSE(item)) {
n_selected++;
diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp
index 46493f3ae..a078ecec4 100644
--- a/src/widgets/connector-toolbar.cpp
+++ b/src/widgets/connector-toolbar.cpp
@@ -94,8 +94,8 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl
gchar *value = is_orthog ? orthog_str : polyline_str ;
bool modmade = false;
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (Inkscape::UI::Tools::cc_item_is_connector(item)) {
@@ -141,8 +141,8 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl)
g_ascii_dtostr(value, G_ASCII_DTOSTR_BUF_SIZE, newValue);
bool modmade = false;
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (Inkscape::UI::Tools::cc_item_is_connector(item)) {
@@ -224,7 +224,9 @@ static void sp_connector_graph_layout(void)
int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED);
- graphlayout(SP_ACTIVE_DESKTOP->getSelection()->itemList());
+ auto tmp = SP_ACTIVE_DESKTOP->getSelection()->items();
+ std::vector<SPItem *> vec(tmp.begin(), tmp.end());
+ graphlayout(vec);
prefs->setInt("/options/clonecompensation/value", saved_compensation);
diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp
index aff88aca5..c35519b68 100644
--- a/src/widgets/fill-style.cpp
+++ b/src/widgets/fill-style.cpp
@@ -472,7 +472,7 @@ void FillNStroke::updateFromPaint()
SPDocument *document = desktop->getDocument();
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> const items = selection->itemList();
+ std::vector<SPItem*> const items(selection->items().begin(), selection->items().end());
switch (psel->mode) {
case SPPaintSelector::MODE_EMPTY:
diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp
index fd2eb7efe..8474327ca 100644
--- a/src/widgets/gradient-toolbar.cpp
+++ b/src/widgets/gradient-toolbar.cpp
@@ -117,8 +117,8 @@ void gr_apply_gradient(Inkscape::Selection *selection, GrDrag *drag, SPGradient
}
// If no drag or no dragger selected, act on selection
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
gr_apply_gradient_to_item(*i, gr, initialType, initialMode, initialMode);
}
}
@@ -217,8 +217,8 @@ void gr_get_dt_selected_gradient(Inkscape::Selection *selection, SPGradient *&gr
{
SPGradient *gradient = 0;
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;// get the items gradient, not the getVector() version
SPStyle *style = item->style;
SPPaintServer *server = 0;
@@ -285,8 +285,8 @@ void gr_read_selection( Inkscape::Selection *selection,
}
// If no selected dragger, read desktop selection
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
SPStyle *style = item->style;
@@ -721,9 +721,9 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool
static void select_stop_in_list( GtkWidget *combo_box, SPGradient *gradient, SPStop *new_stop, GtkWidget *data, gboolean block)
{
int i = 0;
- for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
- if (ochild == new_stop) {
+ for (auto& ochild: gradient->children) {
+ if (SP_IS_STOP(&ochild)) {
+ if (&ochild == new_stop) {
blocked = block;
gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box) , i);
gr_stop_set_offset(GTK_COMBO_BOX(combo_box), data);
@@ -766,9 +766,9 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S
/* Populate the combobox store */
std::vector<SPObject *> sl;
if ( gradient->hasStops() ) {
- for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
- sl.push_back(ochild);
+ for (auto& ochild: gradient->children) {
+ if (SP_IS_STOP(&ochild)) {
+ sl.push_back(&ochild);
}
}
}
diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp
index ed88432f1..0c5f3cf47 100644
--- a/src/widgets/gradient-vector.cpp
+++ b/src/widgets/gradient-vector.cpp
@@ -335,13 +335,13 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr)
static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude)
{
- for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) {
- if (SP_IS_ITEM(child)) {
- list = g_slist_prepend(list, SP_ITEM(child));
+ for (auto& child: from->children) {
+ if (SP_IS_ITEM(&child)) {
+ list = g_slist_prepend(list, SP_ITEM(&child));
}
- if (ingroups || SP_IS_ITEM(child)) {
- list = get_all_doc_items(list, child, onlyvisible, onlysensitive, ingroups, exclude);
+ if (ingroups || SP_IS_ITEM(&child)) {
+ list = get_all_doc_items(list, &child, onlyvisible, onlysensitive, ingroups, exclude);
}
}
@@ -489,10 +489,10 @@ static void verify_grad(SPGradient *gradient)
int i = 0;
SPStop *stop = NULL;
/* count stops */
- for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
+ for (auto& ochild: gradient->children) {
+ if (SP_IS_STOP(&ochild)) {
i++;
- stop = SP_STOP(ochild);
+ stop = SP_STOP(&ochild);
}
}
@@ -532,9 +532,9 @@ static void select_stop_in_list( GtkWidget *vb, SPGradient *gradient, SPStop *ne
GtkWidget *combo_box = static_cast<GtkWidget *>(g_object_get_data(G_OBJECT(vb), "combo_box"));
int i = 0;
- for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
- if (ochild == new_stop) {
+ for (auto& ochild: gradient->children) {
+ if (SP_IS_STOP(&ochild)) {
+ if (&ochild == new_stop) {
gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box) , i);
break;
}
@@ -567,9 +567,9 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s
/* Populate the combobox store */
GSList *sl = NULL;
if ( gradient->hasStops() ) {
- for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) {
- if (SP_IS_STOP(ochild)) {
- sl = g_slist_append(sl, ochild);
+ for (auto& ochild: gradient->children) {
+ if (SP_IS_STOP(&ochild)) {
+ sl = g_slist_append(sl, &ochild);
}
}
}
diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp
index 3bc6cb288..fb540b5f5 100644
--- a/src/widgets/mesh-toolbar.cpp
+++ b/src/widgets/mesh-toolbar.cpp
@@ -80,8 +80,8 @@ void ms_read_selection( Inkscape::Selection *selection,
bool first = true;
ms_type = SP_MESH_TYPE_COONS;
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
SPStyle *style = item->style;
@@ -207,8 +207,8 @@ void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMesh *&ms_sel
{
SPMesh *gradient = 0;
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;// get the items gradient, not the getVector() version
SPStyle *style = item->style;
SPPaintServer *server = 0;
diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp
index 32cdb0a7d..582fb66ba 100644
--- a/src/widgets/pencil-toolbar.cpp
+++ b/src/widgets/pencil-toolbar.cpp
@@ -237,8 +237,8 @@ static void sp_pencil_tb_defaults(GtkWidget * /*widget*/, GObject *obj)
static void sp_simplify_flatten(GtkWidget * /*widget*/, GObject *obj)
{
SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(obj, "desktop"));
- std::vector<SPItem *> selected = desktop->getSelection()->itemList();
- for (std::vector<SPItem *>::iterator it(selected.begin()); it != selected.end(); ++it){
+ auto selected = desktop->getSelection()->items();
+ for (auto it(selected.begin()); it != selected.end(); ++it){
SPLPEItem* lpeitem = dynamic_cast<SPLPEItem*>(*it);
if (lpeitem && lpeitem->hasPathEffect()){
PathEffectList lpelist = lpeitem->getEffectList();
@@ -282,8 +282,8 @@ static void sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tb
gtk_adjustment_get_value(adj));
g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) );
SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(tbl, "desktop"));
- std::vector<SPItem *> selected = desktop->getSelection()->itemList();
- for (std::vector<SPItem *>::iterator it(selected.begin()); it != selected.end(); ++it){
+ auto selected = desktop->getSelection()->items();
+ for (auto it(selected.begin()); it != selected.end(); ++it){
SPLPEItem* lpeitem = dynamic_cast<SPLPEItem*>(*it);
if (lpeitem && lpeitem->hasPathEffect()){
Inkscape::LivePathEffect::Effect* simplify = lpeitem->getPathEffectOfType(Inkscape::LivePathEffect::SIMPLIFY);
diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp
index c9b75294b..67947c1fd 100644
--- a/src/widgets/rect-toolbar.cpp
+++ b/src/widgets/rect-toolbar.cpp
@@ -102,8 +102,8 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *
bool modmade = false;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
if (SP_IS_RECT(*i)) {
if (gtk_adjustment_get_value(adj) != 0) {
(SP_RECT(*i)->*setter)(Quantity::convert(gtk_adjustment_get_value(adj), unit, "px"));
@@ -239,8 +239,8 @@ static void sp_rect_toolbox_selection_changed(Inkscape::Selection *selection, GO
}
purge_repr_listener( tbl, tbl );
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
if (SP_IS_RECT(*i)) {
n_selected++;
item = *i;
diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp
index 81fb2371b..e551c28c3 100644
--- a/src/widgets/select-toolbar.cpp
+++ b/src/widgets/select-toolbar.cpp
@@ -254,7 +254,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl)
scaler = get_scale_transform_for_uniform_stroke (*bbox_geom, 0, 0, false, false, x0, y0, x1, y1);
}
- sp_selection_apply_affine(selection, scaler);
+ sp_object_set_apply_affine(selection, scaler);
DocumentUndo::maybeDone(document, actionkey, SP_VERB_CONTEXT_SELECT,
_("Transform by toolbar"));
diff --git a/src/widgets/spiral-toolbar.cpp b/src/widgets/spiral-toolbar.cpp
index 7406be255..98d21c84d 100644
--- a/src/widgets/spiral-toolbar.cpp
+++ b/src/widgets/spiral-toolbar.cpp
@@ -76,8 +76,8 @@ static void sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustr
gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), NULL);
bool modmade = false;
- std::vector<SPItem*> itemlist=desktop->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ auto itemlist= desktop->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
SPItem *item = *i;
if (SP_IS_SPIRAL(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -192,8 +192,8 @@ static void sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection,
purge_repr_listener( tbl, tbl );
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
SPItem *item = *i;
if (SP_IS_SPIRAL(item)) {
n_selected++;
diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp
index e06733740..8f667a656 100644
--- a/src/widgets/star-toolbar.cpp
+++ b/src/widgets/star-toolbar.cpp
@@ -81,8 +81,8 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu
bool modmade = false;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -126,8 +126,8 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl
bool modmade = false;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -183,8 +183,8 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d
gtk_action_set_visible( prop_action, !flat );
}
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -222,8 +222,8 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg
bool modmade = false;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -262,8 +262,8 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl
bool modmade = false;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
Inkscape::XML::Node *repr = item->getRepr();
@@ -365,8 +365,8 @@ sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl)
purge_repr_listener( tbl, tbl );
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (SP_IS_STAR(item)) {
n_selected++;
diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp
index 2a0a10efa..b0c23a88c 100644
--- a/src/widgets/stroke-marker-selector.cpp
+++ b/src/widgets/stroke-marker-selector.cpp
@@ -329,10 +329,10 @@ GSList *MarkerComboBox::get_marker_list (SPDocument *source)
return NULL;
}
- for ( SPObject *child = defs->firstChild(); child; child = child->getNext() )
+ for (auto& child: defs->children)
{
- if (SP_IS_MARKER(child)) {
- ml = g_slist_prepend (ml, child);
+ if (SP_IS_MARKER(&child)) {
+ ml = g_slist_prepend (ml, &child);
}
}
return ml;
diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp
index e6e1a49c9..4a658c5dc 100644
--- a/src/widgets/stroke-style.cpp
+++ b/src/widgets/stroke-style.cpp
@@ -473,8 +473,8 @@ void StrokeStyle::markerSelectCB(MarkerComboBox *marker_combo, StrokeStyle *spw,
//spw->updateMarkerHist(which);
Inkscape::Selection *selection = spw->desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end();++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end();++i){
SPItem *item = *i;
if (!SP_IS_SHAPE(item) || SP_IS_RECT(item)) { // can't set marker to rect, until it's converted to using <path>
continue;
@@ -934,7 +934,7 @@ StrokeStyle::updateLine()
if (!sel || sel->isEmpty())
return;
- std::vector<SPItem*> const objects = sel->itemList();
+ std::vector<SPItem*> const objects(sel->items().begin(), sel->items().end());
SPObject * const object = objects[0];
SPStyle * const style = object->style;
@@ -990,7 +990,7 @@ StrokeStyle::scaleLine()
SPDocument *document = desktop->getDocument();
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> items=selection->itemList();
+ auto items= selection->items();
/* TODO: Create some standardized method */
SPCSSAttr *css = sp_repr_css_attr_new();
@@ -1005,7 +1005,7 @@ StrokeStyle::scaleLine()
int ndash;
dashSelector->get_dash(&ndash, &dash, &offset);
- for(std::vector<SPItem*>::const_iterator i=items.begin();i!=items.end();++i){
+ for(auto i=items.begin();i!=items.end();++i){
/* Set stroke width */
double width;
if (unit->type == Inkscape::Util::UNIT_TYPE_LINEAR) {
diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp
index 4ab631765..0160bcac7 100644
--- a/src/widgets/text-toolbar.cpp
+++ b/src/widgets/text-toolbar.cpp
@@ -374,8 +374,8 @@ static void sp_text_align_mode_changed( EgeSelectOneAction *act, GObject *tbl )
// move the x of all texts to preserve the same bbox
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
if (SP_IS_TEXT(*i)) {
SPItem *item = *i;
@@ -556,8 +556,8 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl )
// Only need to save for undo if a text item has been changed.
Inkscape::Selection *selection = desktop->getSelection();
bool modmade = false;
- std::vector<SPItem*> itemlist=selection->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ auto itemlist= selection->items();
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
if (SP_IS_TEXT (*i)) {
modmade = true;
}
@@ -621,7 +621,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
SPDesktop *desktop = SP_ACTIVE_DESKTOP;
Inkscape::Selection *selection = desktop->getSelection();
- std::vector<SPItem*> itemlist=selection->itemList();
+ auto itemlist = selection->items();
// Convert between units
if ((unit->abbr == "" || unit->abbr == "em") && old_unit == SP_CSS_UNIT_EX) {
@@ -640,7 +640,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
// Convert absolute to relative... for the moment use average font-size
double font_size = 0;
int count = 0;
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
if (SP_IS_TEXT (*i)) {
double doc_scale = Geom::Affine((*i)->i2dt_affine()).descrim();
font_size += (*i)->style->font_size.computed * doc_scale;
@@ -669,7 +669,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
// Convert relative to absolute... for the moment use average font-size
double font_size = 0;
int count = 0;
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
if (SP_IS_TEXT (*i)) {
double doc_scale = Geom::Affine((*i)->i2dt_affine()).descrim();
font_size += (*i)->style->font_size.computed * doc_scale;
@@ -712,7 +712,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl )
// Only need to save for undo if a text item has been changed.
bool modmade = false;
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
if (SP_IS_TEXT (*i)) {
modmade = true;
}
@@ -1116,8 +1116,8 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/
// Only flowed text can be justified, only normal text can be kerned...
// Find out if we have flowed text now so we can use it several places
gboolean isFlow = false;
- std::vector<SPItem*> itemlist=SP_ACTIVE_DESKTOP->getSelection()->itemList();
- for(std::vector<SPItem*>::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){
+ auto itemlist= SP_ACTIVE_DESKTOP->getSelection()->items();
+ for(auto i=itemlist.begin();i!=itemlist.end(); ++i){
// const gchar* id = reinterpret_cast<SPItem *>(items->data)->getId();
// std::cout << " " << id << std::endl;
if( SP_IS_FLOWTEXT(*i)) {
diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt
index ea1febdd2..3de607894 100644
--- a/testfiles/CMakeLists.txt
+++ b/testfiles/CMakeLists.txt
@@ -11,36 +11,21 @@ set_source_files_properties(
${CMAKE_BINARY_DIR}/src/inkscape-version.cpp
PROPERTIES GENERATED TRUE)
-# include_directories(${CMAKE_CURRENT_BINARY_DIR}/__/src)
include_directories(${CMAKE_BINARY_DIR}/src)
-add_executable(unittest
- unittest.cpp
- doc-per-case-test.cpp
- src/attributes-test.cpp
- src/color-profile-test.cpp
- src/dir-util-test.cpp
-)
-
-target_link_libraries(unittest inkscape_base)
-
-add_dependencies(unittest inkscape_version)
+set(TEST_SOURCES
+ attributes-test
+ color-profile-test
+ dir-util-test
+ sp-object-test
+ object-set-test)
-set (_optional_unittest_libs )
-
-target_link_libraries(unittest
+set(TEST_LIBS
gmock_main
-
- # order from automake
- #sp_LIB
-
- #inkscape_LIB
- #sp_LIB # annoying, we need both!
- nrtype_LIB # annoying, we need both!
-
+ inkscape_base
+ nrtype_LIB
croco_LIB
avoid_LIB
- ${_optional_unittest_libs}
cola_LIB
vpsc_LIB
livarot_LIB
@@ -49,12 +34,13 @@ target_link_libraries(unittest
depixelize_LIB
util_LIB
gc_LIB
-
${INKSCAPE_LIBS}
)
-
-add_test(BaseTest ${EXECUTABLE_OUTPUT_PATH}/unittest)
-add_dependencies(check unittest)
-
-#
+foreach(source ${TEST_SOURCES})
+ add_executable(${source} src/${source}.cpp unittest.cpp doc-per-case-test.cpp)
+ target_link_libraries(${source} ${TEST_LIBS})
+ add_test(NAME ${source} COMMAND ${EXECUTABLE_OUTPUT_PATH}/${source})
+ add_dependencies(${source} inkscape_version)
+ add_dependencies(check ${source})
+endforeach() \ No newline at end of file
diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp
new file mode 100644
index 000000000..79a49488a
--- /dev/null
+++ b/testfiles/src/object-set-test.cpp
@@ -0,0 +1,321 @@
+/*
+ * Multiindex container for selection
+ *
+ * Authors:
+ * Adrian Boguszewski
+ *
+ * Copyright (C) 2016 Adrian Boguszewski
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+#include <gtest/gtest.h>
+#include <doc-per-case-test.h>
+#include <src/sp-factory.h>
+#include <src/sp-rect.h>
+#include <src/object-set.h>
+#include <xml/node.h>
+#include <src/xml/text-node.h>
+#include <src/xml/simple-document.h>
+
+using namespace Inkscape;
+using namespace Inkscape::XML;
+
+class ObjectSetTest: public DocPerCaseTest {
+public:
+ ObjectSetTest() {
+ A = new SPObject();
+ B = new SPObject();
+ C = new SPObject();
+ D = new SPObject();
+ E = new SPObject();
+ F = new SPObject();
+ G = new SPObject();
+ H = new SPObject();
+ X = new SPObject();
+ set = new ObjectSet();
+ set2 = new ObjectSet();
+ auto sd = new SimpleDocument();
+ auto xt = new TextNode(Util::share_string("x"), sd);
+ auto ht = new TextNode(Util::share_string("h"), sd);
+ auto gt = new TextNode(Util::share_string("g"), sd);
+ auto ft = new TextNode(Util::share_string("f"), sd);
+ auto et = new TextNode(Util::share_string("e"), sd);
+ auto dt = new TextNode(Util::share_string("d"), sd);
+ auto ct = new TextNode(Util::share_string("c"), sd);
+ auto bt = new TextNode(Util::share_string("b"), sd);
+ auto at = new TextNode(Util::share_string("a"), sd);
+ X->invoke_build(_doc, xt, 0);
+ H->invoke_build(_doc, ht, 0);
+ G->invoke_build(_doc, gt, 0);
+ F->invoke_build(_doc, ft, 0);
+ E->invoke_build(_doc, et, 0);
+ D->invoke_build(_doc, dt, 0);
+ C->invoke_build(_doc, ct, 0);
+ B->invoke_build(_doc, bt, 0);
+ A->invoke_build(_doc, at, 0);
+ }
+ ~ObjectSetTest() {
+ delete set;
+ delete set2;
+ delete X;
+ delete H;
+ delete G;
+ delete F;
+ delete E;
+ delete D;
+ delete C;
+ delete B;
+ delete A;
+ }
+ SPObject* A;
+ SPObject* B;
+ SPObject* C;
+ SPObject* D;
+ SPObject* E;
+ SPObject* F;
+ SPObject* G;
+ SPObject* H;
+ SPObject* X;
+ ObjectSet* set;
+ ObjectSet* set2;
+};
+
+TEST_F(ObjectSetTest, Basics) {
+ EXPECT_EQ(0, set->size());
+ set->add(A);
+ EXPECT_EQ(1, set->size());
+ EXPECT_TRUE(set->includes(A));
+ set->add(B);
+ set->add(C);
+ EXPECT_EQ(3, set->size());
+ EXPECT_TRUE(set->includes(B));
+ EXPECT_TRUE(set->includes(C));
+ EXPECT_FALSE(set->includes(D));
+ EXPECT_FALSE(set->includes(X));
+ EXPECT_FALSE(set->includes(nullptr));
+ set->remove(A);
+ EXPECT_EQ(2, set->size());
+ EXPECT_FALSE(set->includes(A));
+ set->clear();
+ EXPECT_EQ(0, set->size());
+ bool resultNull = set->add(nullptr);
+ EXPECT_FALSE(resultNull);
+ EXPECT_EQ(0, set->size());
+ bool resultNull2 = set->remove(nullptr);
+ EXPECT_FALSE(resultNull2);
+}
+
+TEST_F(ObjectSetTest, Advanced) {
+ set->add(A);
+ set->add(B);
+ set->add(C);
+ EXPECT_TRUE(set->includes(C));
+ set->toggle(C);
+ EXPECT_EQ(2, set->size());
+ EXPECT_FALSE(set->includes(C));
+ set->toggle(D);
+ EXPECT_EQ(3, set->size());
+ EXPECT_TRUE(set->includes(D));
+ set->toggle(D);
+ EXPECT_EQ(2, set->size());
+ EXPECT_FALSE(set->includes(D));
+ EXPECT_EQ(nullptr, set->single());
+ set->set(X);
+ EXPECT_EQ(1, set->size());
+ EXPECT_TRUE(set->includes(X));
+ EXPECT_EQ(X, set->single());
+ EXPECT_FALSE(set->isEmpty());
+ set->clear();
+ EXPECT_TRUE(set->isEmpty());
+ std::vector<SPObject*> list1 {A, B, C, D};
+ std::vector<SPObject*> list2 {E, F};
+ set->addList(list1);
+ EXPECT_EQ(4, set->size());
+ set->addList(list2);
+ EXPECT_EQ(6, set->size());
+ EXPECT_TRUE(set->includes(A));
+ EXPECT_TRUE(set->includes(B));
+ EXPECT_TRUE(set->includes(C));
+ EXPECT_TRUE(set->includes(D));
+ EXPECT_TRUE(set->includes(E));
+ EXPECT_TRUE(set->includes(F));
+ set->setList(list2);
+ EXPECT_EQ(2, set->size());
+ EXPECT_TRUE(set->includes(E));
+ EXPECT_TRUE(set->includes(F));
+}
+
+TEST_F(ObjectSetTest, Items) {
+ // cannot test smallestItem and largestItem functions due to too many dependencies
+ // uncomment if the problem is fixed
+ SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect");
+// rect10x100->invoke_build(_doc, _doc->rroot, 1);
+ SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect");
+// rect20x40->invoke_build(_doc, _doc->rroot, 1);
+// SPRect* rect30x30 = (SPRect *) SPFactory::createObject("svg:rect");
+// rect30x30->invoke_build(_doc, _doc->rroot, 1);
+// rect10x100->width = 10;
+// rect10x100->height = 100;
+// rect20x40->width = 20;
+// rect20x40->height = 40;
+// rect30x30->width = 30;
+// rect30x30->height = 30;
+ set->add(rect10x100);
+ EXPECT_EQ(rect10x100, set->singleItem());
+ EXPECT_EQ(rect10x100->getRepr(), set->singleRepr());
+ set->add(rect20x40);
+ EXPECT_EQ(nullptr, set->singleItem());
+ EXPECT_EQ(nullptr, set->singleRepr());
+// set->add(rect30x30);
+// EXPECT_EQ(3, set->size());
+// EXPECT_EQ(rect10x100, set->smallestItem(ObjectSet::CompareSize::HORIZONTAL));
+// EXPECT_EQ(rect30x30, set->smallestItem(ObjectSet::CompareSize::VERTICAL));
+// EXPECT_EQ(rect20x40, set->smallestItem(ObjectSet::CompareSize::AREA));
+// EXPECT_EQ(rect30x30, set->largestItem(ObjectSet::CompareSize::HORIZONTAL));
+// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::VERTICAL));
+// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::AREA));
+}
+
+TEST_F(ObjectSetTest, Ranges) {
+ std::vector<SPObject*> objs {A, D, B, E, C, F};
+ set->add(objs.begin() + 1, objs.end() - 1);
+ EXPECT_EQ(4, set->size());
+ auto it = set->objects().begin();
+ EXPECT_EQ(D, *it++);
+ EXPECT_EQ(B, *it++);
+ EXPECT_EQ(E, *it++);
+ EXPECT_EQ(C, *it++);
+ EXPECT_EQ(set->objects().end(), it);
+ SPObject* rect1 = SPFactory::createObject("svg:rect");
+ SPObject* rect2 = SPFactory::createObject("svg:rect");
+ SPObject* rect3 = SPFactory::createObject("svg:rect");
+ set->add(rect1);
+ set->add(rect2);
+ set->add(rect3);
+ EXPECT_EQ(7, set->size());
+ auto xmlNode = set->xmlNodes().begin();
+ EXPECT_EQ(3, boost::distance(set->xmlNodes()));
+ EXPECT_EQ(rect1->getRepr(), *xmlNode++);
+ EXPECT_EQ(rect2->getRepr(), *xmlNode++);
+ EXPECT_EQ(rect3->getRepr(), *xmlNode++);
+ EXPECT_EQ(set->xmlNodes().end(), xmlNode);
+ auto item = set->items().begin();
+ EXPECT_EQ(3, boost::distance(set->items()));
+ EXPECT_EQ(rect1, *item++);
+ EXPECT_EQ(rect2, *item++);
+ EXPECT_EQ(rect3, *item++);
+ EXPECT_EQ(set->items().end(), item);
+}
+
+TEST_F(ObjectSetTest, Autoremoving) {
+ set->add(A);
+ EXPECT_TRUE(set->includes(A));
+ EXPECT_EQ(1, set->size());
+ A->releaseReferences();
+ EXPECT_EQ(0, set->size());
+}
+
+TEST_F(ObjectSetTest, BasicDescendants) {
+ A->attach(B, nullptr);
+ B->attach(C, nullptr);
+ A->attach(D, nullptr);
+ bool resultB = set->add(B);
+ bool resultB2 = set->add(B);
+ EXPECT_TRUE(resultB);
+ EXPECT_FALSE(resultB2);
+ EXPECT_TRUE(set->includes(B));
+ bool resultC = set->add(C);
+ EXPECT_FALSE(resultC);
+ EXPECT_FALSE(set->includes(C));
+ EXPECT_EQ(1, set->size());
+ bool resultA = set->add(A);
+ EXPECT_TRUE(resultA);
+ EXPECT_EQ(1, set->size());
+ EXPECT_TRUE(set->includes(A));
+ EXPECT_FALSE(set->includes(B));
+}
+
+TEST_F(ObjectSetTest, AdvancedDescendants) {
+ A->attach(B, nullptr);
+ A->attach(C, nullptr);
+ A->attach(X, nullptr);
+ B->attach(D, nullptr);
+ B->attach(E, nullptr);
+ C->attach(F, nullptr);
+ C->attach(G, nullptr);
+ C->attach(H, nullptr);
+ set->add(A);
+ bool resultF = set->remove(F);
+ EXPECT_TRUE(resultF);
+ EXPECT_EQ(4, set->size());
+ EXPECT_FALSE(set->includes(F));
+ EXPECT_TRUE(set->includes(B));
+ EXPECT_TRUE(set->includes(G));
+ EXPECT_TRUE(set->includes(H));
+ EXPECT_TRUE(set->includes(X));
+ bool resultF2 = set->add(F);
+ EXPECT_TRUE(resultF2);
+ EXPECT_EQ(5, set->size());
+ EXPECT_TRUE(set->includes(F));
+}
+
+TEST_F(ObjectSetTest, Removing) {
+ A->attach(B, nullptr);
+ A->attach(C, nullptr);
+ A->attach(X, nullptr);
+ B->attach(D, nullptr);
+ B->attach(E, nullptr);
+ C->attach(F, nullptr);
+ C->attach(G, nullptr);
+ C->attach(H, nullptr);
+ bool removeH = set->remove(H);
+ EXPECT_FALSE(removeH);
+ set->add(A);
+ bool removeX = set->remove(X);
+ EXPECT_TRUE(removeX);
+ EXPECT_EQ(2, set->size());
+ EXPECT_TRUE(set->includes(B));
+ EXPECT_TRUE(set->includes(C));
+ EXPECT_FALSE(set->includes(X));
+ EXPECT_FALSE(set->includes(A));
+ bool removeX2 = set->remove(X);
+ EXPECT_FALSE(removeX2);
+ EXPECT_EQ(2, set->size());
+ bool removeA = set->remove(A);
+ EXPECT_FALSE(removeA);
+ EXPECT_EQ(2, set->size());
+ bool removeC = set->remove(C);
+ EXPECT_TRUE(removeC);
+ EXPECT_EQ(1, set->size());
+ EXPECT_TRUE(set->includes(B));
+ EXPECT_FALSE(set->includes(C));
+}
+
+TEST_F(ObjectSetTest, TwoSets) {
+ A->attach(B, nullptr);
+ A->attach(C, nullptr);
+ set->add(A);
+ set2->add(A);
+ EXPECT_EQ(1, set->size());
+ EXPECT_EQ(1, set2->size());
+ set->remove(B);
+ EXPECT_EQ(1, set->size());
+ EXPECT_TRUE(set->includes(C));
+ EXPECT_EQ(1, set2->size());
+ EXPECT_TRUE(set2->includes(A));
+ C->releaseReferences();
+ EXPECT_EQ(0, set->size());
+ EXPECT_EQ(1, set2->size());
+ EXPECT_TRUE(set2->includes(A));
+}
+
+TEST_F(ObjectSetTest, SetRemoving) {
+ ObjectSet *objectSet = new ObjectSet();
+ A->attach(B, nullptr);
+ objectSet->add(A);
+ objectSet->add(C);
+ EXPECT_EQ(2, objectSet->size());
+ delete objectSet;
+ EXPECT_STREQ(nullptr, A->getId());
+ EXPECT_STREQ(nullptr, C->getId());
+}
diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp
new file mode 100644
index 000000000..df811647f
--- /dev/null
+++ b/testfiles/src/sp-object-test.cpp
@@ -0,0 +1,120 @@
+/*
+ * Multiindex container for selection
+ *
+ * Authors:
+ * Adrian Boguszewski
+ *
+ * Copyright (C) 2016 Adrian Boguszewski
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+#include <gtest/gtest.h>
+#include <src/sp-object.h>
+#include <src/sp-item.h>
+#include <src/xml/node.h>
+#include <src/xml/text-node.h>
+#include <doc-per-case-test.h>
+#include <src/xml/simple-document.h>
+
+using namespace Inkscape;
+using namespace Inkscape::XML;
+
+class SPObjectTest: public DocPerCaseTest {
+public:
+ SPObjectTest() {
+ a = new SPItem();
+ b = new SPItem();
+ c = new SPItem();
+ d = new SPItem();
+ e = new SPItem();
+ auto sd = new SimpleDocument();
+ auto et = new TextNode(Util::share_string("e"), sd);
+ auto dt = new TextNode(Util::share_string("d"), sd);
+ auto ct = new TextNode(Util::share_string("c"), sd);
+ auto bt = new TextNode(Util::share_string("b"), sd);
+ auto at = new TextNode(Util::share_string("a"), sd);
+ e->invoke_build(_doc, et, 0);
+ d->invoke_build(_doc, dt, 0);
+ c->invoke_build(_doc, ct, 0);
+ b->invoke_build(_doc, bt, 0);
+ a->invoke_build(_doc, at, 0);
+ }
+ ~SPObjectTest() {
+ delete e;
+ delete d;
+ delete c;
+ delete b;
+ delete a;
+ }
+ SPObject* a;
+ SPObject* b;
+ SPObject* c;
+ SPObject* d;
+ SPObject* e;
+};
+
+TEST_F(SPObjectTest, Basics) {
+ a->attach(c, a->lastChild());
+ a->attach(b, nullptr);
+ a->attach(d, c);
+ EXPECT_TRUE(a->hasChildren());
+ EXPECT_EQ(b, a->firstChild());
+ EXPECT_EQ(d, a->lastChild());
+ auto children = a->childList(false);
+ EXPECT_EQ(3, children.size());
+ EXPECT_EQ(b, children[0]);
+ EXPECT_EQ(c, children[1]);
+ EXPECT_EQ(d, children[2]);
+ a->attach(b, a->lastChild());
+ EXPECT_EQ(3, a->children.size());
+ a->reorder(b, b);
+ EXPECT_EQ(3, a->children.size());
+ EXPECT_EQ(b, &a->children.front());
+ EXPECT_EQ(d, &a->children.back());
+ a->reorder(b, d);
+ EXPECT_EQ(3, a->children.size());
+ EXPECT_EQ(c, &a->children.front());
+ EXPECT_EQ(b, &a->children.back());
+ a->reorder(d, nullptr);
+ EXPECT_EQ(3, a->children.size());
+ EXPECT_EQ(d, &a->children.front());
+ EXPECT_EQ(b, &a->children.back());
+ a->reorder(c, b);
+ EXPECT_EQ(3, a->children.size());
+ EXPECT_EQ(d, &a->children.front());
+ EXPECT_EQ(c, &a->children.back());
+ a->detach(b);
+ EXPECT_EQ(c, a->lastChild());
+ children = a->childList(false);
+ EXPECT_EQ(2, children.size());
+ EXPECT_EQ(d, children[0]);
+ EXPECT_EQ(c, children[1]);
+ a->detach(b);
+ EXPECT_EQ(2, a->childList(false).size());
+ a->releaseReferences();
+ EXPECT_FALSE(a->hasChildren());
+ EXPECT_EQ(nullptr, a->firstChild());
+ EXPECT_EQ(nullptr, a->lastChild());
+}
+
+TEST_F(SPObjectTest, Advanced) {
+ a->attach(b, a->lastChild());
+ a->attach(c, a->lastChild());
+ a->attach(d, a->lastChild());
+ a->attach(e, a->lastChild());
+ EXPECT_EQ(e, a->get_child_by_repr(e->getRepr()));
+ EXPECT_EQ(c, a->get_child_by_repr(c->getRepr()));
+ EXPECT_EQ(d, e->getPrev());
+ EXPECT_EQ(c, d->getPrev());
+ EXPECT_EQ(b, c->getPrev());
+ EXPECT_EQ(nullptr, b->getPrev());
+ EXPECT_EQ(nullptr, e->getNext());
+ EXPECT_EQ(e, d->getNext());
+ EXPECT_EQ(d, c->getNext());
+ EXPECT_EQ(c, b->getNext());
+ std::vector<SPObject*> tmp = {b, c, d, e};
+ int index = 0;
+ for(auto& child: a->children) {
+ EXPECT_EQ(tmp[index++], &child);
+ }
+}
diff --git a/testfiles/unittest.cpp b/testfiles/unittest.cpp
index 79e240e06..1e6d1ff3a 100644
--- a/testfiles/unittest.cpp
+++ b/testfiles/unittest.cpp
@@ -16,19 +16,6 @@
#include "inkgc/gc-core.h"
#include "inkscape.h"
-namespace {
-
-// Ensure that a known positive test works
-TEST(PreTest, WorldIsSane)
-{
- EXPECT_EQ(4, 2 + 2);
-}
-
-// Example of type casting to avoid compile warnings.
-
-
-} // namespace
-
int main(int argc, char **argv) {
// setup general environment