IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 8, 2011, 11:47:27 AM (15 years ago)
Author:
eugene
Message:

updates to allow read vectors from CSV files; point colors scaled by vector (zcplot)

Location:
branches/eam_branches/ipp-20110505/Ohana
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20110505/Ohana

  • branches/eam_branches/ipp-20110505/Ohana/Makefile.in

    r28190 r31615  
    7676        mkdir -p $(DESTLIB)
    7777        mkdir -p $(DESTBIN)
    78         for i in $(LIBS); do make $$i.install || exit 1; done
     78        for i in $(LIBS); do $(MAKE) $$i.install || exit 1; done
    7979        chmod +x ohana-config
    8080        cp -f ohana-config $(DESTBIN)/
    8181
    8282bins:
    83         for i in $(PROGRAM); do make $$i; done
     83        for i in $(PROGRAM); do $(MAKE) $$i; done
    8484
    8585all:
    86         make libs || exit 1
    87         for i in $(PROGRAM); do make $$i || exit 1; done
     86        $(MAKE) libs || exit 1
     87        for i in $(PROGRAM); do $(MAKE) $$i || exit 1; done
    8888
    8989extras:
    90         for i in $(EXTRAS); do make $$i || exit 1; done
     90        for i in $(EXTRAS); do $(MAKE) $$i || exit 1; done
    9191
    9292pantasks:
    93         make libs || exit 1
    94         cd src/opihi; make pclient.install && exit 1
    95         cd src/opihi; make pcontrol.install && exit 1
    96         cd src/opihi; make pantasks.install && exit 1
     93        $(MAKE) libs || exit 1
     94        cd src/opihi; $(MAKE) pclient.install && exit 1
     95        cd src/opihi; $(MAKE) pcontrol.install && exit 1
     96        cd src/opihi; $(MAKE) pantasks.install && exit 1
    9797
    9898mana:
    99         make libs
    100         make kapa2.install
    101         cd src/opihi; make mana.install && exit 1
     99        $(MAKE) libs
     100        $(MAKE) kapa2.install
     101        cd src/opihi; $(MAKE) mana.install && exit 1
    102102
    103103dvoshell:
    104         make libs
    105         make kapa2.install
    106         cd src/opihi; make dvo.install && exit 1
     104        $(MAKE) libs
     105        $(MAKE) kapa2.install
     106        cd src/opihi; $(MAKE) dvo.install && exit 1
    107107
    108108clean:
    109109        @if [ "$(ARCH)" = "" ]; then echo ""; echo " *** please define ARCH ***"; echo; exit 1; fi
    110         for i in $(LIBS); do make $$i.clean || exit 1; done
    111         for i in $(PROGRAM); do make $$i.clean || exit 1; done
    112         for i in $(EXTRAS); do make $$i.clean || exit 1; done
     110        for i in $(LIBS); do $(MAKE) $$i.clean || exit 1; done
     111        for i in $(PROGRAM); do $(MAKE) $$i.clean || exit 1; done
     112        for i in $(EXTRAS); do $(MAKE) $$i.clean || exit 1; done
    113113        @rm -f `find . -name .mana`
    114114        @rm -f `find . -name .dvo`
     
    117117dist:
    118118        @if [ "$(ARCH)" = "" ]; then echo ""; echo " *** please define ARCH ***"; echo; exit 1; fi
    119         for i in $(LIBS); do make $$i.dist || exit 1; done
    120         for i in $(PROGRAM); do make $$i.dist || exit 1; done
     119        for i in $(LIBS); do $(MAKE) $$i.dist || exit 1; done
     120        for i in $(PROGRAM); do $(MAKE) $$i.dist || exit 1; done
    121121        @echo -n -e "\0033]0; *** Ohana: done $@ *** \0007" \
    122122
    123123install:
    124124        @if [ "$(ARCH)" = "" ]; then echo ""; echo " *** please define ARCH ***"; echo; exit 1; fi
    125         for i in $(LIBS); do make $$i.install || exit 1; done
    126         for i in $(PROGRAM); do make $$i.install || exit 1; done
     125        for i in $(LIBS); do $(MAKE) $$i.install || exit 1; done
     126        for i in $(PROGRAM); do $(MAKE) $$i.install || exit 1; done
    127127        @echo -n -e "\0033]0; *** Ohana: done $@ *** \0007" \
    128128
    129129install.extras:
    130         for i in $(EXTRAS); do make $$i.install || exit 1; done
     130        for i in $(EXTRAS); do $(MAKE) $$i.install || exit 1; done
    131131        @echo -n -e "\0033]0; *** Ohana: done $@ *** \0007" \
    132132
     
    135135        @if [ -d "src/$@" ]; then \
    136136          echo -n -e "\0033]0; *** Ohana: $@ *** \0007"; \
    137           (cd src/$@ && make); \
     137          (cd src/$@ && $(MAKE)); \
    138138        fi
    139139        @echo -n -e "\0033]0; *** Ohana: done $@ *** \0007" \
     
    142142        @echo -n -e "\0033]0; *** Ohana: $@ *** \0007" \
    143143        mkdir -p bin/$(ARCH)
    144         if [ -d "src/$*" ]; then (cd src/$* && make install); fi
     144        if [ -d "src/$*" ]; then (cd src/$* && $(MAKE) install); fi
    145145
    146146%.clean:
    147         if [ -d "src/$*" ]; then (cd src/$* && make clean); fi
     147        if [ -d "src/$*" ]; then (cd src/$* && $(MAKE) clean); fi
    148148
    149149%.dist:
    150         (cd src/$* && make dist)
     150        (cd src/$* && $(MAKE) dist)
  • branches/eam_branches/ipp-20110505/Ohana/configure.tcsh

    r31160 r31615  
    203203  set CPPFLAGS = ""
    204204endif 
    205 if ($pedantic) set CPPFLAGS = "$CPPFLAGS-Wall -Werror "
    206 if ($memcheck) set CPPFLAGS = "$CPPFLAGS-DOHANA_MEMORY "
     205if ($pedantic) set CPPFLAGS = "$CPPFLAGS -Wall -Werror"
     206if ($memcheck) set CPPFLAGS = "$CPPFLAGS -DOHANA_MEMORY"
    207207
    208208if (! $?LDFLAGS) then
     
    540540  endif
    541541  set haveflag = `echo $f | tr '[:lower:]' '[:upper:]' | tr '.' '_'`
    542   set CPPFLAGS = "$CPPFLAGS-DHAVE_$haveflag "
     542  set CPPFLAGS = "$CPPFLAGS -DHAVE_$haveflag"
    543543end
    544544
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/DrawObjects.c

    r29539 r31615  
    11# include "Ximage.h"
    22
    3 # define DrawLine(X1,Y1,X2,Y2) (XDrawLine (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
    4 # define DrawRectangle(X1,Y1,X2,Y2) (XDrawRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
    5 # define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
    6 # define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R+0.5), (int)(Y-R+0.5), abs(2*R+0.5), abs(2*R+0.5), 0, 23040))
     3# define DrawLine(X1,Y1,X2,Y2) (XDrawLine (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     4# define DrawRectangle(X1,Y1,X2,Y2) (XDrawRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     5# define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     6# define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R), abs(2*R), 0, 23040))
     7# define FillCircle(X,Y,R) (XFillArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R+1), abs(2*R+1), 0, 23040))
    78
    89# define CONNECT 0
    910# define HISTOGRAM 1
    1011# define POINTS 2
     12
     13# define XCENTER 0.0
     14# define YCENTER 0.0
     15# define CAPSTYLE CapButt
     16# define JOINSTYLE JoinMiter
    1117
    1218static Graphic *graphic;
     
    3440  // this function calls all of the supporting Draw... functions below
    3541  graphic = GetGraphic();
    36 
    37   lweight = MAX (0, MIN (10, object[0].lweight));
     42 
     43  lweight = MAX (1, MIN (10, object[0].lweight));
     44
     45  /** some notes on drawing lines in X:
     46
     47      "In general, drawing a thin line will be faster than drawing a wide line of width
     48      one. However, because of their different drawing algorithms, thin lines may not mix
     49      well aesthetically with wide lines. If it is desirable to obtain precise and uniform
     50      results across all displays, a client should always use a line-width of one rather
     51      than a line-width of zero."  -- http://www.hpc.unimelb.edu.au/nec/g1ae02e/chap7.html
     52
     53  */
    3854
    3955  /* set line type */
    4056  switch (object[0].ltype) {
    4157    case 0:
    42       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     58      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
    4359      break;
    4460    case 1:
    4561      XSetDashes (graphic->display, graphic->gc, 100, dash, 2);
    46       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     62      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
    4763      break;
    4864    case 2:
    4965      XSetDashes (graphic->display, graphic->gc, 10, dot, 2);
    50       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     66      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
    5167      break;
    5268    default:
    53       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     69      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
    5470      break;
    5571  }
    5672
    57   XSetForeground (graphic->display, graphic->gc, graphic->color[object[0].color]);
     73  // negative color values mean "scale color with object.z"
     74  if (object[0].color >= 0) {
     75    XSetForeground (graphic->display, graphic->gc, graphic->color[object[0].color]);
     76  }
    5877
    5978  switch (object[0].style) {
     
    7695  }
    7796
    78   XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CapNotLast, JoinMiter);
     97  XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE);
    7998  XSetForeground (graphic->display, graphic->gc, graphic->fore);
    8099  return (TRUE);
     
    111130  for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
    112131  if (i >= object[0].Npts) return;
    113   sx0 = x[i]*mxi + y[i]*mxj + bx;
    114   sy0 = x[i]*myi + y[i]*myj + by;
     132  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     133  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    115134
    116135  for (i++; i < object[0].Npts; i++) {
    117136    if (!(finite(x[i]) && finite(y[i]))) continue;
    118     sx1 = x[i]*mxi + y[i]*mxj + bx;
    119     sy1 = x[i]*myi + y[i]*myj + by;
     137    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     138    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    120139   
    121140    ClipLine (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
     
    213232
    214233  /* first valid data point */
    215   sx0 = x[i]*mxi + y[i]*mxj + bx;
    216   sy0 = x[i]*myi + y[i]*myj + by;
     234  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     235  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    217236  sx0 = MIN (MAX (sx0, X0), X1);
    218237  sy0 = MAX (MIN (sy0, Y0), Y1);
     
    223242
    224243  /* second valid data point */
    225   sx1 = x[i]*mxi + y[i]*mxj + bx;
    226   sy1 = x[i]*myi + y[i]*myj + by;
     244  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     245  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    227246  sx1 = MIN (MAX (sx1, X0), X1);
    228247  sy1 = MAX (MIN (sy1, Y0), Y1);
     
    246265  for (i++; i < object[0].Npts; i++) {
    247266    if (!(finite(x[i]) && finite(y[i]))) continue;
    248     sx1 = x[i]*mxi + y[i]*mxj + bx;
    249     sy1 = x[i]*myi + y[i]*myj + by;
     267    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     268    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    250269    sx1 = MIN (MAX (sx1, X0), X1);
    251270    sy1 = MAX (MIN (sy1, Y0), Y1);
     
    298317
    299318  /* first valid data point */
    300   sx0 = x[i]*mxi + y[i]*mxj + bx;
    301   sy0 = x[i]*myi + y[i]*myj + by;
     319  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     320  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    302321  sx0 = MIN (MAX (sx0, X0), X1);
    303322  sy0 = MAX (MIN (sy0, Y0), Y1);
     
    308327
    309328  /* second valid data point */
    310   sx1 = x[i]*mxi + y[i]*mxj + bx;
    311   sy1 = x[i]*myi + y[i]*myj + by;
     329  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     330  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    312331  sx1 = MIN (MAX (sx1, X0), X1);
    313332  sy1 = MAX (MIN (sy1, Y0), Y1);
     
    330349  for (i++; i < object[0].Npts; i++) {
    331350    if (!(finite(x[i]) && finite(y[i]))) continue;
    332     sx1 = x[i]*mxi + y[i]*mxj + bx;
    333     sy1 = x[i]*myi + y[i]*myj + by;
     351    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     352    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    334353    sx1 = MIN (MAX (sx1, X0), X1);
    335354    sy1 = MAX (MIN (sy1, Y0), Y1);
     
    356375  float *x, *y, *z;
    357376  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    358   double sx, sy, d, sx1, sy1, sx2, sy2;
     377  int sx, sy, sx1, sy1, sx2, sy2, ds, dz, D;
    359378 
    360379  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    371390  by = byi + byj;
    372391 
     392  Graphic *graphic = GetGraphic();
     393
    373394  /**** points are scaled by object.z ***/
    374   if (object[0].size < 0) {
    375     d = 0.5 * (graphic->dx + graphic->dy) * 0.01;
    376     x = object[0].x; y = object[0].y; z = object[0].z;
    377     if (object[0].ptype == 0) { /* filled box */
    378       for (i = 0; i < object[0].Npts; i++) {
    379         if (!(finite(x[i]) && finite(y[i]))) continue;
    380         sx = x[i]*mxi + y[i]*mxj + bx;
    381         sy = x[i]*myi + y[i]*myj + by;
    382         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    383             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    384         {
    385           FillRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
    386         }
    387       }
    388     }
    389     if (object[0].ptype == 1) { /* open box */
    390       for (i = 0; i < object[0].Npts; i++) {
    391         if (!(finite(x[i]) && finite(y[i]))) continue;
    392         sx = x[i]*mxi + y[i]*mxj + bx;
    393         sy = x[i]*myi + y[i]*myj + by;
    394         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    395             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    396         {
    397           DrawRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
    398         }
    399       }
    400     }
    401     if (object[0].ptype == 2) { /* cross */
    402       for (i = 0; i < object[0].Npts; i++) {
    403         if (!(finite(x[i]) && finite(y[i]))) continue;
    404         sx = x[i]*mxi + y[i]*mxj + bx;
    405         sy = x[i]*myi + y[i]*myj + by;
    406         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    407             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    408         {
    409           DrawLine (sx - d*z[i], sy, sx + d*z[i] + 1, sy);
    410           DrawLine (sx, sy - d*z[i], sx, sy + d*z[i] + 1);
    411         }
    412       }
    413     }
    414     if (object[0].ptype == 3) { /* x */
    415       for (i = 0; i < object[0].Npts; i++) {
    416         if (!(finite(x[i]) && finite(y[i]))) continue;
    417         sx = x[i]*mxi + y[i]*mxj + bx;
    418         sy = x[i]*myi + y[i]*myj + by;
    419         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    420             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    421         {
    422           DrawLine (sx + d*z[i] + 1, sy - d*z[i] - 1, sx - d*z[i], sy + d*z[i]);
    423           DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i] + 1, sy + d*z[i] + 1);
    424         }
    425       }
    426     }
    427     if (object[0].ptype == 4) { /* filled triangle */
    428       XPoint points[4];
    429       for (i = 0; i < object[0].Npts; i++) {
    430         if (!(finite(x[i]) && finite(y[i]))) continue;
    431         sx = x[i]*mxi + y[i]*mxj + bx;
    432         sy = x[i]*myi + y[i]*myj + by;
    433         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    434             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    435         {
    436           points[0].x = sx - d*z[i];  points[0].y = sy + 0.58*d*z[i]; 
    437           points[1].x = sx + d*z[i];  points[1].y = sy + 0.58*d*z[i]; 
    438           points[2].x = sx;           points[2].y = sy - 1.15*d*z[i]; 
    439           points[3].x = sx - d*z[i];  points[3].y = sy + 0.58*d*z[i]; 
    440           XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
    441         }
    442       }
    443     }
    444     if (object[0].ptype == 5) { /* open triangle */
    445       for (i = 0; i < object[0].Npts; i++) {
    446         if (!(finite(x[i]) && finite(y[i]))) continue;
    447         sx = x[i]*mxi + y[i]*mxj + bx;
    448         sy = x[i]*myi + y[i]*myj + by;
    449         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    450             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    451         {
    452           DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    453           DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    454           DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
    455         }
    456       }
    457     }
    458     if (object[0].ptype == 6) { /* Y */
    459       for (i = 0; i < object[0].Npts; i++) {
    460         if (!(finite(x[i]) && finite(y[i]))) continue;
    461         sx = x[i]*mxi + y[i]*mxj + bx;
    462         sy = x[i]*myi + y[i]*myj + by;
    463         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    464             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    465         {
    466           DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    467           DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    468           DrawLine (sx, sy, sx,          sy - 1.15*d*z[i]);
    469         }
    470       }
    471     }
    472     if (object[0].ptype == 7) { /* 0 */
    473       for (i = 0; i < object[0].Npts; i++) {
    474         if (!(finite(x[i]) && finite(y[i]))) continue;
    475         sx = x[i]*mxi + y[i]*mxj + bx;
    476         sy = x[i]*myi + y[i]*myj + by;
    477         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    478             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    479         {
    480           DrawCircle (sx, sy, d*z[i]);
    481         }
    482       }
    483     }
    484     if (object[0].ptype == 8) { /* pentagon */
    485       for (i = 0; i < object[0].Npts; i++) {
    486         if (!(finite(x[i]) && finite(y[i]))) continue;
    487         sx = x[i]*mxi + y[i]*mxj + bx;
    488         sy = x[i]*myi + y[i]*myj + by;
    489         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    490             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    491         {
    492           DrawLine (sx + 0.00*d*z[i], sy - 1.00*d*z[i], sx + 0.95*d*z[i], sy - 0.31*d*z[i]);
    493           DrawLine (sx + 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.58*d*z[i], sy + 0.81*d*z[i]);
    494           DrawLine (sx + 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.58*d*z[i], sy + 0.81*d*z[i]);
    495           DrawLine (sx - 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.95*d*z[i], sy - 0.31*d*z[i]);
    496           DrawLine (sx - 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.00*d*z[i], sy - 1.00*d*z[i]);
    497         }
    498       }
    499     }
    500     if (object[0].ptype == 9) { /* hexagon */
    501       for (i = 0; i < object[0].Npts; i++) {
    502         if (!(finite(x[i]) && finite(y[i]))) continue;
    503         sx = x[i]*mxi + y[i]*mxj + bx;
    504         sy = x[i]*myi + y[i]*myj + by;
    505         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    506             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    507         {
    508           DrawLine (sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
    509           DrawLine (sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]);
    510           DrawLine (sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
    511 
    512           DrawLine (sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
    513           DrawLine (sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]);
    514           DrawLine (sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
    515         }
    516       }
    517     }
    518     if (object[0].ptype == 100) {       /* connect a pair of points */
    519 
    520       double X0 = graph[0].axis[0].fx;
    521       double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    522       double Y0 = graph[0].axis[1].fy;
    523       double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    524 
    525       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    526         if (!(finite(x[i]) && finite(y[i]))) continue;
    527         sx1 = x[i]*mxi + y[i]*mxj + bx;
    528         sy1 = x[i]*myi + y[i]*myj + by;
    529         if (!(finite(x[i+1]) && finite(y[i+1]))) continue;
    530         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    531         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    532         ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    533       }
    534     }
    535   }
    536   /**** points are not scaled by object.z ***/
    537   else {
    538     d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
    539     x = object[0].x; y = object[0].y;
    540     if (object[0].ptype == 0) { /* filled box */
    541       for (i = 0; i < object[0].Npts; i++) {
    542         if (!(finite(x[i]) && finite(y[i]))) continue;
    543         sx = x[i]*mxi + y[i]*mxj + bx;
    544         sy = x[i]*myi + y[i]*myj + by;
    545         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    546             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    547         {
    548           FillRectangle (sx - d, sy - d, 2*d, 2*d);
    549         }
    550       }
    551     }
    552     if (object[0].ptype == 1) {         /* open box */
    553       for (i = 0; i < object[0].Npts; i++) {
    554         if (!(finite(x[i]) && finite(y[i]))) continue;
    555         sx = x[i]*mxi + y[i]*mxj + bx;
    556         sy = x[i]*myi + y[i]*myj + by;
    557         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    558             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    559         {
    560           DrawRectangle (sx - d, sy - d, 2*d, 2*d);
    561         }
    562       }
    563     }
    564     if (object[0].ptype == 2) { /* cross */
    565       for (i = 0; i < object[0].Npts; i++) {
    566         if (!(finite(x[i]) && finite(y[i]))) continue;
    567         sx = x[i]*mxi + y[i]*mxj + bx;
    568         sy = x[i]*myi + y[i]*myj + by;
    569         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    570             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    571         {
    572           DrawLine (sx - d, sy, sx + d + 1, sy);
    573           DrawLine (sx, sy - d, sx, sy + d + 1);
    574         }
    575       }
    576     }
    577     if (object[0].ptype == 3) {         /* x */
    578       for (i = 0; i < object[0].Npts; i++) {
    579         if (!(finite(x[i]) && finite(y[i]))) continue;
    580         sx = x[i]*mxi + y[i]*mxj + bx;
    581         sy = x[i]*myi + y[i]*myj + by;
    582         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    583             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    584         {
    585           /* XDrawLine is a little funny, this is needed to fix endpost errors */
    586           DrawLine (sx + d + 1, sy - d - 1, sx - d, sy + d);
    587           DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1);
    588         }
    589       }
    590     }
    591     if (object[0].ptype == 4) { /* filled triangle */
    592       XPoint points[4];
    593       for (i = 0; i < object[0].Npts; i++) {
    594         if (!(finite(x[i]) && finite(y[i]))) continue;
    595         sx = x[i]*mxi + y[i]*mxj + bx;
    596         sy = x[i]*myi + y[i]*myj + by;
    597         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    598             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    599         {
    600           points[0].x = sx - d;  points[0].y = sy + 0.58*d; 
    601           points[1].x = sx + d;  points[1].y = sy + 0.58*d; 
    602           points[2].x = sx;      points[2].y = sy - 1.15*d; 
    603           points[3].x = sx - d;  points[3].y = sy + 0.58*d; 
    604           XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
    605         }
    606       }
    607     }
    608     if (object[0].ptype == 5) { /* open triangle */
    609       for (i = 0; i < object[0].Npts; i++) {
    610         if (!(finite(x[i]) && finite(y[i]))) continue;
    611         sx = x[i]*mxi + y[i]*mxj + bx;
    612         sy = x[i]*myi + y[i]*myj + by;
    613         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    614             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    615         {
    616           DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d);
    617           DrawLine (sx + d, sy + 0.58*d, sx,     sy - 1.15*d);
    618           DrawLine (sx,     sy - 1.15*d, sx - d, sy + 0.58*d);
    619         }
    620       }
    621     }
    622     if (object[0].ptype == 6) { /* Y */
    623       for (i = 0; i < object[0].Npts; i++) {
    624         if (!(finite(x[i]) && finite(y[i]))) continue;
    625         sx = x[i]*mxi + y[i]*mxj + bx;
    626         sy = x[i]*myi + y[i]*myj + by;
    627         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    628             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    629         {
    630           DrawLine (sx, sy, sx - d, sy + 0.58*d);
    631           DrawLine (sx, sy, sx + d, sy + 0.58*d);
    632           DrawLine (sx, sy, sx,     sy - 1.15*d);
    633         }
    634       }
    635     }
    636     if (object[0].ptype == 7) { /* 0 */
    637       for (i = 0; i < object[0].Npts; i++) {
    638         if (!(finite(x[i]) && finite(y[i]))) continue;
    639         sx = x[i]*mxi + y[i]*mxj + bx;
    640         sy = x[i]*myi + y[i]*myj + by;
    641         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    642             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    643         {
    644           DrawCircle (sx, sy, d);
    645         }
    646       }
    647     }
    648     if (object[0].ptype == 8) { /* pentagon */
    649       for (i = 0; i < object[0].Npts; i++) {
    650         if (!(finite(x[i]) && finite(y[i]))) continue;
    651         sx = x[i]*mxi + y[i]*mxj + bx;
    652         sy = x[i]*myi + y[i]*myj + by;
    653         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    654             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    655         {
    656           DrawLine (sx + 0.00*d, sy - 1.00*d, sx + 0.95*d, sy - 0.31*d);
    657           DrawLine (sx + 0.95*d, sy - 0.31*d, sx + 0.58*d, sy + 0.81*d);
    658           DrawLine (sx + 0.58*d, sy + 0.81*d, sx - 0.58*d, sy + 0.81*d);
    659           DrawLine (sx - 0.58*d, sy + 0.81*d, sx - 0.95*d, sy - 0.31*d);
    660           DrawLine (sx - 0.95*d, sy - 0.31*d, sx + 0.00*d, sy - 1.00*d);
    661         }
    662       }
    663     }
    664     if (object[0].ptype == 9) { /* pentagon */
    665       for (i = 0; i < object[0].Npts; i++) {
    666         if (!(finite(x[i]) && finite(y[i]))) continue;
    667         sx = x[i]*mxi + y[i]*mxj + bx;
    668         sy = x[i]*myi + y[i]*myj + by;
    669         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    670             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    671         {
    672           DrawLine (sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d);
    673           DrawLine (sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d);
    674           DrawLine (sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d);
    675           DrawLine (sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d);
    676           DrawLine (sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d);
    677           DrawLine (sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d);
    678         }
    679       }
    680     }
    681     if (object[0].ptype == 100) {       
    682       double X0 = graph[0].axis[0].fx;
    683       double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    684       double Y0 = graph[0].axis[1].fy;
    685       double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    686 
    687       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    688         if (!(finite(x[i]) && finite(y[i]))) continue;
    689         sx1 = x[i]*mxi + y[i]*mxj + bx;
    690         sy1 = x[i]*myi + y[i]*myj + by;
    691         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    692         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    693         ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    694       }
     395  int scaleSize = (object[0].size < 0);
     396  int scaleColor = (object[0].color < 0);
     397
     398  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     399  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     400  x = object[0].x; y = object[0].y; z = object[0].z;
     401
     402  if (object[0].ptype == 0) {   /* filled box */
     403    for (i = 0; i < object[0].Npts; i++) {
     404      if (!(finite(x[i]) && finite(y[i]))) continue;
     405      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     406      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     407      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     408          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     409        if (scaleColor) {
     410          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     411          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     412        }
     413        D = scaleSize ? dz*z[i] : ds;
     414        FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1);
     415      }
     416    }
     417  }
     418  if (object[0].ptype == 1) {   /* open box */
     419    for (i = 0; i < object[0].Npts; i++) {
     420      if (!(finite(x[i]) && finite(y[i]))) continue;
     421      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     422      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     423      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     424          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     425        if (scaleColor) {
     426          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     427          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     428        }
     429        D = scaleSize ? dz*z[i] : ds;
     430        DrawRectangle (sx - D, sy - D, 2*D, 2*D);
     431      }
     432    }
     433  }
     434  if (object[0].ptype == 2) { /* cross */
     435    for (i = 0; i < object[0].Npts; i++) {
     436      if (!(finite(x[i]) && finite(y[i]))) continue;
     437      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     438      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     439      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     440          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     441        if (scaleColor) {
     442          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     443          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     444        }
     445        D = scaleSize ? dz*z[i] : ds;
     446        DrawLine (sx - D, sy, sx + D + 1, sy);
     447        DrawLine (sx, sy - D, sx, sy + D + 1);
     448      }
     449    }
     450  }
     451  if (object[0].ptype == 3) {   /* x */
     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 + XCENTER;
     455      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     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        if (scaleColor) {
     459          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     460          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     461        }
     462        D = scaleSize ? dz*z[i] : ds;
     463        DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1);
     464        DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1);
     465      }
     466    }
     467  }
     468  if (object[0].ptype == 4) {   /* filled triangle */
     469    XPoint points[4];
     470    for (i = 0; i < object[0].Npts; i++) {
     471      if (!(finite(x[i]) && finite(y[i]))) continue;
     472      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     473      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     474      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     475          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     476        if (scaleColor) {
     477          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     478          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     479        }
     480        D = scaleSize ? dz*z[i] : ds;
     481        points[0].x = sx - D;  points[0].y = sy + 0.58*D; 
     482        points[1].x = sx + D;  points[1].y = sy + 0.58*D; 
     483        points[2].x = sx;      points[2].y = sy - 1.15*D; 
     484        points[3].x = sx - D;  points[3].y = sy + 0.58*D; 
     485        XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
     486      }
     487    }
     488  }
     489  if (object[0].ptype == 5) {   /* open triangle */
     490    for (i = 0; i < object[0].Npts; i++) {
     491      if (!(finite(x[i]) && finite(y[i]))) continue;
     492      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     493      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     494      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     495          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     496        if (scaleColor) {
     497          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     498          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     499        }
     500        D = scaleSize ? dz*z[i] : ds;
     501        DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
     502        DrawLine (sx + D, sy + 0.58*D, sx,     sy - 1.15*D);
     503        DrawLine (sx,     sy - 1.15*D, sx - D, sy + 0.58*D);
     504      }
     505    }
     506  }
     507  if (object[0].ptype == 6) {   /* Y */
     508    for (i = 0; i < object[0].Npts; i++) {
     509      if (!(finite(x[i]) && finite(y[i]))) continue;
     510      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     511      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     512      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     513          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     514        if (scaleColor) {
     515          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     516          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     517        }
     518        D = scaleSize ? dz*z[i] : ds;
     519        DrawLine (sx, sy, sx - D, sy - 0.58*D);
     520        DrawLine (sx, sy, sx + D, sy - 0.58*D);
     521        DrawLine (sx, sy, sx,     sy + 1.15*D);
     522      }
     523    }
     524  }
     525  if (object[0].ptype == 7) {   /* 0 */
     526    for (i = 0; i < object[0].Npts; i++) {
     527      if (!(finite(x[i]) && finite(y[i]))) continue;
     528      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     529      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     530      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     531          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     532        if (scaleColor) {
     533          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     534          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     535        }
     536        D = scaleSize ? dz*z[i] : ds;
     537        DrawCircle (sx, sy, D);
     538      }
     539    }
     540  }
     541  if (object[0].ptype == 8) {   /* pentagon */
     542    for (i = 0; i < object[0].Npts; i++) {
     543      if (!(finite(x[i]) && finite(y[i]))) continue;
     544      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     545      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     546      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     547          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     548        if (scaleColor) {
     549          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     550          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     551        }
     552        D = scaleSize ? dz*z[i] : ds;
     553        DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
     554        DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
     555        DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
     556        DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
     557        DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
     558      }
     559    }
     560  }
     561  if (object[0].ptype == 9) {   /* hexagon */
     562    for (i = 0; i < object[0].Npts; i++) {
     563      if (!(finite(x[i]) && finite(y[i]))) continue;
     564      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     565      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     566      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     567          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     568        if (scaleColor) {
     569          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     570          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     571        }
     572        D = scaleSize ? dz*z[i] : ds;
     573        DrawLine (sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
     574        DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
     575        DrawLine (sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
     576
     577        DrawLine (sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
     578        DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
     579        DrawLine (sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
     580      }
     581    }
     582  }
     583  if (object[0].ptype == 10) {  /* filled 0 */
     584    for (i = 0; i < object[0].Npts; i++) {
     585      if (!(finite(x[i]) && finite(y[i]))) continue;
     586      sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     587      sy = x[i]*myi + y[i]*myj + by + YCENTER;
     588      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     589          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) {
     590        if (scaleColor) {
     591          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     592          XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel);
     593        }
     594        D = scaleSize ? dz*z[i] : ds;
     595        FillCircle (sx, sy, D);
     596      }
     597    }
     598  }
     599  if (object[0].ptype == 100) { /* connect a pair of points */
     600
     601    double X0 = graph[0].axis[0].fx;
     602    double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
     603    double Y0 = graph[0].axis[1].fy;
     604    double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
     605
     606    for (i = 0; i + 1 < object[0].Npts; i+=2) {
     607      if (!(finite(x[i]) && finite(y[i]))) continue;
     608      sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     609      sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
     610      if (!(finite(x[i+1]) && finite(y[i+1]))) continue;
     611      sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER;
     612      sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER;
     613      ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    695614    }
    696615  }
     
    723642  for (i = 0; i < object[0].Npts; i++) {
    724643    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    725     sx0 = x[i]*mxi + y[i]*mxj + bx;
    726     sy0 = x[i]*myi + y[i]*myj + by;
    727     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    728     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     644    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     645    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     646    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
     647    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
    729648    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    730649         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    740659    }
    741660    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    742     sx0 = x[i]*mxi + y[i]*mxj + bx;
    743     sy0 = x[i]*myi + y[i]*myj + by;
    744     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    745     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     661    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     662    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     663    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
     664    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
    746665    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    747666         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    785704  for (i = 0; i < object[0].Npts; i++) {
    786705    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
    787     sx0 = x[i]*mxi + y[i]*mxj + bx;
    788     sy0 = x[i]*myi + y[i]*myj + by;
     706    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     707    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    789708    sx1 = sx0 + dyp[i]*mxj;
    790709    sy1 = sy0 + dyp[i]*myj;
     
    802721    }
    803722    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
    804     sx0 = x[i]*mxi + y[i]*mxj + bx;
    805     sy0 = x[i]*myi + y[i]*myj + by;
    806     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    807     sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
     723    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     724    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     725    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
     726    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by + YCENTER;
    808727    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    809728         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/LoadObject.c

    r29539 r31615  
    3838                      graph[0].objects[N].lweight, graph[0].objects[N].size);
    3939 
    40   /* force valid ranges */
    41   if ((graph[0].objects[N].color > KapaColormapSize()) || (graph[0].objects[N].color < 0))
    42     graph[0].objects[N].color = 0;
     40  // limit color ranges (negative is allowed for ptype == 2 --> color scaled by z
     41  if (graph[0].objects[N].color >= KapaColormapSize()) {
     42      graph[0].objects[N].color = KapaColormapSize() - 1;
     43  }
     44  if ((graph[0].objects[N].style != 2) && (graph[0].objects[N].color < 0)) {
     45      graph[0].objects[N].color = 0;
     46  }
    4347
    4448  KiiScanMessage (sock, "%lf %lf %lf %lf",
     
    6468    REALLOCATE (graph[0].objects, Gobjects, MAX (1, graph[0].Nobjects));
    6569  }
    66   if (graph[0].objects[N].size < 0.0) {
     70  if ((graph[0].objects[N].size < 0.0) || (graph[0].objects[N].color < 0.0)) {
    6771    if (!LoadVectorData (sock, graph, N, "z")) {
    6872      FreeObjectData (&graph[0].objects[N]);
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/PNGit.c

    r29938 r31615  
    11# include "Ximage.h"
    2 
    3 /* I almost have PNG images + plots working.  I need to do a few more things:
    4    1) decide on the dimensions of the output image/plot file -- like the jpeg covering the pixels? adjust the box to include the full plot box?
    5    2) update bDraw to either write palette values (as now) or RGB values into the buffer
    6    3) decision on output based on the existence of images or not
    7 */
    82
    93int PNGcommand (int sock) {
     
    2216  png_structp png_ptr;
    2317  png_infop info_ptr;
    24   int i, status, Npalette, Nsection;
     18  int status, Npalette;
    2519  bDrawBuffer *buffer = NULL;
    2620  Graphic *graphic = NULL;
    2721  png_color *palette = NULL;
    28   Section *section;
    2922
    3023  graphic = GetGraphic();
     
    6861  palette = KapaPNGPalette (&Npalette);
    6962
     63  /* before we allowed colormap-scaled points, we had the option of writing an image using a
     64     limited palette.  we could get smart and check all objects to see if any of them use
     65     scaled colors and choose a limited palette if not. but maybe that is not worth the effort.
     66  */
     67
     68# if (0)
    7069  // do we have an image in any of the sections?
    71   Nsection = GetNumberOfSections ();
     70  int Nsection = GetNumberOfSections ();
    7271  int haveImage = FALSE;
     72  int i;
    7373  for (i = 0; !haveImage && (i < Nsection); i++) {
    74     section = GetSectionByNumber (i);
     74    Section *section = GetSectionByNumber (i);
    7575    haveImage = (section->image != NULL);
    7676  }
     77# else
     78  int haveImage = TRUE;
     79# endif
    7780
    7881  /* see docs for write-row-callback to provide progress info */
    7982  if (haveImage) {
    80     // png_set_IHDR (png_ptr, info_ptr, graphic->dx, graphic->dy, 16, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
    8183    png_set_IHDR (png_ptr, info_ptr, graphic->dx, graphic->dy, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
    8284    png_set_sRGB (png_ptr, info_ptr, PNG_sRGB_INTENT_ABSOLUTE);
     
    9597  if (haveImage) {
    9698    buffer = bDrawIt (palette, Npalette, 3);
    97     // bDrawImage (buffer, graphic);
    9899  } else {
    99100    buffer = bDrawIt (palette, Npalette, 1);
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/PSObjects.c

    r31160 r31615  
    22
    33# define DrawLine(X1,Y1,X2,Y2) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f L\n", X1, graphic->dy - Y1, X2, graphic->dy - Y2))
    4 # define DrawCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f C\n", (X1), (graphic->dy - Y1), (R)))
    54# define DrawRectangle(X,Y,dX,dY) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f B\n", (dX), (dY), (X-0.5*dX), (graphic->dy-Y-0.5*dY)))
    65# define FillRectangle(X,Y,dX,dY) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f F\n", (dX), (dY), (X-0.5*dX), (graphic->dy-Y-0.5*dY)))
     6# define DrawCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f C\n", (X1), (graphic->dy - Y1), (R)))
     7# define FillCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f FC\n", (X1), (graphic->dy - Y1), (R)))
    78# define FillTriangle(X1,Y1,X2,Y2, X3, Y3) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f TF\n", (X1), (graphic->dy-Y1), (X2), (graphic->dy-Y2), (X3), (graphic->dy-Y3)))
    89# define CONNECT 0
     
    3738    lweight = MAX (0, MIN (10, graph[0].objects[i].lweight));
    3839    fprintf (f, "%.1f setlinewidth\n", lweight);
    39     fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(graph[0].objects[i].color));
     40
     41    if (graph[0].objects[i].color >= 0) {
     42        fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(graph[0].objects[i].color));
     43    }
    4044
    4145    switch (graph[0].objects[i].style) {
     
    270274  float *x, *y, *z;
    271275  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    272   double sx, sy, d, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1;
     276  double sx, sy, sx1, sy1, sx2, sy2, ds, dz, D;
     277  float *pixel1, *pixel2, *pixel3;
    273278
    274279  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    285290  by = byi + byj;
    286291 
    287   /* below here, code is identical with DrawObjects */
     292  Graphic *graphic = GetGraphic();
     293
     294  ALLOCATE (pixel1, float, graphic[0].Npixels);
     295  ALLOCATE (pixel2, float, graphic[0].Npixels);
     296  ALLOCATE (pixel3, float, graphic[0].Npixels);
     297
     298  /** cmap[i].pixel must be defined even if X is not used **/
     299  for (i = 0; i < graphic[0].Npixels; i++) { /* set up pixel array */
     300    pixel1[i] = graphic[0].cmap[i].red / (float) 0xffff;
     301    pixel2[i] = graphic[0].cmap[i].green / (float) 0xffff;
     302    pixel3[i] = graphic[0].cmap[i].blue / (float) 0xffff;
     303  }
     304
     305  // black, I think
     306  // fprintf (f, "0.00 0.00 0.00 setrgbcolor\n");
     307
    288308  /**** points are scaled by object.z ***/
    289   if (object[0].size < 0) {
    290     d = 0.5 * (graphic->dx + graphic->dy) * 0.01;
    291     x = object[0].x; y = object[0].y; z = object[0].z;
    292     if (object[0].ptype == 0) { /* filled box */
    293       for (i = 0; i < object[0].Npts; i++) {
    294         if (!(finite(x[i]) && finite(y[i]))) continue;
    295         sx = x[i]*mxi + y[i]*mxj + bx;
    296         sy = x[i]*myi + y[i]*myj + by;
    297         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    298             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    299           {
    300             FillRectangle (sx, sy, 2*d*z[i], 2*d*z[i]);
    301           }
    302       }
    303     }
    304     if (object[0].ptype == 1) { /* open box */
    305       for (i = 0; i < object[0].Npts; i++) {
    306         if (!(finite(x[i]) && finite(y[i]))) continue;
    307         sx = x[i]*mxi + y[i]*mxj + bx;
    308         sy = x[i]*myi + y[i]*myj + by;
    309         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    310             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    311           {
    312             DrawRectangle (sx, sy, 2*d*z[i], 2*d*z[i]);
    313           }
    314       }
    315     }
    316     if (object[0].ptype == 2) { /* cross */
    317       for (i = 0; i < object[0].Npts; i++) {
    318         if (!(finite(x[i]) && finite(y[i]))) continue;
    319         sx = x[i]*mxi + y[i]*mxj + bx;
    320         sy = x[i]*myi + y[i]*myj + by;
    321         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    322             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    323           {
    324             DrawLine (sx - d*z[i], sy, sx + d*z[i], sy);
    325             DrawLine (sx, sy - d*z[i], sx, sy + d*z[i]);
    326           }
    327       }
    328     }
    329     if (object[0].ptype == 3) { /* x */
    330       for (i = 0; i < object[0].Npts; i++) {
    331         if (!(finite(x[i]) && finite(y[i]))) continue;
    332         sx = x[i]*mxi + y[i]*mxj + bx;
    333         sy = x[i]*myi + y[i]*myj + by;
    334         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    335             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    336           {
    337             DrawLine (sx + d*z[i], sy - d*z[i], sx - d*z[i], sy + d*z[i]);
    338             DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i], sy + d*z[i]);
    339           }
    340       }
    341     }
    342     if (object[0].ptype == 4) { /* filled triangle */
    343       for (i = 0; i < object[0].Npts; i++) {
    344         if (!(finite(x[i]) && finite(y[i]))) continue;
    345         sx = x[i]*mxi + y[i]*mxj + bx;
    346         sy = x[i]*myi + y[i]*myj + by;
    347         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    348             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    349           {
    350             FillTriangle (sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i], sx, sy + 1.15*d*z[i]);
    351             /*
    352             DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    353             DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    354             DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
    355             */
    356           }
    357       }
    358     }
    359     if (object[0].ptype == 5) { /* open triangle */
    360       for (i = 0; i < object[0].Npts; i++) {
    361         if (!(finite(x[i]) && finite(y[i]))) continue;
    362         sx = x[i]*mxi + y[i]*mxj + bx;
    363         sy = x[i]*myi + y[i]*myj + by;
    364         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    365             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    366           {
    367             DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    368             DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    369             DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
    370           }
    371       }
    372     }
    373     if (object[0].ptype == 6) { /* Y */
    374       for (i = 0; i < object[0].Npts; i++) {
    375         if (!(finite(x[i]) && finite(y[i]))) continue;
    376         sx = x[i]*mxi + y[i]*mxj + bx;
    377         sy = x[i]*myi + y[i]*myj + by;
    378         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    379             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    380           {
    381             DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    382             DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    383             DrawLine (sx, sy, sx,          sy - 1.15*d*z[i]);
    384           }
    385       }
    386     }
    387     if (object[0].ptype == 7) { /* 0 */
    388       for (i = 0; i < object[0].Npts; i++) {
    389         if (!(finite(x[i]) && finite(y[i]))) continue;
    390         sx = x[i]*mxi + y[i]*mxj + bx;
    391         sy = x[i]*myi + y[i]*myj + by;
    392         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    393             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    394           {
    395             DrawCircle (sx, sy, d*z[i]);
    396           }
    397       }
    398     }
    399     if (object[0].ptype == 8) { /* pentagon */
    400       for (i = 0; i < object[0].Npts; i++) {
    401         if (!(finite(x[i]) && finite(y[i]))) continue;
    402         sx = x[i]*mxi + y[i]*mxj + bx;
    403         sy = x[i]*myi + y[i]*myj + by;
    404         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    405             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    406         {
    407           DrawLine (sx + 0.00*d*z[i], sy + 1.00*d*z[i], sx + 0.95*d*z[i], sy + 0.31*d*z[i]);
    408           DrawLine (sx + 0.95*d*z[i], sy + 0.31*d*z[i], sx + 0.58*d*z[i], sy - 0.81*d*z[i]);
    409           DrawLine (sx + 0.58*d*z[i], sy - 0.81*d*z[i], sx - 0.58*d*z[i], sy - 0.81*d*z[i]);
    410           DrawLine (sx - 0.58*d*z[i], sy - 0.81*d*z[i], sx - 0.95*d*z[i], sy + 0.31*d*z[i]);
    411           DrawLine (sx - 0.95*d*z[i], sy + 0.31*d*z[i], sx + 0.00*d*z[i], sy + 1.00*d*z[i]);
    412         }
    413       }
    414     }
    415     if (object[0].ptype == 9) { /* hexagon */
    416       for (i = 0; i < object[0].Npts; i++) {
    417         if (!(finite(x[i]) && finite(y[i]))) continue;
    418         sx = x[i]*mxi + y[i]*mxj + bx;
    419         sy = x[i]*myi + y[i]*myj + by;
    420         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    421             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    422         {
    423           DrawLine (sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
    424           DrawLine (sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]);
    425           DrawLine (sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
    426 
    427           DrawLine (sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
    428           DrawLine (sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]);
    429           DrawLine (sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
    430         }
    431       }
    432     }
    433     if (object[0].ptype == 100) {       /* connect a pair of points */
    434         X0 = graph[0].axis[0].fx;
    435         X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    436         Y0 = graph[0].axis[1].fy;
    437         Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    438 
    439       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    440         if (!(finite(x[i]) && finite(y[i]))) continue;
    441         sx1 = x[i]*mxi + y[i]*mxj + bx;
    442         sy1 = x[i]*myi + y[i]*myj + by;
    443         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    444         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    445         ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f);
    446       }
    447     }
    448   } else {
    449     d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
    450     x = object[0].x; y = object[0].y;
    451     if (object[0].ptype == 0) { /* filled box */
    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             FillRectangle (sx, sy, 2*d, 2*d);
    460           }
    461       }
    462     }
    463     if (object[0].ptype == 1) {         /* open box */
    464       for (i = 0; i < object[0].Npts; i++) {
    465         if (!(finite(x[i]) && finite(y[i]))) continue;
    466         sx = x[i]*mxi + y[i]*mxj + bx;
    467         sy = x[i]*myi + y[i]*myj + by;
    468         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    469             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    470           {
    471             DrawRectangle (sx, sy, 2*d, 2*d);
    472           }
    473       }
    474     }
    475     if (object[0].ptype == 2) { /* cross */
    476       for (i = 0; i < object[0].Npts; i++) {
    477         if (!(finite(x[i]) && finite(y[i]))) continue;
    478         sx = x[i]*mxi + y[i]*mxj + bx;
    479         sy = x[i]*myi + y[i]*myj + by;
    480         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    481             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    482           {
    483             DrawLine (sx - d, sy, sx + d, sy);
    484             DrawLine (sx, sy - d, sx, sy + d);
    485           }
    486       }
    487     }
    488     if (object[0].ptype == 3) {         /* x */
    489       for (i = 0; i < object[0].Npts; i++) {
    490         if (!(finite(x[i]) && finite(y[i]))) continue;
    491         sx = x[i]*mxi + y[i]*mxj + bx;
    492         sy = x[i]*myi + y[i]*myj + by;
    493         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    494             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    495           {
    496             DrawLine (sx + d, sy - d, sx - d, sy + d);
    497             DrawLine (sx - d, sy - d, sx + d, sy + d);
    498           }
    499       }
    500     }
    501     if (object[0].ptype == 4) { /* filled triangle */
    502       for (i = 0; i < object[0].Npts; i++) {
    503         if (!(finite(x[i]) && finite(y[i]))) continue;
    504         sx = x[i]*mxi + y[i]*mxj + bx;
    505         sy = x[i]*myi + y[i]*myj + by;
    506         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    507             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    508           {
    509             /*
    510             DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d);
    511             DrawLine (sx + d, sy + 0.58*d, sx,     sy - 1.15*d);
    512             DrawLine (sx,     sy - 1.15*d, sx - d, sy + 0.58*d);
    513             */
    514             FillTriangle (sx - d, sy - 0.58*d, sx + d, sy - 0.58*d, sx, sy + 1.15*d);
    515           }
    516       }
    517     }
    518     if (object[0].ptype == 5) { /* open triangle */
    519       for (i = 0; i < object[0].Npts; i++) {
    520         if (!(finite(x[i]) && finite(y[i]))) continue;
    521         sx = x[i]*mxi + y[i]*mxj + bx;
    522         sy = x[i]*myi + y[i]*myj + by;
    523         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    524             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    525           {
    526             DrawLine (sx - d, sy - 0.58*d, sx + d, sy - 0.58*d);
    527             DrawLine (sx + d, sy - 0.58*d, sx,     sy + 1.15*d);
    528             DrawLine (sx,     sy + 1.15*d, sx - d, sy - 0.58*d);
    529           }
    530       }
    531     }
    532     if (object[0].ptype == 6) { /* Y */
    533       for (i = 0; i < object[0].Npts; i++) {
    534         if (!(finite(x[i]) && finite(y[i]))) continue;
    535         sx = x[i]*mxi + y[i]*mxj + bx;
    536         sy = x[i]*myi + y[i]*myj + by;
    537         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    538             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    539           {
    540             DrawLine (sx, sy, sx - d, sy - 0.58*d);
    541             DrawLine (sx, sy, sx + d, sy - 0.58*d);
    542             DrawLine (sx, sy, sx,     sy + 1.15*d);
    543           }
    544       }
    545     }
    546     if (object[0].ptype == 7) { /* 0 */
    547       for (i = 0; i < object[0].Npts; i++) {
    548         if (!(finite(x[i]) && finite(y[i]))) continue;
    549         sx = x[i]*mxi + y[i]*mxj + bx;
    550         sy = x[i]*myi + y[i]*myj + by;
    551         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    552             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    553           {
    554             DrawCircle (sx, sy, d);
    555           }
    556       }
    557     }
    558     if (object[0].ptype == 8) { /* pentagon */
    559       for (i = 0; i < object[0].Npts; i++) {
    560         if (!(finite(x[i]) && finite(y[i]))) continue;
    561         sx = x[i]*mxi + y[i]*mxj + bx;
    562         sy = x[i]*myi + y[i]*myj + by;
    563         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    564             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    565         {
    566           DrawLine (sx + 0.00*d, sy + 1.00*d, sx + 0.95*d, sy + 0.31*d);
    567           DrawLine (sx + 0.95*d, sy + 0.31*d, sx + 0.58*d, sy - 0.81*d);
    568           DrawLine (sx + 0.58*d, sy - 0.81*d, sx - 0.58*d, sy - 0.81*d);
    569           DrawLine (sx - 0.58*d, sy - 0.81*d, sx - 0.95*d, sy + 0.31*d);
    570           DrawLine (sx - 0.95*d, sy + 0.31*d, sx + 0.00*d, sy + 1.00*d);
    571         }
    572       }
    573     }
    574     if (object[0].ptype == 9) { /* pentagon */
    575       for (i = 0; i < object[0].Npts; i++) {
    576         if (!(finite(x[i]) && finite(y[i]))) continue;
    577         sx = x[i]*mxi + y[i]*mxj + bx;
    578         sy = x[i]*myi + y[i]*myj + by;
    579         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    580             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    581         {
    582           DrawLine (sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d);
    583           DrawLine (sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d);
    584           DrawLine (sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d);
    585           DrawLine (sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d);
    586           DrawLine (sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d);
    587           DrawLine (sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d);
    588         }
    589       }
    590     }
    591     if (object[0].ptype == 100) {       
    592         X0 = graph[0].axis[0].fx;
    593         X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    594         Y0 = graph[0].axis[1].fy;
    595         Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    596 
    597       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    598         if (!(finite(x[i]) && finite(y[i]))) continue;
    599         sx1 = x[i]*mxi + y[i]*mxj + bx;
    600         sy1 = x[i]*myi + y[i]*myj + by;
    601         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    602         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    603         ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f);
    604       }
    605     }
    606   }
     309  int scaleSize = (object[0].size < 0);
     310  int scaleColor = (object[0].color < 0);
     311
     312  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     313  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     314  x = object[0].x; y = object[0].y; z = object[0].z;
     315
     316  if (object[0].ptype == 0) {   /* filled box */
     317    for (i = 0; i < object[0].Npts; i++) {
     318      if (!(finite(x[i]) && finite(y[i]))) continue;
     319      sx = x[i]*mxi + y[i]*mxj + bx;
     320      sy = x[i]*myi + y[i]*myj + by;
     321      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     322          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     323      {
     324        if (scaleColor) {
     325          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     326          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     327        }
     328        D = scaleSize ? dz*z[i] : ds;
     329        FillRectangle (sx, sy, 2*D, 2*D);
     330      }
     331    }
     332  }
     333  if (object[0].ptype == 1) {   /* open box */
     334    for (i = 0; i < object[0].Npts; i++) {
     335      if (!(finite(x[i]) && finite(y[i]))) continue;
     336      sx = x[i]*mxi + y[i]*mxj + bx;
     337      sy = x[i]*myi + y[i]*myj + by;
     338      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     339          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     340      {
     341        if (scaleColor) {
     342          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     343          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     344        }
     345        D = scaleSize ? dz*z[i] : ds;
     346        DrawRectangle (sx, sy, 2*D, 2*D);
     347      }
     348    }
     349  }
     350  if (object[0].ptype == 2) { /* cross */
     351    for (i = 0; i < object[0].Npts; i++) {
     352      if (!(finite(x[i]) && finite(y[i]))) continue;
     353      sx = x[i]*mxi + y[i]*mxj + bx;
     354      sy = x[i]*myi + y[i]*myj + by;
     355      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     356          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     357      {
     358        if (scaleColor) {
     359          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     360          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     361        }
     362        D = scaleSize ? dz*z[i] : ds;
     363        DrawLine (sx - D, sy, sx + D, sy);
     364        DrawLine (sx, sy - D, sx, sy + D);
     365      }
     366    }
     367  }
     368  if (object[0].ptype == 3) {   /* x */
     369    for (i = 0; i < object[0].Npts; i++) {
     370      if (!(finite(x[i]) && finite(y[i]))) continue;
     371      sx = x[i]*mxi + y[i]*mxj + bx;
     372      sy = x[i]*myi + y[i]*myj + by;
     373      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     374          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     375      {
     376        if (scaleColor) {
     377          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     378          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     379        }
     380        D = scaleSize ? dz*z[i] : ds;
     381        DrawLine (sx + D, sy - D, sx - D, sy + D);
     382        DrawLine (sx - D, sy - D, sx + D, sy + D);
     383      }
     384    }
     385  }
     386  if (object[0].ptype == 4) {   /* filled triangle */
     387    for (i = 0; i < object[0].Npts; i++) {
     388      if (!(finite(x[i]) && finite(y[i]))) continue;
     389      sx = x[i]*mxi + y[i]*mxj + bx;
     390      sy = x[i]*myi + y[i]*myj + by;
     391      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     392          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     393      {
     394        if (scaleColor) {
     395          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     396          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     397        }
     398        D = scaleSize ? dz*z[i] : ds;
     399        FillTriangle (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
     400        /*
     401          DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
     402          DrawLine (sx + D, sy + 0.58*D, sx,          sy - 1.15*D);
     403          DrawLine (sx,          sy - 1.15*D, sx - D, sy + 0.58*D);
     404        */
     405      }
     406    }
     407  }
     408  if (object[0].ptype == 5) {   /* open 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          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     418          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     419        }
     420        D = scaleSize ? dz*z[i] : ds;
     421        DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D);
     422        DrawLine (sx + D, sy - 0.58*D, sx,          sy + 1.15*D);
     423        DrawLine (sx,          sy + 1.15*D, sx - D, sy - 0.58*D);
     424      }
     425    }
     426  }
     427  if (object[0].ptype == 6) {   /* Y */
     428    for (i = 0; i < object[0].Npts; i++) {
     429      if (!(finite(x[i]) && finite(y[i]))) continue;
     430      sx = x[i]*mxi + y[i]*mxj + bx;
     431      sy = x[i]*myi + y[i]*myj + by;
     432      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     433          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     434      {
     435        if (scaleColor) {
     436          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     437          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     438        }
     439        D = scaleSize ? dz*z[i] : ds;
     440        DrawLine (sx, sy, sx - D, sy + 0.58*D);
     441        DrawLine (sx, sy, sx + D, sy + 0.58*D);
     442        DrawLine (sx, sy, sx,          sy - 1.15*D);
     443      }
     444    }
     445  }
     446  if (object[0].ptype == 7) {   /* 0 */
     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          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     456          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     457        }
     458        D = scaleSize ? dz*z[i] : ds;
     459        DrawCircle (sx, sy, D);
     460      }
     461    }
     462  }
     463  if (object[0].ptype == 8) {   /* pentagon */
     464    for (i = 0; i < object[0].Npts; i++) {
     465      if (!(finite(x[i]) && finite(y[i]))) continue;
     466      sx = x[i]*mxi + y[i]*mxj + bx;
     467      sy = x[i]*myi + y[i]*myj + by;
     468      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     469          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     470      {
     471        if (scaleColor) {
     472          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     473          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     474        }
     475        D = scaleSize ? dz*z[i] : ds;
     476        DrawLine (sx + 0.00*D, sy + 1.00*D, sx + 0.95*D, sy + 0.31*D);
     477        DrawLine (sx + 0.95*D, sy + 0.31*D, sx + 0.58*D, sy - 0.81*D);
     478        DrawLine (sx + 0.58*D, sy - 0.81*D, sx - 0.58*D, sy - 0.81*D);
     479        DrawLine (sx - 0.58*D, sy - 0.81*D, sx - 0.95*D, sy + 0.31*D);
     480        DrawLine (sx - 0.95*D, sy + 0.31*D, sx + 0.00*D, sy + 1.00*D);
     481      }
     482    }
     483  }
     484  if (object[0].ptype == 9) {   /* hexagon */
     485    for (i = 0; i < object[0].Npts; i++) {
     486      if (!(finite(x[i]) && finite(y[i]))) continue;
     487      sx = x[i]*mxi + y[i]*mxj + bx;
     488      sy = x[i]*myi + y[i]*myj + by;
     489      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     490          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     491      {
     492        if (scaleColor) {
     493          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     494          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     495        }
     496        D = scaleSize ? dz*z[i] : ds;
     497        DrawLine (sx -      D, sy,               sx - 0.50*D, sy + 0.87*D);
     498        DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
     499        DrawLine (sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
     500
     501        DrawLine (sx +      D, sy,               sx + 0.50*D, sy - 0.87*D);
     502        DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
     503        DrawLine (sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
     504      }
     505    }
     506  }
     507  if (object[0].ptype == 10) {  /* 0 */
     508    for (i = 0; i < object[0].Npts; i++) {
     509      if (!(finite(x[i]) && finite(y[i]))) continue;
     510      sx = x[i]*mxi + y[i]*mxj + bx;
     511      sy = x[i]*myi + y[i]*myj + by;
     512      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     513          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     514      {
     515        if (scaleColor) {
     516          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     517          fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]);
     518        }
     519        D = scaleSize ? dz*z[i] : ds;
     520        FillCircle (sx, sy, D);
     521      }
     522    }
     523  }
     524  if (object[0].ptype == 100) { /* connect a pair of points */
     525    double X0 = graph[0].axis[0].fx;
     526    double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
     527    double Y0 = graph[0].axis[1].fy;
     528    double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
     529
     530    for (i = 0; i + 1 < object[0].Npts; i+=2) {
     531      if (!(finite(x[i]) && finite(y[i]))) continue;
     532      sx1 = x[i]*mxi + y[i]*mxj + bx;
     533      sy1 = x[i]*myi + y[i]*myj + by;
     534      sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
     535      sy2 = x[i+1]*myi + y[i+1]*myj + by;
     536      ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f);
     537    }
     538  }
     539
     540  free (pixel1);
     541  free (pixel2);
     542  free (pixel3);
    607543}
    608544   
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/PSit.c

    r29938 r31615  
    7676  fprintf (f, " 0 exch rlineto -1 mul 0 rlineto closepath fill stroke } def\n");
    7777  fprintf (f, "/C {0 360 arc stroke} def\n");
     78  fprintf (f, "/FC {0 360 arc fill stroke} def\n");
     79  fprintf (f, "/RGB {setrgbcolor} def\n");
    7880  fprintf (f, "/L {newpath moveto lineto stroke} def\n\n");
    7981  fprintf (f, "/TF {newpath moveto lineto lineto fill stroke} def\n\n");
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/SetChannel.c

    r16011 r31615  
    3939  Graphic *graphic;
    4040  Section *section;
    41   KapaImageWidget *image;
    4241  char colormap[256];
    4342  int status;
    4443
     44  KiiScanMessage (sock, "%s", colormap);
     45  status = SetColormap (colormap);
     46  if (!status) {
     47      fprintf (stderr, "unknown colormap %s\n", colormap);
     48      return (TRUE);
     49  }
     50
    4551  graphic = GetGraphic ();
    4652  section = GetActiveSection();
    47   if (section->image == NULL) {
    48     section->image = InitImageWidget ();
    49     SetSectionSizes (section);
     53  if (section->image) {
     54    // section->image = InitImageWidget ();
     55    // SetSectionSizes (section);
     56    // image = section->image;
     57    SetColorScale (graphic, section->image);
     58    if (!USE_XWINDOW) return (TRUE);
     59    Remap (graphic, section->image);
    5060  }
    51   image = section->image;
    5261
    53   KiiScanMessage (sock, "%s", colormap);
    54 
    55   status = SetColormap (colormap);
    56   if (!status) fprintf (stderr, "unknown colormap %s\n", colormap);
    57 
    58   SetColorScale (graphic, image);
    59   if (!USE_XWINDOW) return (TRUE);
    60 
    61   Remap (graphic, image);
    6262  Refresh ();
    6363  XFlush (graphic[0].display);
  • branches/eam_branches/ipp-20110505/Ohana/src/kapa2/src/bDrawObjects.c

    r31160 r31615  
    22
    33# define DrawLine(BUF,X1,Y1,X2,Y2) (bDrawLine (BUF, (X1), (Y1), (X2), (Y2)))
     4# define DrawRectangle(BUF,X,Y,dX,dY) (bDrawRectOpen (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
     5# define FillRectangle(BUF,X,Y,dX,dY) (bDrawRectFill (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX+1), (Y+0.5*dY+1)))
    46# define DrawCircle(BUF,X1,Y1,R) (bDrawCircle (BUF, (X1), (Y1), (R)))
    5 # define DrawRectangle(BUF,X,Y,dX,dY) (bDrawRectOpen (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
    6 # define FillRectangle(BUF,X,Y,dX,dY) (bDrawRectFill (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
    7 # define FillTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriFill (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
     7# define FillCircle(BUF,X1,Y1,R) (bDrawCircleFill (BUF, (X1), (Y1), (R)))
     8# define FillTriangle(BUF,X1,Y1,dX,dY) (bDrawTriFill (BUF, (X1), (Y1), (dX), (dY)))
    89# define OpenTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriOpen (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
    910
     
    260261  float *x, *y, *z;
    261262  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    262   double sx, sy, d, sx1, sy1, sx2, sy2;
     263  int sx, sy, sx1, sy1, sx2, sy2, ds, dz, D;
     264  unsigned char *pixel1, *pixel2, *pixel3;
    263265
    264266  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    275277  by = byi + byj;
    276278 
    277   /* below here, code is identical with DrawObjects */
     279  Graphic *graphic = GetGraphic();
     280
     281  ALLOCATE (pixel1, unsigned char, graphic[0].Npixels);
     282  ALLOCATE (pixel2, unsigned char, graphic[0].Npixels);
     283  ALLOCATE (pixel3, unsigned char, graphic[0].Npixels);
     284
     285  /** cmap[i].pixel must be defined even if X is not used **/
     286  for (i = 0; i < graphic[0].Npixels; i++) { /* set up pixel array */
     287    pixel1[i] = graphic[0].cmap[i].red >> 8;
     288    pixel2[i] = graphic[0].cmap[i].green >> 8;
     289    pixel3[i] = graphic[0].cmap[i].blue >> 8;
     290  }
     291
    278292  /**** points are scaled by object.z ***/
    279   if (object[0].size < 0) {
    280     d = 0.5 * (graphic->dx + graphic->dy) * 0.01;
    281     x = object[0].x; y = object[0].y; z = object[0].z;
    282     if (object[0].ptype == 0) { /* filled box */
    283       for (i = 0; i < object[0].Npts; i++) {
    284         if (!(finite(x[i]) && finite(y[i]))) continue;
    285         sx = x[i]*mxi + y[i]*mxj + bx;
    286         sy = x[i]*myi + y[i]*myj + by;
    287         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    288             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    289         {
    290           FillRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
    291         }
    292       }
    293     }
    294     if (object[0].ptype == 1) { /* open box */
    295       for (i = 0; i < object[0].Npts; i++) {
    296         if (!(finite(x[i]) && finite(y[i]))) continue;
    297         sx = x[i]*mxi + y[i]*mxj + bx;
    298         sy = x[i]*myi + y[i]*myj + by;
    299         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    300             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    301         {
    302           DrawRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
    303         }
    304       }
    305     }
    306     if (object[0].ptype == 2) { /* cross */
    307       for (i = 0; i < object[0].Npts; i++) {
    308         if (!(finite(x[i]) && finite(y[i]))) continue;
    309         sx = x[i]*mxi + y[i]*mxj + bx;
    310         sy = x[i]*myi + y[i]*myj + by;
    311         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    312             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    313         {
    314           DrawLine (buffer, sx - d*z[i], sy, sx + d*z[i], sy);
    315           DrawLine (buffer, sx, sy - d*z[i], sx, sy + d*z[i]);
    316         }
    317       }
    318     }
    319     if (object[0].ptype == 3) { /* x */
    320       for (i = 0; i < object[0].Npts; i++) {
    321         if (!(finite(x[i]) && finite(y[i]))) continue;
    322         sx = x[i]*mxi + y[i]*mxj + bx;
    323         sy = x[i]*myi + y[i]*myj + by;
    324         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    325             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    326         {
    327           DrawLine (buffer, sx + d*z[i], sy - d*z[i], sx - d*z[i], sy + d*z[i]);
    328           DrawLine (buffer, sx - d*z[i], sy - d*z[i], sx + d*z[i], sy + d*z[i]);
    329         }
    330       }
    331     }
    332     if (object[0].ptype == 4) { /* filled triangle */
    333       for (i = 0; i < object[0].Npts; i++) {
    334         if (!(finite(x[i]) && finite(y[i]))) continue;
    335         sx = x[i]*mxi + y[i]*mxj + bx;
    336         sy = x[i]*myi + y[i]*myj + by;
    337         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    338             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    339         {
    340           FillTriangle (buffer, sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i], sx, sy + 1.15*d*z[i]);
    341         }
    342       }
    343     }
    344     if (object[0].ptype == 5) { /* open triangle */
    345       for (i = 0; i < object[0].Npts; i++) {
    346         if (!(finite(x[i]) && finite(y[i]))) continue;
    347         sx = x[i]*mxi + y[i]*mxj + bx;
    348         sy = x[i]*myi + y[i]*myj + by;
    349         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    350             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    351         {
    352           OpenTriangle (buffer, sx - d*z[i], sy + 0.58*d*z[i], sx, sy - 1.15*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    353         }
    354       }
    355     }
    356     if (object[0].ptype == 6) { /* Y */
    357       for (i = 0; i < object[0].Npts; i++) {
    358         if (!(finite(x[i]) && finite(y[i]))) continue;
    359         sx = x[i]*mxi + y[i]*mxj + bx;
    360         sy = x[i]*myi + y[i]*myj + by;
    361         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    362             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    363         {
    364           DrawLine (buffer, sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    365           DrawLine (buffer, sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    366           DrawLine (buffer, sx, sy, sx,          sy - 1.15*d*z[i]);
    367         }
    368       }
    369     }
    370     if (object[0].ptype == 7) { /* 0 */
    371       for (i = 0; i < object[0].Npts; i++) {
    372         if (!(finite(x[i]) && finite(y[i]))) continue;
    373         sx = x[i]*mxi + y[i]*mxj + bx;
    374         sy = x[i]*myi + y[i]*myj + by;
    375         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    376             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    377         {
    378           DrawCircle (buffer, sx, sy, d*z[i]);
    379         }
    380       }
    381     }
    382     if (object[0].ptype == 8) { /* pentagon */
    383       for (i = 0; i < object[0].Npts; i++) {
    384         if (!(finite(x[i]) && finite(y[i]))) continue;
    385         sx = x[i]*mxi + y[i]*mxj + bx;
    386         sy = x[i]*myi + y[i]*myj + by;
    387         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    388             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    389         {
    390           DrawLine (buffer, sx + 0.00*d*z[i], sy - 1.00*d*z[i], sx + 0.95*d*z[i], sy - 0.31*d*z[i]);
    391           DrawLine (buffer, sx + 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.58*d*z[i], sy + 0.81*d*z[i]);
    392           DrawLine (buffer, sx + 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.58*d*z[i], sy + 0.81*d*z[i]);
    393           DrawLine (buffer, sx - 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.95*d*z[i], sy - 0.31*d*z[i]);
    394           DrawLine (buffer, sx - 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.00*d*z[i], sy - 1.00*d*z[i]);
    395         }
    396       }
    397     }
    398     if (object[0].ptype == 9) { /* hexagon */
    399       for (i = 0; i < object[0].Npts; i++) {
    400         if (!(finite(x[i]) && finite(y[i]))) continue;
    401         sx = x[i]*mxi + y[i]*mxj + bx;
    402         sy = x[i]*myi + y[i]*myj + by;
    403         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    404             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    405         {
    406           DrawLine (buffer, sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
    407           DrawLine (buffer, sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]);
    408           DrawLine (buffer, sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
    409 
    410           DrawLine (buffer, sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
    411           DrawLine (buffer, sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]);
    412           DrawLine (buffer, sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
    413         }
    414       }
    415     }
    416     if (object[0].ptype == 100) {       /* connect a pair of points */
    417 
    418       double X0 = graph[0].axis[0].fx;
    419       double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    420       double Y0 = graph[0].axis[1].fy;
    421       double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    422 
    423       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    424         if (!(finite(x[i]) && finite(y[i]))) continue;
    425         sx1 = x[i]*mxi + y[i]*mxj + bx;
    426         sy1 = x[i]*myi + y[i]*myj + by;
    427         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    428         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    429         bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    430       }
    431     }
    432   } else {
    433     d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
    434     x = object[0].x; y = object[0].y;
    435     if (object[0].ptype == 0) { /* filled box */
    436       for (i = 0; i < object[0].Npts; i++) {
    437         if (!(finite(x[i]) && finite(y[i]))) continue;
    438         sx = x[i]*mxi + y[i]*mxj + bx;
    439         sy = x[i]*myi + y[i]*myj + by;
    440         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    441             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    442         {
    443           FillRectangle (buffer, sx, sy, 2*d, 2*d);
    444         }
    445       }
    446     }
    447     if (object[0].ptype == 1) {         /* open box */
    448       for (i = 0; i < object[0].Npts; i++) {
    449         if (!(finite(x[i]) && finite(y[i]))) continue;
    450         sx = x[i]*mxi + y[i]*mxj + bx;
    451         sy = x[i]*myi + y[i]*myj + by;
    452         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    453             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    454         {
    455           DrawRectangle (buffer, sx, sy, 2*d, 2*d);
    456         }
    457       }
    458     }
    459     if (object[0].ptype == 2) { /* cross */
    460       for (i = 0; i < object[0].Npts; i++) {
    461         if (!(finite(x[i]) && finite(y[i]))) continue;
    462         sx = x[i]*mxi + y[i]*mxj + bx;
    463         sy = x[i]*myi + y[i]*myj + by;
    464         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    465             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    466         {
    467           DrawLine (buffer, sx - d, sy, sx + d, sy);
    468           DrawLine (buffer, sx, sy - d, sx, sy + d);
    469         }
    470       }
    471     }
    472     if (object[0].ptype == 3) {         /* x */
    473       for (i = 0; i < object[0].Npts; i++) {
    474         if (!(finite(x[i]) && finite(y[i]))) continue;
    475         sx = x[i]*mxi + y[i]*mxj + bx;
    476         sy = x[i]*myi + y[i]*myj + by;
    477         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    478             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    479         {
    480           DrawLine (buffer, sx + d, sy - d, sx - d, sy + d);
    481           DrawLine (buffer, sx - d, sy - d, sx + d, sy + d);
    482         }
    483       }
    484     }
    485     if (object[0].ptype == 4) { /* filled triangle */
    486       for (i = 0; i < object[0].Npts; i++) {
    487         if (!(finite(x[i]) && finite(y[i]))) continue;
    488         sx = x[i]*mxi + y[i]*mxj + bx;
    489         sy = x[i]*myi + y[i]*myj + by;
    490         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    491             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    492         {
    493           FillTriangle (buffer, sx - d, sy - 0.58*d, sx + d, sy - 0.58*d, sx, sy + 1.15*d);
    494         }
    495       }
    496     }
    497     if (object[0].ptype == 5) { /* open triangle */
    498       for (i = 0; i < object[0].Npts; i++) {
    499         if (!(finite(x[i]) && finite(y[i]))) continue;
    500         sx = x[i]*mxi + y[i]*mxj + bx;
    501         sy = x[i]*myi + y[i]*myj + by;
    502         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    503             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    504         {
    505           OpenTriangle (buffer, sx - d, sy + 0.58*d, sx + d, sy + 0.58*d, sx, sy - 1.15*d);
    506         }
    507       }
    508     }
    509     if (object[0].ptype == 6) { /* Y */
    510       for (i = 0; i < object[0].Npts; i++) {
    511         if (!(finite(x[i]) && finite(y[i]))) continue;
    512         sx = x[i]*mxi + y[i]*mxj + bx;
    513         sy = x[i]*myi + y[i]*myj + by;
    514         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    515             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    516         {
    517           DrawLine (buffer, sx, sy, sx - d, sy - 0.58*d);
    518           DrawLine (buffer, sx, sy, sx + d, sy - 0.58*d);
    519           DrawLine (buffer, sx, sy, sx,     sy + 1.15*d);
    520         }
    521       }
    522     }
    523     if (object[0].ptype == 7) { /* 0 */
    524       for (i = 0; i < object[0].Npts; i++) {
    525         if (!(finite(x[i]) && finite(y[i]))) continue;
    526         sx = x[i]*mxi + y[i]*mxj + bx;
    527         sy = x[i]*myi + y[i]*myj + by;
    528         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    529             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    530         {
    531           DrawCircle (buffer, sx, sy, d);
    532         }
    533       }
    534     }
    535     if (object[0].ptype == 8) { /* pentagon */
    536       for (i = 0; i < object[0].Npts; i++) {
    537         if (!(finite(x[i]) && finite(y[i]))) continue;
    538         sx = x[i]*mxi + y[i]*mxj + bx;
    539         sy = x[i]*myi + y[i]*myj + by;
    540         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    541             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    542         {
    543           DrawLine (buffer, sx + 0.00*d, sy - 1.00*d, sx + 0.95*d, sy - 0.31*d);
    544           DrawLine (buffer, sx + 0.95*d, sy - 0.31*d, sx + 0.58*d, sy + 0.81*d);
    545           DrawLine (buffer, sx + 0.58*d, sy + 0.81*d, sx - 0.58*d, sy + 0.81*d);
    546           DrawLine (buffer, sx - 0.58*d, sy + 0.81*d, sx - 0.95*d, sy - 0.31*d);
    547           DrawLine (buffer, sx - 0.95*d, sy - 0.31*d, sx + 0.00*d, sy - 1.00*d);
    548         }
    549       }
    550     }
    551     if (object[0].ptype == 9) { /* pentagon */
    552       for (i = 0; i < object[0].Npts; i++) {
    553         if (!(finite(x[i]) && finite(y[i]))) continue;
    554         sx = x[i]*mxi + y[i]*mxj + bx;
    555         sy = x[i]*myi + y[i]*myj + by;
    556         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    557             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    558         {
    559           DrawLine (buffer, sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d);
    560           DrawLine (buffer, sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d);
    561           DrawLine (buffer, sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d);
    562           DrawLine (buffer, sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d);
    563           DrawLine (buffer, sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d);
    564           DrawLine (buffer, sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d);
    565         }
    566       }
    567     }
    568     if (object[0].ptype == 100) {       
    569 
    570       double X0 = graph[0].axis[0].fx;
    571       double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
    572       double Y0 = graph[0].axis[1].fy;
    573       double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
    574 
    575       for (i = 0; i + 1 < object[0].Npts; i+=2) {
    576         if (!(finite(x[i]) && finite(y[i]))) continue;
    577         sx1 = x[i]*mxi + y[i]*mxj + bx;
    578         sy1 = x[i]*myi + y[i]*myj + by;
    579         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    580         sy2 = x[i+1]*myi + y[i+1]*myj + by;
    581         bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    582       }
    583     }
    584   }
     293  int scaleSize = (object[0].size < 0);
     294  int scaleColor = (object[0].color < 0);
     295
     296  ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size;
     297  dz = 0.5 * (graphic->dx + graphic->dy) * 0.010;
     298  x = object[0].x; y = object[0].y; z = object[0].z;
     299
     300  if (object[0].ptype == 0) {   /* filled box */
     301    for (i = 0; i < object[0].Npts; i++) {
     302      if (!(finite(x[i]) && finite(y[i]))) continue;
     303      sx = x[i]*mxi + y[i]*mxj + bx;
     304      sy = x[i]*myi + y[i]*myj + by;
     305      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     306          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     307      {
     308        if (scaleColor) {
     309          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     310          buffer->bColor_R = pixel1[pixel];
     311          buffer->bColor_G = pixel2[pixel];
     312          buffer->bColor_B = pixel3[pixel];
     313        }
     314        D = scaleSize ? dz*z[i] : ds;
     315        FillRectangle (buffer, sx, sy, 2*D, 2*D);
     316      }
     317    }
     318  }
     319  if (object[0].ptype == 1) {   /* open box */
     320    for (i = 0; i < object[0].Npts; i++) {
     321      if (!(finite(x[i]) && finite(y[i]))) continue;
     322      sx = x[i]*mxi + y[i]*mxj + bx;
     323      sy = x[i]*myi + y[i]*myj + by;
     324      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     325          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     326      {
     327        if (scaleColor) {
     328          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     329          buffer->bColor_R = pixel1[pixel];
     330          buffer->bColor_G = pixel2[pixel];
     331          buffer->bColor_B = pixel3[pixel];
     332        }
     333        D = scaleSize ? dz*z[i] : ds;
     334        DrawRectangle (buffer, sx, sy, 2*D, 2*D);
     335      }
     336    }
     337  }
     338  if (object[0].ptype == 2) { /* cross */
     339    for (i = 0; i < object[0].Npts; i++) {
     340      if (!(finite(x[i]) && finite(y[i]))) continue;
     341      sx = x[i]*mxi + y[i]*mxj + bx;
     342      sy = x[i]*myi + y[i]*myj + by;
     343      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     344          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     345      {
     346        if (scaleColor) {
     347          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     348          buffer->bColor_R = pixel1[pixel];
     349          buffer->bColor_G = pixel2[pixel];
     350          buffer->bColor_B = pixel3[pixel];
     351        }
     352        D = scaleSize ? dz*z[i] : ds;
     353        DrawLine (buffer, sx - D, sy, sx + D, sy);
     354        DrawLine (buffer, sx, sy - D, sx, sy + D);
     355      }
     356    }
     357  }
     358  if (object[0].ptype == 3) {   /* x */
     359    for (i = 0; i < object[0].Npts; i++) {
     360      if (!(finite(x[i]) && finite(y[i]))) continue;
     361      sx = x[i]*mxi + y[i]*mxj + bx;
     362      sy = x[i]*myi + y[i]*myj + by;
     363      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     364          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     365      {
     366        if (scaleColor) {
     367          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     368          buffer->bColor_R = pixel1[pixel];
     369          buffer->bColor_G = pixel2[pixel];
     370          buffer->bColor_B = pixel3[pixel];
     371        }
     372        D = scaleSize ? dz*z[i] : ds;
     373        DrawLine (buffer, sx + D, sy - D, sx - D, sy + D);
     374        DrawLine (buffer, sx - D, sy - D, sx + D, sy + D);
     375      }
     376    }
     377  }
     378  if (object[0].ptype == 4) {   /* filled triangle */
     379    for (i = 0; i < object[0].Npts; i++) {
     380      if (!(finite(x[i]) && finite(y[i]))) continue;
     381      sx = x[i]*mxi + y[i]*mxj + bx;
     382      sy = x[i]*myi + y[i]*myj + by;
     383      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     384          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     385      {
     386        if (scaleColor) {
     387          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     388          buffer->bColor_R = pixel1[pixel];
     389          buffer->bColor_G = pixel2[pixel];
     390          buffer->bColor_B = pixel3[pixel];
     391        }
     392        D = scaleSize ? dz*z[i] : ds;
     393        // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
     394        FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D);
     395      }
     396    }
     397  }
     398  if (object[0].ptype == 5) {   /* open triangle */
     399    for (i = 0; i < object[0].Npts; i++) {
     400      if (!(finite(x[i]) && finite(y[i]))) continue;
     401      sx = x[i]*mxi + y[i]*mxj + bx;
     402      sy = x[i]*myi + y[i]*myj + by;
     403      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     404          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     405      {
     406        if (scaleColor) {
     407          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     408          buffer->bColor_R = pixel1[pixel];
     409          buffer->bColor_G = pixel2[pixel];
     410          buffer->bColor_B = pixel3[pixel];
     411        }
     412        D = scaleSize ? dz*z[i] : ds;
     413        OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D);
     414      }
     415    }
     416  }
     417  if (object[0].ptype == 6) {   /* Y */
     418    for (i = 0; i < object[0].Npts; i++) {
     419      if (!(finite(x[i]) && finite(y[i]))) continue;
     420      sx = x[i]*mxi + y[i]*mxj + bx;
     421      sy = x[i]*myi + y[i]*myj + by;
     422      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     423          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     424      {
     425        if (scaleColor) {
     426          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     427          buffer->bColor_R = pixel1[pixel];
     428          buffer->bColor_G = pixel2[pixel];
     429          buffer->bColor_B = pixel3[pixel];
     430        }
     431        D = scaleSize ? dz*z[i] : ds;
     432        DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D);
     433        DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D);
     434        DrawLine (buffer, sx, sy, sx,     sy + 1.15*D);
     435      }
     436    }
     437  }
     438  if (object[0].ptype == 7) {   /* 0 */
     439    for (i = 0; i < object[0].Npts; i++) {
     440      if (!(finite(x[i]) && finite(y[i]))) continue;
     441      sx = x[i]*mxi + y[i]*mxj + bx;
     442      sy = x[i]*myi + y[i]*myj + by;
     443      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     444          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     445      {
     446        if (scaleColor) {
     447          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     448          buffer->bColor_R = pixel1[pixel];
     449          buffer->bColor_G = pixel2[pixel];
     450          buffer->bColor_B = pixel3[pixel];
     451        }
     452        D = scaleSize ? dz*z[i] : ds;
     453        DrawCircle (buffer, sx, sy, D);
     454      }
     455    }
     456  }
     457  if (object[0].ptype == 8) {   /* pentagon */
     458    for (i = 0; i < object[0].Npts; i++) {
     459      if (!(finite(x[i]) && finite(y[i]))) continue;
     460      sx = x[i]*mxi + y[i]*mxj + bx;
     461      sy = x[i]*myi + y[i]*myj + by;
     462      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     463          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     464      {
     465        if (scaleColor) {
     466          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     467          buffer->bColor_R = pixel1[pixel];
     468          buffer->bColor_G = pixel2[pixel];
     469          buffer->bColor_B = pixel3[pixel];
     470        }
     471        D = scaleSize ? dz*z[i] : ds;
     472        DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
     473        DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
     474        DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
     475        DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
     476        DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
     477      }
     478    }
     479  }
     480  if (object[0].ptype == 9) {   /* hexagon */
     481    for (i = 0; i < object[0].Npts; i++) {
     482      if (!(finite(x[i]) && finite(y[i]))) continue;
     483      sx = x[i]*mxi + y[i]*mxj + bx;
     484      sy = x[i]*myi + y[i]*myj + by;
     485      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     486          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     487      {
     488        if (scaleColor) {
     489          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     490          buffer->bColor_R = pixel1[pixel];
     491          buffer->bColor_G = pixel2[pixel];
     492          buffer->bColor_B = pixel3[pixel];
     493        }
     494        D = scaleSize ? dz*z[i] : ds;
     495        DrawLine (buffer, sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
     496        DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
     497        DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
     498        DrawLine (buffer, sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
     499        DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
     500        DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
     501      }
     502    }
     503  }
     504  if (object[0].ptype == 10) {  /* filled circle */
     505    for (i = 0; i < object[0].Npts; i++) {
     506      if (!(finite(x[i]) && finite(y[i]))) continue;
     507      sx = x[i]*mxi + y[i]*mxj + bx;
     508      sy = x[i]*myi + y[i]*myj + by;
     509      if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     510          (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     511      {
     512        if (scaleColor) {
     513          int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1)));
     514          buffer->bColor_R = pixel1[pixel];
     515          buffer->bColor_G = pixel2[pixel];
     516          buffer->bColor_B = pixel3[pixel];
     517        }
     518        D = scaleSize ? dz*z[i] : ds;
     519        FillCircle (buffer, sx, sy, D);
     520      }
     521    }
     522  }
     523  if (object[0].ptype == 100) { /* connect a pair of points */
     524
     525    double X0 = graph[0].axis[0].fx;
     526    double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
     527    double Y0 = graph[0].axis[1].fy;
     528    double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
     529
     530    for (i = 0; i + 1 < object[0].Npts; i+=2) {
     531      if (!(finite(x[i]) && finite(y[i]))) continue;
     532      sx1 = x[i]*mxi + y[i]*mxj + bx;
     533      sy1 = x[i]*myi + y[i]*myj + by;
     534      sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
     535      sy2 = x[i+1]*myi + y[i+1]*myj + by;
     536      bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
     537    }
     538  }
     539
     540  free (pixel1);
     541  free (pixel2);
     542  free (pixel3);
    585543}
    586544   
  • branches/eam_branches/ipp-20110505/Ohana/src/libkapa/include/kapa.h

    r31160 r31615  
    255255void bDrawRectFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2);
    256256void bDrawTriOpen  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
    257 void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3);
     257void bDrawTriFill  (bDrawBuffer *buffer, double x1, double y1, double dx, double dy);
    258258
    259259/* bDrawRotFont.c */
  • branches/eam_branches/ipp-20110505/Ohana/src/libkapa/src/bDrawFuncs.c

    r29938 r31615  
    7878
    7979void bDrawSetStyle (bDrawBuffer *buffer, bDrawColor color, int lw, int lt) {
    80   buffer->bColor = color;
    81   buffer->bColor_R = buffer->palette[color].red;
    82   buffer->bColor_G = buffer->palette[color].green;
    83   buffer->bColor_B = buffer->palette[color].blue;
     80  if (color >= 0) {
     81    buffer->bColor = color;
     82    buffer->bColor_R = buffer->palette[color].red;
     83    buffer->bColor_G = buffer->palette[color].green;
     84    buffer->bColor_B = buffer->palette[color].blue;
     85  }
    8486  buffer->bWeight = lw;
    8587  buffer->bType = lt;
     
    134136  Y2 = MIN (MAX (ROUND (y2), 1), buffer[0].Ny - 1);
    135137
    136   bDrawLineHorizontal (buffer, X1, X2, Y1);
    137   bDrawLineHorizontal (buffer, X1, X2, Y2);
     138  bDrawLineHorizontal (buffer, X1, X2 + 1, Y1);
     139  bDrawLineHorizontal (buffer, X1, X2 + 1, Y2);
    138140  bDrawLineVertical   (buffer, X1, Y1, Y2);
    139141  bDrawLineVertical   (buffer, X2, Y1, Y2);
     
    275277}
    276278
    277 void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double x2, double y2, double x3, double y3) {
    278 
    279   bDrawTriOpen (buffer, x1, y1, x2, y2, x3, y3);
     279// upright triangle with base of width 2 dX + 1, height of dY, center of base at x1, y1
     280void bDrawTriFill (bDrawBuffer *buffer, double x1, double y1, double dx, double dy) {
     281
     282  int xs, xe, x, y;
     283  float e, m;
     284
     285  double dX = fabs(dx);
     286 
     287  xs = x1 - dX;
     288  xe = x1 + dX + 1;
     289  e = 0;
     290  m = dX / dy;
     291
     292  if (dy > 0.0) {
     293    for (y = y1; y < y1 + dy + 1; y++) {
     294      for (x = xs; x < xe; x++) {
     295        bDrawPoint (buffer, x, y);
     296      }
     297      e += m;
     298      if (e > 0.5) {
     299        xs ++;
     300        xe --;
     301        e -= 1.0;
     302      }
     303      if (e < -0.5) {
     304        xs ++;
     305        xe --;
     306        e += 1.0;
     307      }
     308    }   
     309  } else {
     310    for (y = y1; y > y1 + dy - 1; y--) {
     311      for (x = xs; x < xe; x++) {
     312        bDrawPoint (buffer, x, y);
     313      }
     314      e += m;
     315      if (e > 0.5) {
     316        xs ++;
     317        xe --;
     318        e -= 1.0;
     319      }
     320      if (e < -0.5) {
     321        xs ++;
     322        xe --;
     323        e += 1.0;
     324      }
     325    }   
     326  }
     327 
    280328  return;
    281329}
  • branches/eam_branches/ipp-20110505/Ohana/src/libohana/src/string.c

    r31598 r31615  
    193193    word = _parse_nextword_csv (word);
    194194 
     195  if (word[0] == '"') word[0] = ' ';
    195196  if (word[0] == ',') {
    196197      *X = NAN;
  • branches/eam_branches/ipp-20110505/Ohana/src/opihi/Makefile

    r8566 r31615  
    2323
    2424all:
    25         for i in $(PROGRAM) $(SPECIAL); do make $$i || exit; done
    26         make pantasks_client
    27         make pantasks_server
     25        for i in $(PROGRAM) $(SPECIAL); do $(MAKE) $$i || exit; done
     26        $(MAKE) pantasks_client
     27        $(MAKE) pantasks_server
    2828
    2929libs:
    30         for i in $(LIBS); do make $$i || exit; done
     30        for i in $(LIBS); do $(MAKE) $$i || exit; done
    3131
    3232extras:
    33         for i in $(EXTRAS); do make $$i || exit; done
     33        for i in $(EXTRAS); do $(MAKE) $$i || exit; done
    3434
    3535install:
    36         for i in $(PROGRAM) $(SPECIAL); do make $$i.install || exit; done
    37         make pantasks_client.install
    38         make pantasks_server.install
     36        for i in $(PROGRAM) $(SPECIAL); do $(MAKE) $$i.install || exit; done
     37        $(MAKE) pantasks_client.install
     38        $(MAKE) pantasks_server.install
    3939
    4040extras-install:
    41         for i in $(EXTRAS); do make $$i.install || exit; done
     41        for i in $(EXTRAS); do $(MAKE) $$i.install || exit; done
    4242
    4343clean:
    44         for i in $(PROGRAM) $(SPECIAL) $(EXTRAS) $(LIBS); do make $$i.clean || exit; done
     44        for i in $(PROGRAM) $(SPECIAL) $(EXTRAS) $(LIBS); do $(MAKE) $$i.clean || exit; done
    4545
    4646libs-uninstall:
    47         for i in $(LIBS); do make $$i.uninstall || exit; done
     47        for i in $(LIBS); do $(MAKE) $$i.uninstall || exit; done
    4848
    4949dist: clean
    50         for i in $(PROGRAM) $(SPECIAL) $(EXTRAS) $(LIBS); do make $$i.dist || exit; done
     50        for i in $(PROGRAM) $(SPECIAL) $(EXTRAS) $(LIBS); do $(MAKE) $$i.dist || exit; done
    5151        rm -rf bin
    5252        rm -rf lib
     
    5555
    5656pantasks_client pantasks_server:
    57         if [ -d pantasks ]; then (cd pantasks && make $@); fi
     57        if [ -d pantasks ]; then (cd pantasks && $(MAKE) $@); fi
    5858
    5959pantasks_client.install: pantasks_client
    60         if [ -d pantasks ]; then (cd pantasks && make $@); fi
     60        if [ -d pantasks ]; then (cd pantasks && $(MAKE) $@); fi
    6161
    6262pantasks_server.install: pantasks_server
    63         if [ -d pantasks ]; then (cd pantasks && make $@); fi
     63        if [ -d pantasks ]; then (cd pantasks && $(MAKE) $@); fi
    6464
    6565$(PROGRAM) $(LIBS) $(EXTRAS):
    66         if [ -d "$@" ]; then (cd $@ && make); fi
     66        if [ -d "$@" ]; then (cd $@ && $(MAKE)); fi
    6767
    6868%.install:
    69         if [ -d "$*" ]; then make $*; fi
    70         if [ -d "$*" ]; then (cd $* && make install); fi
     69        if [ -d "$*" ]; then $(MAKE) $*; fi
     70        if [ -d "$*" ]; then (cd $* && $(MAKE) install); fi
    7171
    7272%.clean:
    73         if [ -d "$*" ]; then (cd $* && make clean); fi
     73        if [ -d "$*" ]; then (cd $* && $(MAKE) clean); fi
    7474
    7575%.dist:
    76         if [ -d "$*" ]; then (cd $* && make dist); fi
     76        if [ -d "$*" ]; then (cd $* && $(MAKE) dist); fi
    7777
    7878%.uninstall:
    79         if [ -d "$*" ]; then (cd $* && make uninstall); fi
     79        if [ -d "$*" ]; then (cd $* && $(MAKE) uninstall); fi
    8080
    8181.PHONY: $(PROGRAM) $(LIBS) pantasks_server pantasks_client
  • branches/eam_branches/ipp-20110505/Ohana/src/opihi/cmd.data/init.c

    r31450 r31615  
    137137int zap              PROTO((int, char **));
    138138int zplot            PROTO((int, char **));
     139int zcplot            PROTO((int, char **));
    139140
    140141static Command cmds[] = { 
     
    284285  {1, "zap",          zap,              "assign values to pixel regions"},
    285286  {1, "zplot",        zplot,            "plot x y with size scaled by z"},
     287  {1, "zcplot",       zcplot,           "plot x y with color scaled by z"},
    286288};
    287289
  • branches/eam_branches/ipp-20110505/Ohana/src/opihi/cmd.data/read_vectors.c

    r31598 r31615  
    22
    33FILE *f = (FILE *) NULL;
    4 char filename[1024];
     4char filename[2048];
    55
    66int datafile (int argc, char **argv) {
     
    8484    colstr = argv[2*i+2];
    8585    for (j = 0; j < strlen (colstr); j++) {
    86       if (!isdigit(colstr[j])) {
    87         gprint (GP_ERR, "USAGE: read name N name N ...\n");
    88         free (vec);
    89         free (col);
    90         return (FALSE);   
    91       }
    92     }
    93     col[i] = atof (colstr);
     86      if (isdigit(colstr[j])) {
     87        col[i] = atof (colstr);
     88        continue;
     89      }
     90      // allow 'excel' columns names of the form A-Z, AA-AZ, BA-BZ, .. ZA-ZZ
     91      if (strlen(colstr) >= 3) goto bad_colname;
     92      if (colstr[0] < 'A') goto bad_colname;
     93      if (colstr[0] > 'Z') goto bad_colname;
     94      if (colstr[1] && colstr[1] < 'A') goto bad_colname;
     95      if (colstr[1] && colstr[1] > 'Z') goto bad_colname;
     96
     97      col[i] = colstr[0] - 'A' + 1;
     98      if (colstr[1]) {
     99        col[i] *= 26;
     100        col[i] += colstr[1] - 'A' + 1;
     101      }
     102      continue;
     103
     104    bad_colname:
     105      gprint (GP_ERR, "USAGE: read name N name N ...\n");
     106      free (vec);
     107      free (col);
     108      return (FALSE);   
     109    }
    94110  }
    95111
     
    105121    scan_line (f, buffer);
    106122  }
     123
     124  int Nfield = 0;
     125  int Nline = 0;
    107126
    108127  Nstart = 0;
     
    139158          }
    140159          vec[i][0].elements.Flt[N] = value;
     160          if (status) {
     161              Nfield ++;
     162          }
    141163          if (!status) vec[i][0].elements.Flt[N] = NAN;
    142164        }
    143165        if (status) N++;
    144166      }
     167      Nline ++;
     168      if (c1) {
     169          // fprintf (stderr, "line %d, chars %ld, fields %d\n", Nline, (c1 - c0), Nfield);
     170      }
     171      Nfield = 0;
    145172      c0 = c1 + 1;
    146173      if (N == NELEM) {
  • branches/eam_branches/ipp-20110505/Ohana/src/opihi/cmd.data/tvcolors.c

    r25757 r31615  
    55  int N, kapa;
    66  char *name;
    7   KapaImageData data;
     7  // KapaImageData data;
    88
    99  name = NULL;
     
    1313    remove_argument (N, &argc, argv);
    1414  }
    15   if (!GetImage (&data, &kapa, name)) return (FALSE);
     15  if (!GetGraph (NULL, &kapa, name)) return (FALSE);
    1616  FREE (name);
    1717
  • branches/eam_branches/ipp-20110505/Ohana/src/opihi/cmd.data/zplot.c

    r20936 r31615  
    5858}
    5959
     60int zcplot (int argc, char **argv) {
     61 
     62  int i, kapa;
     63  opihi_flt *out;
     64  double min, range;
     65  Graphdata graphmode;
     66  Vector *xvec, *yvec, *zvec, Zvec;
    6067
     68  if (!style_args (&graphmode, &argc, argv, &kapa)) return (FALSE);
     69
     70  if (argc != 6) {
     71    gprint (GP_ERR, "USAGE: zplot <x> <y> <z> min max\n");
     72    return (FALSE);
     73  }
     74
     75  min = atof(argv[4]);
     76  range = atof(argv[5]) - min;
     77
     78  /* find vectors */
     79  if ((xvec = SelectVector (argv[1], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     80  if ((yvec = SelectVector (argv[2], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     81  if ((zvec = SelectVector (argv[3], OLDVECTOR, TRUE)) == NULL) return (FALSE);
     82  if (xvec[0].Nelements != yvec[0].Nelements) {
     83    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[2]);
     84    return (FALSE);
     85  }
     86  if (xvec[0].Nelements != zvec[0].Nelements) {
     87    gprint (GP_ERR, "vectors %s and %s not the same length\n", argv[1], argv[3]);
     88    return (FALSE);
     89  }
     90  SetVector (&Zvec, OPIHI_FLT, zvec[0].Nelements);
     91  out = Zvec.elements.Flt;
     92 
     93  if (zvec[0].type == OPIHI_FLT) {
     94    opihi_flt *in = zvec[0].elements.Flt;
     95    for (i = 0; i < Zvec.Nelements; i++, in++, out++) {
     96      *out = MIN (1.0, MAX (0.01, (*in - min) / range));
     97    }
     98  } else {
     99    opihi_int *in = zvec[0].elements.Int;
     100    for (i = 0; i < Zvec.Nelements; i++, in++, out++) {
     101      *out = MIN (1.0, MAX (0.01, (*in - min) / range));
     102    }
     103  }
     104
     105  /* point size determined by Zvec */
     106  graphmode.style = 2; /* plot points */
     107  graphmode.color = -1; /* point color determined by Zvec */
     108  graphmode.etype = 0; /* no errorbars */
     109  PlotVectorTriplet (kapa, xvec, yvec, &Zvec, &graphmode);
     110
     111  free (Zvec.elements.Ptr);
     112
     113  return (TRUE);
     114
     115}
     116
     117
Note: See TracChangeset for help on using the changeset viewer.