00001 #ifndef _RWC_3DPLOT_HEADER_
00002 #define _RWC_3DPLOT_HEADER_
00003
00004 #define MEM_3DLINE_TYPE 601
00005 #define MEM_3DTRIANGLE_TYPE 602
00006
00007 typedef struct {
00008 int type ;
00009 char r,g,b,a ;
00010 float x1,y1,z1 , x2,y2,z2 , thick ;
00011 } MEM_3dline ;
00012
00013 typedef struct {
00014 int type ;
00015 char r,g,b,a ;
00016 float x1,y1,z1 , x2,y2,z2 , x3,y3,z3 ;
00017 } MEM_3dtriangle ;
00018
00019 typedef union {
00020 int type ;
00021 MEM_3dline line ;
00022 MEM_3dtriangle triangle ;
00023 } MEM_3dobject ;
00024
00025 typedef struct {
00026 int nobj , nobj_all ;
00027 MEM_3dobject * obj ;
00028 char ident[256] ;
00029 } MEM_3dplotdata ;
00030
00031
00032
00033 #define INC_MEMPLOT3D 64
00034 #define EXP_MEMPLOT3D 1.1
00035
00036 #define MEMPLOT3D_INIT(name,id) \
00037 do{ (name) = (MEM_3dplotdata *) malloc(sizeof(MEM_3dplotdata)) ; \
00038 (name)->nobj = 0 ; \
00039 (name)->nobj_all = INC_MEMPLOT3D ; \
00040 (name)->obj = (MEM_3dobject *) malloc(sizeof(MEM_3dobject)*INC_MEMPLOT3D); \
00041 strncpy( (name)->ident, (id), 255 ) ; (name)->ident[255] = '\0' ; \
00042 } while(0)
00043
00044 #define MEMPLOT3D_ADDLINE(name,xx1,yy1,zz1,xx2,yy2,zz2,th,rr,gg,bb,aa) \
00045 do{ int nn ; MEM_3dline * ll ; \
00046 if( (name)->nobj == (name)->nobj_all ){ \
00047 nn = (name)->nobj_all = EXP_MEMPLOT3D*(name)->nobj_all + INC_MEMPLOT3D; \
00048 (name)->obj = (MEM_3dobject *) realloc((name)->obj,sizeof(MEM_3dobject)*nn); \
00049 } \
00050 nn = (name)->nobj ; \
00051 ll = (MEM_3dline *)( (name)->obj + nn ) ; \
00052 ll->type = MEM_3DLINE_TYPE ; \
00053 ll->x1 = (xx1) ; ll->y1 = (yy1) ; ll->z1 = (zz1) ; \
00054 ll->x2 = (xx2) ; ll->y2 = (yy2) ; ll->z2 = (zz2) ; ll->thick = (th) ; \
00055 ll->r = (rr) ; ll->g = (gg) ; ll->b = (bb) ; ll->a = (aa) ; \
00056 } while(0)
00057
00058 #define MEMPLOT3D_ADDTRIANGLE(name,xx1,yy1,zz1,xx2,yy2,zz2,xx3,yy3,zz3,th,rr,gg,bb,aa) \
00059 do{ int nn ; MEM_3dtriangle * ll ; \
00060 if( (name)->nobj == (name)->nobj_all ){ \
00061 nn = (name)->nobj_all = EXP_MEMPLOT3D*(name)->nobj_all + INC_MEMPLOT3D; \
00062 (name)->obj = (MEM_3dobject *) realloc((name)->obj,sizeof(MEM_3dobject)*nn); \
00063 } \
00064 nn = (name)->nobj ; \
00065 ll = (MEM_3dtriangle *)( (name)->obj + nn ) ; \
00066 ll->type = MEM_3DTRIANGE_TYPE ; \
00067 ll->x1 = (xx1) ; ll->y1 = (yy1) ; ll->z1 = (zz1) ; \
00068 ll->x2 = (xx2) ; ll->y2 = (yy2) ; ll->z2 = (zz2) ; \
00069 ll->x3 = (xx3) ; ll->y3 = (yy3) ; ll->z3 = (zz3) ; \
00070 ll->r = (rr) ; ll->g = (gg) ; ll->b = (bb) ; ll->a = (aa) ; \
00071 } while(0)
00072
00073 #define MEMPLOT3D_DESTROY(name) \
00074 do{ if( (name) != NULL ){ \
00075 if( (name)->obj != NULL ) free( (name)->obj ) ; \
00076 free( (name) ) ; (name) = NULL ; } \
00077 } while(0)
00078
00079 #define MEMPLOT3D_NOBJ(name) ((name)->nobj)
00080 #define MEMPLOT3D_IDENT(name) ((name)->ident)
00081 #define MEMPLOT3D_NAME MEMPLOT3D_IDENT
00082
00083
00084
00085 extern MEM_plotdata * find_memplot( char * ) ;
00086 extern int create_memplot( char * , float ) ;
00087 extern int set_active_memplot( char * ) ;
00088 extern MEM_plotdata * get_active_memplot(void) ;
00089 extern void delete_active_memplot(void) ;
00090 extern void delete_memplot( MEM_plotdata * ) ;
00091 extern void plotline_memplot( float , float , float , float ) ;
00092 extern void set_color_memplot( float , float , float ) ;
00093 extern void set_thick_memplot( float ) ;
00094 extern float get_thick_memplot(void) ;
00095 extern int nline_active_memplot(void) ;
00096 extern void plotrect_memplot( float,float,float,float ) ;
00097
00098 extern MEM_plotdata * copy_memplot( MEM_plotdata * ) ;
00099 extern void append_to_memplot( MEM_plotdata *,MEM_plotdata * ) ;
00100 extern void scale_memplot( float,float,float,float,float,
00101 MEM_plotdata * ) ;
00102
00103
00104
00105 extern void memplot_to_postscript( char * , MEM_plotdata * ) ;
00106
00107 #define memplot_to_ps(fn) memplot_to_postscript( (fn) , get_active_memplot() ) ;
00108
00109
00110
00111 extern unsigned long rgb_to_pixel( unsigned char , unsigned char ,
00112 unsigned char , X11_colordef * ) ;
00113
00114 extern X11_colordef * get_X11_colordef( Display * , Window ) ;
00115
00116 extern void memplot_to_X11_sef( Display * , Window ,
00117 MEM_plotdata * , int,int,int ) ;
00118
00119 extern void set_memplot_X11_box( int,int,int,int ) ;
00120
00121 extern void set_X11_background( Display * , Window ,
00122 unsigned char , unsigned char , unsigned char ) ;
00123
00124 #define memplot_to_X11(d,w) \
00125 memplot_to_X11_sef( (d),(w) , get_active_memplot() , 0,0,0 )
00126
00127 #define memplot_to_X11_free(d,w) \
00128 memplot_to_X11_sef( (d),(w) , get_active_memplot() , 0,0,1 )
00129
00130 typedef struct {
00131 Widget top , dial , wtf , drawing , form ;
00132 int valid ;
00133 MEM_plotdata * mp ;
00134 void * userdata ;
00135 void_func * killfunc ;
00136
00137 #ifdef HAVE_XDBE
00138 int have_xdbe ;
00139 XdbeBackBuffer buf_xdbe ;
00140 #endif
00141 } MEM_topshell_data ;
00142
00143 #define MTD_PLOTDATA(mpcb) ((mpcb)->mp)
00144 #define MTD_KILLFUNC(mpcb) ((mpcb)->killfunc)
00145 #define MTD_VALID(mpcb) ((mpcb)->valid)
00146 #define MTD_USERDATA(mpcb) ((mpcb)->userdata)
00147 #define MTD_remove_killfunc(mpcb) ((mpcb)->killfunc = NULL)
00148
00149 #define MTD_replace_plotdata(mpcb,mpnew) \
00150 do{ delete_memplot((mpcb)->mp) ; (mpcb)->mp = (mpnew) ; } while(0)
00151
00152 extern MEM_topshell_data * memplot_to_topshell(Display *,MEM_plotdata *,void_func *) ;
00153 extern void plotkill_topshell( MEM_topshell_data * ) ;
00154 extern void redraw_topshell( MEM_topshell_data * ) ;
00155
00156 #define memplot_to_shell(d) memplot_to_topshell( (d),get_active_memplot(),1 )
00157
00158
00159
00160 #define TSP_SEPARATE_YBOX 1
00161 #define TSP_SEPARATE_YSCALE 2
00162
00163 extern void plot_ts_lab( Display *,
00164 int,float *, int,float **,
00165 char *,char *,char *,char ** , void_func * ) ;
00166
00167 #define plot_ts(a,b,c,d,e) plot_ts_lab((a),(b),(c),(d),(e),NULL,NULL,NULL,NULL,NULL)
00168
00169 extern MEM_topshell_data * plot_ts_init( Display *, float, float,
00170 int, float, float,
00171 char *, char *, char *, char ** , void_func * ) ;
00172
00173 extern void plot_ts_addto( MEM_topshell_data *, int,float *, int,float ** ) ;
00174
00175 extern MEM_plotdata * plot_ts_mem( int,float *, int,int,float **,
00176 char *,char *,char *,char ** ) ;
00177
00178
00179
00180 extern void zzmpco_( float * , float * , float * ) ;
00181 extern void zzmpli_( float * , float * , float * , float * ) ;
00182
00183
00184
00185 extern void ps_move( int , int ) ;
00186 extern void ps_line( int , int , int , int ) ;
00187 extern void ps_cont( int , int ) ;
00188 extern void ps_point( int , int ) ;
00189 extern void ps_label( char * ) ;
00190 extern void ps_arc( int , int , int , int , int , int ) ;
00191 extern void ps_circle( int , int , int ) ;
00192 extern void ps_erase( void ) ;
00193 extern void ps_linemod( char * ) ;
00194 extern void ps_space( int , int , int , int ) ;
00195 extern int ps_openpl( char * ) ;
00196 extern void ps_closepl( void ) ;
00197 extern void ps_setrgb( float , float , float ) ;
00198 extern void ps_setwidth( float ) ;
00199 extern void ps_rect( int,int,int,int) ;
00200
00201
00202
00203 #include "f2c.h"
00204 #undef complex
00205
00206 extern int color_(integer *ncol);
00207 extern int curve_(real *x, real *y, integer *n);
00208 extern int frame_(void);
00209 extern int frstpt_(real *x, real *y);
00210 extern int labmod_(integer *ifmtx, integer *ifmty, integer *numx, integer *numy, integer *jsizx, integer *jsizy, integer *ixdec, integer *iydec, integer *ixor);
00211 extern int line_(real *x1, real *y1, real *x2, real *y2);
00212 extern int memplt_(real *aspect);
00213 extern int perim_(integer *mbx, integer *mlx, integer *mby, integer *mly);
00214 extern int periml_(integer *mbx, integer *mlx, integer *mby, integer *mly);
00215 extern int perimm_(integer *mbx, integer *mlx, integer *mby, integer *mly, integer *ilab);
00216 extern int phdot_(real *x1, real *y1);
00217 extern int phline_(real *x1, real *y1, real *x2, real *y2);
00218 extern int point_(real *x, real *y);
00219 extern int points_(real *x, real *y, integer *n, integer *ichar, integer *ipen);
00220 extern int pwrit_(real *x, real *y, char *ch, integer *nch, integer *isiz, integer *ior, integer *icent, ftnlen ch_len);
00221 extern int pwritf_(real *x, real *y, char *ch, integer *nch, integer *isiz, integer *ior, integer *icent, ftnlen ch_len);
00222 extern integer lastnb_(char *cline, ftnlen cline_len);
00223 extern int zzstro_(char *ch, integer *nch, integer *nstr, real *xstr, real *ystr, logical *lbstr, ftnlen ch_len);
00224 extern int zzconv_(char *chin, integer *nchin, char *chout, integer *nchout, ftnlen chin_len, ftnlen chout_len);
00225 extern int set_(real *xobj1, real *xobj2, real *yobj1, real *yobj2, real *xsub1, real *xsub2, real *ysub1, real *ysub2, integer *ltype);
00226 extern int setdsh_(integer *nd, real *xld);
00227 extern int setfrm_(real *xobj1, real *xobj2, real *yobj1, real *yobj2);
00228 extern int setlin_(integer *ntype);
00229 extern int setw_(real *x1, real *y1, real *x2, real *y2);
00230 extern int srface_(real *x, real *y, real *z__, integer *m, integer *mx, integer *nx, integer *ny, real *s, real *stereo);
00231 extern int srfpl_(integer *n, real *px, real *py);
00232 extern int clset_(real *z__, integer *mx, integer *nx, integer *ny, real *chi, real *clo, real *cinc, integer *nla, integer *nlm, real *cl, integer *ncl, integer *icnst, integer *ioffp, real *spval, real *bigest);
00233 extern int ctcell_(real *z__, integer *mx, integer *nx, integer *ny, integer *m, integer *i0, integer *j0);
00234 extern int draws_(integer *mx1, integer *my1, integer *mx2, integer *my2, integer *idraw, integer *imark);
00235 extern int setr_(real *xmin, real *xmax, real *ymin, real *ymax, real *zmin, real *zmax, real *r0);
00236 extern int trn32s_(real *x, real *y, real *z__, real *xt, real *yt, real *zt, integer *iflag);
00237 extern int srfabd_(void);
00238 extern int tick4_(integer *lmajx, integer *lminx, integer *lmajy, integer *lminy);
00239 extern int vector_(real *x, real *y);
00240 extern int zzaxxx_(real *x1, real *x2, real *y, integer *iside, integer *ilab);
00241 extern int zzaxyy_(real *x, real *y1, real *y2, integer *iside, integer *ilab);
00242 extern int zzchar_(char *ch, real *xp, real *yp, real *ct, real *st, ftnlen ch_len);
00243 extern int zzclip_(real *x1in, real *y1in, real *x2in, real *y2in);
00244 extern int zzlabl_(real *val, char *cout, integer *nchar, ftnlen cout_len);
00245 extern int zzlgin_(real *xt, real *pwrten, integer *nlog);
00246 extern int zzline_(real *x1, real *y1, real *x2, real *y2);
00247 extern int zzlinx_(real *x1, real *x2, real *y, integer *majrx, real *tmaj, integer *minrx, real *tmin);
00248 extern int zzliny_(real *x, real *y1, real *y2, integer *majry, real *tmaj, integer *minry, real *tmin);
00249 extern int zzlogx_(real *x1, real *x2, real *y, integer *ndec, real *tmaj, real *tmin);
00250 extern int zzlogy_(real *x, real *y1, real *y2, integer *ndec, real *tmaj, real *tmin);
00251 extern int zzperi_(integer *ilab);
00252 extern int zzphph_(real *x1, real *y1, real *x2, real *y2);
00253 extern int zzphys_(real *x, real *y);
00254
00255
00256
00257 extern void plotpak_curve( float * x , float * y , int n ) ;
00258 extern void plotpak_frame(void) ;
00259 extern void plotpak_frstpt( float x , float y ) ;
00260 extern void plotpak_labmod( int jsizx , int jsizy ) ;
00261 extern void plotpak_line( float x1 , float y1 , float x2 , float y2 ) ;
00262 extern void plotpak_perim( int mbx , int mlx , int mby , int mly ) ;
00263 extern void plotpak_periml( int mbx , int mlx , int mby , int mly ) ;
00264 extern void plotpak_perimm( int mbx , int mlx , int mby , int mly , int ilab ) ;
00265 extern void plotpak_phdot( float x1 , float y1 ) ;
00266 extern void plotpak_phline( float x1 , float y1 , float x2 , float y2 ) ;
00267 extern void plotpak_point( float x1 , float y1 ) ;
00268 extern void plotpak_points( float *x , float *y , int n , int ipen ) ;
00269 extern void plotpak_pwrit( float x , float y , char * ch , int isiz , int ior , int icent ) ;
00270 extern void plotpak_pwritf( float x , float y , char * ch , int isiz , int ior , int icent ) ;
00271 extern void plotpak_set( float xo1,float xo2 , float yo1,float yo2 ,
00272 float xs1,float xs2 , float ys1,float ys2 , int code ) ;
00273 extern void plotpak_setdsh( int nd , float * xd ) ;
00274 extern void plotpak_setfrm( float xo1,float xo2 , float yo1,float yo2 ) ;
00275 extern void plotpak_setlin( int code ) ;
00276 extern void plotpak_setw( float xo1,float xo2 , float yo1,float yo2 ) ;
00277 extern void plotpak_tick4( int mx, int lx , int my , int ly ) ;
00278 extern void plotpak_vector( float x , float y ) ;
00279
00280 extern void plotpak_srface( float *, float *, float *, int,int, float,float ) ;
00281
00282 extern void plotpak_getset( float *xo1,float *xo2 , float *yo1,float *yo2 ,
00283 float *xs1,float *xs2 , float *ys1,float *ys2 ) ;
00284
00285
00286
00287 #ifdef PLOTPAK_COMMONS
00288 # define EXT
00289 #else
00290 # define EXT extern
00291 #endif
00292
00293 EXT struct {
00294 real xpgmin, ypgmin, xpgmax, ypgmax, xclbot, yclbot, xcltop, ycltop, xbot,
00295 ybot, xtop, ytop, xmin, ymin, xmax, ymax;
00296 integer ixcoor, iycoor;
00297 real alphxx, betaxx, alphyy, betayy, tmajx, tminx, tmajy, tminy;
00298 integer majrx, minrx, majry, minry, isizx, isizy;
00299 real xphold, yphold;
00300 } zzzplt_;
00301
00302 EXT struct {
00303 real xphmax, yphmax;
00304 integer ixpmax, iypmax;
00305 real xpscal, ypscal;
00306 integer iflip, nplotr;
00307 char cfile[64];
00308 } zzpltr_;
00309
00310 EXT struct {
00311 integer ndash;
00312 real xldash[8], xid;
00313 } zzdash_;
00314
00315 #endif