IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15620


Ignore:
Timestamp:
Nov 15, 2007, 9:29:21 AM (18 years ago)
Author:
eugene
Message:

support for rotated ellipses in kapa overlays

Location:
trunk/Ohana/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa2/src/LoadOverlay.c

    r14590 r15620  
    7575  j = image[0].overlay[overnum].Nobjects;
    7676  for (i = 0; i < Noverlay; i++, j++) {
    77     image[0].overlay[overnum].objects[j].x = overlay[i].x;
    78     image[0].overlay[overnum].objects[j].y = overlay[i].y;
    79     image[0].overlay[overnum].objects[j].dx = overlay[i].dx;
    80     image[0].overlay[overnum].objects[j].dy = overlay[i].dy;
    81     image[0].overlay[overnum].objects[j].type = overlay[i].type;
    82     image[0].overlay[overnum].objects[j].text = NULL;
     77    image[0].overlay[overnum].objects[j].x     = overlay[i].x;
     78    image[0].overlay[overnum].objects[j].y     = overlay[i].y;
     79    image[0].overlay[overnum].objects[j].dx    = overlay[i].dx;
     80    image[0].overlay[overnum].objects[j].dy    = overlay[i].dy;
     81    image[0].overlay[overnum].objects[j].angle = overlay[i].angle;
     82    image[0].overlay[overnum].objects[j].type  = overlay[i].type;
     83    image[0].overlay[overnum].objects[j].text  = NULL;
    8384  }
    8485
  • trunk/Ohana/src/kapa2/src/PSOverlay.c

    r13479 r15620  
    5858          break;
    5959        }
     60        // XXX add in the rotated ellipse version (rotate in PS space)
    6061        fprintf (f, " %6.1f %6.1f %6.1f C\n", X, Y, fabs(dX + extra));
    6162        break;
  • trunk/Ohana/src/kapa2/src/PaintOverlay.c

    r13479 r15620  
    55  int i;
    66  int dX, dY, dx, dy;
    7   int X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
    8   double expand, X0, Y0;
     7  int x, y, X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
     8  double t, expand, X0, Y0;
    99 
    1010  XSetForeground (graphic[0].display, graphic[0].gc, image[0].overlay[N].color);
     
    4343    switch (image[0].overlay[N].objects[i].type) {
    4444      case KII_OVERLAY_LINE:
     45        // the angle makes no sense for a line...
    4546        XDrawLine (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, (X+dX), (Y+dY));
    4647        break;
    4748      case KII_OVERLAY_TEXT:
     49        // XXX currently we ignore the rectangle angle
    4850        XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, image[0].overlay[N].objects[i].text, strlen(image[0].overlay[N].objects[i].text));
    4951        break;
     
    5153        dx = MAX (abs(dX),2) / 2;
    5254        dy = MAX (abs(dY),2) / 2;
     55        // XXX currently we ignore the rectangle angle
    5356        XDrawRectangle (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy);
    5457        break;
     
    5659        dx = MAX (abs(dX),2);
    5760        dy = MAX (abs(dY),2);
    58         XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
     61        if (image[0].overlay[N].objects[i].angle == 0.0) {
     62          XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
     63        } else {
     64          // very stupid rotate ellipse drawing:
     65          double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
     66          double cs = cos(angle);
     67          double sn = sin(angle);
     68          // XXX dt should be based on the size of the ellipse...
     69          for (t = 0; t < 2*M_PI; t+=0.05) {
     70            x = X + dx*cos(t)*cs + dy*sin(t)*sn;
     71            y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
     72            XDrawPoint (graphic[0].display, graphic[0].window, graphic[0].gc, x, y);
     73          }
     74        }
    5975        break;
    6076      default:
  • trunk/Ohana/src/kapa2/src/bDrawOverlay.c

    r13479 r15620  
    7272        dx = MAX (abs(dX),2);
    7373        dy = MAX (abs(dY),2);
    74         bDrawArc (X, Y, dx, dy, 0, 360);
     74        if (image[0].overlay[N].objects[i].angle == 0.0) {
     75          bDrawArc (X, Y, dx, dy, 0, 360);
     76        } else {
     77          // very stupid rotate ellipse drawing:
     78          double x, y, t;
     79          double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
     80          double cs = cos(angle);
     81          double sn = sin(angle);
     82          // XXX dt should be based on the size of the ellipse...
     83          for (t = 0; t < 2*M_PI; t+=0.05) {
     84            x = X + dx*cos(t)*cs + dy*sin(t)*sn;
     85            y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
     86            bDrawPoint (x, y);
     87          }
     88        }
    7589        break;
    7690      default:
  • trunk/Ohana/src/libkapa/include/kapa.h

    r14590 r15620  
    2727  float dx;
    2828  float dy;
     29  float angle;
    2930  int type;
    3031} KiiOverlayBase;
     
    3536  float dx;
    3637  float dy;
     38  float angle;
    3739  int type;
    3840  char *text;
  • trunk/Ohana/src/libkapa/src/KiiOverlay.c

    r14590 r15620  
    5050}
    5151
    52 int KiiLoadOverlayOld (int fd, KiiOverlay *overlay, int Noverlay, char *overname) {
    53 
    54   int i, n, Nline;
    55   char *buffer, *type;
    56 
    57   KiiSelectOverlay (overname, &n);
    58 
    59   KiiSendCommand (fd, 4, "LOAD");
    60   KiiSendCommand (fd, 16, "OVER %9d ", n);
    61 
    62   Nline = 0;
    63   ALLOCATE (buffer, char, 65536);  /* space for 512 lines of 128 bytes */
    64   bzero (buffer, 65536);
    65 
    66   for (i = 0; i < Noverlay; i++) {
    67     type = KiiOverlayTypeByNumber(overlay[i].type);
    68     if (overlay[i].type == KII_OVERLAY_TEXT) {
    69       snprintf (&buffer[Nline*128], 128, "%15s %20.10f %20.10f %s ", type, overlay[i].x, overlay[i].y, overlay[i].text);
    70     } else {
    71       snprintf (&buffer[Nline*128], 128, "%15s %20.10f %20.10f %20.10f %20.10f ", type, overlay[i].x, overlay[i].y, overlay[i].dx, overlay[i].dy);
    72     }
    73     Nline ++;
    74     if (Nline == 512) {
    75       KiiSendCommand (fd, 16, "NLINES  %7d ", Nline);
    76       write (fd, buffer, Nline*128);
    77       bzero (buffer, 65536);
    78       Nline = 0;
    79     }
    80   }
    81   KiiSendCommand (fd, 16, "NLINES  %7d ", Nline);
    82   write (fd, buffer, Nline*128);
    83   KiiSendCommand (fd, 16, "DONE 0");
    84 
    85   free (buffer);
    86   KiiWaitAnswer (fd, "DONE");
    87 
    88   /* this is very inefficient: 128 bytes per object vs 17 as binary, plus the
    89      conversions back and forth
    90   */
    91 
    92   return (TRUE);
    93 }
    94 
    9552int KiiLoadOverlay (int fd, KiiOverlay *overlay, int Noverlay, char *overname) {
    9653
     
    10966  ALLOCATE (buffer, KiiOverlayBase, Noverlay);
    11067  for (i = 0; i < Noverlay; i++) {
    111     buffer[i].x    = overlay[i].x;
    112     buffer[i].y    = overlay[i].y;
    113     buffer[i].dx   = overlay[i].dx;
    114     buffer[i].dy   = overlay[i].dy;
    115     buffer[i].type = overlay[i].type;
     68    buffer[i].x     = overlay[i].x;
     69    buffer[i].y     = overlay[i].y;
     70    buffer[i].dx    = overlay[i].dx;
     71    buffer[i].dy    = overlay[i].dy;
     72    buffer[i].angle = overlay[i].angle;
     73    buffer[i].type  = overlay[i].type;
    11674    if (buffer[i].type == KII_OVERLAY_TEXT) {
    11775      Ntext ++;
     
    13189  // we could break this into segments if we want to trap an interrupt, but why bother?
    13290  Nchar = write (fd, buffer, Noverlay*sizeof(KiiOverlayBase));
    133   fprintf (stderr, "sent %d of %ld bytes\n", Nchar, Noverlay*sizeof(KiiOverlayBase));
    13491  KiiWaitAnswer (fd, "DONE");
    13592
  • trunk/Ohana/src/opihi/cmd.data/point.c

    r13479 r15620  
    55  int N, celestial, pixscale;
    66  int kapa;
    7   double ra, dec, dra, ddec;
     7  double ra, dec, dra, ddec, angle;
    88  double x1, y1, ra1, dec1;
    99  char *name;
     
    3232    remove_argument (N, &argc, argv);
    3333    pixscale = TRUE;
     34  }
     35
     36  angle = 0.0;
     37  if ((N = get_argument (argc, argv, "-angle"))) {
     38    remove_argument (N, &argc, argv);
     39    angle = atof(argv[N]);
     40    remove_argument (N, &argc, argv);
    3441  }
    3542
     
    6875    overlay.dy = atof(argv[6]);
    6976  }
     77  overlay.angle = angle;
    7078  overlay.type = KiiOverlayTypeByName (argv[2]);
    7179  KiiLoadOverlay (kapa, &overlay, 1, argv[1]);
Note: See TracChangeset for help on using the changeset viewer.