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

#ifndef _TRIANGLE_H
#define _TRIANGLE_H

#include <vector>
#include "edge.h"
#include "vertex.h"
#include "mathvector.h"
#include "misc.h"

using namespace std;

typedef enum { TRIANGLE, POLYGON_TRIANGLE } TriangleType;

class Triangle
{
public:
  Triangle(Vertex *v1, Vertex *v2, Vertex *v3, TriangleType type = TRIANGLE);
  Triangle(Edge *e1, Edge *e2, Edge *e3);
  ~Triangle();

  //  void set(MathVector *v1, MathVector *v2, MathVector *v3);
  void calcProperties(void);
  void setVertices(const MathVector *v1, const MathVector *v2, 
		   const MathVector *v3);
  int changeVertex(const Vertex *oldV, Vertex *newV);
  void moveCentroid(const MathVector *v);
  void negateNormal(void);

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

  const float* centroid(void) const;
  const MathVector* mathCentroid(void) const;
  const float* floatNormal(void) const;
  const MathVector* mathNormal(void) const;

  float size(void) const;
  float perimeter(void) const;
  float distanceToOrigin(void) const;
  float angle(const Vertex *v) const;

  bool equal(const Triangle *tri) const;
  bool onSamePlane(const Triangle *tri, float distanceTolerance,
		  float orientationTolerance) const;
  bool isFromPolygon(void) const;

  vector<Triangle*> neighbors(void) const;
  vector<Triangle*> neighborsOnPlane(void) const;
  int getSurroundingPlane(void) const;

  Edge *edges[3];
  Vertex *vertices[3];
  unsigned int plane, name;

private:
  MathVector surfaceNormal, surfaceCentroid;
  float surfaceSize, surfacePerimeter, surfaceDistanceToOrigin;
  bool fromPolygon;
};

#endif