L'exécutable

Fichier source : Souris.cpp

/* Affichage des coordonnees des pixels         */
/* allumes lors du trace d'un segment de droite */
/* par algorithme de Bresenham                  */

static void affichageSegment(int *px,int *py) {
  int dx,dy,i,xinc,yinc,cumul,x,y;
  x = px[0];
  y = py[0];
  dx = px[1] - px[0];
  dy = py[1] - py[0];
  xinc = ( dx > 0 ) ? 1 : -1;
  yinc = ( dy > 0 ) ? 1 : -1;
  dx = abs(dx);
  dy = abs(dy);
  printf("%3d %3d\n",x,y);
  if ( dx > dy ) {
    cumul = dx / 2;
    for ( i = 1 ; i <= dx ; i++ ) {
      x += xinc;
      cumul += dy;
      if ( cumul >= dx ) {
        cumul -= dx;
        y += yinc; }
      printf("%3d %3d\n",x,y); } }
    else {
    cumul = dy / 2;
    for ( i = 1 ; i <= dy ; i++ ) {
      y += yinc;
      cumul += dx;
      if ( cumul >= dy ) {
        cumul -= dy;
        x += xinc; }
      printf("%3d %3d\n",x,y); } }
}

static int mx[2] = { -1,-1 };
static int my[2] = { -1,-1 };
static int nb = 0;
static int bt = 0;

/* Fonction appelee lors d'un clic de souris    */

static void mouse(int bouton,int etat,int x,int y) {
  if ( bouton == GLUT_LEFT_BUTTON ) {
    mx[nb%2] = x;
    my[nb%2] = y;
    bt = 1;
    if ( etat == GLUT_UP ) {
      printf("%4d %4d\n",x,y);
      bt = 0;
      nb++; }
    glutPostRedisplay(); }
  if ( bouton == GLUT_RIGHT_BUTTON ) {
    if ( etat == GLUT_UP ) {
      if ( mx[1] != -1 )
        affichageSegment(mx,my); } }
}

/* Fonction appelee lors d'un deplacement       */
/* de souris bouton appuye                      */

static void motion(int x,int y) {
  if ( bt ) {
    mx[nb%2] = x;
    my[nb%2] = y;
    printf("%4d %4d\n",x,y);
    glutPostRedisplay(); }
}

/* Scene dessinee                               */

static int aff = 1;

static void scene(void) {
  glPushMatrix();
  if ( mx[0] != -1 ) {
    glPushMatrix();
    glTranslatef(mx[0],my[0],0.0F);
    glutSolidSphere(10.0,36,36);
    glPopMatrix(); }
  if ( mx[1] != -1 ) {
    glPushMatrix();
    glTranslatef(mx[1],my[1],0.0F);
    glutSolidSphere(10.0,36,36);
    glPopMatrix();
    if ( aff ) {
      glBegin(GL_LINES);
      glVertex2f(mx[0],my[0]);
      glVertex2f(mx[1],my[1]);
      glEnd(); } }
  glPopMatrix();
}

RETOUR