/*
 * Copyright (C) 1997-2004, R3vis Corporation.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA, or visit http://www.gnu.org/copyleft/lgpl.html.
 *
 * Original Contributor:
 *   Wes Bethel, R3vis Corporation, Marin County, California
 * Additional Contributor(s):
 *
 * The OpenRM project is located at http://openrm.sourceforge.net/.
 */
/*
 * $Id: rmvpub.h,v 1.4 2004/01/17 04:06:42 wes Exp $
 * Version: $Name: OpenRM-1-5-2-RC3 $
 * $Revision: 1.4 $
 * $Log: rmvpub.h,v $
 * Revision 1.4  2004/01/17 04:06:42  wes
 * Updated Copyright line for 2004.
 *
 * Revision 1.3  2003/10/15 05:45:28  wes
 * Added a flipNormals parameter to rmvJ3ComputeMeshNormals,
 * rmvJ3MeshSurface and rmvJ3ScatterPoint
 *
 * Revision 1.2  2003/02/02 02:07:14  wes
 * Updated copyright to 2003.
 *
 * Revision 1.1.1.1  2003/01/28 02:15:23  wes
 * Manual rebuild of rm150 repository.
 *
 * Revision 1.1  2003/01/16 21:53:42  wes
 * Moved rmv*.h files from include/rmv to their new home in include/rm.
 *
 * Revision 1.6  2002/04/30 19:40:54  wes
 * Updated copyright dates.
 *
 * Revision 1.5  2001/03/31 17:14:02  wes
 * v1.4.0-alpha-2 checkin
 *
 * Revision 1.4  2000/12/03 23:20:50  wes
 * Mods to parm list for grid/data funcs for isosurfacing method.
 *
 * Revision 1.3  2000/04/20 17:41:49  wes
 * Minor CVS tag changes.
 *
 * Revision 1.2  2000/04/20 16:30:26  wes
 * Added copyright info.
 *
 * Revision 1.1.1.1  2000/02/28 21:29:40  wes
 * OpenRM 1.2 Checkin
 *
 * Revision 1.1.1.1  2000/02/28 17:18:48  wes
 * Initial entry - pre-RM120 release, source base for OpenRM 1.2.
 *
 */

#ifndef _rmvpub_h
#define _rmvpub_h

/*
 * these affect inter-marker scaling.  "absolute" means make
 * the marker "scale" units wide, by god, in world coordinates.
 * "grid_relative" will cause marker width to be computed as the
 * product of "scale" with the inter-grid spacing at that point,
 * in world coords.
 */
#define RMV_MARKERSPACING_ABSOLUTE	0
#define RMV_MARKERSPACING_RELATIVE	1
#define RMV_SCALE_ABSOLUTE		0
#define RMV_SCALE_RELATIVE		1

/* these markers are implemented as actual geometry */
#define RMV_2DMARKER_SQUARE 			0
#define RMV_2DMARKER_CROSS  			1
#define RMV_2DMARKER_X      			2
#define RMV_2DMARKER_NORTHTRIANGLE		3
#define RMV_2DMARKER_BOWTIE 			4
#define RMV_2DMARKER_SOUTHTRIANGLE 		5
#define RMV_2DMARKER_DIAMOND 			6
#define RMV_2DMARKER_NORTHTRIANGLE_FILLED 	7

/* these markers are implemented using the zapf-dingbat font in conjunction with the RM_TEXTCHARS primitive */
#define RMV_ZAPFMARKER_STAR_FILLED         0x048
#define RMV_ZAPFMARKER_STAR_UNFILLED       0x049
#define RMV_ZAPFMARKER_ASTERIX_FILLED      0x051
#define RMV_ZAPFMARKER_ASTERIX_UNFILLED    0x052
#define RMV_ZAPFMARKER_CIRCLE_FILLED       0x06c
#define RMV_ZAPFMARKER_CIRCLE_UNFILLED     0x06d
#define RMV_ZAPFMARKER_SQUARE_FILLED       0x06e
#define RMV_ZAPFMARKER_SQUARE_UNFILLED     0x06f
#define RMV_ZAPFMARKER_UPTRIANGLE_FILLED   0x073
#define RMV_ZAPFMARKER_DOWNTRIANGLE_FILLED 0x074
#define RMV_ZAPFMARKER_CLUBS_FILLED        0x0a8
#define RMV_ZAPFMARKER_DIAMONDS_FILLED     0x0a9
#define RMV_ZAPFMARKER_HEARTS_FILLED       0x0aa
#define RMV_ZAPFMARKER_SPADES_FILLED       0x0ab

/* axes masks */
#define RMV_NOAXIS_OFFSET	0
#define RMV_XAXIS_OFFSET  	1
#define RMV_YAXIS_OFFSET  	2
#define RMV_ZAXIS_OFFSET  	4

