IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 3, 2010, 8:50:52 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/simtest_nebulous_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/simtest_nebulous_branches

  • branches/simtest_nebulous_branches/Ohana

  • branches/simtest_nebulous_branches/Ohana/src/opihi/cmd.astro/cgrid.c

    r20936 r27840  
    11# include "astro.h"
    2 # define CHECKELEMENTS \
    3   if (N == NELEMENTS) { \
    4     NELEMENTS +=200; \
    5     REALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS); \
    6     REALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS); \
     2
     3# define GRID_SPACING 0.002
     4
     5# define CHECKELEMENTS                                          \
     6  if (N == NELEMENTS) {                                         \
     7    NELEMENTS +=200;                                            \
     8    REALLOCATE (Xvec.elements.Flt, opihi_flt, NELEMENTS);       \
     9    REALLOCATE (Yvec.elements.Flt, opihi_flt, NELEMENTS);       \
     10  }
     11
     12# define ADD_COORDINATE(RA,DEC)                                         \
     13  status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], (RA), (DEC), &graphmode.coords); \
     14  if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) && \
     15      (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) { \
     16    N++;                                                                \
     17    CHECKELEMENTS;                                                      \
     18    OnPic = TRUE;                                                       \
     19    if (!First) {                                                       \
     20      Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];                    \
     21      Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];                    \
     22      N++;                                                              \
     23      CHECKELEMENTS;                                                    \
     24    } else {                                                            \
     25      if (N > 1) {                                                      \
     26        Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];                \
     27        Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];                \
     28        N--;                                                            \
     29      }                                                                 \
     30      First = FALSE;                                                    \
     31    }                                                                   \
     32  } else {                                                              \
     33    LOnPic = FALSE;                                                     \
     34    First = TRUE;                                                       \
     35  }
     36
     37# define ADD_DEC_LINE(RA)                                               \
     38  /* first, DEC increasing */                                           \
     39  LOnPic = TRUE;                                                        \
     40  OnPic = FALSE;                                                        \
     41  First = TRUE;                                                         \
     42  for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) { \
     43    D = MAX (-90, MIN(90, d));                                          \
     44    ADD_COORDINATE((RA), D);                                            \
     45  }                                                                     \
     46  /* next, DEC decreasing */                                            \
     47  First = TRUE;                                                         \
     48  LOnPic = TRUE;                                                        \
     49  for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) { \
     50    D = MAX (-90, MIN(90, d));                                          \
     51    ADD_COORDINATE((RA), D);                                            \
     52  }
     53
     54# define ADD_RA_LINE(DEC)                                               \
     55  D = MAX (-90, MIN(90, (DEC)));                                        \
     56  /* first, RA increasing */                                            \
     57  LOnPic = TRUE;                                                        \
     58  OnPic = FALSE;                                                        \
     59  First = TRUE;                                                         \
     60  lastRA = graphmode.coords.crval1 + 180.0;                             \
     61  for (r = firstRA; (r < lastRA + dR) && (LOnPic || NorthPole || SouthPole); r += dR) { \
     62    R = MIN (r, lastRA);                                        \
     63    ADD_COORDINATE(R, D);                                               \
     64  }                                                                     \
     65  /* next, RA decreasing */                                             \
     66  First = TRUE;                                                         \
     67  LOnPic = TRUE;                                                        \
     68  lastRA = graphmode.coords.crval1 - 180.0;                             \
     69  for (r = firstRA; (r > lastRA - dR) && (LOnPic || NorthPole || SouthPole); r -= dR) { \
     70    R = MAX (r, lastRA);                                        \
     71    ADD_COORDINATE(R, D);                                               \
    772  }
    873
    974int cgrid (int argc, char **argv) {
    1075 
    11   double range, lrange, factor, mantis, power, fmantis;
    12   double firstRA, firstDEC, minorRA, minorDEC;
    13   double r, d, dR, dD, D;
     76  double range, minor, major;
     77  double firstRA, lastRA, firstDEC, minorRA, minorDEC;
     78  double r, d, dR, dD, R, D;
    1479  double x, y;
    1580  Vector Xvec, Yvec;
    16   int kapa, NorthPole, SouthPole, N, OnPic, LOnPic, status, NELEMENTS, First;
     81  int kapa, NorthPole, SouthPole, N, OnPic, LOnPic, status, NELEMENTS;
     82  int First, RAbyHour, Labels;
    1783  Graphdata graphmode;
     84
     85  RAbyHour = FALSE;
     86  if ((N = get_argument (argc, argv, "-ra-by-hour"))) {
     87    remove_argument (N, &argc, argv);
     88    RAbyHour = TRUE;
     89  }
     90
     91  Labels = FALSE;
     92  if ((N = get_argument (argc, argv, "-labels"))) {
     93    remove_argument (N, &argc, argv);
     94    Labels = TRUE;
     95  }
    1896
    1997  if (!style_args (&graphmode, &argc, argv, &kapa)) return FALSE;
     
    37115  /* set spacings for RA */
    38116  minorRA = minorDEC = 0.1;
    39   range = MIN (fabs(graphmode.xmax-graphmode.xmin), fabs(graphmode.ymax-graphmode.ymin));
     117  range = MIN (fabs(graphmode.coords.cdelt1*(graphmode.xmax-graphmode.xmin)), fabs(graphmode.coords.cdelt2*(graphmode.ymax-graphmode.ymin)));
    40118  if (NorthPole || SouthPole) range = 360;
    41   lrange = log10(MAX(fabs(range), 1e-30));
    42   factor = (int) (lrange);
    43   if (lrange < 0) { factor -= 1; }
    44   mantis = lrange - factor;
    45   power = pow(10.0, factor);
    46   fmantis = pow(10.0, mantis);
    47   if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
    48     minorRA = 0.1 * power;
    49   }
    50   if ((fmantis > 2.0) && (fmantis <=  4.0)) {
    51     minorRA = 0.2 * power;
    52   }
    53   if ((fmantis > 4.0) && (fmantis <=  6.0)) {
    54     minorRA = 0.5 * power;
    55   }
    56   if ((fmantis > 6.0) && (fmantis <=  10.0)) {
    57     minorRA = 0.5 * power;
    58   }
    59   dR = range / 100.0;
     119
     120  if (RAbyHour) {
     121    SetGridScales (&major, &minor, range / 15.0);
     122    minorRA = minor * 15.0;
     123  } else {
     124    SetGridScales (&major, &minor, range);
     125    minorRA = minor;
     126  }
     127  dR = range * GRID_SPACING;
     128
    60129  /* set spacings for DEC */
    61   range = MIN (fabs(graphmode.xmax-graphmode.xmin), fabs(graphmode.ymax-graphmode.ymin));
    62   lrange = log10(MAX(fabs(range), 1e-30));
    63   factor = (int) (lrange);
    64   if (lrange < 0) { factor -= 1; }
    65   mantis = lrange - factor;
    66   power = pow(10.0, factor);
    67   fmantis = pow(10.0, mantis);
    68   if ((fmantis >= 1.0) && (fmantis <=  2.0)) {
    69     minorDEC = 0.1 * power;
    70   }
    71   if ((fmantis > 2.0) && (fmantis <=  4.0)) {
    72     minorDEC = 0.2 * power;
    73   }
    74   if ((fmantis > 4.0) && (fmantis <=  6.0)) {
    75     minorDEC = 0.5 * power;
    76   }
    77   if ((fmantis > 6.0) && (fmantis <=  10.0)) {
    78     minorDEC = 0.5 * power;
    79   }
    80   dD = range / 100.0;
     130  range = MIN (fabs(graphmode.coords.cdelt1*(graphmode.xmax-graphmode.xmin)), fabs(graphmode.coords.cdelt2*(graphmode.ymax-graphmode.ymin)));
     131  SetGridScales (&major, &minor, range);
     132  minorDEC = minor;
     133  dD = range * GRID_SPACING;
    81134
    82135  /* choose a starting point */
     
    102155  /***  do consecutive RA lines, first increasing **/
    103156  OnPic = TRUE;
    104   for (r = firstRA; (r <= firstRA + 180) && (OnPic); r += minorRA) {
    105     /* first, DEC increasing */
    106     LOnPic = TRUE;
    107     OnPic = FALSE;
    108     First = TRUE;
    109     for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
    110       D = MAX (-90, MIN(90, d));
    111       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    112       /*
    113       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    114         First = TRUE;
    115         */
    116       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    117           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    118         N++;
    119         CHECKELEMENTS;
    120         OnPic = TRUE;
    121         if (!First) {
    122           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    123           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    124           N++;
    125           CHECKELEMENTS;
    126         } else {
    127           if (N > 1) {
    128             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    129             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    130             N--;
    131           }
    132           First = FALSE;
    133         }
     157  lastRA = graphmode.coords.crval1 + 180.0;
     158  for (r = firstRA; (r <= lastRA) && (OnPic); r += minorRA) {
     159    ADD_DEC_LINE (r);
     160  }
     161  if (r != lastRA) {
     162    ADD_DEC_LINE (lastRA);
     163  }
     164
     165  /***  do consecutive RA lines, decreasing **/
     166  OnPic = TRUE;
     167  lastRA = graphmode.coords.crval1 - 180.0;
     168  for (r = firstRA; (r >=  lastRA) && (OnPic); r -= minorRA) {
     169    ADD_DEC_LINE (r);
     170  }
     171  if (r != lastRA) {
     172    ADD_DEC_LINE (lastRA);
     173  }
     174
     175  /***  do consecutive DEC lines, first increasing **/
     176  OnPic = TRUE;
     177  for (d = firstDEC; (d < 90 + dD) && (OnPic); d += minorDEC) {
     178    ADD_RA_LINE (d);
     179  }
     180
     181  /***  do consecutive DEC lines, decreasing **/
     182  OnPic = TRUE;
     183  for (d = firstDEC; (d > -90 - dD) && (OnPic); d -= minorDEC) {
     184    ADD_RA_LINE (d);
     185  }
     186 
     187  // add labels for center lines:
     188  if (Labels) {
     189    char line[16], format[8];
     190    double xt, yt, dx, dy, frac;
     191    dx = +0.01 * (graphmode.xmax - graphmode.xmin);
     192    dy = -0.02 * (graphmode.ymax - graphmode.ymin);
     193
     194    for (r = firstRA; r <= graphmode.coords.crval1 + 180.0; r += minorRA) {
     195      status = RD_to_XY (&xt, &yt, r, graphmode.coords.crval2, &graphmode.coords);
     196      if (!status) continue;
     197      if (xt < graphmode.xmin) continue;
     198      if (xt > graphmode.xmax) continue;
     199      if (yt < graphmode.ymin) continue;
     200      if (yt > graphmode.ymax) continue;
     201      frac = -1.0 * log10(minorRA);
     202      if (frac != (int)frac) {
     203        frac += 1.0;
     204      }
     205      if (frac <= 0.0) frac = 0.0;
     206      snprintf (format, 8, "%%.%df", (int) frac);
     207      if (RAbyHour) {
     208        snprintf (line, 16, format, r / 15.0);
    134209      } else {
    135         LOnPic = FALSE;
    136         First = TRUE;
    137       }
    138     }
    139     /* next, DEC decreasing */
    140     First = TRUE;
    141     LOnPic = TRUE;
    142     for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
    143       D = MAX (-90, MIN(90, d));
    144       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    145       /*
    146       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    147         First = TRUE;
    148         */
    149       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    150           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    151         N++;
    152         CHECKELEMENTS;
    153         OnPic = TRUE;
    154         if (!First) {
    155           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    156           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    157           N++;
    158           CHECKELEMENTS;
    159         } else {
    160           if (N > 1) {
    161             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    162             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    163             N--;
    164           }
    165           First = FALSE;
    166         }
     210        snprintf (line, 16, format, r);
     211      }
     212      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
     213    }
     214    for (r = firstRA; r >= graphmode.coords.crval1 - 180.0; r -= minorRA) {
     215      status = RD_to_XY (&xt, &yt, r, graphmode.coords.crval2, &graphmode.coords);
     216      if (!status) continue;
     217      if (xt < graphmode.xmin) continue;
     218      if (xt > graphmode.xmax) continue;
     219      if (yt < graphmode.ymin) continue;
     220      if (yt > graphmode.ymax) continue;
     221      frac = -1.0 * log10(minorRA);
     222      if (frac != (int)frac) {
     223        frac += 1.0;
     224      }
     225      if (frac <= 0.0) frac = 0.0;
     226      snprintf (format, 8, "%%.%df", (int) frac);
     227      if (RAbyHour) {
     228        snprintf (line, 16, format, r / 15.0);
    167229      } else {
    168         LOnPic = FALSE;
    169         First = TRUE;
    170       }
    171     }
    172   }
    173 
    174   /***  do consecutive RA lines, decreasing **/
    175   OnPic = TRUE;
    176   for (r = firstRA; (r >=  firstRA - 180) && (OnPic); r -= minorRA) {
    177     /* first, DEC increasing */
    178     First = TRUE;
    179     LOnPic = TRUE;
    180     OnPic = FALSE;
    181     for (d = firstDEC; (d < 90 + dD) && (LOnPic || NorthPole || SouthPole); d += dD) {
    182       D = MAX (-90, MIN(90, d));
    183       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    184       /*
    185       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    186         First = TRUE;
    187         */
    188       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    189           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    190         N++;
    191         CHECKELEMENTS;
    192         OnPic = TRUE;
    193         if (!First) {
    194           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    195           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    196           N++;
    197           CHECKELEMENTS;
    198         } else {
    199           if (N > 1) {
    200             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    201             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    202             N--;
    203           }
    204           First = FALSE;
    205         }
    206       } else {
    207         LOnPic = FALSE;
    208         First = TRUE;
    209       }
    210     }
    211     /* next, DEC decreasing */
    212     First = TRUE;
    213     LOnPic = TRUE;
    214     for (d = firstDEC; (d > -90 - dD) && (LOnPic || NorthPole || SouthPole); d -= dD) {
    215       D = MAX (-90, MIN(90, d));
    216       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    217       /*
    218       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    219         First = TRUE;
    220         */
    221       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    222           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    223         N++;
    224         CHECKELEMENTS;
    225         OnPic = TRUE;
    226         if (!First) {
    227           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    228           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    229           N++;
    230           CHECKELEMENTS;
    231         } else {
    232           if (N > 1) {
    233             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    234             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    235             N--;
    236           }
    237           First = FALSE;
    238         }
    239       } else {
    240         LOnPic = FALSE;
    241         First = TRUE;
    242       }
    243     }
    244   }
    245 
    246   /***  do consecutive DEC lines, first increasing **/
    247   OnPic = TRUE;
    248   for (d = firstDEC; (d < 90 + dD) && (OnPic); d += minorDEC) {
    249     D = MAX (-90, MIN(90, d));
    250     /* first, RA increasing */
    251     LOnPic = TRUE;
    252     OnPic = FALSE;
    253     First = TRUE;
    254     for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
    255       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    256       /*
    257       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    258         First = TRUE;
    259         */
    260       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    261           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    262         N++;
    263         CHECKELEMENTS;
    264         OnPic = TRUE;
    265         if (!First) {
    266           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    267           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    268           N++;
    269           CHECKELEMENTS;
    270         } else {
    271           if (N > 1) {
    272             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    273             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    274             N--;
    275           }
    276           First = FALSE;
    277         }
    278       } else {
    279         LOnPic = FALSE;
    280         First = TRUE;
    281       }
    282     }
    283     /* next, RA decreasing */
    284     First = TRUE;
    285     LOnPic = TRUE;
    286     for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
    287       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    288       /*
    289       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    290         First = TRUE;
    291         */
    292       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    293           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    294         N++;
    295         CHECKELEMENTS;
    296         OnPic = TRUE;
    297         if (!First) {
    298           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    299           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    300           N++;
    301           CHECKELEMENTS;
    302         } else {
    303           if (N > 1) {
    304             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    305             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    306             N--;
    307           }
    308           First = FALSE;
    309         }
    310       } else {
    311         LOnPic = FALSE;
    312         First = TRUE;
    313       }
    314     }
    315   }
    316 
    317   /***  do consecutive DEC lines, decreasing **/
    318   OnPic = TRUE;
    319   for (d = firstDEC; (d > -90 - dD) && (OnPic); d -= minorDEC) {
    320     D = MAX (-90, MIN(90, d));
    321     /* first, RA increasing */
    322     LOnPic = TRUE;
    323     OnPic = FALSE;
    324     First = TRUE;
    325     for (r = firstRA; (r < firstRA + 180) && (LOnPic || NorthPole || SouthPole); r += dR) {
    326       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    327       /*
    328       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    329         First = TRUE;
    330         */
    331       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    332           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    333         N++;
    334         CHECKELEMENTS;
    335         OnPic = TRUE;
    336         if (!First) {
    337           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    338           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    339           N++;
    340           CHECKELEMENTS;
    341         } else {
    342           if (N > 1) {
    343             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    344             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    345             N--;
    346           }
    347           First = FALSE;
    348         }
    349       } else {
    350         LOnPic = FALSE;
    351         First = TRUE;
    352       }
    353     }
    354     /* next, RA decreasing */
    355     First = TRUE;
    356     LOnPic = TRUE;
    357     for (r = firstRA; (r > firstRA - 180) && (LOnPic || NorthPole || SouthPole); r -= dR) {
    358       status = RD_to_XY (&Xvec.elements.Flt[N], &Yvec.elements.Flt[N], r, D, &graphmode.coords);
    359       /*
    360       if ((fabs(Xvec.elements.Flt[N] - Xvec.elements.Flt[N-1]) > 10) && (fabs(Yvec.elements.Flt[N] - Yvec.elements.Flt[N-1]) > 10))
    361         First = TRUE;
    362         */
    363       if ((Xvec.elements.Flt[N] >= graphmode.xmin) && (Xvec.elements.Flt[N] <= graphmode.xmax) &&
    364           (Yvec.elements.Flt[N] >= graphmode.ymin) && (Yvec.elements.Flt[N] <= graphmode.ymax) && status) {
    365         N++;
    366         CHECKELEMENTS;
    367         OnPic = TRUE;
    368         if (!First) {
    369           Xvec.elements.Flt[N] = Xvec.elements.Flt[N-1];
    370           Yvec.elements.Flt[N] = Yvec.elements.Flt[N-1];
    371           N++;
    372           CHECKELEMENTS;
    373         } else {
    374           if (N > 1) {
    375             Xvec.elements.Flt[N-2] = Xvec.elements.Flt[N-1];
    376             Yvec.elements.Flt[N-2] = Yvec.elements.Flt[N-1];
    377             N--;
    378           }
    379           First = FALSE;
    380         }
    381       } else {
    382         LOnPic = FALSE;
    383         First = TRUE;
    384       }
    385     }
    386   }
    387  
     230        snprintf (line, 16, format, r);
     231      }
     232      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
     233    }
     234    for (d = firstDEC; d <= graphmode.coords.crval2 + 90.0; d += minorDEC) {
     235      status = RD_to_XY (&xt, &yt, graphmode.coords.crval1, d, &graphmode.coords);
     236      if (!status) continue;
     237      if (xt < graphmode.xmin) continue;
     238      if (xt > graphmode.xmax) continue;
     239      if (yt < graphmode.ymin) continue;
     240      if (yt > graphmode.ymax) continue;
     241      frac = -1.0 * log10(minorDEC);
     242      if (frac != (int)frac) {
     243        frac += 1.0;
     244      }
     245      if (frac <= 0.0) frac = 0.0;
     246      snprintf (format, 8, "%%.%df", (int) frac);
     247      snprintf (line, 16, format, d);
     248      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
     249    }
     250    for (d = firstDEC; d >= graphmode.coords.crval2 - 90.0; d -= minorDEC) {
     251      status = RD_to_XY (&xt, &yt, graphmode.coords.crval1, d, &graphmode.coords);
     252      if (!status) continue;
     253      if (xt < graphmode.xmin) continue;
     254      if (xt > graphmode.xmax) continue;
     255      if (yt < graphmode.ymin) continue;
     256      if (yt > graphmode.ymax) continue;
     257      frac = -1.0 * log10(minorDEC);
     258      if (frac != (int)frac) {
     259        frac += 1.0;
     260      }
     261      if (frac <= 0.0) frac = 0.0;
     262      snprintf (format, 8, "%%.%df", (int) frac);
     263      snprintf (line, 16, format, d);
     264      KapaSendTextline (kapa, line, xt + dx, yt + dy, 0.0);
     265    }
     266  }
     267
    388268  /* send the line segments as connect-points */
    389269  Xvec.Nelements = Yvec.Nelements = N;
Note: See TracChangeset for help on using the changeset viewer.