Commit Graph

38808 Commits

Author SHA1 Message Date
Almaz-Shinbay
485c98cc2c Outliner: Port pose base elements to new tree-element code design
No user visible changes expected.

Part of #96713, continuation of work started in 249e4df110 and 2e221de4ce.
Refer to these for a motivation and design overview.

Adds a new class for pose base elements.

Pull Request: https://projects.blender.org/blender/blender/pulls/110806
2023-08-14 12:36:06 +02:00
Julian Eisel
5dcf704324 Refactor: Solve invalid icon-id enum values, use type alias
Some code attempted to use `BIFIconID` instead of `int` to pass around
icon-ids. Problem is, that this is just a subset of the allowed ids,
more icons may be created at runtime and extend the range of valid
icon-ids. Such icons could give runtime warning prints.

Idea is to use a `using BIFIconID = int;` instead. This way there is
still a descriptive type name, while the whole dynamic range of possible
icon-ids is supported.

Additionally multiple `using BIFIconID = int;` declarations are valid,
so we can place these in multiple headers and use the type name in APIs
instead of just `int`, whithout having to include a single header
defining them. A type mismatch (one instance differs from the others)
will result in a compiler error.

Pull Request: https://projects.blender.org/blender/blender/pulls/111052
2023-08-14 12:06:35 +02:00
Richard Antalik
bf001961f3 Fix #110861: VSE operators disregards locked strips
Operators slip, swap and split operated on strips that are locked.
2023-08-14 05:54:27 +02:00
Richard Antalik
675b66d852 Fix #110846: VSE tools region not updated with other regions
Add listener to the region.
2023-08-14 04:07:15 +02:00
ChengduLittleA
337c47275c Fix #110917: Multiply UI_SCALE_FAC to view scroll operators
Previously the delta value is hard coded (40), this would be too slow on
high DPI screens. Now multiply that by `UI_SCALE_FAC` will solve the
issue.

Pull Request: https://projects.blender.org/blender/blender/pulls/110940
2023-08-13 04:57:36 +02:00
Guillermo
0f501865a5 Fix #111073: Crash when F3 is pressed
Initializing a string whit `nullptr` causes undefined behavior.

Pull Request: https://projects.blender.org/blender/blender/pulls/111075
2023-08-12 22:21:50 +02:00
Germano Cavalcante
6332eecda0 Fix #110970: knife project is broken
Error in 5cdec2f12a

`ED_view3d_win_to_segment_clipped` returns the ray_end directly.

The code was treating it as if it were a direction.
2023-08-12 10:47:52 -03:00
Campbell Barton
848e808b8a Cleanup: various non-functional C++ changes, correct doxy groups 2023-08-12 18:48:20 +10:00
Campbell Barton
311fa9768d Cleanup: spelling in comments 2023-08-12 16:29:51 +10:00
Campbell Barton
86c4ce66af Cleanup: pass ICON_NONE instead of zero to UI functions 2023-08-12 16:29:49 +10:00
Charles Wardlaw
cf5666345d USD IO: Generic Attributes Support
Part 2 of the patch I wrote moving USD over to the new Attributes API
for Colors: https://projects.blender.org/blender/blender/pulls/105347

This patch adds support for more types of generic Mesh Attributes.
Attribute Types and Domains are converted to their USD counterparts
where possible.  For example, float Attributes used for modifying
shader masks or int Attributes for grouping are now able to be
round-tripped.  Due to the differences in the two systems some
conversions are necessary, but attempts were made to keep data
loss to a minimum.

If you export to USDA, you'll find the Attributes get prefixed with
a "primvars:" namespace; this is expected behavior and identifies
the exported Attributes as different from other USD Schema.

Not supported:
- Edge domain.  There doesn't seem to be a proper conversion for
this in USD.  One exception is for creasing and sharpness, but if
they are desired I can add them in a future patch.

Co-authored-by: kiki <charles@skeletalstudios.com>
Co-authored-by: Charles Wardlaw <cwardlaw@nvidia.com>
Co-authored-by: Hans Goudey <h.goudey@me.com>
Co-authored-by: Charles Wardlaw <kattkieru@users.noreply.github.com>
Co-authored-by: Michael Kowalski <makowalski@nvidia.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/109518
2023-08-11 23:47:17 +02:00
Hans Goudey
0bd3c23f1b Fix: Build error on windows after recent commit
See f0467b4615