/* gridding methods */
#define RMV_GRID2D_BIVARIATE 	0
#define RMV_GRID2D_IDSFFT    	1
#define RMV_GRID2D_KRIGE     	2

/* 2D vis routine defines */
#define RMV_2D_MESH_SURFACE		0
#define RMV_2D_UWIRE			1
#define RMV_2D_VWIRE         		2
#define RMV_2D_IMPULSE       		3
#define RMV_2D_BAR           		4
#define RMV_2D_BAROUTLINE    		5
#define RMV_2D_UHORIZON      		6
#define RMV_2D_VHORIZON      		7
#define RMV_2D_SWIREBOX      		8
#define RMV_2D_SSPHERE       		9
#define RMV_2D_UHORIZON_OUTLINE 	10
#define RMV_2D_VHORIZON_OUTLINE 	11
#define RMV_2D_MESH_SURFACE_OUTLINE 	12
#define RMV_2D_SBOX          		13
#define RMV_2D_SPOINT        		14

#define RMV_2D_MESHVECTOR_BARBS		0
#define RMV_2D_MESHVECTOR_ARROWS 	1
#define RMV_2D_MESHVECTOR_CONES		2

#define RMV_NO_SCALE     		0
#define RMV_LINEAR_SCALE 		1
#define RMV_LOG10_SCALE  		2

#ifdef __cplusplus
extern "C" {
#endif

/* rmvcontour.c: contour generation [1] */
RM_EXPORT_API  void   rmvJ3SliceContour PROTO(( RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), int axis_offset_enum, int usize, int vsize, int nlevels, float *levels, RMcolor4D *color_list, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *node));

/* rmverrplot.c: error bar plotting [1] */
RM_EXPORT_API  RMenum rmvI2ErrorPlot PROTO((RMvertex2D (*appgridfunc)(int i), float (*appu1func)(int i), float (*appu2func)(int i), float (*appl1func)(int i), float (*appl2func)(int i), float (*appdata2func)(int i), RMvisMap *vmap, int axis_offset_enum, int npts, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *n));

/* rmvgrid2d.c: 2D grid routines [1] */
RM_EXPORT_API  void rmv2DSurfaceFit PROTO((float *x, float *y, float *d, int npts, RMvertex2D *omin, RMvertex2D *omax, int usize, int vsize, int method, float tweak, float *newdata));

/* rmviso.c: isosurfacing {w = f(x,y,z)} routines [1] */
RM_EXPORT_API  RMenum rmvK3MarchingCubes (RMvertex3D (*appgridfunc)(int i, int j, int k, int isize, int jsize, int ksize, float *baseX, float *baseY, float *baseZ), float (*appdatafunc)(int i, int j, int k, int isize, int jsize, int ksize, float *baseData), float (*appdata2func)(int i, int j, int k, int isize, int jsize, int ksize, float *baseData), const RMvisMap *vmap, int iusize, int ivsize, int iwsize, float isolevel, RMnode *output, float *baseX, float *baseY, float *baseZ, float *baseData);

/* rmvmesh.c: 3D scalar visualization [18] */
RM_EXPORT_API  RMenum rmvJ3ComputeMeshNormals PROTO((RMvertex3D *v, RMvertex3D *normals, int usize, int vsize, RMenum flipNormalsBool));
RM_EXPORT_API  RMenum rmv3DRuledBox (RMvertex3D *grid_min, RMvertex3D *grid_max, int iusize, int ivsize, int iwsize, RMenum linewidth, RMenum linestyle, RMenum backface_cull_enable, RMnode *output);
RM_EXPORT_API  RMenum rmvJ3Bar PROTO((RMvertex3D (*appgridfunc)(int i, int j),float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int iusize, int ivsize, float shrink, int scalingEnum, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3BarOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j),float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int iusize, int ivsize, float shrink, int scalingEnum, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3Impulse PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshUOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum linewidth, RMenum linestyle, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshUHorizon PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, float zerocrossing, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshUHorizonOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum linewidth, RMenum linestyle, float zeroval, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshVOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), float (*appdata2func)(int i, int j),RMvisMap *map, int axis_offset_enum, int usize, int vsize, RMenum linewidth, RMenum linestyle, RMnode *n));
RM_EXPORT_API  RMenum rmvJ3MeshVHorizon PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, float zerocrossing, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshVHorizonOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum linewidth, RMenum linestyle, float zerocrossing, RMnode *node));
RM_EXPORT_API  RMenum rmvJ3MeshOutline PROTO((RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum linewidth, RMenum linestyle, RMnode *n));
RM_EXPORT_API  RMenum rmvJ3MeshSurface (RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j),float (*appdata2func)(int i, int j), RMvisMap *vmap, int axis_offset_enum, int usize, int vsize, RMenum flipNormalsEnum, RMnode *return_node);
RM_EXPORT_API  RMenum rmvJ3ScatterPoint (RMvertex3D (*appgridfunc)(int i, int j), float (*appdatafunc)(int i, int j), float (*appdata2func)(int i, int j), RMvisMap *map, int axis_offset_enum, int usize, int vsize, RMenum do_normals, RMenum flipNormalsBool, RMnode *n);
RM_EXPORT_API  RMenum rmvI3ScatterCube PROTO((RMvertex3D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *vmap, int axis_offset_enum, int npts, float shrink, RMnode *node));
RM_EXPORT_API  RMenum rmvI3ScatterWireCube PROTO((RMvertex3D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float scale, RMenum linewidth, RMenum linestyle, RMnode *n));
RM_EXPORT_API  RMenum rmvI3ScatterSphere PROTO((RMvertex3D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npoints, float scale, RMnode *n));
RM_EXPORT_API  RMenum rmvI3ScatterGlyph (RMvertex3D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *vmap, int axis_offset_enum, int npts, RMenum size_enum, RMenum marker_enum, RMnode *n);

