| /* |
| * R : A Computer Language for Statistical Data Analysis |
| * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka |
| * Copyright (C) 1998--2016 R Core Team |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, a copy is available at |
| * https://www.R-project.org/Licenses/ |
| */ |
| |
| #ifndef RGRAPHICS_H_ |
| #define RGRAPHICS_H_ |
| |
| /* Internal header, not installed */ |
| |
| /* possible coordinate systems (for specifying locations) */ |
| typedef enum { |
| DEVICE = 0, /* native device coordinates (rasters) */ |
| NDC = 1, /* normalised device coordinates x=(0,1), y=(0,1) */ |
| INCHES = 13, /* inches x=(0,width), y=(0,height) */ |
| NIC = 6, /* normalised inner region coordinates (0,1) */ |
| OMA1 = 2, /* outer margin 1 (bottom) x=NIC, y=LINES */ |
| OMA2 = 3, /* outer margin 2 (left) */ |
| OMA3 = 4, /* outer margin 3 (top) */ |
| OMA4 = 5, /* outer margin 4 (right) */ |
| NFC = 7, /* normalised figure region coordinates (0,1) */ |
| NPC = 16, /* normalised plot region coordinates (0,1) */ |
| USER = 12, /* user/data/world coordinates; |
| * x,=(xmin,xmax), y=(ymin,ymax) */ |
| MAR1 = 8, /* figure margin 1 (bottom) x=USER(x), y=LINES */ |
| MAR2 = 9, /* figure margin 2 (left) x=USER(y), y=LINES */ |
| MAR3 = 10, /* figure margin 3 (top) x=USER(x), y=LINES */ |
| MAR4 = 11, /* figure margin 4 (right) x=USER(y), y=LINES */ |
| |
| /* possible, units (for specifying dimensions) */ |
| /* all of the above, plus ... */ |
| |
| LINES = 14, /* multiples of a line in the margin (mex) */ |
| CHARS = 15 /* multiples of text height (cex) */ |
| } GUnit; |
| |
| |
| #define currentFigureLocation Rf_currentFigureLocation |
| #define GArrow Rf_GArrow |
| #define GBox Rf_GBox |
| #define GCheckState Rf_GCheckState |
| #define GCircle Rf_GCircle |
| #define GClip Rf_GClip |
| #define GClipPolygon Rf_GClipPolygon |
| #define GConvert Rf_GConvert |
| #define GConvertX Rf_GConvertX |
| #define GConvertXUnits Rf_GConvertXUnits |
| #define GConvertY Rf_GConvertY |
| #define GConvertYUnits Rf_GConvertYUnits |
| #define GExpressionHeight Rf_GExpressionHeight |
| #define GExpressionWidth Rf_GExpressionWidth |
| #define GForceClip Rf_GForceClip |
| #define GLine Rf_GLine |
| #define GLocator Rf_GLocator |
| #define GMapUnits Rf_GMapUnits |
| #define GMapWin2Fig Rf_GMapWin2Fig |
| #define GMathText Rf_GMathText |
| #define GMetricInfo Rf_GMetricInfo |
| #define GMMathText Rf_GMMathText |
| #define GMode Rf_GMode |
| #define GMtext Rf_GMtext |
| #define GNewPlot Rf_GNewPlot |
| #define GPath Rf_GPath |
| #define GPolygon Rf_GPolygon |
| #define GPolyline Rf_GPolyline |
| #define GPretty Rf_GPretty |
| #define GRect Rf_GRect |
| #define GRaster Rf_GRaster |
| #define GReset Rf_GReset |
| #define GRestore Rf_GRestore |
| #define GRestorePars Rf_GRestorePars |
| #define GSavePars Rf_GSavePars |
| #define GScale Rf_GScale |
| #define GSetState Rf_GSetState |
| #define GSetupAxis Rf_GSetupAxis |
| #define GStrHeight Rf_GStrHeight |
| #define GStrWidth Rf_GStrWidth |
| #define GSymbol Rf_GSymbol |
| #define GText Rf_GText |
| #define GVStrHeight Rf_GVStrHeight |
| #define GVStrWidth Rf_GVStrWidth |
| #define GVText Rf_GVText |
| |
| #define xDevtoNDC Rf_xDevtoNDC |
| #define xDevtoNFC Rf_xDevtoNFC |
| #define xDevtoNPC Rf_xDevtoNPC |
| #define xDevtoUsr Rf_xDevtoUsr |
| #define xNPCtoUsr Rf_xNPCtoUsr |
| #define yDevtoNDC Rf_yDevtoNDC |
| #define yDevtoNFC Rf_yDevtoNFC |
| #define yDevtoNPC Rf_yDevtoNPC |
| #define yDevtoUsr Rf_yDevtoUsr |
| #define yNPCtoUsr Rf_yNPCtoUsr |
| |
| |
| /*------------------------------------------------------------------- |
| * |
| * GPAR FUNCTIONS are concerned with operations on the |
| * entire set of graphics parameters for a device |
| * (e.g., initialisation, saving, and restoring) |
| * |
| * From graphics.c, used in plot.c. |
| */ |
| |
| /* Reset the current graphical parameters from the default ones: */ |
| void GRestore(pGEDevDesc); |
| /* Make a temporary copy of the current parameters */ |
| void GSavePars(pGEDevDesc); |
| /* Restore the temporary copy saved by GSavePars */ |
| void GRestorePars(pGEDevDesc); |
| |
| |
| /*------------------------------------------------------------------- |
| * |
| * DEVICE STATE FUNCTIONS are concerned with getting and setting |
| * the current state of the device; is it ready to be drawn into? |
| * |
| * From graphics.c, used in plot.c. |
| */ |
| |
| /* has plot.new been called yet? */ |
| void GCheckState(pGEDevDesc); |
| /* Set to 1 when plot.new succeeds |
| * Set to 0 when don't want drawing to go ahead */ |
| void GSetState(int, pGEDevDesc); |
| |
| /*------------------------------------------------------------------- |
| * |
| * GRAPHICAL PRIMITIVES are the generic front-end for the functions |
| * that every device driver must provide. |
| * |
| * NOTE that locations supplied to these functions may be in any |
| * of the valid coordinate systems (each function takes a "coords" |
| * parameter to indicate the coordinate system); the device-specific |
| * version of the function is responsible for calling GConvert to get |
| * the location into device coordinates. |
| * |
| * From graphics.c, used in plot.c. |
| */ |
| |
| |
| /* Draw a circle, centred on (x,y) with radius r (in inches). */ |
| void GCircle(double, double, int, double, int, int, pGEDevDesc); |
| /* Set clipping region (based on current setting of dd->gp.xpd). |
| * Only clip if new clipping region is different from the current one */ |
| void GClip(pGEDevDesc); |
| /* Polygon clipping: */ |
| int GClipPolygon(double *, double *, int, int, int, |
| double *, double *, pGEDevDesc); |
| /* Always clips */ |
| void GForceClip(pGEDevDesc); |
| /* Draw a line from (x1,y1) to (x2,y2): */ |
| void GLine(double, double, double, double, int, pGEDevDesc); |
| /* Return the location of the next mouse click: */ |
| Rboolean GLocator(double*, double*, int, pGEDevDesc); |
| /* Return the height, depth, and width of the specified |
| * character in the specified units: */ |
| void GMetricInfo(int, double*, double*, double*, GUnit, pGEDevDesc); |
| /* Set device "mode" (drawing or not drawing) here for windows and mac drivers. |
| */ |
| void GMode(int, pGEDevDesc); |
| /* Draw a path using the specified lists of x and y values: */ |
| void GPath(double*, double*, int, int*, Rboolean, int, int, pGEDevDesc); |
| /* Draw a polygon using the specified lists of x and y values: */ |
| void GPolygon(int, double*, double*, int, int, int, pGEDevDesc); |
| /* Draw series of straight lines using the specified lists of x and y values: */ |
| void GPolyline(int, double*, double*, int, pGEDevDesc); |
| /* Draw a rectangle given two opposite corners: */ |
| void GRect(double, double, double, double, int, int, int, pGEDevDesc); |
| /* Draw a raster image given two opposite corners: */ |
| void GRaster(unsigned int*, int, int, |
| double, double, double, double, |
| double, Rboolean, pGEDevDesc); |
| /* Return the height of the specified string in the specified units: */ |
| double GStrHeight(const char *, cetype_t, GUnit, pGEDevDesc); |
| /* Return the width of the specified string in the specified units */ |
| double GStrWidth(const char *, cetype_t, GUnit, pGEDevDesc); |
| /* Draw the specified text at location (x,y) with the specified |
| * rotation and justification: */ |
| void GText(double, double, int, const char *, cetype_t, double, double, double, |
| pGEDevDesc); |
| |
| /* From plotmath.c, used in plot.c */ |
| void GMathText(double, double, int, SEXP, double, double, double, pGEDevDesc); |
| void GMMathText(SEXP, int, double, int, double, int, double, pGEDevDesc); |
| |
| |
| /*------------------------------------------------------------------- |
| * |
| * GRAPHICAL UTILITIES are functions that produce graphical output |
| * using the graphical primitives (i.e., they are generic - NOT |
| * device-specific). |
| * |
| * From graphics.c, used in plot.c. |
| */ |
| |
| /* Draw a line from (x1,y1) to (x2,y2) with an arrow head |
| * at either or both ends. */ |
| void GArrow(double, double, double, double, int, double, double, int, pGEDevDesc); |
| /* Draw a box around specified region: |
| * 1=plot region, 2=figure region, 3=inner region, 4=device. */ |
| void GBox(int, pGEDevDesc); |
| /* Return a "nice" min, max and number of intervals for a given |
| * range on a linear or _log_ scale, respectively: */ |
| void GPretty(double*, double*, int*); /* used in plot3d.c */ |
| /* Draw text in margins. */ |
| void GMtext(const char *, cetype_t, int, double, int, double, int, double, pGEDevDesc); |
| /* Draw one of the predefined symbols (circle, square, diamond, ...) */ |
| void GSymbol(double, double, int, int, pGEDevDesc); |
| |
| /* From plotmath.c, used in plot.c */ |
| double GExpressionHeight(SEXP, GUnit, pGEDevDesc); |
| double GExpressionWidth(SEXP, GUnit, pGEDevDesc); |
| |
| |
| |
| /*---------------------------------------------------------------------- |
| * |
| * TRANSFORMATIONS are concerned with converting locations between |
| * coordinate systems and dimensions between different units. |
| * |
| * From graphics.c, used in par.c, plot.c, plot3d.c |
| */ |
| |
| /* Convert an R unit (e.g., "user") into an internal unit (e.g., USER)> */ |
| GUnit GMapUnits(int); |
| /* Convert a LOCATION from one coordinate system to another: */ |
| void GConvert(double*, double*, GUnit, GUnit, pGEDevDesc); |
| double GConvertX(double, GUnit, GUnit, pGEDevDesc); |
| double GConvertY(double, GUnit, GUnit, pGEDevDesc); |
| /* Convert an x/y-dimension from one set of units to another: */ |
| double GConvertXUnits(double, GUnit, GUnit, pGEDevDesc); |
| double GConvertYUnits(double, GUnit, GUnit, pGEDevDesc); |
| |
| /* Set up the different regions on a device (i.e., inner region, |
| * figure region, plot region) and transformations for associated |
| * coordinate systems (called whenever anything that affects the |
| * coordinate transformations changes): |
| */ |
| void GReset(pGEDevDesc); |
| |
| /* Set up the user coordinate transformations: */ |
| void GMapWin2Fig(pGEDevDesc); |
| /* Set up the device for a new plot by Resetting graphics parameters |
| * and Resetting the regions and coordinate Systems */ |
| pGEDevDesc GNewPlot(Rboolean); |
| /* Set up the user coordinates based on the axis limits */ |
| void GScale(double, double, int, pGEDevDesc); |
| /* Set up the axis limits based on the user coordinates */ |
| void GSetupAxis(int, pGEDevDesc); |
| /* Return row and column of current figure in the layout matrix */ |
| void currentFigureLocation(int*, int*, pGEDevDesc); |
| |
| /* which of these conversions should be public? maybe all? [NO_REMAP] */ |
| double xDevtoNDC(double, pGEDevDesc); |
| double yDevtoNDC(double, pGEDevDesc); |
| double xDevtoNFC(double, pGEDevDesc); |
| double yDevtoNFC(double, pGEDevDesc); |
| double xDevtoNPC(double, pGEDevDesc); |
| double yDevtoNPC(double, pGEDevDesc); |
| double xDevtoUsr(double, pGEDevDesc); |
| double yDevtoUsr(double, pGEDevDesc); |
| double xNPCtoUsr(double, pGEDevDesc); |
| double yNPCtoUsr(double, pGEDevDesc); |
| |
| #endif /* RGRAPHICS_H_ */ |