Nelarius / imnodes

A small, dependency-free node editor for dear imgui
MIT License
2.04k stars 249 forks source link

Added callback functions for Grab/Release Node events handling #186

Open xahon opened 1 year ago

xahon commented 1 year ago

Fixes #168

Usage:

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();