Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Draw - záložka prvku PmiCanvas

Popis:
Definice algoritmů (JavaScript) pro kreslící událost onDraw, která umožňuje kreslení do kreslící plochy CanvasCtx.
Konfigurační položky:
onDrawTato kreslící událost se vyvolá, když je potřeba překreslit grafiku tohoto prvku.
Parametry:
pEvent(Object) Reference na objekt popisující podrobněji informace o dané události.
pEvent.GetCtx(state)(Object) Vrací referenci na objekt CanvasCtx představující kreslící plochu. Význam parametru state:
0 - Získá se vždy prázdná kreslící plocha, případný existující obsah je vyprázdněn. Kreslí se vždy znovu všechno, co má být vidět.
1 - Získá se kreslící plocha v aktuálním stavu, takže případný existující obsah zůstane zachován. Takto je umožněno přírustkové kreslení, například průběh veličiny, kdy se kreslí jenom nový bod. To, zda kreslící plocha je neinicializovaná (prázdná) nebo už obsahuje grafický obsah z minula se dá poznat pomocí metody pEvent.CtxExt.isReset().
pEvent.GetVar()(Object) Vrací referenci na proměnnou grafického prvku v záložce Proměnné se zadaným jménem name. Viz PmiItem.Vars.
pEvent.GetParentVar()(Object) Vrací referenci na proměnnou rodičovského grafického prvku v záložce Proměnné se zadaným jménem name. Musí být povolen konfigurátor V onDraw se bude používat metoda pEvent.GetParentVar(), aby byly přístupné proměnné rodičovského prvku. Viz PmiItem.Vars.
pEvent.CtxDx(Long) Šířka kreslící plochy (v pixelech). Kreslící plocha má stejný rozměr jako prvek PmiCanvas.
pEvent.CtxDy(Long) Výška kreslící plochy (v pixelech).
pEvent.CtxExt(Object) Reference na rozšiřující objekt CanvasCtxExt
pEvent.Methods(Object) Uživatelské metody kreslení.
pEvent.ViewerType(Long) Příznak, zda je obraz v lokální aplikaci PROMOTIC nebo ve WEB prohlížeči.

Hodnota je stejná jako ve vlastnosti PmiRoot.ClientType. Ve scriptu události onDraw však objekt PmiRoot není přístupný.

Pomocné metodyProtože některé kresby mohou být složité, je lepší kresbu rozdělit do pomocných projektanských metod kreslení, které lze vytvořit na stejné úrovni jako je událost onDraw.

Pomocné metody kreslení mají stejné parametry jako událost onDraw a navíc mohou mít ještě své parametry. Je doporučeno aby metody měly navíc alespoň jeden parametr ctx, aby si každá metoda nemusela získávat ctx sama - viz příklad:

 

Jedna metoda kreslí stupnici (název například DrawScale), jiná metoda kreslí průběh křivky (název například DrawCurve). V události onDraw pak může být jen jednoduchý skript, který volá dané metody.

var ctx = pEvent.GetCtx(0);
pEvent.Methods.DrawScale(ctx);
pEvent.Methods.DrawCurve(ctx);
Poznámka:
Algoritmy pro kreslení se zde píší vždy v jazyce JavaScript, bez ohledu na nastavení konfigurátoru "Nastavení skriptovacího jazyka" v objektu PmPanel.
 

Grafický prvek PmiCanvas zajistí automatické vyvolání kreslící události onDraw pro překreslení kreslící plochy CanvasCtx v případě potřeby:

1) Když je kreslící plocha neinicializovaná (prázdná) po otevření obrazu, po změně velikosti grafického prvku PmiCanvas nebo po zavolání metody CtxReset. V tomto případě je kreslící plocha vždy prázdná (průhledná).
2) Když se změnily vstupní proměnné (Proměnné) grafického prvku PmiCanvas. Kreslící metoda si může vyžádat buď existující kreslící plochu viz pEvent.GetCtx(1) nebo (běžnější případ) neinicializovanou (prázdnou) kreslící plochu viz pEvent.GetCtx(0).
3) Když se změnily vstupní proměnné (Proměnné) rodičovského grafického prvku (pozadí) PmiCanvas (platí pro vnořený prvek - popředí).

Kreslící plocha se tedy překreslí v události onDraw jenom při změně. Pokud nedojde ke změně, není nutno kreslící plochu skriptem překreslovat a používá se jeho zapamatovaná hodnota. Událost onDraw má přístup pouze k hodnotám lokálních proměnných (Proměnné) prvku PmiCanvas, které tak představují datové rozhraní pro kreslící funkci. Dále může využívat objekt Pm a objekt kreslící plochy CanvasCtx. Skriptové rozhraní objektu CanvasCtx zpřístupňuje většinu metod a vlastností pro 2D kreslení používaných v HTML5 v tágu <canvas>.

Viz také:
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice