Autres articles / Other articles

Tracé de formes géométriques

publication: 20 novembre 2024 / mis à jour 20 novembre 2024

Read this page in english

 


Dans le précédent chapitre, on a appris à définir et utiliser un stylo pour la couleur des tracés. Avant d'aborder le tracé de formes, on va voir comment définir et utiliser un pinceau.

Colorier l'intérieur des formes

Pour colorer l'intérieur d'une forme, on doit d'abord définir le mot CreateSolidBrush:

z" CreateSolidBrush"  1 Gdi32 CreateSolidBrush ( color -- HBRUSH ) 

Paramètre:

Exemple:

0 value HBRUSH_BLUE 
 
: setBrushes  ( -- ) 
    $00 $00 $FF RGB CreateSolidBrush to HBRUSH_BLUE 
  ; 

A l'exécution de setBrushes, le handle délivré par CreateSolidBrush est stocké dans HBRUSH_BLUE.

Ce handle HBRUSH_BLUE sera ensuite sélectionné par SelectObject.

Tracé de rectangles

Le tracé de rectangles est effectué par le mot Rectangle, dont voici la définition:

\ draw a rectangle 
z" Rectangle"   5 gdi32 Rectangle   ( hdc left top right bottom -- fl ) 

Paramètres:

Exemple:

0 value HPEN_RED 
0 value HPEN_BLUE 
 
: setPens  ( -- ) 
    PS_SOLID    3 $FF $00 $00 RGB CreatePen to HPEN_RED 
    PS_DOT      1 $00 $00 $FF RGB CreatePen to HPEN_BLUE 
  ; 
 
create RECT01 
     10 L,  10 L, 220 L,  80 L, 
 
create RECT02 
     25 L,  25 L, 235 L,  95 L, 
 
: draw 
    setPens 
    setBrushes 
    hdc RECT01 GetRect Rectangle drop 
    hdc HPEN_RED    SelectObject drop 
    hdc HBRUSH_BLUE SelectObject drop 
    hdc RECT02 GetRect Rectangle drop 
  ; 

Résultat:

Ici, on a défini deux rectangles via les structures RECT01 et RECT02.

Le second rectable a son bord et son fond coloré par sélection des objets HPEN_RED et HBRUSH_BLUE.

Tracé de polygones

Le tracé de polygones utilise une structure de type POINT. Pour définir un tracé, il suffit préalablement de créer un tableau contenant des paires de coordonnées x y, chaque paire correspondant à la position d'une extrémité de segment décrivant les arêtes du polygone:

create POYGON01 
     30 L, 37 L, 
     44 L, 22 L, 
     58 L, 41 L, 
     43 L, 54 L, 
     56 L, 68 L, 
     43 L, 79 L, 
     31 L, 65 L, 
     20 L, 75 L, 
      5 L, 58 L, 
     19 L, 47 L, 
      6 L, 31 L, 
     19 L, 22 L, 

Ici, on a défini un tableau nommé POLYGON01 contenant 12 arêtes. Pour tracer le polygone, on utilise le mot Polygon dont voici la définition:

\ draw a polygone 
z" Polygon"   3 Gdi32 Polygon ( hdc *apt cpt -- fl ) 

Paramètres:

Utilisation:

: drawPolygon 
    setPens 
    setBrushes 
    hdc HPEN_RED    SelectObject drop 
    hdc HBRUSH_BLUE SelectObject drop 
    hdc POYGON01 12 Polygon drop 
  ; 

Résultat:

Il n'est pas nécessaire de revenir au point de départ. Le mot Polygon ferme automatiquement la figure en connectant la dernière arête à la première arête tracées.

Tracé d'ellipses

Pour tracer une ellipse, on utilisera le mot Ellipse dont voici la définition:

\ Draw ellipse 
z" Ellipse"     5 gdi32 Ellipse     ( hdc left top right bottom -- fl ) 

Paramètres:

Exemple:

: drawEllipse ( -- ) 
    setPens 
    setBrushes 
    hdc HPEN_RED    SelectObject drop 
    hdc 10 10 400 200 Ellipse drop  
    hdc HPEN_BLUE   SelectObject drop 
    hdc 30 30 420 220 Ellipse drop  
  ; 

Résultat:

Tracé d'arcs

Les arcs sont des courbes tracées avec le mot Arc dont voici la définition:

\ Draw arc 
z" Arc"     9 gdi32 Arc     ( hdc x1 y1 x2 y2 x3 y3 x4 y4 -- fl ) 

Paramètres:

Visualisation des paramètres de position de l'arc:

Exemple:

0 value HPEN_RED 
0 value HPEN_BLUE 
 
: setPens  ( -- ) 
    PS_SOLID    5 $FF $00 $00 RGB CreatePen to HPEN_RED 
    PS_SOLID    5 $00 $00 $FF RGB CreatePen to HPEN_BLUE 
  ; 
 
: drawArcs ( -- ) 
    setPens 
    hdc HPEN_RED    SelectObject drop 
    hdc 10 10 400 200 10 105 400 105 Arc drop  
    hdc HPEN_BLUE   SelectObject drop 
    hdc 10 10 400 200 400 105 10 105 Arc drop  
  ; 

Résultat:

Ici, nous voyons deux demi arcs se suivant en changeant de couleur.

Pour résumer, nous avons abordé les mots de dessin essentiels permettant de créer des fonds graphiques: quadrillages, boites, encadrés, etc...


Legal: site web personnel sans commerce / personal site without seling