Style : gestion des contours

Introduction

Dans GeOxygene, c’est la norme SLD qui est implémentée pour représenter les objets (géo-)graphiques.

L’implémentation est réalisée en Java, la représentation se fait donc grâce à java2D.

Deux attributs sont utilisés pour définir la forme des contours : Join et Cap.

L’attribut Join

Join est utilisé pour définir les jointures entre segments. Il a trois valeurs possibles :

Mitre - BasicStroke.JOIN_MITER = 0 Round - BasicStroke.JOIN_ROUND = 1 Bevel - BasicStroke.JOIN_BEVEL = 2
../../_images/ContourPolygoneBasicStrokeJOINMITER0_.png
../../_images/ContourPolygoneBasicStrokeJOINMITER1.png
../../_images/ContourPolygoneBasicStrokeJOINMITER2.png

L’attribut Cap

Cap est utilise pour définir les extrémités des segments. Il a trois valeurs possibles :

Butt - BasicStroke.CAP_BUTT = 0 Round - BasicStroke.CAP_ROUND = 1 Square - BasicStroke.CAP_SQUARE = 2
../../_images/ContourPolygoneBasicStrokeCAP_BUTT=0.png
../../_images/ContourPolygoneBasicStrokeCAP_ROUND=1.png
../../_images/ContourPolygoneBasicStrokeCAP_SQUARE=2.png

Cas des polygones

Le paramètre Cap est défini en fonction de la valeur du paramètre Join pour que le point de « fermeture » du polygone soit géré correctement même s’il n’est pas utilisé en pratique pour afficher le contour du polygone qui est considéré comme une forme fermée, sans extrémité donc.

Valeur de Join Valeur de Cap
Mitre (=0) Square (=2)
Round (=1) Round (=1)
Bevel (=2) Butt (=0)

Cas des lignes

Pour les lignes, il doit être possible de modifier les deux paramètres Join et Cap afin de disposer des six variantes possibles.

Join Mitre Round Bevel
Round      
Square
../../_images/ContourPolygoneSquareMitre.png
../../_images/ContourPolygoneSquareRound.png
../../_images/ContourPolygoneSquareBevel.png
Butt
../../_images/ContourPolygoneButtMitre.png
../../_images/ContourPolygoneButtRound.png
../../_images/ContourPolygoneButtBevel.png
Round
../../_images/ContourPolygoneRoundMitre.png
../../_images/ContourPolygoneRoundRound.png
../../_images/ContourPolygoneRoundBevel.png

Cas des points

A traiter ... -> Gestion différente si le symbole est plutôt « polygonale » (carré, étoile…) ou « linéaire » (tirets, croix) ??

Implémentation dans GeOxygene

Tout cela est implémenté dans la classe Stroke de GeOxygene qui est commune au PolygonSymbolizer et au LineSymbolizer.

Le Stroke est en fait définit dans la classe AbstractSymboliser.

L’implémentation utilise Java2D et son système d’objet graphique avec contour.

../../_images/ContourPolygoneShape.png
../../_images/ContourPolygoneShapeFill.png
../../_images/ContourPolygoneShapeStroke.png
../../_images/ContourPolygoneShapeOutline.png
Shape pentagon = createRegularPolygon(5,75);

BasicStroke wideline = new BasicStroke(10.0f);

Shape outline = wideline.createStrokedShape(pentagon);

g.draw(pentagon); g.fill(pentagon); g.draw(outline); g.fill(outline);

Source : flylib.com