ImNodes::BeginNodeEditor();
// ...
// Creating nodes each frame from state arrays
for (int i = 0; i < graph.nodes.size(); i++)
{
const int id = graph.nodes[i];
const float node_x = graph.nodes_x[i];
const float node_y = graph.nodes_y[i];
ImNodes::BeginNode(id);
ImNodes::SetNodeGridSpacePos(id, ImVec2(node_x, node_y));
ImNodes::EndNode();
}
// ...
int num_selected_nodes;
if (ImNodes::IsNodesDragStarted(&num_selected_nodes))
{
std::vector<int> selected_nodes(num_selected_nodes);
ImNodes::GetSelectedNodes(selected_nodes.data());
for (int i = 0; i < selected_nodes.size(); i++)
{
const int id = selected_nodes[i];
printf("Node was just grabbed %d\n", id);
}
}
if (ImNodes::IsNodesDragStopped(&num_selected_nodes))
{
std::vector<int> selected_nodes(num_selected_nodes);
ImNodes::GetSelectedNodes(selected_nodes.data());
for (int i = 0; i < selected_nodes.size(); i++)
{
const int id = selected_nodes[i];
printf("Node was just released %d\n", id);
// Store nodes changed positions here
// const ImVec2 &new_node_pos = ImNodes::GetNodeGridSpacePos(id);
}
}
// ...
ImNodes::EndNodeEditor();
Fixes #168
Usage: