85 lines
2.0 KiB
C++
85 lines
2.0 KiB
C++
/*
|
||
* © Copyright 2014 – Urheberrechtshinweis
|
||
* Alle Rechte vorbehalten / All Rights Reserved
|
||
*
|
||
* Programmcode ist urheberrechtlich geschuetzt.
|
||
* Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner.
|
||
* Keine Verwendung ohne explizite Genehmigung.
|
||
* (vgl. § 106 ff UrhG / § 97 UrhG)
|
||
*/
|
||
|
||
#ifndef MV3DELEMENTSTAIR_H
|
||
#define MV3DELEMENTSTAIR_H
|
||
|
||
#include <Indoor/floorplan/v2/Floorplan.h>
|
||
|
||
#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<Floorplan::StairPart> parts = stair->getParts();
|
||
const std::vector<Floorplan::Quad3> 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());
|
||
rs.funcs->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
|