37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
|
|
#include "locateNode.h"
|
||
|
|
|
||
|
|
#include <QtCore/QList>
|
||
|
|
#include <QtWidgets/QGraphicsScene>
|
||
|
|
|
||
|
|
#include "nodeGraphicsObject.h"
|
||
|
|
|
||
|
|
NodeGraphicsObject *locateNodeAt(QPointF scenePoint,
|
||
|
|
QGraphicsScene &scene,
|
||
|
|
QTransform const &viewTransform)
|
||
|
|
{
|
||
|
|
// items under cursor
|
||
|
|
QList<QGraphicsItem *> items = scene.items(scenePoint,
|
||
|
|
Qt::IntersectsItemShape,
|
||
|
|
Qt::DescendingOrder,
|
||
|
|
viewTransform);
|
||
|
|
|
||
|
|
// items convertable to NodeGraphicsObject
|
||
|
|
std::vector<QGraphicsItem *> filteredItems;
|
||
|
|
|
||
|
|
std::copy_if(items.begin(),
|
||
|
|
items.end(),
|
||
|
|
std::back_inserter(filteredItems),
|
||
|
|
[](QGraphicsItem *item) {
|
||
|
|
return (qgraphicsitem_cast<NodeGraphicsObject *>(item) != nullptr);
|
||
|
|
});
|
||
|
|
|
||
|
|
NodeGraphicsObject *node = nullptr;
|
||
|
|
|
||
|
|
if (!filteredItems.empty()) {
|
||
|
|
QGraphicsItem *graphicsItem = filteredItems.front();
|
||
|
|
node = dynamic_cast<NodeGraphicsObject *>(graphicsItem);
|
||
|
|
}
|
||
|
|
|
||
|
|
return node;
|
||
|
|
}
|