IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41376


Ignore:
Timestamp:
Jun 22, 2020, 10:56:43 AM (6 years ago)
Author:
eugene
Message:

new option to control number of major ticks

Location:
trunk/Ohana/src/kapa2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa2/include/structures.h

    r41344 r41376  
    165165  double fLabelRange;
    166166  double fMinor;
     167  double dMajor;
    167168  int color;
    168169} Axis;
  • trunk/Ohana/src/kapa2/src/DrawFrame.c

    r41344 r41376  
    1818  Py = 0.5 * (1 + 0.25*graph[0].axis[1].lweight) * (hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy) + hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy));
    1919  int P = MIN (Px, Py);
     20  // fprintf (stderr, "P: %d\n", P);
    2021
    2122  /* each axis is drawn independently, but ticks and labels are placed according to perpendicular distance. */
  • trunk/Ohana/src/kapa2/src/Graphs.c

    r41344 r41376  
    2525    graph[0].axis[i].fLabelRange = 1.0;
    2626    graph[0].axis[i].fMinor = 5.0;
     27    graph[0].axis[i].dMajor = NAN;
    2728    memset (graph[0].axis[i].format, 0, 16);
    2829  }   
  • trunk/Ohana/src/kapa2/src/LoadFrame.c

    r41344 r41376  
    4242  graph[0].axis[3].fLabelRange = graph[0].data.fLabelRangeYp;
    4343
     44  // fMinor and dMajor should have defaults of NAN
     45  // with default behavior defined in TickMarks.c
     46  // for one axis (x or y), if both + and - are
     47  // NAN, keep the default behavior, but if one
     48  // is NOT NAN, use that for both (synchronization)
     49
    4450  graph[0].axis[0].fMinor = graph[0].data.fMinorXm;
    4551  graph[0].axis[1].fMinor = graph[0].data.fMinorYm;
    4652  graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
    4753  graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
     54
     55  graph[0].axis[0].dMajor = graph[0].data.dMajorXm;
     56  graph[0].axis[1].dMajor = graph[0].data.dMajorYm;
     57  graph[0].axis[2].dMajor = graph[0].data.dMajorXp;
     58  graph[0].axis[3].dMajor = graph[0].data.dMajorYp;
    4859
    4960  strcpy (graph[0].axis[0].format, graph[0].data.formatXm);
  • trunk/Ohana/src/kapa2/src/PDF_Frame.c

    r41344 r41376  
    8686
    8787  if (tick->IsMajor) {
    88     size = MIN (0.50*P, MAX (0.030 * P, 10.0));
     88    size = MIN (0.50*P, MAX (0.010 * P, 10.0));
    8989  } else {
    90     size = MIN (0.25*P, MAX (0.015 * P, 5.0));
     90    size = MIN (0.25*P, MAX (0.005 * P, 5.0));
    9191  }
    9292  dir = ((naxis == 2) || (naxis == 3)) ? -1 : +1;
  • trunk/Ohana/src/kapa2/src/SetGraphData.c

    r41344 r41376  
    3737  graph[0].axis[2].fMinor = graph[0].data.fMinorXp;
    3838  graph[0].axis[3].fMinor = graph[0].data.fMinorYp;
     39
     40  graph[0].axis[0].dMajor = graph[0].data.dMajorXm;
     41  graph[0].axis[1].dMajor = graph[0].data.dMajorYm;
     42  graph[0].axis[2].dMajor = graph[0].data.dMajorXp;
     43  graph[0].axis[3].dMajor = graph[0].data.dMajorYp;
    3944
    4045  strcpy (graph[0].axis[0].format, graph[0].data.formatXm);
  • trunk/Ohana/src/kapa2/src/TickMarks.c

    r41344 r41376  
    1919
    2020  // be a little generous
    21   NTICKS = (int)(fabs(range / minor)) + 2;
     21  NTICKS = MIN((int)(fabs(range / minor)) + 2, 1000);
    2222  ALLOCATE (ticks, TickMarkData, NTICKS);
    2323
     
    101101  double lrange, factor, mantis, fmantis, power;
    102102
     103  // range is the full range of the plot axis (e.g., 10 - 1010 : range = 1000)
    103104  *range = axis->fLabelRange*(axis[0].max - axis[0].min);
    104105  if (fabs(*range) < MIN_RANGE) {
     
    106107  }
    107108
     109  // lrange : log of the full range (e.g., 3000 -> ~3.5)
    108110  lrange = log10(MAX(fabs(*range), MIN_RANGE));
    109111  double truncRange = ((int) ((lrange + 0.005) * 1000)) / 1000.0;
    110112  lrange = truncRange;
    111113
     114  // split the lrange into the integer and fractional portions
     115  // e.g., range = 3000, lrange ~ 3.5, factor = 3, mantis = 0.5
     116  // if lrange is negative (range < 1), and mantis is negative, shift so mantis positive
     117  // e.g., range = 0.2, lrange = -0.69, mantis = -0.69, factor = 0 -> factor = -1, mantis = 0.301 (2 x 0.1 instead of 0.2 x 1)
    112118  mantis = modf (lrange, &factor);
    113119  if (mantis < 0.0) {
     
    115121    factor -= 1.0;
    116122  }
    117  
     123
    118124  // how many significant digits are needed?
    119125
     126  // power is 10^factor above, e.g., range = 3000, factor = 3, power = 1000 (integer power-of-ten)
     127  // fmantis is the 10^mantis above, e.g., range = 3000, mantis = 0.5, fmantis = 3
    120128  power = MAX(pow(10.0, factor), MIN_RANGE);
    121129  fmantis = pow(10.0, mantis);
    122130  *major = MAX(0.5 * power, MIN_RANGE);
    123   *minor = MAX(0.1 * power, MIN_RANGE);
    124131 
    125132  if ((fmantis >= 1.0) && (fmantis <  1.999)) {
     
    183190    }     
    184191  }
     192  if (isfinite(axis->dMajor)) *major = axis->dMajor;
     193
    185194  *minor = *major / axis->fMinor;
    186195}
  • trunk/Ohana/src/kapa2/src/bDrawFrame.c

    r41344 r41376  
    1616  int Py = 0.5 * (1 + 0.25*graph[0].axis[1].lweight) * (hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy) + hypot (graph[0].axis[1].dfx, graph[0].axis[1].dfy));
    1717  int P = MIN (Px, Py);
     18  // fprintf (stderr, "P: %d\n", P);
    1819
    1920  /* each axis is drawn independently */
     
    8182
    8283  if (tick->IsMajor) {
    83     size = MIN (0.50*P, MAX (0.030 * P, 10.0));
     84    size = MIN (0.50*P, MAX (0.010 * P, 10.0));
    8485  } else {
    85     size = MIN (0.25*P, MAX (0.015 * P, 5.0));
     86    size = MIN (0.25*P, MAX (0.005 * P, 5.0));
    8687  }
    8788  dir = ((naxis == 0) || (naxis == 3)) ? -1 : +1;
Note: See TracChangeset for help on using the changeset viewer.