Heim >Backend-Entwicklung >Python-Tutorial >Eine kurze Einführung in die Inkscape-Pfaddatenlösung für die Python-Analyse
【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.
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:
<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>
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='utf-8') 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!