Proto mankšta: SVG kalbos interpretatorius

Viskas prasideda nuo mažos nesamonės: nutariau ant vieno 3D spausdinto gaminio padaryti USB jungties logotipą. Kokio nors STL failo greitai nusikrauti niekur neradau (for free arba download be registracijos). Tada sau galvoju- nu yra gi SVG iliustracija, ten gi grynas vektorius, tereikia jį tik “ištempti” į viršų (extrude) ir viskas bus čiki.

Ir tada pradidėjo… Mano 3D printeriavimo ir modeliavimo programa tokių failų nepriima. Gerai, ji netobula ir ne tam skirta. Online konverteris kažko irgi neveikia:
Defektuotas STL
Matom kaip nukando gabaliuką nuo kvadratėlio.

Tam reikia kažko rimtesnio: Corelio, Autokado… Labiau mokam naudotis Coreliu, tai atsidarom tą SVG:
bad SVG in Corel
Kas per bibienė? Firefox ar koks nors Chromas puikiausiai supranta tą failą! Galit patys pasibandyti.

Gerai, SVG failas tai iš esmės tekstinis failas su įvairioms grafinėm komandom sukratytom į XML. Su notepadu kiek paredaguojam tą failą ir gaunam kiek pataisytą versiją SVG:
Corel vs SVG
Va, dabar vaizdelis jau teisingas (pakeliui pašalinau baltą foną).

Eksportuojam į DWG/DFX, atsidarom Autocadą, kad padaryti 3D ir susinervinam:
SVG in AutoCAD

Kas per šūdas? Kodėl tiek mažai taškų? Kodėl nėra kreivių?

O tada mane pradėjo nešioti “arkliai” (“Меня понесло”). Aš visiškai užmiršau pradinę užduotį ir nutariau pats pasirašyti konverterį… Pradžiai, nutariau suprasti kaip vis-dėlto veikia tas grynas išpakuotas SVG, t.y. nutariau pasirašyti SVG kalbos interpretatorių. Nors sako, kad failų formatą sukūrė W3C kažkur 1999, bet jaučiu, kad savo pagrindus ši sistema atneša mums iš kokių 1960, kai koks nors pionierius, kaip HP ar Xerox kūrė matematinius modelius vektorių aprašymui.

Taip gimė naujas projektas kuris niekam nereikalingas. Tačiau tai buvo labai rimta mankšta smegenims:
Levo SVG interpretatorius vabolis

Programa sudalinta į kelias dalis:

  1. Windows spausdinimo/paišymo/valdymo
  2. Tekstinio failo preprocesorius- programa pašalina visus sutrumpinimus, suglaudinimus (kad ir nulio nerašymą) ir konvertuoja į “kanoninę formą”.
  3. SVG kalbos interpretatoriaus- programa paima vieną komandą, surenka parametrus, paskaičiuoja koordinates.
  4. Geometrijos ir trigonometrijos modulio kuris skaičiuoja ir paišo grafiką. (šis modulis dalinai iš interneto, yra URL source code)

Programa gali išspausdinti rezultatą į printerį ar pdf: SVG to PDF. Tas listas šalia paveiksliuko tai preprocesoriaus interpretuotas pradinis kodas:
M481.114 37.464l16.415-28.96 16.834 28.751-12.164.077-.174 70.181c.988-.552 2.027-1.09 3.096-1.643 6.932-3.586 15.674-8.11 15.998-28.05h-8.533V53.251h24.568V77.82h-7.611c-.334 25.049-11.627 30.892-20.572 35.519-3.232 1.672-6.012 3.111-6.975 5.68l-.09 36.683a14.503 14.503 0 0 1 10.68 14.02 14.5 14.5 0 0 1-14.533 14.532 14.5 14.5 0 0 1-14.533-14.532 14.504 14.504 0 0 1 9.454-13.628l.057-22.801c-2.873-1.613-5.62-2.704-8.139-3.705-11.142-4.43-18.705-7.441-18.857-33.4a14.381 14.381 0 0 1-10.43-13.869c0-7.946 6.482-14.428 14.428-14.428 7.946 0 14.428 6.482 14.428 14.428 0 6.488-4.21 11.889-10.004 13.74.116 20.396 5.54 22.557 13.528 25.732 1.61.641 3.303 1.312 5.069 2.114l.214-86.517-12.154.076z
Šitą kodą ištraukiau iš pradinio SVG failo. To pačio, kurio nesuskaitė Corelis… Beja mano softas bando interpretuoti visas komandas. Deja nebuvo laiko viską išdebuginti. Pvz. nežinau kuo skiriasi “quadratic Bézier” kreivė nuo “smooth quadratic Bézier” kreivės.

Taigi AŠ parašiau krūtesnį kodą nei Corel Draw programuotojai… 🙂

Ir man kaipgi negaila:SVG interpretarius VB.NET source code ir kompiliuotas exe ir setup.exe. Tai darbinė versija su savais bugais. Nežinau ar bus kada nors naujesnė versija.

Kaip jums Levo proto mankšta? Pratesimo daugiau nebus, nes baigėsi mano kvazi Covidas ir vėl reikės eiti į darbą ir nebus laiko žaisti. Šis projektas užėmė 3 vakarus, įskaitant šio straipsnio rašymą.

P.S. Pradinis SVG nėra optimalus. Galėčiau parašyti rankomis trumpesnį (mažiau komandų) ir vaizdelis gautusi toks pats. Ir dar kam tokie “preciziniai” skaičiai?

P.S.2 Mano interpretatoriaus preprocesintas SVG puikiausiai susivaikščiojo su online SVG2STL konverteriu:USB LOGO STL. Kaip ir pradinis rezultatas pasiektas. Ar verta daryti STL ar AMF konvertavimą aš jau nežinau.

3 replies on “Proto mankšta: SVG kalbos interpretatorius”

  1. 800 eilučių kodo tam, ką buvo galima į tam pačiam corel tiesiog pratrasuoti logo png formate per minutę. Tikrai neiškot lengvų kelių 😀

  2. Čia postas apie proto mankštą… 🙂
    O ir pirminė mintis buvo tiesiai į 3D be jokių blenderių ar autokadų.

    Čia panašiai į vieną mano draugą. Jis (bent jau seniau) nusipirkdavo kokį kinišką internetinį media grotuvėlį ir tol krušasi, kol paleidžia kokius nors rusiškus piratinius TV per jį.
    Aš jo ir klausiu, kiek laiko laužiai tą daiGtą ir kiek žiūrėjai tuos TV kanalus? Atsakymas- laužiau savaitę laiko, o kanalų nežiūrėjau, nes aplamai TV nežiūrau. Grynai sportinis interesas.

Leave a Reply

Your email address will not be published. Required fields are marked *