IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2015, 6:52:41 AM (11 years ago)
Author:
eugene
Message:

merge changes from ipp-20150112

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/Ohana

    • Property svn:mergeinfo deleted
  • trunk/Ohana/src/kapa2/src/DrawObjects.c

    r37047 r38062  
    630630    }
    631631  }
     632  if (object[0].ptype == 14) {  /* upside-down filled triangle */
     633    XPoint points[4];
     634    for (i = 0; i < object[0].Npts; i++) {
     635      if (!(finite(x[i]) && finite(y[i]))) continue;
     636      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     637      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     638      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     639          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     640        if (scaleColor) {
     641          if (!finite(z[i])) continue;
     642          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     643          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     644        }
     645        D = scaleSize ? dz*z[i] : ds;
     646        points[0].x = sx - D;  points[0].y = sy - 0.58*D; 
     647        points[1].x = sx + D;  points[1].y = sy - 0.58*D; 
     648        points[2].x = sx;      points[2].y = sy + 1.15*D; 
     649        points[3].x = sx - D;  points[3].y = sy - 0.58*D; 
     650        XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
     651      }
     652    }
     653  }
     654  if (object[0].ptype == 15) {  /* upside-down open triangle */
     655    for (i = 0; i < object[0].Npts; i++) {
     656      if (!(finite(x[i]) && finite(y[i]))) continue;
     657      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     658      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     659      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     660          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     661        if (scaleColor) {
     662          if (!finite(z[i])) continue;
     663          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     664          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     665        }
     666        D = scaleSize ? dz*z[i] : ds;
     667        DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D);
     668        DrawLine (sx + D, sy - 0.58*D, sx,     sy + 1.15*D);
     669        DrawLine (sx,     sy + 1.15*D, sx - D, sy - 0.58*D);
     670      }
     671    }
     672  }
     673  if (object[0].ptype == 16) {  /* upside-down Y */
     674    for (i = 0; i < object[0].Npts; i++) {
     675      if (!(finite(x[i]) && finite(y[i]))) continue;
     676      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     677      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     678      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     679          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     680        if (scaleColor) {
     681          if (!finite(z[i])) continue;
     682          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     683          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     684        }
     685        D = scaleSize ? dz*z[i] : ds;
     686        DrawLine (sx, sy, sx - D, sy + 0.58*D);
     687        DrawLine (sx, sy, sx + D, sy + 0.58*D);
     688        DrawLine (sx, sy, sx,     sy - 1.15*D);
     689      }
     690    }
     691  }
    632692  if (object[0].ptype == 100) { /* connect a pair of points */
    633693
     
    652712void DrawXErrors (KapaGraphWidget *graph, Gobjects *object) {
    653713 
    654   int i, bar;
    655   float *x, *y, *dxm, *dxp;
     714  int i, bar, dz, ds, D;
     715  float *x, *y, *z, *dxm, *dxp;
    656716  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    657717  double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
     718
     719  int scaleSize = (object[0].size < 0);
    658720
    659721  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    670732  by = byi + byj;
    671733 
    672   x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm;
     734  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     735  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     736
     737  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
    673738  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    674739 
     
    678743  Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    679744
     745  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     746
    680747  for (i = 0; i < object[0].Npts; i++) {
    681     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    682     sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     748    // for open circles, only go to the outer radius
     749    D = 0;
     750    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     751    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     752    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     753    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     754    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
     755    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
     756    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER + D;
    683757    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    684     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
    685     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
     758    sx1 = sx0 + dxp[i]*mxi - D;
     759    sy1 = sy0 + dxp[i]*myi;
    686760    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    687761         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    696770      }
    697771    }
     772  skip_dxp:
    698773    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    699     sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     774    if (D > fabs(dxm[i]*mxi)) continue;
     775    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER - D;
    700776    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    701     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
    702     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
     777    sx1 = sx0 - dxm[i]*mxi + D;
     778    sy1 = sy0 - dxm[i]*myi;
    703779    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    704780         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    719795void DrawYErrors (KapaGraphWidget *graph, Gobjects *object) {
    720796
    721   int i, bar;
    722   float *x, *y, *dym, *dyp;
     797  int i, bar, dz, ds, D;
     798  float *x, *y, *z, *dym, *dyp;
    723799  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    724800  double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
     801
     802  int scaleSize = (object[0].size < 0);
    725803
    726804  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    737815  by = byi + byj;
    738816 
    739   x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym;
     817  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     818  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     819
     820  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
    740821  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    741822 
     
    745826  Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    746827
     828  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     829
    747830  for (i = 0; i < object[0].Npts; i++) {
    748     if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
     831    // for open circles, only go to the outer radius
     832    D = 0;
     833    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     834    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     835    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     836    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     837    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
     838    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
    749839    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
    750     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     840    sy0 = x[i]*myi + y[i]*myj + by + YCENTER - D;
    751841    sx1 = sx0 + dyp[i]*mxj;
    752     sy1 = sy0 + dyp[i]*myj;
     842    sy1 = sy0 + dyp[i]*myj + D;
    753843    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    754844         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    763853      }
    764854    }
     855  skip_dyp:
    765856    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
     857    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     858    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     859    if (D > fabs(dym[i]*myj)) continue;
    766860    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
    767     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    768     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
    769     sy1 = x[i]*myi + (y[i] - dym[i])*myj + by + YCENTER;
     861    sy0 = x[i]*myi + y[i]*myj + by + YCENTER + D;
     862    sx1 = sx0 - dym[i]*mxj;
     863    sy1 = sy0 - dym[i]*myj - D;
    770864    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    771865         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
  • trunk/Ohana/src/kapa2/src/InterpretKeys.c

    r37807 r38062  
    9898      Screen_to_Image (&X, &Y, (double)(event[0].x + 0.5), (double)(event[0].y + 0.5), &image[0].picture); \
    9999      UpdateStatusBox (graphic, image, X, Y, 0.0, 1); \
     100      Remap (graphic, image); \
    100101      break;
    101 
    102 //    Remap (graphic, image);
    103102
    104103    // the number of entries here must match the value of NCHANNELS in contants.h
  • trunk/Ohana/src/kapa2/src/PSObjects.c

    r35416 r38062  
    403403        D = scaleSize ? dz*z[i] : ds;
    404404        FillTriangle (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
    405         /*
    406           DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
    407           DrawLine (sx + D, sy + 0.58*D, sx,          sy - 1.15*D);
    408           DrawLine (sx,          sy - 1.15*D, sx - D, sy + 0.58*D);
    409         */
     405      }
     406    }
     407  }
     408  if (object[0].ptype == 14) {  /* filled triangle */
     409    for (i = 0; i < object[0].Npts; i++) {
     410      if (!(finite(x[i]) && finite(y[i]))) continue;
     411      sx = x[i]*mxi + y[i]*mxj + bx;
     412      sy = x[i]*myi + y[i]*myj + by;
     413      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     414          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     415      {
     416        if (scaleColor) {
     417          if (!finite(z[i])) continue;
     418          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     419          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     420        }
     421        D = scaleSize ? dz*z[i] : ds;
     422        FillTriangle (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D);
    410423      }
    411424    }
     
    426439        D = scaleSize ? dz*z[i] : ds;
    427440        DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D);
    428         DrawLine (sx + D, sy - 0.58*D, sx,          sy + 1.15*D);
    429         DrawLine (sx,          sy + 1.15*D, sx - D, sy - 0.58*D);
     441        DrawLine (sx + D, sy - 0.58*D, sx,     sy + 1.15*D);
     442        DrawLine (sx,     sy + 1.15*D, sx - D, sy - 0.58*D);
     443      }
     444    }
     445  }
     446  if (object[0].ptype == 15) {  /* upside-down open triangle */
     447    for (i = 0; i < object[0].Npts; i++) {
     448      if (!(finite(x[i]) && finite(y[i]))) continue;
     449      sx = x[i]*mxi + y[i]*mxj + bx;
     450      sy = x[i]*myi + y[i]*myj + by;
     451      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     452          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     453      {
     454        if (scaleColor) {
     455          if (!finite(z[i])) continue;
     456          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     457          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     458        }
     459        D = scaleSize ? dz*z[i] : ds;
     460        DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
     461        DrawLine (sx + D, sy + 0.58*D, sx,     sy - 1.15*D);
     462        DrawLine (sx,     sy - 1.15*D, sx - D, sy + 0.58*D);
    430463      }
    431464    }
     
    448481        DrawLine (sx, sy, sx + D, sy + 0.58*D);
    449482        DrawLine (sx, sy, sx,          sy - 1.15*D);
     483      }
     484    }
     485  }
     486  if (object[0].ptype == 16) {  /* Y */
     487    for (i = 0; i < object[0].Npts; i++) {
     488      if (!(finite(x[i]) && finite(y[i]))) continue;
     489      sx = x[i]*mxi + y[i]*mxj + bx;
     490      sy = x[i]*myi + y[i]*myj + by;
     491      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     492          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     493      {
     494        if (scaleColor) {
     495          if (!finite(z[i])) continue;
     496          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     497          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     498        }
     499        D = scaleSize ? dz*z[i] : ds;
     500        DrawLine (sx, sy, sx - D, sy - 0.58*D);
     501        DrawLine (sx, sy, sx + D, sy - 0.58*D);
     502        DrawLine (sx, sy, sx,     sy + 1.15*D);
    450503      }
    451504    }
     
    557610void PSXErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
    558611 
    559   int i, bar;
    560   float *x, *y, *dxm, *dxp;
     612  int i, bar, dz, ds, D;
     613  float *x, *y, *z, *dxm, *dxp;
    561614  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    562615  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
     616
     617  int scaleSize = (object[0].size < 0);
    563618
    564619  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    575630  by = byi + byj;
    576631 
    577   x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm;
     632  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     633  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     634
     635  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
    578636  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    579637   
     
    583641  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    584642
     643  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     644
    585645  for (i = 0; i < object[0].Npts; i++) {
    586     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    587     sx0 = x[i]*mxi + y[i]*mxj + bx;
     646    // for open circles, only go to the outer radius
     647    D = 0;
     648    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     649    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     650    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     651    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     652    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
     653    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
     654    sx0 = x[i]*mxi + y[i]*mxj + bx + D;
    588655    sy0 = x[i]*myi + y[i]*myj + by;
    589     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    590     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     656    sx1 = sx0 + dxp[i]*mxi - D;
     657    sy1 = sy0 + dxp[i]*myi;
    591658    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    592659         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    595662      {
    596663        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    597         // DrawLine (sx0, sy0, sx1, sy1);
    598664        if (bar) {
    599665          sx10 = sy1 - sz;
    600666          sx11 = sy1 + sz;
    601667          ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
    602           // DrawLine (sx1, sx10, sx1, sx11);
    603         }
    604       }
     668        }
     669      }
     670  skip_dxp:
    605671    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    606     sx0 = x[i]*mxi + y[i]*mxj + bx;
     672    if (D > fabs(dxm[i]*mxi)) continue;
     673    sx0 = x[i]*mxi + y[i]*mxj + bx - D;
    607674    sy0 = x[i]*myi + y[i]*myj + by;
    608     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    609     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     675    sx1 = sx0 - dxm[i]*mxi + D;
     676    sy1 = sy0 - dxm[i]*myi;
    610677    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    611678         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    614681      {
    615682        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    616         // DrawLine (sx0, sy0, sx1, sy1);
    617683        if (bar) {
    618684          sx10 = sy1 - sz;
    619685          sx11 = sy1 + sz;
    620686          ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
    621           // DrawLine (sx1, sx10, sx1, sx11);
    622687        }
    623688      }
     
    629694void PSYErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
    630695 
    631   int i, bar;
    632   float *x, *y, *dym, *dyp;
     696  int i, bar, dz, ds, D;
     697  float *x, *y, *z, *dym, *dyp;
    633698  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    634699  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
    635700 
     701  int scaleSize = (object[0].size < 0);
     702
    636703  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
    637704  mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
     
    647714  by = byi + byj;
    648715 
    649   x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym;
     716  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     717  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     718
     719  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
    650720  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    651721 
     
    655725  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    656726
     727  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     728
    657729  for (i = 0; i < object[0].Npts; i++) {
    658     if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
     730    // for open circles, only go to the outer radius
     731    D = 0;
     732    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     733    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     734    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     735    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     736    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
     737    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
    659738    sx0 = x[i]*mxi + y[i]*mxj + bx;
    660     sy0 = x[i]*myi + y[i]*myj + by;
    661     sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
    662     sy1 = x[i]*myi + (y[i] + dyp[i])*myj + by;
     739    sy0 = x[i]*myi + y[i]*myj + by - D;
     740    sx1 = sx0 + dyp[i]*mxj;
     741    sy1 = sy0 + dyp[i]*myj + D;
    663742    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    664743         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    667746      {
    668747        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    669         // DrawLine (sx0, sy0, sx1, sy1);
    670748        if (bar) {
    671749          sx10 = sx1 - sz;
    672750          sx11 = sx1 + sz;
    673751          ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
    674           // DrawLine (sx10, sy1, sx11, sy1);
    675         }
    676       }
     752        }
     753      }
     754  skip_dyp:
    677755    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
     756    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     757    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     758    if (D > fabs(dym[i]*myj)) continue;
    678759    sx0 = x[i]*mxi + y[i]*mxj + bx;
    679     sy0 = x[i]*myi + y[i]*myj + by;
    680     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    681     sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
     760    sy0 = x[i]*myi + y[i]*myj + by + D;
     761    sx1 = sx0 - dym[i]*mxj;
     762    sy1 = sy0 - dym[i]*myj - D;
    682763    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    683764         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    686767      {
    687768        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    688         // DrawLine (sx0, sy0, sx1, sy1);
    689769        if (bar) {
    690770          sx10 = sx1 - sz;
    691771          sx11 = sx1 + sz;
    692772          ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
    693           // DrawLine (sx10, sy1, sx11, sy1);
    694773        }
    695774      }
  • trunk/Ohana/src/kapa2/src/bDrawObjects.c

    r37047 r38062  
    406406    }
    407407  }
     408  if (object[0].ptype == 14) {  /* filled triangle */
     409    for (i = 0; i < object[0].Npts; i++) {
     410      if (!(finite(x[i]) && finite(y[i]))) continue;
     411      sx = x[i]*mxi + y[i]*mxj + bx;
     412      sy = x[i]*myi + y[i]*myj + by;
     413      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     414          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     415      {
     416        if (scaleColor) {
     417          if (!finite(z[i])) continue;
     418          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     419          buffer->bColor_R = pixel1[pixel];
     420          buffer->bColor_G = pixel2[pixel];
     421          buffer->bColor_B = pixel3[pixel];
     422        }
     423        D = scaleSize ? dz*z[i] : ds;
     424        // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
     425        FillTriangle (buffer, sx, sy - 0.58*D, D, +1.73*D);
     426        // out-of-range points skipped by bDrawPoint
     427      }
     428    }
     429  }
    408430  if (object[0].ptype == 5) {   /* open triangle */
    409431    for (i = 0; i < object[0].Npts; i++) {
     
    423445        D = scaleSize ? dz*z[i] : ds;
    424446        OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D);
     447        // out-of-range points skipped by bDrawPoint
     448      }
     449    }
     450  }
     451  if (object[0].ptype == 15) {  /* open triangle */
     452    for (i = 0; i < object[0].Npts; i++) {
     453      if (!(finite(x[i]) && finite(y[i]))) continue;
     454      sx = x[i]*mxi + y[i]*mxj + bx;
     455      sy = x[i]*myi + y[i]*myj + by;
     456      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     457          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     458      {
     459        if (scaleColor) {
     460          if (!finite(z[i])) continue;
     461          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     462          buffer->bColor_R = pixel1[pixel];
     463          buffer->bColor_G = pixel2[pixel];
     464          buffer->bColor_B = pixel3[pixel];
     465        }
     466        D = scaleSize ? dz*z[i] : ds;
     467        OpenTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
    425468        // out-of-range points skipped by bDrawPoint
    426469      }
     
    446489        DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D);
    447490        DrawLine (buffer, sx, sy, sx,     sy + 1.15*D);
     491        // out-of-range points skipped by bDrawPoint
     492      }
     493    }
     494  }
     495  if (object[0].ptype == 16) {  /* Y */
     496    for (i = 0; i < object[0].Npts; i++) {
     497      if (!(finite(x[i]) && finite(y[i]))) continue;
     498      sx = x[i]*mxi + y[i]*mxj + bx;
     499      sy = x[i]*myi + y[i]*myj + by;
     500      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     501          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     502      {
     503        if (scaleColor) {
     504          if (!finite(z[i])) continue;
     505          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     506          buffer->bColor_R = pixel1[pixel];
     507          buffer->bColor_G = pixel2[pixel];
     508          buffer->bColor_B = pixel3[pixel];
     509        }
     510        D = scaleSize ? dz*z[i] : ds;
     511        DrawLine (buffer, sx, sy, sx - D, sy + 0.58*D);
     512        DrawLine (buffer, sx, sy, sx + D, sy + 0.58*D);
     513        DrawLine (buffer, sx, sy, sx,     sy - 1.15*D);
    448514        // out-of-range points skipped by bDrawPoint
    449515      }
     
    590656void bDrawXErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
    591657 
    592   int i, bar;
    593   float *x, *y, *dxm, *dxp;
     658  int i, bar, dz, ds, D;
     659  float *x, *y, *z, *dxm, *dxp;
    594660  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    595661  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
     662
     663  int scaleSize = (object[0].size < 0);
    596664
    597665  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    608676  by = byi + byj;
    609677 
    610   x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm;
     678  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     679  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     680
     681  x = object[0].x; y = object[0].y; dxp = object[0].dxp; dxm = object[0].dxm; z = object[0].z;
    611682  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    612683   
     
    616687  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    617688
     689  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     690
    618691  for (i = 0; i < object[0].Npts; i++) {
    619     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    620     sx0 = x[i]*mxi + y[i]*mxj + bx;
     692    // for open circles, only go to the outer radius
     693    D = 0;
     694    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     695    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     696    if (object[0].ptype ==  5) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     697    if (object[0].ptype == 15) { D = scaleSize ? 0.66*dz*z[i] : 0.66*ds; }
     698    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) goto skip_dxp;
     699    if (D > fabs(dxp[i]*mxi)) goto skip_dxp;
     700    sx0 = x[i]*mxi + y[i]*mxj + bx + D;
    621701    sy0 = x[i]*myi + y[i]*myj + by;
    622     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    623     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     702    sx1 = sx0 + dxp[i]*mxi - D;
     703    sy1 = sy0 + dxp[i]*myi;
    624704    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    625705         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    628708    {
    629709      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    630       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    631710      if (bar) {
    632711        sx10 = sy1 - sz;
    633712        sx11 = sy1 + sz;
    634713        bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
    635         //   DrawLine (buffer, sx1, sx10, sx1, sx11);
    636       }
    637     }
     714      }
     715    }
     716  skip_dxp:
    638717    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    639     sx0 = x[i]*mxi + y[i]*mxj + bx;
     718    if (D > fabs(dxm[i]*mxi)) continue;
     719    sx0 = x[i]*mxi + y[i]*mxj + bx - D;
    640720    sy0 = x[i]*myi + y[i]*myj + by;
    641     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    642     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     721    sx1 = sx0 - dxm[i]*mxi + D;
     722    sy1 = sy0 - dxm[i]*myi;
    643723    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    644724         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    647727    {
    648728      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    649       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    650729      if (bar) {
    651730        sx10 = sy1 - sz;
    652731        sx11 = sy1 + sz;
    653732        bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
    654         //   DrawLine (buffer, sx1, sx10, sx1, sx11);
    655733      }
    656734    }
     
    661739void bDrawYErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
    662740 
    663   int i, bar;
    664   float *x, *y, *dym, *dyp;
     741  int i, bar, dz, ds, D;
     742  float *x, *y, *z, *dym, *dyp;
    665743  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    666744  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
    667745 
     746  int scaleSize = (object[0].size < 0);
     747
    668748  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
    669749  mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
     
    679759  by = byi + byj;
    680760 
    681   x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym;
     761  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     762  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     763
     764  x = object[0].x; y = object[0].y; dyp = object[0].dyp; dym = object[0].dym; z = object[0].z;
    682765  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    683766 
     
    687770  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    688771
     772  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     773
    689774  for (i = 0; i < object[0].Npts; i++) {
    690     if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
     775    // for open circles, only go to the outer radius
     776    D = 0;
     777    if (object[0].ptype ==  7) { D = scaleSize ? dz*z[i] : ds; }
     778    if (object[0].ptype ==  1) { D = scaleSize ? dz*z[i] : ds; }
     779    if (object[0].ptype ==  5) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     780    if (object[0].ptype == 15) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     781    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) goto skip_dyp;
     782    if (D > fabs(dyp[i]*myj)) goto skip_dyp;
    691783    sx0 = x[i]*mxi + y[i]*mxj + bx;
    692     sy0 = x[i]*myi + y[i]*myj + by;
    693     sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
    694     sy1 = x[i]*myi + (y[i] + dyp[i])*myj + by;
     784    sy0 = x[i]*myi + y[i]*myj + by - D;
     785    sx1 = sx0 + dyp[i]*mxj;
     786    sy1 = sy0 + dyp[i]*myj + D;
    695787    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    696788         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    699791    {
    700792      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    701       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    702793      if (bar) {
    703794        sx10 = sx1 - sz;
    704795        sx11 = sx1 + sz;
    705796        bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
    706         //   DrawLine (buffer, sx10, sy1, sx11, sy1);
    707       }
    708     }
     797      }
     798    }
     799  skip_dyp:
    709800    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
     801    if (object[0].ptype ==  5) { D = scaleSize ? 0.58*dz*z[i] : 0.58*ds; }
     802    if (object[0].ptype == 15) { D = scaleSize ? 1.15*dz*z[i] : 1.15*ds; }
     803    if (D > fabs(dym[i]*myj)) continue;
    710804    sx0 = x[i]*mxi + y[i]*mxj + bx;
    711     sy0 = x[i]*myi + y[i]*myj + by;
    712     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    713     sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
     805    sy0 = x[i]*myi + y[i]*myj + by + D;
     806    sx1 = sx0 - dym[i]*mxj;
     807    sy1 = sy0 - dym[i]*myj - D;
    714808    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    715809         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    718812    {
    719813      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    720       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    721814      if (bar) {
    722815        sx10 = sx1 - sz;
    723816        sx11 = sx1 + sz;
    724817        bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
    725         //   DrawLine (buffer, sx10, sy1, sx11, sy1);
    726818      }
    727819    }
Note: See TracChangeset for help on using the changeset viewer.