added a ruler for measuring
added support for meta-data editing improved element selection changed zooming fixed some issues with layer events fixed issue with 3D outline fixed loading issue for old maps some interface changes
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "MapLayer.h"
|
||||
#include "MapModelElement.h"
|
||||
#include "MapModelListener.h"
|
||||
|
||||
#include "MMRoot.h"
|
||||
|
||||
@@ -13,7 +14,7 @@
|
||||
#include <Indoor/floorplan/v2/FloorplanReader.h>
|
||||
#include <Indoor/floorplan/v2/FloorplanWriter.h>
|
||||
|
||||
class MapModel : public QObject {
|
||||
class MapModel : public QObject, public MapLayerListener {
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
@@ -31,6 +32,9 @@ private:
|
||||
/** the loaded floorplan */
|
||||
Floorplan::IndoorMap* im;
|
||||
|
||||
/** listener */
|
||||
std::vector<MapModelListener*> listeners;
|
||||
|
||||
public:
|
||||
|
||||
/** ctor */
|
||||
@@ -42,10 +46,16 @@ public:
|
||||
cleanup();
|
||||
}
|
||||
|
||||
/** attach a listener */
|
||||
void addListener(MapModelListener* l) {
|
||||
listeners.push_back(l);
|
||||
}
|
||||
|
||||
/** create a new, empty root node */
|
||||
void startEmpty() {
|
||||
im = new Floorplan::IndoorMap();
|
||||
root = new MMRoot(nullptr, im);
|
||||
root->addListener(this);
|
||||
//root->addSublayer(new MMFloors(root, im));
|
||||
}
|
||||
|
||||
@@ -64,6 +74,7 @@ public:
|
||||
// load the indoor-map using the given XML-file
|
||||
im = Floorplan::Reader::readFromFile(file);
|
||||
root = new MMRoot(nullptr, im);
|
||||
root->addListener(this);
|
||||
|
||||
emit reset();
|
||||
|
||||
@@ -75,6 +86,22 @@ public:
|
||||
|
||||
}
|
||||
|
||||
void onLayerChanged(MapLayer* layer) override {
|
||||
for (MapModelListener* l : listeners) {l->onLayerChanged(layer);}
|
||||
}
|
||||
|
||||
void onLayerElementAdded(MapLayer* layer, MapModelElement* elem) override {
|
||||
for (MapModelListener* l : listeners) {l->onLayerElementAdded(layer, elem);}
|
||||
}
|
||||
|
||||
void onLayerElementRemoved(MapLayer* layer, const MapModelElement* elem) override {
|
||||
for (MapModelListener* l : listeners) {l->onLayerElementRemoved(layer, elem);}
|
||||
}
|
||||
|
||||
void onLayerVisibilityChanged(MapLayer* layer, const bool visible) override {
|
||||
for (MapModelListener* l : listeners) {l->onLayerVisibilityChanged(layer, visible);}
|
||||
}
|
||||
|
||||
/** get the constructed map */
|
||||
Floorplan::IndoorMap* getMap() const {
|
||||
return im;
|
||||
@@ -83,18 +110,21 @@ public:
|
||||
/** get the map's root-layer containing all other layers */
|
||||
MapLayer* getRootLayer() { return root; }
|
||||
|
||||
/** get all elements within the currently selected layer */
|
||||
std::vector<MapModelElement*> getSelectedLayerElements() {
|
||||
//return selElements;
|
||||
//return (selLayer) ? (selLayer->getElementsRecursive()) : (std::vector<MapModelElement*>());
|
||||
std::vector<MapModelElement*> elements;
|
||||
root->getVisibleElementsRecursive(elements);
|
||||
return elements;
|
||||
}
|
||||
// /** get all elements within the currently selected layer */
|
||||
// std::vector<MapModelElement*> getSelectedLayerElements() {
|
||||
// //return selElements;
|
||||
// //return (selLayer) ? (selLayer->getElementsRecursive()) : (std::vector<MapModelElement*>());
|
||||
//// std::vector<MapModelElement*> elements;
|
||||
//// root->getVisibleElementsRecursive(elements);
|
||||
//// return elements;
|
||||
|
||||
// }
|
||||
|
||||
/** get all currently visible elements */
|
||||
std::vector<MapModelElement*> getVisibleElements() {
|
||||
return getSelectedLayerElements();
|
||||
std::vector<MapModelElement*> elements;
|
||||
root->getVisibleElementsRecursive(elements);
|
||||
return elements;
|
||||
}
|
||||
|
||||
/** set the currently selected layer */
|
||||
|
||||
Reference in New Issue
Block a user