#ifndef __VEFVIEWER_H__
#define __VEFVIEWER_H__
#include <QGLViewer/qglviewer.h>
#include <QFileDialog>
#include <QListWidgetItem>
class VEFViewer: public QGLViewer
{
public:
VEFViewer(QWidget* parent);
void addFile(QString s);
void setModelList(QListWidget* l) { modelList = l; }
void updateMinMax(float x, float y, float z);
void init();
protected:
virtual void draw();
virtual QString helpString() const;
virtual void keyPressEvent(QKeyEvent *e);
private:
void readVertexFile(QString s);
void readEdgeFile(QString s);
void readSTLFile(QString s);
void updateWeightedCenter(float x, float y, float z);
QListWidget* modelList;
qglviewer::Vec min, max, center;
unsigned int vertex_count;
};
class QDisplayListLWI: public QListWidgetItem
{
public:
QDisplayListLWI(QString name):
QListWidgetItem(name)
{}
GLuint getDisplayList() const { return display_list; }
~QDisplayListLWI() { glDeleteLists(display_list, 1); }
virtual void display() const =0;
protected:
GLuint display_list;
};
class QVerticesLWI: public QDisplayListLWI
{
public:
QVerticesLWI(QString name, FILE* file, VEFViewer* v);
virtual void display() const;
};
class QFacesLWI: public QDisplayListLWI
{
public:
QFacesLWI(QString name, FILE* file, VEFViewer* v);
virtual void display() const;
private:
int readFacet(FILE* file,
float& nx, float& ny, float& nz,
float& x0, float& y0, float& z0,
float& x1, float& y1, float& z1,
float& x2, float& y2, float& z2);
};
class QEdgesLWI: public QDisplayListLWI
{
public:
QEdgesLWI(QString name, FILE* file, VEFViewer* v);
virtual void display() const;
private:
int readEdge (FILE* file,
float& x0, float& y0, float& z0,
float& x1, float& y1, float& z1);
};
#endif // __VEFVIEWER_H__