143 lines
4.1 KiB
C++
143 lines
4.1 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 MMFLOORSTAIR_H
|
||
#define MMFLOORSTAIR_H
|
||
|
||
#include "MapLayer.h"
|
||
#include "IHasParams.h"
|
||
#include "MMFloorOutlinePolygon.h"
|
||
|
||
#include "../2D/MV2DElementStair.h"
|
||
//#include "../3D/MV3DElementStair.h"
|
||
|
||
|
||
#include <Indoor/floorplan/v2/Floorplan.h>
|
||
|
||
/**
|
||
* layer containing all elements describing a floor's outline
|
||
*/
|
||
class MMFloorStair : public MapModelElement, public IHasParams {
|
||
|
||
private:
|
||
|
||
/** the underlying model */
|
||
Floorplan::Floor* floor;
|
||
Floorplan::StairFreeform* stair;
|
||
|
||
MV2DElementStair mv2d;
|
||
//MV3DElementStair mv3d;
|
||
|
||
public:
|
||
|
||
/** ctor with the underlying model */
|
||
MMFloorStair(MapLayer* parent, Floorplan::IndoorMap* map, Floorplan::Floor* floor, Floorplan::StairFreeform* stair) :
|
||
MapModelElement(parent), floor(floor), stair(stair), mv2d(map, floor, stair) {//, mv3d(floor, stair) {
|
||
|
||
;
|
||
|
||
}
|
||
|
||
MV2DElement* getMV2D() const override {return (MV2DElement*) &mv2d;}
|
||
//MV3DElement* getMV3D() const override {return (MV3DElement*) &mv3d;}
|
||
|
||
|
||
virtual int getNumParams() const override {
|
||
const int selPart = mv2d.getSelPart();
|
||
return (selPart >= 0) ? (3) : (0);
|
||
}
|
||
|
||
virtual Param getParamDesc(const int idx) const override {
|
||
const int selPart = mv2d.getSelPart();
|
||
const int selNode = mv2d.getSelNode();
|
||
switch(idx) {
|
||
case 0: return Param("node height", ParamType::FLOAT);
|
||
case 1: return (selPart >= 0 && selNode == 0) ? Param("part width", ParamType::FLOAT) : Param::getNA();
|
||
case 2: return (selPart >= 0 && selNode == 0) ? Param("connect", ParamType::BOOL) : Param::getNA();
|
||
}
|
||
throw 1;
|
||
}
|
||
|
||
virtual ParamValue getParamValue(const int idx) const override {
|
||
const int selPart = mv2d.getSelPart();
|
||
const int selNode = mv2d.getSelNode();
|
||
switch(idx) {
|
||
case 0: if (selPart >= 0) {return stair->parts[selPart][selNode].z;} else {return NAN;}
|
||
case 1: if (selPart >= 0) {return stair->parts[selPart].width;} else {return NAN;}
|
||
case 2: if (selPart >= 0) {return stair->parts[selPart].connectWithPrev;} else {return false;}
|
||
}
|
||
throw 1;
|
||
}
|
||
|
||
virtual void setParamValue(const int idx, const ParamValue& val) override {
|
||
const int selPart = mv2d.getSelPart();
|
||
const int selNode = mv2d.getSelNode();
|
||
switch(idx) {
|
||
case 0: if (selPart >= 0) {stair->parts[selPart][selNode].z = val.toFloat();} break;
|
||
case 1: if (selPart >= 0) {stair->parts[selPart].width = val.toFloat();} break;
|
||
case 2: if (selPart >= 0) {stair->parts[selPart].connectWithPrev = val.toBool();} break;
|
||
}
|
||
}
|
||
|
||
void deleteMe() const override {
|
||
parent->removeElement(this);
|
||
floor->stairs.erase(std::remove(floor->stairs.begin(), floor->stairs.end(), stair), floor->stairs.end());
|
||
}
|
||
|
||
// virtual int getNumParams() const override {
|
||
// return 4;
|
||
// }
|
||
|
||
// virtual Param getParamDesc(const int idx) const override {
|
||
// switch(idx) {
|
||
// case 0: return Param("center", ParamType::POINT2);
|
||
// case 1: return Param("at height", ParamType::FLOAT);
|
||
// case 2: return Param("height", ParamType::FLOAT);
|
||
// case 3: return Param("angle", ParamType::FLOAT);
|
||
// }
|
||
// throw 1;
|
||
// }
|
||
|
||
// virtual ParamValue getParamValue(const int idx) const override {
|
||
// switch(idx) {
|
||
// case 0: return stair->center;
|
||
// case 1: return stair->atHeight;
|
||
// case 2: return stair->height;
|
||
// case 3: return stair->angleDeg;
|
||
// }
|
||
// throw 1;
|
||
// }
|
||
|
||
// virtual void setParamValue(const int idx, const ParamValue& val) const override {
|
||
// switch(idx) {
|
||
// case 0: stair->center = val.toPoint2(); break;
|
||
// case 1: stair->atHeight = val.toFloat(); break;
|
||
// case 2: stair->height = val.toFloat(); break;
|
||
// case 3: stair->angleDeg = val.toFloat(); break;
|
||
// }
|
||
// }
|
||
|
||
|
||
|
||
// //TODO: check
|
||
// void create(Floorplan::FloorOutlinePolygon* poly) {
|
||
|
||
// // add to underlying model
|
||
// floor->outline.push_back(poly);
|
||
|
||
// // add to myself as element
|
||
// elements.push_back(new MMFloorOutlinePolygon(this, floor, poly));
|
||
|
||
// }
|
||
|
||
};
|
||
|
||
#endif // MMFLOORSTAIR_H
|