home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d0xx / d056 / mcad.lha / mCAD / tdp / source / pen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-03-02  |  2.5 KB  |  80 lines

  1. /* pen.c ********************************************************************
  2. * virtual plotter
  3. * Accept pen up, down commands and x,y coordinates.  Make physical i/o
  4. * calls only when necessary:
  5. *     1) When pen is lifted after having been down,
  6. *     2) When calling routine requests by setting ptype to "DATA".
  7. *
  8. * Not a general purpose routine.  Part of a hidden line algorithm is
  9. * implemented here.
  10. *****************************************/
  11. #include "tdp.h"
  12. void pen(NewPenState,hpos,ptype,hinc,vcum)
  13. register short NewPenState,hpos,ptype;
  14. register short *vcum;
  15. {
  16.    static short PenState = RESET, hstart = 0, hcur = -1;
  17.  
  18.    if (PenState == DOWN) {
  19.       if (NewPenState == UP) {
  20.          if (hstart != hcur) {
  21.             Move(rp,hstart,TOPVERT-vcum[hstart]);
  22.             if (PlotFile)
  23.                fprintf(pfp,"PU %d %d;\n",1+hstart,1+TOPVERT-vcum[hstart]);
  24.             if (To_mCAD)
  25.                fprintf(mfp,"\n%d %d\n", hstart, vcum[hstart]);
  26.          }
  27.          hcur = hpos-hinc;
  28.          Draw(rp, hcur, TOPVERT-vcum[hcur]);
  29.          if (PlotFile)
  30.             fprintf(pfp,"PD %d %d;\n", 1+hcur, 1+TOPVERT-vcum[hcur]);
  31.          if (To_mCAD)
  32.             fprintf(mfp,"%d %d\n*>\n", hcur, vcum[hcur]);
  33.          hstart = hpos;
  34.       }
  35.       else if (ptype == DATA) {
  36.          if (hstart != hcur) {
  37.             Move(rp,hstart,TOPVERT-vcum[hstart]);
  38.             if (PlotFile)
  39.                fprintf(pfp,"PU %d %d;\n",1+hstart,1+TOPVERT-vcum[hstart]);
  40.             if (To_mCAD)
  41.                fprintf(mfp,"\n%d %d\n", hstart, vcum[hstart]);
  42.          }
  43.          Draw(rp, hpos, TOPVERT-vcum[hpos]);
  44.          if (PlotFile)
  45.             fprintf(pfp,"PD %d %d;\n", 1+hpos, 1+TOPVERT-vcum[hpos]);
  46.          if (To_mCAD)
  47.             fprintf(mfp,"%d %d\n", hpos, vcum[hpos]);
  48.          hcur = hpos;
  49.          hstart = hpos;
  50.       }
  51.  
  52.       else if (NewPenState == RESET)
  53.          hstart = hpos;
  54.    }
  55.    else if (NewPenState == DOWN) {
  56.       if (ptype == INTERP)
  57.          hstart = hpos-hinc;
  58.       else if ((PenState != RESET) && (ptype == DATA)) {
  59.          hcur = hpos-hinc;
  60.          Move(rp, hcur, TOPVERT-vcum[hcur]);
  61.          Draw(rp, hpos, TOPVERT-vcum[hpos]);
  62.          if (PlotFile) {
  63.             fprintf(pfp,"PU %d %d;\n", 1+hcur, 1+TOPVERT-vcum[hcur]);
  64.             fprintf(pfp,"PD %d %d;\n", 1+hpos, 1+TOPVERT-vcum[hpos]);
  65.          }
  66.          if (To_mCAD) {
  67.             fprintf(mfp,"\n%d %d\n", hcur, vcum[hcur]);
  68.             fprintf(mfp,"%d %d\n", hpos, vcum[hpos]);
  69.          }
  70.          hstart = (hcur = hpos);
  71.       }
  72.    }
  73.  
  74.    else
  75.       hstart = hpos;
  76.       
  77.    PenState = NewPenState;
  78. }
  79.  
  80.