Commit Graph

2924 Commits

Author SHA1 Message Date
Lukas Tönne
9e79487c4f Fix #112588: Hide node panels when all sockets are hidden
The panel state gets a new flag to indicate if content is visible.
This gets updated in the visibility pass during node drawing.

Pull Request: https://projects.blender.org/blender/blender/pulls/113003
2023-09-28 11:24:48 +02:00
Brecht Van Lommel
488469e7c5 Fix excessive padding at bottom of nodes with panels
After refactoring in 2f1b8f59e3.
2023-09-27 19:05:41 +02:00
Iliya Katueshenock
462010c61a Fix #112439: Don't allow hiding sockets of Reroute node
Reroute node consists only of a socket, it has no body.
Don't allow hiding sockets of reroutes anymore, since it could make the
node invisible or prevent links from being connected to it.

The versioning ensures that the sockets on reroute nodes are not hidden.

Pull Request: https://projects.blender.org/blender/blender/pulls/112965
2023-09-27 18:42:46 +02:00
Hans Goudey
9e495c5b06 Geometry Nodes: Store tool group in a separate editor property
This enables switching back and forth between the modifier and tool
contexts of the geometry node editor without losing the assigned tool
node group.

See #101778

Pull Request: https://projects.blender.org/blender/blender/pulls/112926
2023-09-27 15:47:22 +02:00
Lukas Tönne
2f1b8f59e3 Cleanup: Nodes: Simplify drawing function
The node drawing function currently uses a stack-based traversal of
interface items. This is hard to read and for this purpose a recursive
function is easier to understand.

Pull Request: https://projects.blender.org/blender/blender/pulls/112860
2023-09-27 11:48:40 +02:00
Jacques Lucke
c8cc169d6f Geometry Nodes: add Inspection Index to Repeat Zone
Previously, it was only possible to inspect the data from the first iteration. That
applied to both, the viewer node as well as socket inspection. Now, there is a
new `Inspection Index` setting in the zone properties. It specifies which iteration
should be used by the inspection features.

In theory we could support features like counting the index from the end, but
that can be done separately as well, as it likely requires more UI.

Pull Request: https://projects.blender.org/blender/blender/pulls/112818
2023-09-27 11:09:39 +02:00
Hans Goudey
b49c84276c Geometry Nodes: Fix Support for extending nested menus with assets
The builtin asset catalog paths weren't properly updated after more
nesting was added to the geometry nodes add menu. This commit
resolves that and a few other issues extending menus like nested
menus in mesh edit mode. Unfortunately this requires some boilerplate
code duplicating the menu structure currently.
2023-09-26 17:01:50 -04:00
Jacques Lucke
ad169ba67a Geometry Nodes: support baking individual simulations
Previously, it was only possible to bake all simulations at once. This is great
for simple use-cases that, but in more complex setups one can have independent
simulations that should also be baked independently. This patch allows baking
individual simulation zones.

Furthermore, each simulation zone can now also have its own bake path and
simulation frame range. By default the simulation frame range is the scene frame
range, but it can also be customized on the scene or simulation zone level. The
bake path is generated based on the modifier bake path by default, but can be
set to another absolute or relative (to the .blend file) path.

The timeline drawing has been modified as well to be able to show more information
in the case when some simulations are baked and others are not. Instead of showing
a line for every simulation, it shows a condensed view of the important information
using at most two lines:
Is something baked? Is something valid or invalid? Also see #112232.

Pull Request: https://projects.blender.org/blender/blender/pulls/112723
2023-09-26 20:30:46 +02:00
Jacques Lucke
a8c0857dcf Fix: assert due to missing topology cache 2023-09-26 12:12:10 +02:00
Campbell Barton
943096b3bb Cleanup: add missing include, use nullptr literal 2023-09-26 19:50:48 +10:00
Hans Goudey
0cb01332f1 Cleanup: Consistency between asset-extended menu UI templates
Define the UI template in the namespace of its own module, and
consistently use references and const in those UI template functions.
2023-09-25 21:58:30 -04:00
Hans Goudey
916d4c9d9b Cleanup: Move BKE_screen.h to C++
See #103343
2023-09-25 17:53:11 -04:00
Hans Goudey
6875925efa Geometry Nodes: Add option to force inputs to be single values
Add a checkbox to node group inputs to force inputs to be single values
and not accept varying fields. While this could also be done more
automatically, and it could be argued that requiring the flexibility is
helpful for users who want to use attributes, there are cases where the
field inferencing doesn't work, or the "use attribute" option is just
unhelpful. People use workarounds with primitive nodes to get the same
behavior anyway.

