Rumah > Artikel > pembangunan bahagian belakang > Pengenalan ringkas kepada skema data laluan inkscape analisis python
[Cadangan berkaitan: Tutorial video Python3]
Kadangkala anda perlu menggunakan data laluan semasa proses pembangunan, walaupun python mempunyai svg sendiri atau perpustakaan vektor lain, tetapi ini hanya untuk tujuan percubaan, tidak perlu mengkaji secara mendalam, jadi beberapa penyelesaian mudah diterima pakai: gunakan inkscape untuk menjana svg, dan kemudian python menganalisis dan mengeluarkannya untuk mencapai tujuan yang sepadan
Tetapkan sifat dokumen:
Tetapkan grid:
Import imej png sebagai rujukan:
Perhatikan bahawa imej yang diimport dan sifat dokumen mempunyai sudut kiri bawah sebagai asal :
Dalam lapisan dan bar sifat objek, ubah suai keterlihatan imej dan kunci imej. :
Buat lapisan baharu di atas lapisan semasa untuk melukis kekuatan jalan
Lukis segi empat tepat sesuka hati dan buat bentuk yang sepadan sebagai contoh , pemotongan antara dua segi empat tepat boleh dilakukan melalui menu: Laluan->Perbezaan
Secara teorinya, selepas menyimpan, akan ada fail svg yang boleh ditukar kepada laluan Walau bagaimanapun, disebabkan format fail svg yang kompleks, akan terdapat pelbagai data bentuk, jadi di sini kita perlu menukar pelbagai bentuk menjadi laluan secara seragam untuk analisis mudah oleh python
untuk kombinasi Untuk bentuk laluan, jalankan menu: Jin Jalan BelahSelepas menyimpan fail svg, bukanya dengan Notepad, dan anda akan melihat kandungan utama berikut:
Dua daripada data laluan bermula dengan m , berakhir dengan z, menunjukkan bahawa data telah disediakan.
analisa python svgDi sini kami menggunakan analisis ungkapan biasa dan mengeluarkan hasilnya sebagai jadual lua:
<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>
[Pengesyoran berkaitan:
Tutorial video Python3import 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")]
Atas ialah kandungan terperinci Pengenalan ringkas kepada skema data laluan inkscape analisis python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!