| [1844] | 1 | /* GNUPLOT - graph3d.h */ | 
|---|
|  | 2 |  | 
|---|
|  | 3 | /*[ | 
|---|
|  | 4 | * Copyright 1999   Thomas Williams, Colin Kelley | 
|---|
|  | 5 | * | 
|---|
|  | 6 | * Permission to use, copy, and distribute this software and its | 
|---|
|  | 7 | * documentation for any purpose with or without fee is hereby granted, | 
|---|
|  | 8 | * provided that the above copyright notice appear in all copies and | 
|---|
|  | 9 | * that both that copyright notice and this permission notice appear | 
|---|
|  | 10 | * in supporting documentation. | 
|---|
|  | 11 | * | 
|---|
|  | 12 | * Permission to modify the software is granted, but not the right to | 
|---|
|  | 13 | * distribute the complete modified source code.  Modifications are to | 
|---|
|  | 14 | * be distributed as patches to the released version.  Permission to | 
|---|
|  | 15 | * distribute binaries produced by compiling modified sources is granted, | 
|---|
|  | 16 | * provided you | 
|---|
|  | 17 | *   1. distribute the corresponding source modifications from the | 
|---|
|  | 18 | *    released version in the form of a patch file along with the binaries, | 
|---|
|  | 19 | *   2. add special version identification to distinguish your version | 
|---|
|  | 20 | *    in addition to the base release version number, | 
|---|
|  | 21 | *   3. provide your name and address as the primary contact for the | 
|---|
|  | 22 | *    support of your modified version, and | 
|---|
|  | 23 | *   4. retain our contact information in regard to use of the base | 
|---|
|  | 24 | *    software. | 
|---|
|  | 25 | * Permission to distribute the released version of the source code along | 
|---|
|  | 26 | * with corresponding source modifications in the form of a patch file is | 
|---|
|  | 27 | * granted with same provisions 2 through 4 for binary distributions. | 
|---|
|  | 28 | * | 
|---|
|  | 29 | * This software is provided "as is" without express or implied warranty | 
|---|
|  | 30 | * to the extent permitted by applicable law. | 
|---|
|  | 31 | ]*/ | 
|---|
|  | 32 |  | 
|---|
|  | 33 | #ifndef GNUPLOT_GRAPH3D_H | 
|---|
|  | 34 | # define GNUPLOT_GRAPH3D_H | 
|---|
|  | 35 |  | 
|---|
|  | 36 | /* #if... / #include / #define collection: */ | 
|---|
|  | 37 |  | 
|---|
|  | 38 | /*** | 
|---|
|  | 39 | #include "syscfg.h" | 
|---|
|  | 40 |  | 
|---|
|  | 41 | #include "gadgets.h" | 
|---|
|  | 42 | #include "term_api.h" | 
|---|
|  | 43 | ****/ | 
|---|
|  | 44 |  | 
|---|
|  | 45 | #include <stdio.h> | 
|---|
|  | 46 | #include <stdlib.h> | 
|---|
|  | 47 | #include "gp_types.h" | 
|---|
|  | 48 | #include "gpc_misc.h" | 
|---|
|  | 49 | /* Function macros to map from user 3D space into normalized -1..1 */ | 
|---|
|  | 50 | #define map_x3d(x) ((x-X_AXIS.min)*xscale3d-1.0) | 
|---|
|  | 51 | #define map_y3d(y) ((y-Y_AXIS.min)*yscale3d-1.0) | 
|---|
|  | 52 | #define map_z3d(z) ((z-floor_z)*zscale3d-1.0) | 
|---|
|  | 53 |  | 
|---|
|  | 54 | /* Type definitions */ | 
|---|
|  | 55 |  | 
|---|
|  | 56 | typedef enum en_contour_placement { | 
|---|
|  | 57 | /* Where to place contour maps if at all. */ | 
|---|
|  | 58 | CONTOUR_NONE, | 
|---|
|  | 59 | CONTOUR_BASE, | 
|---|
|  | 60 | CONTOUR_SRF, | 
|---|
|  | 61 | CONTOUR_BOTH | 
|---|
|  | 62 | } t_contour_placement; | 
|---|
|  | 63 |  | 
|---|
|  | 64 | typedef double transform_matrix[4][4]; /* HBB 990826: added */ | 
|---|
|  | 65 |  | 
|---|
|  | 66 | typedef struct gnuplot_contours { | 
|---|
|  | 67 | struct gnuplot_contours *next; | 
|---|
|  | 68 | struct coordinate *coords; | 
|---|
|  | 69 | char isNewLevel; | 
|---|
|  | 70 | char label[32]; | 
|---|
|  | 71 | int num_pts; | 
|---|
|  | 72 | #ifdef PM3D | 
|---|
|  | 73 | double z; | 
|---|
|  | 74 | #endif | 
|---|
|  | 75 | } gnuplot_contours; | 
|---|
|  | 76 |  | 
|---|
|  | 77 | typedef struct iso_curve { | 
|---|
|  | 78 | struct iso_curve *next; | 
|---|
|  | 79 | int p_max;                  /* how many points are allocated */ | 
|---|
|  | 80 | int p_count;                        /* count of points in points */ | 
|---|
|  | 81 | struct coordinate  *points; | 
|---|
|  | 82 | } iso_curve; | 
|---|
|  | 83 |  | 
|---|
|  | 84 | typedef struct surface_points { | 
|---|
|  | 85 | struct surface_points *next_sp; /* linked list */ | 
|---|
|  | 86 | int token;                  /* last token nr, for second pass */ | 
|---|
|  | 87 | enum PLOT_TYPE plot_type; | 
|---|
|  | 88 | enum PLOT_STYLE plot_style; | 
|---|
|  | 89 | char *title; | 
|---|
|  | 90 | int title_no_enhanced;      /* don't typeset title in enhanced mode */ | 
|---|
|  | 91 | /*struct lp_style_type lp_properties;*/ | 
|---|
|  | 92 | int has_grid_topology; | 
|---|
|  | 93 |  | 
|---|
|  | 94 | /* Data files only - num of isolines read from file. For | 
|---|
|  | 95 | * functions, num_iso_read is the number of 'primary' isolines (in | 
|---|
|  | 96 | * x direction) */ | 
|---|
|  | 97 | int num_iso_read; | 
|---|
|  | 98 | struct gnuplot_contours *contours; /* NULL if not doing contours. */ | 
|---|
|  | 99 | struct iso_curve *iso_crvs; /* the actual data */ | 
|---|
|  | 100 |  | 
|---|
|  | 101 | #ifdef PM3D_COLUMN | 
|---|
|  | 102 | int pm3d_color_from_column; | 
|---|
|  | 103 | coordval color_min; | 
|---|
|  | 104 | coordval color_max; | 
|---|
|  | 105 | #endif | 
|---|
|  | 106 |  | 
|---|
|  | 107 | } surface_points; | 
|---|
|  | 108 |  | 
|---|
|  | 109 | /* Variables of graph3d.c needed by other modules: */ | 
|---|
|  | 110 |  | 
|---|
|  | 111 | extern int xmiddle, ymiddle, xscaler, yscaler; | 
|---|
|  | 112 | extern double floor_z; | 
|---|
|  | 113 | extern double ceiling_z, base_z; /* made exportable for PM3D */ | 
|---|
|  | 114 | extern transform_matrix trans_mat; | 
|---|
|  | 115 | extern double xscale3d, yscale3d, zscale3d; | 
|---|
|  | 116 |  | 
|---|
|  | 117 | extern t_contour_placement draw_contour; | 
|---|
|  | 118 | extern TBOOLEAN label_contours; | 
|---|
|  | 119 |  | 
|---|
|  | 120 | extern TBOOLEAN draw_surface; | 
|---|
|  | 121 |  | 
|---|
|  | 122 | /* is hidden3d display wanted? */ | 
|---|
|  | 123 | extern TBOOLEAN hidden3d; | 
|---|
|  | 124 |  | 
|---|
|  | 125 | extern float surface_rot_z; | 
|---|
|  | 126 | extern float surface_rot_x; | 
|---|
|  | 127 | extern float surface_scale; | 
|---|
|  | 128 | extern float surface_zscale; | 
|---|
|  | 129 |  | 
|---|
|  | 130 | extern float ticslevel; | 
|---|
|  | 131 |  | 
|---|
|  | 132 | #define ISO_SAMPLES 10          /* default number of isolines per splot */ | 
|---|
|  | 133 | extern int iso_samples_1; | 
|---|
|  | 134 | extern int iso_samples_2; | 
|---|
|  | 135 |  | 
|---|
|  | 136 | #ifdef USE_MOUSE | 
|---|
|  | 137 | extern int axis3d_o_x, axis3d_o_y, axis3d_x_dx, axis3d_x_dy, axis3d_y_dx, axis3d_y_dy; | 
|---|
|  | 138 | #endif | 
|---|
|  | 139 |  | 
|---|
|  | 140 | /* Prototypes from file "graph3d.c" */ | 
|---|
|  | 141 |  | 
|---|
|  | 142 | void do_3dplot (struct surface_points *plots, int pcount, int quick); | 
|---|
|  | 143 | void map3d_position (struct position * pos, unsigned int *x, | 
|---|
|  | 144 | unsigned int *y, const char *what); | 
|---|
|  | 145 |  | 
|---|
|  | 146 |  | 
|---|
|  | 147 | #endif /* GNUPLOT_GRAPH3D_H */ | 
|---|