Pull Request: https://projects.blender.org/blender/blender/pulls/112745
2023-09-25 13:39:44 +02:00
Jacques Lucke
8362563949 UI: show recently selected items at the top of searches
The goal is to make the search faster to use by dynamically adapting to the user.
This can be achieved using the simple but common approach of showing recently
selected items at the top. Note, that the "matching score" between the query and
each search item still has precedence when determining the order. So the last used
item is only at the top, if there is no other search item that matches the query better.

Besides making the search generally faster to use, my hope is that this can also
reduce the need for manually weighting search items in some places. This is
because while the ordering might not be perfect the first time, it will always be
once the user selected the element that should be at the top once.

This patch includes:
* Support for taking recent searches into account in string searching.
* Keep track of a global list of recent searches.
* Store recent searches on disk similar to recently opened files.
* A new setting in the user preferences that allows disabling the functionality.
  This can be used if deterministic key strokes are required, e.g. for automated tests.

In the future this could be improved in different ways:
* Add some kind of separator in the search list to indicate which elements are at
  the top because they have been used recently.
* Store the recent search items per search, instead of in a global list. This way
  it could adapt to the user even better.

Pull Request: https://projects.blender.org/blender/blender/pulls/110828
2023-09-25 10:56:12 +02:00
Jacques Lucke
7015d83368 Cleanup: Geometry Nodes: move functions to a more reusable place 2023-09-24 21:07:56 +02:00
Hans Goudey
c1954f9846 UI: Use "unassigned" icon for assets in modifier and node add menus
Use the same icon as in the asset browser "unassigned" item for
unassigned node group assets exposed in the modifier or node
add menus, helping to make the connection to the asset browser.
The downside is potentially drawing unnecessary attention to these
categories, but ideally they won't exist for most users anyway (since
the assets should be in proper catalogs).
2023-09-23 20:32:52 -04:00
Hans Goudey
0e1aca735a UI: Rename "No Catalog" node assets menus to "Unassigned"
After discussion with module members, it was agreed that "Unassigned"
was better because the word is already used in the asset browser, and
because it sounds more natural.
2023-09-22 14:28:35 -04:00
Hans Goudey
0fbb958417 Geometry Nodes: Disable viewer node shortcut in tool context
The viewer node doesn't work for tools, this helps clarify that.
2023-09-22 11:59:01 -04:00
Hans Goudey
5c9b628596 Fix: Extra period in menu descriptions 2023-09-22 11:20:15 -04:00
Lukas Tönne
354915cf3c Nodes: revert the inline (pass-through) socket feature
Inlined sockets in the same vertical space are no longer supported.
This removes `input_output` socket declarations, the inlining feature in
node drawing, and the `Both` option for node group interface sockets.

Versioning code splits existing node group sockets into individual
sockets again. Unfortunately some links may get lost in versioning files
using the feature, because of an unnoticed bug: Socket identifiers have
to be unique in the node group items list but inlined input/output
sockets have the same identifier. This still works for most situations
because uniqueness is only required within input/output lists. Creating
proper unique identifiers will discard any link from the previous output
socket. This cannot easily be fixed without `after_linking` versioning
code, which should be avoided.

Pull Request: https://projects.blender.org/blender/blender/pulls/112560
2023-09-22 16:56:59 +02:00
Campbell Barton
5fbcb4c27e Cleanup: remove spaces from commented arguments
Also use local enums for `MA_BM_*` in versioning code.
2023-09-22 12:21:18 +10:00
Hans Goudey
867f99c2af Cleanup: Move depsgraph headers to C++
Pull Request: https://projects.blender.org/blender/blender/pulls/110816
2023-09-22 03:18:17 +02:00
Hans Goudey
89422a7719 Fix: Crash drawing node with null panel name
Don't call `strlen` on a null pointer.
2023-09-21 14:02:22 -04:00
Brecht Van Lommel
13fac109d3 UI: support drawing buttons inside node panels
With a callback to node panels similar to the one for nodes. Used in the
Principled BSDF to place enums in the relevant panels.

