【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.
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
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), }, }
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!