IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 31559


Ignore:
Timestamp:
May 23, 2011, 5:59:46 PM (15 years ago)
Author:
eugene
Message:

correctly implement bDrawTriFill (but only for upright triangles); fix bDrawRectOpen (missing corner pixel)

Location:
trunk/Ohana/src/libkapa
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/libkapa/include/kapa.h

    r31160 r31559  
    255255void bDrawRectFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2);
    256256void bDrawTriOpen  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
    257 void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
     257void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double dx, double dy);
    258258
    259259/* bDrawRotFont.c */
  • trunk/Ohana/src/libkapa/src/bDrawFuncs.c

    r29938 r31559  
    134134  Y2 = MIN (MAX (ROUND (y2), 1), buffer[0].Ny - 1);
    135135
    136   bDrawLineHorizontal (buffer, X1, X2, Y1);
    137   bDrawLineHorizontal (buffer, X1, X2, Y2);
     136  bDrawLineHorizontal (buffer, X1, X2 + 1, Y1);
     137  bDrawLineHorizontal (buffer, X1, X2 + 1, Y2);
    138138  bDrawLineVertical   (buffer, X1, Y1, Y2);
    139139  bDrawLineVertical   (buffer, X2, Y1, Y2);
     
    275275}
    276276
    277 void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3) {
    278 
    279   bDrawTriOpen (buffer, x1, y1, x2, y2, x3, y3);
     277// upright triangle with base of width 2 dX + 1, height of dY, center of base at x1, y1
     278void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double dx, double dy) {
     279
     280  int xs, xe, x, y;
     281  float e, m;
     282
     283  double dX = fabs(dx);
     284 
     285  xs = x1 - dX;
     286  xe = x1 + dX + 1;
     287  e = 0;
     288  m = dX / dy;
     289
     290  if (dy > 0.0) {
     291    for (y = y1; y < y1 + dy + 1; y++) {
     292      for (x = xs; x < xe; x++) {
     293        bDrawPoint (buffer, x, y);
     294      }
     295      e += m;
     296      if (e > 0.5) {
     297        xs ++;
     298        xe --;
     299        e -= 1.0;
     300      }
     301      if (e < -0.5) {
     302        xs ++;
     303        xe --;
     304        e += 1.0;
     305      }
     306    }   
     307  } else {
     308    for (y = y1; y > y1 + dy - 1; y--) {
     309      for (x = xs; x < xe; x++) {
     310        bDrawPoint (buffer, x, y);
     311      }
     312      e += m;
     313      if (e > 0.5) {
     314        xs ++;
     315        xe --;
     316        e -= 1.0;
     317      }
     318      if (e < -0.5) {
     319        xs ++;
     320        xe --;
     321        e += 1.0;
     322      }
     323    }   
     324  }
     325 
    280326  return;
    281327}
Note: See TracChangeset for help on using the changeset viewer.