Files
2026-11-08 11:22:15 +01:00

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