diff --git a/quad.cpp b/quad.cpp index f7a6314..57508df 100755 --- a/quad.cpp +++ b/quad.cpp @@ -85,4 +85,22 @@ namespace vb01{ meshBase = MeshData(faceVertPos, nullptr, nullptr, nullptr, 6, norm, vertices, indices, numTris); } + + //TODO improve functionality for GUI quads + Vector2 Quad::getSubquadIds(int numVertDiv, int numHorDiv, Vector3 pos, Vector3 size){ + const int numHorQuads = numVertDiv + 1, numVertQuads = numHorDiv + 1; + Vector2 subQuadSize = Vector2(size.x / numHorQuads, size.z / numVertQuads); + + return Vector2(int((.5 * size.x + pos.x) / subQuadSize.x), int((.5 * size.z + pos.z) / subQuadSize.y)); + } + + Vector3 Quad::getSubquadCorner(int xId, int yId, int numVertDiv, int numHorDiv, bool top, bool right){ + const int numHorQuads = numVertDiv + 1, numVertQuads = numHorDiv + 1; + int vertPosId = 6 * xId * numVertQuads + 6 * yId; + + if(top && !right) return meshBase.positions[vertPosId]; + else if(top && right) return meshBase.positions[vertPosId + 4]; + else if(!top && !right) return meshBase.positions[vertPosId + 1]; + else if(!top && right) return meshBase.positions[vertPosId + 3]; + } } diff --git a/quad.h b/quad.h index 7b9d683..6d93dda 100755 --- a/quad.h +++ b/quad.h @@ -9,7 +9,12 @@ namespace vb01{ public: Quad(Vector3, bool = true, int numVertDiv = 0, int numHorDiv = 0); void setSize(Vector3); + Vector3 getSubquadCorner(int, int, int, int, bool, bool); + Vector2 getSubquadIds(int, int, Vector3, Vector3); inline Vector3 getSize(){return size;} + inline Vector2 getSubquadSize(){return Vector2(size.x / (numHorDiv + 1), size.y / (numVertDiv + 1));} + inline int getNumHorSubquads(){return numHorDiv + 1;} + inline int getNumVertSubquads(){return numVertDiv + 1;} private: Vector3 size; bool spatial;