Heim  >  Artikel  >  Backend-Entwicklung  >  Eine kurze Einführung in die Inkscape-Pfaddatenlösung für die Python-Analyse

Eine kurze Einführung in die Inkscape-Pfaddatenlösung für die Python-Analyse

WBOY
WBOYnach vorne
2022-09-15 15:29:082444Durchsuche

【Verwandte Empfehlung: Python3-Video-Tutorial

Manchmal müssen Sie während des Entwicklungsprozesses Pfaddaten verwenden. Obwohl Python über eigene SVG- oder andere Vektorbibliotheken verfügt, dient dies nur experimentellen Zwecken Ich muss mich eingehend informieren, daher werden einige einfache Lösungen übernommen: Verwenden Sie Inkscape, um SVG zu generieren, und analysieren Sie es dann in Python und geben Sie es aus, um den entsprechenden Zweck zu erreichen.

Inkscape-Generierungspfad Raster festlegen:

PNG-Bilder als Referenz importieren:

Beachten Sie, dass die importierten Bild- und Dokumenteigenschaften die untere linke Ecke als Ursprung haben:

In der Ebene und Objekteigenschaftenleiste, ändern Sie die Bildsichtbarkeit, sperren Sie das Bild:

Erstellen Sie eine neue Ebene über der aktuellen Ebene, um die Straßenstärke zu zeichnen.

Zeichnen Sie nach Belieben ein Rechteck und erstellen Sie die entsprechende Form zwischen zwei Rechtecken kann über das Menü erfolgen:

Pfad->Differenzsatz

Form in Pfad konvertieren

Theoretisch gibt es nach dem Speichern eine SVG-Datei, die in einen Pfad konvertiert werden kann, aber aufgrund der Wenn das komplexe Format der SVG-Datei eine Vielzahl von Formdaten enthält, müssen wir hier verschiedene Formen einheitlich in Pfade für eine einfache Analyse durch Python umwandeln. Dann muss das obige Beispiel weiter verarbeitet werden:

Wenn das Wenn das Objekt ein Rechteck oder eine andere Form ist, führen Sie das Menü aus: Pfad- >Objekt in Pfad konvertieren

Für die Form des kombinierten Pfades führen Sie das Menü aus:

Straße Jin->Geteilte Straße Jin

The Die letzte erhaltene Ebene sieht wie folgt aus:

  • Nachdem Sie die SVG-Datei gespeichert haben, verwenden Sie „Mit Notepad öffnen“ und Sie sehen den folgenden Schlüsselinhalt:
         <g
         inkscape:groupmode="layer"
         id="layer2"
         inkscape:label="图层 2"><path
           style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none"
           d="m 510.66797,509.15234 3.82812,8.50586 h 3.92383 v -8.50586 z"
           id="path11706" /><path
           style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none"
           d="m 504.25195,509.15234 v 8.50586 h 8.14258 l -3.82812,-8.50586 z"
           id="rect3684" /></g>
  • Zwei der Pfaddaten beginnen mit m und enden mit z , was anzeigt, dass die Daten bereit sind.

Python-Analyse SVG

Hier verwenden wir die Analyse regulärer Ausdrücke und geben die Ergebnisse als Lua-Tabelle aus:

import re
import sys
f=open("绘图.svg","r",encoding=&#39;utf-8&#39;)
print("result={")
s=f.read()
for mg in re.finditer("<g.*?</g>",s,re.S):
    for mp in re.finditer("<path.*?/>",mg.group(),re.S):
        path=[]
        pathid=""
        md=re.search("\sd=\"(.+?)\"",mp.group(),re.S)
        if md:
            last_pos=(0,0)
            ###################### 1                 2                 3                 4                 5                 6                 7                 8                 9
            for ml in re.finditer("(M[^MmLlHhVvZz]+)|(m[^MmLlHhVvZz]+)|(L[^MmLlHhVvZz]+)|(l[^MmLlHhVvZz]+)|(H[^MmLlHhVvZz]+)|(h[^MmLlHhVvZz]+)|(V[^MmLlHhVvZz]+)|(v[^MmLlHhVvZz]+)|(Z|z)",md.group(1)):
                if ml.group(1):
                    ###################### 1               3
                    for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(1)):
                        last_pos=(float(mv.group(1)),float(mv.group(3)))
                        path.append(last_pos)
                elif ml.group(2):
                    for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(2)):
                        last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3)))
                        path.append(last_pos)
                elif ml.group(3):
                    for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(3)):
                        last_pos=(float(mv.group(1)),float(mv.group(3)))
                        path.append(last_pos)
                    pass
                elif ml.group(4):
                    for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(4)):
                        last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3)))
                        path.append(last_pos)
                    pass
                elif ml.group(5):
                    for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(5)):
                        last_pos=(float(mv.group(1)),last_pos[1])
                        path.append(last_pos)
                elif ml.group(6):
                    for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(6)):
                        last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1])
                        path.append(last_pos)
                elif ml.group(7):
                    for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(7)):
                        last_pos=(last_pos[0],float(mv.group(1)))
                        path.append(last_pos)
                elif ml.group(8):
                    for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(8)):
                        last_pos=(last_pos[0],last_pos[1]+float(mv.group(1)))
                        path.append(last_pos)
                elif ml.group(9):
                    path.append(path[0])
        mid=re.search("\sinkscape:label=\"(.+?)\"",mp.group(),re.S) or re.search("\sid=\"(.+?)(-\d+)*?\"",mp.group(),re.S)
        if mid:
            pathid=mid.group(1)
        print("{\nid=\""+pathid+"\",")
        for pos in path:
            print("Vector2(%f,%f),"%(pos[0],pos[1]))
        print("},")
print("}\n")

Erhalten Sie die Daten nach dem Ausführen:

result={
{
id="path11706",
Vector2(510.667970,509.152340),
Vector2(514.496090,517.658200),
Vector2(518.419920,517.658200),
Vector2(518.419920,509.152340),
Vector2(510.667970,509.152340),
},
{
id="rect3684",
Vector2(504.251950,509.152340),
Vector2(504.251950,517.658200),
Vector2(512.394530,517.658200),
Vector2(508.566410,509.152340),
Vector2(504.251950,509.152340),
},
}

[Verwandte Empfehlungen:

Python3-Video-Tutorial

]

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in die Inkscape-Pfaddatenlösung für die Python-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen