Newer
Older
Import / research / 3d-z-maps / mview-0.3.3 / mview / vertex.h
//
//    File: vertex.h
//
//    (C) 2000-2008 Helmut Cantzler
//
//    Licensed under the terms of the Lesser General Public License.
//

#ifndef _VERTEX_H
#define _VERTEX_H

#include <list>
#include <utility>

#include "triangle.h"
#include "edge.h"
#include "matrix3.h"
#include "mathvector.h"

using namespace std;

class Triangle;
class Edge;

class Vertex
{
public:
  Vertex();
  Vertex(const Vertex &v);
  Vertex(float x, float y, float z);
  ~Vertex();

  void addTriangle(Triangle* triangle);
  void deleteTriangle(Triangle* triangle);
  void addEdge(Edge* edge);
  void deleteEdge(Edge* edge);

  float x(void) const;
  float y(void) const;
  float z(void) const;
  const float* floatData(void) const;
  const MathVector* mathData(void) const;

  const float* floatNormal(void) const;
  void addNormal(const MathVector *norm);

  float length(void) const;
  void set(const Vertex *v);
  void set(const MathVector *v);
  void move(const MathVector *v);
  void move(float x, float y, float z);
  void scale(float x, float y, float z);
  void scale(float scale);
  void rotate(const Matrix3<float> *r);
  int equal(const Vertex *v) const;

  void setTextCoordinates(float s, float t);
  void setTextCoordinates(const pair<float, float>* texCoord);
  float getTextT(void);
  float getTextS(void);

  list<Triangle*>* getTriangles(void);
  list<Edge*>* getEdges(void);

  static float distance(const Vertex *v1, const Vertex *v2);

  int operator<(const Vertex &v) const;

  unsigned int name, number;

private:
  MathVector *normal, data;
  float textS, textT;
   int nrTri, nrEdg;
  list<Edge*> edges;
  list<Triangle*> triangles;
};

#endif