VEFViewer.h
author morozov@geomdm.geomagic.com
Mon, 12 Jun 2006 10:46:00 -0400
changeset 1 9ac2dc8d1e24
parent 0 1168ca87fd4e
child 2 f3516f064329
permissions -rw-r--r--
Reads and displays vertices, edges, and faces

#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__