Pull Request: https://projects.blender.org/blender/blender/pulls/111054
2023-08-11 21:15:04 +02:00
Hans Goudey
f0467b4615 Cleanup: Return std::string from operator name and description callbacks
With the end goal of simplifying ownership and memory management,
and allowing the use of `get_name` in contexts without statically
allocated strings, use `std::string` for the return values of these two
operator type callbacks instead of `const char *` and `char *`.

In the meantime things get uglier in some places. I'd expect `std::string`
to be used more in the future elsewhere in Blender though.

Pull Request: https://projects.blender.org/blender/blender/pulls/110823
2023-08-11 19:11:27 +02:00
Almaz-Shinbay
55117f20ee Outliner: Port pose group elements to new tree-element code design
No user visible changes expected.

Part of #96713, continuation of work started in 249e4df110 and 2e221de4ce.
Refer to these for a motivation and design overview.

Adds new classes for pose group elements.

Pull Request: https://projects.blender.org/blender/blender/pulls/110587
2023-08-11 17:36:09 +02:00
Brecht Van Lommel
0810d2ec54 Fix build errors, after merging PR not updated for latest changes 2023-08-11 17:06:44 +02:00
Colin Marmond
cad95478ce Nodes: add ability to preview shader output nodes(AOV, group, material)
AOV/group/material output nodes can now be previewed the same way the
other nodes are.

This patch also improves the socket detection of the preview by using
`get_main_socket` which takes care of the priorities of the sockets.

Pull Request: https://projects.blender.org/blender/blender/pulls/110945
2023-08-11 16:47:56 +02:00
Colin Marmond
c966d7c2f9 Nodes: stop the shader preview job when changing the viewed nodetree
When the user goes in an out a nested node-tree, the preview job should be stopped.

Pull Request: https://projects.blender.org/blender/blender/pulls/111041
2023-08-11 16:13:24 +02:00
Colin Marmond
b3485c29a8 Nodes: use flat previews for shader nodes by default
For shader nodes, use the flat preview scene as default.

A new setting in the overlay panel adds the possibility to
use the material preview scene for the node previews.

Pull Request: https://projects.blender.org/blender/blender/pulls/110958
2023-08-11 16:12:58 +02:00
Almaz-Shinbay
d5c7608b39 Outliner: Port view layer elements to new tree-element code design
No user visible changes expected.

Part of #96713, continuation of work started in 249e4df110 and 2e221de4ce.
Refer to these for a motivation and design overview.

Adds a new class for view layer elements.

Pull Request: https://projects.blender.org/blender/blender/pulls/110920
2023-08-11 14:52:08 +02:00
Almaz-Shinbay
d9de0a4725 Fix missing ShaderFx pointer to TreeElementGPencilEffect constructor
Fix the crash that 1f722a6d01 causes when opening files with GPv3 objects.

Pull Request: https://projects.blender.org/blender/blender/pulls/110585
2023-08-11 12:34:48 +02:00
Bastien Montagne
203e6e2b41 Fix (unreported) Several OperatorType.get_name not doing translation.
`OperatorType.get_name` callback is supposed to return strings directly
usable in the UI, i.e. translated if needed.

Several callbacks did not, noticiably the generic
`ED_select_pick_get_name` and `ED_select_circle_get_name` ones.

And the `sculpt_color_filter_get_name` was not using available RNA
helpers for enum items has it should have.

Finally, `RNA_property_enum_name_gettexted` and
`RNA_property_enum_item_from_value_gettexted` were also not using the
optimal higher-level translation API.

Noticed while reviewing !110776.
2023-08-11 12:00:16 +02:00
Amelie Fondevilla
5b0f200ea1 GPv3: Fix layer renaming synchronization from the dopesheet
Renaming a layer (or a layer group) from a dopesheet was not synchronized with the rest of blender.
This patch fixes this by adding the proper notifiers to the RNA layer/layer group properties, and by updating the listeners of the layer treeview (properties panel), and the outliner to redraw the area if a layer was renamed.

Pull Request: https://projects.blender.org/blender/blender/pulls/111038
2023-08-11 11:31:30 +02:00
Philipp Oeser
3c26f84225 Vertex Paint: Add option to lock alpha for 'Set Vertex Colors'
It is a common practice in gamedev to rely on coding various data into
the alpha channel of the mesh and there was no way to preserve that when
using the `Set Vertex Colors` operator (would always sets the Alpha component to '1').

