2017-08-10 2 views
-1

Ich habe eine einfache Svg-Datei mit Inkscape erstellt, die drei Pfade enthält. Betrachten wir einen der Pfade in der SVG-Datei gegeben unterPfade in SVG-Dateien interpretieren

<path xmlns="http://www.w3.org/2000/svg" 
     d="m 128.57143,243.79075 
      -2.85714,568.57143 
      474.28571,0 
      -31.42857,-611.42857 z" id="path2985" 
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> 

möchte ich diese SVG-Datei analysieren, die XY-Koordinaten dieses geschlossenen Weges zu extrahieren (es wegen der ‚z‘ geschlossen ist am Ende der Koordinatenliste).

Ich bin mir nicht sicher, wie man die 8 Zahlen interpretiert. Soweit ich weiß, bedeuten die ersten beiden Zahlen, die durch m 128.57143,243.79075 angezeigt werden, dass der Ursprung des Pfads in Bildschirmkoordinaten (nicht kartesisch!) Bei 128.57143 rechts und 243.79075 von oben links auf dem Bildschirm liegt.

Was ist mit dem Rest der 6 Zahlen? Zeigen sie Vektoren an, in denen sie sich relativ zum vorherigen Punkt bewegen können? Oder nur absolute Bildschirmkoordinaten? Wie in der SVG-Dokumentation here angegeben, haben SVG-Dateien normalerweise die Buchstaben M, L, H, ..., die jedem nachfolgenden Zahlenpaar vorangestellt sind und dem Vektorgrafiken-Viewer mitteilen, wie dieses Zahlenpaar beim Zeichnen dieses Pfads zu interpretieren ist .

In diesem Fall jedoch, außer dem m Präfix am Anfang und dem z am Ende gibt es keine solche Buchstaben dazwischen. Was ist dann das Standardverhalten in diesem Fall?

+0

https://www.w3.org/TR/SVG/paths.html#PathData –

Antwort

0

Ein Großbuchstabe M würde absolute Koordinaten vorschlagen. Und ein kleines m bedeutet relative Koordinaten. Da die Positionierung standardmäßig 0,0 ist, wäre der erste Wert von m identisch mit M.

Nur die ersten Koordinaten werden als 'm' (= moveto) behandelt. Die nächsten werden als 'l' (= lineto) behandelt. Da 'm' nicht groß geschrieben wurde, wird das nächste coordinate als relativ behandelt.

Es wäre das gleiche wie:

<path xmlns="http://www.w3.org/2000/svg" 
     d="m 128.57143,243.79075 
      l-2.85714,568.57143 
      474.28571,0 
      -31.42857,-611.42857 z" id="path2985" 
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> 

Aus Gründen der Referenz: das ist, was die Spezifikation sais über den moveto Befehl. (Quelle: https://www.w3.org/TR/SVG/paths.html#PathDataMovetoCommands)

Starten Sie einen neuen Unterpfad an der angegebenen (x, y) Koordinate. M (Großbuchstaben) zeigt an, dass absolute Koordinaten folgen werden; m (Kleinbuchstaben) zeigt an, dass relative Koordinaten folgen. Wenn ein moveto gefolgt von mehreren Paaren von Koordinaten ist, werden die folgenden Paare als implizite Lineto-Befehle behandelt. Daher sind implizite Lineto-Befehle relativ, wenn der moveto relativ ist, und absolut, wenn der moveto absolut ist. Wenn ein relativer moveto (m) als erstes Element von der Pfad angezeigt wird, wird er als ein Paar absoluter Koordinaten behandelt. In diesem Fall werden nachfolgende Koordinatenpaare als als relativ behandelt, obwohl das anfängliche moveto als absolutes moveto interpretiert wird.