Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - rhard/imgui-node-editor: Node Editor using ImGui prototype · GitHub
Skip to content

Repository files navigation

Node Editor in ImGui

About

This is an implementaion of node editor with ImGui-like API.

Project purpose is to serve as a basis for more complex solutions like blueprint editors.

Preview

Project is a prototype. What that means in practise:

  • API will break. Current API does not help user do the right things and require some head banging on the wall to understand it. Can be done much more better.
  • Code is hacked to test ideas, not to pursue production quality
  • Relies on modified version of ImGui. There is a goal to use vanila version of ImGui and provide hacked-in code as an extension.
  • Keeping dependencies minimal is not a priority. In the long run C++14 without non ImGui dependencies should be a minimum. Currently you will find parts of C++17 and use of picojson.
  • If you have issues with editor, please let me know. I'm not going to promise immediate fix but I for sure will take them into account while reworking code.

Code

Editor code is in NodeEditor directory alone. Project can be build with examples with help of CMake 3.8. macOS and Linux require GLFW3 to be installed on your system.

Windows:
cmake -H. -BBuild -G "Visual Studio 15 2017 Win64"
macOS:
cmake -H. -BBuild -G "Xcode"
Linux:
cmake -H. -BBuild -G "Unix Makefiles"
Build:
cd Build
cmake --build Build --config Release

You will find examples in Build\Bin directory.

Source code target to be comatible with C++11. Due to last minute pulls it require C++17. This requirement will soon be removed. Sorry for inconvenience.

Note: Editor code has pending refactor. Since almost a year has passed without time to do it, please don't tell me code style is horrible. It was and still is a prototype.

Public API

Public API of node editor is located in NodeEditor.h. For an examples of usage, please see Examples.

Minimal example of simple node can be found in Simple.cpp. If you do not see any node, press 'F' in editor to focus on content.

# include"Application.h"
# include"NodeEditor.h"namespaceed= ax::NodeEditor;
static ed::EditorContext* g_Context = nullptr;
voidApplication_Initialize()
{
g_Context = ed::CreateEditor();
}
voidApplication_Finalize()
{
ed::DestroyEditor(g_Context);
}
voidApplication_Frame()
{
ed::SetCurrentEditor(g_Context);
ed::Begin("My Editor");
int uniqueId = 1;
// Start drawing nodes.ed::BeginNode(uniqueId++);
ImGui::Text("Node A");
ed::BeginPin(uniqueId++, ed::PinKind::Target);
ImGui::Text("-> In");
ed::EndPin();
ImGui::SameLine();
ed::BeginPin(uniqueId++, ed::PinKind::Source);
ImGui::Text("Out ->");
ed::EndPin();
ed::EndNode();
ed::End();
}

Result:

00-Simple.png

Dependencies

Code is using own copy of ImGui v1.50 WIP with modifications:

  • New: Stack Based Layout implementation
  • New: Added option to disable creation of global context. That simplifies management of multi-context environment by removing issues with static initialization. Required in work derived from this project.
  • New: Add ImMatrix for stacked transformation. This is pulled from derived project.
  • Changed: Made ImGuiStyle shareable between contexts. Required in work derived from this project.
  • Changed: Don't clamp negative mouse coordinates to 0. Clamping caused problems with dragging nodes and canvas scrolling. Also was inconsistent behaviod since right bottom edges of DisplaySide did not clamp.
  • Changed: Ability to scale polygon AA fringe. This was needed to achieve nice looking zoomed contend.

As a backend modified imgui_impl_dx11 is used. Changes:

  • Add: Add ability to create custom RGBA textures.
  • Fixed: Return values of WndProc are now correct. (already fixed in main branch)
  • Changed: Font atlas texture is gamma corrected and clamped
  • Changed: ImGui cursors are mapped to native cursors. It was easy to get this wrong, and I did in first try. WinAPI is a funny thing.

About

Node Editor using ImGui prototype

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages