Wpf, polilinie și poligon

Clasa Poliline vă permite să desenați o secvență de segmente de linie conectate. În acest caz, lista coordonatelor X și Y este furnizată pur și simplu utilizând proprietatea puncte. Formal, proprietatea Puncte necesită un obiect PointCollection, dar această colecție este populate în marcajul XAML folosind o sintaxă concisă de șir. Trebuie doar să specificați o listă de puncte descrise de coordonate cu delimitatori (spațiu sau virgulă) între ele.







Elementul Polilin poate fi descris doar prin două puncte. De exemplu, mai jos este un exemplu de figură Polilină care duplică o linie care se extinde de la (5.100) la (15.200):

Și aici este un obiect Polyline mai complex, începând cu punctul (10 150). Punctele sunt distribuite monotonic de la stânga la dreapta, oscilând între cea mai mare valoare și cea mai mică:

Linia rezultată este prezentată în figură:

Wpf, polilinie și poligon

Aici, ar putea părea că ar fi mai ușor să umple un program de colectare puncte utilizând un ciclu care crește în mod automat valoarea X și Y. Acest lucru este adevărat, dacă doriți să creați grafice dinamice - cum ar fi o diagramă, își schimbă forma în funcție de informațiile extrase din baza de date. Dar dacă trebuie doar să construiți o bucată fixă ​​de conținut grafic, nu este nevoie să vă faceți griji cu privire la anumite coordonate ale cifrelor.

În schimb, o unealtă similară cu Expression Design este utilizată pentru a desena grafica corespunzătoare, ceea ce vă permite să exportați grafica rezultată în marcarea XAML.

Clasa Polygon este aproape aceeași cu Polyline. Ca Polilina, clasa Polygon definește o colecție de puncte care ia o listă de coordonate. Singura diferență este că poligonul adaugă segmentul final care conectează punctele de început și sfârșit. (Dacă punctul final este deja același cu punctul de pornire, atunci Poligonul nu diferă de polilin.) Interiorul formei rezultate poate fi umplut cu ajutorul perii de umplere:







Wpf, polilinie și poligon

În mod formal, puteți seta și proprietatea Completare pentru obiectul Poliline. În această situație, polilina se vopsește ca și cum ar fi un poligon. Cu alte cuvinte, ca și cum ar avea un segment invizibil care leagă punctul final cu cel inițial. Acest efect constă într-o aplicație relativ limitată.

Într-o figură simplă, unde liniile nu se intersectează, umplerea zonei interioare este ușoară. Cu toate acestea, uneori trebuie să vă ocupați de un poligon mai complex, în care nu este clar în întregime ce părți se află în interiorul figurii (și ar trebui să fie pictate peste) și care sunt afară.

De exemplu, să aruncăm o privire la imaginea de mai jos, care arată o linie intersectând mai mult de o altă linie, lăsând o zonă incorectă în centru pe care o puteți completa sau nu o puteți umple. Evident, pentru a determina exact ce trebuie să fie pictat peste, puteți rupe această cifră în câteva cifre mai mici. Dar nu este necesar să faci asta.

Wpf, polilinie și poligon

Fiecare element poligon și polilin are o proprietate FillRule. care vă permite să alegeți între două abordări diferite în zonele de umplere. În mod implicit, FillRule este setat la EvenOdd. Pentru a decide dacă să umple zona, WPF numără numărul de linii care trebuie să fie traversate în timp ce ajung în afara figurii. Dacă acest număr este ciudat, regiunea este umplută, dar dacă este chiar - nu. Pentru a ajunge în zona centrală a figurii din figură, trebuie să traversați două linii, astfel încât zona nu este vopsită.

WPF acceptă, de asemenea, regula de umplere nonzero, care este un pic mai complicată. Urmând regula Nonzero, WPF efectuează aceeași linie de numărare ca și în EventOdd, dar ia în considerare direcția fiecărei linii. Dacă numărul de linii direcționate către o parte (de exemplu, de la stânga la dreapta) este egal cu numărul de linii direcționate în direcția opusă (de la dreapta la stânga), zona nu este umplută. Dacă diferența dintre aceste două cantități nu este zero, zona este umplută. Dacă setați proprietatea FillRule la Nonzero în figură din exemplul anterior, zona interioară este umplută.

Dacă numărul de linii este ciudat, atunci diferența dintre contoare nu poate fi zero. Prin urmare, regula nonzero duce întotdeauna la umplerea a cel puțin același număr de domenii ca regula EvenOdd, plus, probabil, mai multe.

Particularitatea regulii Nonzero este că setările de umplere depind de modul în care forma este trasată, nu de modul în care arată. De exemplu, aceeași figură poate fi trasă, astfel încât centrul său este plin (deși este mai dificil - puteți începe pictura regiunea interioară, și apoi trage grinzile exterioare în direcția opusă).







Trimiteți-le prietenilor: