aboutsummaryrefslogtreecommitdiff
path: root/Perl/Zinc
diff options
context:
space:
mode:
authorvinot2004-04-02 13:03:08 +0000
committervinot2004-04-02 13:03:08 +0000
commita158f3bc82b10d9e6a65af6ccbceeff311f17812 (patch)
tree7a8bf0f027dfdd7a5e3110e4ef04e82275ec4a2f /Perl/Zinc
parent070b911dcf5c5a202fb0d802176eb4ddb16bdc8c (diff)
downloadtkzinc-a158f3bc82b10d9e6a65af6ccbceeff311f17812.zip
tkzinc-a158f3bc82b10d9e6a65af6ccbceeff311f17812.tar.gz
tkzinc-a158f3bc82b10d9e6a65af6ccbceeff311f17812.tar.bz2
tkzinc-a158f3bc82b10d9e6a65af6ccbceeff311f17812.tar.xz
version initiale doc perl
Diffstat (limited to 'Perl/Zinc')
-rw-r--r--Perl/Zinc/Graphics.pod1749
1 files changed, 1749 insertions, 0 deletions
diff --git a/Perl/Zinc/Graphics.pod b/Perl/Zinc/Graphics.pod
new file mode 100644
index 0000000..579b6d7
--- /dev/null
+++ b/Perl/Zinc/Graphics.pod
@@ -0,0 +1,1749 @@
+
+=head1 NAME
+
+Graphics : module Perl facilitant la creation d'objets graphiques complexes
+par une description simplifiee.
+
+
+=head1 SYNOPSIS
+
+use Graphics;
+
+&GraphicsFunction(@params, ?option => value?, ...);
+
+=head1 DESCRIPTION
+
+Z<>
+
+=head2 Fonctions exportées
+
+=head3 1. Création de composants graphiques
+
+=over
+
+=item B<o> buildZincItem(Z<>)
+
+=item B<o> repeatZincItem(Z<>)
+
+=item B<o> buildTabBoxItem(Z<>)
+
+=back
+
+=head3 2. Calculs de formes géométriques complexes
+
+=over
+
+=item B<o> roundedRectangleCoords(Z<>)
+
+=item B<o> hippodromeCoords(Z<>)
+
+=item B<o> ellipseCoords(Z<>)
+
+=item B<o> roundedCurveCoords(Z<>)
+
+=item B<o> polygonCoords(Z<>)
+
+=item B<o> polylineCoords(Z<>)
+
+=item B<o> curveLineCoords>(Z<>)
+
+=item B<o> pathLineCoords(Z<>)
+
+=item B<o> shiftPathCoords(Z<>)
+
+=item B<o> tabBoxCoords(Z<>)
+
+=back
+
+=head3 3. Création de relief et ombre portée
+
+=over
+
+=item B<o> graphicItemRelief(Z<>)
+
+=item B<o> graphicItemShadow(Z<>)
+
+=back
+
+=head3 4. Fonctions géométriques de base
+
+=over
+
+=item B<o> perpendicularPoint(Z<>)
+
+=item B<o> lineAngle(Z<>)
+
+=item B<o> vertexAngle(Z<>)
+
+=item B<o> arc_pts(Z<>)
+
+=item B<o> rad_point(Z<>)
+
+=item B<o> bezierCompute(Z<>)
+
+=item B<o> bezierSegment(Z<>)
+
+=item B<o> bezierPoint(Z<>)
+
+=back
+
+=head3 5. Gestion des ressources images
+
+=over
+
+=item B<o> getPattern(Z<>)
+
+=item B<o> getTexture(Z<>)
+
+=item B<o> getImage(Z<>)
+
+=item B<o> init_pixmaps(Z<>)
+
+=back
+
+=head3 6. Gestion des couleurs
+
+=over
+
+=item B<o> setGradiants(Z<>)
+
+=item B<o> zincItemPredominantColor(Z<>)
+
+=item B<o> ZnColorToRGB(Z<>)
+
+=item B<o> hexaRGBcolor(Z<>)
+
+=item B<o> createGraduate(Z<>)
+
+=item B<o> MedianColor(Z<>)
+
+=item B<o> LightingColor(Z<>)
+
+=item B<o> RGBtoLCH(Z<>)
+
+=item B<o> LCHtoRGB(Z<>)
+
+=item B<o> RGBtoHLS(Z<>)
+
+=item B<o> HLStoRGB(Z<>)
+
+=back
+
+Z<>
+
+=head2 1. Création de composants graphiques
+
+
+=over
+
+=item B<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.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<parentgroup>
+
+<tagOrId> identifiant de l'item group parent.
+
+
+=back
+
+
+=item B<Options> :
+
+
+=over
+
+=item B<-itemtype> => type
+
+Specifie le(s) type(s) d'item(s) souhaite(s). Peut etre celui d'un item
+natif zinc (B<group>, B<rectangle>, B<arc>, B<curve>, B<text>, B<icon>),
+ou un B<'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 :
+
+=over
+
+=item 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).
+
+=item 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).
+
+=item 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).
+
+=item 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.
+
+=item roundedcurve
+
+curve multicontours a coins arrondis, de rayon raccord unique,
+pour specifier une forme quelconque.
+
+=item polyline
+
+curve multicontours a coins arrondis. Le rayon de chaque raccord pouvant etre defini
+specifiquement.
+
+=item 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).
+
+=back
+
+
+=item B<-coords> => \@xy
+
+<coords list> coordonnees geometriques ou de position de l'item.
+
+=item B<-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.
+
+=item B<-params> => \%zinc_attr
+
+<hashtable> parametres zinc de l'item.
+
+=item B<-contours> => \@list
+
+<contours list> arguments zinc d'ajout de contours .
+
+=item B<-clip>
+
+<coords list or hashtable> clipping d'un item group.
+
+=item B<-items>
+
+<hashtable> table d'items contenus dans un item group.
+provoque un appel récursif de la fonction buildZincItem().
+
+=item B<-texture>
+
+<imagefile> ajout d'une texture a l'item.
+
+=item B<-pattern>
+
+<imagefile> ajout d'un pattern a l'item.
+
+=item B<-relief>
+
+<hash table> creation d'un relief a l'item a l'aide d'item zinc triangles.
+Invoque la fonction du module Graphics graphicItemRelief()
+
+=item B<-shadow>
+
+<hash table> creation d'une ombre portee a l'item.
+Invoque la fonction du module Graphics graphicItemShadow()
+
+=item B<-repeat>
+
+<hash table> repetition de l'item.
+Invoque la fonction du module Graphics repeatZincItem()
+
+=item B<-scale> => scale factor or [xscale, yscale]
+
+application d'une transformation zinc->scale a l'item
+
+=item B<-translate> => [dx,dy]
+
+ application d'une transformation zinc->translate a l'item
+
+=item B<-rotate> => <angle> (en degré)
+
+application d'une transformation zinc->rotate a l'item
+
+=item B<-addtags>
+
+<tags list> liste de tags specifiques a ajouter aux parametre item -tags.
+
+=item B<-name>
+
+<string> nom de l'item.
+
+=back
+
+=back
+
+Z<>
+
+=item B<repeatZincItem>(widget, item, options);
+
+Répétition (clonage) d'un objet Zinc de representation.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<item>
+
+<tagOrId> identifiant de l'item zinc a dupliquer.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-num> => integer
+
+Nombre de répétitions.
+
+=item B<-dxy> => [dx, dy]
+
+Paramètres de translation a appliquer entre 2 copies.
+
+=item B<-angle> => <angle>
+
+angle de rotation en degré a appliquer entre 2 copies.
+
+=item B<-copytag> => <tag name>
+
+ajout d'un tag indexé pour chaque copie.
+
+=item B<-params> => \%zinc_attr
+
+Paramétrage specialises de chaque copie
+
+
+=back
+
+=back
+
+Z<>
+
+=item B<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.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<parentgroup>
+
+<tagOrId> identifiant de l'item group parent.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-coords> => [[x0,y0],[x1,y1]]
+
+<coords> coordonnées haut-gauche et bas-droite de la BoundingBox du tabBox.
+
+=item B<-numpages>
+
+<integer> nombre de pages du TabBox.
+
+=item B<-anchor> => 'n'|'e'|'s'|'w'
+
+ancrage nord, est, sud ou ouest des onglets (par défaut 'n')
+
+=item B<-alignment> => 'left'|'center'|'right'
+
+alignement gauche, centré ou droit des onglets sur l'ancrage (par défaut left)
+
+=item B<-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').
+
+=item B<-tabheight> => 'auto'|<dimension>
+
+hauteur des onglets (par défaut 'auto')
+
+=item B<-tabshift> => 'auto'|<dimension>
+
+offset de biseau entre la base et le haut de l'onglet (par défaut 'auto').
+
+=item B<-overlap> => 'auto'|<dimension>
+
+offset de décalage entre 2 onglets (par défaut 'auto').
+
+=item B<-radius>
+
+<dimension> rayon des arrondis d'angle des onglets. (par défaut 0)
+
+=item B<-corners>
+
+<booleanList> liste d'application du raccord aux angles sous forme booleenne
+0 = sans raccord 1 = avec raccord.
+
+=item B<-params> => \%zinc_attr
+
+<hashtable> parametres zinc de l'item.
+
+=item B<-texture>
+
+<imagefile> ajout d'une texture a l'item.
+
+=item B<-relief>
+
+<hash table> creation d'un relief pour les pages du tabBox.
+Invoque la fonction du module Graphics graphicItemRelief()
+
+=item B<-tabtitles>
+
+<hashtable> table de hash de définition des titres d'onglets (label, params).
+
+=item B<-pageitems>
+
+<hashtable> table d'items 'complémentaire' à réaliser pour chaque page.
+provoque un appel récursif de la fonction buildZincItem().
+
+
+=back
+
+=back
+
+=back
+
+Z<>
+
+=head2 2. Calculs de formes géométriques complexes
+
+=over
+
+=item B<roundedRectangleCoords>(coords, options);
+
+Retourne les coordonnées (curve) d'un rectangle à coins arrondis
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],[x1,y1]]
+
+<coordList> coordonnées haut-gauche et bas-droite du rectangle.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-radius>
+
+<dimension> rayon de raccord circulaire des angles.
+
+=item B<-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]).
+
+=back
+
+=back
+
+Z<>
+
+=item B<hippodromeCoords>(coords, options);
+
+Retourne les coordonnées (curve) d'un hippodrome
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],[x1,y1]]
+
+<coordList> coordonnées haut-gauche et bas-droite du rectangle exinscrit à l'hippodrome.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-orientation> => <horizontal|vertical>
+
+orientation forcée de l'hippodrome (sinon hauteur = plus petit coté).
+
+=item B<-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]).
+
+=item B<-trunc> => <left|right|top|bottom|both>
+
+troncatures des cotés circulaires de l'hippodrome.
+
+=back
+
+=back
+
+Z<>
+
+=item B<ellipseCoords>(coords, options);
+
+Retourne les coordonnées (curve) d'une ellipse
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],[x1,y1]]
+
+<coordList> coordonnées haut-gauche et bas-droite du rectangle exinscrit.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-corners> => \@cornersList
+
+Liste de réalisation des quadrants [0 = angle droit| 1 = raccord d'ellipse].
+(par défaut [1,1,1,1]).
+
+=back
+
+=back
+
+Z<>
+
+=item B<roundedCurveCoords>(coords, options);
+
+Retourne les coordonnées d'une curve à coins arrondis.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],...[xn,yn]]
+
+<coordList> coordonnées de la curve
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-radius> : <dimension>
+rayon de raccord des angles. par defaut 0
+
+B<-corners> : <booleanList>
+liste d'application du raccord circulaire aux angles sous forme booleenne
+0 = sans raccord 1 = avec raccord. par defaut [1,1,...,1].
+
+=back
+
+=back
+
+Z<>
+
+=item B<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
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [x0,y0]
+
+<coords> coordonnées du centre du cercle exinscrit au polygone/étoile
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-numsides> : <dimension> nombre de cote du polygone ou nombre de branches de l'etoile
+
+B<-radius> : <dimension> rayon du cercle exinscrit au polygone
+
+B<-startangle> : <angle> angle de depart du trace de la figure
+
+B<-inner_radius> : <dimension> rayon du cercle des points 'internes' de l'etoile
+
+B<-corner_radius> : <dimension> rayon des raccords d'angles
+
+B<-corners> : <booleanList> liste d'application du raccord aux angles sous forme booleenne
+0 = sans raccord 1 = avec raccord. par defaut [1,1,1,1].
+
+=back
+
+=back
+
+Z<>
+
+=item B<polylineCoords>(coords, options);
+
+Retourne les coordonnées d'une polyline, ligne 'brisée' multi-segments
+avec raccords angulaires optionnels.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],...[xn,yn]]
+
+<coordList> liste de coordonnées des sommets de la polyline
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-radius> : <dimension>
+rayon global de raccord des angles. par defaut 0
+
+B<-corners> : <booleanList>
+liste d'application du raccord circulaire aux angles sous forme booleenne
+0 = sans raccord 1 = avec raccord. par defaut [1,1,...,1].
+
+B<-corners_radius> : <dimensionList>
+Liste des rayons de raccord des angles.
+
+=back
+
+=back
+
+Z<>
+
+=item B<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...)
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],...[xn,yn]]
+
+<coordList> coordonnées de la curve
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-width> : <dimension>
+épaisseur de la ligne. par defaut 1
+
+B<-linecap> : <'butt'|'round'|'square'>
+Forme des extrémités des tracés ouverts.
+
+B<-linejoin> : <'miter'|'round'|'bevel'>
+Forme des sommets des tracés.
+
+B<-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)
+
+B<-dashoffset> : <dimension>
+distance décalage de départ dans le dessin du tireté (par défaut 0)
+
+=back
+
+=back
+
+Z<>
+
+=item B<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).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],...[xn,yn]]
+
+<coordList> liste de coordonnées du path
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-closed> : <boolean>
+fermeture du tracé. par defaut 0
+
+B<-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'.
+
+B<-width> : <dimension>
+Largeur du décalage de ligne (par défaut 2).
+
+=back
+
+=back
+
+Z<>
+
+=item B<shiftPathCoords>(coords, %options);
+
+retourne les coordonnées curve de 'décalage' par rapport à un path donné.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],...[xn,yn]]
+
+<coordList> liste de coordonnées du path
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-closed> : <boolean>
+fermeture du tracé. par defaut 0
+
+B<-shifting> : <'out'|'in'>
+sens de décalage du path : 'out' (décalage externe) 'in' (décalage interne) par défaut 'out'.
+
+B<-width> : <dimension>
+Largeur du décalage de ligne (par défaut 1).
+
+=back
+
+=back
+
+Z<>
+
+=item B<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.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords> => [[x0,y0],[x1,y1]]
+
+<coords> coordonnées haut-gauche et bas-droite de la BoundingBox du tabBox.
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-numpages> : <integer> nombre de pages du TabBox.
+
+B<-anchor> : <'n'|'e'|'s'|'w'> ancrage nord, est, sud ou ouest des onglets (par défaut 'n')
+
+B<-alignment> : <'left'|'center'|'right'> alignement gauche, centré ou droit des onglets sur l'ancrage (par défaut left)
+
+B<-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').
+
+B<-tabheight> : 'auto'|<dimension> hauteur des onglets (par défaut 'auto')
+
+B<-tabshift> : 'auto'<dimension> offset de biseau entre la base et le haut de l'onglet (par défaut 'auto').
+
+B<-overlap> : 'auto'<dimension> offset de décalage entre 2 onglets (par défaut 'auto').
+
+B<-radius> : <dimension>
+rayon des arrondis d'angle des onglets. (par défaut 0)
+
+B<-corners> : <booleanList> liste d'application du raccord aux angles sous forme booleenne
+0 = sans raccord 1 = avec raccord.
+
+=back
+
+=back
+
+=back
+
+Z<>
+
+=head2 3. Création de reliefs et ombre portée
+
+Z<>
+
+=over
+
+=item B<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é).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+identifiant du widget zinc.
+
+=item B<item>
+
+identifiant de l'item zinc à mettre en relief.
+
+=back
+
+=item B<Options> :
+
+=over
+
+B<-closed> : <boolean> fermeture (de forme) du relief (par défaut 1).
+
+B<-profil> : <'flat'|'rounded'> type de profil du relief (par défaut 'rounded').
+
+B<-relief> : <'raised'|'sunken'> sens de l'embossage (par defaut 'raised').
+
+B<-side> : <outside|inside> position externe ou interne du relief (defaut 'inside').
+
+B<-color> : <color> couleur de base du relief (défaut couleur dominante de l'item).
+
+B<-smoothed> : <boolean> lissage des 'facettes' du relief (par defaut 1).
+
+B<-lightangle> : <angle> angle de la lumiere (par defaut attribut -lightangle du widget).
+
+B<-width> : <dimension> largeur du 'contour' relief.
+
+B<-fine> : <boolean> mode precision courbe de bezier (par defaut 0 : auto-ajustee).
+
+=back
+
+=back
+
+Z<>
+
+=item B<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.
+
+=over
+
+B<Parametres> :
+
+=over
+
+B<widget> : <widget> identifiant du widget zinc
+
+B<item> : <tagOrId> identifiant de l'item zinc
+
+=back
+
+B<Options> :
+
+=over
+
+B<-opacity> : <percent> poucentage d'opacite de l'ombre (par defaut 50).
+
+B<-distance> : <dimension> distance de projection de l'ombre (par defaut 10).
+
+B<-enlarging> : <dimension> 'grossissement' cone de projection (defaut 0).
+
+B<-color> : <color> couleur de l'ombre (par defaut black).
+
+B<-lightangle> : <angle> angle de la lumiere (par defaut attribut -lightangle du widget).
+
+B<-width> : <dimension> largeur du perimetre de diffusion/diffraction (par defaut 4).
+
+=back
+
+=back
+
+=back
+
+Z<>
+
+=head2 4. Fonctions géométriques de base
+
+Z<>
+
+=over
+
+=item B<perpendicularPoint>(point, line);
+
+retourne les coordonnées du point perpendiculaire abaissé d'un point sur une ligne.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<point> => [x, y]
+
+<coords> coordonnées du point de référence.
+
+=item B<line> => [[x0, y0],[x1, y1]]
+
+<coordsList> liste de coordonnées des deux points de la ligne de référence.
+
+=back
+
+=back
+
+Z<>
+
+
+=item B<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.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<startpoint> => [x, y]
+
+<coords> coordonnées du point de départ du segment (ou centre de référence).
+
+=item B<endpoint> => [x, y]
+
+<coords> coordonnées du point de fin du segment (ou point 'circulaire' de référence).
+
+=back
+
+=back
+
+Z<>
+
+=item B<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).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<startpoint> => [x, y]
+
+<coords> coordonnées du point de départ du segment (ou centre de référence).
+
+=item B<endpoint> => [x, y]
+
+<coords> coordonnées du point de fin du segment (ou point 'circulaire' de référence).
+
+=back
+
+=back
+
+Z<>
+
+=item B<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.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<point0> => [x, y]
+
+<coords> coordonnées du premier point de définition de l'angle.
+
+=item B<point1> => [x, y]
+
+<coords> coordonnées du deuxième point de définition de l'angle (sommet).
+
+=item B<point2> => [x, y]
+
+<coords> coordonnées du troisième point de définition de l'angle.
+
+
+=back
+
+=back
+
+Z<>
+
+=item B<arc_pts>(center, radius, %options);
+
+Calcul des points constitutifs d'un arc
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<center> => [x0,y0]
+
+<coords> coordonnées du centre de l'arc.
+
+=item B<radius>
+
+<dimension> rayon de l'arc.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-angle>
+
+<angle> angle de départ (en degré) de l'arc (par défaut 0)
+
+=item B<-extent>
+
+<angle> delta angulaire (en degré) de l'arc (par défaut 360)
+
+=item B<-step>
+
+<angle> pas de progression angulaire (en degré) de calcul des points (par défaut 10).
+
+=back
+
+=back
+
+Z<>
+
+=item B<rad_point>(center, radius, angle);
+
+Retourne le point circulaire défini par centre-rayon-angle.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<center> => [x0,y0]
+
+<coords> coordonnées du centre de l'arc.
+
+=item B<radius>
+
+<dimension> rayon de l'arc.
+
+=item B<angle>
+
+<angle> angle (en degré) du point de circonférence avec le centre du cercle.
+
+=back
+
+=back
+
+Z<>
+
+=item B<bezierSegment>(coords, %options);
+
+Calcul d'une approximation de segment (Quadratique ou Cubique) de bezier.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords>
+
+<coordsList> Liste de coordonnées des points définissant le segment de bezier.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-tunits>
+
+<integer> nombre pas de division des segments bezier (par défaut 20)
+
+=item B<-skipend>
+
+<boolean> ne pas retourner le dernier point du segment (pour chaînage de segments).
+
+=back
+
+=back
+
+Z<>
+
+=item B<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
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<t>
+
+<pourcent> (de 0 à 1) représentation du temps.
+
+=item B<coords>
+
+<coordsList> Liste de coordonnées des points définissant le segment de bezier.
+
+=back
+
+=back
+
+Z<>
+
+
+=item B<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).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<coords>
+
+<coordsList> Liste de coordonnées des points définissant le segment de bezier.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-precision>
+
+<dimension> seuil limite du calcul d'approche de la courbe (par défaut .2)
+
+=item B<-skipend>
+
+<boolean> ne pas retourner le dernier point du segment (pour chaînage de segments).
+
+=back
+
+=back
+
+=back
+
+Z<>
+
+=head2 5. Gestion des ressources images
+
+Z<>
+
+=over
+
+=item B<getPattern>(filename, %options);
+
+retourne et partage la ressource image bitmap en l'initialisant et la stockant si première utilisation.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<filename>
+
+<image filename> non du fichier bitmap pattern
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-storage>
+
+<hashtable> référence de la table de stockage privée des patterns.
+
+=back
+
+=back
+
+Z<>
+
+=item B<getTexture>(widget, filename, %options);
+
+retourne et partage la ressource image texture en l'initialisant et la stockant si première utilisation.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<filename>
+
+<imagefile> non du fichier image texture
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-storage>
+
+<hashtable> référence de la table de stockage privée des textures.
+
+=back
+
+=back
+
+Z<>
+
+=item B<getImage>(widget, filename, %options);
+
+retourne et partage la ressource image en l'initialisant et la stockant si première utilisation.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<filename>
+
+<imagefile> non du fichier image
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-storage>
+
+<hashtable> référence de la table de stockage privée des images.
+
+=back
+
+=back
+
+Z<>
+
+=item B<init_pixmaps>(widget, filenames, %options);
+
+Initialise et stocke un ensemble d'images.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget zinc.
+
+=item B<filenames>
+
+<imagefileList> Liste des fichier images à initialiser.
+
+=back
+
+=item B<Options> :
+
+=over
+
+=item B<-storage>
+
+<hashtable> référence de la table de stockage privée des images.
+
+=back
+
+=back
+
+=back
+
+Z<>
+
+=head2 6. Gestion des couleurs
+
+Z<>
+
+=over
+
+=item B<setGradients>(widget, gradients);
+
+Création de gradiants nommés Zinc
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget Zinc
+
+=item B<gradients>
+
+<hashtable> référence de la table de définition des gradiants zinc ('non' => 'zincGradient').
+
+=back
+
+=back
+
+Z<>
+
+=item B<zincItemPredominantColor>(widget, item);
+
+retourne la couleur dominante d'un item ('barycentre' gradiant fillcolor).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget Zinc
+
+=item B<item>
+
+<tagOrId> identifiant de l'item zinc.
+
+=back
+
+=back
+
+Z<>
+
+=item B<medianColor>(color1, color2, rate);
+
+calcul d'une couleur intermédiaire défini par un ratio ($rate) entre 2 couleurs.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<color1>
+
+<color> première couleur
+
+=item B<color2>
+
+<color> première couleur
+
+=item B<rate>
+
+<pourcent> (de 0 à 1) position de la couleur intermédiaire.
+
+=back
+
+=back
+
+Z<>
+
+=item B<createGraduate>(widget, steps, refcolors, repeat);
+
+création d'un jeu de couleurs intermédiaires (dégradé) entre n couleurs.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<widget>
+
+<widget> identifiant du widget Zinc
+
+=item B<steps>
+
+<integer> nombre totale de couleurs retournées.
+
+=item B<refcolors>
+
+<colorList> liste de couleurs servant à créer le dégradé.
+
+=item B<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).
+
+=back
+
+=back
+
+Z<>
+
+=item B<lightingColor>(color, newL);
+
+Modification d'une couleur par sa composante luminosité (exemple relief).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<color>
+
+<color> couleur au format zinc.
+
+=item B<newL>
+
+<pourcent> (de 0 à 1) nouvelle valeur de luminosité.
+
+=back
+
+=back
+
+Z<>
+
+=item B<ZnColorToRGB>(zncolor);
+
+conversion d'une couleur Zinc hexa au format RGBA (255,255,255,100).
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<zncolor>
+
+<color> couleur au format hexa zinc (#ffffff ou #ffffffffffff).
+
+=back
+
+=back
+
+Z<>
+
+=item B<RGBtoLCH>(r, g, b);
+
+conversion d'une couleur de l'espace RGB à l'espace CIE LCH°.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<r>
+
+<pourcent> (de 0 à 1) valeur de la composante rouge de la couleur RGB.
+
+=item B<g>
+
+<pourcent> (de 0 à 1) valeur de la composante verte de la couleur RGB.
+
+=item B<b>
+
+<pourcent> (de 0 à 1) valeur de la composante bleue de la couleur RGB.
+
+=back
+
+=back
+
+Z<>
+
+=item B<LCHtoRGB>(L, C, H);
+
+conversion d'une couleur de l'espace CIE LCH° à l'espace RGB.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<L>
+
+<pourcent> (de 0 à 1) valeur de la composante luminosité de la couleur CIE LCH.
+
+=item B<C>
+
+C : <pourcent> (de 0 à 1) valeur de la composante saturation de la couleur CIE LCH
+
+=item B<H>
+
+H : <pourcent> (de 0 à 1) valeur de la composante teinte de la couleur CIE LCH
+
+=back
+
+=back
+
+Z<>
+
+=item B<RGBtoHLS>(r, g, b);
+
+conversion d'une couleur de l'espace RGB à l'espace HLS.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<r>
+
+<pourcent> (de 0 à 1) valeur de la composante rouge de la couleur RGB.
+
+=item B<g>
+
+<pourcent> (de 0 à 1) valeur de la composante verte de la couleur RGB.
+
+=item B<b>
+
+<pourcent> (de 0 à 1) valeur de la composante bleue de la couleur RGB.
+
+=back
+
+=back
+
+Z<>
+
+=item B<HLStoRGB>(H, L, S);
+
+conversion d'une couleur de l'espace HLS à l'espace RGB.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<H>
+
+<pourcent> (de 0 à 1) valeur de la composante teinte de la couleur HLS.
+
+=item B<L>
+
+C : <pourcent> (de 0 à 1) valeur de la composante luminosité de la couleur HLS.
+
+=item B<S>
+
+H : <pourcent> (de 0 à 1) valeur de la composante saturation de la couleur HLS.
+
+=back
+
+=back
+
+Z<>
+
+=item B<hexaRGBcolor>(r, g, b, a);
+
+conversion d'une couleur RGBA (255,255,255,100) au format Zinc '#ffffff'.
+
+=over
+
+=item B<Parametres> :
+
+=over
+
+=item B<r>
+
+<colorComposant> (0 à 255) composante rouge de la couleur rgba.
+
+=item B<g>
+
+<colorComposant> (0 à 255) composante verte de la couleur rgba.
+
+=item B<b>
+
+<colorComposant> (0 à 255) composante bleue de la couleur rgba.
+
+=item B<a>
+
+<colorComposant> (0 à 255) composante alpha de la couleur rgba.
+
+=back
+
+=back
+
+Z<>
+
+=back
+
+Z<>
+
+
+=head1 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);
+
+=head1 AUTEURS
+
+Jean-Luc Vinot <vinot@cena.fr>