changed 3D rendering
added pan/zoom gesture
This commit is contained in:
397
params/ToolBoxWidget.cpp
Normal file
397
params/ToolBoxWidget.cpp
Normal file
@@ -0,0 +1,397 @@
|
||||
#include "../fixC11.h"
|
||||
|
||||
#include "ToolBoxWidget.h"
|
||||
|
||||
#include <QVBoxLayout>
|
||||
#include <QGridLayout>
|
||||
|
||||
#include <QPushButton>
|
||||
#include <QPixmap>
|
||||
|
||||
#include "../mapview/model/MapLayers.h"
|
||||
|
||||
#include "../mapview/2D/MapView2D.h"
|
||||
#include "../mapview/model/MapModel.h"
|
||||
#include "../mapview/model/MMFloorAccessPoint.h"
|
||||
#include "../mapview/model/MMFloorBeacon.h"
|
||||
#include "../mapview/model/MMFloorGroundTruthPoints.h"
|
||||
#include "../mapview/model/MMRegistration.h"
|
||||
|
||||
#include "../mapview/2D/tools/ToolMeasure.h"
|
||||
#include "../mapview/2D/tools/ToolSelector.h"
|
||||
#include "../mapview/2D/tools/ToolNewElement.h"
|
||||
#include "../mapview/2D/tools/ToolNewWall.h"
|
||||
#include "../mapview/2D/tools/ToolNewDoor.h"
|
||||
#include "../mapview/2D/tools/ToolNewStair.h"
|
||||
#include "../mapview/2D/tools/ToolNewElevator.h"
|
||||
#include "../mapview/2D/tools/ToolNewOutline.h"
|
||||
#include "../mapview/2D/tools/ToolNewFingerprint.h"
|
||||
#include "../mapview/2D/tools/ToolNewGroundTruth.h"
|
||||
#include "../mapview/2D/tools/ToolNewAccessPoint.h"
|
||||
#include "../mapview/2D/tools/ToolNewBeacon.h"
|
||||
#include "../mapview/2D/tools/ToolNewPOI.h"
|
||||
|
||||
#include "../UIHelper.h"
|
||||
|
||||
QSplitter* getSplitter() {
|
||||
|
||||
QSplitter* splt = new QSplitter();
|
||||
splt->setStyleSheet("background-color:black;");
|
||||
splt->setMinimumHeight(1);
|
||||
return splt;
|
||||
|
||||
}
|
||||
|
||||
ToolBoxWidget::ToolBoxWidget(MapView2D* view, QWidget *parent) : QWidget(parent), view(view) {
|
||||
|
||||
const int s = 32;
|
||||
setMaximumWidth(48);
|
||||
setMinimumWidth(48);
|
||||
|
||||
QGridLayout* lay = new QGridLayout(this);
|
||||
|
||||
// SELECTION
|
||||
btnSelect = new QPushButton(UIHelper::getIcon("cursor"), "");
|
||||
btnSelect->setMinimumSize(s,s);
|
||||
lay->addWidget(btnSelect, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnSelect, SIGNAL(clicked(bool)), this, SLOT(onSelect()));
|
||||
|
||||
|
||||
// MEASURE
|
||||
btnMeasure = new QPushButton(UIHelper::getIcon("ruler"), "");
|
||||
btnMeasure->setMinimumSize(s,s);
|
||||
lay->addWidget(btnMeasure, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnMeasure, SIGNAL(clicked(bool)), this, SLOT(onMeasure()));
|
||||
|
||||
|
||||
// splitter
|
||||
lay->addWidget(getSplitter(), r++, 0, 1,1,Qt::AlignTop);
|
||||
|
||||
|
||||
// OBSTACLES
|
||||
btnGround = new QPushButton(UIHelper::getIcon("floor"), "");
|
||||
btnGround->setMinimumSize(s,s);
|
||||
lay->addWidget(btnGround, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnGround, SIGNAL(clicked(bool)), this, SLOT(onNewGround()));
|
||||
|
||||
btnWall = new QPushButton(UIHelper::getIcon("wall"), "");
|
||||
btnWall->setMinimumSize(s,s);
|
||||
lay->addWidget(btnWall, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnWall, SIGNAL(clicked(bool)), this, SLOT(onNewWall()));
|
||||
|
||||
btnPillar = new QPushButton(UIHelper::getIcon("pillar"), "");
|
||||
btnPillar->setMinimumSize(s,s);
|
||||
lay->addWidget(btnPillar, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnPillar, SIGNAL(clicked(bool)), this, SLOT(onNewPillar()));
|
||||
|
||||
btnDoor = new QPushButton(UIHelper::getIcon("door"), "");
|
||||
btnDoor->setMinimumSize(s,s);
|
||||
lay->addWidget(btnDoor, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnDoor, SIGNAL(clicked(bool)), this, SLOT(onNewDoor()));
|
||||
|
||||
btnStair = new QPushButton(UIHelper::getIcon("stair"), "");
|
||||
btnStair->setMinimumSize(s,s);
|
||||
lay->addWidget(btnStair, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnStair, SIGNAL(clicked(bool)), this, SLOT(onNewStair()));
|
||||
|
||||
btnElevator = new QPushButton(UIHelper::getIcon("elevator"), "");
|
||||
btnElevator->setMinimumSize(s,s);
|
||||
lay->addWidget(btnElevator, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnElevator, SIGNAL(clicked(bool)), this, SLOT(onNewElevator()));
|
||||
|
||||
|
||||
// splitter
|
||||
lay->addWidget(getSplitter(), r++, 0, 1,1,Qt::AlignTop);
|
||||
|
||||
|
||||
// TRANSMITTERS
|
||||
btnWifi = new QPushButton(UIHelper::getIcon("wifi"), "");
|
||||
btnWifi->setMinimumSize(s,s);
|
||||
lay->addWidget(btnWifi, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnWifi, SIGNAL(clicked(bool)), this, SLOT(onNewAccessPoint()));
|
||||
|
||||
btnBeacon = new QPushButton(UIHelper::getIcon("beacon"), "");
|
||||
btnBeacon->setMinimumSize(s,s);
|
||||
lay->addWidget(btnBeacon, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnBeacon, SIGNAL(clicked(bool)), this, SLOT(onNewBeacon()));
|
||||
|
||||
// TRANSMITTER RELATED
|
||||
btnFingerprintLocation = new QPushButton(UIHelper::getIcon("fingerprint"), "");
|
||||
btnFingerprintLocation->setMinimumSize(s,s);
|
||||
lay->addWidget(btnFingerprintLocation, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnFingerprintLocation, SIGNAL(clicked(bool)), this, SLOT(onNewFingerprintLocation()));
|
||||
|
||||
// IMAGES
|
||||
btnImage = new QPushButton(UIHelper::getIcon("image"), "");
|
||||
btnImage->setMinimumSize(s,s);
|
||||
lay->addWidget(btnImage, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnImage, SIGNAL(clicked(bool)), this, SLOT(onNewImage()));
|
||||
|
||||
// POI
|
||||
btnPOI = new QPushButton(UIHelper::getIcon("poi"), "");
|
||||
btnPOI->setMinimumSize(s,s);
|
||||
lay->addWidget(btnPOI, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnPOI, SIGNAL(clicked(bool)), this, SLOT(onNewPOI()));
|
||||
|
||||
// GROUNDTRUTH
|
||||
btnGTP = new QPushButton(UIHelper::getIcon("gtp"), "");
|
||||
btnGTP->setMinimumSize(s,s);
|
||||
lay->addWidget(btnGTP, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnGTP, SIGNAL(clicked(bool)), this, SLOT(onNewGTP()));
|
||||
|
||||
|
||||
|
||||
|
||||
// EARTH REGISTRATION
|
||||
btnEarthReg = new QPushButton(UIHelper::getIcon("registration"), "");
|
||||
btnEarthReg->setMinimumSize(s,s);
|
||||
lay->addWidget(btnEarthReg, r++, 0, 1,1,Qt::AlignTop);
|
||||
connect(btnEarthReg, SIGNAL(clicked(bool)), this, SLOT(onNewEarthReg()));
|
||||
|
||||
|
||||
|
||||
// what to do when the main-tool is changed
|
||||
connect(&view->getTools(), SIGNAL(mainToolChanged()), this, SLOT(onMainToolChanged()));
|
||||
|
||||
|
||||
// FILL
|
||||
lay->addItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), r, 0);
|
||||
|
||||
// start empty
|
||||
setSelectedLayer(nullptr);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ToolBoxWidget::onMainToolChanged() {
|
||||
|
||||
// get the currently active Main-Tool
|
||||
Tool* t = view->getTools().getMain();
|
||||
|
||||
QString styleSel = "background-color: #bbbbff;";
|
||||
QString styleNor = "";
|
||||
|
||||
// highlight the corresponding button
|
||||
btnSelect->setStyleSheet( dynamic_cast<ToolSelector*>(t) ? styleSel : styleNor );
|
||||
btnMeasure->setStyleSheet( dynamic_cast<ToolMeasure*>(t) ? styleSel : styleNor );
|
||||
|
||||
btnGround->setStyleSheet( dynamic_cast<ToolNewOutline*>(t) ? styleSel : styleNor );
|
||||
|
||||
btnDoor->setStyleSheet( dynamic_cast<ToolNewDoor*>(t) ? styleSel : styleNor );
|
||||
btnWall->setStyleSheet( dynamic_cast<ToolNewWall*>(t) ? styleSel : styleNor );
|
||||
btnElevator->setStyleSheet( dynamic_cast<ToolNewElevator*>(t) ? styleSel : styleNor );
|
||||
btnStair->setStyleSheet( dynamic_cast<ToolNewStair*>(t) ? styleSel : styleNor );
|
||||
|
||||
btnFingerprintLocation->setStyleSheet( dynamic_cast<ToolNewFingerprint*>(t) ? styleSel : styleNor );
|
||||
btnGTP->setStyleSheet( dynamic_cast<ToolNewGroundTruth*>(t) ? styleSel : styleNor );
|
||||
btnWifi->setStyleSheet( dynamic_cast<ToolNewAccessPoint*>(t) ? styleSel : styleNor );
|
||||
btnBeacon->setStyleSheet( dynamic_cast<ToolNewBeacon*>(t) ? styleSel : styleNor );
|
||||
btnPOI->setStyleSheet( dynamic_cast<ToolNewPOI*>(t) ? styleSel : styleNor );
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::setSelectedLayer(MapLayer *ml) {
|
||||
|
||||
this->curLayer = ml;
|
||||
|
||||
btnGround->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_GROUND));
|
||||
|
||||
btnWall->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES));
|
||||
btnPillar->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES));
|
||||
btnDoor->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES));
|
||||
|
||||
btnStair->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_STAIRS));
|
||||
btnElevator->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_ELEVATORS));
|
||||
|
||||
btnWifi->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_ACCESS_POINTS));
|
||||
btnBeacon->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_BEACONS));
|
||||
btnFingerprintLocation->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_FINGERPRINTS));
|
||||
btnPOI->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_POIS));
|
||||
btnGTP->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_GROUND_TRUTH_POINTS));
|
||||
|
||||
btnImage->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_UNDERLAYS));
|
||||
|
||||
btnEarthReg->setEnabled(ml && (ml->getLayerType() == MapLayerType::REGISTRATION));
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ToolBoxWidget::onNewGround() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// float s = view->getScaler().sm(50);
|
||||
|
||||
// Floorplan::FloorOutlinePolygon* poly = new Floorplan::FloorOutlinePolygon();
|
||||
// poly->name = "new";
|
||||
// poly->poly.points.push_back(Point2(center.x-s, center.y-s));
|
||||
// poly->poly.points.push_back(Point2(center.x+s, center.y-s));
|
||||
// poly->poly.points.push_back(Point2(center.x, center.y+s));
|
||||
|
||||
|
||||
// MMFloorOutline* ml = (MMFloorOutline*)curLayer;
|
||||
// ml->create(poly);
|
||||
|
||||
// view->getModel()->reselect();
|
||||
|
||||
view->getTools().setMain(new ToolNewOutline(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ToolBoxWidget::onSelect() {
|
||||
view->getTools().setMainDefault();
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onMeasure() {
|
||||
view->getTools().setMain(new ToolMeasure(view->getTools()));
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewWall() {
|
||||
view->getTools().setMain(new ToolNewWall(view->getTools(), curLayer));
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewDoor() {
|
||||
view->getTools().setMain(new ToolNewDoor(view->getTools(), curLayer));
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewPillar() {
|
||||
|
||||
const Point2 center = view->getScaler().getCenter();
|
||||
float s = view->getScaler().sm(50);
|
||||
|
||||
Floorplan::FloorObstacleCircle* pillar = new Floorplan::FloorObstacleCircle(
|
||||
Floorplan::Material::DRYWALL,
|
||||
Point2(center.x-s, center.y),
|
||||
s
|
||||
);
|
||||
|
||||
MMFloorObstacles* obs = (MMFloorObstacles*)curLayer;
|
||||
obs->createCircle(pillar);
|
||||
|
||||
//view->getModel()->reselect();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ToolBoxWidget::onNewStair() {
|
||||
|
||||
view->getTools().setMain(new ToolNewStair(view->getTools(), curLayer));
|
||||
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
|
||||
// Floorplan::StairFreeform* stair = new Floorplan::StairFreeform();
|
||||
// Floorplan::StairPart part(Point3(center.x-3, center.y, 0), Point3(center.x+3, center.y, 3), 3);
|
||||
// stair->parts.push_back( part );
|
||||
|
||||
// MMFloorStairs* stairs = (MMFloorStairs*)curLayer;
|
||||
// stairs->create(stair);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewElevator() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
|
||||
// Floorplan::Elevator* elevator = new Floorplan::Elevator(center);
|
||||
|
||||
// MMFloorElevators* elevators = (MMFloorElevators*)curLayer;
|
||||
// elevators->create(elevator);
|
||||
|
||||
view->getTools().setMain(new ToolNewElevator(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewAccessPoint() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// Floorplan::AccessPoint* ap = new Floorplan::AccessPoint(
|
||||
// "noname", "00:00:00:00:00:00", Point3(center.x, center.y, 0)
|
||||
// );
|
||||
|
||||
// MMFloorAccessPoints* aps = (MMFloorAccessPoints*) curLayer;
|
||||
// aps->createAP(ap);
|
||||
|
||||
view->getTools().setMain(new ToolNewAccessPoint(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewBeacon() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// Floorplan::Beacon* b = new Floorplan::Beacon(
|
||||
// "noname", "00:00:00:00:00:00", Point3(center.x, center.y, 0)
|
||||
// );
|
||||
|
||||
// MMFloorBeacons* beacons = (MMFloorBeacons*) curLayer;
|
||||
// beacons->createBeacon(b);
|
||||
|
||||
view->getTools().setMain(new ToolNewBeacon(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewFingerprintLocation() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// Floorplan::FingerprintLocation* fpl = new Floorplan::FingerprintLocation("noname", center, 0);
|
||||
|
||||
// MMFloorFingerprints* fps = (MMFloorFingerprints*) curLayer;
|
||||
// fps->create(fpl);
|
||||
|
||||
view->getTools().setMain(new ToolNewFingerprint(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void ToolBoxWidget::onNewPOI() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// Floorplan::POI* poi = new Floorplan::POI(
|
||||
// Floorplan::POIType::ROOM, "noname", Point2(center.x, center.y)
|
||||
// );
|
||||
|
||||
// MMFloorPOIs* pois = (MMFloorPOIs*) curLayer;
|
||||
// pois->createPOI(poi);
|
||||
|
||||
view->getTools().setMain(new ToolNewPOI(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewGTP() {
|
||||
|
||||
// const Point2 center = view->getScaler().getCenter();
|
||||
// Floorplan::GroundTruthPoint* gtp = new Floorplan::GroundTruthPoint(
|
||||
// 0, Point3(center.x, center.y, 0)
|
||||
// );
|
||||
|
||||
// MMFloorGroundTruthPoints* gtps = (MMFloorGroundTruthPoints*) curLayer;
|
||||
// gtps->createGroundTruthPoint(gtp);
|
||||
|
||||
view->getTools().setMain(new ToolNewGroundTruth(view->getTools(), curLayer));
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewEarthReg() {
|
||||
|
||||
const Point2 center = view->getScaler().getCenter();
|
||||
Floorplan::EarthPosMapPos* reg = new Floorplan::EarthPosMapPos(
|
||||
EarthPos(50, 10, 300), Point3(center.x, center.y, 0)
|
||||
);
|
||||
|
||||
MMRegistration* mmreg = (MMRegistration*) curLayer;
|
||||
mmreg->create(reg);
|
||||
|
||||
}
|
||||
|
||||
void ToolBoxWidget::onNewImage() {
|
||||
|
||||
const Point2 center = view->getScaler().getCenter();
|
||||
|
||||
MMFloorUnderlays* underlays = (MMFloorUnderlays*) curLayer;
|
||||
underlays->createImage(center);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user