home *** CD-ROM | disk | FTP | other *** search
- /* pen.c ********************************************************************
- * virtual plotter
- * Accept pen up, down commands and x,y coordinates. Make physical i/o
- * calls only when necessary:
- * 1) When pen is lifted after having been down,
- * 2) When calling routine requests by setting ptype to "DATA".
- *
- * Not a general purpose routine. Part of a hidden line algorithm is
- * implemented here.
- *****************************************/
- #include "tdp.h"
- void pen(NewPenState,hpos,ptype,hinc,vcum)
- register short NewPenState,hpos,ptype;
- register short *vcum;
- {
- static short PenState = RESET, hstart = 0, hcur = -1;
-
- if (PenState == DOWN) {
- if (NewPenState == UP) {
- if (hstart != hcur) {
- Move(rp,hstart,TOPVERT-vcum[hstart]);
- if (PlotFile)
- fprintf(pfp,"PU %d %d;\n",1+hstart,1+TOPVERT-vcum[hstart]);
- if (To_mCAD)
- fprintf(mfp,"\n%d %d\n", hstart, vcum[hstart]);
- }
- hcur = hpos-hinc;
- Draw(rp, hcur, TOPVERT-vcum[hcur]);
- if (PlotFile)
- fprintf(pfp,"PD %d %d;\n", 1+hcur, 1+TOPVERT-vcum[hcur]);
- if (To_mCAD)
- fprintf(mfp,"%d %d\n*>\n", hcur, vcum[hcur]);
- hstart = hpos;
- }
- else if (ptype == DATA) {
- if (hstart != hcur) {
- Move(rp,hstart,TOPVERT-vcum[hstart]);
- if (PlotFile)
- fprintf(pfp,"PU %d %d;\n",1+hstart,1+TOPVERT-vcum[hstart]);
- if (To_mCAD)
- fprintf(mfp,"\n%d %d\n", hstart, vcum[hstart]);
- }
- Draw(rp, hpos, TOPVERT-vcum[hpos]);
- if (PlotFile)
- fprintf(pfp,"PD %d %d;\n", 1+hpos, 1+TOPVERT-vcum[hpos]);
- if (To_mCAD)
- fprintf(mfp,"%d %d\n", hpos, vcum[hpos]);
- hcur = hpos;
- hstart = hpos;
- }
-
- else if (NewPenState == RESET)
- hstart = hpos;
- }
- else if (NewPenState == DOWN) {
- if (ptype == INTERP)
- hstart = hpos-hinc;
- else if ((PenState != RESET) && (ptype == DATA)) {
- hcur = hpos-hinc;
- Move(rp, hcur, TOPVERT-vcum[hcur]);
- Draw(rp, hpos, TOPVERT-vcum[hpos]);
- if (PlotFile) {
- fprintf(pfp,"PU %d %d;\n", 1+hcur, 1+TOPVERT-vcum[hcur]);
- fprintf(pfp,"PD %d %d;\n", 1+hpos, 1+TOPVERT-vcum[hpos]);
- }
- if (To_mCAD) {
- fprintf(mfp,"\n%d %d\n", hcur, vcum[hcur]);
- fprintf(mfp,"%d %d\n", hpos, vcum[hpos]);
- }
- hstart = (hcur = hpos);
- }
- }
-
- else
- hstart = hpos;
-
- PenState = NewPenState;
- }
-
-