Now add an "Affect Alpha" option (similar to what we have for brushes)
and when that is disabled, existing alpha is locked.

Fixes #110014

Pull Request: https://projects.blender.org/blender/blender/pulls/111002
2023-08-11 10:39:13 +02:00
Campbell Barton
d3353eb34b Cleanup: use const variables, reduce right-shift in unti.cc
Also assert the 3D view fixed size buffer is large enough.
2023-08-11 18:12:45 +10:00
Campbell Barton
8ce5a24b77 PyAPI: add preferences.filepaths.extension_repos.new/remove methods
Provide convenient access to adding/removing repositories,
useful for testing.
2023-08-11 17:37:12 +10:00
Campbell Barton
fd920ba39f Fix crash loading a blend file with an unknown area type 2023-08-11 17:13:34 +10:00
Jacques Lucke
cc4d5c432c RNA: move headers to C++
Also see #103343.

Pull Request: https://projects.blender.org/blender/blender/pulls/111022
2023-08-10 22:40:27 +02:00
Harley Acheson
c4fb34a3f7 Fix #110085: Ignore Scroller Zone when on a Screen Edge
When the mouse cursor is between editors ignore scroller zones, which
overflow their areas, so that screen edges are always detected.

Pull Request: https://projects.blender.org/blender/blender/pulls/110402
2023-08-10 20:41:44 +02:00
Julian Eisel
c19caff2dc Cleanup: Include layer tree element in assert check 2023-08-10 17:58:31 +02:00
Julian Eisel
a89c104972 Cleanup: Don't set unused ID code member for Outliner layer base element
This is one of the many ID elements that should be ignored from further
processing in this if-else block. It would only set the
`TreeElement.idcode` (and call an assert) for this, which wasn't used
elsewhere. We're trying to untangle the code step by step and make it
more clear & explicit which data is set where, changes like this help.
2023-08-10 17:54:01 +02:00
Christoph Lendenfeld
8ddb8e0d05 Animation: Blend To Ease Slider
This PR blends the selected keyframes to an ease-in or ease-out curve.
The difference to the existing ease slider is that this one blends,
while the other snaps to the ease curve

Co-authored-by: Ares Deveaux <aresdevo@gmail.com>
Pull Request: https://projects.blender.org/blender/blender/pulls/110566
2023-08-10 17:51:14 +02:00
Falk David
d14289c46a GPv3: Fix: Assert hit when exiting paint mode
The function `ed_object_mode_generic_exit_ex` was missing
a case for the `OB_MODE_PAINT_GREASE_PENCIL`.
2023-08-10 17:44:27 +02:00
Falk David
7e594b5d96 GPv3: Allow buttons for child nodes to be inactive
This makes it so that in the layer tree UI layers that have an
invisible parent will render their visibility icon as inactive (faded).
Same for the locked icon.
2023-08-10 17:44:27 +02:00
Julian Eisel
ff636ed092 UI: Allow passing empty string to templateID to ensure no label
This caused confusion when Bastien passed an empty string to the ID
template, expecting that it would ensure no default label is placed, but
it caused the layout to be split. This is because we'd still add an
empty label in this case.
2023-08-10 17:12:18 +02:00
Julian Eisel
e2cd2236ca Refactor: Avoid unsafe cast for Outliner sequence elements
Relying on the `TreeStoreElem.id` void pointer makes assumptions about
what code elsewhere sets to it (it's also misleading since it's actually
not an ID pointer), in this case we can easily avoid that.
2023-08-10 16:51:50 +02:00
Julian Eisel
c0065979a1 Refactor: Remove hack to store sequence type in Outliner tree element
`TreeElement.idcode` would be reused to store the sequence type. This is
risky if the field is assumed to actually contain a valid ID-code,
without further checks.
This was only accessed in one place, which I've refactored to a clean,
type-safe solution now.
2023-08-10 16:51:29 +02:00
Christoph Lendenfeld
b56fc47eed Fix: Wrong property name and description 2023-08-10 16:33:44 +02:00
Christoph Lendenfeld
a0aa5480b1 Animation: Blend Offset Slider
Adds an operator to the Graph Editor that moves the selected
segment up/down so it aligns with the keys before/after the segment.

