IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5612


Ignore:
Timestamp:
Nov 28, 2005, 8:27:19 AM (21 years ago)
Author:
eugene
Message:

added weight and type to lines, defined -noX option

Location:
trunk/Ohana/src/kapa
Files:
1 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa/Makefile

    r5610 r5612  
    7272$(SDIR)/CreateWindow.$(ARCH).o            $(SDIR)/SetNormalHints.$(ARCH).o     \
    7373$(SDIR)/DefineLayout.$(ARCH).o            $(SDIR)/SetUpDisplay.$(ARCH).o       \
    74 $(SDIR)/SetUpWindow.$(ARCH).o                                                   \
     74$(SDIR)/SetUpWindow.$(ARCH).o             $(SDIR)/args.$(ARCH).o               \
    7575$(SDIR)/GetColor.$(ARCH).o                $(SDIR)/SetWMHints.$(ARCH).o         \
    7676$(SDIR)/LoadFont.$(ARCH).o                $(SDIR)/TopWindow.$(ARCH).o          \
  • trunk/Ohana/src/kapa/event/EventLoop.c

    r3695 r5612  
    2020  Display        *display;
    2121 
    22   Refresh (1);
     22  if (USE_XWINDOW) Refresh (1);
    2323
    2424  status = TRUE;
     
    2727    if (!CheckPipe ()) return (FALSE);
    2828   
     29    if (!USE_XWINDOW) {
     30      usleep (50000);
     31      continue;
     32    }
     33
    2934    if (XEventsQueued (graphic.display, QueuedAfterFlush) < 1) {
    3035      usleep (50000);
  • trunk/Ohana/src/kapa/event/FlushDisplay.c

    r4769 r5612  
    1010  int flush;
    1111  double dtime;
     12
     13  if (!USE_XWINDOW) return;
    1214
    1315  flush = FALSE;
  • trunk/Ohana/src/kapa/event/Refresh.c

    r5354 r5612  
    55  int i;
    66 
     7  if (!USE_XWINDOW) return;
    78  if (HAVE_BACKING) return;
    89
  • trunk/Ohana/src/kapa/graph/ErasePlot.c

    r2473 r5612  
    4747  }
    4848
    49   XClearWindow (graphic.display, graphic.window);
     49  if (USE_XWINDOW) XClearWindow (graphic.display, graphic.window);
    5050  Refresh (1);
    5151
  • trunk/Ohana/src/kapa/graph/LoadBox.c

    r2473 r5612  
    6464  }
    6565
    66   DrawFrame (layout);
     66  if (USE_XWINDOW) DrawFrame (layout);
    6767  status = TRUE;
    6868  if (status) {
     
    7070      PositionPicture (&section[i]);
    7171    }
    72     XClearWindow (graphic.display, graphic.window);
     72    if (USE_XWINDOW) XClearWindow (graphic.display, graphic.window);
    7373    Refresh (1);
    7474  } else {
  • trunk/Ohana/src/kapa/graph/LoadObject.c

    r5386 r5612  
    9898  if (DEBUG) fprintf (stderr, "loaded %d objects, using object %d\n", layout[0].objects[N].Npts, N);
    9999
    100   DrawObjectN (layout, &layout[0].objects[layout[0].Nobjects-1]);
     100  if (USE_XWINDOW) DrawObjectN (layout, &layout[0].objects[layout[0].Nobjects-1]);
    101101  FlushDisplay ();
    102102
  • trunk/Ohana/src/kapa/graph/bDrawFrame.c

    r5610 r5612  
    1818
    1919    if (layout[0].axis[i].isaxis) {
    20       bDrawLine (fx, fy, fx+dfx, fy+dfy, FALSE);
     20      bDrawLine (fx, fy, fx+dfx, fy+dfy);
    2121    }
    2222   
     
    7070  dy = dir*size*dfx*n;
    7171 
    72   bDrawLine (x, y, x+dx, y+dy, FALSE);
     72  bDrawLine (x, y, x+dx, y+dy);
    7373
    7474  if (mode == 1) {
  • trunk/Ohana/src/kapa/graph/bDrawFuncs.c

    r5610 r5612  
    7171}
    7272
    73 // use the Bresenham line drawing technique
    74 void bDrawLine (double x1, double y1, double x2, double y2, int swapcoords) {
     73void bDrawTriOpen (double x1, double y1, double x2, double y2, double x3, double y3) {
     74
     75  bDrawLine (x1, y1, x2, y2);
     76  bDrawLine (x2, y2, x3, y3);
     77  bDrawLine (x3, y3, x1, y1);
     78
     79  return;
     80}
     81
     82void bDrawRectOpen (double x1, double y1, double x2, double y2) {
    7583
    7684  int X1, Y1, X2, Y2;
    77   int X, Y, dX, dY;
     85
     86  if (x1 > x2) SWAP (x1, x2);
     87  if (y1 > y2) SWAP (y1, y2);
     88
     89  X1 = MIN (MAX (ROUND (x1), 0), bBuffer[0].Nx - 1);
     90  X2 = MIN (MAX (ROUND (x2), 1), bBuffer[0].Nx);
     91
     92  Y1 = MIN (MAX (ROUND (y1), 0), bBuffer[0].Ny - 1);
     93  Y2 = MIN (MAX (ROUND (y2), 1), bBuffer[0].Ny);
     94
     95  bDrawLineHorizontal (X1, X2, Y1);
     96  bDrawLineHorizontal (X1, X2, Y2);
     97  bDrawLineVertical (X1, Y1, Y2);
     98  bDrawLineVertical (X2, Y1, Y2);
     99  return;
     100}
     101
     102void bDrawRectFill (double x1, double y1, double x2, double y2) {
     103
     104  int i;
     105  int X1, Y1, X2, Y2;
     106
     107  if (x1 > x2) SWAP (x1, x2);
     108  if (y1 > y2) SWAP (y1, y2);
     109
     110  X1 = MIN (MAX (ROUND (x1), 0), bBuffer[0].Nx - 1);
     111  X2 = MIN (MAX (ROUND (x2), 1), bBuffer[0].Nx);
     112
     113  Y1 = MIN (MAX (ROUND (y1), 0), bBuffer[0].Ny - 1);
     114  Y2 = MIN (MAX (ROUND (y2), 0), bBuffer[0].Ny);
     115
     116  for (i = Y1; i < Y2; i++) {
     117    bDrawLineHorizontal (X1, X2, i);
     118  }
     119  return;
     120}
     121
     122// identify the quadrant and draw the correct line
     123void bDrawLine (double x1, double y1, double x2, double y2) {
     124
     125  int FlipDirect, FlipCoords;
     126  int X1, Y1, X2, Y2, dX, dY;
    78127
    79128  /* rather than draw the line from float positions, we find the closest
     
    88137  dY = Y2 - Y1;
    89138
    90   // fprintf (stderr, "(%f,%f) - (%f,%f)\n", x1, y1, x2, y2);
    91   if (x1 > x2) {
    92     // fprintf (stderr, "flip direct\n");
    93     bDrawLine (x2, y2, x1, y1, swapcoords);
    94     return;
    95   }
    96   if (abs(dX) < abs(dY)) {
    97     // fprintf (stderr, "flip coords\n");
    98     bDrawLine (y1, x1, y2, x2, TRUE);
    99     return;
    100   }
    101 
    102   /* integer-only Bresenham line-draw version which is fast */
    103   {
    104     int e, e2;
    105 
    106     Y = Y1;
    107     e = 0;
    108     for (X = X1; X <= X2; X++) {
    109       if (swapcoords) {
    110         bDrawPoint (Y,X);
    111       } else {
    112         bDrawPoint (X,Y);
    113       }
    114       e += dY;
    115       e2 = 2 * e;
    116       if (e2 > dX) {
    117         Y++;
    118         e -= dX;
    119       }
    120       if (e2 < -dX) {
    121         Y--;
    122         e += dX;
    123       }
    124     }
    125   }
    126   return;
    127 }
    128 
    129 void bDrawRectOpen (int x1, int y1, int x2, int y2) {
    130 
    131   return;
    132 }
    133 
    134 void bDrawRectFill (int x1, int y1, int x2, int y2) {
    135 
    136   return;
    137 }
    138 
    139 void bDrawTriOpen (int x1, int y1, int x2, int y2, int x3, int y3) {
    140 
    141   return;
    142 }
    143 
    144 void bDrawTriFill (int x1, int y1, int x2, int y2, int x3, int y3) {
    145 
     139  FlipCoords = (abs(dX) < abs(dY));
     140  FlipDirect = FlipCoords ? (y1 > y2) : (x1 > x2);
     141
     142  if (!FlipDirect && !FlipCoords) bDrawLineWeight (X1, Y1, X2, Y2, FALSE);
     143  if ( FlipDirect && !FlipCoords) bDrawLineWeight (X2, Y2, X1, Y1, FALSE);
     144  if (!FlipDirect &&  FlipCoords) bDrawLineWeight (Y1, X1, Y2, X2, TRUE);
     145  if ( FlipDirect &&  FlipCoords) bDrawLineWeight (Y2, X2, Y1, X1, TRUE);
     146
     147  return;
     148}
     149
     150// draw a series of lines to give the line weight
     151void bDrawLineWeight (int X1, int Y1, int X2, int Y2, int swapcoords) {
     152
     153  int dN, dNs, dNe;
     154
     155  dNs = -0.5*(bWeight - 1);
     156  /* 0, 0, 0, -1, -1, -2, -2 */
     157
     158  dNe = +0.5*bWeight + 1;
     159  /* 1, 1, 2, 2, 2, 3, 3 */
     160
     161  for (dN = dNs; dN < dNe; dN++) {
     162    bDrawLineBresen (X1, Y1 + dN, X2, Y2 + dN, swapcoords);
     163  }
     164  return;
     165}
     166
     167// use the Bresenham line drawing technique
     168// integer-only Bresenham line-draw version which is fast
     169void bDrawLineBresen (int X1, int Y1, int X2, int Y2, int swapcoords) {
     170
     171  int X, Y, dX, dY;
     172  int e, e2;
     173  int N, DashOn;
     174
     175  dX = X2 - X1;
     176  dY = Y2 - Y1;
     177
     178  DashOn = TRUE;
     179
     180  Y = Y1;
     181  e = 0;
     182  for (X = X1, N = 0; X <= X2; X++, N++) {
     183    if (bType == 1) { DashOn = (N % 10) < 5; }
     184    if (bType == 2) { DashOn = (N % 6) < 3; }
     185    if (swapcoords) {
     186      if (DashOn) bDrawPoint (Y,X);
     187    } else {
     188      if (DashOn) bDrawPoint (X,Y);
     189    }
     190    e += dY;
     191    e2 = 2 * e;
     192    if (e2 > dX) {
     193      Y++;
     194      e -= dX;
     195    }
     196    if (e2 < -dX) {
     197      Y--;
     198      e += dX;
     199    }
     200  }
     201  return;
     202}
     203
     204void bDrawLineHorizontal (int X1, int X2, int Y) {
     205 
     206  int i;
     207
     208  for (i = X1; i < X2; i++) {
     209    bBuffer[0].pixels[Y][i] = bColor;
     210  }
     211  return;
     212}
     213
     214void bDrawLineVertical (int X, int Y1, int Y2) {
     215 
     216  int i;
     217
     218  for (i = Y1; i < Y2; i++) {
     219    bBuffer[0].pixels[i][X] = bColor;
     220  }
     221  return;
     222}
     223
     224void bDrawTriFill (double x1, double y1, double x2, double y2, double x3, double y3) {
     225
     226  bDrawTriOpen (x1, y1, x2, y2, x3, y3);
    146227  return;
    147228}
     
    181262}
    182263
     264// draw a series of circles to give line weight
     265void bDrawCircle (double xc, double yc, double radius) {
     266
     267  int dN, dNs, dNe;
     268
     269  dNs = -0.5*(bWeight - 1);
     270  /* 0, 0, 0, -1, -1, -2, -2 */
     271
     272  dNe = +0.5*bWeight + 1;
     273  /* 1, 1, 2, 2, 2, 3, 3 */
     274
     275  for (dN = dNs; dN < dNe; dN++) {
     276    bDrawCircle (xc, yc, radius + dN);
     277  }
     278  return;
     279}
     280
    183281// draw a pure circle 
    184 void bDrawCircle (double xc, double yc, double radius) {
     282void bDrawCircleSingle (double xc, double yc, double radius) {
    185283
    186284  int Xc, Yc, Radius;
     
    206304    bDrawPoint (Xc-y, Yc+x);
    207305    bDrawPoint (Xc-y, Yc-x);
     306
     307    if (d < 0) {
     308      // d = d + 4*x + 6;
     309      d = d + 8*x + 4;
     310    } else {
     311      // d = d + 4*(x-y) + 10;
     312      d = d + 8*(x-y) + 8;
     313      y--;
     314    }
     315    x++;
     316  }
     317}
     318
     319// draw a pure circle 
     320void bDrawCircleFill (double xc, double yc, double radius) {
     321
     322  int Xc, Yc, Radius;
     323  int x, y, d;
     324
     325  Xc = ROUND(xc);
     326  Yc = ROUND(yc);
     327  Radius = ROUND(radius);
     328
     329  x = 0;
     330  y = Radius;
     331
     332  // d = 3 - 2*Radius;
     333  d = 5 - 4*radius;
     334
     335  while (x <= y) {
     336    bDrawLineHorizontal (Xc-x, Xc+x, Yc+y);
     337    bDrawLineHorizontal (Xc-x, Xc+x, Yc-y);
     338    bDrawLineHorizontal (Xc-y, Xc+y, Yc+x);
     339    bDrawLineHorizontal (Xc-y, Xc+y, Yc-x);
    208340
    209341    if (d < 0) {
  • trunk/Ohana/src/kapa/graph/bDrawObjects.c

    r5610 r5612  
    22# include "bDraw.h"
    33
    4 # define DrawLine(X1,Y1,X2,Y2) (bDrawLine ((X1), (Y1), (X2), (Y2), FALSE))
     4# define DrawLine(X1,Y1,X2,Y2) (bDrawLine ((X1), (Y1), (X2), (Y2)))
    55# define DrawCircle(X1,Y1,R) (bDrawCircle ((X1), (Y1), (R)))
    6 # define DrawRectangle(X,Y,dX,dY) (bDrawRectOpen ((X-0.5*dX), (Y-0.5*dY), (dX), (dY)))
    7 # define FillRectangle(X,Y,dX,dY) (bDrawRectFill ((X-0.5*dX), (Y-0.5*dY), (dX), (dY)))
     6# define DrawRectangle(X,Y,dX,dY) (bDrawRectOpen ((X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
     7# define FillRectangle(X,Y,dX,dY) (bDrawRectFill ((X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
    88# define FillTriangle(X1,Y1,X2,Y2,X3,Y3) (bDrawTriFill ((X1), (Y1), (X2), (Y2), (X3), (Y3)))
     9# define OpenTriangle(X1,Y1,X2,Y2,X3,Y3) (bDrawTriOpen ((X1), (Y1), (X2), (Y2), (X3), (Y3)))
    910# define CONNECT 0
    1011# define HISTOGRAM 1
     
    288289            (sy < layout[0].axis[1].fy) && (sy > layout[0].axis[1].fy + layout[0].axis[1].dfy))
    289290          {
    290             DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    291             DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    292             DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
     291            OpenTriangle (sx - d*z[i], sy + 0.58*d*z[i], sx, sy - 1.15*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    293292          }
    294293      }
     
    403402            (sy < layout[0].axis[1].fy) && (sy > layout[0].axis[1].fy + layout[0].axis[1].dfy))
    404403          {
    405             DrawLine (sx - d, sy - 0.58*d, sx + d, sy - 0.58*d);
    406             DrawLine (sx + d, sy - 0.58*d, sx,     sy + 1.15*d);
    407             DrawLine (sx,     sy + 1.15*d, sx - d, sy - 0.58*d);
     404            OpenTriangle (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d, sx, sy - 1.15*d);
    408405          }
    409406      }
  • trunk/Ohana/src/kapa/graph/bDrawRotFont.c

    r5611 r5612  
    149149  Y = YPROC (dx,0);
    150150# ifdef DRAWBOXES
    151   bDrawLine (x+X, y+Y, x+X1, y+Y1, FALSE);
     151  bDrawLine (x+X, y+Y, x+X1, y+Y1);
    152152  Xt = X;
    153153  Yt = Y;
     
    161161  Y = YPROC (dx,dy);
    162162# ifdef DRAWBOXES
    163   bDrawLine (x+X, y+Y, x+Xt, y+Yt, FALSE);
     163  bDrawLine (x+X, y+Y, x+Xt, y+Yt);
    164164  Xt = X;
    165165  Yt = Y;
     
    173173  Y = YPROC (0,dy);
    174174# ifdef DRAWBOXES
    175   bDrawLine (x+X, y+Y, x+Xt, y+Yt, FALSE);
     175  bDrawLine (x+X, y+Y, x+Xt, y+Yt);
    176176  Xt = X;
    177177  Yt = Y;
  • trunk/Ohana/src/kapa/include/bDraw.h

    r5611 r5612  
    2727void bDrawPoint (int x, int y);
    2828void bDrawPointf (float x, float y);
    29 void bDrawLine (double x1, double y1, double x2, double y2, int swapcoords);
     29
    3030void bDrawArc (double Xc, double Yc, double Xr, double Yr, double Ts, double Te);
    3131void bDrawCircle (double Xc, double Yc, double radius);
     32void bDrawCircleFill (double xc, double yc, double radius);
     33
     34void bDrawLine (double x1, double y1, double x2, double y2);
     35void bDrawLineWeight (int X1, int Y1, int X2, int Y2, int swapcoords);
     36void bDrawLineBresen (int X1, int Y1, int X2, int Y2, int swapcoords);
     37void bDrawLineHorizontal (int X1, int X2, int Y);
     38void bDrawLineVertical (int X, int Y1, int Y2);
     39
    3240png_color *MakePNGPalette (int *Npalette);
    3341bDrawColor GetColorByName (char *name);
    3442bDrawBuffer *bDrawIt ();
    3543
    36 void bDrawRectOpen (int x1, int y1, int x2, int y2);
    37 void bDrawRectFill (int x1, int y1, int x2, int y2);
    38 void bDrawTriOpen (int x1, int y1, int x2, int y2, int x3, int y3);
    39 void bDrawTriFill (int x1, int y1, int x2, int y2, int x3, int y3);
     44void bDrawRectOpen (double x1, double y1, double x2, double y2);
     45void bDrawRectFill (double x1, double y1, double x2, double y2);
     46void bDrawTriOpen (double x1, double y1, double x2, double y2, double x3, double y3);
     47void bDrawTriFill (double x1, double y1, double x2, double y2, double x3, double y3);
    4048int bDrawRotText (int x, int y, char *string, int pos, double angle);
    4149int bDrawRotBitmap (int x, int y, int dx, int dy, unsigned char *bitmap, int mode, double angle, double scale);
     50
  • trunk/Ohana/src/kapa/include/globals.h

    r2473 r5612  
    22int HAVE_BACKING;
    33int DEBUG;
     4int USE_XWINDOW;
     5int MAP_WINDOW;
     6int FOREGROUND;
    47
    58/* file descriptor for socket connection to mana */
  • trunk/Ohana/src/kapa/setup/CloseDisplay.c

    r2473 r5612  
    33/************** CloseDisplay *************/
    44void CloseDisplay () {
     5  XFreeFont (graphic.display, graphic.font);
    56  XFreeGC (graphic.display, graphic.gc);
    67  XDestroySubwindows (graphic.display, graphic.window);
  • trunk/Ohana/src/kapa/setup/DefineLayout.c

    r4769 r5612  
    55void DefineLayout (int argc, char **argv) {
    66
    7   int i, status, N, FOREGROUND;
     7  int i, status, N;
    88  struct sockaddr_un Address;
    99  char temp[100];
    1010 
    11   if ((N = get_argument (argc, argv, "-debug"))) {
    12     remove_argument(N, &argc, argv);
    13     DEBUG = TRUE;
    14   } else {
    15     DEBUG = FALSE;
    16   }
    17 
    18   FOREGROUND = FALSE;
    19   if ((N = get_argument (argc, argv, "-fg"))) {
    20     remove_argument(N, &argc, argv);
    21     FOREGROUND = TRUE;
    22   }
    23 
    2411  /** initiate connection with server **/
    2512  if (!FOREGROUND) {   
     
    4229
    4330  InitRotFonts ();
    44   MakeColormap (argc, argv);
    4531
    4632  /** set up defaults for display region **/
  • trunk/Ohana/src/kapa/setup/SetUpWindow.c

    r2473 r5612  
    2323  NameWindow ("Kapa");
    2424
    25   if ((N = get_argument (*argc, argv, "-nomap"))) {
    26     remove_argument(N, argc, argv);
    27   } else {
    28     MapWindow (graphic);
    29   } 
    30  
     25  MakeColormap (*argc, argv);  /* move to SetUpWindow? */
     26
     27  if (MAP_WINDOW) MapWindow (graphic);
     28  return;
    3129}
  • trunk/Ohana/src/kapa/setup/Ximage.c

    r4769 r5612  
    33int main (int argc, char **argv) {
    44 
    5   SetUpDisplay (&argc, argv);
    6   SetUpWindow (&argc, argv);
     5  /* this is a lame place to put this default */
     6  graphic.x = 10;
     7  graphic.y = 10;
     8  graphic.dx = 512;
     9  graphic.dy = 512;
    710
    8   DefineLayout (argc, argv);
     11  args (&argc, argv);
     12
     13  if (USE_XWINDOW) SetUpDisplay (&argc, argv); /* skip if Xless */
     14  if (USE_XWINDOW) SetUpWindow (&argc, argv);  /* skip if Xless */
     15
     16  DefineLayout (argc, argv);
    917  EventLoop ();
    1018
    11   XFreeFont (graphic.display, graphic.font);
    12   CloseDisplay ();
     19  if (USE_XWINDOW) CloseDisplay ();
    1320  exit (0);
    1421}
Note: See TracChangeset for help on using the changeset viewer.