NAME
Graphics : module Perl facilitant la creation d'objets graphiques complexes par une description simplifiee.
SYNOPSIS
use Graphics;
&GraphicsFunction(@params, ?option => value?, ...);
DESCRIPTION
Fonctions exportées
1. Création de composants graphiques
2. Calculs de formes géométriques complexes
- o roundedRectangleCoords()
- o hippodromeCoords()
- o ellipseCoords()
- o roundedCurveCoords()
- o polygonCoords()
- o polylineCoords()
- o curveLineCoords>()
- o pathLineCoords()
- o shiftPathCoords()
- o tabBoxCoords()
3. Création de relief et ombre portée
4. Fonctions géométriques de base
- o perpendicularPoint()
- o lineAngle()
- o vertexAngle()
- o arc_pts()
- o rad_point()
- o bezierCompute()
- o bezierSegment()
- o bezierPoint()
5. Gestion des ressources images
6. Gestion des couleurs
- o setGradiants()
- o zincItemPredominantColor()
- o ZnColorToRGB()
- o hexaRGBcolor()
- o createGraduate()
- o MedianColor()
- o LightingColor()
- o RGBtoLCH()
- o LCHtoRGB()
- o RGBtoHLS()
- o HLStoRGB()
1. Création de composants graphiques
- buildZincItem(widget, parentgroup, options);
-
Creation d'items de representations Zinc. Les objets graphiques generes peuvent etre complexes (geometrie, multi contours, operateur de forme, empilage d'items, reliefs, ombre portee, repetition, transformations...) mais sont decrits par des options geometriques ou de surfacage 2D 1/2 de haut niveau.
- Parametres :
-
- widget
-
<widget> identifiant du widget zinc.
- parentgroup
-
<tagOrId> identifiant de l'item group parent.
- Options :
-
- -itemtype => type
-
Specifie le(s) type(s) d'item(s) souhaite(s). Peut etre celui d'un item natif zinc (group, rectangle, arc, curve, text, icon), ou un 'metatype' permettant de specifier des curves 'particulieres'. Les sections coniques de ces metatypes (raccords ou arcs) seront simulees par des segments quadratiques de bezier. Ces metatypes sont :
- roundedrectangle
-
decrit par 2 cordonnees (haut-gauche et bas-droite du rectangle) et un rayon de raccord angulaire. Une liste optionnelle de realisation des raccords [0 = sans raccord|1 = avec raccord] permet de specifier pour chaque angle le type de raccord (angle ou arc).
- hippodrome
-
decrit par 2 cordonnees (haut-gauche et bas-droite du rectangle englobant). Si l'orientation n'est pas specifiee, le rayon de raccord sera egal a la moitie du plus petit cote . Une liste optionnelle de realisation des raccords permet de specifier pour chaque angle le type de raccord (angle ou arc).
- ellipse
-
decrit par 2 cordonnees (haut-gauche et bas-droite du rectangle englobant). Une liste optionnelle de realisation des raccords permet de specifier pour chaque angle le type de raccord (angle ou arc).
- polygone
-
polygone regulier a n cotes, (triangle equilateral, carre, pentagone, hexagone...) convexe ou en etoile. Le polygone sera inscrit dans un cercle dont le rayon est passe en parametres (un 2eme rayon 'interne' decrira un polygone etoile). Un rayon de raccord et une liste de realisation des raccords permettent des variantes interressantes.
- roundedcurve
-
curve multicontours a coins arrondis, de rayon raccord unique, pour specifier une forme quelconque.
- polyline
-
curve multicontours a coins arrondis. Le rayon de chaque raccord pouvant etre defini specifiquement.
- pathline
-
creation d'une ligne multisegments 'epaisse', realisee par 'decalage' par rapport a un path donne (largeur et sens de decalage [left|both|right] optionnels). Le contour transforme en surface avec l'item Zinc triangles permet d'appliquer un degrade de couleurs le long du trace (lineaire, transversal ou double).
- -coords => \@xy
-
<coords list> coordonnees geometriques ou de position de l'item.
- -metacoords => \%metatype_params
-
<hashtable> calcul des coordonnées de l'item par passage d'un [meta]type d'item différent de celui décrit par -itemtype. (ex. un pathline défini par un polygone)
<coords list> coordonnees geometriques ou de position de l'item.
- -params => \%zinc_attr
-
<hashtable> parametres zinc de l'item.
- -contours => \@list
-
<contours list> arguments zinc d'ajout de contours .
- -clip
-
<coords list or hashtable> clipping d'un item group.
- -items
-
<hashtable> table d'items contenus dans un item group. provoque un appel récursif de la fonction buildZincItem().
- -texture
-
<imagefile> ajout d'une texture a l'item.
- -pattern
-
<imagefile> ajout d'un pattern a l'item.
- -relief
-
<hash table> creation d'un relief a l'item a l'aide d'item zinc triangles. Invoque la fonction du module Graphics graphicItemRelief()
- -shadow
-
<hash table> creation d'une ombre portee a l'item. Invoque la fonction du module Graphics graphicItemShadow()
- -repeat
-
<hash table> repetition de l'item. Invoque la fonction du module Graphics repeatZincItem()
- -scale => scale factor or [xscale, yscale]
-
application d'une transformation zinc->scale a l'item
- -translate => [dx,dy]
-
application d'une transformation zinc->translate a l'item
- -rotate => <angle> (en degré)
-
application d'une transformation zinc->rotate a l'item
-
<tags list> liste de tags specifiques a ajouter aux parametre item -tags.
- -name
-
<string> nom de l'item.
- repeatZincItem(widget, item, options);
-
Répétition (clonage) d'un objet Zinc de representation.
- Parametres :
-
- widget
-
<widget> identifiant du widget zinc.
- item
-
<tagOrId> identifiant de l'item zinc a dupliquer.
- Options :
-
- -num => integer
-
Nombre de répétitions.
- -dxy => [dx, dy]
-
Paramètres de translation a appliquer entre 2 copies.
- -angle => <angle>
-
angle de rotation en degré a appliquer entre 2 copies.
- -copytag => <tag name>
-
ajout d'un tag indexé pour chaque copie.
- -params => \%zinc_attr
-
Paramétrage specialises de chaque copie
- buildTabBoxItem(widget, parentgroup, options);
-
Construit les items de représentation d'une boîte à onglets multi-pages. Le positionnement, la forme et la taille des onglets est définie automatiquement ou spécifiés par options. L'ajout de titres aux pages est possible. Des tags de base (intercalaires et titres) permettent de définir des interactions de sélection/navigation par bindings.
- Parametres :
-
- widget
-
<widget> identifiant du widget zinc.
- parentgroup
-
<tagOrId> identifiant de l'item group parent.
- Options :
-
- -coords => [[x0,y0],[x1,y1]]
-
<coords> coordonnées haut-gauche et bas-droite de la BoundingBox du tabBox.
- -numpages
-
<integer> nombre de pages du TabBox.
- -anchor => 'n'|'e'|'s'|'w'
-
ancrage nord, est, sud ou ouest des onglets (par défaut 'n')
- -alignment => 'left'|'center'|'right'
-
alignement gauche, centré ou droit des onglets sur l'ancrage (par défaut left)
- -tabwidth => 'auto'|<dimension>|<dimensionList>
-
longeur des onglets : 'auto' longeur répartie sur le coté, longeur absolue ou liste de longeurs ces dimensions sont autoajustées si dépassement. (par défaut 'auto').
- -tabheight => 'auto'|<dimension>
-
hauteur des onglets (par défaut 'auto')
- -tabshift => 'auto'|<dimension>
-
offset de biseau entre la base et le haut de l'onglet (par défaut 'auto').
- -overlap => 'auto'|<dimension>
-
offset de décalage entre 2 onglets (par défaut 'auto').
- -radius
-
<dimension> rayon des arrondis d'angle des onglets. (par défaut 0)
- -corners
-
<booleanList> liste d'application du raccord aux angles sous forme booleenne 0 = sans raccord 1 = avec raccord.
- -params => \%zinc_attr
-
<hashtable> parametres zinc de l'item.
- -texture
-
<imagefile> ajout d'une texture a l'item.
- -relief
-
<hash table> creation d'un relief pour les pages du tabBox. Invoque la fonction du module Graphics graphicItemRelief()
- -tabtitles
-
<hashtable> table de hash de définition des titres d'onglets (label, params).
- -pageitems
-
<hashtable> table d'items 'complémentaire' à réaliser pour chaque page. provoque un appel récursif de la fonction buildZincItem().
2. Calculs de formes géométriques complexes
- roundedRectangleCoords(coords, options);
-
Retourne les coordonnées (curve) d'un rectangle à coins arrondis
- hippodromeCoords(coords, options);
-
Retourne les coordonnées (curve) d'un hippodrome
- Parametres :
- Options :
-
- -orientation => <horizontal|vertical>
-
orientation forcée de l'hippodrome (sinon hauteur = plus petit coté).
- -corners => \@cornersList
-
Liste de réalisation des raccords de sommets [0 = pad de raccord (droit)| 1 = raccord circulaire]. (par défaut [1,1,1,1]).
- -trunc => <left|right|top|bottom|both>
-
troncatures des cotés circulaires de l'hippodrome.
- ellipseCoords(coords, options);
-
Retourne les coordonnées (curve) d'une ellipse
- roundedCurveCoords(coords, options);
-
Retourne les coordonnées d'une curve à coins arrondis.
- polygonCoords(coords, options);
-
Retourne les coordonnées d'un polygone régulier à n cotés ou d'une étoile à n branches. Le polygone sera inscrit dans un cercle de rayon -radius, un 2ème rayon interne décrira les sommets interne de l'étoile. Raccords circulaires optionnels des sommets du polygone/étoile
- Parametres :
- Options :
-
-numsides : <dimension> nombre de cote du polygone ou nombre de branches de l'etoile
-radius : <dimension> rayon du cercle exinscrit au polygone
-startangle : <angle> angle de depart du trace de la figure
-inner_radius : <dimension> rayon du cercle des points 'internes' de l'etoile
-corner_radius : <dimension> rayon des raccords d'angles
-corners : <booleanList> liste d'application du raccord aux angles sous forme booleenne 0 = sans raccord 1 = avec raccord. par defaut [1,1,1,1].
- polylineCoords(coords, options);
-
Retourne les coordonnées d'une polyline, ligne 'brisée' multi-segments avec raccords angulaires optionnels.
- Parametres :
- Options :
-
-radius : <dimension> rayon global de raccord des angles. par defaut 0
-corners : <booleanList> liste d'application du raccord circulaire aux angles sous forme booleenne 0 = sans raccord 1 = avec raccord. par defaut [1,1,...,1].
-corners_radius : <dimensionList> Liste des rayons de raccord des angles.
- curveLineCoords(coords, options);
-
ATTENTION FONCTION EN CHANTIER
Retourne les coordonnées curve (de surface) d'un stroke. la ligne est décrite le long d'un chemin et dessinée selon les attributs graphiques classiques 'stroke' (style d'épaisseur, d'extremité, de jointure, de tiret...)
- Parametres :
- Options :
-
-width : <dimension> épaisseur de la ligne. par defaut 1
-linecap : <'butt'|'round'|'square'> Forme des extrémités des tracés ouverts.
-linejoin : <'miter'|'round'|'bevel'> Forme des sommets des tracés.
-dasharray : <'none'|motifList> Spécification du tireté : none (aucun) ou liste de longueurs tiret,[espace],[tiret]... permettant de définir le dessin du tireté (par défaut none)
-dashoffset : <dimension> distance décalage de départ dans le dessin du tireté (par défaut 0)
- pathLineCoords(coords, %options);
-
retourne les coordonnées (triangles) d'une ligne multisegments 'epaisse', realisee par 'décalage' par rapport à un path donné (largeur et sens de décalage [out|center|in] optionnels).
- Parametres :
- Options :
-
-closed : <boolean> fermeture du tracé. par defaut 0
-shifting : <'out'|'center'|'in'> sens de décalage de l'épaisseur de contour : 'center' (1/2 décalage de chaque coté du path) 'out' (décalage externe) 'in' (décalage interne) par défaut 'center'.
-width : <dimension> Largeur du décalage de ligne (par défaut 2).
- shiftPathCoords(coords, %options);
-
retourne les coordonnées curve de 'décalage' par rapport à un path donné.
- tabBoxCoords(coords, options);
-
Retourne les coordonnées de construction d'un TabBox (boîte à onglets) : liste de curve décrivant les 'pages' du TabBox et coordonnées de position des titres onglets.
- Parametres :
- Options :
-
-numpages : <integer> nombre de pages du TabBox.
-anchor : <'n'|'e'|'s'|'w'> ancrage nord, est, sud ou ouest des onglets (par défaut 'n')
-alignment : <'left'|'center'|'right'> alignement gauche, centré ou droit des onglets sur l'ancrage (par défaut left)
-tabwidth : 'auto'|<dimension|dimensionList> longeur des onglets : 'auto' longeur répartie sur le coté, longeur absolue ou liste de longeurs ces dimensions sont autoajustées si dépassement. (par défaut 'auto').
-tabheight : 'auto'|<dimension> hauteur des onglets (par défaut 'auto')
-tabshift : 'auto'<dimension> offset de biseau entre la base et le haut de l'onglet (par défaut 'auto').
-overlap : 'auto'<dimension> offset de décalage entre 2 onglets (par défaut 'auto').
-radius : <dimension> rayon des arrondis d'angle des onglets. (par défaut 0)
-corners : <booleanList> liste d'application du raccord aux angles sous forme booleenne 0 = sans raccord 1 = avec raccord.
3. Création de reliefs et ombre portée
- graphicItemRelief(widget, item, %options);
-
Construit un relief à l'item géometrique (qui peut etre multicontours) en utilisant des items zinc triangles. Ce relief de type 'embossage' de forme possede un profil (flat ou rounded) et dérive en luminosite la couleur dominante de l'item (ou une couleur donnée) suivant l'orientation d'éclairage global zinc -lighangle (ou un angle de lumière donné).
- Parametres :
-
- widget
-
identifiant du widget zinc.
- item
-
identifiant de l'item zinc à mettre en relief.
- Options :
-
-closed : <boolean> fermeture (de forme) du relief (par défaut 1).
-profil : <'flat'|'rounded'> type de profil du relief (par défaut 'rounded').
-relief : <'raised'|'sunken'> sens de l'embossage (par defaut 'raised').
-side : <outside|inside> position externe ou interne du relief (defaut 'inside').
-color : <color> couleur de base du relief (défaut couleur dominante de l'item).
-smoothed : <boolean> lissage des 'facettes' du relief (par defaut 1).
-lightangle : <angle> angle de la lumiere (par defaut attribut -lightangle du widget).
-width : <dimension> largeur du 'contour' relief.
-fine : <boolean> mode precision courbe de bezier (par defaut 0 : auto-ajustee).
- graphicItemShadow(widget, item, %options);
-
Cree une ombre portee a l'item geometrique (qui peut etre multicontours) en utilisant des items zinc triangles et curve. Cette ombre correspond a une projection de la forme en fonction d'une distance (par defaut 10) d'une orientation lumineuse (par defaut la valeur globale -lightangle du widget) et d'un 'grossissement' (par defaut 0). Une largeur 'width' de perimetre de diffusion/diffraction lumineuse (par defaut 4) qui permet de lisser le passage de l'ombre au fond, une couleur (par defaut black) et une opacite (par defaut 50) completent la specification.
Parametres :
widget : <widget> identifiant du widget zinc
item : <tagOrId> identifiant de l'item zinc
Options :
-opacity : <percent> poucentage d'opacite de l'ombre (par defaut 50).
-distance : <dimension> distance de projection de l'ombre (par defaut 10).
-enlarging : <dimension> 'grossissement' cone de projection (defaut 0).
-color : <color> couleur de l'ombre (par defaut black).
-lightangle : <angle> angle de la lumiere (par defaut attribut -lightangle du widget).
-width : <dimension> largeur du perimetre de diffusion/diffraction (par defaut 4).
4. Fonctions géométriques de base
- perpendicularPoint(point, line);
-
retourne les coordonnées du point perpendiculaire abaissé d'un point sur une ligne.
- lineAngle(startpoint, endpoint);
-
retourne l'angle formée par un vecteur, s'utilise aussi pour connaitre l'angle 'circulaire' d'un point par rapport à un centre de référence.
- lineNormal(startpoint, endpoint);
-
retourne la valeur d'angle perpendiculaire à un vecteur (utilisée par exemple pour mesurer l'incidence de lumière d'une facette).
- vertexAngle(point0, point1, point2);
-
retourne la valeur de l'angle formé par trois points ainsi que la valeur d'angle de la bisectrice de l'angle (fonction utilisé pour les calculs de décalages de path.
- arc_pts(center, radius, %options);
-
Calcul des points constitutifs d'un arc
- rad_point(center, radius, angle);
-
Retourne le point circulaire défini par centre-rayon-angle.
- bezierSegment(coords, %options);
-
Calcul d'une approximation de segment (Quadratique ou Cubique) de bezier.
- bezierPoint(t, coords);
-
Calcul d'un point du segment (Quadratique ou Cubique) de bezier. t représentation du temps (de 0 à 1). coords = (P1, C1, <C1>, P2) liste des points définissant le segment de bezier P1 et P2 : extémités du segment et pts situés sur la courbe C1 <C2> : point(s) de contrôle du segment
courbe bezier niveau 2 sur (P1, P2, P3) P(t) = (1-t)²P1 + 2t(1-t)P2 + t²P3
courbe bezier niveau 3 sur (P1, P2, P3, P4) P(t) = (1-t)³P1 + 3t(1-t)²P2 + 3t²(1-t)P3 + t³P4
- bezierCompute(coords, %options);
-
Calcul d'une approximation auto-ajustée de segment (Quadratique ou Cubique) de bezier. l'approximation se fait par subdivision successive de la courbe jusqu'à atteindre une distance avec la courbe théorique <= à la précision passée par option (par défaut 0.2).
5. Gestion des ressources images
- getPattern(filename, %options);
-
retourne et partage la ressource image bitmap en l'initialisant et la stockant si première utilisation.
- getTexture(widget, filename, %options);
-
retourne et partage la ressource image texture en l'initialisant et la stockant si première utilisation.
- getImage(widget, filename, %options);
-
retourne et partage la ressource image en l'initialisant et la stockant si première utilisation.
- init_pixmaps(widget, filenames, %options);
-
Initialise et stocke un ensemble d'images.
6. Gestion des couleurs
- setGradients(widget, gradients);
-
Création de gradiants nommés Zinc
- zincItemPredominantColor(widget, item);
-
retourne la couleur dominante d'un item ('barycentre' gradiant fillcolor).
- medianColor(color1, color2, rate);
-
calcul d'une couleur intermédiaire défini par un ratio ($rate) entre 2 couleurs.
- createGraduate(widget, steps, refcolors, repeat);
-
création d'un jeu de couleurs intermédiaires (dégradé) entre n couleurs.
- Parametres :
-
- widget
-
<widget> identifiant du widget Zinc
- steps
-
<integer> nombre totale de couleurs retournées.
- refcolors
-
<colorList> liste de couleurs servant à créer le dégradé.
- repeat
-
<integer> répétition de chaque couleur utilisé par exemple pour triangles path où la couleur est répétée 2 fois (par défaut 1).
- lightingColor(color, newL);
-
Modification d'une couleur par sa composante luminosité (exemple relief).
- ZnColorToRGB(zncolor);
-
conversion d'une couleur Zinc hexa au format RGBA (255,255,255,100).
- RGBtoLCH(r, g, b);
-
conversion d'une couleur de l'espace RGB à l'espace CIE LCH°.
- LCHtoRGB(L, C, H);
-
conversion d'une couleur de l'espace CIE LCH° à l'espace RGB.
- RGBtoHLS(r, g, b);
-
conversion d'une couleur de l'espace RGB à l'espace HLS.
- HLStoRGB(H, L, S);
-
conversion d'une couleur de l'espace HLS à l'espace RGB.
- hexaRGBcolor(r, g, b, a);
-
conversion d'une couleur RGBA (255,255,255,100) au format Zinc '#ffffff'.
EXEMPLE
my %gradset = ( 'gdlens' => '=radial -15 -20|#ffb7b7;70|#bd6622;90', 'gdstar' => '=radial -15 -20|#ffb7b7;50|#bd6622;90');
my %starstyle => ( # table hash parametres et options -itemtype => 'group', -coords => [250, 250], -params => {-priority => 90, -tags => ['starlens', 'move'], -sensitive => 1, -atomic => 1, }, -items => { 'lens' => {-itemtype => 'hippodrome', -coords => [[-200, -200], [200, 200]], -params => {-closed => 1, -filled => 1, -fillcolor => 'gdlens', -linewidth => 1.5, -linecolor => '#440000', -priority => 10, }, -relief => {-width => 14, -profil => 'rounded', -lightangle => 135, }, -shadow => {-distance => 20, -width => 18, -lightangle => 135, -opacity => 40, -enlarging => 6, }, }, 'star' => {-itemtype => 'polygone', -coords => [0, 0], -numsides => 5, -radius => 180, -inner_radius => 70, -corner_radius => 10, -startangle => 270, -corners => [0,1,0,1,0,1,0,1,0,1], -params => {-filled => 1, -fillcolor => 'gradstar', -linewidth => 1, -linecolor => '#330000', -priority => 20, }, -relief => {-width => 10, -profil => 'rounded', -side => 'outside', -relief => 'sunken', }, }, }, );
&setGradients($widget, \%gradset);
my $star = &buildZincItem($zinc, $topgroup, \%starstyle);
AUTEURS
Jean-Luc Vinot <vinot@cena.fr>
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 18:
Non-ASCII character seen before =encoding in 'exportées'. Assuming CP1252