GDI-C: Scène 2D interactive

Soyez le premier à donner votre avis sur cette source.

Vue 1 028 fois - Téléchargée 165 fois

Description

[Version avec image de capture qui remplace celle du 17.01.2018]

Bonjour,

Ce petit exemple de scène 2D est basée sur "GDI+C: Dessin sans scintillement", et permet de représenter l'objet "Damier2D".
L'interactivité se limite ici au nombre de cellules du damier carré, qui est modifié à l'aide d'un contrôle "TrackBar".

Damier2D

struct Damier2D { // Damier carré n*n centré à l'origine (n>0)
  int N=0;
  float *C;

  void Def(int n) { // C[0] = -100.0, C[n] = 100.0
    if ((n<=0)||(n==N)) return;
    if (N>0) free(C);
    N=n; C=(float*)malloc((n+1)*sizeof(float));
    float d=200.0f/n,c=-100.0f;
    for (int i=0; i<n; ++i,c+=d) C[i]=c;
    C[n]=100.0f;
  }

  void Draw(HDC dc,int u0,int v0,float dil) {
    const HBRUSH b1=CreateSolidBrush(0X77FFFF),b2=CreateSolidBrush(0XFF0000);
    SelectObject(dc,GetStockObject(NULL_PEN));
    for (int j=0; j<N; ++j)
      for (int i=0; i<N; ++i) {POINT fc[4];
        fc[0]={u0+(int)(dil*C[i])  ,v0+(int)(dil*C[j])};
        fc[1]={u0+(int)(dil*C[i+1]),v0+(int)(dil*C[j])};
        fc[2]={u0+(int)(dil*C[i+1]),v0+(int)(dil*C[j+1])};
        fc[3]={u0+(int)(dil*C[i])  ,v0+(int)(dil*C[j+1])};
        SelectObject(dc,((i&1)==(j&1))?b1:b2); Polygon(dc,fc,4);
    }
  }
};

N'oubliez pas d'essayer:
- Move: presser le bouton gauche de la souris et bouger.
- Zoom ("intelligent"): roulette de la souris.
- Modifier le nombre d'éléments avec la "TrackBar".
- Changer la taille de la fenêtre.


Bonne lecture ...

Liens

CodeS-SourceS: GDI+A: Déplacement avec la souris
CodeS-SourceS: GDI+B: Move et Zoom avec la souris
CodeS-SourceS: GDI+C: Dessin sans scintillement
CodeS-SourceS: Windows-Controls: C-TrackBar (Slider)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de William VOIROL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.