IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37946


Ignore:
Timestamp:
Mar 4, 2015, 3:19:26 AM (11 years ago)
Author:
eugene
Message:

error bars do not fill center of open dots

Location:
branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/DrawObjects.c

    r37944 r37946  
    712712void DrawXErrors (KapaGraphWidget *graph, Gobjects *object) {
    713713 
    714   int i, bar;
    715   float *x, *y, *dxm, *dxp;
     714  int i, bar, dz, ds, D;
     715  float *x, *y, *z, *dxm, *dxp;
    716716  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    717717  double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
     718
     719  int scaleSize = (object[0].size < 0);
    718720
    719721  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    730732  by = byi + byj;
    731733 
    732   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;
    733738  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    734739 
     
    738743  Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    739744
     745  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     746
    740747  for (i = 0; i < object[0].Npts; i++) {
    741     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    742     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;
    743757    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    744     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
    745     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
     758    sx1 = sx0 + dxp[i]*mxi - D;
     759    sy1 = sy0 + dxp[i]*myi;
    746760    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    747761         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    756770      }
    757771    }
     772  skip_dxp:
    758773    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    759     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;
    760776    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    761     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
    762     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
     777    sx1 = sx0 - dxm[i]*mxi + D;
     778    sy1 = sy0 - dxm[i]*myi;
    763779    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    764780         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    779795void DrawYErrors (KapaGraphWidget *graph, Gobjects *object) {
    780796
    781   int i, bar;
    782   float *x, *y, *dym, *dyp;
     797  int i, bar, dz, ds, D;
     798  float *x, *y, *z, *dym, *dyp;
    783799  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    784800  double sx0, sy0, sx1, sy1, sz, sx10, sx11, X0, X1, Y0, Y1;
     801
     802  int scaleSize = (object[0].size < 0);
    785803
    786804  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    797815  by = byi + byj;
    798816 
    799   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;
    800821  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    801822 
     
    805826  Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    806827
     828  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     829
    807830  for (i = 0; i < object[0].Npts; i++) {
    808     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;
    809839    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
    810     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     840    sy0 = x[i]*myi + y[i]*myj + by + YCENTER - D;
    811841    sx1 = sx0 + dyp[i]*mxj;
    812     sy1 = sy0 + dyp[i]*myj;
     842    sy1 = sy0 + dyp[i]*myj + D;
    813843    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    814844         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    823853      }
    824854    }
     855  skip_dyp:
    825856    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;
    826860    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
    827     sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    828     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
    829     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;
    830864    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    831865         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
  • branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/PSObjects.c

    r37944 r37946  
    610610void PSXErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
    611611 
    612   int i, bar;
    613   float *x, *y, *dxm, *dxp;
     612  int i, bar, dz, ds, D;
     613  float *x, *y, *z, *dxm, *dxp;
    614614  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    615615  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
     616
     617  int scaleSize = (object[0].size < 0);
    616618
    617619  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    628630  by = byi + byj;
    629631 
    630   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;
    631636  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    632637   
     
    636641  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    637642
     643  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     644
    638645  for (i = 0; i < object[0].Npts; i++) {
    639     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    640     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;
    641655    sy0 = x[i]*myi + y[i]*myj + by;
    642     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    643     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     656    sx1 = sx0 + dxp[i]*mxi - D;
     657    sy1 = sy0 + dxp[i]*myi;
    644658    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    645659         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    648662      {
    649663        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    650         // DrawLine (sx0, sy0, sx1, sy1);
    651664        if (bar) {
    652665          sx10 = sy1 - sz;
    653666          sx11 = sy1 + sz;
    654667          ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
    655           // DrawLine (sx1, sx10, sx1, sx11);
    656         }
    657       }
     668        }
     669      }
     670  skip_dxp:
    658671    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    659     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;
    660674    sy0 = x[i]*myi + y[i]*myj + by;
    661     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    662     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     675    sx1 = sx0 - dxm[i]*mxi + D;
     676    sy1 = sy0 - dxm[i]*myi;
    663677    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    664678         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    667681      {
    668682        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    669         // DrawLine (sx0, sy0, sx1, sy1);
    670683        if (bar) {
    671684          sx10 = sy1 - sz;
    672685          sx11 = sy1 + sz;
    673686          ClipLinePS (sx1, sx10, sx1, sx11, X0, Y0, X1, Y1, f);
    674           // DrawLine (sx1, sx10, sx1, sx11);
    675687        }
    676688      }
     
    682694void PSYErrors (KapaGraphWidget *graph, Gobjects *object, FILE *f) {
    683695 
    684   int i, bar;
    685   float *x, *y, *dym, *dyp;
     696  int i, bar, dz, ds, D;
     697  float *x, *y, *z, *dym, *dyp;
    686698  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    687699  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
    688700 
     701  int scaleSize = (object[0].size < 0);
     702
    689703  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
    690704  mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
     
    700714  by = byi + byj;
    701715 
    702   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;
    703720  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    704721 
     
    708725  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    709726
     727  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     728
    710729  for (i = 0; i < object[0].Npts; i++) {
    711     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;
    712738    sx0 = x[i]*mxi + y[i]*mxj + bx;
    713     sy0 = x[i]*myi + y[i]*myj + by;
    714     sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
    715     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;
    716742    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    717743         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    720746      {
    721747        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    722         // DrawLine (sx0, sy0, sx1, sy1);
    723748        if (bar) {
    724749          sx10 = sx1 - sz;
    725750          sx11 = sx1 + sz;
    726751          ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
    727           // DrawLine (sx10, sy1, sx11, sy1);
    728         }
    729       }
     752        }
     753      }
     754  skip_dyp:
    730755    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;
    731759    sx0 = x[i]*mxi + y[i]*mxj + bx;
    732     sy0 = x[i]*myi + y[i]*myj + by;
    733     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    734     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;
    735763    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    736764         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    739767      {
    740768        ClipLinePS (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1, f);
    741         // DrawLine (sx0, sy0, sx1, sy1);
    742769        if (bar) {
    743770          sx10 = sx1 - sz;
    744771          sx11 = sx1 + sz;
    745772          ClipLinePS (sx10, sy1, sx11, sy1, X0, Y0, X1, Y1, f);
    746           // DrawLine (sx10, sy1, sx11, sy1);
    747773        }
    748774      }
  • branches/eam_branches/ipp-20150112/Ohana/src/kapa2/src/bDrawObjects.c

    r37944 r37946  
    656656void bDrawXErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
    657657 
    658   int i, bar;
    659   float *x, *y, *dxm, *dxp;
     658  int i, bar, dz, ds, D;
     659  float *x, *y, *z, *dxm, *dxp;
    660660  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    661661  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
     662
     663  int scaleSize = (object[0].size < 0);
    662664
    663665  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    674676  by = byi + byj;
    675677 
    676   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;
    677682  bar = object[0].ebar; sz = object[0].size*graph[0].axis[1].dfy*0.03;
    678683   
     
    682687  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    683688
     689  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     690
    684691  for (i = 0; i < object[0].Npts; i++) {
    685     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    686     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;
    687701    sy0 = x[i]*myi + y[i]*myj + by;
    688     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    689     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     702    sx1 = sx0 + dxp[i]*mxi - D;
     703    sy1 = sy0 + dxp[i]*myi;
    690704    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    691705         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    694708    {
    695709      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    696       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    697710      if (bar) {
    698711        sx10 = sy1 - sz;
    699712        sx11 = sy1 + sz;
    700713        bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
    701         //   DrawLine (buffer, sx1, sx10, sx1, sx11);
    702       }
    703     }
     714      }
     715    }
     716  skip_dxp:
    704717    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    705     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;
    706720    sy0 = x[i]*myi + y[i]*myj + by;
    707     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    708     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     721    sx1 = sx0 - dxm[i]*mxi + D;
     722    sy1 = sy0 - dxm[i]*myi;
    709723    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    710724         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    713727    {
    714728      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    715       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    716729      if (bar) {
    717730        sx10 = sy1 - sz;
    718731        sx11 = sy1 + sz;
    719732        bDrawClipLine (buffer, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);
    720         //   DrawLine (buffer, sx1, sx10, sx1, sx11);
    721733      }
    722734    }
     
    727739void bDrawYErrors (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) {
    728740 
    729   int i, bar;
    730   float *x, *y, *dym, *dyp;
     741  int i, bar, dz, ds, D;
     742  float *x, *y, *z, *dym, *dyp;
    731743  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    732744  double sx0, sy0, sx1, sy1, sz, sx10, sx11;
    733745 
     746  int scaleSize = (object[0].size < 0);
     747
    734748  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
    735749  mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
     
    745759  by = byi + byj;
    746760 
    747   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;
    748765  bar = object[0].ebar; sz = object[0].size*graph[0].axis[0].dfx*0.03;
    749766 
     
    753770  double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    754771
     772  /// XXX NOTE : D should be modified by (mxi,myi) for tilted axes dx = D*(mxi/mx), dy = D*(myi/mx)
     773
    755774  for (i = 0; i < object[0].Npts; i++) {
    756     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;
    757783    sx0 = x[i]*mxi + y[i]*mxj + bx;
    758     sy0 = x[i]*myi + y[i]*myj + by;
    759     sx1 = x[i]*mxi + (y[i] + dyp[i])*mxj + bx;
    760     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;
    761787    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    762788         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    765791    {
    766792      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    767       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    768793      if (bar) {
    769794        sx10 = sx1 - sz;
    770795        sx11 = sx1 + sz;
    771796        bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
    772         //   DrawLine (buffer, sx10, sy1, sx11, sy1);
    773       }
    774     }
     797      }
     798    }
     799  skip_dyp:
    775800    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;
    776804    sx0 = x[i]*mxi + y[i]*mxj + bx;
    777     sy0 = x[i]*myi + y[i]*myj + by;
    778     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    779     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;
    780808    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    781809         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    784812    {
    785813      bDrawClipLine (buffer, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
    786       //   DrawLine (buffer, sx0, sy0, sx1, sy1);
    787814      if (bar) {
    788815        sx10 = sx1 - sz;
    789816        sx11 = sx1 + sz;
    790817        bDrawClipLine (buffer, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);
    791         //   DrawLine (buffer, sx10, sy1, sx11, sy1);
    792818      }
    793819    }
Note: See TracChangeset for help on using the changeset viewer.