diff options
Diffstat (limited to 'src/graph/view2D/graph2d.c')
-rw-r--r-- | src/graph/view2D/graph2d.c | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/src/graph/view2D/graph2d.c b/src/graph/view2D/graph2d.c new file mode 100644 index 00000000..47960cd7 --- /dev/null +++ b/src/graph/view2D/graph2d.c @@ -0,0 +1,168 @@ +/* + Copyright (C) 1991-2002, The Numerical ALgorithms Group Ltd. + All rights reserved. + Copyright (C) 2007-2008, Gabriel Dos Reis. + All right reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of The Numerical ALgorithms Group Ltd. nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#define _GRAPH2D_C +#include "axiom-c-macros.h" + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> + +#include "header2.h" + +#include "all_2d.H1" +#include "util.H1" + + +void +#ifdef _NO_PROTO +getGraphFromViewman(i) +int i; +#else +getGraphFromViewman(int i) +#endif +{ + /** This routine should be called right after a read of the graph key + was made from the viewport manager (or defined in some other way). **/ + + int j,k,xPointsNeeded; + pointListStruct *llPtr; + pointStruct *p; + + readViewman(&(graphArray[i].xmin),floatSize); + readViewman(&(graphArray[i].xmax),floatSize); + readViewman(&(graphArray[i].ymin),floatSize); + readViewman(&(graphArray[i].ymax),floatSize); + readViewman(&(graphArray[i].xNorm),floatSize); + readViewman(&(graphArray[i].yNorm),floatSize); + readViewman(&(graphArray[i].spadUnitX),floatSize); + readViewman(&(graphArray[i].spadUnitY),floatSize); + readViewman(&(graphArray[i].unitX),floatSize); + readViewman(&(graphArray[i].unitY),floatSize); + readViewman(&(graphArray[i].originX),floatSize); + readViewman(&(graphArray[i].originY),floatSize); + readViewman(&(graphArray[i].numberOfLists),intSize); + + if (!(llPtr = (pointListStruct *)malloc(graphArray[i].numberOfLists * sizeof(pointListStruct)))) { + fprintf(stderr,"VIEW2D: Fatal Error>> Ran out of memory trying to receive a graph.\n"); + exitWithAck(RootWindow(dsply,scrn),Window,-1); + } + graphArray[i].listOfListsOfPoints = llPtr; + + xPointsNeeded = 0; + for (j=0; j<graphArray[i].numberOfLists; j++) { + readViewman(&(llPtr->numberOfPoints),intSize); + if (!(p = (pointStruct *)malloc(llPtr->numberOfPoints * sizeof(pointStruct)))) { + fprintf(stderr,"VIEW2D: (pointStruct) ran out of memory trying to create a new graph.\n"); + exitWithAck(RootWindow(dsply,scrn),Window,-1); + } + llPtr->listOfPoints = p; /** point to current point list **/ + for (k=0; k<llPtr->numberOfPoints; k++) { + readViewman(&(p->x),floatSize); + readViewman(&(p->y),floatSize); + readViewman(&(p->hue),floatSize); + readViewman(&(p->shade),floatSize); + p++; + } /* for k in list of points */ + readViewman(&(llPtr->pointColor),intSize); + readViewman(&(llPtr->lineColor),intSize); + readViewman(&(llPtr->pointSize),intSize); + + xPointsNeeded += llPtr->numberOfPoints; + llPtr++; + } /* for j in list of lists of points */ + + /* read in graph state for the existing graph (override default values) */ + readViewman(&(graphStateArray[i].scaleX),floatSize); + readViewman(&(graphStateArray[i].scaleY),floatSize); + readViewman(&(graphStateArray[i].deltaX),floatSize); + readViewman(&(graphStateArray[i].deltaY),floatSize); + readViewman(&(graphStateArray[i].pointsOn),intSize); + readViewman(&(graphStateArray[i].connectOn),intSize); + readViewman(&(graphStateArray[i].splineOn),intSize); + readViewman(&(graphStateArray[i].axesOn),intSize); + readViewman(&(graphStateArray[i].axesColor),intSize); + readViewman(&(graphStateArray[i].unitsOn),intSize); + readViewman(&(graphStateArray[i].unitsColor),intSize); + readViewman(&(graphStateArray[i].showing),intSize); + graphStateArray[i].selected = yes; + graphStateBackupArray[i] = graphStateArray[i]; + + graphStateArray[i].deltaX = graphStateArray[0].deltaX; + graphStateArray[i].deltaY = graphStateArray[0].deltaY; + graphStateArray[i].scaleX = graphStateArray[0].scaleX; + graphStateArray[i].scaleY = graphStateArray[0].scaleY; + + /* allocate memory for xPoints (used in drawViewport) */ + if (!(xPointsArray[i].xPoint = (XPoint *)malloc(xPointsNeeded * sizeof(XPoint)))) { + fprintf(stderr,"VIEW2D: (XPoint) Ran out of memory (malloc) trying to create a new graph.\n"); + exitWithAck(RootWindow(dsply,scrn),Window,-1); + } + if (!(xPointsArray[i].x10Point = (Vertex *)malloc(xPointsNeeded * sizeof(Vertex)))) { + fprintf(stderr, + "VIEW2D: (X10Point) Ran out of memory (malloc) trying to create a new graph.\n"); + exitWithAck(RootWindow(dsply,scrn),Window,-1); + } + if (!(xPointsArray[i].arc = (XArc *)malloc(xPointsNeeded * sizeof(XArc)))) { + fprintf(stderr,"VIEW2D: (XArc) Ran out of memory (malloc) trying to create a new graph.\n"); + exitWithAck(RootWindow(dsply,scrn),Window,-1); + } + +} /* getGraphFromViewman */ + + + +void +#ifdef _NO_PROTO +freeGraph(i) +int i; +#else +freeGraph(int i) +#endif +{ + int j; + pointListStruct *llPtr; + + if (graphArray[i].key) { + graphArray[i].key = 0; /* 0 means no graph */ + for (j=0,llPtr=graphArray[i].listOfListsOfPoints; + j<graphArray[i].numberOfLists; j++,llPtr++) + free(llPtr->listOfPoints); + free(llPtr); + free(xPointsArray[i].xPoint); + } else { + } + +} |