Enhancement Ideas
dephora opened this issue · 5 comments
First, thank you for this fantastic project. I'd like to suggest some ideas from Unreal, Unity, Houdini, and DaVinci Resolve node editors. I began adding these features to my project outside of NodeNetwork but it makes more sense that they are in NN itself. I will limit it to a few initially.
-
Create Node Context Menu: All programs above have "tab / space" context menus on the network itself. Unreal is the only one with a "permanent" list by default. Create Node Context frees up screen real estate, is faster to use, allows you to drop a node where your mouse is, and has shortcuts by default, i.e. the "M" key dropping a multiply node in Unreal. I think Houdini does this best.
-
Create Node from Connection: Requires Create Node Context Menu above. When dragging a connection and releasing, the menu displays.
-
Node "Sets" / "Clusters" : Synonymous to groups in Unity, and comment nodes in Unreal. Allow nodes to be "clustered" together without putting them in a sub-network. Easy to move them as groups around the network without the need of selecting multiple.
-
Collapse / Expand All Previews: As it says, just collapses / expands all nodes in the network. This could be housed in a right click context menu with other options while using something other than right click for the current cutline.
-
Disable Node: See Houdini Bypass, Unreal Node Disabling. First thing I personally added, this one can be tricky depending on how NodeNetwork is used so I understand hesitancy in adding it, however it's extremely convenient.
Thank you for the suggestions. A few notes:
- Create Node Context Menu: Sounds useful, not that complicated to add. I'll look into it.
- Create Node from Connection: While intuitively useful, its semantics are not entirely clear to me. When I release the mouse, and I select a node type to create, which input/output should the connection be made to? Should a second popup appear with the inputs/outputs?
- Node "Sets" / "Clusters": Seems useful, but quite a bit of work. Its on the TODO list, but no promises for this one.
- Collapse / Expand All Previews: Sure, once the context menu is in place, this is just 5 lines of code.
- Disable Node: The semantics of this feature seem very application dependent. (e.g. how can you 'bypass' a multiply node in the calculator example?) It's probably best to implement this on a per-application basis.
All of that sounds great. I'll go into further detail as I was a bit vague in certain instances.
Create Node Context Menu
I think this is by far the most useful of the bunch in terms of UX.
I realized I forgot to point out the differences in context menus when I read your response to Collapse / Expand Previews. Unity differs from Houdini and Unreal here.
Unity
First seen is Unity's right click context menu contains options related to the editor itself or global node operations. Selecting "Create Node" is the same operation as pressing "spacebar", which is seen second.
Unreal
Right click context menu is the "Create Node" menu, seen further down in the post. There isn't a separate menu as seen in Unity, these operations are handled in a toolbar menu.
Houdini
Same as Unreal but both "tab" and "right-click" are the same operation.
Create Node from Connection
Useful for discovery for those not as proficient with the software / nodes. I rarely see experienced users use this unless they are in unfamiliar node territory.
Unity
Unity displays a tree with the acceptable ports for that node. (Note: I am dragging a connection from the "Branch" node "Out" port, it's just not captured. It's semi transparent until a selection is made.)
Unreal
Unreal handles this by defaulting to the first port that can accept that specific type. The context menu only displays nodes that can accept the incoming type.
Houdini
Varies depending on Network type (VFX, etc). This is similar to how Unity has different networks / graphs based on VFX / shaders.
Disable Node
Yeah I agree with it being potentially tricky. I'm currently doing it with LINQ queries and while it works, there has to be a more efficient "global" way. I need to dig into the Unreal source and see if they handle it on a per node basis.
Thanks again for the time and effort put into this.
@Wouterdek - I sent you a LinkedIn request / message. If you could check that at some point I'd appreciate it.
I've implemented the first, second and fourth item on your list in branch feature/AddNodeContextMenu (commit 9cc4775)
Does this match what you had in mind?
Yeah, that's fantastic! Really appreciate you adding it so quickly.
Right, the changes have been merged into master.
I'll close this issue and open a separate one for the clusters.