00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 #ifndef __VIEW_H
00029 #define __VIEW_H
00030 
00031 class ScanEvent;
00032 class ViewControl;
00033 class ProfileControl;
00034 class V3dControl;
00035 
00036 #include "gnome-res.h"
00037 
00038 #include "mem2d.h"
00039 #include "xshmimg.h"
00040 #include <stdlib.h>
00041 
00042 #include <GL/gl.h>
00043 #include <GL/glx.h>
00044 #include <GL/glu.h>
00045 #include <GL/glut.h>
00046 
00047 #define TOPO_BORDER_WIDTH 14
00048 #define TOPO_MINSIZE      400 // Default Wert
00049 
00050 #define NUM_TRACE_VALUES 4
00051 typedef struct{
00052         double x,y,z;
00053         double v[NUM_TRACE_VALUES];
00054         int mode;
00055         clock_t t;
00056 } Trace_Data;
00057 
00058 
00059 
00060 
00061 
00062 
00063 
00064 class View{
00065 public:
00066   View();
00067   View(Scan *sc, int ChNo);
00068   virtual ~View();
00069 
00070   virtual void hide();
00071   virtual int draw(int zoomoverride=FALSE);
00072   virtual int update(int y1, int y2);
00073   virtual void add_object(int type, gpointer data){};
00074   virtual void setup_data_transformation(){};
00075 
00076   virtual void update_mxyz_from_points ();
00077 
00078   virtual void ZoomIn(){};
00079   virtual void ZoomOut(){};
00080   
00081 
00082 
00083   void abs_move_tip(double xa, double ya, int mode=0);
00084   void rel_move_tip(double dxa, double dya, int mode=0);
00085   virtual void show_tip(){};
00086   virtual void hide_tip(){};
00087 
00088   void update_position(Trace_Data *td);
00089   void add_to_trace(Trace_Data *td);
00090   void print_trace();
00091   void save_trace();
00092   void reset_trace();
00093   static void print_td(Trace_Data *td, gpointer data);
00094   static void delete_td(Trace_Data *td, gpointer data) { delete td; };
00095   virtual void show_trace(){};
00096   virtual void hide_trace(){};
00097 
00098   virtual void update_trace(){};
00099 
00100   virtual void update_events(){};
00101   virtual void remove_events(){};
00102 
00103   virtual void update_event_info(ScanEvent *se){};
00104 
00105   int ZoomFac;
00106   int QuenchFac;
00107 protected:
00108   Scan *scan;
00109   SCAN_DATA *data;
00110   Mem2d *mem2d;
00111   int ChanNo;
00112   GSList *trace;
00113 private:
00114   Trace_Data current_td;
00115   clock_t trace_t0;
00116 };
00117 
00118 
00119 
00120 
00121 
00122 
00123 
00124 
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 
00136 
00137 
00138 
00139 
00140 
00141 
00142 class Grey2D : public View{
00143 public:
00144   Grey2D();
00145   Grey2D(Scan *sc, int ChNo);
00146   virtual ~Grey2D();
00147 
00148   virtual void hide();
00149   virtual int draw(int zoomoverride=FALSE);
00150   virtual int update(int y1, int y2);
00151   virtual void add_object(int type, gpointer data);
00152   virtual void setup_data_transformation();
00153   static int SetZF(int zf, int qf, Grey2D *p);
00154 
00155   virtual void ZoomIn();
00156   virtual void ZoomOut();
00157 
00158 
00159   virtual void show_tip();
00160   virtual void hide_tip();
00161 
00162   virtual void show_trace();
00163   virtual void hide_trace();
00164 
00165   virtual void update_trace();
00166 
00167   virtual void update_events();
00168   virtual void remove_events();
00169 
00170   virtual void update_event_info(ScanEvent* se);
00171 
00172 private:  
00173   int  MaxColor;
00174   int  XPM_x, XPM_y;
00175   int  oXPMx,oXPMy,oZ,oQ,oMC; 
00176   int  oVm;
00177   int  userzoom;
00178                          
00179   ViewControl *viewcontrol;
00180   ShmImage2D *XImg;
00181 };
00182 
00183 
00184 class Profiles  : public View{
00185 public:
00186   Profiles();
00187   Profiles(Scan *sc, int ChNo);
00188   virtual ~Profiles();
00189 
00190   virtual void hide();
00191   virtual int draw(int zoomoverride=FALSE);
00192   virtual int update(int y1, int y2);
00193   virtual void ZoomIn(){};
00194   virtual void ZoomOut(){};
00195 
00196 private:  
00197   ProfileControl *profile;
00198 };
00199 
00200 
00201 typedef struct{
00202         float trans[3];
00203         float rot[3];
00204         float fov;
00205         float dist;
00206         float Zfar;
00207         float Znear;
00208 
00209         float hskl;
00210 
00211         float light_global_ambient[4];
00212         gchar light[3][8];
00213         float light_position[3][4];
00214         float light_ambient[3][4];
00215         float light_specular[3][4];
00216         float light_diffuse[3][4];
00217         int   light_spot[3];    
00218         float light_spot_direction[3][3];
00219         float light_spot_cutoff[3];
00220         float light_spot_exponent[3];
00221 
00222         float surf_mat_color[4];
00223         float surf_mat_ambient[4];
00224         float surf_mat_specular[4];
00225         float surf_mat_diffuse[4];
00226         float surf_mat_shininess[1];
00227 
00228         float box_mat_color[4];
00229         float box_mat_ambient[4];
00230         float box_mat_specular[4];
00231         float box_mat_diffuse[4];
00232         float box_mat_shininess[1];
00233 
00234         int Fog;
00235         float fog_color[4];
00236         float fog_density;
00237 
00238         float clear_color[4];
00239 
00240         int Texture;
00241         int Mesh;
00242         int Cull;
00243         int Smooth;
00244         int Ortho;
00245         int Ticks;
00246         
00247         float preV;
00248 
00249         gchar ColorMode[20];
00250         gchar ColorSrc[20];     
00251 
00252         float ColorContrast, ColorOffset, ColorSat;
00253 
00254         int ZeroPlane;
00255         int InstantUpdate;
00256 
00257 } Surf3d_GLview_data;
00258 
00259 class Surf3d  : public View{
00260 public:
00261   Surf3d();
00262   Surf3d(Scan *sc, int ChNo);
00263   virtual ~Surf3d();
00264 
00265   virtual void hide();
00266   virtual int draw(int zoomoverride=FALSE);
00267   virtual int update(int y1, int y2);
00268   virtual void ZoomIn(){};
00269   virtual void ZoomOut(){};
00270   virtual void setup_data_transformation();
00271 
00272   gboolean GLdrawscene(int y_to_update=-1, int refresh_all=FALSE);
00273   gboolean reshape(GtkWidget *widget, GdkEventConfigure *event);
00274   static void GLupdate(void* data);
00275 
00276   void Rotate(int n, double dphi);
00277   void RotateAbs(int n, double phi);
00278   double RotateX(double dphi);
00279   double RotateY(double dphi);
00280   double RotateZ(double dphi);
00281 
00282   void Translate(int n, double delta);
00283   double Zoom(double x);
00284   double HeightSkl(double x);
00285 
00286   void ColorSrc();
00287   void GLModes(int n, int m);
00288 
00289   void preferences();
00290 
00291 private: 
00292   void PutPointMode(int k, int j);
00293   void ReadPalette(char *name);
00294 
00295   int   XPM_x, XPM_y;
00296   Mem2d *mem2d_x;
00297 
00298   GnomeResPreferences *v3dControl_pref_dlg;
00299   GnomeResEntryInfoType *v3dControl_pref_def;
00300 
00301   void GLvarinit ();
00302   int  GetSmem ();
00303   int  DelSmem ();
00304   void GLdrawsurface (int y_to_update=-1, int refresh_all=FALSE);
00305   void GLdrawGimmicks ();
00306   void printstring (void *font, char *string);
00307   void calccolor (GLfloat height, GLfloat c[3]);
00308 
00309   GLfloat *surface;
00310   GLfloat **surfacecolor;
00311   GLubyte *surfacepic;
00312   GLuint glZeroFrameList, glSurfaceList, glSurfaceListRange;
00313   GLfloat ColorLookup[1024][3];
00314 
00315   int valid;
00316   unsigned long size;
00317 
00318   int scrwidth;
00319   int scrheight;
00320 
00321  public:
00322   int GL_realized;
00323   Surf3d_GLview_data GLv_data;
00324 
00325  private:
00326   V3dControl *v3dcontrol;
00327 };
00328 
00329 #endif
00330 
00331 
00332