// // File: glmesh.h // // (C) 2000-2006 Helmut Cantzler // // Licensed under the terms of the Lesser General Public License. // #ifndef _GLMESH_H #define _GLMESH_H #include #include #include "mesh.h" #include "texture.h" enum display_type {VERTICES=0, EDGES, TEXTURE, SOLID, WIRE, FRONTLINES, FEATURES, SELECT, NOTHING}; class CoordinatesWindow; class GLMesh_Settings { public: GLMesh_Settings(); void init(void); void clear(void); void clearFeatures(void); void resetViewpoint(); void setViewpoint(GLMesh_Settings &s); Mesh *mesh, *features; // Viewpoint data (Trackball, Translation, Zoom, Clipping) GLfloat tb_transform[4][4]; GLfloat xShift, yShift, zShift; GLfloat clipping; int pick_x, pick_y; float pick_size_x, pick_size_y; CoordinatesWindow *pick; // Viewmode enum display_type mesh_displayMode, features_displayMode; // Light intensity GLfloat light_brightness, point_size, line_size; // Background colour GLfloat red, green, blue; // Flags int f_normals, f_different_colors_for_shapes, f_features, f_keep_pick; int f_texture_filter, f_back_faces, f_lighting, f_aspect_ratio; }; class GLMesh : public QGLWidget { Q_OBJECT public: GLMesh(QWidget *parent, GLMesh_Settings *s); ~GLMesh(); void newMesh(void); void newFeatures(void); void resetViewpoint(void); void setViewpoint(GLMesh_Settings &vp); void setPick(bool state, CoordinatesWindow *cw); void setPick(bool state); float getFps(void); void setShapeTexture(int i); void setKeepPick(int k); void clearSelection(void); public slots: void setDisplayMode(QAction *a); void setLightIntensity(int l); void setPointSize(int l); void setLineSize(int l); void setClipping(int c); void setLight(bool l); void setShapeColors(bool sc); void setNormals(bool n); void setBackFaces(bool bf); void setTextureFiltering(bool tf); void setFeatures(bool f); void setAspectRatio(bool a); void setBackgroundColor(QColor c); protected: void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); void initializeGL(); void paintGL(); void resizeGL(int width, int height); private: QWidget *parent; enum action_type {NONE, TRANSLATE, ROTATE, ZOOM}; enum COLOR {BLACK=0, BLUE, GREEN, RED, YELLOW, PURPLE, CYAN, WHITE}; void pickObject(int x, int y); void setMaterialColor(GLenum face, GLenum pname, int color); void setMaterialColorGrey(GLenum face, GLenum pname, int b); void checkForTraps(const char *string, int value); void tbPointToVector(int x, int y, float v[3]); void initMesh(void); void initFeatures(void); void initLighting(void); void initTexture(void); void displayNormals(void); void displayPoints(list *vertices); void displayEdges(list *edges); void displayFeatures(void); void displayShapePoints(void); void displayMesh(void); void displayMeshWithStencil(void); void displayPickObjects(void); GLMesh_Settings *settings; float fps, surface_normal_length; int number_of_shapes; // Texture GLuint *textureList; // Trackball data GLfloat tb_lastposition[3], tb_axis[3]; enum action_type actionMode; int lastMouseX, lastMouseY; }; #endif