Longer term we want to make enums into sockets, but even then there are
still potentially some types of buttons we want to have in panels.

Pull Request: https://projects.blender.org/blender/blender/pulls/112591
2023-09-21 18:46:30 +02:00
Brecht Van Lommel
8e602d914b UI: draw node panels in material properties editor
The layout for this is not great but consistent with existing
collapse/expand functionality there. There are ideas to replace this
entire material properties drawing longer term, but for 4.0 it's
important to show the panels in some way.

Pull Request: https://projects.blender.org/blender/blender/pulls/112591
2023-09-21 18:46:30 +02:00
Brecht Van Lommel
a4a5ac545c UI: shorten node socket labels when they start with the panel name
Shortening names based on context is something we do in the user
interface throughout Blender. This is a simple automatic mechanism to do
it for node panels as well, which significantly improves the Principled
BSDF layout.

We want the properties and sockets to be identifiable outside of the
panel contextcontent, for example in the animation editor, API docs, or
when exposing a single socket as a group input. So making the actual
name shorter is not an option.

Pull Request: https://projects.blender.org/blender/blender/pulls/112591
2023-09-21 18:46:30 +02:00
Lukas Tönne
36b90acde1 Node drawing: fix uninitialized node color return value
Bug in #112658.
2023-09-21 12:07:18 +02:00
Lukas Tönne
fdf1040532 Fix #112462: Panel buttons remain active after redrawing
This seems to be an issue deep inside UI drawing code. The nodes render
the panel button in the correct place,
but it doesn't correctly update the button state after a redraw, unless
the mouse is moved. The button is still in a `BUTTON_STATE_HIGHLIGHT`
state after drawing, and a mouse press will trigger it regardless of
where the mouse cursor actually is.

A common hack to force a reset of the button state is to add a fake
mouse move event using `WM_event_add_mousemove`.

Pull Request: https://projects.blender.org/blender/blender/pulls/112503
2023-09-21 12:05:08 +02:00
Lukas Tönne
b00c2f9ac4 Fix #112622: draw_color_simple is optional for custom nodes
Use magenta fallback color for sockets without a `draw_color_simple`
callback. This is not ideal, but without a context or node instance
the older `draw_color` callback can't be used.

Pull Request: https://projects.blender.org/blender/blender/pulls/112658
2023-09-21 11:25:55 +02:00
Jacques Lucke
2561d0038d Node: use new zone type to deduplicate code
This was missing from 3eb7e453e4.
2023-09-20 17:21:33 +02:00
Jacques Lucke
3eb7e453e4 Nodes: add internal node zone type
The goal is to reduce redundancy by abstracting over the different types of node
tree zones. This makes it easier to add new zone types and makes the intend of
code more clear. For example, now it is more obvious what code deals with zones
in general and what does simulation specific things.

Pull Request: https://projects.blender.org/blender/blender/pulls/112531
2023-09-20 14:40:56 +02:00
Brecht Van Lommel
0706cfeea0 UI: improve vertical spacing in node panels
There was too little in some places, especially at the top of panel headers.

Pull Request: https://projects.blender.org/blender/blender/pulls/112593
2023-09-20 11:56:40 +02:00
Lukas Tönne
78315faf8f Fix #112490: Always draw socket icons in "hidden" nodes
In #112326 the socket visibility functions were updated to take the
open/closed state of panels into account for visibility of the socket
icon. However, in "hidden" (collapsed) nodes the panels should be
ignored entirely, drawing all sockets on the root level. This requires
looking at the node flags to determine socket icon visibility, so a
simple method of `bNodeSocket` is not sufficient.

This patch moves the more complex visibility queries for sockets into
`bNode`, where both node and socket flags can be accessed. These should
be used for actual visibility rather than the plain flag accessors on
`bNodeSocket`.

Renamed `is_visible_or_panel_closed` back to just `is_visible`, the
other `is_visible` variant is now integrated in `bNode::is_socket_drawn`.

