#ifndef MV3DELEMENTSTAIR_H #define MV3DELEMENTSTAIR_H #include #include "misc/Cube.h" #include "MV3DElement.h" #include "misc/Shader.h" #include "misc/TriangleData.h" class MV3DElementStair : public MV3DElement { Floorplan::Floor* floor; Floorplan::Stair* stair; public: /** ctor */ MV3DElementStair(Floorplan::Floor* floor, Floorplan::Stair* stair) : floor(floor), stair(stair) { ; } protected: /** repaint me */ void render(const RenderSettings& rs) override { TriangleData data; const std::vector parts = stair->getParts(); const std::vector quads = Floorplan::getQuads(parts, floor); for (int i = 0; i < (int) parts.size(); ++i) { //const Floorplan::StairPart& part = parts[i]; const Floorplan::Quad3& quad = quads[i]; //const Floorplan::Quad3 quad = part.getQuad(floor); const Point3 p1 = quad.p2-quad.p1; const Point3 p2 = quad.p4-quad.p1; Point3 n = Math::normal(p1,p2); if (n.z < 0) {n = -n;} // upper side data.addTriangle(quad.p1, quad.p2, quad.p3, n); data.addTriangle(quad.p3, quad.p4, quad.p1, n); // lower side data.addTriangle(quad.p2, quad.p1, quad.p3, -n); data.addTriangle(quad.p4, quad.p3, quad.p1, -n); } rs.shader->bind(); rs.shader->setModelMatrix(QMatrix4x4()); rs.shader->setColor(1.0, 0.55, 0.55); rs.shader->setVertices(data.getVertices().data()); rs.shader->setNormals(data.getNormals().data()); glDrawArrays(GL_TRIANGLES, 0, data.getVertices().size()/3); rs.shader->unsetVertices(); rs.shader->unsetNormals(); rs.shader->release(); } bool isTransparent() const override { return false; } }; #endif // MV3DELEMENTSTAIR_H