RO123609B1 - Sistem pentru procesarea informaţiilor grafice şi a altor informaţii video pentru afişarea pe sisteme de calculatoare - Google Patents
Sistem pentru procesarea informaţiilor grafice şi a altor informaţii video pentru afişarea pe sisteme de calculatoare Download PDFInfo
- Publication number
- RO123609B1 RO123609B1 ROA200300414A RO200300414A RO123609B1 RO 123609 B1 RO123609 B1 RO 123609B1 RO A200300414 A ROA200300414 A RO A200300414A RO 200300414 A RO200300414 A RO 200300414A RO 123609 B1 RO123609 B1 RO 123609B1
- Authority
- RO
- Romania
- Prior art keywords
- public
- visual
- elements
- graphic
- data
- Prior art date
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—Two-dimensional [2D] image generation
- G06T11/60—Creating or editing images; Combining images with text
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T11/00—Two-dimensional [2D] image generation
- G06T11/20—Drawing from basic elements
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/61—Scene description
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
Invenţia se referă la un model obiect de elemente, precum şi la un limbaj de marcare de grafică vectorială, pentru utilizarea acestui model obiect de elemente într-o manieră care permite dezvoltatorilor de coduri de programe să se interfaţeze într-o manieră consistentă cu o structură de date a grafului scenic, pentru a produce grafică. Modelul obiect al elementelor de grafică vectorială corespunde, în general, elementelor de conformaţie, precum şi altor elemente ce includ elemente de imagine şi video, care se găsesc în corelaţie cu un model obiect de graf scenic al grafului de decor. Marcatorul poate fi analizat gramatical în date ce includ elemente dintr-un arbore de elemente, care este tradus în obiecte ale unei structuri de date a grafului scenic. Alt marcator poate fi tradus direct în date şi apeluri care creează obiectele grafului scenic. Limbajul de marcare asigură căi distincte de a descrie un element, incluzând un format simplu al şirului sau o sintaxă complexă de proprietăţi care pot fi menţionate, permiţând refolosirea în alte locaţii din marcator.
Description
Prezenta invenție se referă la un sistem pentru procesarea informațiilor grafice și a altor informații video, pentru afișarea pe sisteme de calculatoare, fiind în legătură cu următoarele cereri de brevete de invenție, dependente, din Statele Unite: US 2003/0076328, intitulată “Sistem și metodă de procesare a graficii de nivel multiplu; US 2003/0132937, intitulată Parametrizare generică pentru un graf scenic; US 2003/0076329, intitulată Structură inteligentă de memorare ascunsă a datelor pentru grafica de mod imediat; fiecare depusă pe 27 iunie 2002; precum și cererea de brevet de invenție din Statele Unite, intitulată Interfețe grafi ce vizuale și scenice (Registru mandatar US 2003/0693673).
Invenția se referă, în general, la sistemele de calculatoare și, în mod mai particular, la prelucrarea informațiilor grafice și a altor informații video, pentru afișarea pe sistemele de calculatoare.
Limitele modelului tradițional de mod nemijlocit al graficii de accesare pe sistemele de calculatoare au fost atinse, în parte, deoarece vitezele memoriei și ale magistralei nu au ținut pasul cu progresele din procesoarele principale și/sau din procesoarele grafice. în general, modelul curent (de exemplu, WM_PAINT) pentru pregătirea unui cadru necesită prea multă procesare a datelor, pentru a ține pasul cu viteza de împrospătare a hardware-lui, atunci când sunt dorite efecte de grafică complexă. Drept rezultat, dacă efectele graficii complexe sunt probate, împreună cu modelele de grafică convențională, în loc de a completa modificările care rezultă din efectele vizuale, percepute în timp, pentru cadrul următor, schimbările pot fi adăugate peste cadre diferite, determinând rezultate care nu sunt dorite din punct de vedere vizual și perceptibil.
Un model nou, pentru comanda extragerii graficii, este descris în cererile de brevet de invenție din Statele Unite, menționate mai sus, cu numerele seriale US 2003/0076328; US 2003/0132937 și US 2003/0076328. Acest model nou asigură un număr de îmbunătățiri semnificative în tehnologia de procesare a graficii. De exemplu, brevetul US 2003/0076328 este orientat, în general, către un sistem și către o metodă de procesare a graficii de nivel multiplu, la care o componentă de nivel mai ridicat (de exemplu, al unui sistem de operare) execută aspecte computaționale intense de construire a unui graf scenic, de actualizare a parametrilor de animație și de a trece în revistă structurile de date ale grafului scenic, la o viteză de funcționare relativ scăzută, pentru a trece structurile de date simplificate și/sau comenzile de grafică la o componentă de nivel scăzut. Deoarece procesarea de nivel ridicat simplifică în mod considerabil datele, componenta de nivel scăzut poate să funcționeze la o viteză mai mare (relativ la componenta de nivel ridicat), cum ar fi o viteză care corespunde la viteza de reîmprospătare a cadrului din subsistemul de grafică, pentru a procesa datele în date constante de ieșire, pentru subsistemul de grafică. Dacă se utilizează animația, în loc de a avea o redesenare a întregii scene cu modificări, procesarea de nivel scăzut poate interpola intervalele de parametri după cum este necesar, pentru a obține valori instantanee care, atunci când sunt livrate, asigură o scenă modificată puțin, pentru fiecare cadru, asigurând animație plăcută.
Cererea de brevet US 2003/0132937 descrie un graf scenic, parametrizat, care asigură valori variabile (animate), precum și recipiente de grafuri parametrizate, cum arfi acel cod de program care dorește să deseneze grafică (de exemplu, un program de aplicație sau o componentă a sistemului de operare), ce poate să modifice în mod selectiv anumite aspecte ale descrierii grafului scenic, în timp ce lasă intacte alte aspecte. Codul de program poate, de asemenea, să reutilizeze porțiunile deja construite ale grafului scenic, împreună cu diferiți parametri posibili. Așa după cum poate fi apreciat, abilitatea la modificarea ușoară a apariției elementelor afișate prin parametrizare și/sau reutilizarea părților existente ale unui graf scenic, asigură, în mod eficient, câștiguri substanțiale în procesarea graficii generale.
RO 123609 Β1
Cererea de brevet US 2003/0076329 descrie, în general, o structură de memorare 1 ascunsă a datelor, precum și mecanisme specificate pentru stocarea informațiilor cu privire la vizual, prin obiecte și date dintr-un graf scenic. Structura datelor este în general asociată cu 3 mecanisme care comandă în mod inteligent felul cum informația vizuală din acesta este populată și utilizată. De exemplu, cu excepția cerută în mod specific de către programul 5 aplicației, majoritatea informației stocate în structura de date nu are nicio referință externă asupra ei, care permite acestei informații să fie optimizată sau de altfel să fie procesată. Așa 7 după cum poate fi apreciat, aceasta asigură eficiență și conservare de resurse, de exemplu, datele din structura cache (memorie ascunsă) de date pot fi procesate într-un format diferit, 9 care este mai compact, și/sau reduce nevoia de procesare ulterioară, repetată, cum ar fi un bitmap sau alte rezultate ale post procesării. 11 în timp ce îmbunătățirile de mai sus asigură beneficii substanțiale în tehnologia procesării graficii, este încă necesar de a se găsi o cale pentru programe, pentru a utiliza efectiv 13 acest model îmbunătățit de grafică, precum și alte din îmbunătățirile acesteia, descrise într-o manieră directă. Ceea ce este necesar este o cale directă, încă intuitivă pentru programe, spre 15 a obține avantaje asupra multor trăsături și asupra capabilităților de procesare grafică, asigurate de către modelul îmbunătățit de grafică și, prin aceasta, spre a se obține grafică complexă, 17 într-un mod eficient.
Un alt exemplu de management alternativ al unei scene 3D este descris în brevetul 19 US 6215495 B1, Brad Grantham, 2011. Se creează o scenă 3D originală, descrisă în format VRML. Sunt prezentate atât componentele scenei (geometrie, materiale, lumini, imagini, imagini 21 în mișcare și sunete), cât și relațiile între acestea, statice sau dinamice. Un număr de obiecte, care reprezintă blocurile de bază pentru construirea unui graf scenic, sunt stocate într-o 23 memorie. Obiectele constau în geometrie, stare grafică, ierarhie de transformare și informații audio. Scenele în format VRML sunt transmise către o interfață de tip API, care apelează 25 diverse motoare pentru a modifica graful scenic. La aceasta contribuie și un parser, pentru a permite fișierelor VRML să poată fi rulate pe orice calculator. Interfața API este structurată ca 27 o colecție de clase ierarhizate, reprezentând aparența, materialul, textura, transformare de text, geometrie, culoare, coordonate, sunet, formă. Motoarele de compunere folosite sunt: un motor 29 de morfologie geometrică, un motor de interpolare și un motor de scriere. între primitivele din setul geometric, sunt incluse: set de puncte, set de linii, set de poligoane, set de coordonate, 31 set de culori, set de coordonate de textură, set de indici de integrare, primitive de tip con și de tip cilindru. 33
Graful scenic este reprezentat ca un graf aciclic de noduri. Ierarhia claselor cuprinde și un grup de noduri de tip: nod de transformare, nod de comutare și un fundal pentru definirea 35 luminii și ceții.
Problema tehnică, pe care o rezolvă invenția, constă în producerea de grafică pe 37 computer, prin accesarea unui model obiect de elemente, într-un mod care să permită interfațarea, în permanență, cu o structură de date, a grafului scenic. 39
Sistemul pentru procesarea informațiilor grafice și a altor informații video, pentru afișarea pe sisteme de calculatoare, cuprinde: 41
- un motor de compunere și de animație de nivel superior și un motor de nivel inferior, motorul de nivel superior fiind instanțiat pe o bază per-aplicație, iar motorul de nivel inferior 43 deservind cereri de la mai multe aplicații;
- un limbaj marcator, acesta cuprinzând instrucțiuni grafice, care cuprind un format șir 45 și o notație de obiect, notația de obiect cuprinzând elemente grafice de la o clasă de elemente grafice; 47
RO 123609 Β1
- un model obiect grafic, cuprinzând:
a. un obiect vizual de clasă de bază, care este un container pentru conținut grafic, ce asigură funcționalitate de bază, pentru alte tipuri vizuale și din care derivă alte tipuri vizuale;
b. un obiect vizual de tip container, care este un container pentru elemente vizuale și care poate conține alte obiecte vizuale de tip container;
c. un obiect vizual de tip desen care este un container pentru conținut grafic, și
d. o clasă de elemente grafice, clasa de elemente cuprinzând o clasă de formă, o clasă de imagine, o clasă video și o clasă Canavas, iar clasa de elemente fiind integrată cu un sistem de proprietăți generale:
- un convertor de tip, care este configurat să convertească o instrucțiune grafică în format șir la un obiect de interfață pentru programare de aplicație (API) vizual;
- un parser/translator, care este configurat să:
a. interpreteze instrucțiunile grafice, acestea cuprinzând apeluri de cod directe, apeluri de cod de model obiect și instrucțiuni grafice scrise utilizând limbajul marcator,
b. acceseze convertorul de tip, acesta fiind configurat să convertească o instrucțiune grafică în format șir într-un obiect API vizual, și să
c. interpreteze codul marcator și, la interpretarea codului marcator, să adauge elemente din clasa elementelor grafice la un element arbore;
d. un sistem de prezentare, acesta fiind configurat sa traducă arborii de elemente grafice în apeluri la un API vizual; un API vizual, API-ul vizual fiind configurat să:
a. interfațeze cu sistemul de prezentare, să interfațeze cu parserul-translator și să interfațeze cu apelurile de cod directe de la limbajele de programare, și
b. ca răspuns la cererile sistemului de prezentare, parserul-translator creează obiecte de scenă în cadrul unui graf scenic; și
c. o interfață de afișare operabilă să faciliteze afișarea obiectelor grafice în cadrul grafului scenic.
Sistemul conform invenției are elementele din modelul obiect de elemente corelate cu obiectele din modelul obiect al grafului scenic.
în sistemul conform invenției, marcatorul include textul în-linie, ce include un șir care definește o proprietate a elementului, iar translatorul comunică cu un convertor de tip, pentru a converti șirul într-o proprietate a obiectului.
în sistemul conform invenției, marcatorul include textul în-linie ce conține sintaxa de proprietate, sintaxa de proprietate specificând atribute multiple ale obiectelor grafice vectoriale.
Sistemul conform invenției este caracterizat prin aceea că textul în-linie este identificat cu o referință care se referă la o altă locație din marcator.
Sistemul conform invenției este caracterizat prin aceea că textul în-linie este identificat cu o referință care se referă la un fișier.
Sistemul conform invenției este caracterizat prin aceea că textul în-linie este identificat cu o referință care corespunde la un fișier care poate fi descărcat dintr-o locație aflată la distantă, într-o rețea.
în sistemul conform invenției, marcatorul include textul în-linie ce cuprinde sintaxa de proprietate complexă, corespunzând unei resurse grafice.
Sistemul conform invenției este caracterizat prin aceea că resursa grafică descrie un obiect pensulă vizual, parserul/traducătorul asigurând datele nivelului resursă pentru comunicarea directă cu stratul API vizual, pentru a crea un obiect vopsea vizual, ce corespunde elementului descris de către sintaxa de proprietate complexă.
în sistemul conform invenției, datele nivelului resursă sunt identificate cu o referință care se referă la o altă locație din marcator.
RO 123609 Β1
De asemenea, datele nivelului resursă sunt identificate cu o referință care se referă la 1 un fișier.
în sistemul conform invenției, datele nivelului resursă sunt identificate cu o referință care 3 se referă la un fișier care poate fi descărcat dintr-o locație aflată la distantă, într-o rețea.
Sistemul conform invenției este caracterizat prin aceea că unul dintre elementele 5 modelului obiect grafic cuprinde un element imagine.
Sistemul conform invenției este caracterizat prin aceea că unul dintre elementele grafice 7 cuprinde un element polii inie. De asemnea, unul dintre elementele grafice cuprinde un element poligon sau un element traiectorie, sau un element linie sau un element elipsă sau un element 9 cerc.
Sistemul conform invenției este caracterizat prin aceea că unul dintre elementele grafice 11 include cel puțin date despre proprietatea de umplere și/sau date despre proprietatea de mișcare a pensulei și/sau date despre proprietatea de decupare și/sau date despre proprietatea 13 de transformare și/sau date despre efect și/sau date despre opacitate și/sau date despre modul de îmbinare. 15 în sistemul conform invenției, translatorul solicită instanțierea a cel puțin unui constructor, pentru a crea obiecte de grafică. 17
Avantajele care decurg din aplicarea invenției sunt menționate în continuare. Astfel:
Sistemul de grafică vectorială poate astfel să programeze la un nivel element, la care 19 fiecare dintre conformațiile de desenare sunt reprezentate ca un element la același nivel ca și restul elementelor programabile dintr-o pagină/ecran, permițând interacțiunea cu sistemul de 21 prezentatori, cu evenimente și cu proprietăți.
Sistemul de grafică vectorială prevede, de asemenea, un mecanism pentru programarea 23 la un nivel resursă, prin care designerii scenici pot în fond să scurtcircuiteze arborele de elemente și sistemul de prezentatori, și să programeze direct la stratul API al vizualului, care 25 se interfațează cu structura de date a grafului scenic. Acesta asigură o cale mai eficientă și mai ușoară, pentru a obține obiectul potrivit, cu toate că se pierde ceva din programabilitatea 27 nivelului element. La o implementare, dacă este programată o umplere de tipul pensulă vizual, analizorul gramatical poate să apeleze direct stratul API cu datele nivelului resursă, pentru a 29 crea un obiect vopsea al vizualului corespunzător (care este și o corelare dintre modelul obiect element și modelul obiect graf scenic). La acest sistem bistratificat, grafica vectorială la nivel 31 de element este analizată gramatical în elementele create, care necesită o traducere ulterioară în obiecte, în timp ce grafica vectorială la nivel de resursă este analizată gramatical și stocată 33 direct, într-un mod eficient. în același timp, datele nivelului resursă sau obiectele create din acesta pot fi completate de către elemente și de către o parte din arborele de elemente. în acest 35 scop, pot fi denumite elementele ce includ elemente de vopsea pentru vizual. Proiectantul de scenă are astfel abilitatea de a aprecia eficient programabilitatea, atât cât este necesar. 37
Alte foloase și avantaje ale invenției vor deveni evidente din următoarea descriere detaliată, dacă se face legătura cu desenele, în care:39
- fig. 1 este o schemă bloc, ce reprezintă un sistem tipic de computer în care poate fi încorporată prezenta invenție;41
- fig. 2 este o schemă bloc, ce reprezintă, în general, o arhitectură de nivel de grafică, în care poate fi încorporată prezenta invenție;43
- fig. 3 este o reprezentare a unui graf scenic de vizuale, precum și componentele asociate, pentru procesarea grafului scenic, cum arfi prin parcurgerea grafului de decor, pentru 45 a asigura comenzile graficii, precum și alte date, în conformitate cu un aspect al invenției de față;47
RO 123609 Β1
- fig. 4 este o reprezentare a unui graf scenic de vizuale de validare, de vizuale de desenare și de primitive asociate de desenare, create în conformitate cu un aspect al prezentei invenții;
- fig. 5 este o reprezentare a unei clase de imagini vizuale, a unui model obiect, în conformitate cu un aspect al invenției de față;
- fig. 6 este o reprezentare a altor diverse obiecte ale modelului obiect, în conformitate cu un aspect al prezentei invenții;
- fig. 7 este o diagramă ce reprezintă transformarea unor date ale vizualului, în conformitate cu un aspect al prezentei invenții;
- fig. 8A și 8B sunt reprezentări ale transformărilor unor date ale vizualului într-o scară geometrică și, respectiv, într-o scară neuniformă, în conformitate cu un aspect al prezentei invenții;
- fig. 9A...9C sunt scheme bloc ale obiectelor vizuale de suprafață, precum și ale altor vizuale și componente, în conformitate cu un aspect al invenției de față;
- fig. 10A și 10B sunt diagrame, ce reprezintă obiectele vizuale HWnd, în conformitate cu un aspect al prezentei invenții;
- fig. 11 este o diagramă, ce reprezintă un obiect vizual stratificat, în conformitate cu un aspect al prezentei invenții;
- fig. 12 este o reprezentare a claselor de geometrie ale modelului obiect, în conformitate cu un aspect al invenției de față;
- fig. 13 este o reprezentare a unei structuri de geometrie a traiectoriei (PathGeometry), în conformitate cu un aspect al prezentei invenții;
- fig. 14 este o reprezentare a unui graf scenic al vizualelor și al primitivelor de desenare, ce arată o grafică de exemplu, produsă de către primitive, în conformitate cu un aspect al invenției de față;
- fig. 15 este o reprezentare a claselor de pensule din modelul obiect, în conformitate cu un aspect al invenției de față;
- fig. 16 este o reprezentare a graficii remise, ce rezultă din datele dintr-un obiect pensulă cu gradient liniar, în conformitate cu un aspect al prezentei invenții;
- fig. 17 este o reprezentare a graficii remise, ce rezultă din datele dintr-un obiect pensulă cu gradient radial, în conformitate cu un aspect al prezentei invenții;
- fig. 18 este o reprezentare a graficii remise, ce rezultă din a avea diverse valori de extindere, în conformitate cu un aspect al invenției de față;
- fig. 19 este o reprezentare a graficii remise, ce rezultă din a avea diverse valori ale plăcii (tile), în conformitate cu un aspect al prezentei invenții;
- fig. 20 este o organigramă ce reprezintă într-un mod general logica pentru interpretarea unui vizual, incluzând un obiect pensulă, pentru a genera grafică, în conformitate cu un aspect al invenției de față;
- fig. 21 este o reprezentare a unei grile și a unei grile transformate, ce rezultă din datele dintr-un obiect pensulă al vizualului, în conformitate cu un aspect al prezentei invenții;
- fig. 22 este o reprezentare a unei grile și a unei grile transformate, împreună cu grafica remisă, care este desenată de la un vizual, în conformitate cu un aspect al prezentei invenții;
- fig. 23 este o reprezentare a unui obiect pensulă remis, cu nouă grile, în conformitate cu un aspect al invenției de față;
- fig. 24 este o reprezentare a claselor transformatei, ale modelului obiect, în conformitate cu un aspect al prezentei invenții.
- fig. 25 este o reprezentare a claselor elementelor din modelul obiect element, în conformitate cu un aspect al prezentei invenții;
RO 123609 Β1
- fig. 26 este o reprezentare a componentelor, pentru determinarea codului limbajului 1 de marcare să se interfațeze cu stratul API vizual, în conformitate cu un aspect al invenției de față; 3
- fig. 27 este o reprezentare a decupării printr-o cale geometrică, în conformitate cu un aspect al prezentei invenții. 5
Fig. 1 ilustrează un exemplu de mediu potrivit de sistem de calcul 100, pe care invenția poate fi implementată. Mediul 100 al sistemului de calcul este numai un exemplu de mediu 7 corespunzător de calcul și nu este avut în vedere să se sugereze nicio limitare, la fel ca la scopul utilizării sau ca la funcționalitatea invenției. Niciun mediu, 100, de calcul nu va fi 9 interpretat ca având vreo dependență sau vreo cerință referitoare la oricare componentă sau la oricare combinație de componente ilustrate în mediul de operare tipic, 100. 11
Invenția este funcțională, împreună cu numeroase alte medii sau configurații de sisteme de calcul cu scopuri generale sau cu scopuri speciale. Exemple ale binecunoscutelor sisteme 13 de calcul, medii și/sau configurații, care pot fi potrivite pentru utilizarea împreună cu invenția, includ, dar nu sunt limitate la acestea, calculatoare personale, calculatoare servere, dispozitive 15 hand-held sau laptop-uri, dispozitive tip tabletă, sisteme multiprocesor, sisteme bazate pe microprocesor, incinte acționate în partea de sus (set top boxes), produse electronice, progra- 17 mabile, de larg consum, PC-uri de rețea, minicalculatoare, computere mainframe, medii de calcul distribuite, care includ oricare dintre sistemele sau dispozitivele de mai sus, precum și 19 altele asemănătoare.
Invenția poate fi descrisă în contextul general al instrucțiunilor executabile pe computer, 21 cum ar fi module de program ce sunt executate de un calculator. în general, modulele de program includ rutine, programe, obiecte, componente, structuri de date, și așa mai departe, 23 care execută anumite seturi de instrucțiuni (task-uri) sau care implementează anumite tipuri abstracte de date. Invenția poate fi pusă în practică, de asemenea, în medii de calcul distribuite, 25 unde lucrările sunt executate prin dispozitive de procesare de la distanță, care sunt legate printr-o rețea de comunicații. într-un mediu de calcul distribuit, modulele de program pot fi 27 localizate pe ambele medii de stocare pe computer, locale și aflate la distanță, ce includ dispozitivele de stocare în memorie. 29 în legătură cu fig. 1, un sistem tipic pentru implementarea invenției include un dispozitiv de calcul cu destinație generală, sub forma unui computer 110. Componentele calculatorului 31 110 pot include, dar nu sunt limitate de acestea, o unitate de procesare 120, o memorie de sistem 130, precum și o magistrală de sistem 121, care cuplează diverse componente ale 33 sistemului ce include memoria de sistem, la unitatea de procesare 120. Magistrala de sistem 121 poate fi oricare dintre diversele tipuri de structuri de magistrale ce includ o magistrală de 35 memorie sau un controler de memorie, o magistrală de periferice, precum și o magistrală locală ce utilizează oricare din varietatea de arhitecturi de magistrale. Cu titlu de exemplu, iar nu ca 37 limitare, astfel de arhitecturi includ magistrala ISA (Industry Standard Architecture - Arhitectura standard industrială), magistrala MCA (Micro Channel Architecture - Arhitectura de micro canal), 39 magistrala EISA (Enhanced ISA - ISA sporit), magistrala locală VESA (Video Electronics Standards Association - Asociația de standarde de electronică video), magistrala AGP 41 (Accelerated Graphics Port - Port de grafică accelerată), precum și magistrala PCI (Peripheral Component Interconnect- Interconectare de componente periferice), cunoscută de asemenea 43 drept magistrala Mezzanine.
Computerul 110 include, într-un mod caracteristic, o varietate de medii citibile cu ajutorul 45 calculatorului. Mediile citibile cu ajutorul calculatorului pot fi orice medii disponibile, care pot fi accesate de către calculatorul 110, și includ atât medii volatile și medii nonvolatile, cât și medii 47 movibile și amovibile. Cu titlu de exemplu și nu de limitare, mediile citibile cu ajutorul
RO 123609 Β1 calculatorului pot conține medii de stocare pe calculator și medii de comunicație. Mediile de stocare pe calculator includ atât medii volatile și nonvolatile, cât și medii movibile și amovibile, implementate în oricare metodă sau tehnologie pentru stocarea informațiilor, cum ar fi instrucțiuni citibile cu ajutorul calculatorului, structuri de date, module de program sau alte date. Mediile de stocare pe calculator includ, dar nu sunt limitate de acestea, RAM, ROM, EEPROM, memorie flash sau alte tehnologii pentru memorii, CD-ROM, DVD-uri (Digital Versatile Diskdisc digital versatil) sau alte stocări optice pe disc, casete magnetice, bandă magnetică, stocare magnetică pe disc sau alte dispozitive magnetice de stocare, sau orice alt mediu care poate fi utilizat pentru a stoca informația dorită și care pot fi accesate de către computerul 110. Mediile de comunicație cuprind, înt-un mod caracteristic, instrucțiuni citibile cu ajutorul calculatorului, structuri de date, module de program sau alte date dintr-un semnal de date modulat, cum ar fi o undă purtătoare sau alt mecanism de transport și include orice medii de livrare a informației. Termenul semnal de date modulat înseamnă un semnal care are una sau mai multe din caracteristicile acestuia, setate sau modificate într-o astfel de manieră, încât să codifice informația din semnal. Cu titlu de exemplu și nu de limitare, mediile de comunicație includ medii cablate, cum ar fi o rețea cablată sau o conexiune cablată direct, precum și medii wireless (fără fir), cum arfi medii acustice, RF, în infraroșu și alte medii wireless. Combinațiile oricărora de mai sus trebuie să fie incluse, de asemenea, în sfera mediilor citibile cu ajutorul calculatorului.
Memoria de sistem 130 include mediile de stocare pe calculator, sub forma memoriei volatile și/sau a memoriei nonvolatile, cum ar fi ROM-ul 131 (Read Only Memory - memorie numai de citire) și RAM-ul 132 (Random Access Memory - memorie cu acces aleatoriu). Un BIOS (Basic Input/Output System - sistem de bază de intrare/ieșire) 133, conținând rutine de bază care ajută la transferarea informației între elementele din interiorul calculatorului 110, cum arfi cele pe durata start-up-ului, este într-un mod caracteristic stocat în ROM-ul 131. RAM-ul 132 conține, în mod caracteristic, date și/sau module de program care sunt accesibile imediat și/sau în mod necesar, fiind funcționale la unitatea de procesare 120. Cu titlu de exemplu și nu de limitare, fig. 1 ilustrează sistemul de operare 134, programele de aplicație 135, alte module de program 136 și date de program 137.
Calculatorul 110 poate să includă, de asemenea, alte medii movibile/amovibile, volatile/ nonvolatile de stocare în calculator. Numai cu titlu de exemplu, fig. 1 ilustrează o unitate de hard disk 141, care citește sau scrie pe medii magnetice amovibile, nonvolatile, o unitate de disc magnetic 151, care citește sau scrie pe un disc magnetic 152 movibil, nonvolatil, precum și o unitate de disc optic 155, care citește sau scrie pe un disc optic 156, movibil, nonvolatil, cum ar fi un CD-ROM sau alte medii optice. Alte medii movibile/amovibile, volatile/nonvolatile de stocare în calculator, care pot fi utilizate în mediul tipic de operare, includ, dar nu sunt limitate la acestea, casete de bandă magnetică, cârduri de memorie flash, discuri digitale versatile, bandă video digitală, RAM cu semiconductoare, ROM cu semiconductoare, precum și altele asemănătoare. Unitatea de hard disc 141 este conectată, în mod caracteristic, la magistrala de sistem 121, printr-o interfață de memorie amovibilă, cum arfi interfața 140, iar unitatea de disc magnetic 151 și unitatea de disc optic 155 sunt conectate, în mod tipic, la magistrala de sistem 121, printr-o interfață de memorie movibilă, cum arfi interfața 150.
Unitățile și mediile asociate, de stocare în computer, discutate mai sus și ilustrate în fig. 1, asigură stocarea instrucțiunilor citibile cu ajutorul calculatorului, a structurilor de date, a modulelor de program, precum și a altor date pentru calculatorul 110. în fig. 1, de exemplu, unitatea de hard disc 141 este ilustrată ca stocând sistemul de operare 144, programele de aplicație 145, alte module de program 146, precum și datele de program 147. De remarcat că
RO 123609 Β1 aceste componente pot fie să fie la fel, fie să fie diferite de sistemul de operare 134, de1 programele de aplicație 135, de alte module de program 136 și de datele de program 137.
Sistemul de operare 144, programele de aplicație 145, alte module de program 146, precum3 și datele de program 147, au indicate diferite numere aici, pentru a ilustra că, la un minimum, acestea sunt copii diferite. Un utilizator poate să introducă comenzi și informații în calculatorul5
110, prin dispozitive de intrare, cum ar fi o tabletă (digitizor electronic) 164, un microfon 163, o tastatură 162 și un dispozitiv de pointare 161, în mod obișnuit referit ca fiind mouse, 7 trackball sau touch pad. Alte dispozitive de intrare (nu sunt arătate) pot include un joystick, game pad, reflector parabolic asimetric pentru satelit, scaner sau altele asemănătoare. 9 Acestea, precum și alte dispozitive de intrare, sunt deseori conectate la unitatea de procesare 120, printr-o interfață de intrare utilizator 160, care este cuplată la magistrala de sistem, dar 11 care poate fi conectată de către altă interfață sau alte structuri de magistrale, cum ar fi un port paralel, un port pentru jocuri sau o magistrală serială universală (USB). Un monitor 191 sau alt 13 tip de dispozitive de afișare este, de asemenea, conectat la magistrala de sistem 121, printr-o interfață, cum ar fi o interfață video 190. Monitorul 191 poate, de asemenea, să fie integrat, 15 împreună cu un panou touch-screen 193 sau ceva asemănător, care poate să introducă o intrare digitizată, cum ar fi scrisul de mână, în sistemul calculatorului 110, printr-o interfață, cum 17 ar fi interfața de touch-screen 192. De notat faptul că monitorul și/sau panoul de touch-screen pot fi, din punct de vedere fizic, cuplate la o carcasă în care este încorporat dispozitivul de 19 calcul 110, cum ar fi într-un calculator personal de tip tabletă, la care panoul de touch screen 193 servește, în fond, drept tableta 164. în afară de aceasta, computere cum ar fi dispozitivul 21 de calculat 110, pot să includă, de asemenea, alte dispozitive periferice de ieșire, cum ar fi difuzoarele 195 și imprimanta 196, care pot fi conectate, printr-o interfață 194, de periferice de 23 ieșire sau altele asemănătoare.
Calculatorul 110 poate funcționa într-un mediu de rețea, ce utilizează conecțiuni logice, 25 la unul sau mai multe computere aflate la distanță, cum ar fi calculatorul 180, aflat la distanță. Calculatorul 180, aflat la distanță, poate fi un calculator personal, un server, un router, un PC 27 de rețea, un dispozitiv peer sau alte noduri comune de rețea, și include, în mod caracteristic, multe sau toate din elementele descrise mai sus, referitoare la computerul 110, cu toate că, 29 numai un dispozitiv 181 de stocare în memorie a fost ilustrat în fig. 1. Conexiunile logice, reprezentate în fig. 1, includ un LAN (Local Area Network - rețea de zonă locală) 171 și un WAN 31 (Wide Area Network - rețea de zonă largă) 173, dar pot, de asemenea, să includă alte rețele.
Astfel de medii de conectare în rețea sunt comune în birouri, în rețele de calculatoare pe arie 33 largă din întreprinderi, în intraneturi și pe Internet.
Atunci când se utilizeazăîntr-un mediu de conectareîn rețea LAN, computerul 110 este 35 conectat la LAN-ul 171, printr-o interfață de rețea sau prin adaptorul 170. Atunci când se utilizează într-un mediu de conectare în rețea WAN, computerul 110 include, în mod caracteristic, 37 un modem 172 sau alte mijloace pentru stabilirea comunicațiilor prin WAN-ul 173, cum ar fi Internetul. Modemul 172, care poate fi intern sau extern, poate fi conectat, la magistrala de 39 sistem 121, prin interfața de intrare utilizator 160 sau printr-un alt mecanism adecvat. într-un mediu de conectare în rețea, modulele de program descrise, referitore la calculatorul 110 sau 41 porțiuni din acestea, pot fi stocate într-un dispozitiv de stocare în memorie, aflat la distanță. Cu titlu de exemplu și nu de limitare, fig. 1 ilustrează programe 185 de aplicație aflate la distanță, 43 ca rezidente pe dispozitivul de memorie 181. Va fi de apreciat faptul că respectivele conexiuni de rețea arătate sunt tipice, și pot fi utilizate și alte mijloace de stabilire a legăturii de comunicații 45 dintre calculatoare.
RO 123609 Β1
Un aspect al prezentei invenții este, în general, îndreptat spre a permite codului de program, cum ar fi o aplicație sau o componentă a sistemului de operare, să comunice instrucțiunile de desenare, precum și alte informații (de exemplu, bitmap-urile de imagine) la componentele de grafică, pentru a livra ieșirea grafică pe afișajul sistemului. în acest scop, invenția de față prevede un limbaj de marcare, împreună cu un set de elemente de conformație, precum și alte elemente, prevede un sistem de grupare și de compoziție, precum și integrarea cu un sistem de proprietăți generale dintr-un model obiect, pentru a permite programelor să populeze un graf scenic cu structuri de date, primitive de desenare (comenzi), precum și alte date referitoare la grafică. Atunci când este procesat, graful scenic are ca rezultat grafică afișată pe ecran.
Fig. 2 reprezintă o arhitectură generală, stratificată 200, în care poate fi implementată prezenta invenție. Așa după cum este reprezentat în fig. 2, codul de program 202 (de exemplu, un program de aplicație sau o componentă a sistemului de operare sau altele asemănătoare) poate fi dezvoltat să producă date de grafică pe una sau mai multe căi diverse, inclusiv prin formarea de imagine 204, prin elementele de grafică vectorială 206, și/sau prin apeluri de funcții/metode plasate direct la un strat 212, al interfeței de programare a aplicației vizualului (API). Interacțiunea directă cu stratul API este descrisă mai departe, în cererea de brevet de invenție dependentă, menționată mai sus, intitulată Interfețe grafice vizuale și scenice.
în general, formarea de imagine 204 asigură, codul de program 202, cu un mecanism pentru încărcarea, editarea și salvarea de imagini, cum ar fi bitmap-urile. Aceste imagini pot fi utilizate de către alte părți ale sistemului și există, de asemenea, o cale de a utiliza codul de desenare al primitivelor, pentru a desena direct pe o imagine.
în conformitate cu un aspect al prezentei invenții, elementele de grafică vectorială 206 asigură o altă cale de a desena grafică, compatibilă cu restul din modelul obiect (așa cum este descris mai jos). Elementele 206 de grafică vectorială pot fi create printr-un limbaj de marcare, care prelucrează un sistem 208, de elemente/proprietăți, și un sistem prezentator 210 să facă apeluri specifice la stratul API al vizualului, 212. Așa după cum este descris mai jos, în legătură cu fig. 26, în general, elementele 206 de grafică vectorială sunt analizate, gramatical, în obiecte ale modelului obiect din care este desenat un graf scenic, care pot fi asigurate la graful de decor printr-un nivel de elemente, prin sistemul 208 de elemente/proprietăți și prin sistemul prezentator 210, sau poate fi asigurat într-o manieră mai eficientă la un nivel de resurse, așa cum este, de asemenea, descris mai jos.
într-o implementare, arhitectura 200, a stratului de grafică, include un motor 214, de compoziție și de animație de nivel ridicat, care include sau este asociat, pe de altă parte, cu o structură 216, de date de memorare ascunsă. Structura 216 de date de memorare ascunsă, conține un graf scenic, ce cuprinde obiecte aranjate în mod ierarhic, care sunt administrate în conformitate cu un model obiect definit, așa după cum este descris mai jos. în general,stratul 212 API al vizualelor asigură codul de program 202 (precum și sistemul prezentator 210) cu o interfață pentru structura 216, de date de memorare ascunsă, incluzând abilitatea de a crea obiecte, de a deschide și de a închide obiecte, pentru a le furniza date, și așa mai departe. Cu alte cuvinte, motorul 214 de compoziție și de animație de nivel superior etalează un strat API de medii unificate, 212, prin care dezvoltatorii pot să-și exprime intențiile referitoare la grafică și la medii, pentru a afișa informații de grafică, și asigură o platformă fundamentală cu destule informații, astfel că platforma poate optimiza utilizarea hardware-lui pentru codul de program. De exemplu, platforma fundamentală va fi răspunzătoare de memorarea ascunsă, de negocierea de resurse și de integrarea mediilor.
RO 123609 Β1 într-o implementare, motorul 214 de compoziție și de animație de nivel superior trece 1 un șir de instrucțiuni și posibile alte date (de exemplu, pointer-e la bitmap-uri), la un motor 218 de compoziție și de animație rapid, de nivel inferior. Așa după cum sunt utilizați în cele de față, 3 termenii de nivel superior și de nivel inferior sunt similari acelora utilizați în alte scenarii de calcul, în care, în general, cu cât este mai scăzută componenta de software față de compo- 5 nentele de nivel superior, cu atât este mai apropiată acea componentă de elementele hardware. Astfel, de exemplu, informația de grafică, trimisă de la motorul 214 de compoziție și de animație 7 de nivel superior, poate fi recepționată la motorul 218, de compoziție și de animație de nivel inferior, unde informația este utilizată pentru a trimite datele de grafică la subsistemul de grafică, 9 ce include hardware-ul 222.
Motorul 214 de compoziție și de animație de nivel superior, împreună cu codul de 11 program 202, construiește un graf de decor, pentru a reprezenta un decor de grafică, asigurat de codul de program 202. De exemplu, fiecare element ce este desenat, poate fi încărcat, 13 împreună cu instrucțiunile de desenare, pe care sistemul îl poate ascunde în structura de date 216, a grafului scenic. Așa după cum va fi descris mai jos, există un număr de căi diverse, 15 pentru a specifica această structură de date 216, precum și ceea ce este desenat. în plus, motorul 214 de compoziție și de animație de nivel superior integrează, sistemele 220, cu tem- 17 porizarea și animația, pentru a asigura controlul declarativ (sau un altul) al animației (de exemplu, intervalele de animație), precum și controlul temporizării. De remarcat că sistemul de 19 animație permite valori animate, pentru a fi trecute, în esență, oriunde în sistem, fiind incluse, de exemplu, la nivelul de proprietăți ale elementelor, 208, din interiorul stratului 212, API, al 21 vizualelor, precum și la oricare alte resurse. Sistemul de temporizare este expus la nivelurile de elemente și de vizuale. 23
Motorul 218 de compoziție și de animație de nivel inferior administrează compunerea, animarea și remiterea scenei, care este apoi prevăzută la subsistemul 222, de grafică. Motorul 25 218 de nivel inferior alcătuiește remiterile pentru scenele aplicațiilor multiple, iar împreună cu componentele de remitere, implementează remiterea reală, a graficii, pe ecran. De remarcat 27 totuși că, din când în când, poate fi necesar și/sau avantajos, ca unele dintre remiteri să se facă la niveluri mai ridicate. De exemplu, în timp ce service-ul straturilor inferioare necesită aplicații 29 multiple, straturile superioare sunt instanțiate imediat pe o bază de per-aplicație, prin care este posibil, prin mecanismele 204, de formare de imagini (imaging), să se efectueze remiteri con- 31 sumatoare de timp sau remiteri specifice aplicației, la niveluri superioare, și să treacă referirile la un bitmap, la nivelurile inferioare. 33
Așa cum este descris mai jos, modelul de remitere este împărțit între elementele 206, de grafică vectorială de înalt nivel, bazate pe comenzi, și obiectele de nivel scăzut, create de 35 către stratul API al vizualului, 212, utilizat în structura 216, de date, a grafului scenic. Acest lucru asigură o valoare însemnată a corelației dintre elementele de nivel ridicat, ale prezentei 37 invenții, și obiectele de nivel scăzut. Ceea ce urmează, descrie o implementare a modelului obiect al grafului scenic. 39
Fig. 3 și 4 prezintă grafuri scenice model, 300, și, respectiv, 400, ce includ un obiect de bază menționat ca fiind un vizual. în general, un vizual conține un obiect care reprezintă o 41 suprafață virtuală la utilizator și are o reprezentare vizuală pe display. Așa după cum este reprezentat în fig. 5, un vizual de clasă de bază asigură funcționalitatea de bază, pentru alte tipuri 43 de vizuale, adică clasa 500, a vizualului, este o clasă de bază abstractă, din care derivă tipurile vizualului (de exemplu, 501-506). 45
RO 123609 Β1
Așa după cum este reprezentat în fig. 3, un vizual 302, de nivel de vârf (sau rădăcină), este conectat la un obiect 304, manager de vizuale, care are, de asemenea, o relație (de exemplu, printr-un pretext convenabil) cu o fereastră (HWnd) 306 sau cu o unitate similară, la care datele graficului sunt extrase pentru codul de program. Managerul de vizuale (VisualManager) 304 administrează desenul vizualului de nivel de vârf (precum și copiii acestui vizual) la această fereastră 306. Fig. 6 prezintă VisualManager-ul ca unul dintr-un set de alte obiecte 620, din modelul obiect al sistemului de grafică descris în cele de față.
Pentru a desena, managerul de vizuale, 304, procesează (de exemplu, parcurge sau transmite) graful scenic, așa după cum este planificat de către un dispecer 308, și prevede instrucțiuni de grafică, precum și alte date, la componenta 218, de nivel scăzut (fig. 2), pentru fereastra lui corespunzătoare, 306, după cum este descris, la modul general, în cererile de brevet US 2003/0076328, US 2003/0132937 și US 2003/0076329. Procesarea grafului scenic va fi planificată în mod obișnuit, de către dispecerul 308, la o viteză care este relativ mai scăzută decât viteza de reîmprospătare a componentei 218, de nivel inferior și/sau a subsistemului 222, de grafică. Fig. 3 arată un număr de vizuale copii 310-315, aranjate în mod ierarhic sub vizualul 302, de nivel de vârf (rădăcină), din care unele sunt reprezentate ca fiind populate prin contextele de desenare 316 și 317 (prezentate sub formă de căsuțe cu linii întrerupte, pentru a reprezenta natura lor temporară) cu liste de instrucțiuni asociate, 318, și, respectiv, 319, ce conțin, de exemplu, primitive de desenare, precum și alte vizuale. Vizualele pot, de asemenea, să conțină alte informații de proprietăți, așa cum sunt arătate la următoarea clasă exemplu de vizuale:
public abstract class Visual : VisualComponent {
public Transform Transform { get; set; } public float Opacity { get; set; } public BlendMode BlendMode { get; set; } public Geometry Clip { get; set; } public bool Show { get; set; } public HitTestResult HitTest (Point point); public bool IsDescendant (Visual visual);
public static Point TransformToDescendant(
Visual reference,
Visual descendant, Point point);
public static Point TransformFromDescendant( Visual reference,
Visual descendant, Point point);
public Rect CalculateBounds (); // Loose bounds public Rect CalculateTightBounds (); // public bool HitTestable { get; set; } public bool HitTestlgnoreChildren { get; set; } public bool HitTestFinal { get; set; } }
RO 123609 Β1
O transformare setată de către proprietatea transformatei definește sistemul de 1 coordonate pentru subgraful unui vizual. Sistemul de coordonate, dinaintea transformării, este denumit sistem de coordonate de pretransformare, cel de după transformare este denumit 3 sistem de coordonate de post-transformare, adică un vizual cu o transformare este echivalent cu un vizual cu un nod de transformare, drept unul părinte. Fig. 7 prevede, în general, un 5 exemplu de transformare, ce identifică sistemele de coordonate de pretransformare și de post-transformare, privitoare la un vizual. Pentru a obține sau a seta transformarea unui vizual, 7 poate fi folosită proprietatea Transform (transformă).
De remarcat că transformatele de coordonate pot fi aplicate, pe o cale uniformă, la orice, 9 chiar dacă ar fi într-un bitmap. De notat că aceasta nu înseamnă că transformările se folosesc întotdeauna la bitmap-uri, dar ceea ce se remite este afectat în mod egal de către transformate. 11 în chip de exemplu, dacă utilizatorul desenează un cerc cu trăgător rotund, care este de lățime de un inch (țol) și apoi se aplică o scară gradată pe direcția X din cele două direcții, la acest 13 cerc, trăgătorul va fi de lățime doi inch la stânga și la dreapta, și de numai un inch lățime în sus și în jos. Acest lucru este referit uneori ca fiind o transformată de compoziție sau de bitmap (ca 15 opusă unui schelet sau unei scale de geometrie care afectează numai geometria). Fig. 8A este o reprezentare a transformării de scalare, cu o imagine netransformată 800, ce apare în stânga, 17 precum și o imagine transformată 802, cu o scală neuniformă, ce apare în dreapta. Fig. 8B este o reprezentare a transformării de scalare, cu imaginea netransformată 800, ce apare în 19 stânga, precum și o imagine transformată 804, cu o scalare geometrică ce apare în dreapta.
Ținând seama de transformarea de coordonate a unui vizual, TransformToDescendant 21 (transformă la descendent) transformă un punct de la vizualul de referință la un vizual descendent. Punctul este transformat din spațiul de coordonate de post-transformare a 23 vizualului de referință, în spațiul de coordonate de post-transformare a vizualului descendent. TransformFromDescendant (transformă din descendent) transformă un punct din vizualul 25 descendent, începând cu lanțul de părinți, la vizualul de referință. Punctul este transformat din spațiul de coordonate de post-transformare a vizualului descendent, în spațiul de coordonate 27 de post-transformare a vizualului de referință. Metoda CalculateBounds (calculează bordurile) returnează căsuța de delimitare a conținutului Visual-ului din spațiul de coordonate de 29 post-transformare. De remarcat că poate exista o versiune alternativă a API-ului, unde sunt permise mai multe specificații specifice, despre felul cum transformata de la un vizual este inter- 31 pretată pe durata unei transformări de coordonate. De exemplu, transformata din vizualul de referință și descendent poate sau nu poate fi luată în considerație. în această alternativă, există 33 astfel patru alternative, de exemplu, coordonatele pot fi transformate din spațiu de pretransformare în spațiu de pretransformare, din spațiu de pretransformare în spațiu de post-trans- 35 formare, din spațiu de post-transformare în spațiu de pretransformare, și din spațiu de post-transformare în spațiu de post-transformare. Același concept se aplică la testarea de 37 atingere a țintei, de exemplu, testarea de atingere a țintei poate fi startată la spațiul de coordonate al transformatelor de pretransformare sau de post-transformare, iar rezultatele testului de 39 atingere a țintei ar putea fi în spațiul de coordonate de pretransformare sau în cel de post-transformare. 41
Proprietatea de a decupa setează (și obține) regiunea de decupare a unui vizual. Orice Geometry (geometrie) (clasa de geometrie este descrisă mai jos, în legătură cu fig. 12) poate 43 fi utilizată ca o regiune de decupare, iar regiunea de decupare este aplicată în spațiul de coordonate de post-transformare. într-o implementare, o setare de referință pentru regiunea de 45 decupare este nulă, adică fără decupare, care poate fi gândită ca fiind un dreptunghi infinit de mare de decupare, de la (- °°, - °°) la ( + °°, +°°). 47
RO 123609 Β1
Proprietatea de Opacity (opacitate) obține/setează valoarea opacității unui vizual, astfel că respectivul conținut al vizualului este îmbinat pe suprafața de desen, pe baza valorii opacității și a modului de îmbinare selectat. Proprietatea de BlendMode (mod de îmbinare) poate fi utilizată pentru a seta (sau a obține) modul de îmbinare care este folosit. De exemplu, o valoare (alpha) a opacității poate fi setată între 0,0 și 1,0, cu setul alpha liniar de îmbinare, drept mod de setare, de exemplu, Color = alpha * foreground color + (1.0-alpha) * background color) Alte servicii, cum ar fi proprietăți de efecte speciale, pot fi incluse într-un vizual, de exemplu, pată, monocrom și așa mai departe.
Diversele servicii (incluzând transformata, opacitatea, decuparea) pot fi introduse și scoase dintr-un context de desenare, iar operațiile de introducere/scoatere (push/pop) pot fi incluse una într-alta, atâta timp cât un apel de scoatere (pop) se potrivește cu un apel de introducere (push). De exemplu, PushTransform(...); PushOpacity(...); PopTransform(...); este ilegal, deoarece înaintea apelului de PopTransform, trebuie să fie chemat PopOpacity.
Metoda de PushTransform introduce o transformare. Operațiile de desenare, care urmează, sunt executate, ținând seama de transformarea introdusă. PopTransform scoate transformarea introdusă de către apelul potrivit PushTransform:
void PushTransform (Transform transform);
void PushTransform (Matrix matrix);
void PopTransform ();.
în mod similar, metoda PushOpacity introduce o valoare a opacității. Operațiile de desenare, care urmează, sunt remise pe o suprafață temporară, împreună cu valoarea specificată a opacității și apoi sunt combinate în decor. PopOpacity extrage opacitatea introdusă de către apelul potrivit de PushOpacity void PushOpacity (float opacity);
void PushOpacity (NumberAnimationBase opacity);
void PopOpacity ();.
Metoda PushClip introduce o geometrie de decupare. Operațiile de desenare, care urmează, sunt decupate la geometrie. Decuparea este aplicată la spațiul de post transformare.PopCIip extrage regiunea de decupare introdusă de către apelul potrivit de PushClip:
void PushClip (Geometry clip);
void PopCIip ();.
De notat faptul că operațiile de introducere pot fi incluse în mod arbitrar una în alta, atâta timp cât operațiile de scoatere sunt combinate cu o introducere. De exemplu, este valabil următorul lucru:
PushTransform(...);
DrawLine(...);
PushClip (...);
DrawLine(...);
PopCIip ();
PushTransform (...);
DrawRect(...);
PopTransform();
PopTransform();
RO 123609 Β1
Testarea de atingere a țintei este efectuată în spațiul de coordonate de post-trans- 1 formare, iar returnarea unei identități a fiecărui vizual testabil la atingerea țintei, adică este atinsă ținta, de exemplu, atunci când este detectat un trăgător sau un click de mouse. O 3 versiune alternativă a interfeței poate permite, pentru testarea de atingere a țintei, startarea la spațiul de coordonate de post-transformare, privitoare la vizual, unde este startat testul de 5 atingere a țintei. Vizualele care sunt țintite sunt returnate în ordinea primul întâlnit, de la dreapta la stânga. Testarea de atingere a țintei poate fi controlată cu diverse indicatoare (flag) ce includ 7 HitTestable, care determină dacă vizualul este testabil din punct de vedere al atingerii țintei (referința este adevărată), și HitTestFinal-ul, care determină dacă testarea de atingere a țintei 9 se oprește atunci când vizualul este țintit, adică dacă un Visual este țintit, iar proprietatea de HitTestFinal a vizualului este adevărată, testarea la atingerea țintei se întrerupe și se 11 returnează rezultatele colectate la acest punct (referința este falsă). Un alt indicator este HitTestlgnoreChildren, care determină dacă copiii unui vizual ar trebui luați în considerare, 13 atunci când testarea de atingere a țintei este efectuată pe un vizual (referința este falsă).
Un ProxyVisual este un vizual care poate fi adăugat mai mult decât o dată în graful scenic. 15 Deoarece orice vizual care este referit de către un ProxyVisual poate fi atins prin căi multiple de la rădăcină, serviciile de citire (TransformToDescendent, TransformFromDescendent și 17
HitTest) nu lucrează printr-un ProxyVisual. în esență, există o cale canonică de la orice vizual la rădăcina arborelui de vizuale, iar această cale nu include niciun ProxyVisual. 19
Așa cum este reprezentat în fig. 5, diversele tipuri de vizuale sunt definite în modul obiect, ce includ vizualele de recipient (ContainerVisual) 501, vizualele de desenare 21 (DrawingVisual) 502, vizualele de validare (ValidationVisual) 503, vizualele de suprafață (SurfaceVisual) 504 și vizualele Hwnd (HwndVisual) 505. Tabelul de mai jos descrie 23 metodele model ale unui vizual de desenare:
public class DrawingVisual: Visual { public DrawingVisual ();
public IDrawingContext Open (); public IDrawingContext Append ();
}
Un DrawingVisual este un recipient pentru conținut grafic (de exemplu, linii, text, imagini și așa mai departe). De remarcat faptul că este posibil să se adauge un Visual într-un 33 DrawingVisual, dar la unele implementări, acest lucru nu este permis. DrawingVisual-ul 502 include o metodă de deschidere (Open), care returnează un IdrawingContext care poate fi 35 utilizat pentru a popula DrawingVisual-ul, de exemplu, cu alte vizuale și cu primitive de desenare, așa cum este descris mai jos. La o implementare, pentru diverse motive, descrise, 37 de asemenea, mai jos, un DrawingVisual poate fi deschis numai o dată, pentru a popula contextul lui de desenare; cu alte cuvinte, un astfel de DrawingVisual este invariabil. 39
După ce a fost populat DrawingVisual-ul, acesta este închis, utilizând o metodă Close (închide), de exemplu pe contextul de desenare. De notat faptul că un apel Open (deschide) 41 poate șterge orice conținut (copiii) al unui vizual, totuși la o implementare alternativă, este prevăzută o metodă Append (anexează), pentru a deschide un vizual curent, într-o manieră 43 care se anexează la acest vizual. Cu alte cuvinte, un apel de OpenForAppend (deschide pentru anexare) lucrează la fel ca Open, cu excepția faptului că, respectiv, conținutul curent 45 al lui DrawingVisual nu este șters la deschidere.
RO 123609 Β1
Ceea ce urmează este un exemplu al felului cum un context de desenare este utilizat pentru a popula un vizual:
ContainerVisual cv1 = new ContainerVisual ();
DrawingVisual dv1 = new DrawingVisual ();
/ / Deschide un context de desenare
Contextul II va fi închis în mod automat atunci când //se iese din blocul de utilizare.
Acesta va înlocui / / de asemenea orice conținut care ar putea deja //să fie în dv1.
using (IDrawingContext dc = dv1.Open()) {
dc. DrawLine (new Pen (Brushes. Blue), new Point(...), new Point(...));
} // Adaugă dv1 la colecția copil din cv1 cv1. Children. Add (dv1);
// Adaugă un alt vizual arbitrar la cv1 cv1. Children. Add (someOtherVisual);
/ / Crează un alt DrawingVisual
DrawingVisual dv2 = new DrawingVisual ();
using (IDrawingContext dc = dv2. Open()) {
/ / Aceasta setează un nou sistem de coordonate / / unde orice lucru este de două ori mai mare dv. PushTransform (new Scale (2.0, 2.0));
/ / Această linie este desenată în noul scalat / / sistem de coordonate.
dc. DrawLine (new Pen (Brushes.Red), new Point (...), new Point (...));
/ / Aceasta revine la sistemul de coordonate inițial.
dv. PopTransform ();
dc.DrawLine (new Pen (Brushes.Green), new Point (...), new Point (...));
} // Adaugă dv2 la colecția copil din cv1;
cv1. Children. Add (dv2);
în general, un ValidationVisual (vizual de validare) 503 este în mod conceptual similar cu un DrawingVisual, cu excepția faptului că ValidationVisual-ul este populat atunci când sistemul cere ca acesta să fie completat, în locul faptului că, respectiv, codul de program cere să-l populeze. De exemplu, așa după cum este descris în cererea de brevet de invenție US 2003/0076329, motorul 214, de compoziție și de animație de nivel ridicat (fig. 2), poate
RO 123609 Β1 invalida datele grafului scenic, deoarece sunt necesare resursele, cum ar fi atunci când o 1 porțiune din graful de decor nu este vizibilă. De exemplu, dacă unele porțiuni sunt defilate în afara display-ului, sunt decupate, și așa mai departe. Dacă mai târziu, sunt necesare datele 3 invalidate ale grafului scenic, codul de program 202, apelat, va fi rechemat pentru a redesena (a valida) porțiunea invalidată din graful scenic. în acest sens, un scenariu tipic de utilizare este 5 cel pentru un cod de program, pentru a sub-clasa ValidationVisual-ul și pentru a trece peste metoda de OnValidate. Când sistemul apelează metoda de OnValidate, este introdus un 7 context de desenare, iar programul care utilizează contextul de desenare, repopulează ValidationVisual-ul. 9
Exemplul de mai jos arată o cale pentru a implementa un singur vizual de validare (ValidationVisual), de exemplu, unul care desenează o linie cu anumită culoare. Culoarea liniei 11 poate fi modificată prin apelarea lui SetColor (setează culoarea). Pentru a forța actualizarea ValidationVisual-ului, SetColor-ul apelează pe Invalidate (invalidează), pentru a forța 13 subsistemul de grafică să revalideze ValidationVisual-ul:
public class MyValidationVisual : ValidationVisual {
public override void Onvalidate (IDrawingContext dc) {
dc. DrawLine (m_color, ...),;
} public void SetColor (Color newColor) {
m_color = color;
Invalidate (); / / Forțează o redesenare a unui ValidationVisual / / pentru a reflecta schimbarea de culoare.
} private Color m_color }
Acest exemplu arată cum să se utilizeze ValidationVisual-ul:
MyValidationVisual myVV = new MyValidationVisual ();
container. Children. Add (myVV);
myVV. SetColor (new Color (...));
Fig. 4 prezintă un graf scenic 400, ca un exemplu la care ContainerVisual-ele și 41 DrawingVisual-ele sunt specificate într-un graf scenic și au asociate date sub formă de primitive de desenare, de exemplu, în conformitate cu contextele de desenare. 43 ContainerVisual-ul este un recipient pentru Visual-e, iarContainerVisual-ele pot fi incluse unul în altul. Copiii unui ContainerVisual pot fi manevrați cu un VisualCollection (colecție 45 de vizuale), returnat dintr-o proprietate Children (copii) a VisualContainer-ului. Ordinea
RO 123609 Β1
Visual-elor din VisualCollection determină în ce ordine sunt remise Visual-ele, adică Visual-ele sunt remise de la cel mai jos index la cel mai ridicat index, din spate în față (ordinea de pictare). De exemplu, cu ajutorul parametrilor specifici, împreună cu trei vizuale de desenare reprezentând dreptunghiuri roșii, verzi și albastre, aflați în mod ierarhic sub un vizual de recipient, următorul cod ar rezulta din desenarea celor trei dreptunghiuri (translatare spre dreapta și în jos), un dreptunghi roșu în spate, un dreptunghi verde în mijloc și un dreptunghi albastru în față:
VisualCollection vc = m_cv. Children;
vc. Add (new vc. Add (new vc. Add (new
DrawingVisual (
DrawingVisual (
DrawingVisual ( for (int i = 0; i < vc. Count; i++)
DrawingVisual v = (DrawingVisual) (vc[ i ]);
v.Transform = Transform.CreateTranslation (i IDrawingContext dc = v.Open (); dc.DrawRectangle ( new Brush (colors [ i ]), nuli, new Point2D (0, 0), new Point2D (100.0f, 100.0f));
v. Close (dc);
20.Of, i * 20f);
Așa cum este reprezentat în fig. 5, un alt tip de obiect vizual este un SurfaceVisual (vizual de suprafață) 504. în general, așa după cum este reprezentat în fig. 3, un obiect 315 al SurfaceVisual-ului completează o suprafață din memorie (bitmap) 322, pe care codul de program 202 (fig. 2) îl poate accesa. Codul 202 de program al clientului poate alimenta propria ei memorie de suprafață sau acesta poate cere ca memoria să fie alocată de către obiectul de suprafață.
Codul de program 202 are opțiunea de a deschide un SurfaceVisual și de a obține un context de desenare 323, în care codul de program 202 poate să scrie datele 324 de pixeli sau ceva asemănător și să pună în mod direct acești pixeli pe suprafață. Acest lucru este reprezentat în fig. 3, de către linia întreruptă dintre obiectul de suprafață 322, contextul de desenare 323 (prezentat ca o căsuță cu linii întrerupte, pentru a reprezenta natura lui temporară) și datele pixeli 324.
Codul de program 202 are și o opțiune de a crea un administrator 330, al vizualului de suprafață și de a asocia un subgraf 332, al vizualului, cu SurfaceVisual-ul 315. Această opțiune este reprezentată în fig. 3, prin linia întreruptă dintre obiectul de suprafață 322 și managerul 330, al vizualului de suprafață. De remarcat faptul că subgraful 332, al vizualului, poate, de asemenea, să încadreze alte vizuale de suprafață, după cum se arată, de asemenea, în fig. 3. Managerul 330, al vizualului de suprafață (prezentat, de asemenea, drept un tip de alte obiecte din setul 620, al fig. 6) parcurge subgraful 332, al vizualului, pentru a actualiza bitmap-ul 322 al lui SurfaceVisual. în continuare, este de notat faptul că această parcurgere
RO 123609 Β1 este planificată de către dispecerul 308, iar pentru eficiență, poate fi oprită pentru a controla cât 1 de des este actualizat acest bitmap 322. Managerul 330, al vizualului de suprafață, nu trebuie să parcurgă subgraful 322, al vizualului, de fiecare dată și/sau la aceeași viteză cu care 3 managerul 302, al vizualului de nivel de vârf, parcurge restul din graful scenic.
Ținând seama de suprafețe, așa după cum sunt descrise mai departe, în legătură cu 5 fig. 9A - 9C, în general, modelul de grafică de față permite, în felul acesta, combinarea unui set de vizuale la o suprafață permite remiterea de mod-imediat a primitivelor de vectori și de bitmap 7 într-o suprafață, permite combinarea unei suprafețe pe desktop sau pe o altă suprafață, și permite controlarea suprafeței, dintr-o listă de suprafețe, care este utilizată pentru a se combina 9 sau pentru a desena în interiorul ei. O listă de suprafețe este definită ca o colecție de una sau mai multe suprafețe (adică cadre/memorii tampon) de memorie fizică (de sistem sau video), 11 utilizate pentru a stoca combinații de vizuale sau de desene grafice, sau ambele. Una dintre suprafețele din lista de suprafețe poate fi setată ca un buffer (memorie tampon) curent din 13 spate, unde este efectuată desenarea și/sau combinarea, iar una dintre suprafețele din lista de suprafețe este setată ca un buffer primar curent sau ca buffer frontal, care este utilizat pentru 15 a se combina cu o altă țintă de remitere.
Suprafețele pot fi utilizate pe mai multe căi. Cu titlu de exemplu, fig. 9A prezintă corn- 17 binarea la o suprafață. în fig. 9A, un obiect 900, al managerului de vizuale de suprafață, conectează o listă 902, de suprafețe, drept o țintă de remitere pentru un arbore 904, de vizuale. Pe 19 durata fiecărui ciclu de combinare, vizualele sunt combinate pe suprafața listei de suprafețe, care servește în mod curent drept buffer activ din spate, pentru lista de suprafețe. Suprafața, 21 ce este combinată la acestea, poate include o suprafață deținută de către client/motorul 214, de combinare de nivel ridicat (fig. 2), pentru scenariile de combinare în timpul procesului, poate 23 include o suprafață deținută de către motorul 218, de combinare de nivel scăzut, pentru scenariile unde clientul nu are nevoie de biți, dar motorul 218, de combinare de nivel scăzut, 25 are nevoie de acestea, pentru a combina suprafața de pe o altă țintă de remitere sau de pe o suprafață de proces în cruce, pentru scenarii unde clientul are nevoie de acces la biții de 27 suprafață, însă motorul 218, de combinare de nivel scăzut, are nevoie și de suprafața pentru altă unitate de combinare. 29
Combinarea este controlată de către un serviciu de temporizare, care este atașat la VisualManager (managerul de vizuale). Un exemplu de serviciu de temporizare este un mod 31 manual, care ar trebui utilizat ca în exemplul de mai jos:
// creează un serviciu manual de temporizare și atașează un manager de vizuale TimingService timingService = new ManualTimingService(visualManager);
/ / combină arborele de vizuale la bufferul curent din spate al suprafeței VisualManager. Render ();
foreach (Tick tick in timingService) {
/ / avansează buffer-ul din spate la următorul cadru al suprafeței surfaceList. NextFrame ();
/ / avansează durata arborelui de vizuale timingService. Tick (tick);
/ / combină arborele de vizuale la buffer-ul curent din spate al suprafeței VisualManager. Render ();
}
RO 123609 Β1
Altă cale de a utiliza o suprafață este cea cu remitere de mod-imediat la o suprafață, printr-un context. Atașarea unei liste de suprafețe la un vizual (un vizual de suprafață) permite remiterea de mod-imediat la suprafața din lista de suprafețe, care servește în mod curent drept buffer activ din spate, pentru lista de suprafețe. Această remitere este efectuată prin obținerea unui context de desenare de la vizualul de suprafață și prin executarea comenzilor de desenare pe acest context, așa după cum este descris mai sus. De remarcat că obținerea unui context de desenare blochează suprafața, astfel că alte operații de combinare nu pot fi efectuate asupra lui. Fiecare comandă de desenare este executată imediat, iar vectorii și alte suprafețe pot fi desenate (amestecate) pe suprafață. Totuși, alte vizuale nu pot fi desenate pe suprafață, dar în schimb, pot fi combinate pe suprafață prin asocierea acesteia cu un manager de vizuale, așa după cum a fost descris anterior (de exemplu, în fig. 9A).
/ / atașează o listă de suprafețe la un vizual
SurfaceVisual surfaceVisual = new SurfaceVisual (surfaceList);
// validează remiterea de mod-imediat (și blochează) la suprafața buffer-ului din spate
BaseDrawingContext dc = surfaceVisual. Open ();
// desenează o linie (imediat) la buffer-ul curent din spate al suprafeței dc. DrawLine (pen, startPoint, endPoint);
/ / deblochează suprafața - am făcut-o cu remiterea de mod-imediat surfaceVisual. Close (dc);
O altă utilizare pentru suprafețe este atunci când se combină o suprafață cu o altă țintă de remitere. în acest sens, odată ce lista de suprafețe este atașată la un vizual de suprafață, atunci suprafața poate fi atașată în arborele de vizuale, ca un nod, iar suprafața din lista de suprafețe, care servește în mod curent drept buffer primar sau frontal, poate fi combinată la o altă suprafață sau la desktop. Acest lucru este ilustrat în fig. 9B și în exemplul de mai jos:
/ / atașează o listă de suprafețe la un vizual SurfaceVisual surfaceVisual = new SurfaceVisual (surfaceList);
// Adaugă surfaceVisual-ul la un arbore de vizuale, pentru combinarea cu o / / altă țintă de remitere rootVisual. Add (surfaceVisual);
Compunerea directă la/de la o suprafață este reprezentată în fig. 9C, unde posibilitățile descrise mai sus sunt combinate astfel că, respectiv, combinarea la suprafața buffer-ului din spate, a unei liste de suprafețe și combinarea de la suprafața buffer-ului din față, a unei liste de suprafețe (de exemplu, la desktop) se întâmplă în mod simultan. De remarcat faptul că, pentru a elimina efectul video nedorit, cunoscut ca tearing (rupere a imaginilor), lista de suprafețe trebuie să aibă cel puțin două suprafețe, o suprafață a buffer-ului din față și una a buffer-ului din spate. O suprafață utilizată ca în fig. 9C este deținută după cum se pare de către motorul 218, de nivel scăzut, sau este o suprafață de procese în cruce, pentru a face ca, respectiv, combinarea din motorul 218, de nivel scăzut, să se execute mai bine.
RO 123609 Β1
Suprafețele sunt construite ca obiecte independente, așa după cum se arată din 1 exemplele de mai jos ale constructorilor:
public class Surface {
/ / creează și alocă o suprafață goală fără date inițiale public Surface (int width, int height, int dpi,
PixelFormat pixelFormat,
SurfaceFlags flags) / / creează o suprafață, utilizând memoria furnizată public Surface (int width, int height, int dpi,
PixelFormat pixelFormat,
IntPtr pixels, // memorie administrată pentru suprafață
Int stride) / / creează dintr-o sursă (adică Clone - clonă) public Surface (Surface sourceSurface, SurfaceFlags flags) // Creează (Create) din File (fișier) sau din URL public Surface (String filename,
SurfaceFlags flags) / / Creează din Stream (lanț) public Surface (System. IO. Stream stream, SurfaceFlags flags) // Creează din HBITMAP (care nu poate fi selectat într-un HDC) public Surface (HBITMAP hbitmap, HPALETTE hPalette) // Creează din HICON public Surface (HICON hicon) // proprietăți de tipul read-only (numai citire) public Int Width {get; } public Int Height {get; } public Int Dpi {get; } public PixelFormat Format {get; } public int Stride {get; } public IntPtr Buffer {get; } }
RO 123609 Β1 public class SurfaceList {
/ / Creează o listă de suprafețe goale (fără date inițiale ).
public SurfaceList (int width, int height, int dpi,
PixelFormat pixelFormat, int numSurfaces,
SurfaceFlags flags) / / Creează o SurfaceList (listă de suprafețe) care utilizează suprafețele // specificate // Toate suprafețele trebuie să aibă proprietăți identice (w, h, // dpi, etc.).
public SurfaceList (Surface [ ] surfaces) / / modifică buffer-ul din față cu primul la rând buffer din spate public Flip() / / avansează buffer-ul din spate la următoarea suprafață public Next () public int FrontBufferlndex {get; set;} public int BackBufferlndex {get; set;} public Surface GetFrontBuffer () public Surface GetBackBuffer () public Surface GetSurface (int surfacelndex)
J
Odată construită, o suprafață și/sau o listă de suprafețe pot fi atașate la un obiect al vizualului de suprafață sau la un obiect manager de vizuale.
/ / Creează un vizual de suprafață public SurfaceDrawingVisual (Surface surface) public SurfaceDrawingVisual (SurfaceList SurfaceList) / / Creează un manager de vizuale împreună cu o țintă de remitere suprafață public VisualManager (Surface surface) public VisualManager (SurfaceList SurfaceList) în plus, o suprafață poate obține date de la un decodor și/sau poate trimite datele acesteia la un codor, pentru înscrierea unui format specific de fișier. Suprafețele pot, de asemenea, să recepționeze/trimită date de la /la interfețele de efect. O suprafață poate fi construită pentru orice format de pixeli, din setul complet al tipurilor suportate de formate de
RO 123609 Β1 suprafață. Totuși, pot fi făcute unele reglaje la formatul specificat de pixeli, de exemplu, dacă 1 formatul specificat de pixeli este mai mic de 32 de biți per pixel, atunci formatul va fi avansat la de biți per pixel. Ori de câte ori biții sunt ceruți de la o suprafață din formatul original, supra- 3 fața va fi copiată la un buffer al formatului cerut al pixelilor, ce utilizează un filtru de conversie al formatului. 5 întorcându-ne la fig. 5, deja un alt vizual este un HwndVisual 505, care poziționează un HWnd copil din Win 32, în graful scenic. într-un mod și mai particular, programele lăsate 7 moștenire, încă vor mai lucra prin metoda WM_PAINT (sau asemănătoare), care desenează pe un HWnd copil (sau ceva asemănător), pe baza tehnologiei anterioare de grafică. Pentru a 9 sprijini astfel de programe din noul model de procesare a graficii, HwndVisual permite Hwnd-ului să fie conținut într-un graf scenic și să fie deplasat de îndată ce este repoziționat 11 vizualul părinte, așa după cum este reprezentat în fig. 10A. Ca un rezultat al limitărilor cu Hwnd-urile existente, totuși atunci când sunt remise, un Hwnd copil poate să fie numai în partea 13 de sus a altor ferestre și nu poate fi rotit sau scalat la fel ca alte vizuale descrise mai sus. Este posibilă o decupare, așa după cum este reprezentată în fig. 10B, unde linia întreruptă indică 15 dreptunghiul afișat al HWnd-ului, ce este decupat pe durata mișcării relative, ținând seama de vizualul părinte al său. 17
Alte tipuri de vizuale 506 sunt, de asemenea, realizabile, iar modelul obiect prezent este extensibil, pentru a permite altora să fie dezvoltate. De exemplu, așa după cum este reprezentat 19 în fig. 11, un vizual stratificat 1110 permite unui dezvoltator de aplicații să controleze separat informațiile dintr-un vizual, prin șiruri multiple de date, asigurând o mai fină granularitate a 21 comenzii, privitoare la vizualele ce au un singur șir de date. De remarcat faptul că granularitatea similară a comenzii poate fi realizată prin a avea vizuale tip copil separate (de exemplu, arbore) 23 sub un singur vizual părinte, totuși acest lucru necesită faptul că, respectiv, codul de program lucrează cu vizuale multiple, care este mai complicat decât a lucra cu un simplu vizual stratificat, 25 ce are indexuri la straturile multiple.
Cu titlul de exemplu, în fig. 11, datele de fundal, datele de conținut, precum și datele 27 de bordură sunt conținute într-un singur vizual stratificat, însă sunt separate unele de altele, așa după cum sunt indexate, de către o valoare a stratului, de exemplu, 0, 1, sau, respectiv, 29 2.Straturile pot fi inserate, inclusiv atașate la fiecare capăt, și/sau șterse, împreună cu comanda de stratificare (de exemplu, de la stânga la dreapta, așa după cum se arată), definind o 31 comandă implicită, Z, pentru display. De notat faptul că, pentru securitate, conținutul copilului precum și alte date dintr-un vizual stratificat nu pot fi enumerate. 33
Alte tipuri de vizuale includ vizuale recipient și vizuale redirecționate HWnd copil, la care conținutul este desenat la un bitmap și încorporat într-un vizual de suprafață. Vizualele tridi- 35 mensionale permit o conectare între lumile bidimensionale și cele tridimensionale, de exemplu, o vizualizare ca la o cameră video este posibilă printr-un vizual bidimensional, ce are o vedere 37 într-o lume tridimensională.
Multe dintre obiectele resurse sunt invariabile odată create, adică odată ce acestea sunt 39 create, acestea nu pot fi modificate din diverse metode, ce includ elemente simplificatoare de pătrundere, împiedicând falsificarea de către alții și simplificând interacțiunea cu elemente și 41 cu API-uri. De remarcat faptul că acest lucru simplifică, în general, sistemul. Ar fi de notat, totuși, faptul că este posibil să ai un sistem unde astfel de obiecte sunt schimbătoare, însă, de 43 exemplu, ar necesita administrarea unui graf de subordonare. De exemplu, în timp ce este posibil de avut un sistem unde astfel de obiecte sunt schimbătoare, dacă codul de program a 45 modificat setarea clip-ului la un Visual, vizualul ar avea nevoie să fie re-remis, în felul acesta, necesitând un mecanism de notificare / înregistrare, de exemplu, dacă un nou clip este 47 asignat la un vizual, vizualul se înregistrează el însuși cu clip-ul, pentru notificări (cum ar fi o notificare de modificare clip). Astfel într-o implementare, în scopuri de simplificare, obiectele 49 resursă sunt invariabile.
RO 123609 Β1
Aceste obiecte resursă pot fi definite, împreună cu un constructor, care este o cale directă, generică, de a crea un obiect sau de a utiliza un obiect creator însoțitor, așa cum este descris mai jos. De pildă, pentru a crea un SolidColorBrush (pensulă pentru culori uniforme), (obiectele de tip pensulă sunt descrise mai jos), poate fi utilizat un constructor:
Brush MyBrush = new SolidColorBrush (Colors. Red);
Utilizatorul poate, de asemenea, să utilizeze membrii statici de pe clasa de pensule (Brush), pentru a obține un set de culori predefinite.
Deoarece obiectele invariabile nu pot fi modificate, pentru a modifica efectiv un obiect, utilizatorul are nevoie să creeze un nou obiect și să îl înlocuiască pe cel vechi cu acesta. în acest scop, multe dintre obiectele resursă din sistem pot utiliza secvența de creatori, la care obiectele invariabile sunt create împreună cu o clasă de creatori, care este o clasă însoțitoare, care este schimbătoare. Utilizatorul creează un obiect neschimbător, pentru a oglindi setul de parametrii de pe builder (creator), creează un nou builder pentru acest obiect și îl inițializează de la obiectul invariabil. Utilizatorul modifică apoi builder-ul atât cât este necesar. Odată efectuat acest lucru, utilizatorul poate construi un nou obiect, prin modificarea builder-ului și prin reutilizarea lui pentru a crea un alt obiect invariabil. De observat faptul că este de dorit a avea obiecte invariabile, împreună cu proprietățile de setare, iaraceste obiecte neschimbătoare nu pot fi modificate, ci numai înlocuite prin derularea unui eveniment cu modificare de proprietăți.
în felul acesta, în locul utilizării unui constructor, pentru a crea un SolidColorBrush, așa după cum este descris mai sus, poate fi utilizat un SolidColorBrushBuilder (creator de pensule de culori uniforme):
SolidColorBrushBuilder MyBuilder = new
SolidColorBrushBuilder ();
MyBuilder. Color = Colors. Red;
Brush MyBrush = MyBuilder. ToBrush ();
Majoritatea obiectelor, care iau valori statice, pot, de asemenea, să ia obiecte de animație. De pildă, pe DrawingContext (contextul de desenare), există o corecție la DrawCircle (desenează cerc), care ia un PointAnimationBase (indică baza de animație), pentru centrul cercului. în această privință, utilizatorul poate să specifice informația bogată de animație, la nivelul primitivei. Pentru obiectele resursă, acolo există o colecție de animație, în afară de valoarea de bază. Acestea sunt combinate, la care, dacă utilizatorul dorește să animeze exemplul de mai sus, utilizatorul ar putea să specifice următoarea linie exemplu, înainte ca pensula să fie creată:
MyBuilder. ColorAnimations. Add (new ColorAnimation (...));
De remarcat că un obiect cu parametrii de animație este încă invariabil, deoarece parametrii lui de animație sunt statici. Totuși, atunci când graful scenic este procesat (de exemplu, parcurs), semnificația parametrilor de animație se modifică cu timpul, dând impresia de date animate nestatice.
Așa după cum este descris mai sus, vizualele pot fi determinate prin popularea contextelor lor de desenare cu diverse primitive de desenare, incluzând geometria (Geometry), datele de imagine (ImageData) și datele video (VideoData). în plus, există un set de resurse și de clase, care sunt distribuite prin acestă întreagă stivă. Acesta include trăgătoare (Pens), pensule (Brushes), geometrie (Geometry), transformate (Transforms) și efecte (Effects). Contextul IDrawingContext etalează un set de operații de desenare, care poate fi utilizat pentru a popula un DrawingVisual (vizual de desenare), un ValidationVisual (vizual de validare). Contextul ISurfaceDrawingContext, o interfață de bază pentru desenarea Idrawing,
RO 123609 Β1 a contextului, poate fi utilizat pentru a popula un SurfaceVisual (vizual de suprafață). Cu alte 1 cuvinte, contextul de desenare expune un set de operații de desenare; pentru fiecare operație de desenare există două metode, una care ia constantele drept argumente și una care ia 3 animatorii drept argumente.
Metoda DrawLine (trasează linii) trasează o linie cu trăgătorul specific, de la punctul 5 de start la punctul de sfârșit.
public void DrawLine (Pen pen, Point start, Point end); public void DrawLine (
Pen pen,
PointAnimationBase start,
PointAnimationBase end);
public void DrawRoundedRectangle (
Brush brush,
Pen pen,
Point topLeft,
Size size, float radius);
public void DrawRoundedRectangle (
Brush brush,
Pen pen,
PointAnimationBase topLeft, SizeAnimationBase size, NumberAnimationBase radius); public void DrawRoundedRectangle (
Brush brush,
Pen pen,
Point topLeft,
Point bottomRight, float rx, float ry);
public void DrawRoundedRectangle (
Brush brush,
Pen pen,
PointAnimationBase topLeft,
PointAnimationBase bottomRight, NumberAnimationBase radiusX, NumberAnimationBase radiusY)
Metoda DrawRoundedRectangle (desenează dreptunghi cu colțuri rotunjite) dese- 13 nează un dreptunghi cu colțuri rotunjite, cu pensula și penița specificate; pensula și penița pot fi zero. 15
Metoda DrawGeometry (desenează geometrie) desenează o traiectorie cu ajutorul pensulei și a peniței specificate; pensula și penița pot fi zero. 45 public void DrawGeometry ( Brush brush, Pen pen, Geometry geometry);
RO 123609 Β1
Metoda DrawRectangle (desenează dreptunghi) desenează un dreptunghi cu ajutorul pensulei și a peniței specificate; pensula și penița pot fi zero.
public void DrawRectangle ( Brush brush, Pen pen, Point topLeft, Size size);
public void DrawRectangle (
Brush brush,
Pen pen,
Point AnimationBase topLeft, SizeAnimationBase size);
Metoda DrawSurface (desenează suprafețe) desenează o suprafață.
public void DrawSurface ( Surface surface, Point topLeft, Size size, float opacity);
public void DrawSurface ( Surface image, PointAnimationBase topLeft, SizeAnimationBase size, NumberAnimationBase opacity);
Geometria este un tip de clasă (fig. 12) care definește un schelet de grafică vectorială, fără mișcarea condeiului sau fără umplere. Fiecare obiect de geometrie este de o formă simplă (LineGeometrygeometria liniei, EllipseGeometry- geometria elipsei, RectangleGeometry - geometria dreptunghiului), cu o singură formă complexă (PathGeometry - geometria traiectoriei), sau cu o listă GeometryList (listă de geometrie) de astfel de forme geometrice, specificate, împreună cu o operație de combinare (de exemplu, reuniune, intersecție, și așa mai departe). Aceste obiecte formează o ierarhie de clasă, așa după cum este reprezentată în fig. 12.
Așa cum este reprezentată în fig. 13, geometria traiectoriei (PathGeometry) este o colecție de obiecte figure (figură). Fiecare dintre obiectele figure sunt compuse, pe rând, dintr-unul sau mai multe obiecte Segment, care definește în realitate forma figurii. O figură (figure) este o subsecțiune a unei geometrii (Geometry) care definește o colecție de segmente. Această colecție de segmente este o singură serie conectată de obiecte bidimensionale ale lui Segment, figure poate fi fie de o formă închisă cu o arie definită, fie doar o serie conectată de segmente (Segments) care definesc o curbă, dar nu au o suprafață închisă.
Suprafața umplută din PathGeometry (geometria traiectoriei) este definită prin preluarea figurilor (figures) conținute, care au proprietatea lor de umplere (Filled) setată pe true (adevărat) și care aplică un FilIMode (mod de umplere), pentru a determina aria închisă. De remarcat faptul că enumerarea din FilIMode specifică modul cum suprafețele de intersecție ale obiectelor figure (figură) conținute într-o Geometry (geometrie) sunt combinate, pentru a forma aria rezultată a lui Geometry. O regulă de tip alternează (Alternate) determină dacă
RO 123609 Β1 un punct este înăuntrul prelatei, prin desenarea, într-un mod conceptual, a unei raze de la acel 1 punct la infinit, în orice direcție, iar apoi, prin examinarea locurilor unde un segment al conformației traversează raza. Prin startarea cu o numărare de la zero și prin adăugarea de unu 3 la fiecare moment în care un Segment traversează raza de la stânga la dreapta și prin scăderea cu unu, de fiecare dată, când un segment al traiectoriei traversează raza de la dreapta 5 la stânga, după numărarea traversărilor, dacă rezultatul este zero, atunci punctul este în afara traiectoriei. Altfel, acesta este înăuntrul traiectoriei. O regulă întortocheată determină dacă un 7 punct de pe acoperământ este înăuntru și lucrează prin desenarea, în mod conceptual, a unei raze, de la acest punct la infinit, pe orice direcție, și prin numărarea numărului de segmente 9 (Segments) ale căii, de la conformația dată pe care o traversează raza. Dacă acest număr este impar, punctul este în interior, dacă este par, punctul este în afară. 11
Așa după cum este reprezentat în fig. 14, dacă este desenată geometria (de exemplu, un dreptunghi), poate fi specificată o pensulă sau un trăgător, așa cum este descris mai jos. în 13 plus, obiectul trăgător are, de asemenea, un obiect pensulă. Un obiect pensulă definește felul cum să se umple grafic un plan, și există o ierarhie de clasă a obiectelor pensule. Acesta este 15 reprezentat în fig. 14, prin dreptunghiul plin, 1402, care rezultă atunci când este procesat vizualul ce include instrucțiunile și parametrii pentru dreptunghi și pentru pensulă. 17
Așa după cum este descris mai jos, unele tipuri de pensule (Brushes, cum ar fi gradienții și grilele de nouă linii) se dimensionează ele însele. Atunci când se folosesc, dimensi- 19 unea pentru aceste pensule este obținută dintr-o căsuță de delimitare, de exemplu, dacă GradientUnits/DestinationUnits (unități de gradient/destinație) pentru pensulă (Brush) este 21 setat la ObjectBoundingBox (căsuță de delimitare a obiectului), este folosită căsuța de delimitare a primitivei care este desenată. Dacă aceste proprietăți sunt setate la UserSpaceOnUse 23 (spațiu utilizator în uz), atunci este folosit spațiul de coordonate.
Un obiect de tip Pen (trăgător) așteaptă un Brush (pensulă), împreună cu proprietățile 25 pentru Width (lățime), LineJoin (alăturare la linie), LineCap (cap de linie), MiterLimit (limită de îmbinare în unghi ascuțit), DashArray (rețea de hașurare) și DashOffset (deviație de 27 hașurare), așa cum sunt reprezentate în exemplul de mai jos:
public enum System. Windows. Media. PenLineCap {
Butt, Round, Square }
public enum System. Windows. Media. PenLineJoin {
Miter, Round, Bevel }
public class System. Windows. Media. Pen {
// Constructori public Pen (Color color, float width); public Pen (Brush brush, float width);
// Proprietăți public float [ ] DashArray { get; }
RO 123609 Β1 public float DashOffset { get; } public FloatAnimationCollection DashOffsetAnimations { get; } public PenLineCap LineCap { get; } public PenLineJoin LineJoin { get; } public float MiterLimit { get; } public FloatAnimationCollection MiterLimitAnimations { get; } public float Opacity { get; } public FloatAnimationCollection OpacityAnimations { get; } public Brush Brush { get; } public float Width { get; } public FloatAnimationCollection WidthAnimations { get; } }
public sealed class System. Windows. Media. PenBuilder: Builder { // Câmpuri // Constructori public PenBuilder ();
public PenBuilder (Color color);
public PenBuilder (Brush brush);
public PenBuilder (Pen pen);
// Proprietăți public float [ ] DashArray { get; set; } public float DashOffset { get; set; } public FloatAnimationCollectionBuilder DashOffsetAnimations { get; } public PenLineCap LineCap { get; set; } public PenLineJoin LineJoin { get; set; } public float MiterLimit { get; set; } public FloatAnimationCollectionBuilder MiterLimitAnimations { get; } public float Opacity { get; set; } public FloatAnimationCollectionBuilder OpacityAnimations { get; }
RO 123609 Β1 public Brush Brush { get; set; } public float Width { get; set; } public FloatAnimationCollectionBuilder WidthAnimations { get; } / / Metode public Pen ToPen ();
}
Așa cum este menționat mai sus, modelul obiect al graficii din prezenta invenție include un model obiect Brush (pensulă), care este, în general, direcționat către conceptul de 11 acoperire a unui plan cu pixeli. Exemple de tipuri de pensule sunt reprezentate în cadrul ierarhiei din fig. 15, iar sub o clasă de bază Brush (de pensule), se includ SolidColorBrush 13 (pensula cu culoare uniformă), GradientBrush (pensula gradient), ImageBrush (pensula imagine), VisualBrush (pensula vizual) (care poate fi atribuită ca un Visual (vizual)), precum 15 și NineGridBrush (pensulă cu grilă de nouă linii). GradientBrush include obiectele de LinearGradient (gradient liniar) și de RadialGradient (gradient radial). Așa cum este descris 17 mai sus, obiectele de tip Brush sunt invariabile.
public abstract class System. Windows. Media. Brush { float Opacity { get; }
FloatAnimationCollection OpacityAnimations { get; } }
Cele ce urmează, prezintă o clasă exemplu de BrushBuilder (creator de pensule): 25 public abstract class System. Windows. Media. BrushBuilder: Builder { public virtual Brush ToBrush();
public override seled object Createinstance ();
{ return ToBrush ();
} float Opacity { get; set; }
FloatAnimationCollectionBuilder OpacityAnimations { get; } }
De notat faptul că obiectele de tip Brush (pensulă) pot recunoaște felul cum acestea se raportează la sistemul de coordonate, atunci când sunt utilizate, și/sau felul cum acestea se 39 raportează la căsuța de delimitare a formei pe care acestea le utilizează. în general, informații, cum ar fi dimensiunea, pot fi deduse din obiectul pe care îl desenează pensula. într-un mod mai 41 particular, multe tipuri de pensule utilizează un sistem de coordonate pentru specificarea câtorva dintre parametrii acestora. Acest sistem de coordonate poate fie să fie definit drept 43
RO 123609 Β1 relativ la simpla căsuță de delimitare a formei la care este aplicată pensula, fie poate fi relativ la spațiul de coordonate care este activ la momentul când este utilizată pensula. Acestea sunt cunoscute, drept mod de ObjectBoundingBox (căsuță de delimitare obiect) și, respectiv, de UserSpaceOnUse (spațiu utilizator de utilizare).
public enum System. Windows. Media. BrushMappingMode {
ObjectBoundingBox,
UserSpaceOnUse, }
Un obiect de tip SolidColorBrush (pensulă cu culori uniforme) umple, planul identificat, cu o culoare uniformă. Dacă există o componentă alfa a culorii, aceasta este combinată într-un mod multiplicativ, împreună cu atributul de opacitate corespunzător, din clasa de bază Brush. Cele ce urmează, prezintă un obiect exemplu de SolidColorBrush (pensulă cu culoare uniformă):
public sealed class System. Windows. Media. SolidColorBrush : Brush {
// Constructori public SolidColorBrush (); // inițializează pe negru public SolidColorBrush (Color color);
public SolidColorBrush (System. Windows. Media. Animation. ColorComposer colorComposer);
// Proprietăți public Color Color { get; } public lEnumerator ColorAnimations { get; } }
public class System. Windows. Media. SolidColorBrushBuilder: BrushBuilder {
// Constructori public SolidColorBrushBuilder ();
public SolidColorBrushBuilder (Color color);
public SolidColorBrushBuilder (SolidColorBrush scp);
// Proprietăți public Color Color { get; set; } public AnimationList ColorAnimations { get; } / / Metode public virtual Brush ToBrush();
}
RO 123609 Β1
Obiectele GradientBrush (pensulă gradient) sau simplii gradienți asigură o umplere în 1 gradient și sunt desenate prin specificarea unui set de opriri ale gradientului, care specifică culorile de-a lungul câtorva feluri de progresii. Gradientul este desenat prin efectuarea de 3 interpolări liniare între capetele gradientului dintr-un spațiu color RGB cu factorul de contrast de 2,2; interpolarea prin alți factori de contrast sau alte spații color (HSB, CMYK și așa mai 5 departe) este, de asemenea, o alternativă realizabilă. Două tipuri de obiecte în gradient includ gradienți liniari și radiali. 7 în general, gradienții sunt compuși dintr-o listă de capete de gradient. Fiecare dintre aceste capete de gradient conține o culoare (împreună cu valoarea alfa inclusă) și un offset 9 (abatere de culoare). Dacă nu este specificat niciun capăt al gradientului, pensula este desenată ca ceva negru, uniform transparent, deoarece nu a fost specificată deloc nicio 11 pensulă. Dacă este specificat numai un capăt al gradientului, pensula este desenată cu o culoare uniformă, având una dintre culorile specificate. Asemănător cu alte clase de resurse, 13 clasa cu capete de gradient (exemplul din tabelul de mai jos) este invariabilă.
public class System. Windows. Media. GradientStop {
public GradientStop (Color color, float offset);
public Color Color { get; } public AnimationEnumerator ColorAnimations { get; } public float Offset { get; } public AnimationEnumerator OffsetAnimations { get; } }
public class System. Windows. Media. GradientStopBuilder: Builder { public GradientStopBuilder ();
public GradientStopBuilder (Color color, float offset);
public Color Color { get; set; } public AnimationList ColorAnimations { get; } public float Offset { get; set; } public AnimationList OffsetAnimations { get; } public GradientStop ToGradientStop ();
}
Există, de asemenea, o clasă de colecții, așa după cum se pornește din următorul exemplu: 39 public class System. Windows. Media. GradientStopCollection : ICollection { public GradientStopCollection (); // golește lista public GradientStopCollection (GradientStop [ ] GradientStops);
public GradientStopCollection (ICollection c);
RO 123609 Β1 // lEnumerable public lEnumerator GetEnumerator ();
/ / ICollection public void CopyTo(Array array, int index);
public bool ICollection. IsSynchronized { get { return false; } } public int Count { get; } public object ICollection. SyncRoot { get; } // Funcții suplimentare public GradientStop this [int index] { get; } public bool Contains (GradientStop value);
public int IndexOf (GradientStop value); // returnează pe primul public int IndexOf (GradientStop value, int startlndex);
public int IndexOf (GradientStop value, int startlndex, int count); public int LastlndexOf (GradientStop value);
public int LastlndexOf (GradientStop value, int startlndex);
public int LastlndexOf (GradientStop value, int startlndex, int count); public GradientStopCollection GetRange (int index, int count);
} public class System. Windows. Media. GradientStopCollectionBuilder: Builder, llist {
public GradientStopCollectionBuilder ();
public GradientStopCollectionBuilder (GradientStop [] GradientStops); public GradientStopCollectionBuilder (ICollection c);
public GradientStopCollectionBuilder (GradientStopCollection GradientStops);
// lEnumerable public lEnumerator GetEnumerator ();
/ / ICollection public void CopyTo (Array array, int index);
public bool ICollection. IsSynchronized { get { return false; } } public int Count { get; } public object ICollection. SyncRoot { get; } // llist public bool IsFixedSize { get { return false; } } public bool IsReadOnly { get { return false; } } public object llist. this [int index] { get; set; } public int llist. Add (object value);
public void Clear ();
public bool llist. Contains (object value);
public int llist. IndexOf (object value); // returnează pe primul
RO 123609 Β1 public void llist. Insert (int index, object value);
public void llist. Remove (object value); // transferă-l pe primul public void RemoveAt (int index);
// Funcții suplimentare public public public public public public public public public public public public public public public public GradientStopCollectionBuilder GetRange (int index, int count);
GradientStop this [int index] { get; set; } int Add (GradientStop value); bool Contains (GradientStop value); int int int int int int void void void void void void
IndexOf (GradientStop value); // re turnează pe primul IndexOf (GradientStop value, int startlndex);
IndexOf (GradientStop value, int startlndex, int count); LastlndexOf (GradientStop value);
LastlndexOf (GradientStop value, int startlndex);
LastlndexOf (GradientStop value, int startlndex, int count); Insert (int index, GradientStop value);
Remove (GradientStop value); // transferă-l pe primul AddRange (ICollection c);
InsertRange (int index, ICollection c); RemoveRange (int index, int count); SetRange (int index, ICollection c);
/ / Capacity (Capacitatea) este o sugestie. Se va lansa o excepție dacăaceasta este setată la o valoare mai mică decât Count.
public int Capacity { get; set; }
Așa după cum este reprezentată în tabelul de mai jos, metoda GradientSpreadMethod 37 (metodă de distribuire a gradientului) specifică felul cum gradientul trebuie să fie desenat în afara vectorului sau a spațiului specificat. Există trei valori, inclusiv pad-ul (umplutura), la care 39 culorile din margine (prima și ultima) sunt folosite pentru a umple spațiul rămas, pentru a oglindi, în care dintre capete sunt, în mod repetat, reproduse în ordine inversă, pentru a umple spațiul 41 și pentru a repeta, în care dintre capete, sunt repetate în ordine până ce spațiul este umplut:
// Supraîncărcările lui Builder (creatorului) public override object Build (); public override void ResetBuilder ();
public override void SetBuilder (Object example);
public GradientStopCollection ToGradientStopCollection (); } public enum System. Windows. Media. GradientSpreadMethod {
Pad,
Reflect,
Repeat }
RO 123609 Β1
Fig. 16 arată exemple ale metodei GradientSpreadMethod. Fiecare conformație are un gradient liniar, mergând de la alb la gri. Linia uniformă reprezintă vectorul gradient.
LinearGradient (gradientul liniar) specifică o pensulă de gradient liniar de-a lungul unui vector. Capetele individuale specifică capete de culori de-a lungul acestui vector. Un exemplu este prezentat în tabelul de mai jos:
public class System. Windows. Media. LinearGradient: GradientBrush {
/ / Pune un gradient cu două culori precum și un vector gradient / / specificați pentru a umple obiectul la care este folosit gradientul.
/ / Acest lucru înseamnă ObjectBoundingBox (căsuță de delimitare a / / obiectului) pentru proprietatea de GradientUnits (unități de gradient) public LinearGradient(Color colori, Color color2, float angle);
public BrushMappingMode GradientUnits { get; } public Transform GradientTransform { get; } public GradientSpreadMethod SpreadMethod { get; } / / Vector de gradient public PointVectorStart { get; } public PointAnimationCollection VectorStartAnimations { get; } public Point VectorEnd { get; } public PointAnimationCollection VectorEndAnimations { get; } / / Capetele gradientului public GradientStopCollection GradientStops { get; } }
public class System. Windows. Media. LinearGradientBuilder:
GradientBrushBuilder {
public LinearGradientBuilder ();
public LinearGradientBuilder(Color colori, Color color2, float angle); public LinearGradientBuilder (LinearGradient Ig);
// GradientUnits(unități de gradient): Referința este ObjectBoundingBox public BrushMappingMode GradientUnits { get; set; } // GadientTransform(transformata gradientului); Referința este identiatea public Transform GradientTransform { get; set; } // SpreadMethod (metoda de distribuire): Referința este Pad public GradientSpreadMethod SpreadMethod { get; set; } / / Vector de gradient // Vector de referință este (0,0) - (1,0) public Point VectorStart { get; set; } public PointAnimationCollectionBuilder VectorStartAnimations { get;
set; }
RO 123609 Β1 public PointVectorEnd { get; set; } public PointAnimationCollectionBuilder VectorEndAnimations { get; set; } / / Capetele gradientului public void AddStop (Color color, float offset);
public GradientStopCollectionBuilder GradientStops { get; set; } }
RadialGradient-ul (gradientul radial) este similar la modelul de programare referitor la gradientul liniar. Totuși, având în vedere că gradientul liniar are un punct de început și unul de 11 sfârșit, pentru a defini vectorul gradient, gradientul radial are un cerc, împreună cu un punct focal, pentru a defini comportarea de gradient. Cercul definește punctul de sfârșit al gradientului, 13 adică un capăt al gradientului la 1,0 definește culoarea la cerc. Punctul focal definește centrul gradientului. Un capăt al gradientului la 0,0 definește culoarea la punctul focal. 15
Fig. 17 prezintă un gradient radial, care este de la alb la gri. Cercul din exterior reprezintă cercul gradient, în timp ce punctul desemnează punctul focal. Acest gradient exemplu 17 are SpreadMethod-ul (metoda de distribuire) setat la Pad:
public class System. Windows. Media. RadialGradient: GradientBrush { / / Pune un gradient cu două culori.
/ / Acest lucru înseamnă ObjectBoundingBox pentru proprietatea de // GradientUnits împreună cu un centru la (0.5, 0.5)
II o rază a cercului de 0.5 și un punct focal la (0.5, 0.5) public RadialGradient (Color colori, Color color2);
public BrushMappingMode GradientUnits { get; } public Transform GradientTransform { get; } public GradientSpreadMethod SpreadMethod { get; } / / Definire gradient public Point CircleCenter { get; } public PointAnimationCollection CircleCenterAnimations { get; } public float CircleRadius { get; } public FloatAnimationCollection CircleRadiusAnimations { get; } public Point Focus { get; } public PointAnimationCollection FocusAnimations { get; } / / Capetele gradientului public GradientStopCollection GradientStops { get; } }
public class System. Windows. Media. RadialGradientBuilder:
GradientBrushBuilder {
public RadialGradientBuilder ();
RO 123609 Β1 public RadialGradient (Color colori, Color color2);
public RadialGradientBuilder (RadialGradient rg);
// GradientUnits: Referința este ObjectBoundingBox public BrushMappingMode GradientUnits { get; set; } // GradientTransform: Referința este identitatea public Transform GradientTransform { get; set; } // SpreadMethod: Referința este Pad public GradientSpreadMethod SpreadMethod { get; set; } // Definire gradient public Point CircleCenter { get; set; } // Referința: (0.5,0.5) public PointAnimationCollectionBuilder CircleCenterAnimations { get; set; } public float CircleRadius { get; set; } // Referința: 0.5 public FloatAnimationCollectionBuilder CircleRadiusAnimations { get; set; } public Point Focus { get; set; } // Referința: (0.5,0.5) public PointAnimationCollectionBuilder FocusAnimations { get; set; } / / Capetele gradientului public void AddStop (Color color, float offset);
public GradientStopCollectionBuilder GradientStops { get; set; } }
Un alt obiect pensulă, reprezentat în fig. 15, este un obiect Visual Brush (pensulă de vizual). în mod conceptual, VisuaIBrush asigură o cale de a avea un vizual desenat într-o manieră repetată, învelit ca țiglele, drept umplutură. Obiectele de pictare a vizualelor prevăd, de asemenea, un mecanism pentru limbajul de marcare, pentru a lucra direct, cu stratul API, la un nivel de resurse, așa cum este descris mai jos. Un exemplu de astfel de umplere este reprezentat, în fig. 14, de către pensula de vizuale, ce completează un vizual (precum și orice vizual copil), care specifică o singură conformație circulară 1420, cu această conformație circulară umplând un dreptunghi 1422. Astfel, obiectul VisuaIBrush poate completa un vizual, pentru a defini felul cum va fi desenată această pensulă, care introduce un tip de multiple utilizări, pentru vizuale. în acest mod, un program poate utiliza o grafică metafile arbitrară, pentru a umple o suprafață, cu o pensulă sau cu un trăgător. Deoarece aceasta este o formă comprimată, pentru stocarea și utilizarea graficii arbitrare, aceasta deservește o resursă a graficii. Cele ce urmează, prezintă un obiect exemplu de VisuaIBrush (pensulă pentru vizuale):
public class System. Windows. Media. VisuaIBrush: Brush { public VisuaIBrush (Visual v);
public BrushMappingMode DestinationUnits { get; } public BrushMappingMode ContentUnits { get; } public Transform Transform { get; }
RO 123609 Β1 public Rect ViewBox { get; } public Stretch Stretch { get; } public HorizontalAlign HorizontalAlign { get; } public VerticalAlign VerticalAlign { get; } public Point Origin { get; } public PointAnimationCollection OriginAnimations { get; } public Size Size { get; } public SizeAnimationCollection SizeAnimations { get; } / / Visual (vizualul) public Visual Visual { get; } }
public class System. Windows. Media. VisuaIBrushBuilder: BrushBuilder {
public VisuaIBrushBuilder ();
public VisuaIBrushBuilder (Visual v);
public VisuaIBrushBuilder (VisuaIBrush vb);
/ / DestinationUnits(unități destinație):Referința este ObjectBoundingBox public BrushMappingMode DestinationUnits { get; set; } // ContentUnits (unități conținut): Referința este ObjectBoundingBox public BrushMappingMode ContentUnits { get; set; } // Transformata: Referința este Identity (identitatea) public Transform Transform { get; set; } / / ViewBox: Referința este (0, 0, 0, 0) - nesetat și ignorat public Rect ViewBox { get; set; } // Stretch (extindere): Referința este None (nici una) - și este ignorată / / deoarece ViewBox-ul nu este setat public Stretch Stretch { get; set; } / / HorizontalAlign (aliniere orizontală): Referința este Center (centru) și / / este ignorată public HorizontalAlign HorizontalAlign { get; set; } // VerticalAlign(aliniere verticală):Referința este Center și este ignorată public VerticalAlign VerticalAlign { get; set; } // Origin (originea): Referința este (0, 0) public Point Origin { get; set; } public PointAnimationCollectionBuilder OriginAnimations { get; set; } // Size (dimensiunea): Referința este (1, 1) public Size Size { get; set; } public SizeAnimationCollectionBuilder SizeAnimations { get; set; } // Visual (vizualul): Referința este zero -- nu este desenat nimic public Visual Visual { get; set; } }
RO 123609 Β1
Conținutul lui VisualBrush nu are nicio suprafață de separație intrinsecă și, efectiv, descrie un plan infinit. Acest conținut există în spațiul lui propriu de coordonate, iar spațiul, care este umplut de către VisuaIBrush, este spațiul local de coordonate la momentul aplicației. Spațiul de conținut este cartografiatîn spațiul local, pe baza proprietăților de ViewBox (căsuța de vizualizare), ViewPort (port de vizualizare), Alignments (alinieri) și de Stretch (extindere). ViewBox-ul este specificat în spațiul de conținut, iar acest dreptunghi este cartografiat în dreptunghiul ViewPort (așa cum este specificat prin proprietățile de Origin (origine) și de Size (dimensiune)).
ViewPort-ul definește locația unde conținutul va fi eventual desenat, creând învelișul de țigle de bază, pentru acest Brush (pensulă). Dacă valoarea lui DestinationUnits (unități destinație) este UserSpaceOnUse (spațiu utilizator în uz), proprietățile de Origin (origine) și de Size (dimensiune) sunt considerate a fi în spațiul local la momentul aplicației. Dacă în locul valorii lui DestinationUnits, este ObjectBoundingBox (căsuța de delimitare obiect), atunci un Origin și un Size sunt considerate a fi în spațiul de coordonate, unde 0,0 este colțul de sus/stânga al căsuței de delimitare a obiectului ce este trasat cu pensula, iar 1,1 este colțul de jos/dreapta al aceleiași căsuțe. De exemplu, să considerăm un RectangleGeometry (geometrie a dreptunghiului) ce este umplut, care este desenat de la 100,100 la 200,200. într-un astfel de exemplu, dacă DestinationUnits este UserSpaceOnUse, un Origin de 100, 100 și un Size de 100, 100 ar descrie întreaga suprafață a conținutului. Dacă DestinationUnits este ObjectBoundingBox, un Origin de 0, 0 și un Size de 1, 1 ar descrie întreaga suprafață a conținutului. Dacă Size este gol, acest Brush nu remite nimic.
ViewBox-ul este specificat în spațiul conținutului. Acest dreptunghi este transformat, pentru a se potrivi în interiorul ViewPort-ului, așa cum este determinat de către proprietățile de Alignment și de proprietatea de Stretch. Dacă în Stretch nu este nimic, atunci nu este aplicată nicio scalare la conținut. Dacă Stretch este Fiii (umplut), atunci ViewBox-ul este scalat în mod independent atât pe X, cât și pe Y, pentru a fi de aceeași dimensiune cu ViewPort-ul. Dacă Stretch este Uniform sau UniformToFill (uniform de umplut), logica este asemănătoare, însă dimensiunile X și Y sunt scalate uniform, păstrând raportul aspectelor conținutului. Dacă Stretch este Uniform, ViewBox-ul este scalat, pentru a avea dimensiunea mai comprimată, egală cu mărimea ViewPort-ului. Dacă Stretch este UniformToFill, ViewBox-ul este scalat, pentru a avea dimensiunea mai puțin comprimată, egală cu mărimea ViewPort-ului. Cu alte cuvinte, atât Uniform-ul, cât și UniformToFill, păstrează raportul aspectelor, însăUniform-ul garantează că întregul ViewBox este în interiorul ViewPort-ului (porțiuni virtual de părăsire a ViewPort-ului neacoperit de ViewBox), iar UniformToFill garantează că întregul ViewPort este umplut de către ViewBox (porțiuni virtual cauzatoare ale ViewBox-ului de a fi în afara ViewPort-ului). Dacă ViewBox-ul este gol, atunci nu se va folosi Stretch-ul. De remarcat că aliniamentul încă va apărea, iar acesta va poziționa ViewBox-ul point (punct).
Fig. 18 asigură reprezentări ale unei singure plăci 1800, de grafică, remisă, împreună cu diverse setări de extindere, incluzând o placă 800, atunci când extinderea este setată la none (nimic). Placa 1802 este o reprezentare atunci când extinderea este setată la Uniform, placa 1804, atunci când extinderea este setată la UniformToFill, iar placa 1806 atunci când extinderea este setată la Fiii.
Odată ce ViewPort-ul este determinat (pe baza lui DestinationUnits), iar dimensiunea lui ViewBox este determinată (pe baza lui Stretch), ViewBox -ul are nevoie să fie poziționat în interiorul lui ViewPort. Dacă ViewBox-ul este de aceeași mărime ca ViewPort-ul (dacă Stretch este Fiii sau dacă se întâmplă doar să apară împreună cu una dintre celelalte trei valori ale lui Stretch), atunci ViewBox-ul este poziționat la Origin, astfel ca să fie identic cu
RO 123609 Β1
ViewPort-ul. Altfel, se iau în considerare HorizontalAlignment (alinierea orizontală) și 1 VerticalAlignment (alinierea verticală). Pe baza acestor proprietăți, ViewBox-ul este aliniat la ambele dimensiuni X și Y. Dacă HorizontalAlignment este Left (la stânga), atunci marginea 3 stângă a lui ViewBox va fi poziționată la marginea Left ( stângă) a lui ViewPort. Dacă acesta este Center (centru), atunci centrul lui ViewBox va fi poziționat la centrul lui 5 ViewPort, iar dacă este Right (dreapta), atunci se vor întâlni marginile din dreapta. Procesul este repetat pentru dimensiunea Y. 7
Dacă ViewBox-ul este (0, 0, 0, 0), acesta este considerat nesetat, drept care ContentUnits (unitățile conținutului) sunt luate în considerare. Dacă ContentUnits sunt 9 UserSpaceOnUse, nu apare nicio scalare sau niciun decalaj, iar conținutul este desenat în ViewPort, fără nicio transformată. Dacă ContentUnits sunt ObjectBoundingBox, atunci ori- 11 ginea conținutului este aliniată, împreună cu ViewPort Origin (originea portului de vizualizare), iar conținutul este scalat de către lățimea si înălțimea căsuței de delimitare a obiectului. 13
Atunci când se umple un spațiu cu un VisualBrush, conținutul este cartografiat în ViewPort, ca mai sus, și este decupat la ViewPort. Acesta formează placa de bază pentru 15 umplere, iar ceea ce rămâne din spațiu este umplut pe baza lui TileMode (modul de acoperire cu țiglă) al lui Brush. în concluzie, dacă este setat, este aplicată transformata lui Brush- 17 aceasta apare după toate celelalte cartografieri, scalari, decalări etc.
Enumerarea din TileMode (modul tip placă țiglă) este utilizată pentru a descrie dacă 19 și cum este umplut un spațiu de către Brush-ul lui. Un Brush, care poate fi acoperit cu plăci, are definit un dreptunghi tip placă, iar această placă are o locație de bază în interiorul spațiului 21 ce este umplut. Restul spațiului este umplut pe baza valorii lui TileMode. Fig. 19 asigură o reprezentare a graficii exemplu, împreună cu diverse setări ale lui TileMode, ce includ None 23 1900, Tile 1092, FlipX 1904, FlipY 1906 și FlipXY 1908. Placa cea mai de sus-stânga din diversele grafici exemplu conține placa de bază. 25
Fig. 20 reprezintă un proces pentru generarea pixelilor pentru această pensulă. De notat faptul că logica descrisă în fig. 20 este numai o singură cale posibilă pentru a implementa 27 logica, iar aceasta ar trebui înțeleasă prin faptul că și celelalte căi, incluzând căi mai eficiente, sunt realizabile. De exemplu, există probabil căi mai eficiente de procesare a datelor, de pildă, 29 astfel încât conținutul să nu fie desenat pentru fiecare repetiție, cu țigla (placa) desenată și memorată ascuns. Totuși, fig. 20 asigură o prezentare directă. 31 în general, de fiecare dată când este desenat conținutul secvenței, un nou sistem de coordonate este creat. Originea și decalajul fiecărei repetiții este specificat de către proprietățile 33 Origin și Size, așa cum sunt filtrate prin proprietățile lui DestinationUnits si ale lui Transform. 35
Un reper de coordonate este fixat pe baza proprietății lui DestinationUnits. în acest scop, dacă la pasul 2000, proprietatea lui DestinationUnits este UserSpaceOnUse, reperul 37 curent de coordonate, din momentul când a fost folosită pensula, este reperul de startare de coordonate, prin pasul 2002. Dacă, în schimb, la pasul 2004, proprietatea este 39
ObjectBoundingBox, se folosește căsuța de delimitare a geometriei la care această pensulă este aplicată, așa cum este reprezentată de pasul 2004, pentru a seta un nou reper de41 coordonate, astfel încât colțul din stânga sus al căsuței de delimitare se poziționează pe (0, 0), iar colțul de jos stânga al căsuței de delimitare se poziționează pe (1,1). în fiecare dintre cazuri,43 la pasul 2006, proprietatea Transform este aplicată la acest reper de coordonate, care în fond definește un grilaj.45
Fig. 21 reprezintă un Grid (grilaj) al lui VisualBrush, care este definit pentru țiglele dintr-un VisualBrush. Primul cerc este un simplu grilaj, iar al doilea are un Transform47 (transformată) cu un Skew (oblicitate) pe direcția x, de 47.
RO 123609 Β1
La pasul 2008, vizualul este desenat în fiecare celulă a grilajului, așa cum este reprezentat în fig. 22, unde vizualul desenează datele specifice. Dacă la pasul 2010, este specificat un ViewBox, Visual-ul este introdus în celula grilei, așa cum este specificat de către atributele de ViewBox, Stretch, HorizontalAlign și de VerticalAlign, prin pasul 2012. Proprietățile de DestinationUnits și de Transform sunt utilizate pentru a aplica transformata corectă, astfel ca vizualul să se alipească în căsuța grilei.
Dacă nu este specificat niciun ViewBox, atunci este stabilit un nou sistem de coordonate, pentru desenarea conținutului de la pasul 2014.
Reperul de coordonate este setat astfel că originea lui este la punctul Origin, pentru această celulă particulară a grilei ce este desenată.
La pasul 2018, este aplicat un clip (decupare), pe baza proprietății Size, astfel că această țiglă nu se va desena în afara delimitărilor celulei. Origin și Size sunt modificate în mod adecvat, pe baza proprietății lui DestinationUnits.
Sistemul de coordonate este apoi modificat, pe baza proprietății lui SourceUnits (unități sursă). în acest scop, dacă la pasul 2020, proprietatea lui SourceUnits este ObjectBoundingBox, transformata specifică de scalare este aplicată la pasul 2026, altfel aceasta este UserSpaceOnUse și nu este aplicată nicio nouă transformată. Proprietatea lui Transform este aplicată la pasul 2024, iar conținutul este desenat la pasul 2026.
De notat faptul că, dacă orice parte a mărimii este zero, nu este desenat nimic, iar dacă Stretch este None, transformata pentru ViewBox este fixată, astfel că o unitate din noul reper de coordonate este egală cu o unitate din vechiul reper de coordonate. Transformata devine în mod esențial un offset (decalaj), bazat pe atributele de aliniere și pe mărimea lui ViewBox. Așa după cum este descris mai sus, la pașii 2010 și 2012, Stretch-ul și proprietățile de aliniere se aplică numai dacă este specificat un ViewBox. ViewBox-ul specifică un nou sistem de coordonate pentru conținut, iar Stretch-ul ajută pentru a specifica felul cum acest conținut este indicat în ViewBox. Opțiunile de aliniere aliniază ViewBox-ul, nu conținutul. Astfel, de exemplu, dacă viewbox-ul (căsuța de vizualizare) este setat la 0 0 10 10 și este desenat ceva la -10, -10 și aliniat la colțul din stânga sus, acest lucru va fi desprins în afară.
întorcându-ne la fig. 15, pensula imagine poate fi gândită ca un caz special de VisualBrush. Chiar dacă un program poate crea un vizual, poate pune o imagine în acesta și poate să-l atașeze la Visual Brush, API-ul care să facă acest lucru ar fi incomod. Deoarece nu există niciun reper indispensabil de coordonate ale conținutului, nu se mai aplică deloc elementele proprietăților ViewBox-ul și ale lui ContentUnits.
public class System. Windows. Media. ImageBrush: Brush { public ImageBrush (ImageData image);
public BrushMappingMode DestinationUnits { get; } public Transform Transform { get; } public Stretch Stretch { get; } public HorizontalAlign HorizontalAlign { get; } public VerticalAlign VerticalAlign { get; } public Point Origin { get; }
RO 123609 Β1 public PointAnimationCollection OriginAnimations { get; } public Size Size { get; } public SizeAnimationCollection SizeAnimations { get; } public ImageData ImageData { get; } }
public class System. Windows. Media. ImageBrushBuilder: BrushBuilder {
public ImageBrushBuilder ();
public ImageBrushBuilder (ImageData image);
public ImageBrushBuilder (ImageBrush ib);
// DestinationUnits: Referința este ObjectBoundingBox public BrushMappingMode DestinationUnits { get; set; } // Transform (transformata): Referința este identitatea public Transform Transform { get; set; } // Stretch (extindere): Referința este None public Stretch Stretch { get; set; } // HorizontalAlign: Referința este Center public HorizontalAlign HorizontalAlign { get; set; } // VerticalAlign: Referința este Center public VerticalAlign VerticalAlign { get; set; } / / Origin: Referința este (0, 0) public Point Origin { get; set; } public PointAnimationCollectionBuilder OriginAnimations { get; set; } // Size: Referința este (1,1) public Size Size { get; set; } public SizeAnimationCollectionBuilder SizeAnimations { get; set; } // ImageData (date imagine): Referința este zero - nu este desenat nimic public ImageData ImageData { get; set; } }
NineGridBrush (pensula cu nouă grile) este foarte asemănătoare cu lmageBrush-ul 39 (pensula pentru imagini), exceptând faptul că imaginea este deformată ca mărime. în esență, NineGridBrush poate fi gândit ca un tip clientelă al lui Stretch, la care anumite părți din 41 imagini se extind, în timp ce altele (de exemplu, bordurile) nu se extind. în felul acesta, în tirnp ce Size-ul (mărimea) imaginii din ImageBrush va determina o scală simplă, 43
NineGridBrush-ul va produce o scală neuniformă, până la mărimea dorită. Unitățile pentru zonele nescalate sunt unități ale utilizatorului, atunci când este aplicată pensula, care înseamnă 45 că ContentsUnits (unități ale conținutului) (dacă acesta există pentru NineGridBrush) ar fi setat la UserUnitsOnUse. Proprietatea Transform a lui Brush poate fi utilizată în mod 47 efectiv. De remarcat că elementele bordurii se numără de la marginea imaginii.
RO 123609 Β1 în chip de exemplu, fig. 23 reprezintă o imagine cu nouă grile, ce este lărgită de la primul moment, 2302, la al doilea moment, 2304, cu patru tipuri de zone. Așa cum este reprezentat în fig. 23, pentru a menține aceeași bordură, zonele marcate cu a se extind orizontal, zonele marcate cu b se extind vertical, zonele marcate cu c se extind orizontal și vertical, iar zonele marcate cu d nu se modifică în mărime.
public class System. Windows. Media. NineGridBrush: Brush {
public NineGridBrush (ImageData image, int LeftBorder, int RightBorder, int TopBorder, int BottomBorder);
public BrushMappingMode DestinationUnits { get; } public Transform Transform { get; } public Point Origin { get; } public PointAnimationCollection OriginAnimations { get; } public Size Size { get; } public SizeAnimationCollection SizeAnimations { get; } public int LeftBorder { get; } public int RightBorder { get; } public int TopBorder { get; } public int BottomBorder { get; } public ImageData ImageData { get; } }
public class System. Windows. Media. NineGridBrushBuilder: BrushBuilder { public NineGridBrushBuilder ();
public NineGridBrushBuilder (ImageData image, int LeftBorder, int RightBorder, int TopBorder, int BottomBorder);
public NineGridBrushBuilder (NineGridBrush ngb);
// DestinationUnits: Referința este ObjectBoundingBox public BrushMappingMode DestinationUnits { get; set; } // Transform: Referința este identitatea public Transform Transform { get; set; } / / Origin: Referința este (0, 0) public Point Origin { get; set; } public PointAnimationCollectionBuilder OriginAnimations { get;
set; }
RO 123609 Β1 // Size: Referința este (1,1) public Size Size { get; set; } public SizeAnimationCollectionBuilder SizeAnimations { get; set; } // public public public public *Border (bordură): referința la 0 int int int int
LeftBorder { get; set; } RightBorder { get; set; } TopBorder { get; set; } BottomBorder { get; set; } // ImageData: Referința este zero - nu este desenat nimic public ImageData ImageData { get; set; } }
Așa cum este descris la modul general, modelul obiect de grafică al prezentei invenții include un model obiect Transform (transformată), care include tipurile de transformate reprezentate în ierarhia din fig. 24, sub o clasă de bază a Transform-ului. Aceste tipuri diferite de componente, care întregesc o transformată, pot include TransformList (lista de transformate), TranslateTransform (transformata de translație), RotateTransform (transformata de rotație), ScaleTransform (transformata de scală), SkewTransform (transformata de oblicitate) și MatrixTransform (transformata matricială). Proprietățile individuale pot fi animate, de exemplu, un dezvoltator de programe poate să animeze proprietatea de Angle (unghi) a unui RotateTransform.
Matricele pentru calculele 2D sunt reprezentate ca o matrice 3x3. Pentru transformatele necesare, numai șase valori sunt necesare în locul unei matrice complete de 3x3. Acestea sunt denumite și definite după cum urmează.
mOO m10 m20 mO1 m11 m21
Atunci când o matrice este multiplicată cu un punct, aceasta transformă acel punct din noul sistem de coordonate în precedentul sistem de coordonate:
mOO m01 0 [XnewCoordSys ynew CoordSys 1]. m10 m11 0 = [XoldCoordSys yold CoordSys 1] m20 m21 1
Transformatele pot fi incluse unele în altele, la orice nivel. Ori de câte ori o nouă transformată este aplicată, este același lucru cu post-multiplicarea acesteia la matricea curentă a transformatei:
m002 m012 0 m001 m011 [XnewCoordSyS ynew CoordSys1].m102 m112 0. m101 CoordSys 1] m 111 0 = [XoldCoordSys yold m202 m212 1 m201 m211
RO 123609 Β1
Majoritatea locurilor din API nu preiau în mod direct un Matrix (matrice), darîn schimb folosesc clasa lui Transform, care suportă animația.
public struct System. Windows. Media. Matrix { / / Construire și setare public Matrix (); // referințe la identitate public Matrix ( double mOO, double m01, double m10, double m11, double m20, double m21;
// Identity (identitate) public static readonly Matrix Identity; public void Setldentity ();
public bool Isldentity { get; } public static Matrix operator * (Matrix matrixl, Matrix matrix2); public static Point operator * (Matrix matrix, Point point);
/ / Aceste funcții reinițializează matricea curentă cu / / matricea specificată a transformatei.
public public public public public public public public public public public public void void void void void void void void void void void void
SetTranslation (double dx, double dy); SetTranslation (Size offset);
SetRotation (double angle); // grade
SetRotation (double angle, Point center); // grade SetRotationRadians (double angle);
SetRotationRadians (double angle, Point center); SetScaling (double SetScaling (double SetSkewX (double SetSkewY (double
SetSkewXRadians (double angle); SetSkewYRadians (double angle);
sx, double sx, double angle); // angle); // sy);
sy, Point center); grade grade / / Aceste funcții post-multiplică matricea curentă
II cu transformata specificată public void AppIyTranslation (double dx, double dy);
public void AppIyTranslation (Size offAply);
public void AppIyRotation (double angle); // grade public void AppIyRotation (double angle, Point center); // grade public void AppIyRotationRadian (double angle);
public void AppIyRotationRadian (double angle, Point center);
public void AppIyScaling (double sx, double sy);
RO 123609 Β1 public public public public public public void void void void void void
AppIyScaling (double sx, double sy, Point center); AppIySkewX (double angle); // grade AppIySkewY (double angle); // grade AppIySkewXRadians (double angle); AppIySkewYRadians (double angle);
AppIyMatrix (Matrix matrix);
// Material de inversiune public double Determinant { get; } public bool Islnvertible { get; } public void Invert (); // Lansează ArgumentException dacă este inversabilă (! Islnvertable) public static Matrix Invert (Matrix matrix);
// Elemente individuale public public public public public public
| double | M00 | { | get; | set; |
| double | M01 | { | get; | set; |
| double | M10 | { | get; | set; |
| double | M11 | { | get; | set; |
| double | M20 | { | get; | set; |
| double | M21 | { | get; | set; |
} } }
} }
} };
în conformitate cu un aspect al prezentei invenții, sunt prevăzute un limbaj de marcare și un model obiect al elementelor, pentru a permite programelor de utilizator, precum și 25 uneltelor, să interacționeze cu structura de date 216, a grafului scenic, fără a necesita cunoștințe specifice asupra detaliilor stratului API 212 (fig. 2). în general, este prevăzut un 27 limbaj de marcare pentru grafica vectorială, care cuprinde un format de interschimbare, împreună cu un format simplu de autorizare pe baza marcatorilor, pentru exprimarea graficii 29 vectoriale printr-un model obiect al elementelor. Prin acest limbaj, poate fi programată marcarea (de exemplu, HTML sau conținutul de tip XML). După aceea, pentru a construi un graf scenic, 31 marcarea este analizată gramatical și este tradusă în obiecte specifice ale stratului API vizual, care au fost descrise mai sus. La acest nivel mai ridicat de operare, sunt prevăzuți un arbore 33 de elemente, un sistem de proprietăți și un sistem de prezentatori, pentru a manevra mare parte din complexitate, făcând-o accesibilă pentru designerii de scenă, pentru a proiecta posibile 35 scene complexe.
în general, sistemul de grafică vectorială prevede, de regulă, un set de elemente de 37 conformație, precum și alte elemente, prevede o integrare cu un sistem general de proprietăți, prevede un sistem de grupare și de compoziție, precum și o aproximație bistratificată (nivel 39 element și nivel resursă), astfel că utilizatorul poate programa într-un mod care corespunde cu nevoile de flexibilitate și de performanță. în acord cu un aspect al prezentei invenții, modelul 41 obiect al elementelor care are de-a face cu grafica vectorială, se găsește în corelație cu modelul obiect al grafului scenic. Cu alte cuvinte, sistemul de grafică vectorială și stratul API de Visual 43 împart un set de resurse la nivelul modelului obiect al elementelor, de exemplu, obiectul Brush (pensulă) este folosit când se desenează la API-ul de Visual, iar acesta este, de asemenea, 45 tipul proprietății de completare pe Shape (conformație). Astfel, în afară de a avea elemente care se găsesc în corelație cu obiectele grafului scenic, limbajul de marcare împarte un număr 47 de resurse ale primitivelor (de exemplu, pensule, transformate, și așa mai departe), cu stratul Visual API. Sistemul de grafică vectorială expune și extinde de asemenea capacitățile de 49 animație ale stratului Visual API, care este împărțit în mare măsură între niveluri.
RO 123609 Β1 în plus, așa după cum este descris mai jos, sistemul de grafică vectorială se poate programa la diferite profiluri sau niveluri, ce includ un nivel de elemente și un nivel de resurse. La nivelul de elemente, fiecare dintre conformațiile de desenare este reprezentată ca un element, la același nivel ca și restul din elementele programabile dintr-o pagină/ecran. Aceasta înseamnă că respectivele conformații interacționează în întregime cu sistemul prezentator, cu evenimentele și cu proprietățile. La nivelul de resurse, sistemul de grafică vectorială funcționează într-un format pur de resurse, similar cu un metafile (meta-fișier) al graficii tradiționale.
Nivelul de resurse este eficient, dar are într-o măsură oarecare suport limitat pentru proprietățile de conectare în cascadă, pentru programabilitatea evenimentelor și a celei granulate fin. Proiectantul scenei are astfel abilitatea de a compara eficiența cu programabilitatea, atât cât este nevoie.
în acord cu un aspect al prezentei invenții, sistemul de grafică vectorială, la nivelul resurselor, se găsește, de asemenea, în corelație cu stratul API al vizualului, în care marcatorul de nivel al resurselor, dintr-o implementare, este exprimat ca un Visual Brush (pensulă pentru vizual). Dacă marcatorul de resurse este analizat gramatical, este creat un obiect vizual. Obiectul vizual este setat într-un VisualBrush care poate fi utilizat de către conformații, de către comenzi, precum și de alte elemente, la nivel de element.
Fig. 25 este o reprezentare a unei ierarhii 2500, a clasei de elemente. Clasele modelului obiect al limbajului de marcare, din invenția de față, sunt reprezentate prin căsuțe umbrite, și includ o clasă 2502, de conformații, o clasă 2504, de imagini, o clasă video 2506 și o clasă 2508, de prelate. Elementele clasei de conformații includ dreptunghiul 2510, poliIinia 2512, poligonul 2514, traiectoria 2516, linia 2518 și elipsa 2520. De remarcat că la unele implementări, un element cerc nu poate fi prezent ca fiind indicat de către căsuța 2522, cu linii întrerupte, din fig. 25, totuși pentru scopurile diverselor exemple de aici, va fi descris elementul cerc 2522. Fiecare element poate include sau poate fi asociat cu datele de umplere (proprietate), cu datele de mișcare a pensulei, cu datele de decupare, cu datele transformatei, cu datele efectului de filtru, precum și cu datele de mascare.
Așa după cum este descris mai jos, conformațiile corespund la geometria care este desenată cu proprietăți de prezentare moștenite și conectate în cascadă. Proprietățile de prezentare sunt folosite pentru a construi trăgătorul și pensula necesare pentru a desena figurile. într-o implementare, figurile sunt prezentatori compleți, la fel ca și alte elemente de comandă. Totuși, la alte implementări, poate fi prevăzută o clasă 2508, de prelate, ca un recipient pentru figuri, iar figurile pot fi desenate numai dacă se găsesc într-un element de acoperire. De exemplu, pentru a păstra ușor figurile, acestea nu au permisiunea de a avea atașați prezentatori. în schimb, prelata are un prezentator atașat și desenează figurile. Elementele prelatei sunt descrise mai jos, cu mai multe detalii.
Așa după cum a fost, de asemenea, descris mai jos, clasa de imagini este mai specifică decât o conformație, iar, de exemplu, poate include date de delimitare, care pot fi complexe. De exemplu, o bordură poate fi specificată ca o culoare în partea de sus, ca o culoare diferită pe părțile laterale, cu posibilitatea specificării diferitelor grosimi și a setării altor proprietăți. Poziția, rotația formei și scalarea pot fi setate pentru o imagine sau pentru un element similar, închis în căsuță, cum ar fi textul sau imaginea video. De notat faptul că elementele de imagine și cele video pot exista și pot fi prezentate în afara unui element de acoperire, și pot să succeadă și din BoxedElement (element închis într-o căsuță), de exemplu, pentru a obține fundalul, bordurile, precum și suportul de umplutură de la acest element.
RO 123609 Β1
Elementul video permite imaginii video (sau multimedia similară) de a fi redată în inte- 1 riorul unui element afișat. în această manieră, sistemul de grafică vectorială asigură o interfață de marcare la stratul API, care este fără îndoială consistentă în cadrul multimedia, incluzând 3 text, grafică 2D, grafică 3D, animație, video, imagini nemișcate, precum și audio. Aceasta permite designerilor să învețe să lucreze cu o media, pentru a integra mai ușor o altă media 5 în aplicații și documente. Sistemul de grafică vectorială dă, de asemenea, posibilitatea ca multimedia să fie animată în același mod ca și alte elemente, acordă din nou designerilor abilitatea 7 de a folosi multimedia, la fel ca alte elemente, fără a sacrifica încă unicitatea intrinsecă de memorie, a fiecărui tip individual din media. De exemplu, un designer poate utiliza aceeași 9 schemă de denumire pentru rotație, scalare, animație, desenare, compunere, precum și alte efecte, dintr-o parte în cealaltă a diferitelor tipuri de media, prin care designerii pot crea ușor 11 aplicații foarte bogate, tot atât de bine permițând unei implementări foarte eficiente de remitere și de compunere de a fi construită dedesubt. 13
Fig. 26 reprezintă o implementare la care codul de marcare 2602 este interpretat de către un analizor gramatical/traducător 2604. în general, analizorul gramatical/traducătorul 2604 15 adaugă elemente la un arbore de elemente/sistem de proprietăți 208 (reprezentate, de asemenea, în fig. 2) și atașază prezentatori la aceste elemente. Sistemul prezentator 210 preia 17 apoi arborele de elemente 210, împreună cu prezentatorii atașați, și traduce datele în obiecte și apelează stratul API al vizualului, 212. De remarcat că nu toate elementele sunt necesar a 19 fi traduse, ci numai acelea cu prezentatori atașați.
în general, un element este un obiect din stratul de elemente care participă la sistemul 21 de proprietăți, la sistemul de evenimente, precum și la cel de amplasare/prezentare. Analizorul gramatical găsește etichetele (tag-uri) și decide dacă aceste etichete ajută la definirea unui 23 element sau a unui obiect resursă. în cazul special al unui VisuaIBrush, aceleași etichete pot fi interpretate drept elemente sau, de asemenea, pot fi interpretate ca obiecte resurse, 25 depinzând de contextul unde apar aceste etichete, de exemplu, depinzând de faptul, dacă apar sau nu în sintaxa complexă de proprietăți. 27 în conformitate cu un aspect al prezentei invenții, limbajul de marcare asigură căi distincte de a descrie o resursă, ce include un singur format al șirului sau o notație complexă 29 a obiectelor. Pentru un format simplu al șirului, analizorul gramatical/traducătorul 2604 utilizează un convertor de tipuri, 2608, pentru conversia unei succesiuni într-un obiect API, specific al 31 vizualului. Cu titlu de exemplu, la următoarea linie a marcatorului, valoarea proprietății de Fiii (umplere) poate fi convertită la un obiect pensulă, cu ajutorul convertorului de tipuri, 2608: 33 <Circle CenterX=10 CenterY=10 Radius=5 Fill=Red />
____________________________________________________________________________________ 37
Așa după cum poate fi ușor apreciat, conversia unei astfel de linii, în linie a marcatorului 39 bazat pe etichete, este făcută împreună cu succesiuni simple de parametri, este făcută direct la obiectul pensulă și asigură o cale simplă pentru un proiectant al scenei de a adăuga o 41 conformație, precum și însușirile acesteia, la o scenă.
Totuși, există momente când atributul de umplere este prea complex, pentru a se insera 43 într-o singură succesiune. într-o astfel de situație, sintaxa complexă de proprietăți, care poate fi în linie în cadrul marcatorului, este folosită pentru a seta această proprietate. De exemplu, 45
RO 123609 Β1 următoarea sintaxă complexă de proprietăți umple un cerc mai degrabă cu un gradient decât cu o culoare uniformă, specificând culorile diferitelor capete ale gradientului (care pot fi în domeniul de la 0 la 1):
«Circle CenterX=10
CenterY=10
Radius=5>
<Circle. Fill>
<LinearGradient>
< GradientStop < GradientStop
Color=Red Offset=0/>
Color-'Blue Offset=0.33/>
«GradientStop Color-'Green Offset=0.66/>
«GradientStop Color=Red Offset=1.0/>
</LinearGradient>
«/Circle. Fill>
</Circle>
în plus, la a fi prezent în linie în cadrul marcatorului, un exemplu, de resursă, poate fi localizat în altă parte (cum ar fi în marcator sau într-un fișier, care pot fi locali sau pe o rețea aflată la distanță și care este descărcată în mod adecvat), și poate fi referit printr-un nume (de exemplu, un nume de text, un identificator de referință sau un altul corespunzător). în acest mod, un designer de scenă poate refolosi un element din arborele de elemente, de la un capăt la celălalt al unei scene, incluzând elementele descrise de către sintaxa complexă de proprietăți.
Analizorul gramatical manevrează marcatorul din sintaxa complexă de proprietăți, prin accesarea, atât cât este necesar, a convertorului de tipuri, 2608, și, de asemenea, prin combinarea parametrilor specifici la proprietățile obiectului, prin aceasta manevrând complexitatea pentru designerul de scenă. Astfel, analizorul gramatical nu numai fixează obiectele, ci și setează atributele asupra obiectelor. De notat că analizorul gramatical efectiv inițiază imediat un constructor să creeze obiectele, deoarece obiectele sunt invariabile.
Deoarece același model de remitere este împărțitîntre nivelul elementului și nivelul API, multe dintre obiecte sunt în fond aceleași. Acest lucru face analiza gramaticală/traducerea mult mai eficientă și permite, de asemenea, diferitelor tipuri de limbaje de programare (cum ar fi limbajele asemănătoare cu C#) abilitatea de a converti mai ușor dintr-o marcare în propria ei sintaxă și viceversa. De remarcat faptul că, așa cum este reprezentat în fig. 26, un alt astfel de limbaj de programare, 2610, poate adăuga elemente la arborele de elemente 208 sau poate să se interfațeze direct cu stratul API al vizualului, 212.
Așa cum este reprezentat și în fig. 26, precum și în conformitate cu un aspect al invenției de față, același marcator 2602 poate fi utilizat pentru a programa la un nivel element și la un nivel resursă. Așa cum este descris mai sus, nivelul element dă proiectantului de decor o programabilitate completă, o utilizare a sistemului de proprietăți care asigură succesiunea (de exemplu, trăsăturile asemănătoare cu un aspect de coală de hârtie), precum și o desfășurare a evenimentelor (de exemplu, prin care un element poate avea atașat un cod, pentru a-și schimba aspectul, poziția, ș.a.m.d., ca răspuns la un eveniment de intrare al utilizatorului). Totuși, prezenta invenție prevede, de asemenea, un mecanism la nivel de resursă, prin care designerii scenici potîn fond să scurtcircuiteze arborele de elemente și sistemul de prezentatori, și pot programa direct la stratul API al vizualului. Pentru multe tipuri de figuri statice, imagini și altele asemănătoare, unde nu sunt necesare trăsături la nivel de element, acest lucru asigură
RO 123609 Β1 o cale mai eficientă și mai ușoară, pentru a extrage obiectul potrivit. în acest scop, analizorul 1 gramatical recunoaște dacă este prezentă o umplere de tipul pensulă pentru vizuale și apelează direct stratul API 212, împreună cu datele 2612, ale nivelului resursă, pentru a crea 3 obiectul. Cu alte cuvinte, așa după cum este reprezentat în fig. 22, grafica vectorială a nivelului element obține analizarea gramaticală din elementele create, care au nevoie ulterioară de 5 traducere în obiecte, în timp ce grafica vectorială a nivelului resursă obține, într-un mod eficient, analizarea gramaticală și stocarea directă. 7
Cu titlu de exemplu, următoarea marcare este direct derivată din modelul obiect pentru obiectul LinearGradient (gradient liniar) și umple un cerc exterior cu un Visual Brush. 9 Conținutul acestui Visual Brush este definit de către marcarea interioară. De notat faptul că această sintaxă este în mod uzual folosită, pentru a exprima diferite pensule, transformate și 11 animații:
<Circle CenterX=10 CenterY=10 Radius=5> <Circle. Fill>
<VisualBrush xmlns-'..
<Circle <Circle <Circle <Circle
Fill=LemonChiffon/> </VisualBrush>
</Circle. Fill>
</Circle>
CenterX=0.5
CenterX=0.6
CenterX=0.7
CenterX=0.8 >
CenterY=0.5
CenterY=0.6
CenterY=0.7
CenterY=0.8
Radius=0.25
Radius=0.25
Radius=0.25
Radius=0.25
Fill=Blue/>
Fill=Green/> Fill=Red/>
De notat că, în timp ce aceste obiecte umplute cu pensula de vizual sunt stocate în mod 27 eficient, datele nivelului resursă (sau obiectele create prin aceasta) pot fi completate cu elemente și cu o porțiune din arborele de elemente, 208, așa cum este reprezentat la modul 29 general în fig. 26. în acest scop, aceste resurse ale pensulei de vizual pot fi denumite (de exemplu, cu un nume, o referire sau un alt identificator potrivit) și completate la fel ca și alte 31 resurse descrise cu ajutorul sintaxei complexe de proprietăți.
întorcându-ne la o explicare a prelatei, așa după cum este menționat mai sus într-o 33 implementare alternativă, conformațiile pot fi păstrate cu ușurință, și astfel se poate pretinde ca să fie conținute într-o prelată. La această implementare alternativă, dacă conținutul este remis, 35 acesta este remis la o prelată infinită, independentă de dispozitiv, care are un sistem de coordonate asociat. Elementul de acoperire poate astfel poziționa conținutul, în conformitate 37 cu coordonatele absolute. Elementul prelată poate, în mod opțional, să definească un viewport (port de vizualizare), care specifică decuparea, o transformată, un raport preferat al aspectelor 39 și o cale de cartografiere (map-are) a viewporf'-ului într-un domeniu părinte. Dacă nu este stabilit niciun viewport, elementul prelată poate specifica numai o grupare a primitivelor de 41 desenare și poate fixa o transformată, o opacitate, precum și alte atribute de compunere.
Ceea ce urmează este un exemplu de marcator pentru o prelată mostră: 43 <Canvas Background=black Top=100 Left=100 Height=600 Width=800> <Rectangle Top=600 Left=100 Width=100 Height=50 Fill=red Stroke-'blue StrokeWidth=10/>
<Line x1=100 y1=300 x2=300 y2=100 Stroke=green StrokeWidth=5 />
</Canvas>
RO 123609 Β1
De notat că la o implementare, dacă coordonatele sunt specificate fără unități de măsură, atunci acestea sunt considerate drept pixeli logici, având a 96-a parte dintr-un inch, iar în exemplul de mai sus, linia va avea lungimea de 200 pixeli. în afară de coordonate, alte proprietăți includ lățimea, alinierea pe orizontală și pe verticală a înălțimii, precum și ViewBox-ul (de tip rect rectangular; referința nu este fixată sau este (0, 0, 0, 0), însemnând că nu este făcută nicio ajustare, iar proprietățile de extindere și de aliniere sunt ignorate). Așa după cum este descris la modul general mai sus, cu referire la fig. 18...20, alte proprietăți includ extinderea, care, atunci când nu este specificată, păstrează mărimea originală, sau poate:
- să specifice o umplere la care raportul aspectelor nu este păstrat, iar conținutul este scalat, pentru a umple suprafețele de separație, stabilite de către partea de sus/ stânga/l ățime/ înălțime,
- să specifice uniforma, care scalează mărimea în mod uniform, până ce imaginea se potrivește la suprafețele de separație stabilite de către partea de sus/stânga/lățime/înălțime, sau
- să specifice UniformToFill, care scalează mărimea în mod uniform, pentru a umple suprafețele de separație, stabilite de către partea de sus/stânga/lățime/înălțime, precum și clip-urile, atât cât este necesar.
Pentru a se găsi mai departe în corelație cu modelul obiect de nivel scăzut, proprietatea de transformare stabilește un nou reper de coordonate pentru copiii elementului, în timp ce proprietatea de a decupa limitează regiunea la care conținutul poate fi desenat pe prelată, cu traiectoria prestabilită de decupare, definită ca o căsuță de delimitare. Proprietatea de Zlndex poate fi folosită pentru a specifica comanda de remitere pentru elementele prelatei, incluse unele în altele, din interiorul unui panou.
Viewbox-ul specifică un nou sistem de coordonate pentru conținut, de exemplu, prin redefinirea întinderii și a originii viewport-ului. Extinderea ajută la specificarea felului cum acest conținut se poziționează în viewport. Valoarea atributului lui viewBox este o listă de patru numere fără unități de măsură, <min-x>, <min-y>, <width> (lățime) și <height> (înălțime), de exemplu separate prin zone albe și/sau prin virgulă, și este de tipul Rect (rectangular). Rect-ul lui Viewbox specifică dreptunghiul din spațiul utilizatorului care se poziționează pe căsuța de delimitare. Acesta lucrează la fel cu inserarea unui scaleX și a unui scaleY. Proprietatea de extindere (în cazul în care opțiunea este alta de cât none (niciuna)) asigură comanda suplimentară, pentru a păstra raportul aspectelor din grafică. O transformare suplimentară este aplicată la descendenții dintr-un element dat, pentru a realiza efectul specificat.
în exemplul de mai sus, rezultatul efectiv al dreptunghiului din mostra de marcare de mai sus, la fiecare regulă de extindere, ar fi:
None - from (100, 600) to (200, 650)
Fiii - from (100, 100) to (900,700)
Uniform - from (100, ?) to (900, ?) - noua înălțime (height) va fi
400, și va fi centrată pe baza lui HorizontalAlign (aliniere orizontală) și al lui VerticalAlign (aliniere verticală).
UniformToFill - from (?, 100) to ( ?, 700) - Noua lățime (width) este
1200, și va fi din nou centrată pe baza lui HorizontalAlign și al lui VerticalAlign.
RO 123609 Β1
Dacă există o transformată asupra prelatei, aceasta este în fond aplicată deasupra (de 1 exemplu, la arbore) poziționării la Viewbox. De notat faptul că această poziționare va extinde orice element dintr-o prelată, de exemplu, căsuțe, text și așa mai departe, nu numai con- 3 formațiile. în plus, este de remarcat faptul că, dacă este specificat un viewbox, prelata nu se mai potrivește cu conținutul ei, dar mai de grabă are o mărime specifică. Dacă y-width (lățimea 5 pe y) și y-height (înălțimea pe y) sunt de asemenea specificate, atunci proprietățile de extindere/aliniere sunt folosite pentru a intercala viewbox-ul în lățimea și înălțimea specificate. 7
Elementele din modelul obiect pot să aibă, fiecare, aplicat un atribut de Clip. La unele elemente, îndeosebi conformații, acesta este expus în mod direct, ca o proprietate comună de 9 timp de rulare a limbajului, în timp ce la alții (de exemplu, majoritatea comenzilor), această proprietate este setată printr-o DynamicProperty (proprietate dinamică). 11 în general, calea de decupare restrânge regiunea la care poate fi desenat conținutul, așa cum este reprezentat la modul general în fig. 27, în care este prezentat un buton dintr-o con 13 figurație 2702, nedecupată, precum și dintr-o configurație 2704, în care este specificată o cale de decupare (unde linia întreruptă reprezintă calea de decupare). în mod conceptual, oricare 15 parte, dintr-un desen care se întinde în afara regiunii delimitate de calea activă, curentă de decupare, nu este desenată. O cale de decupare poate fi gândită ca o mască, în care acei pixeli 17 din afara căii de decupare sunt negri, împreună cu o valoare alpha de zero, iar acei pixeli din interiorul căii de decupare sunt albi, cu o valoare alpha de unu (cu excepția posibilă de anti- 19 altfel de denumire de-a lungul marginii siluetei).
O cale de decupare este definită de către un obiect din Geometry (geometrie), fie în 21 linie, fie într-un mod caracteristic într-o secțiune a resursei. O cale de decupare este utilizată și/sau completată, folosind proprietatea de Clip asupra unui element, așa cum se arată în 23 următorul exemplu:
<def: Resources> <Geometry def: ID=MyClip>
<Path Data-'... />
<Rectangle ... />
</Geometry>
</def: Resources>
<Element Clip= %resource; MyClip ... />
De notat faptul că animarea unui Clip este similară cu animarea transformatelor: 35 <Element>
<Element. Clip>
<Circle ... />
<Rectangle ... >
<FloatAnimation ... />
</Rectangle> </Element. Clip> ... children ...
</Element>
RO 123609 Β1
O cale este desenată prin specificarea datelor de Geometry și a proprietăților de remitere, cum ar fi Fiii (umplere), Stroke (mișcare a pensulei), precum și StrokeWidth (lățimea de mișcare a pensulei) asupra elementului Path (cale). Un marcator exemplu pentru o cale este specificat după cum urmează:
<Path Data=M 100 100 L 300 100 L 200 300 z Fill=red Stroke=blue StrokeWidth=3 />
Șirul 'Data' al căii este de tip Geometry. Un mod cu mai multe cuvinte și mai complet de a specifica o cale desenată este prin sintaxa complexă de proprietăți, așa cum este descrisă mai sus. Marcatorul (cum ar fi cel din următorul exemplu) este introdus direct în clasele de Geometry ale constructorului, descrise mai sus:
<Path>
<Path. Data> <CircleGeometry ... /> <RectangleGeometry ... /> <PathGeometry ... />
</Path. Data>
<Path. Fiii value=red />
<Path. Stroke value-'blue/> </Path>
Șirul de date al căii este de asemenea descris, utilizând următoarea notație pentru a descrie gramatica pentru un șir de date al traiectoriei:
*: 0 sau mai mult +: 1 sau mai mult ?: 0 sau 1
(): grupare
I: separă alternativele duble ghilimele în jurul literelelor
Cele ce urmează arată informațiile din șirul de date al căii, descrise cu această notație (de notat că la o implementare, FilIMode poate fi specificat aici, în locul unei proprietăți la nivelul de elemente):
wvg-path:
wsp* moveto-drawto-command-groups? wsp* moveto-drawto-command-groups:
moveto-drawto-command-group
I moveto-drawto-command-group wsp* moveto-drawto-commandgroups
RO 123609 Β1 moveto-drawto-command-group:
moveto wsp* drawto-commands?
drawto-commands: drawto-command I drawto-command wsp* drawto-commands drawto-command:
closepath lineto horizontal-lineto vertical-lineto curveto smooth-curveto quadratic-bezier-curveto smooth-quadratic-bezier-curveto elliptical-arc ι ι
I
I
I
I
I
I moveto:
( Μ I m ) wsp* moveto-argument-sequence moveto-argument-sequence: coordinate-pair
I coordinate-pair comma-wsp? lineto-argument-sequence closepath:
(Z I z) lineto:
( L I I ) wsp* lineto-argument-sequence lineto-argument-sequence:
coordinate-pair
I coordinate-pair comma-wsp? lineto-argument-sequence horizontal-lineto:
( Η I h ) wsp* horizontal-lineto-argument-sequence horizontal-lineto-argument-sequence: coordinate
I coordinate comma-wsp? horizontal-lineto-argumentsequence vertical-lineto:
( V I v ) wsp* vertical-lineto-argument-sequence vertical-lineto-argument-sequence: coordinate
RO 123609 Β1
I coordinate comma-wsp? vertical-lineto-argument-sequence curveto:
( C I c ) wsp* curveto-argument-sequence curveto-argument-sequence:
curveto-argument
I curveto-argument comma-wsp? curveto-argument-sequence curveto-argument:
coordinate-pair comma-wsp? coordinate-pair comma-wsp? coordinate-pair smooth-curveto:
( S I s ) wsp* smooth-curveto-argument-sequence smooth-curveto-argument-sequence:
smooth-curveto-argument
I smooth-curveto-argument comma-wsp? smooth-curvetoargument-sequence smooth-curveto-argument:
coordinate-pair comma-wsp? coordinate-pair quadratic-bezier-curveto:
( Q I q ) wsp* quadratic-bezier-curveto-argumentsequence quadratic-bezier-curveto-argument-sequence: quadratic-bezier-curveto-argument
I quadratic-bezier-curveto-argument comma-wsp?
quadratic-bezier-curveto-argument-sequence quadratic-bezier-curveto-argument:
coordinate-pair comma-wsp? coordinate-pair smooth-quadratic-bezier-curveto:
( T I t ) wsp* smooth-quadratic-bezier-curvetoargument-sequence smooth-quadratic-bezier-curveto-argument-sequence: coordinate-pair
I coordinate-pair comma-wsp? smooth-quadratic-beziercurveto-argument-sequence elliptical-arc:
( A I a ) wsp* elliptical-arc-argument-sequence
RO 123609 Β1 elliptical-arc-argument-sequence:
elliptical-arc-argument
I elliptical-arc-argument comma-wsp? elliptical-arcargument-sequence elliptical-arc-argument:
nonnegative-number comma-wsp? nonnegative-number commawsp?
number comma-wsp flag comma-wsp flag comma-wsp coordinate-pair coordinate-pair:
coordinate comma-wsp? coordinate coordinate: number nonnegative-number: integer-constant I floating-point-constant number: sign? Integer-constant I sign? floating-point-constant flag:
ΙΙ/ΛΙΙ I II A II comma-wsp:
(wsp+ comma? wsp*) I (comma wsp*) comma:
II II integer-constant: digit-sequence floating-point-constant: fractional-constant exponent? I digit-sequence exponent fractional-constant: digit-sequence? digit-sequence I digit-sequence exponent:
( e I E ) sign? digit-sequence
RO 123609 Β1 sign:
ΙΙψΙΙ | II II digit-sequence:
digit
I digit digit-sequence digit:
O I
I 2 I
wsp:
(#x20 I #x9 I #xD I #xA)
Elementul imagine (fig. 25) indică faptul că respectivul conținut al unui fișier complet este pe cale a fi remis într-un dreptunghi dat, din interiorul sistemului de coordonate curent al utilizatorului. Imaginea (indicată prin semnul de imagine) se poate referi la fișierele rastru de imagine, cum ar fi PNG sau JPEG, sau la fișiere cu tipul ΜΙΜΕ din image/wvg, așa cum se începe în următorul exemplu:
<lmage Top=200 Left=200 Width=100px Height=100px
Source-'myimage. png>
</lmage>
Următorul tabel asigură informațiile pentru imagini, prin câteva proprietăți exemple:
Tabel
| Denumire Tip | R/RW | Valoare Descriere standard | ||
| Top | BoxUnit | Coordonate pentru partea de sus a lui lmage(imagine) | ||
| Left | BoxUnit | Coordonate pentru partea stângă a lui Image | ||
| Width | BoxUnit | Lățimea lui Image | ||
| Height | BoxUnit | înălțimea lui Image | ||
| Source | ImageData | Sursa lui Image | ||
| Dpi | Float | 96 (?) | Ținta DPI pentru utilizarea la dimensionare | |
| HorizontalAlign | enum { Left (?), Center (?), Right (?) } | Center | ||
| VerticalAlign | enum { Top (?), Middle (?), Bottom (?) } | Middle |
Tabel (continuare)
RO 123609 Β1
| Denumire Tip R/RW Valoare Descriere standard | ||||
| Stretch | enum Stretch { None, Fiii, Uniform, UniformToFill, } | None | None: Păstrează forma inițială Fiii: Raportul aspectelor nu este păstrat, iar conținutul este scalat, pentru a umple bordurile stabilite de tlbh Uniform: Forma de scalare uniformă, până ce imaginea se potrivește cu bordurile stabilite prin tlwh. UniformToFill: Forma de scalare pentru a umple uniform bordurile stabilite prin tlbh, și decupate | |
| ReadyState | enum { MetaDataReady, Loading, Loaded LoadError } | |||
| LoadCounter | Int | Read | Nuli | Numărătorul care se incrementează atunci când ReadyState se încarcă (Loading) |
| Name | String | Alternează text pentru Image |
Așa cum este descris mai sus, conformațiile corespund geometriei desenate cu ajutorul proprietăților de prezentare moștenite și prezentate în cascadă. Următoarele tabele pornesc de la proprietățile exemplelor de figuri, pentru elementele de bază ale figurilor descrise mai sus (Rectangle - dreptunghi, Ellipse - elipsă, Line - linie, Polyline - polilinie, Polygon poligon). De remarcat faptul că aceste figuri de bază pot avea proprietăți de mișcarea pensulei, proprietăți de umplere, și pot fi utilizate drept căi de decupare, pot avea caracteristici de succesiune și se aplică la ambele niveluri de element și de Resource (resursă):
Tabel 39
| Denumire | Tip | R/RW | Valoare standard | Descriere |
| Fiii | Brush | RW | nuli | Coordonate pentru partea de sus a lui rect |
| FilIOpacity | Float | RW | 1.0 | Coordonate pentru partea stângă a lui rect |
| Stroke | Brush | RW | nuli | Lățimea lui rect |
| StrokeOpacity | Float | RW | 1.0 | Înălțimea lui rect |
| StrokeWidth | BoxUnit | RW | Ipx | Lățimea mișcării pensulei. Ipx = 1/96 dintr-un inch |
| FilIRule | enum { EvenOdd, NonZero, } | RW | EvenOdd | FilIRule indică algoritmul care este de utilizat pentru a determina care părți din prelată sunt incluse în interiorul figurii. |
Tabel (continuare)
RO 123609 Β1
| Denumire | Tip | R/RW | Valoare standard | Descriere |
| StrokeLineCap | enum { Butt, Round, Square, Diamond } | RW | Butt | StrokeLineCap specifică figura ce trebuie utilizată la sfârșitul deschiderii sub-căilor, atunci când acestea sunt mișcate cu pensula. |
| StrokeLineJoint | enum { Miter, Round, Bevel } | RW | Miter | StrokeLineJoint specifică figura ce este utilizată la colțurile căilor (sau alte conformații vectoriale) care sunt mișcate cu pensula, atunci când acestea sunt mișcate cu pensula. |
| StrokeMiterLimit | Float | RW | 4.0 | Limita la raportul dintre MiterLength și StrokeWidth. Valoarea să fie >=1 |
| StrokeDashArray | PointList | RW | nuli | StrokeDashArray comandă secvența de linii întrerupte și de pauze utilizate la căile de mișcare a pensulei. <dasharray> conține o listă de <numere> (<number>s) separate prin spații și prin virgulă, care specifică lungimile liniilor punctate și ale pauzelor alternative din unitățile utilizatorului. Dacă este asigurat un număr impar de valori, atunci lista de valori este repetată, pentru a produce un număr par de valori. Astfel, rețeaua de linii punctate de mișcare a pensulei: 5 3 2 este echivalentă cu rețeaua de linii punctate de mișcare a pensulei: 5 3 2 5 3 2. |
| StrokeDashOff set | Point | RW | StrokeDashOffset specifică distanța din secvența de linii punctate, la startarea liniilor punctate. | |
| Transform | Transform | RW | nuli | Transformata stabilește un nou reper de coordonate pentru copiii elementului |
| Clip | Geometry | RW | nuli | Clip-ul limitează regiunea la care vopseaua poate fi aplicată pe prelată. Calea standard de decupare este definită ca o căsuță de delimitare. |
RO 123609 Β1
Ceea ce urmează este o sintaxă exemplu de marcare pentru un dreptunghi:
<Rectangle Top=600 Left=100 Width=100 Height=50 Fill=red Stroke=blue StrokeWidth=10 />
Un dreptunghi are următoarele proprietăți în modelul obiect (de notat că dreptunghiurile sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| Top | BoxUnit | Coordonate pentru partea de sus a lui rect |
| Left | BoxUnit | Coordonate pentru partea stângă a lui rect |
| Width | BoxUnit | Lățimea lui rect |
| Height | BoxUnit | înălțimea lui rect |
| RadiusX | BoxUnit | Pentru dreptunghiuri rotunjite, raza pe axa X a elipsei, utilizată pentru a rotunji colțurile dreptunghiului. Dacă este specificată o rază pe axa X negativă, va fi utilizată valoarea absolută a razei. |
| RadiusY | BoxUnit | Pentru dreptunghiuri rotunjite, raza pe axa Y a elipsei, utilizată pentru a rotunji colțurile dreptunghiului. Dacă este specificată o rază pe axa Y negativă, va fi utilizată valoarea absolută a razei. |
Ceea ce urmează este o sintaxă exemplu de marcare pentru un cerc:
<Circle CenterX=600 CenterY=100 Fill=red Stroke-'blue StrokeWidth=10/>
Un cerc are următoarele proprietăți în modelul obiect (de notat că cercurile sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| CenterX | BoxUnit | Coordonata X a centrului cercului |
| CenterY | BoxUnit | Coordonata Y a centrului cercului |
| Radius | BoxUnit | Raza cercului |
Ceea ce urmează este o sintaxă exemplu de marcare pentru o elipsă:
<Ellipse CenterX=600 CenterY=100 Fill=red Stroke-'blue StrokeWidth=10/>
RO 123609 Β1
O elipsă are următoarele proprietăți în modelul obiect (de notat că elipsele sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| CenterX | Coordonată | Coordonata X a centrului elipsei |
| CenterY | Coordonată | Coordonata Y a centrului elipsei |
| RadiusX | Lungime | Raza pe axa X a elipsei. Dacă este specificată o rază pe axa X negativă, va fi utilizată valoarea absolută a razei. |
| RadiusY | Lungime | Raza pe axa Y a elipsei. Dacă este specificată o rază pe axa Y negativă, va fi utilizată valoarea absolută a razei. |
Ceea ce urmează este o sintaxă exemplu de marcare pentru o linie:
<Line x1=100 y1=300 x2=300 y2=100 StrokeWidth=5 />
O linie are următoarele proprietăți în modelul obiect (de notat că liniile sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| X1 | BoxUnit | Coordonata pe axa X a începutului liniei. Valoarea prestabilită este 0. |
| Y1 | BoxUnit | Coordonata pe axa Y a începutului liniei. Valoarea prestabilită este 0. |
| X2 | BoxUnit | Coordonata pe axa X a sfârșitului liniei. Valoarea prestabilită este 0. |
| Y2 | BoxUnit | Coordonata pe axa Y a sfârșitului liniei. Valoarea prestabilită este 0. |
'Polyline' (Polilinia) definește un set de segmente de linii drepte, conectate între ele. în mod caracteristic, o polilinie definește o conformație deschisă.
Ceea ce urmează este o sintaxă exemplu de marcare pentru o polilinie:
<Polyline Fill=None Stroke=Blue StrokeWidth=10 cm
Points=50,375
150.375 150,325
350.375 350,250
550.375 550,175
750.375 750,100
250,325 250,375
450,250 450,375
650,175 650,375
850,100 850,375
950,375 950,25 1050,25 1050,375
1150,375 />
RO 123609 Β1
O polilinie are următoarele proprietăți în modelul obiect (de notat că liniile sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| Points | PointCollection | Punctele care alcătuiesc polilinia. Valorile coordonatelor sunt în sistemul de coordonate al utilizatorului. |
Elementul Polygon (poligon) definește o conformație închisă, ce cuprinde un set de segmente de linii drepte, conectate între ele. Ceea ce urmează este o sintaxă exemplu de marcare pentru un poligon:
<Polygon Fill=red Stroke=blue StrokeWidth=10 points=350,75 379,161 469,161 397,215 423,301 350,250 277,301 303,215 231,161 321,161 />
Un poligon are următoarele proprietăți în modelul obiect (de notat că liniile sunt citite/scrise, au valori prestabilite egale cu zero, suportă succesiunea și se aplică la ambele niveluri de elemente și de resurse):
Tabel
| Denumire | Tip | Descriere |
| Points | PointCollection | Punctele care alcătuiesc poligonul. Valorile coordonatelor sunt în sistemul de coordonate al utilizatorului. Dacă este prevăzut un număr impar de coordonate, atunci elementul este în eroare. |
Gramatica pentru specificațiile punctelordin elementele de polilinie și de poligon este descrisă, împreună cu următoarea notație:
*: 0 sau mai mult +: 1 sau mai mult ?: 0 sau 1
(): grupare
I: separă alternativele duble ghilimele în jurul literalelor
Ceea ce urmează descrie specificațiile punctelor din elementele de 'Polyline' (polilinie) și de 'Polygon' (poligon), utilizând notația de mai sus:
RO 123609 Β1 list-of-points:
wsp* coordinate-pairs? wsp* coordinate-pairs: coordinate-pair I coordinate-pair comma-wsp coordinate-pairs coordinate-pair:
| coordinate | comma-wsp coordinate |
coordinate: number number:
sign? Integer-constant
I sign? floating-point-constant comma-wsp:
(wsp+ comma? wsp*) I (comma wsp*) comma:
II II integer-constant: digit-sequence floating-point-constant: fractional-constant exponent? I digit-sequence exponent fractional-constant: digit-sequence? digit-sequence I digit-sequence exponent:
( e I E ) sign? digit-sequence sign:
ΙΙψΙΙ | II II digit-sequence:
digit
I digit digit-sequence digit:
wsp:
(#x20 I #x9 I #xD I #xA)+
RO 123609 Β1
Așa după cum poate fi văzut din descrierea anterioară, detaliată, sunt prevăzute un 1 sistem, o metodă și un model element/obiect, care asigură, codului de program, mecanisme diverse, pentru a se interfața cu un graf scenic. Sistemul, metoda, precum și modelul obiect sunt 3 utilizate în mod direct, sunt încă puternice, flexibile și extensibile.
în timp ce invenția este susceptibilă de diverse modificări și de construcții alternative, 5 anumite forme de realizare ilustrate de aceasta sunt prezentate în desene și au fost descrise mai sus în detaliu. Ar trebui totuși să se înțeleagă că nu există nicio intenție de a limita invenția 7 la formele specifice prezentate, ci din contră, intenția este de a acoperi toate modificările, construcțiile alternative, precum și altele echivalente, intrând în spiritul și în scopul invenției. 9
Claims (27)
- Revendicări1. Sistem pentru procesarea informațiilor grafice și a altor informații video, pentru afișarea pe sisteme de calculatoare, caracterizat prin aceea că sistemul cuprinde:- un motor de compunere și de animație de nivel superior (214) și un motor de nivel inferior (218), motorul de nivel superior fiind instanțiat pe o bază per-aplicație, iar motorul de nivel inferior deservind cereri de la mai multe aplicații;- un limbaj marcator, limbajul marcator cuprinzând instrucțiuni grafice, instrucțiunile grafice cuprinzând un format șir și o notație de obiect, notația de obiect cuprinzând elemente grafice de la o clasă de elemente grafice;- un model obiect grafic cuprinzând:a. un obiect vizual de clasă de bază (500), care este un container pentru conținut grafic, care asigură funcționalitatea de bază pentru alte tipuri vizuale și din care derivă alte tipuri vizuale,b. un obiect vizual de tip container (501), care este un container pentru elemente vizuale și care poate conține alte obiecte vizuale de tip container,c. un obiect vizual de tip desen (502), care este un container pentru conținut grafic, șid. o clasă de elemente grafice (2500), clasa de elemente cuprinzând o clasă de formă (2502), o clasă de imagine (2504), o clasă video (2506) și o clasă Canavas (2508), iar clasa de elemente fiind integrată cu un sistem de proprietăți generale;- un convertor de tip (2608), convertorul de tip fiind configurat să convertească o instrucțiune grafică în format șir într-un obiect de interfață pentru programare de aplicație (API) vizual;- un parser/translator (2604), parserul/translatorul fiind configurat să:a. interpreteze instrucțiunile grafice, instrucțiunile grafice cuprinzând apeluri de cod directe, apeluri de cod de model obiect și instrucțiuni grafice scrise utilizând limbajul marcator,b. acceseze convertorul de tip, convertorul de tip fiind configurat să convertească o instrucțiune grafică în format șir într-un obiect API vizual, șic. interpreteze codul marcator și, la interpretarea codului marcator, să adauge elemente din clasa elementelor grafice la un element arbore;- un sistem de prezentare (210), sistemul de prezentare fiind configurat să traducă arborii de elemente grafice în apeluri la un API vizual; un API vizual (212), API-ul vizual fiind configurat să:a. interfațeze cu sistemul de prezentare, să interfațeze cu parserul-translatorul și să interfațeze cu apelurile de cod directe de la limbajele de programare, șib. ca răspuns la cererile sistemului de prezentare, parserul-translatorul creează obiecte de scenă în cadrul unui graf scenic; și- o interfață de afișare operabilă să faciliteze afișarea obiectelor grafice în cadrul grafului scenic.
- 2. Sistem conform revendicării 1, caracterizat prin aceea că elementele din modelul obiect de elemente sunt corelate cu obiectele din modelul obiect al grafului scenic.
- 3. Sistem conform revendicării 1, caracterizat prin aceea că marcatorul include textul în linie, ce include un șir care definește o proprietate a elementului, iar translatorul comunică cu un convertor de tip, pentru a converti șirul într-o proprietate a obiectului.
- 4. Sistem conform revendicării 1, caracterizat prin aceea că marcatorul include textul în linie, ce conține sintaxa de proprietate, sintaxa de proprietate specificând atribute multiple ale obiectelor grafice vectoriale.
- 5. Sistem conform revendicării 4, caracterizat prin aceea că textul în linie este identificat cu o referință care se referă la o altă locație din marcator.RO 123609 Β1
- 6. Sistem conform revendicării 4, caracterizat prin aceea că textul în linie este 1 identificat cu o referință care se referă la un fișier.
- 7. Sistem conform revendicării 4, caracterizat prin aceea că textul în linie este3 identificat cu o referință care corespunde la un fișier care poate fi descărcat dintr-o locație aflată la distanță, într-o rețea.5
- 8. Sistem conform revendicării 1, caracterizat prin aceea că marcatorul include textul în linie, ce cuprinde sintaxa de proprietate complexă corespunzând unei resurse grafice.7
- 9. Sistem conform revendicării 8, caracterizat prin aceea că resursa grafică descrie un obiect pensulă vizual, parserul/traducătorul asigurând datele nivelului resursă, pentru 9 comunicarea directă cu stratul API vizual, pentru a crea un obiect vopsea vizual, ce corespunde elementului descris de către sintaxa de proprietate complexă. 11
- 10. Sistem conform revendicării 9, caracterizat prin aceea că datele nivelului resursă sunt identificate cu o referință care se referă la o altă locație din marcator. 13
- 11. Sistem conform revendicării 9, caracterizat prin aceea că datele nivelului resursă sunt identificate cu o referință care se referă la un fișier. 15
- 12. Sistem conform revendicării 9, caracterizat prin aceea că datele nivelului resursă sunt identificate cu o referință care se referă la un fișier care poate fi descărcat dintr-o locație 17 aflată la distanță, într-o rețea.
- 13. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 19 modelului obiect grafic cuprinde un element imagine.
- 14. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 21 grafice cuprinde un element polilinie.
- 15. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 23 grafice cuprinde un element poligon.
- 16. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 25 grafice cuprinde un element traiectorie.
- 17. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 27 grafice cuprinde un element linie.
- 18. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 29 grafice cuprinde un element elipsă.
- 19. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 31 grafice cuprinde un element cerc.
- 20. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 33 grafice include date despre proprietatea de umplere.
- 21. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 35 grafice include date despre proprietatea de mișcare a pensulei.
- 22. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 37 grafice include date despre proprietatea de decupare.
- 23. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 39 grafice include date despre proprietatea de transformare.
- 24. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 41 grafice include date despre efect.
- 25. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 43 grafice include date despre opacitate.
- 26. Sistem conform revendicării 1, caracterizat prin aceea că unul dintre elementele 45 grafice include date despre modul de îmbinare.
- 27. Sistem conform revendicării 1, caracterizat prin aceea că translatorul solicită instanțierea a cel puțin unui constructor, pentru a crea obiectele.
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US10/401,717 US7486294B2 (en) | 2003-03-27 | 2003-03-27 | Vector graphics element-based model, application programming interface, and markup language |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| RO123609B1 true RO123609B1 (ro) | 2014-07-30 |
Family
ID=23588917
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ROA200300414A RO123609B1 (ro) | 2003-03-27 | 2003-05-15 | Sistem pentru procesarea informaţiilor grafice şi a altor informaţii video pentru afişarea pe sisteme de calculatoare |
Country Status (26)
| Country | Link |
|---|---|
| US (1) | US7486294B2 (ro) |
| EP (1) | EP1462998B1 (ro) |
| JP (1) | JP4290477B2 (ro) |
| KR (1) | KR100996738B1 (ro) |
| CN (1) | CN1534476B (ro) |
| AT (1) | ATE403198T1 (ro) |
| AU (1) | AU2003204007B2 (ro) |
| BR (1) | BR0302004A (ro) |
| CA (1) | CA2428471C (ro) |
| CO (1) | CO5460278A1 (ro) |
| DE (1) | DE60322505D1 (ro) |
| EC (1) | ECSP034609A (ro) |
| GT (1) | GT200300184A (ro) |
| HR (1) | HRP20030389B1 (ro) |
| HU (1) | HUP0301289A3 (ro) |
| IL (1) | IL155881A (ro) |
| MX (1) | MXPA03004410A (ro) |
| MY (1) | MY143630A (ro) |
| NO (1) | NO328434B1 (ro) |
| NZ (1) | NZ525857A (ro) |
| RO (1) | RO123609B1 (ro) |
| RU (1) | RU2321892C2 (ro) |
| SG (1) | SG127696A1 (ro) |
| TR (1) | TR200300696A2 (ro) |
| TW (1) | TWI336042B (ro) |
| ZA (1) | ZA200303553B (ro) |
Families Citing this family (87)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7619633B2 (en) | 2002-06-27 | 2009-11-17 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
| US7511718B2 (en) * | 2003-10-23 | 2009-03-31 | Microsoft Corporation | Media integration layer |
| US7219340B2 (en) * | 2003-10-23 | 2007-05-15 | Microsoft Corporation | Changeable class and pattern to provide selective mutability in computer programming environments |
| US7475061B2 (en) * | 2004-01-15 | 2009-01-06 | Microsoft Corporation | Image-based document indexing and retrieval |
| US7729538B2 (en) * | 2004-08-26 | 2010-06-01 | Microsoft Corporation | Spatial recognition and grouping of text and graphics |
| US7574048B2 (en) * | 2004-09-03 | 2009-08-11 | Microsoft Corporation | Freeform digital ink annotation recognition |
| US7603624B2 (en) * | 2004-10-21 | 2009-10-13 | Microsoft Corporation | System and method for styling content in a graphical user interface control |
| US8631347B2 (en) * | 2004-11-15 | 2014-01-14 | Microsoft Corporation | Electronic document style matrix |
| US7570816B2 (en) * | 2005-03-31 | 2009-08-04 | Microsoft Corporation | Systems and methods for detecting text |
| US7526129B2 (en) * | 2005-06-23 | 2009-04-28 | Microsoft Corporation | Lifting ink annotations from paper |
| RU2005124030A (ru) * | 2005-07-28 | 2007-02-10 | Александр Михайлович Юров (RU) | Способ визуальной адресации команд в дереве |
| WO2007016457A2 (en) | 2005-07-29 | 2007-02-08 | Bender Gary T | Apparatuses, methods and systems for a composite multimedia content generator |
| US20070061351A1 (en) * | 2005-09-13 | 2007-03-15 | Microsoft Corporation | Shape object text |
| US8001526B2 (en) * | 2005-09-15 | 2011-08-16 | Microsoft Corporation | Hierarchical property storage |
| US20070061349A1 (en) * | 2005-09-15 | 2007-03-15 | Microsoft Corporation | Hierarchically describing shapes |
| KR20070047463A (ko) * | 2005-11-02 | 2007-05-07 | 삼성전자주식회사 | 장면 기반의 벡터 에니메이션 생성 장치 |
| CN100428243C (zh) * | 2005-12-14 | 2008-10-22 | 国际商业机器公司 | 用于在模型上实现动作的方法和系统 |
| US9153125B2 (en) * | 2005-12-20 | 2015-10-06 | Savant Systems, Llc | Programmable multimedia controller with programmable services |
| KR100735971B1 (ko) * | 2006-01-17 | 2007-07-06 | 엘지전자 주식회사 | 홈 네트워크에서의 원격 화면 제어 방법 |
| US7616203B1 (en) * | 2006-01-20 | 2009-11-10 | Adobe Systems Incorporated | Assigning attributes to regions across frames |
| US7657341B2 (en) | 2006-01-31 | 2010-02-02 | Dragon & Phoenix Software, Inc. | System, apparatus and method for facilitating pattern-based clothing design activities |
| US7657340B2 (en) * | 2006-01-31 | 2010-02-02 | Dragon & Phoenix Software, Inc. | System, apparatus and method for facilitating pattern-based clothing design activities |
| US7460710B2 (en) * | 2006-03-29 | 2008-12-02 | Amazon Technologies, Inc. | Converting digital images containing text to token-based files for rendering |
| US7962895B2 (en) * | 2006-07-20 | 2011-06-14 | Oracle America, Inc. | Language for binding scalable vector graphics elements to java classes |
| US8130226B2 (en) * | 2006-08-04 | 2012-03-06 | Apple Inc. | Framework for graphics animation and compositing operations |
| US9019300B2 (en) | 2006-08-04 | 2015-04-28 | Apple Inc. | Framework for graphics animation and compositing operations |
| US7930644B2 (en) | 2006-09-13 | 2011-04-19 | Savant Systems, Llc | Programming environment and metadata management for programmable multimedia controller |
| FR2907574B1 (fr) * | 2006-10-20 | 2009-01-16 | Streamezzo Sa | Procede de description de scene multimedia comprenant au moins une zone de rognage rectangulaire alignee sur des frontieres de pixels. |
| US8490117B1 (en) | 2006-10-23 | 2013-07-16 | Adobe Systems Incorporated | Bridging script engines |
| US8020089B1 (en) | 2006-10-23 | 2011-09-13 | Adobe Systems Incorporated | Rendering hypertext markup language content |
| US7614003B2 (en) * | 2006-10-23 | 2009-11-03 | Adobe Systems Incorporated | Rendering hypertext markup language content |
| US8234392B2 (en) | 2006-11-17 | 2012-07-31 | Apple Inc. | Methods and apparatuses for providing a hardware accelerated web engine |
| KR100803947B1 (ko) * | 2006-12-01 | 2008-02-15 | 주식회사 코아로직 | 오픈 벡터그래픽 응용 프로그램 인터페이스 변환 장치와방법, 모바일 단말기, 및 그 방법이 기록된 기록매체 |
| US20080158254A1 (en) * | 2006-12-29 | 2008-07-03 | Hong Jiang | Using supplementary information of bounding boxes in multi-layer video composition |
| CA2680009A1 (en) | 2007-03-15 | 2008-09-25 | Thomson Licensing | Method and system for accessibility and control of parameters in scenegraphs |
| US20080266288A1 (en) * | 2007-04-27 | 2008-10-30 | Identitymine Inc. | ElementSnapshot Control |
| US7876336B2 (en) * | 2007-07-02 | 2011-01-25 | Autodesk, Inc. | Scale-dependent rendering of natural media styles |
| US20090079744A1 (en) * | 2007-09-21 | 2009-03-26 | Microsoft Corporation | Animating objects using a declarative animation scheme |
| JP2009129127A (ja) * | 2007-11-22 | 2009-06-11 | Fujitsu Ltd | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 |
| US20090193067A1 (en) * | 2008-01-30 | 2009-07-30 | Microsoft Corporation | Server-based recalculation of vector graphics |
| US8760472B2 (en) * | 2008-04-01 | 2014-06-24 | Apple Inc. | Pixel transforms |
| US8612485B2 (en) * | 2008-08-11 | 2013-12-17 | Sony Corporation | Deferred 3-D scenegraph processing |
| US8314951B2 (en) | 2008-09-26 | 2012-11-20 | Kyocera Document Solutions Inc. | Image processing apparatus, and computer-readable recording medium |
| JP5007291B2 (ja) * | 2008-09-30 | 2012-08-22 | 京セラドキュメントソリューションズ株式会社 | 画像処理装置、画像処理方法及び画像処理プログラム |
| JP5094667B2 (ja) * | 2008-09-30 | 2012-12-12 | 京セラドキュメントソリューションズ株式会社 | 画像処理装置、画像処理方法及び画像処理プログラム |
| BRPI1005691B1 (pt) * | 2009-02-17 | 2021-03-09 | Koninklijke Philips N.V. | método de combinação de dados de imagem tridimensional [3d] e dados gráficos auxiliares, portador de informações compreendendo dados de imagem tridimensional [3d] e dados gráficos auxiliares, dispositivo de geração de 3d para combinar dados de imagem tridimensional [3d] e dados gráficos auxiliares, dispositivo de exibição em 3d para combinar dados de imagem tridimensional [3d] e dados gráficos auxiliares |
| US9250926B2 (en) | 2009-04-30 | 2016-02-02 | Microsoft Technology Licensing, Llc | Platform extensibility framework |
| US8638343B2 (en) * | 2009-04-30 | 2014-01-28 | Microsoft Corporation | Data visualization platform performance optimization |
| JP5008714B2 (ja) | 2009-12-15 | 2012-08-22 | 三菱電機株式会社 | 画像生成装置及び画像生成方法 |
| US8823797B2 (en) * | 2010-06-03 | 2014-09-02 | Microsoft Corporation | Simulated video with extra viewpoints and enhanced resolution for traffic cameras |
| JP5512449B2 (ja) * | 2010-07-28 | 2014-06-04 | 富士フイルム株式会社 | ページ記述データ処理装置、方法及びプログラム並びに印刷物生産方法 |
| CN102054280B (zh) * | 2010-11-29 | 2013-06-12 | 广东威创视讯科技股份有限公司 | 快速生成矢量图的方法及装置 |
| EP2549389A1 (en) * | 2011-07-20 | 2013-01-23 | Axel Springer Digital TV Guide GmbH | Easy 2D navigation in a video database |
| CN102289834B (zh) * | 2011-08-30 | 2013-06-12 | 北京瑞信在线系统技术有限公司 | 一种微动画编辑器及其编辑方法 |
| US9563971B2 (en) | 2011-09-09 | 2017-02-07 | Microsoft Technology Licensing, Llc | Composition system thread |
| SG10201601309YA (en) * | 2011-09-14 | 2016-03-30 | Barco Nv | Electronic tool and methods for meetings |
| CN108337099B (zh) | 2011-09-14 | 2022-08-23 | 巴科股份有限公司 | 用于会议音频的电子工具和方法 |
| US11258676B2 (en) | 2011-09-14 | 2022-02-22 | Barco N.V. | Electronic tool and methods for meetings |
| US8756348B2 (en) | 2011-09-14 | 2014-06-17 | Barco N.V. | Electronic tool and methods for meetings |
| CN102662963A (zh) * | 2012-03-08 | 2012-09-12 | 北京神州数码思特奇信息技术股份有限公司 | 一种元设施扩展方法及模块 |
| US20130278607A1 (en) * | 2012-04-20 | 2013-10-24 | A Thinking Ape Technologies | Systems and Methods for Displaying Animations on a Mobile Device |
| US20140300611A1 (en) * | 2013-03-15 | 2014-10-09 | Trigger Happy, Ltd. | Web and native code environment modular player and modular rendering system |
| US20140357357A1 (en) | 2013-05-30 | 2014-12-04 | Microsoft Corporation | Game bundle package |
| US9766870B2 (en) | 2013-05-30 | 2017-09-19 | Microsoft Technology Licensing, Llc | Bundle package generation |
| US9323514B2 (en) | 2013-05-30 | 2016-04-26 | Microsoft Technology Licensing, Llc | Resource package indexing |
| KR101527775B1 (ko) * | 2013-07-11 | 2015-06-16 | 정은숙 | Ifc 파일 고속 처리 시스템 및 방법 |
| CN104572050A (zh) * | 2013-10-18 | 2015-04-29 | 镇江鼎拓科技信息有限公司 | 一种基于saas的出版物平台图形生成方法 |
| KR102140294B1 (ko) * | 2014-01-16 | 2020-07-31 | 삼성전자주식회사 | 전자 장치의 광고 방법 및 그 전자 장치 |
| US10423652B2 (en) * | 2016-08-08 | 2019-09-24 | Baidu Usa Llc | Knowledge graph entity reconciler |
| US10455188B2 (en) | 2016-11-18 | 2019-10-22 | Microsoft Technology Licensing, Llc | Correlating UI with CPU stacks for profiling sessions |
| JP6855348B2 (ja) * | 2017-07-31 | 2021-04-07 | 株式会社ソニー・インタラクティブエンタテインメント | 情報処理装置およびダウンロード処理方法 |
| EP3834153A1 (en) | 2018-08-10 | 2021-06-16 | NVIDIA Corporation | Platform and method for collaborative generation of content |
| US12100112B2 (en) | 2018-08-10 | 2024-09-24 | Nvidia Corporation | Cloud-centric platform for collaboration and connectivity on 3D virtual environments |
| CN109117051B (zh) * | 2018-09-05 | 2021-05-11 | 广州视源电子科技股份有限公司 | 思维导图的展示方法、装置、设备及存储介质 |
| US10839249B2 (en) * | 2019-03-08 | 2020-11-17 | International Business Machines Corporation | Methods and systems for analyzing images utilizing scene graphs |
| CN110213265B (zh) | 2019-05-29 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 图像获取方法、装置、服务器及存储介质 |
| CN110297932B (zh) * | 2019-06-28 | 2021-07-23 | 北京金山安全软件有限公司 | 确定矢量图中封闭图形的最大内接圆的方法、装置及电子设备 |
| CN110427142A (zh) * | 2019-07-29 | 2019-11-08 | 成都科鸿智信科技有限公司 | 一种基于Html5 canvas标签制作的特种设备监管平台用画图工具 |
| US11176314B2 (en) * | 2019-09-19 | 2021-11-16 | Sap Se | XML schema description code generator |
| WO2021210912A1 (ko) * | 2020-04-14 | 2021-10-21 | 주식회사 워트인텔리전스 | 특허 도면 부호 설명 출력 방법 및 이를 위한 장치, 시스템 |
| US20220134222A1 (en) * | 2020-11-03 | 2022-05-05 | Nvidia Corporation | Delta propagation in cloud-centric platforms for collaboration and connectivity |
| US12026534B2 (en) * | 2021-07-27 | 2024-07-02 | Synchrony Bank | Methods and system for providing customized acquisition protocols |
| US12524213B2 (en) * | 2021-10-19 | 2026-01-13 | Figma, Inc. | Code block element for integrated graphic design system |
| CN114154208B (zh) * | 2021-12-08 | 2025-07-22 | 广联达科技股份有限公司 | 跨图纸移动图元的方法、装置、计算机设备和存储介质 |
| DE102022103909A1 (de) | 2022-02-18 | 2022-07-14 | FEV Europe GmbH | Datenstruktur zum testen autonom fahrender kraftfahrzeuge |
| CN115309313A (zh) * | 2022-08-09 | 2022-11-08 | 盈帜科技(常州)有限公司 | 一种二维场景海量矢量数据显示方法及设备 |
| CN120298607B (zh) * | 2025-06-12 | 2025-11-04 | 中国科学院地理科学与资源研究所 | 面向远程智能控制的岛礁数据模型构建方法 |
Family Cites Families (90)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4209852A (en) * | 1974-11-11 | 1980-06-24 | Hyatt Gilbert P | Signal processing and memory arrangement |
| EP0513206B1 (en) | 1990-01-30 | 1995-04-12 | Johnson Service Company | Networked facilities management system |
| US5509115A (en) | 1990-08-08 | 1996-04-16 | Peerless Systems Corporation | Method and apparatus for displaying a page with graphics information on a continuous synchronous raster output device |
| US5261041A (en) * | 1990-12-28 | 1993-11-09 | Apple Computer, Inc. | Computer controlled animation system based on definitional animated objects and methods of manipulating same |
| US5852449A (en) * | 1992-01-27 | 1998-12-22 | Scientific And Engineering Software | Apparatus for and method of displaying running of modeled system designs |
| AU4279893A (en) | 1992-04-10 | 1993-11-18 | Avid Technology, Inc. | A method and apparatus for representing and editing multimedia compositions |
| US5987627A (en) | 1992-05-13 | 1999-11-16 | Rawlings, Iii; Joseph H. | Methods and apparatus for high-speed mass storage access in a computer system |
| CA2271555C (en) * | 1992-12-09 | 2003-11-11 | Discovery Communications, Inc. | Remote control for cable television delivery system |
| US5500933A (en) * | 1993-04-28 | 1996-03-19 | Canon Information Systems, Inc. | Display system which displays motion video objects combined with other visual objects |
| WO1994027234A1 (en) * | 1993-05-10 | 1994-11-24 | Taligent, Inc. | Multimedia synchronization system |
| US5555368A (en) * | 1993-12-30 | 1996-09-10 | Taligent | Object-oriented multi-tasking view framework |
| US5912666A (en) * | 1994-08-23 | 1999-06-15 | Object Technology Licensing Corp. | Object-oriented global cursor tool |
| US5745761A (en) | 1994-12-15 | 1998-04-28 | International Business Machines Corporation | Advanced graphics driver architecture with extension capability |
| US5986667A (en) * | 1994-12-22 | 1999-11-16 | Apple Computer, Inc. | Mechanism for rendering scenes using an object drawing subsystem |
| US5727141A (en) | 1995-05-05 | 1998-03-10 | Apple Computer, Inc. | Method and apparatus for identifying user-selectable regions within multiple display frames |
| US5790130A (en) | 1995-06-08 | 1998-08-04 | Hewlett-Packard Company | Texel cache interrupt daemon for virtual memory management of texture maps |
| US5930810A (en) * | 1995-08-09 | 1999-07-27 | Taylor Corporation | Printing system with pre-defined user modifiable forms and local and remote printing |
| US5986675A (en) * | 1996-05-24 | 1999-11-16 | Microsoft Corporation | System and method for animating an object in three-dimensional space using a two-dimensional input device |
| US5936632A (en) | 1996-07-26 | 1999-08-10 | Hewlett-Packard Co. | Method for fast downloading of textures to accelerated graphics hardware and the elimination of extra software copies of texels |
| JP4138011B2 (ja) * | 1996-09-09 | 2008-08-20 | マイクロソフト コーポレーション | 媒体でデザインするためのコンテンツの自動的なレイアウトおよび書式設定 |
| US6275857B1 (en) * | 1996-10-30 | 2001-08-14 | Microsoft Corporation | System and method for freeing shared resources in a computer system |
| US5920325A (en) * | 1996-11-20 | 1999-07-06 | International Business Machines Corporation | Prioritization of background display during animation |
| US6137499A (en) * | 1997-03-07 | 2000-10-24 | Silicon Graphics, Inc. | Method, system, and computer program product for visualizing data using partial hierarchies |
| US6195694B1 (en) * | 1997-03-13 | 2001-02-27 | International Business Machines Corporation | Server for reconfiguring control of a subset of devices on one or more kiosks |
| JP4726097B2 (ja) * | 1997-04-07 | 2011-07-20 | エイ・ティ・アンド・ティ・コーポレーション | 適応制御を行うことができるmpegコード化オーディオ・ビジュアル対象物をインターフェースで連結するためのシステムおよび方法 |
| US6160907A (en) | 1997-04-07 | 2000-12-12 | Synapix, Inc. | Iterative three-dimensional process for creating finished media content |
| US6215495B1 (en) * | 1997-05-30 | 2001-04-10 | Silicon Graphics, Inc. | Platform independent application program interface for interactive 3D scene management |
| US5924098A (en) | 1997-06-30 | 1999-07-13 | Sun Microsystems, Inc. | Method and apparatus for managing a linked-list data structure |
| US6377263B1 (en) * | 1997-07-07 | 2002-04-23 | Aesthetic Solutions | Intelligent software components for virtual worlds |
| US6314470B1 (en) * | 1997-07-25 | 2001-11-06 | Hewlett Packard Company | System and method for asynchronously accessing a graphics system for graphics application evaluation and control |
| US6154215A (en) * | 1997-08-01 | 2000-11-28 | Silicon Graphics, Inc. | Method and apparatus for maintaining multiple representations of a same scene in computer generated graphics |
| US6654931B1 (en) | 1998-01-27 | 2003-11-25 | At&T Corp. | Systems and methods for playing, browsing and interacting with MPEG-4 coded audio-visual objects |
| US6272650B1 (en) * | 1998-02-03 | 2001-08-07 | Amazing Media, Inc. | System and method for disambiguating scene graph loads |
| US6243856B1 (en) * | 1998-02-03 | 2001-06-05 | Amazing Media, Inc. | System and method for encoding a scene graph |
| US6075532A (en) * | 1998-03-23 | 2000-06-13 | Microsoft Corporation | Efficient redrawing of animated windows |
| US6266053B1 (en) * | 1998-04-03 | 2001-07-24 | Synapix, Inc. | Time inheritance scene graph for representation of media content |
| US6570578B1 (en) | 1998-04-03 | 2003-05-27 | Avid Technology, Inc. | System for automatic generation of selective partial renderings of complex scenes |
| US6237092B1 (en) * | 1998-05-05 | 2001-05-22 | International Business Machines Corp. | Client-server system with central application management allowing an administrator to configure user and group contexts during application configuration without relaunching the application |
| US6631403B1 (en) | 1998-05-11 | 2003-10-07 | At&T Corp. | Architecture and application programming interfaces for Java-enabled MPEG-4 (MPEG-J) systems |
| WO2000001154A1 (en) * | 1998-06-26 | 2000-01-06 | General Instrument Corporation | Terminal for composing and presenting mpeg-4 video programs |
| US6731314B1 (en) * | 1998-08-17 | 2004-05-04 | Muse Corporation | Network-based three-dimensional multiple-user shared environment apparatus and method |
| US6487565B1 (en) * | 1998-12-29 | 2002-11-26 | Microsoft Corporation | Updating animated images represented by scene graphs |
| US6411297B1 (en) * | 1999-03-03 | 2002-06-25 | Discreet Logic Inc. | Generating image data |
| US6714201B1 (en) * | 1999-04-14 | 2004-03-30 | 3D Open Motion, Llc | Apparatuses, methods, computer programming, and propagated signals for modeling motion in computer applications |
| US6986101B2 (en) * | 1999-05-06 | 2006-01-10 | International Business Machines Corporation | Method and apparatus for converting programs and source code files written in a programming language to equivalent markup language files |
| US6707456B1 (en) * | 1999-08-03 | 2004-03-16 | Sony Corporation | Declarative markup for scoring multiple time-based assets and events within a scene composition system |
| US6765571B2 (en) * | 1999-09-24 | 2004-07-20 | Sun Microsystems, Inc. | Using a master controller to manage threads and resources for scene-based rendering |
| US7184038B2 (en) * | 1999-09-24 | 2007-02-27 | Sun Microsystems, Inc. | Using render bin parallelism for rendering scene graph based graphics data |
| US6538656B1 (en) * | 1999-11-09 | 2003-03-25 | Broadcom Corporation | Video and graphics system with a data transport processor |
| WO2001040933A2 (en) * | 1999-12-06 | 2001-06-07 | Axiomatic Design Software, Inc. | Method and apparatus for producing software using axiomatic design |
| US7102651B1 (en) | 1999-12-22 | 2006-09-05 | Adobe Systems Incorporated | Hierarchical 2-D color compositing with blending mode and opacity controls at all levels |
| US7103581B1 (en) | 2000-01-13 | 2006-09-05 | Hewlett-Packard Development Company, L.P. | System and method for pricing print jobs |
| US6833840B2 (en) | 2000-02-14 | 2004-12-21 | Optibase Ltd | PROTO implementation in MPEG-4 |
| JP2001273520A (ja) * | 2000-03-23 | 2001-10-05 | Famotik Ltd | マルチメディアドキュメント統合表示システム |
| US6751655B1 (en) * | 2000-04-18 | 2004-06-15 | Sun Microsystems, Inc. | Method and apparatus for transport of scenegraph information across a network |
| US6990653B1 (en) * | 2000-05-18 | 2006-01-24 | Microsoft Corporation | Server-side code generation from a dynamic web page content file |
| US6717599B1 (en) * | 2000-06-29 | 2004-04-06 | Microsoft Corporation | Method, system, and computer program product for implementing derivative operators with graphics hardware |
| US20020019844A1 (en) | 2000-07-06 | 2002-02-14 | Kurowski Scott J. | Method and system for network-distributed computing |
| WO2002013002A2 (en) * | 2000-08-04 | 2002-02-14 | Intrinsic Graphics, Inc. | Development of graphics hardware and software |
| US6675230B1 (en) * | 2000-08-22 | 2004-01-06 | International Business Machines Corporation | Method, system, and program for embedding a user interface object in another user interface object |
| WO2002025471A2 (en) * | 2000-09-20 | 2002-03-28 | A2I, Inc. | Method and apparatus for structuring, maintaining, and using families of data |
| US20020078255A1 (en) * | 2000-10-17 | 2002-06-20 | Shankar Narayan | Pluggable instantiable distributed objects |
| US6636211B2 (en) * | 2000-12-15 | 2003-10-21 | Dassault Systemes | CAD/CAM feature tree with manipulatable 3D miniatures |
| US6732109B2 (en) * | 2001-01-31 | 2004-05-04 | The Eon Company | Method and system for transferring information between a user interface and a database over a global information network |
| WO2002076058A2 (en) * | 2001-03-21 | 2002-09-26 | Research In Motion Limited | Method and apparatus for providing content to media devices |
| FR2825556A1 (fr) * | 2001-05-31 | 2002-12-06 | Koninkl Philips Electronics Nv | Generation d'une description dans un langage de balisage d'une structure d'un contenu multimedia |
| US7069503B2 (en) * | 2001-06-04 | 2006-06-27 | Murata Kikai Kabushiki Kaisha | Device and program for structured document generation data structure of structural document |
| US7305011B2 (en) * | 2001-06-14 | 2007-12-04 | International Business Machines Corporation | Periodic broadcast and location of evolving media content with application to seminar and stroke media |
| US7203692B2 (en) | 2001-07-16 | 2007-04-10 | Sony Corporation | Transcoding between content data and description data |
| US7064766B2 (en) * | 2001-10-18 | 2006-06-20 | Microsoft Corporation | Intelligent caching data structure for immediate mode graphics |
| US7161599B2 (en) * | 2001-10-18 | 2007-01-09 | Microsoft Corporation | Multiple-level graphics processing system and method |
| US6919891B2 (en) * | 2001-10-18 | 2005-07-19 | Microsoft Corporation | Generic parameterization for a scene graph |
| BR0213454A (pt) | 2001-10-23 | 2004-10-13 | Samsung Electronics Co Ltd | Mìdia de armazenamento de informações, método para gravação de dados de av inlcuindo dados de áudio e dados de vìdeo em uma mìdia de armazenamento de informações, método e aparelho para reprodução de dados de av incluindo dados de áudio e dados de vìdeo |
| US7055092B2 (en) * | 2001-12-05 | 2006-05-30 | Canon Kabushiki Kaisha | Directory for multi-page SVG document |
| US20030110297A1 (en) * | 2001-12-12 | 2003-06-12 | Tabatabai Ali J. | Transforming multimedia data for delivery to multiple heterogeneous devices |
| US20040110490A1 (en) * | 2001-12-20 | 2004-06-10 | Steele Jay D. | Method and apparatus for providing content to media devices |
| KR100453225B1 (ko) * | 2001-12-26 | 2004-10-15 | 한국전자통신연구원 | 3차원 가상 현실 구현을 위한 클라이언트 시스템과 이를이용한 가상 현실 구현 방법 |
| US7076332B2 (en) * | 2002-01-18 | 2006-07-11 | National Instruments Corporation | System and method for invoking execution of a sequence of operations that includes motion control, machine vision, and data acquisition (DAQ) functionality |
| EP1472620A2 (en) * | 2002-02-04 | 2004-11-03 | Mobileaware Technologies Limited | Document transformation |
| US20030210267A1 (en) | 2002-05-13 | 2003-11-13 | Kylberg Robert Lee | Systems and methods for providing asynchronous client rendering in a graphical user interface (GUI) environment |
| WO2004008316A2 (en) * | 2002-07-11 | 2004-01-22 | Raytheon Company | System and method for asynchronous storage and playback of a system state |
| WO2004008303A2 (en) * | 2002-07-12 | 2004-01-22 | Raytheon Company | Scene graph based display for desktop applications |
| US20040216139A1 (en) * | 2002-08-21 | 2004-10-28 | Rhoda Merlin A. | System controlling test/measurement devices on a network using markup language documents and methods thereof |
| US7240346B2 (en) * | 2002-11-13 | 2007-07-03 | Microsoft Corporation | Method and system for accessing drawing resources |
| US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
| US7466315B2 (en) * | 2003-03-27 | 2008-12-16 | Microsoft Corporation | Visual and scene graph interfaces |
| US7126606B2 (en) * | 2003-03-27 | 2006-10-24 | Microsoft Corporation | Visual and scene graph interfaces |
| US7412455B2 (en) * | 2003-04-30 | 2008-08-12 | Dillon David M | Software framework that facilitates design and implementation of database applications |
| US8051389B2 (en) * | 2003-08-26 | 2011-11-01 | Hewlett-Packard Development Company, L.P. | Methods of displaying resources of overlapping but separate hierarchies |
| US7012606B2 (en) * | 2003-10-23 | 2006-03-14 | Microsoft Corporation | System and method for a unified composition engine in a graphics processing system |
-
2003
- 2003-03-27 US US10/401,717 patent/US7486294B2/en not_active Expired - Fee Related
- 2003-05-02 MY MYPI20031667A patent/MY143630A/en unknown
- 2003-05-06 AU AU2003204007A patent/AU2003204007B2/en not_active Ceased
- 2003-05-07 AT AT03010289T patent/ATE403198T1/de not_active IP Right Cessation
- 2003-05-07 DE DE60322505T patent/DE60322505D1/de not_active Expired - Lifetime
- 2003-05-07 EP EP03010289A patent/EP1462998B1/en not_active Expired - Lifetime
- 2003-05-08 ZA ZA200303553A patent/ZA200303553B/xx unknown
- 2003-05-12 CA CA2428471A patent/CA2428471C/en not_active Expired - Fee Related
- 2003-05-12 HU HU0301289A patent/HUP0301289A3/hu unknown
- 2003-05-13 IL IL155881A patent/IL155881A/en not_active IP Right Cessation
- 2003-05-14 NZ NZ525857A patent/NZ525857A/en not_active IP Right Cessation
- 2003-05-14 HR HR20030389A patent/HRP20030389B1/xx not_active IP Right Cessation
- 2003-05-15 TW TW092113259A patent/TWI336042B/zh not_active IP Right Cessation
- 2003-05-15 RO ROA200300414A patent/RO123609B1/ro unknown
- 2003-05-15 NO NO20032205A patent/NO328434B1/no not_active IP Right Cessation
- 2003-05-16 RU RU2003114531/09A patent/RU2321892C2/ru not_active IP Right Cessation
- 2003-05-16 TR TR2003/00696A patent/TR200300696A2/xx unknown
- 2003-05-16 BR BR0302004-5A patent/BR0302004A/pt not_active Application Discontinuation
- 2003-05-16 EC EC2003004609A patent/ECSP034609A/es unknown
- 2003-05-16 SG SG200303651A patent/SG127696A1/en unknown
- 2003-05-17 KR KR1020030031430A patent/KR100996738B1/ko not_active Expired - Fee Related
- 2003-05-19 JP JP2003141209A patent/JP4290477B2/ja not_active Expired - Fee Related
- 2003-05-19 CO CO03041493A patent/CO5460278A1/es not_active Application Discontinuation
- 2003-05-19 MX MXPA03004410A patent/MXPA03004410A/es active IP Right Grant
- 2003-07-02 CN CN031457630A patent/CN1534476B/zh not_active Expired - Fee Related
- 2003-08-28 GT GT200300184A patent/GT200300184A/es unknown
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| RO123609B1 (ro) | Sistem pentru procesarea informaţiilor grafice şi a altor informaţii video pentru afişarea pe sisteme de calculatoare | |
| US7126606B2 (en) | Visual and scene graph interfaces | |
| JP4796500B2 (ja) | ベクトルグラフィックスのためのマークアップ言語およびオブジェクトモデル | |
| CA2501516C (en) | Visual and scene graph interfaces | |
| TW200537395A (en) | Model 3D construction application program interface | |
| HK1067208A (en) | Visual and scene graph interfaces | |
| AU2004279179A1 (en) | Visual and scene graph interfaces |