/* rmvmeshv.c: 3D vector visualization routines [3] */
RM_EXPORT_API  RMenum rmvI3VectorArrows (RMvertex3D (*gridfunc)(int i), float (*datafunc)(int i), float (*data2func)(int i), RMvertex3D (*vectordata)(int i), RMvisMap *map, int axis_offset_enum, int npoints, float scale_value, int scale_type, RMenum linewidth, RMenum linestyle, RMnode *result);
RM_EXPORT_API  RMenum rmvI3VectorBarbs (RMvertex3D (*gridfunc)(int i), float (*datafunc)(int i), float (*data2func)(int i), RMvertex3D (*vectordata)(int i), RMvisMap *map, int axis_offset_enum, int npoints, float scale_value, RMenum scale_type, RMenum linewidth, RMenum linestyle, RMnode *result);
RM_EXPORT_API  RMenum rmvI3VectorCones (RMvertex3D (*gridfunc)(int i), float (*datafunc)(int i), float (*data2func)(int i), RMvertex3D (*vectordata)(int i), RMvisMap *map, int axis_offset_enum, int npoints, float scale_value, RMenum scale_type, RMenum linewidth, RMenum linestyle, RMnode *result);

/* rmvsignal.c: 2D scalar visualization [9] */
RM_EXPORT_API  RMenum rmvI2AreaFill PROTO((RMvertex2D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float zeroval, RMnode *n));
RM_EXPORT_API  RMenum rmvI2AreaOutline PROTO((RMvertex2D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float zerocrossing, RMenum linewidth_enum, RMenum linestyle_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2BarFilled PROTO((RMvertex2D (*appgridfunc)(int i),float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float scale, int scaling_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2BarOutline PROTO((RMvertex2D (*appgridfunc)(int i),float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float scale, int scaling_enum, RMenum linewidth, RMenum linestyle, RMnode *n));
RM_EXPORT_API  RMenum rmvI2Impulse PROTO((RMvertex2D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npoints, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2Polyline PROTO((RMvertex2D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npoints, RMenum lineWidthEnum, RMenum linestyle_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2ScatterGeom PROTO((RMvertex2D (*appgridfunc)(int i),float (*appdatafunc)(int i),float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float scale, int scaling_enum, int marker_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2ScatterGlyph PROTO((RMvertex2D (*appgridfunc)(int i),float (*appdatafunc)(int i),float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, int size_enum, int marker_enum, RMnode *n));
RM_EXPORT_API  RMenum rmvI2Step PROTO((RMvertex2D (*appgridfunc)(int i), float (*appdatafunc)(int i), float (*appdata2func)(int i), RMvisMap *map, int axis_offset_enum, int npts, float zerocrossing, RMenum linewidth, RMenum linestyle, RMnode *n));

/* rvutil.c: level of detail stuff [3] */
RM_EXPORT_API  void   rmvLOD1Reducer PROTO((RMnode *n));
RM_EXPORT_API  void   rmvLOD1MeshReducer PROTO((float *xcoords, float *ycoords, float *zcoords, float *data, float  *data2, RMvisMap *vmap, int axis_offset_enum, int mesh_dims[2], RMnode *n));
RM_EXPORT_API  void   rmvLOD2MeshReducer PROTO((RMvertex3D *bmin, RMvertex3D *bmax, RMnode *n));

#ifdef __cplusplus
}
#endif

#endif /* _rmvpub_h */
/* EOF */
