Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pengenalan ringkas kepada skema data laluan inkscape analisis python

Pengenalan ringkas kepada skema data laluan inkscape analisis python

WBOY
WBOYke hadapan
2022-09-15 15:29:082515semak imbas

[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

inkscape menjana laluan

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

Tukar bentuk kepada laluan

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 Belah
  • Lapisan akhir yang diperoleh adalah seperti berikut:

Selepas 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 svg

Di 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>

Selepas berjalan Dapatkan data:

[Pengesyoran berkaitan:

Tutorial video Python3
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")
]

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!

Kenyataan:
Artikel ini dikembalikan pada:jb51.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam