* src/frontend/graf.c src/frontend/graf.h: Moved these

files...

	* src/frontend/plotting/graf.c src/frontend/plotting/graf.h:
	... here.
This commit is contained in:
arno 2000-05-13 10:31:55 +00:00
parent 4d26c7626b
commit 2507d4c7bf
2 changed files with 87 additions and 99 deletions

View File

@ -11,16 +11,18 @@ Author: 1988 Jeffrey M. Hsu
#include "ngspice.h"
#include "cpdefs.h" /* for VT_ */
#include "cpdefs.h" /* for VT_ */
#include "cpextern.h"
#include "plot.h"
#include "ftedebug.h" /* for iplot */
#include "dvec.h" /* for struct dvec */
#include "ftedefs.h" /* for FTEextern.h and IPOINT{MIN,MAX} */
#include <plot.h>
#include "ftedebug.h" /* for iplot */
#include <dvec.h> /* for struct dvec */
#include "ftedefs.h" /* for FTEextern.h and IPOINT{MIN,MAX} */
#include "fteinput.h"
#include "ftegraph.h"
#include "ftedbgra.h"
#include "ftedev.h"
#include <terminal.h>
#include "graf.h"
@ -85,18 +87,17 @@ extern void Input (REQUEST *request, RESPONSE *response);
extern int DestroyGraph (int id);
int
gr_init(double *xlims, double *ylims, char *xname, char *plotname, char *hcopy, int nplots, double xdelta, double ydelta, GRIDTYPE gridtype, PLOTTYPE plottype, char *xlabel, char *ylabel, int xtype, int ytype, char *pname, char *commandline)
/* The size of the screen. */
/* What to label things. */
/* The raster file. */
/* How many plots there will be. */
/* Line increments for the scale. */
/* The grid type */
/* and the plot type. */
/* Labels for axes. */
/* The types of the data graphed. */
/* For xi_zoomdata() */
gr_init(double *xlims, double *ylims, /* The size of the screen. */
char *xname, char *plotname, /* What to label things. */
char *hcopy, /* The raster file. */
int nplots, /* How many plots there will be. */
double xdelta, double ydelta, /* Line increments for the scale. */
GRIDTYPE gridtype, /* The grid type */
PLOTTYPE plottype, /* and the plot type. */
char *xlabel, char *ylabel, /* Labels for axes. */
int xtype, int ytype, /* The types of the data graphed. */
char *pname,
char *commandline) /* For xi_zoomdata() */
{
GRAPH *graph;
@ -141,25 +142,11 @@ gr_init(double *xlims, double *ylims, char *xname, char *plotname, char *hcopy,
} else
graph->ticdata = NULL;
/* set slow flag to stop between each plot and prompt the
user for a return
This is used mainly for graphics terminals w/o windows.
*/
/*
if (incremental)
slow = FALSE;
else
(void) cp_getvar("slowplot", VT_BOOL, (char *) &slow);
*/
if (!xlims || !ylims) {
internalerror("gr_init: no range specified");
return(FALSE);
}
/* indicate some graphics going on */
/* gr_gmode = TRUE; */
/* save upper and lower limits */
graph->data.xmin = xlims[0];
graph->data.xmax = xlims[1];
@ -254,7 +241,10 @@ gr_init(double *xlims, double *ylims, char *xname, char *plotname, char *hcopy,
*
*/
void
gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, int np)
gr_point(struct dvec *dv,
double newx, double newy,
double oldx, double oldy,
int np)
{
int oldtox, oldtoy; /* value before clipping */
@ -266,7 +256,7 @@ gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, in
DatatoScreen(currentgraph, oldx, oldy, &fromx, &fromy);
DatatoScreen(currentgraph, newx, newy, &tox, &toy);
/* note: we do not particularly want to clip here */
/* note: we do not particularly want to clip here */
oldtox = tox; oldtoy = toy;
if (!currentgraph->grid.circular) {
if (clip_line(&fromx, &fromy, &tox, &toy,
@ -296,8 +286,8 @@ gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, in
double *tics;
case PLOT_LIN:
/* If it's a linear plot, ignore first point since we don't want
to connect with oldx and oldy. */
/* If it's a linear plot, ignore first point since we don't
want to connect with oldx and oldy. */
if (np)
DrawLine(fromx, fromy, tox, toy);
if ((tics = (double *) currentgraph->ticdata)) {
@ -334,10 +324,6 @@ gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, in
pointc[1] = '\0';
Text(pointc, (int) (tox - currentgraph->fontwidth / 2),
(int) (toy - currentgraph->fontheight / 2));
/* gr_redraw will redraw this w/o our having to save it */
/* SaveText(currentgraph, pointc,
(int) (tox - currentgraph->fontwidth / 2),
(int) (toy - currentgraph->fontheight / 2)); */
default:
break;
}
@ -352,8 +338,7 @@ gr_start_internal(struct dvec *dv, bool copyvec)
char *s;
/* Do something special with poles and zeros. Poles are 'x's, and
* zeros are 'o's.
*/
* zeros are 'o's. */
s = ft_typenames(dv->v_type);
if (eq(s, "pole")) {
dv->v_linestyle = 'x';
@ -414,7 +399,7 @@ gr_start(struct dvec *dv)
}
/* make sure the linestyles in this graph don't exceed the number of
linestyles available in the current display device */
linestyles available in the current display device */
void
gr_relinestyle(GRAPH *graph)
{
@ -483,13 +468,14 @@ gr_pmsg(char *text)
fprintf(cp_err, "%s", text);
else
if (currentgraph->grid.xlabel) /* MW. grid.xlabel may be NULL */
Text(text, currentgraph->viewport.width
- (strlen(currentgraph->grid.xlabel) + 3)
* currentgraph->fontwidth,
currentgraph->absolute.height - currentgraph->fontheight);
else fprintf(cp_err, " %s \n", text);
/* MW. grid.xlabel may be NULL */
if (currentgraph->grid.xlabel)
Text(text, currentgraph->viewport.width
- (strlen(currentgraph->grid.xlabel) + 3)
* currentgraph->fontwidth,
currentgraph->absolute.height - currentgraph->fontheight);
else
fprintf(cp_err, " %s \n", text);
Update();
(void) getchar();
@ -528,16 +514,16 @@ gr_resize(GRAPH *graph)
k->y = (k->y - graph->viewportyoff) * scaley + graph->viewportyoff;
}
/* X also generates an expose after a resize
This is handled in X10 by not redrawing on resizes and waiting for
the expose event to redraw. In X11, the expose routine tries to
be clever and only redraws the region specified in an expose
event, which does not cover the entire region of the plot if the
resize was from a small window to a larger window. So in order
to keep the clever X11 expose event handling, we have the X11
resize routine pull out expose events for that window, and we
redraw on resize also.
*/
/* X also generates an expose after a resize.
This is handled in X10 by not redrawing on resizes and waiting
for the expose event to redraw. In X11, the expose routine
tries to be clever and only redraws the region specified in an
expose event, which does not cover the entire region of the
plot if the resize was from a small window to a larger window.
So in order to keep the clever X11 expose event handling, we
have the X11 resize routine pull out expose events for that
window, and we redraw on resize also. */
#ifdef X_DISPLAY_MISSING
gr_redraw(graph);
#endif
@ -625,16 +611,21 @@ gr_restoretext(GRAPH *graph)
}
/* Do some incremental plotting. 3 cases -- first, if length < IPOINTMIN, don't
* do anything. Second, if length = IPOINTMIN, plot what we have so far. Third,
* if length > IPOINTMIN, plot the last points and resize if needed.
/* Do some incremental plotting. There are 3 cases:
*
* First, if length < IPOINTMIN, don't do anything.
*
* Second, if length = IPOINTMIN, plot what we have so far.
*
* Third, if length > IPOINTMIN, plot the last points and resize if
* needed.
*
* Note we don't check for pole / zero because they are of length 1.
*/
/* note: there is a problem with multiple iplots that use the same vector,
namely, that vector has the same color throughout. This is another
reason why we need to pull color and linestyle out of dvec XXX
Or maybe even something more drastic ?? */
*
* FIXME: there is a problem with multiple iplots that use the same
* vector, namely, that vector has the same color throughout. This is
* another reason why we need to pull color and linestyle out of dvec
* XXX Or maybe even something more drastic ?? */
extern bool resumption;
@ -665,8 +656,7 @@ iplot(struct plot *pl, int id)
if (len < IPOINTMIN) {
/* Nothing yet */
return(0);
} else if (len == IPOINTMIN || !id
/* || (len > IPOINTMIN && resumption) */) {
} else if (len == IPOINTMIN || !id) {
resumption = FALSE;
/* Draw the grid for the first time, and plot everything. */
lims = ft_minmax(xs, TRUE);
@ -697,16 +687,10 @@ iplot(struct plot *pl, int id)
yt = 0;
break;
}
/*
(void) gr_init((double *) NULL, (double *) NULL, xs->v_name,
pl->pl_title, (char *) NULL, j, xdelta, ydelta,
GRID_LIN, plottype, xs->v_name, yl, xs->v_type, yt,
commandline, plotname);
*/
/* note: have command options for iplot to specify xdelta, etc.
So don't need static variables hack.
Assume default values for now.
*/
/* note: have command options for iplot to specify xdelta,
etc. So don't need static variables hack. Assume default
values for now. */
sprintf(commandline, "iplot %s", xs->v_name);
(void) gr_init(xlims, ylims, xs->v_name,
@ -812,10 +796,8 @@ iplot(struct plot *pl, int id)
gr_resize(currentgraph);
gr_redraw(currentgraph);
} else {
/* Just connect the last two points. This won't
* be done with curve interpolation, so it might
* look funny.
*/
/* Just connect the last two points. This won't be done
* with curve interpolation, so it might look funny. */
for (v = pl->pl_dvecs; v; v = v->v_next)
if (v->v_flags & VF_PLOT) {
gr_point(v,
@ -990,12 +972,12 @@ gr_iplot(struct plot *plot)
}
/*
* This gets called after iplotting is done. We clear out the db_graphid
* fields. Copy the dvecs, which we referenced by reference, so
* DestroyGraph gets to free its own copy. Note: This is a clear
* case for separating the linestyle and color fields from dvec.
*/
/* This gets called after iplotting is done. We clear out the
* db_graphid fields. Copy the dvecs, which we referenced by
* reference, so DestroyGraph gets to free its own copy.
*
* Note: This is a clear case for separating the linestyle and color
* fields from dvec. */
void
gr_end_iplot(void)
@ -1080,4 +1062,3 @@ readtics(char *string)
*ticsk = HUGE;
return(tics);
}

View File

@ -3,13 +3,22 @@
* 1999 E. Rouat
************/
#ifndef GRAF_H_INCLUDED
#define GRAF_H_INCLUDED
#ifndef _GRAF_H
#define _GRAF_H
int gr_init(double *xlims, double *ylims, char *xname, char *plotname, char *hcopy,
int nplots, double xdelta, double ydelta, GRIDTYPE gridtype, PLOTTYPE plottype,
char *xlabel, char *ylabel, int xtype, int ytype, char *pname, char *commandline);
void gr_point(struct dvec *dv, double newx, double newy, double oldx, double oldy, int np);
int gr_init(double *xlims, double *ylims,
char *xname, char *plotname,
char *hcopy,
int nplots,
double xdelta, double ydelta,
GRIDTYPE gridtype,
PLOTTYPE plottype,
char *xlabel, char *ylabel,
int xtype, int ytype,
char *pname, char *commandline);
void gr_point(struct dvec *dv,
double newx, double newy,
double oldx, double oldy, int np);
void gr_start(struct dvec *dv);
void gr_relinestyle(GRAPH *graph);
void drawlegend(GRAPH *graph, int plotno, struct dvec *dv);
@ -25,6 +34,4 @@ void gr_iplot(struct plot *plot);
void gr_end_iplot(void);
double * readtics(char *string);
#endif