|
|
1.1 ! root 1: /******************************************************************* ! 2: * * ! 3: * File: CIFPLOT/plot.c * ! 4: * Written by Dan Fitzpatrick * ! 5: * copyright 1980 -- Regents of the University of California * ! 6: * * ! 7: ********************************************************************/ ! 8: ! 9: #include <stdio.h> ! 10: #include "defs.h" ! 11: #include "globals.h" ! 12: #include "parser_defs.h" ! 13: #include "structs.h" ! 14: #include "out_structs.h" ! 15: ! 16: #define CONST 4 ! 17: ! 18: IMPORT GetList(); ! 19: IMPORT ICompare(); ! 20: IMPORT instance *GetUnAct(); ! 21: ! 22: Plot() ! 23: { ! 24: int i,j,k; ! 25: ! 26: vopen(); ! 27: Instanciate(prog,GlobalTransform,0); ! 28: NextEdge = -INFINITY; ! 29: for(i=CONVERT((real) prog->CBBox.xmin - 1); i<Bottom;i=Sift(i)); ! 30: for(j = Bottom; j<=Top+40; j += OUT_BUF_SIZE) { ! 31: for(i = j; i < j+OUT_BUF_SIZE; i++) { ! 32: Sift(i); ! 33: if(i>=LastEdge) RemoveEdges(i); ! 34: /* ! 35: if(i>=NextEdge) ! 36: */ ! 37: AddEdges(i); ! 38: Sort(i); ! 39: ScanActives(i); ! 40: } ! 41: i = j + OUT_BUF_SIZE; ! 42: /* We're at the end of output buffer, send remaining traps */ ! 43: finishBuf = 1; ! 44: for(k=0;k<UsedLayers;k++) change[k] = 1; ! 45: Sift(i); ! 46: if(i>=LastEdge) RemoveEdges(i); ! 47: /* ! 48: if(i>=NextEdge) ! 49: */ ! 50: AddEdges(i); ! 51: Sort(i); ! 52: ScanActives(i); ! 53: DumpBuf(i); ! 54: finishBuf = 0; ! 55: for(k=0;k<UsedLayers;k++) AddLine(k,i); ! 56: } ! 57: vclose(); ! 58: } ! 59: ! 60: Sift(i) ! 61: register int i; ! 62: { ! 63: register instance *p; ! 64: ! 65: while((p=GetUnAct(i)) != NIL) { ! 66: Activate(p); ! 67: } ! 68: return(FindNext(i)); ! 69: } ! 70: ! 71: InitPlotter() ! 72: { ! 73: int i; ! 74: Top = CONVERT((real) Window.xmax) + 1; ! 75: xLast = Bottom = CONVERT((real) Window.xmin - 1) - 1; ! 76: EdgeQueue = (Queue *) alloc(UsedLayers*sizeof(Queue)); ! 77: NEdgeQueue = (Queue *) alloc(UsedLayers*sizeof(Queue)); ! 78: ActiveEdges = (List *) alloc(UsedLayers*sizeof(List)); ! 79: NecEdgeQueue = (Queue *) alloc(UsedLayers*sizeof(Queue)); ! 80: EdgeEnd = (int *) alloc(UsedLayers*sizeof(int)); ! 81: EdgeStart = (int *) alloc(UsedLayers*sizeof(int)); ! 82: EdgeIntersection = (int *) alloc(UsedLayers*sizeof(int)); ! 83: Valid = (int *) alloc(UsedLayers*sizeof(int)); ! 84: Drawn = (int *) alloc(UsedLayers*sizeof(int)); ! 85: NextChange = (int *) alloc(UsedLayers*sizeof(int)); ! 86: EdgeHolder = (nedge **) alloc(UsedLayers*sizeof(nedge)); ! 87: change = (int *) alloc(UsedLayers*sizeof(int)); ! 88: xprev = (int *) alloc(UsedLayers*sizeof(int)); ! 89: NextEdge = LastEdge = INFINITY; ! 90: finishBuf = 0; ! 91: DummyPoly.level = 0; ! 92: DummyPoly.count = 0; ! 93: DummyPoly.refs = 0; ! 94: for(i=0;i<UsedLayers;i++) { ! 95: EdgeEnd[i] = INFINITY; ! 96: EdgeStart[i] = Bottom; ! 97: EdgeIntersection[i] = INFINITY; ! 98: Valid[i] = INFINITY; ! 99: Drawn[i] = -INFINITY; ! 100: NextChange[i] = -INFINITY; ! 101: EdgeHolder[i] = NIL; ! 102: change[i] = 0; ! 103: xprev[i] = -INFINITY; ! 104: InitQueue(&(EdgeQueue[i])); ! 105: InitQueue(&(NEdgeQueue[i])); ! 106: InitQueue(&(NecEdgeQueue[i])); ! 107: InitList(&(ActiveEdges[i])); ! 108: } ! 109: InitList(&TempList); ! 110: InitUnAct(); ! 111: InitQueue(&FreeHolders); ! 112: InitList(&TextList); ! 113: InitScan(); ! 114: } ! 115: ! 116: ReStartPlotter() ! 117: { ! 118: int i; ! 119: InitPlotter(); ! 120: NextEdge = LastEdge = INFINITY; ! 121: DummyPoly.level = 0; ! 122: DummyPoly.count = 0; ! 123: DummyPoly.refs = 0; ! 124: for(i=0;i<UsedLayers;i++) { ! 125: EdgeEnd[i] = INFINITY; ! 126: EdgeStart[i] = Bottom; ! 127: EdgeIntersection[i] = INFINITY; ! 128: Valid[i] = INFINITY; ! 129: Drawn[i] = -INFINITY; ! 130: NextChange[i] = -INFINITY; ! 131: EdgeHolder[i] = NIL; ! 132: change[i] = 0; ! 133: InitQueue(&(EdgeQueue[i])); ! 134: InitQueue(&(NEdgeQueue[i])); ! 135: InitQueue(&(NecEdgeQueue[i])); ! 136: InitList(&(ActiveEdges[i])); ! 137: } ! 138: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.