62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
#ifndef FACE_H
|
|
#define FACE_H
|
|
#include "vertex.h"
|
|
#include "tilevertexinfo.h"
|
|
#include <QVector3D>
|
|
class Face;
|
|
class Vertex;
|
|
class TileVertexInfo;
|
|
class Face
|
|
{
|
|
private:
|
|
Vertex *m_v1;
|
|
Vertex *m_v2;
|
|
Vertex *m_v3;
|
|
|
|
TileVertexInfo *m_vi1;
|
|
TileVertexInfo *m_vi2;
|
|
TileVertexInfo *m_vi3;
|
|
|
|
Face * m_parent;
|
|
|
|
QVector3D m_normal;
|
|
Face * m_subface = NULL;
|
|
float sign (QVector2D p1, QVector2D p2, QVector2D p3);
|
|
bool PointInFace (QVector2D pt);
|
|
|
|
public:
|
|
Face () { m_subface= NULL;}
|
|
Face(Vertex *v1
|
|
, TileVertexInfo *vi1
|
|
, Vertex *v2
|
|
, TileVertexInfo *vi2
|
|
, Vertex *v3
|
|
, TileVertexInfo *vi3);
|
|
|
|
void setSettings(Vertex *v1
|
|
, TileVertexInfo *vi1
|
|
, Vertex *v2
|
|
, TileVertexInfo *vi2
|
|
, Vertex *v3
|
|
, TileVertexInfo *vi3);
|
|
|
|
void recalcNormal();
|
|
QVector3D normal();
|
|
|
|
inline TileVertexInfo * getVi1() { return m_vi1; }
|
|
inline TileVertexInfo * getVi2() { return m_vi2; }
|
|
inline TileVertexInfo * getVi3() { return m_vi3; }
|
|
|
|
void createSub() {
|
|
m_subface = new Face[4];
|
|
for (int i=0; i<4;i++) {
|
|
m_subface[i].setParent(this);
|
|
}
|
|
}
|
|
inline Face &getSub(int nr) { return m_subface[nr]; }
|
|
inline void setParent(Face *parent) {m_parent = parent;}
|
|
void findFaces(std::vector<Face *> &vec, QVector2D s);
|
|
};
|
|
|
|
#endif // FACE_H
|