Pull Request: https://projects.blender.org/blender/blender/pulls/112520
2023-09-19 10:47:21 +02:00
Lukas Tönne
5d77d8d832 Fix #112233: Panel collapsed state should not hide socket links
#112019 included open/closed state of the parent panel in socket
visibility calculation. This prevents dragging links, but also disables
other features that should still work, such as drawing links.

A narrower condition is needed for icon visibility vs. general socket
visibility. The cases which use the new `is_icon_visible` condition:
- Drawing socket selection outlines (same as unselected sockets)
- Drawing multi-input sockets (same as unselected sockets)
- `node_find_indicated_socket`, used by a wide range of mouse click
  operators, including the link-drag operator that was cause for
  #112019.

Cases using the original `is_visible` (true even if parent panel is
collapsed):
- `nodeLinkIsHidden` draws links only when at least one socket is
  visible.
- `node_update_basis`, sockets still added to layout even if icon isn't
  rendered.
- `node_update_hidden`, panels are ignored for "hidden" nodes, all
  sockets are rendered.
- `NODE_OT_link_make` operator for finding "best" sockets to connect.
- `node_link_viewer` finding sockets to connect to a viewer node.
- `get_main_socket` used for insert-on-links (find sockets to splice
  into) and some shader previews
- `node_gather_link_searches`, suggestions for adding a new node at the
  end of a link.

Pull Request: https://projects.blender.org/blender/blender/pulls/112326
2023-09-15 12:57:56 +02:00
Hans Goudey
d2d4de8c71 Geometry Nodes: Show uncategorized assets in separate menus
In the add modifier menu, 3D viewport menus for node tools, and the node
editor add menu, assets not in catalogs are added to an "No Catalog"
menu rather than not being accessible at all.

This makes the default behavior when adding a node tool "not broken"
so at least something happens by default. The question of "How do I
add a catalog?" is much better than "Why didn't anything happen?"

Implements #111529
See #101778

---

![image](/attachments/b943e2c4-f660-4812-b9ab-f7c116b68b98)
![image](/attachments/e6ee94d7-cd14-475f-8fa6-abcc6774fd7e)
![image](/attachments/b1718d0c-4182-49c5-867a-1399082e98f0)

Pull Request: https://projects.blender.org/blender/blender/pulls/112355
2023-09-14 17:35:24 +02:00
Lukas Tönne
4aa3735d0f Node drawing: Fix unused variables in release builds
Pull Request: https://projects.blender.org/blender/blender/pulls/112384
2023-09-14 16:33:08 +02:00
Lukas Tönne
9433a1701a Nodes: Support for input/output sockets in same vertical space
Declarations can use the `add_input_output` method to create a combined input/output socket. The drawing code supports moving sockets up one vertical slot to align them with the predecessor.

Closes #112235

Pull Request: https://projects.blender.org/blender/blender/pulls/112250
2023-09-14 16:08:04 +02:00
Lukas Tönne
d2f4ebcd6a Fix #112331: Add update tags directly in bNodeTreeInterface API methods
Calling an API function after the node panels patch does not internally
tag the node tree with `NTREE_CHANGED_INTERFACE` any more, because the
node tree is not directly accessible from `bNodeTreeInterface`. Before
node panels the API functions for interfaces could tag the tree directly
for later update consideration, which now requires explicit tagging
calls.

The fix is to add a flag and mutex directly to `bNodeTreeInterface`, so
API methods can tag after updates. This mostly copies runtime data
concepts from `bNodeTree`. The `ensure_interface_cache` method is
equivalent to `ensure_topology_cache` and should be called before
accessing `interface_inputs` and similar cache data.

Pull Request: https://projects.blender.org/blender/blender/pulls/111741
2023-09-14 14:13:07 +02:00
Jacques Lucke
346b83ca01 Fix #112333: assert when creating node group with unavailable link 2023-09-14 12:41:43 +02:00
Jacques Lucke
e914004678 Fix #111411: crash with group node that references linked-but-not-found group
These group nodes currently don't have a socket declaration for every socket.
Instead we just don't touch the sockets at all so that things have not changed
when the node group is found again.
2023-09-14 11:51:05 +02:00
Campbell Barton
c7cd1c8d0b Cleanup: use enum literals for space_type & region_type arguments
Also remove unique names for grease pencil keymaps.
There was not advantage in having separate names for each grease pencil
key-map.
2023-09-14 13:36:34 +10:00
Lukas Tönne
150f226797 Fix #112330: Group sockets not initialized when created by link-drag
The link-drag operator creates the group interface socket, but then did
not initialize the default value.

