Go to the documentation of this file.
34 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
38 #include <MemoryX/interface/gui/GraphVisualizerInterface.h>
42 #include <QGraphicsEllipseItem>
43 #include <QGraphicsLineItem>
44 #include <QGraphicsScene>
45 #include <QMainWindow>
46 #include <QMouseEvent>
48 #include <MemoryX/interface/components/GraphNodePoseResolverInterface.h>
59 #include <MemoryX/gui-plugins/GraphVisualizerPlugin/ui_GraphVisualizerGuiPlugin.h>
63 class GraphVisualizerGraphicsEllipseItem;
64 class GraphVisualizerGraphicsLineItem;
66 class GraphVisualizerConfigDialog;
67 class GraphVisualizerWidget;
69 class MouseEventProcessor;
80 Q_PLUGIN_METADATA(IID
"ArmarXGuiInterface/1.00")
87 return "GraphVisualizerGuiPlugin";
217 public GraphVisualizerInterface
231 using EdgeId =
const std::pair<const std::string, const std::string>;
246 return "MemoryX.GraphVisualizerGUI";
252 return QIcon{
"://icons/graph_visu.svg"};
268 const std::string& node2,
269 const Ice::Current& = Ice::emptyCurrent)
override
271 return (edges.find(toEdge(node1, node2)) != edges.end());
275 hasNode(
const std::string&
id,
const Ice::Current& = Ice::emptyCurrent)
override
277 return (nodes.find(
id) != nodes.end());
282 void addEdge(
const std::string& node1Id,
283 const std::string& node2Id,
284 const Ice::Current& = Ice::emptyCurrent)
override;
285 void addNode(
const GraphNodeBasePtr& node,
286 const Ice::Current& = Ice::emptyCurrent)
override;
289 const std::string& node2Id,
290 bool highlighted =
true,
291 const Ice::Current& = Ice::emptyCurrent)
override;
293 bool highlighted =
true,
294 const Ice::Current& = Ice::emptyCurrent)
override;
296 void clearEdges(
const Ice::Current& = Ice::emptyCurrent)
override;
297 void clearGraph(
const Ice::Current& = Ice::emptyCurrent)
override;
299 void resetHighlight(
const Ice::Current& = Ice::emptyCurrent)
override;
301 void redraw(
const Ice::Current& = Ice::emptyCurrent)
override;
311 Ui::GraphVisualizerGuiPlugin
ui;
317 void addKitchenGraph();
319 void selectedSceneChanged(
int i);
320 void updateSceneList();
328 void nodeTableDoubleClicked(
int row,
int);
333 void edgeTableDoubleClicked(
int row,
int);
339 void nodeDoubleClicked(
NodeId id);
345 void edgeDoubleClicked(
EdgeId id);
352 void viewRotatedClock();
359 void viewRotatedCounterClock();
364 void transformView();
371 bool addNewEdge(
const std::string& from,
const std::string& to);
372 void addNewEdgeBoth();
373 void addNewEdgeStartEnd();
374 void addNewEdgeEndStart();
376 void addNewGraphNode();
377 void editGraphNode();
389 GraphNodeBasePtr node;
399 QGraphicsEllipseItem* graphicsItem;
404 int tableWidgetNodesIndex;
421 QGraphicsLineItem* graphicsItem;
425 int tableWidgetEdgesIndex;
440 toEdge(
const std::string& node1,
const std::string& node2)
442 return EdgeId{node1, node2};
449 void updateEdge(
const EdgeId&
id);
455 void updateNode(
const NodeId&
id);
457 void setEditFields(
const NodeData& node);
462 std::string debugDrawerTopicName;
472 QPointer<GraphVisualizerConfigDialog> dialog;
474 float getYawAngle(
const armarx::PoseBasePtr& pose)
const;
483 QPointer<QGraphicsScene> scene;
488 std::map<std::string, NodeData> nodes;
493 std::map<EdgeId, EdgeData> edges;
503 std::string debugDrawerLayerName;
505 bool editStartNodeNext;
507 std::string priorKnowledgeProxyName;
508 memoryx::PriorKnowledgeInterfacePrx priorKnowledgePrx;
509 memoryx::GraphNodePoseResolverInterfacePrx gnpr;
510 memoryx::GraphMemorySegmentBasePrx graphSeg;
512 QString lastSelectedSceneName;
523 void loadScene(
const std::string& xmlFile);
549 QGraphicsItem* parent =
nullptr) :
550 QGraphicsEllipseItem{x, y, width, height, parent},
552 parentVisuWidget(visuWidget)
564 parentVisuWidget.nodeDoubleClicked(
id);
593 QGraphicsItem* parent = 0) :
594 QGraphicsLineItem{x1, y1, x2, y2, parent},
id{name}, parentVisuWidget(visuWidget)
607 parentVisuWidget.edgeDoubleClicked(
id);
632 bool eventFilter(QObject* obj, QEvent* event)
override;
QString getPluginName() override
GraphVisualizerGraphicsLineItem(GraphVisualizerWidget &visuWidget, EdgeId name, qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent=0)
Required to override the double click event.
This plugin provides a widget used to visualize an undirected graph and draw it to a debug layer.
Required to override the double click event.
GraphVisualizerGraphicsEllipseItem(GraphVisualizerWidget &visuWidget, NodeId name, qreal x, qreal y, qreal width, qreal height, QGraphicsItem *parent=nullptr)
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) override
~GraphVisualizerGraphicsLineItem() override
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *) override
GraphVisualizerWidget::EdgeId EdgeId
GraphVisualizerWidget::NodeId NodeId
std::shared_ptr< GraphVisualizerWidget > GraphVisualizerGuiPluginPtr
Boost shared pointer to a GraphVisualizerWidget.
~GraphVisualizerGraphicsEllipseItem() override
MouseEventProcessor(GraphVisualizerWidget *gvw)
GraphVisualizerGuiPlugin()
GraphVisualizerWidget * gvw
bool eventFilter(QObject *obj, QEvent *event) override