Co-authored-by: Ares Deveaux <aresdevo@gmail.com>
Co-authored-by: Sybren A. Stüvel <sybren@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/110544
2023-08-10 16:09:39 +02:00
Julian Eisel
a995e16cd2 Fix incorrect type cast of Outliner view layer element data
The view layer "base" element (the parent that the individual layers are
nested in) does not point to any data in its `directdata`, definitely
not to a view layer. Don't cast it to one, this can cause undefined
behavior when the pointer is not null.
2023-08-10 15:44:12 +02:00
Christoph Lendenfeld
255818a569 Animation: Common curve drawing for FCurves
Before this patch, the drawing code iterated the FCurve to see if there are any
curve interpolation types that can't easily be drawn. (Sinusoidal, Bounce, etc)
If it found one, it would fall back to evaluating the FCurve.

That meant in the worst case scenario it would iterate the whole FCurve
before even starting to draw.

This PR unifies the drawing logic for FCurves no matter their interpolation type.
If it encounters a key type that it can't draw, it falls back to samples, but only
for the current key.

To clarify that it renames `draw_fcurve_curve_bezts` to `draw_fcurve_curve_keys`

Curves with modifiers are still drawn with samples.

## Performance
Test setup: 6000f of dense data on 62 bones.
Only measuring the average draw time **per curve**.
All measurements were done at the same zoom level.

| - | before | after |
| - | - | - |
| only beziers | 28μs | 13μs |
| only elastic | 90μs | 60μs |
| mix (~1/2 of the view with elastic) | 110μs | 24μs |

The performance boost with "only elastic" can be explained by the fact that per key I can skip 1 call to `evaluate_fcurve`.  That is because I always start at an existing keyframe so I can use its position.

Pull Request: https://projects.blender.org/blender/blender/pulls/110764
2023-08-10 15:33:22 +02:00
Falk David
101abc6f6c Sim Nodes: Don't delete parent bake directory
The `OBJECT_OT_simulation_nodes_cache_delete` operator
would delete the parent bake directory. This could lead to catastrophic
loss of data if the user set their bake directory to a folder that
contains other files or folders.

This commit makes sure that only the "meta" and "bdata" folders get
deleted in the parent directory.

Pull Request: https://projects.blender.org/blender/blender/pulls/110999
2023-08-10 14:29:32 +02:00
Amelie Fondevilla
7f6196ccae GPv3: Display layer properties in animation channels
This patch adds layer widgets in the grease pencil layer channels of the grease pencil dopesheet.
It adds RNA + getter function for the `use_onion_skinning` at layer level.
It also sets the offset of the channel, and the color of grease pencil data-block channels.

Pull Request: https://projects.blender.org/blender/blender/pulls/110991
2023-08-10 13:55:14 +02:00
Aras Pranckevicius
d973355b3a Cleanup: reduce amount of math-related includes
Using ClangBuildAnalyzer on the whole Blender build, it was pointing
out that BLI_math.h is the heaviest "header hub" (i.e. non tiny file
that is included a lot).

However, there's very little (actually zero) source files in Blender
that need "all the math" (base, colors, vectors, matrices,
quaternions, intersection, interpolation, statistics, solvers and
time). A common use case is source files needing just vectors, or
just vectors & matrices, or just colors etc. Actually, 181 files
were including the whole math thing without needing it at all.

This change removes BLI_math.h completely, and instead in all the
places that need it, includes BLI_math_vector.h or BLI_math_color.h
and so on.

Change from that:
- BLI_math_color.h was included 1399 times -> now 408 (took 114.0sec
  to parse -> now 36.3sec)
- BLI_simd.h 1403 -> 418 (109.7sec -> 34.9sec).

Full rebuild of Blender (Apple M1, Xcode, RelWithDebInfo) is not
affected much (342sec -> 334sec). Most of benefit would be when
someone's changing BLI_simd.h or BLI_math_color.h or similar files,
that now there's 3x fewer files result in a recompile.

Pull Request #110944
2023-08-10 14:51:40 +03:00
Amelie Fondevilla
09d2108bf5 GPv3 : Transform action for grease pencil frames.
Implementation of the transform action for grease pencil frames, which enables translating and scaling grease pencil frames in the dopesheet.