Pull Request: https://projects.blender.org/blender/blender/pulls/112337
2023-09-13 17:10:08 +02:00
Lukas Tönne
7b680850c6 Fix for node group "make" adding sockets in wrong order
Making a group from a single node that has some connections will add the
connected outputs and inputs first, then add all unconnected outputs and
inputs. This can lead to incorrect socket order (out-in-out-in).

This patch integrates unconnected sockets into the main outputs/inputs
loops to ensure all outputs are added before inputs.

Pull Request: https://projects.blender.org/blender/blender/pulls/112281
2023-09-12 14:27:09 +02:00
Hans Goudey
974edc5885 Cleanup: Remove unnecessary "add node search"
Now that specific menus can be searched directly (see 7f9d51853c),
there is no need to maintain separate search functionality for adding
nodes. This PR removes the add node search. In a way this brings us
closer to the `NodeItem` situation before, but the setup is more
flexible since the menus are more standard and easier to customize.

In the few ways we customized the node search items before, this gives
us the same results as before. Overall the searching is less flexible,
but I think that is just a tradeoff we have to accept for the simplicity
of searching menus. In the future menus could be made more dynamic,
with each builtin node's menu path stored on the node type, similar to
assets. That might be a nice compromise. In the meantime this code
is just dead weight.

Pull Request: https://projects.blender.org/blender/blender/pulls/112056
2023-09-11 18:36:09 +02:00
Lukas Tönne
0b3d473f12 Nodes: Draw node buttons between outputs and inputs for custom layouts
Node buttons/options are conventionally drawn between outputs and
inputs. With custom node layouts this is not so clear any more since
inputs and outputs can be mixed.

This patch simply draws buttons right before the first input, or at the
bottom if a node does not have input sockets. This ensures a layout
compatible with standard node drawing and does not require extra work.

Eventually an explicit declaration method could place buttons explicitly
but for now this yields a useful default behavior.

![Screenshot_20230911_142856](/attachments/6c341bf5-0f89-432b-8eaa-cbbe7a46e764)

Pull Request: https://projects.blender.org/blender/blender/pulls/112228
2023-09-11 14:40:31 +02:00
Lukas Tönne
6d5c52eb48 Fix node group socket order when making a group from a single node
This is a special case in the node group operator which exposes all the
sockets when only one node is selected. This was still creating sockets
in inputs..outputs order, unlike the general case with multiple nodes.

Followup fix for #112073

Pull Request: https://projects.blender.org/blender/blender/pulls/112226
2023-09-11 14:25:02 +02:00
Hans Goudey
75d788f2d3 Nodes: Support shortcuts for adding specific node group assets from menu
Use the same method for passing assets to an operator as the newer node
group operator menus. This supports quick favorites and shortcuts for
specific assets.

Also fix a crash when a dynamic submenu is added to quick favorites.
That still doesn't work though-- the menu ends up being empty.
2023-09-11 08:20:39 -04:00
Iliya Katueshenock
95efb2ea83 Fix #111832: Move the Node Group Icon to a first position in header
Node Group icon have a ID-counter widget and can not be drawn
sequentially with other icons without extra offset. To fix icon
overlapping and add more consistency, icon, specific for such node,
should be first in its header.

Pull Request: https://projects.blender.org/blender/blender/pulls/112142
2023-09-08 14:22:06 +02:00
Lukas Tönne
21953e47dc Fix #112073: Add all group outputs first, followed by all inputs
This keeps initial node groups using conventional outputs..inputs
layout.

Pull Request: https://projects.blender.org/blender/blender/pulls/112076
2023-09-07 15:08:52 +02:00
Lukas Tönne
0691ac622f Fix #111969: Remove gaps between panels and fill in the background
Panels are supposed to fill in the background.

Pull Request: https://projects.blender.org/blender/blender/pulls/112078
2023-09-07 15:07:06 +02:00