From e7784b592d619ee9fe2132c2dbb52046a845a3a9 Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Sat, 16 Nov 2019 20:27:48 +0100 Subject: [PATCH] modeleditor: Add icon name to object outline for intersection Change-Id: I09b65a675e4d2205d0be2b1ca1687f2ceffe4285 Reviewed-by: Christian Stenger --- .../qmt/diagram_scene/items/classitem.cpp | 12 ++++++++++++ .../qmt/diagram_scene/items/componentitem.cpp | 12 ++++++++++++ .../qmt/diagram_scene/items/diagramitem.cpp | 7 +++++++ .../modelinglib/qmt/diagram_scene/items/itemitem.cpp | 12 ++++++++++++ .../qmt/diagram_scene/items/packageitem.cpp | 12 ++++++++++++ 5 files changed, 55 insertions(+) diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp index bf891a855b4..658b6bdb388 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/classitem.cpp @@ -291,6 +291,18 @@ bool ClassItem::intersectShapeWithLine(const QLineF &line, QPointF *intersection QList polygons = m_customIcon->outline(); for (int i = 0; i < polygons.size(); ++i) polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + if (m_contextLabel) { + QPolygonF polygon(m_contextLabel->boundingRect()); + polygon.translate(object()->pos() + m_contextLabel->pos()); + polygons.append(polygon); + } + } return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } QPolygonF polygon; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/componentitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/componentitem.cpp index 18e0fc5622e..55e70d9b1f1 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/componentitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/componentitem.cpp @@ -164,6 +164,18 @@ bool ComponentItem::intersectShapeWithLine(const QLineF &line, QPointF *intersec QList polygons = m_customIcon->outline(); for (int i = 0; i < polygons.size(); ++i) polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + if (m_contextLabel) { + QPolygonF polygon(m_contextLabel->boundingRect()); + polygon.translate(object()->pos() + m_contextLabel->pos()); + polygons.append(polygon); + } + } return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } QPolygonF polygon; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/diagramitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/diagramitem.cpp index a8e719b8d8e..bdb1ab543fe 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/diagramitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/diagramitem.cpp @@ -126,6 +126,13 @@ bool DiagramItem::intersectShapeWithLine(const QLineF &line, QPointF *intersecti QList polygons = m_customIcon->outline(); for (int i = 0; i < polygons.size(); ++i) polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + } return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } QPolygonF polygon; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/itemitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/itemitem.cpp index 3d623d40b5e..cac585efa4e 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/itemitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/itemitem.cpp @@ -134,6 +134,18 @@ bool ItemItem::intersectShapeWithLine(const QLineF &line, QPointF *intersectionP QList polygons = m_customIcon->outline(); for (int i = 0; i < polygons.size(); ++i) polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + if (m_contextLabel) { + QPolygonF polygon(m_contextLabel->boundingRect()); + polygon.translate(object()->pos() + m_contextLabel->pos()); + polygons.append(polygon); + } + } return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } QRectF rect = object()->rect(); diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp index b5526e54239..7514d582039 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/packageitem.cpp @@ -145,6 +145,18 @@ bool PackageItem::intersectShapeWithLine(const QLineF &line, QPointF *intersecti QList polygons = m_customIcon->outline(); for (int i = 0; i < polygons.size(); ++i) polygons[i].translate(object()->pos() + object()->rect().topLeft()); + if (shapeIcon().textAlignment() == qmt::StereotypeIcon::TextalignBelow) { + if (nameItem()) { + QPolygonF polygon(nameItem()->boundingRect()); + polygon.translate(object()->pos() + nameItem()->pos()); + polygons.append(polygon); + } + if (m_contextLabel) { + QPolygonF polygon(m_contextLabel->boundingRect()); + polygon.translate(object()->pos() + m_contextLabel->pos()); + polygons.append(polygon); + } + } return GeometryUtilities::intersect(polygons, line, nullptr, intersectionPoint, intersectionLine); } QPolygonF polygon;