This patch adds the following in the grease pencil API :
 - `move_frames`  to move a set of frames given a map of key transformations (with overwrite), and
 -  the structure `LayerTransformData` that stores in the layer runtime some useful data for the frames transformation.

Co-authored-by: Falk David <falk@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/110743
2023-08-10 12:57:32 +02:00
Bastien Montagne
6a86dd5f34 LibOverride: Add ID pointer to operations over ID pointers.
In RNA collections storing ID references, the name of the collection
item may not always be unique, when several IDs from different libraries
are present.

While rare, this situation can become deadly to liboverride, by causing
random but exponential liboverride hierarchies corruptions.

This has already been alleviated by using preferably both name and index
in items lookup (a05419f18b) and by reducing the risk of name collision
in general between liboverrides and their linked reference (b9becc47de).

This commit goes further, by ensuring that references to items of RNA
collections of IDs stored in liboverride operations become completely
unambiguous. This is achieved by storing an extra pointer to the item's
ID itself, when relevant.

Lookup then requires a complete match `name + ID` to be successful,
which is guaranteed to match at most a single item in the whole RNA
collection (since RNA collection of IDs do not allow duplicates, and
the ID pointer is always unique).

Note that this ID pointer is implemented as an `std::optional` one
(either directly in C++ code, or using an new liboverride operation `flag`
in DNA). This allows to smoothly transition from existing data to the
added ID pointer info (when needed), without needing any dedicated
versioning. This solution also preserves forward compatibility as much
as possible.

It may also provide marginal performances improvements in some cases, as
looking up for ID items in RNA collections will first check for the
ID pointer, which should be faster than a string comparision.

Implements #110421.

Pull Request: https://projects.blender.org/blender/blender/pulls/110773
2023-08-10 12:41:20 +02:00
Christoph Lendenfeld
e119089928 Animation: Right align slider unit text
The text used to be centered around a point left of the slider line
with the assumption that it displays a number from 0-1 and "%"
With the ability to set the unit name,  this assumption is no longer true,
and if setting a long name (like "Frames" in #110540) the text overlaps the slider line

By right aligning the text on the left side of the slider, this overlap cannot happen anymore.

| Before | After |
| - | -  |
| ![image](/attachments/9d245773-3256-4ea7-a0b9-6b635956068d) | ![image](/attachments/2968c364-36ea-4d77-af0a-80499e72c8d8) |
| ![image](/attachments/31f13a7e-08f5-42bf-b687-b6ccc839f39d) | ![image](/attachments/6e9832e8-6644-493f-a791-e1b29718a0e4) |
| ![image](/attachments/7cabc3e2-585b-4725-8bde-f05aabb46e46) | ![image](/attachments/da5a4389-1cb1-422f-98b0-8881d8614356) |

Pull Request: https://projects.blender.org/blender/blender/pulls/110586
2023-08-10 12:27:28 +02:00
Christoph Lendenfeld
598af45459 Fix #110789: Apply NLA mapping when jumping to keys in the Graph Editor
The new keyframe jumping code for the graph editor did not respect the NLA strip offset.
This patch fixes that by applying `ANIM_nla_mapping_apply_fcurve`

Technical side note: `FCurve *` lost its constness due to that

Pull Request: https://projects.blender.org/blender/blender/pulls/110790
2023-08-10 11:03:01 +02:00
Campbell Barton
a52c904c7b Fix annotation tool getting "stuck" with IC-Keymap
The annotation tool only exited on LMB or RMB mouse buttons,
now check for all mouse buttons with special behavior with RMB.
2023-08-10 15:46:21 +10:00
Jacques Lucke
08a8825827 Cleanup: use actual function type instead of void* in declaration
This updates the signature of `RNA_def_property_update_runtime`
which previously just has a `const void *` input. This made it difficult
to know what function signature is expected and also does not result
in compile errors when a wrong function is provided.

There is one case which required a different signature, so now there
is a separat function for that case.
2023-08-09 22:40:39 +02:00
Amelie Fondevilla
d5b2960a07 GPv3: Include summary and datablock keyframes in the grease pencil dopesheet
This patch includes keyframes for both the summary channel, and grease pencil data-block channels.
It also includes selection in these channels, in the same modes as the ones implemented for grease pencil keyframes.

Pull Request: https://projects.blender.org/blender/blender/pulls/110962
2023-08-09 17:07:31 +02:00