+#include <QDebug>
+
+#include "geometry.h"
+#include "mapobj.h"
+#include "misc.h"
+
+/////////////////////////////////////////////////////////////////
+// MapObj
+/////////////////////////////////////////////////////////////////
+MapObj::MapObj(QGraphicsItem *parent, TreeItem *ti) : QGraphicsItem(parent)
+{
+ // qDebug() << "Const MapObj (this,ti)=("<<this<<","<<ti<<")";
+ treeItem = ti;
+ init();
+}
+
+MapObj::~MapObj()
+{
+ // qDebug() << "Destr MapObj "<<this;
+ foreach (QGraphicsItem *i, childItems())
+ // Avoid tha QGraphicsScene deletes children
+ i->setParentItem(NULL);
+}
+
+void MapObj::init()
+{
+ absPos = QPointF(0, 0);
+ visible = true;
+}
+
+void MapObj::copy(MapObj *other)
+{
+ absPos = other->absPos;
+ bbox.setX(other->bbox.x());
+ bbox.setY(other->bbox.y());
+ bbox.setSize(QSizeF(other->bbox.width(), other->bbox.height()));
+}
+
+void MapObj::setTreeItem(TreeItem *ti) { treeItem = ti; }
+
+TreeItem *MapObj::getTreeItem() const { return treeItem; }
+
+qreal MapObj::x() { return getAbsPos().x(); }
+
+qreal MapObj::y() { return getAbsPos().y(); }
+
+qreal MapObj::width() { return bbox.width(); }
+
+qreal MapObj::height() { return bbox.height(); }
+
+QPointF MapObj::getAbsPos() { return absPos; }
+
+QString MapObj::getPos() { return qpointFToString(absPos); }
+
+void MapObj::move(double x, double y) { MapObj::move(QPointF(x, y)); }
+
+void MapObj::move(QPointF p)
+{
+ absPos = p;
+ bbox.moveTo(p);
+ clickPoly = QPolygonF(bbox);
+}
+
+void MapObj::moveBy(double x, double y)
+{
+ QPointF v(x, y);
+ MapObj::move(absPos + v);
+ bbox.moveTo(bbox.topLeft() + v);
+ clickPoly.translate(v);
+}
+
+QRectF MapObj::boundingRect() const { return QRectF(); }
+
+void MapObj::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) {}
+
+QRectF MapObj::getBBox() { return bbox; }
+
+ConvexPolygon MapObj::getBoundingPolygon()
+{
+ QPolygonF p;
+ p << bbox.topLeft() << bbox.topRight() << bbox.bottomRight()
+ << bbox.bottomLeft();
+ return p;
+}
+
+QPolygonF MapObj::getClickPoly() { return clickPoly; }
+
+QPainterPath MapObj::getSelectionPath()
+{
+ qreal d = 3; // Thickness of selection "border"
+ QPainterPath p;
+ QRectF br = clickPoly.boundingRect();
+ p.moveTo(br.topLeft() + QPointF(-d, -d));
+ p.lineTo(br.topRight() + QPointF(d, -d));
+ p.lineTo(br.bottomRight() + QPointF(d, d));
+ p.lineTo(br.bottomLeft() + QPointF(-d, d));
+ p.lineTo(br.topLeft() + QPointF(-d, -d));
+ return p;
+}
+
+bool MapObj::isInClickBox(const QPointF &p)
+{
+ return clickPoly.containsPoint(p, Qt::OddEvenFill);
+}
+
+QSizeF MapObj::getSize() { return bbox.size(); }
+
+void MapObj::setRotation(const qreal &a) { angle = a; }
+
+qreal MapObj::getRotation() { return angle; }
+
+bool MapObj::isVisibleObj() { return visible; }
+
+void MapObj::setVisibility(bool v) { visible = v; }
+
+void MapObj::positionBBox() {}
+void MapObj::calcBBoxSize() {}