Commit Graph

4552 Commits

Author SHA1 Message Date
Jacques Lucke
3506dc42c3 Fix: add missing include 2024-09-20 17:53:16 +02:00
Jacques Lucke
3ccfa65245 Geometry Nodes: support packing bakes into .blend files
Previously, it was only possible to bake to disk with geometry nodes. This patch
adds support for storing the baked data directly in the .blend file.

By default, new bakes are stored in the .blend file now. Whether a new bake
should be packed or stored on disk can be configured in two places: in the
properties of the bake node and in the bake panel of the modifier. These
settings don't affect existing bakes, only the next bake.

To unpack or pack an individual bake, there is a new operator button next to the
bake button. The icon and the label below indicate where the bake is currently
stored. The label now also contains the size of the bake.

To unpack or pack all bakes, the `File > External Data > Pack Resources / Unpack
Resources` operators can be used. The unpack operator also has a new title that
mentions the number if individual files separate from the number of bakes. This
works better than just listing a number of files because a bake can consist of
many files.

Pull Request: https://projects.blender.org/blender/blender/pulls/124230
2024-09-20 16:18:12 +02:00
Sybren A. Stüvel
615cb46412 Anim: add Action Slot selector to Action Constraint
Add slotted Actions support to Action constraints.

The user interface can be improved once #127751 lands.

Ref: #120406
Pull Request: https://projects.blender.org/blender/blender/pulls/127749
2024-09-20 08:07:15 +02:00
Hans Goudey
9e920bc95b Refactor: Sculpt: Add scene argument to undo step creation functions
This is necessary for using the 3D cursor instead of the sculpt pivot (#118250).
It's committed separately from #127863 to make that diff smaller.
2024-09-19 11:28:38 -04:00
casey bianco-davis
421d6c55ae GPv3: Implement the set_origin operator.
Add support the "Set Origin" operator for Grease Pencil objects.
Unlike GPv2, this will update radius properly.

Pull Request: https://projects.blender.org/blender/blender/pulls/127543
2024-09-19 15:27:29 +02:00
Pratik Borhade
912c6d9a3c Fix #127620: Disable smooth operator for linked objects
Shade flat/smooth operators are callable when linked but greyed out if
objects are overridden. Disable these operators in UI for linked objects.

Pull Request: https://projects.blender.org/blender/blender/pulls/127681
2024-09-19 12:53:22 +02:00
YimingWu
11bf2b9a62 Fix #127539: Prevent multi-object editing in GPv3
Multi-object editing is not supported in GPv3 right now,
do not allow multiple GPv3 objects to go into edit mode
at the same time.

Pull Request: https://projects.blender.org/blender/blender/pulls/127796
2024-09-19 11:22:15 +02:00
Lukas Tönne
3a1ab067f2 Fix #127342: Support Curve domain when selecting by vertex group
This requires writing selection attributes to a different domain than
the Point domain.

Note that for assigning/removing from vgroups the `adapt_domain`
function is used implicitly by always looking up attributes from the
Point domain: ".selection" may be stored on Curves and will
automatically be adapted to points. For select-by-vgroup `adapt_domain`
cannot be used because the selection has to be "greedy" (one point
selects the whole curve).

Pull Request: https://projects.blender.org/blender/blender/pulls/127799
2024-09-19 10:59:55 +02:00
Pratik Borhade
eb44c39824 Fix #127616: Copy to selected adds modifier to linked object
Add extra check to prevent copying modifier on selected linked objects

Pull Request: https://projects.blender.org/blender/blender/pulls/127797
2024-09-18 12:47:52 +02:00
Falk David
943832a841 GPv3: Add armature parent "With Envelope Weights" option
Implements the envelope weights parenting option for armatures.
Uses the same algorithm as for meshes.

Pull Request: https://projects.blender.org/blender/blender/pulls/127714
2024-09-17 12:47:41 +02:00
Campbell Barton
10e8f2f889 Cleanup: various non-functional changes 2024-09-15 23:22:22 +10:00
casey bianco-davis
50770bd8f5 GPv3: Add support for transform object origin.
Implements support for `transform only origins`.

Pull Request: https://projects.blender.org/blender/blender/pulls/126446
2024-09-13 17:06:43 +02:00
casey bianco-davis
4fc665e4a1 GPv3: Apply Transform operator
Add support for the `Apply Object Transform` operator.

Unlike GPv2, this will update the radius properly.

Pull Request: https://projects.blender.org/blender/blender/pulls/126442
2024-09-13 11:08:37 +02:00
Falk David
f68910092b GPv3: Parent armature with empty weights
Implements setting the armature parent and generating
vertex groups for the bones in the armature.

Note: This does not implement the `Envelope` or `Automatic Weights` options.

Pull Request: https://projects.blender.org/blender/blender/pulls/127515
2024-09-12 20:25:27 +02:00
Falk David
942499382d GPv3: Vertex Paint Mode
This adds the vertex paint mode and all of the tools
from GPv2:
 * Average
 * Blur
 * Draw
 * Replace
 * Smear

Pull Request: https://projects.blender.org/blender/blender/pulls/125674
2024-09-10 18:56:31 +02:00
Sybren A. Stüvel
3fdc9e9637 Refactor: convert BKE_action.h to C++
Move the contents of `BKE_action.h` into `BKE_action.hh` and remove
C-isms.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/127407
2024-09-10 14:55:47 +02:00
Sybren A. Stüvel
636d83fbea Refactor: convert BKE_nla.h to C++
Rename `BKE_nla.h` to `BKE_nla.hh` and remove C-isms.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/127395
2024-09-10 13:41:01 +02:00
YimingWu
06e70e7bc0 GPv3: Implement Grease Pencil to mesh conversion
Support Object > Convert > Mesh option for grease pencil v3.
This does the conversion by first converting it into Curves then use the
same routine to convert Curves into Mesh wires.

Pull Request: https://projects.blender.org/blender/blender/pulls/123835
2024-09-10 13:36:31 +02:00
Campbell Barton
9d917b73b9 Cleanup: remove duplicate depsgraph tagging
Operations on collections could tag the same collection multiple times.
Track the changed state instead. Also rename (ok/updated to "changed"),
for clarity & consistency.

Remove duplicate depsgraph tagging from ED_rigidbody_object_remove too.
2024-09-06 12:17:10 +10:00
Philipp Oeser
4221f827cf Fix #127077: Edit voxel size op unpredictable with large/small meshes
If voxel sizes were big, code could run into clamping at 1.0f, making it
look like nothing was happening, also even though the "step size" was
taking into account the initial voxels size (only in relative mode,
absolute mode was, well... absolute, no matter what object this was
happening on, also see 5946ea938a).

So previously, a reasonable voxels size could not achieved using this
operator for e.g. a terrain-size mesh.

Now code allows for bigger/smaller meshes to behave predictably.
This is done by storing a reasonable min and max voxel size (this is
taken from the bounding plane which is also displayed to the user),
making the max the length of the longer side of the bounding plane and
the min a fraction of it (based on `VOXEL_SIZE_EDIT_MAX_GRIDS_LINES` --
smaller voxels would not display anyways...)

Based on the above, we can have a reasonable range to base the change on
which is done moving the mouse.
Because this is more predictable than before, we can even remove the
`relative` mode (dont think it makes too much sense now anymore).

Pull Request: https://projects.blender.org/blender/blender/pulls/127109
2024-09-05 16:31:05 +02:00
Jacques Lucke
871b25b219 Geometry: generalize attribute filters beyond just for anonymous attributes
This introduces the concept of an #AttributeFilter. It's used to tell a geometry
algorithm which attributes it should process/propagate and which can be ignored.

We already had something similar before named
`AnonymousAttributePropagationInfo`. However, as the name implies, this was
specific to anonymous attributes. This had some downsides:
* A lot of code had to be aware of the concept of anonymous attributes even if
  it did nothing special with anonymous attributes.
* For non-anonymous attributes we often had a separate `Set<std::string> skip`
  parameter. It's not nice to have to pass two kinds of filters around and to
  have to construct a `Set<std::string>` in many cases.

`AttributeFilter` solves both of these downsides.

Technically, `AttributeFilter` could also just be a `FunctionRef<bool(StringRef
attribute_name)>`, but that also has some issues:
* The `bool` return value is often ambiguous, i.e. it's not clear if it means
  that the attribute should be processed or not. Using an enum works better.
* Passing function refs around and combining them works, but can very easily
  lead to dangling references.
* The default value of a `FunctionRef` is "empty", i.e. it can't be called. It's
  generally more nice to not have a special case for the default value. Now the
  default `AttributeFilter` propagates all attributes without any extra handling
  on the call-site.

Pull Request: https://projects.blender.org/blender/blender/pulls/127155
2024-09-05 11:33:35 +02:00
Jacques Lucke
89ae1ba38a Attributes: remove AttributeIDRef in favor of just using strings
Previously, the `AttributeIDRef` wrapper was needed because it also had to
contain a pointer to an `AnonymousAttributeID`. However, since
b279a6d703 this is not necessary anymore.
Therefore we can use "raw" `StringRef` now which reduces the mental overhead
when working with attributes and also simplifies code.

Pull Request: https://projects.blender.org/blender/blender/pulls/127140
2024-09-04 16:13:03 +02:00
Bastien Montagne
9506fed905 Refactor: Move some Editors' data allocation from C alloc/free to C++ new/delete.
Part of the effort to make PointerRNA non-trivial (#122431).
2024-08-29 14:20:37 +02:00
Jacques Lucke
808119ec3b Fix: linked objects are moved
Found while investigating #126568.
2024-08-23 12:41:35 +02:00
Bastien Montagne
6e143cbf75 Fix #126549: Forbid unlinking Scene main collection.
Looks like this use to 'work' because lower-level code would refuse to
delete an embedded scene collection, but the operator should not have
been active at all in the first place.

Fixed by adding a proper `poll` callback to the `collection unlink`
operator.
2024-08-21 11:48:03 +02:00
Hans Goudey
a4d94ee5d5 Fix #125565: Clear Parent & Keep Transform doesn't work in redo panel
The second time the operator ran without a depdency graph
evaluation happening for another reason, the object's evaluated
transform matrices weren't calculated. The fix is to make sure the
depsgraph is evaluated when the operator is executed.
2024-08-16 08:50:22 -04:00
Falk David
81d78e3416 GPv3: Apply Modifier
This implements the `Apply Modifier` operator for GPv3.

Applies the modifier to the current frame. Drawings at the current frame will be updated.
If the result of the modifier creates new layers, the layers will be added and a drawing
at the current frame will be inserted.

Applying a modifier will run the following steps:
* Create a localized copy of the original Grease Pencil data and insert it into a geometry
   set that owns it.
* Execute the `modifiy_geometry_set` function of the modifier with this geometry set.
* In the resulting Grease Pencil data loop over all layers:
   * If the original data has a layer with the same name, overwrite its drawing data in the
      current frame.
   * Otherwise create a new layer in the original data and insert a resulting drawing at
      the current frame.
* Remove all original layers that are not mapped to from a result layer.
* Remap the material indices for all drawings that have not been updated (e.g. the ones
    that are not on the current frame).
* Copy all the layer attributes to the original Grease Pencil.

Pull Request: https://projects.blender.org/blender/blender/pulls/124543
2024-08-13 15:02:25 +02:00
Andrej730
74c796e057 UI: Add property description for show hidden objects operator
Clarify `selection` property with description.

Pull Request: https://projects.blender.org/blender/blender/pulls/126221
2024-08-12 13:32:01 +02:00
Jacques Lucke
29edcef5c9 Fix #125670: Regression: Setting parent to triangle changes object location
This fixes two things:
* Pass the evaluated object into `BKE_object_as_kdtree` instead of the original
  one. `BKE_object_as_kdtree` uses functions on the object which are only
  expected to be executed on evaluated objects, such as
  `BKE_object_get_mesh_deform_eval`. Note that this is the only place where
  `BKE_object_as_kdtree` is used.
* Tag depsgraph at the end of setting parent. This way,
  `BKE_object_get_evaluated_mesh` will return the correct mesh instead of null.
  It was returning null because it the object is not in a fully evaluated state
  if it just has been tagged as requiring an update.

Pull Request: https://projects.blender.org/blender/blender/pulls/126086
2024-08-08 16:42:53 +02:00
Hans Goudey
d99e6f82da Cleanup: Move some sculpt mode functions to C++ namespace 2024-08-08 10:11:52 -04:00
Jacques Lucke
5861b078f7 Core: rename ID.flag and ID.tag values
Previously, values for `ID.flag` and `ID.tag` used the prefixes `LIB_` and
`LIB_TAG` respectively. This was somewhat confusing because it's not really
related to libraries in general. This patch changes the prefix to `ID_FLAG_` and
`ID_TAG_`. This makes it more obvious what they correspond to, simplifying code.

Pull Request: https://projects.blender.org/blender/blender/pulls/125811
2024-08-07 12:12:17 +02:00
Bastien Montagne
9e0b673467 Fix #125938: Transfer Mode (Alt+Q) doesn't work for pose mode switching to a liboverride armature.
Checks in this operator were simply not handling liboverrides properly.

Also refactored that code, grouping & refining checks and error
reports, add comment about why there is specific weird undo handling,
improve variable namings, remove non-sensical assumptions and code
regarding orig/eval objects, etc.
2024-08-06 11:21:52 +02:00
Jesse Yurkovich
11e7b7d0bd Collection Export: Allow renaming of exporters in the UI list
Allow the user to rename their collection exporters.

Pull Request: https://projects.blender.org/blender/blender/pulls/125553
2024-08-02 22:36:43 +02:00
Jacques Lucke
6b9b958668 Fix #125291: crash when applying curves modifier when there is a bake
The crash was caused by attempting to write-back to the original data after it
has been removed (`add_data_block_items_writeback`).

This write-back is already disabled when applying a modifier, however the
corresponding flag was only set when applying modifiers on mesh objects. This
patch fixes this issue with two small changes:
* Rename `MOD_APPLY_TO_BASE_MESH` to `MOD_APPLY_TO_ORIGINAL` to make it more
  generic.
* Pass this flag into modifier evaluation for other geometry types besides
  meshes in `modifier_apply_obdata`.

Pull Request: https://projects.blender.org/blender/blender/pulls/125761
2024-08-01 13:36:43 +02:00
Falk David
0f42f277b7 Grease Pencil: Remove legacy modifiers
This removes the legacy Grease Pencil modifiers from the code.
These should have already been inaccessible from the UI and hidden from
the user. The modifiers have been reimplemented for the new GPv3
data structure.

On top of the modifier code, some other related things have been
removed as well:
 * Operators related to the legacy modifiers.
 * Keymaps for the legacy modifier operators.
 * Some bits of code that used modifier functions.

Some code has to be kept, because it is still used:
 * The core line art code, which is used by the new line art modifier. It's
    moved to `modifiers/lineart`.
 * The DNA structs for the legacy modifiers. They are still needed for
    conversion.
 * A few kernel functions for the modifiers are kept (also for conversion).

Co-authored-by: Lukas Tönne <lukas@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/125102
2024-07-29 10:37:29 +02:00
YimingWu
f9810ce99c GPv3: LineArt: Baking operators
This patch implements all baking operators for LineArt for GPv3.
The old baking operators are renamed with `_legacy_` to
distinguishing both when calling the operator.

Pull Request: https://projects.blender.org/blender/blender/pulls/125079
2024-07-26 15:48:52 +02:00
Hans Goudey
3199915f35 Cleanup: Switch to C++ API for 3D cursor transform
Replace the `BKE_scene_cursor` functions with member functions
of the `View3DCursor` DNA struct. This makes using the cursor's
transform simpler, especially in newer C++ code.

Pull Request: https://projects.blender.org/blender/blender/pulls/124903
2024-07-25 17:53:09 +02:00
Campbell Barton
f1febee83f Cleanup: use "num" as a variable suffix 2024-07-23 15:50:05 +10:00
Jesse Yurkovich
c46679c108 Fix #125112: UI notification for exporting all collections is confusing
If a user has multiple collections for which exporters are defined, then
during File->Export All Collections, multiple UI notifications will
occur, one for each collection. This is confusing because these
notifications contain a count of how many files were exported and only
the "last" notification is shown to the user. The others are still
present in the Info editor (and terminal) but users rarely look there.

The fix changes where we post the notification report. We tally up the
number of files and collections we process and only report them as a
final step in the appropriate Operator exec functions.

Pull Request: https://projects.blender.org/blender/blender/pulls/125206
2024-07-23 07:37:13 +02:00
Falk David
27c877f684 Fix: GPv3: Use of legacy object type in shaderfx_add 2024-07-22 16:29:19 +02:00
Falk David
ead43b6693 Fix: GPv3: Copy ShaderFX/Materials to selected
The operator was checking for the legacy object type.
2024-07-22 16:29:19 +02:00
Christoph Lendenfeld
6ef77a0d22 Anim: Deselect Keys before inserting new keys
This commit changes the keying code to deselect keyframes when inserting new keys.
This has been discussed in the Animation & Rigging module meeting [1].
There is also an RCS post about that [2].
Doing this brings key creation in line with object creation,
where only the newly created object is selected.
There has been a previous attempt [3] to do a similar thing.

### Changes
When inserting keys by pressing `I` in the viewport or choosing a keying set,
all keys of the `Action` get deselected before inserting new keys.
New keys are selected by default.
Python RNA functions are **NOT** affected, meaning addons using
those functions will not deselect any keys by default.
The developer has to choose to do so.
To make that easier, there is a new RNA function on the action
`deselect_keys`

[1]: https://devtalk.blender.org/t/2024-05-02-animation-rigging-module-meeting/34493#patches-review-decision-time-5
[2]: https://blender.community/c/rightclickselect/K0hbbc
[3]: https://archive.blender.org/developer/D11623

Pull Request: https://projects.blender.org/blender/blender/pulls/121908
2024-07-18 14:48:00 +02:00
Guillermo Venegas
604dc2cc33 Fix #124931: Fix crash dropping images in overlapping regions
Ref: !124921
2024-07-18 14:57:58 +10:00
Bastien Montagne
c607ead4b7 Refactor: Makesrna: move generated code further in C++.
This commit moves generated `RNA_blender.h`, `RNA_prototype.h` and
`RNA_blender_cpp.h` headers to become C++ header files.

It also removes the now useless `RNA_EXTERN_C` defines, and just
directly use the `extern` keyword. We do not need anymore `extern "C"`
declarations here.

Pull Request: https://projects.blender.org/blender/blender/pulls/124469
2024-07-15 16:39:45 +02:00
Jesse Yurkovich
8c779cfade Merge branch 'blender-v4.2-release' 2024-07-14 14:30:41 -07:00
Jesse Yurkovich
ba6a89e5db Fix: Incorrect free of null IDProperty array during Collection Export
This was unfortunately regressed during another recent fix [1].

Simply check for null last_properties before removing them.

[1] a362c225c0

Pull Request: https://projects.blender.org/blender/blender/pulls/124698
2024-07-14 23:29:29 +02:00
Nathan Vegdahl
cb38406a94 Fix: Follow Curve constraint/parenting doesn't animate with layered actions
Both the Follow Curve constraint and parenting with the follow curve option
require a property on the Curve ID to be animated if the user wants the
follower object to animate along the curve. However, the fcurve for this
was always getting created as a legacy action fcurve, regardless of whether
the action was actually legacy or not. If the action was layered, this
resulted in the follower object not animating along the path.

The underlying issue was that the code that created the fcurve was using
`action_fcurve_ensure()`, which hadn't yet been updated to work correctly with
layered actions, and thus the fcurve was created as if the action was legacy.

This commit fixes that by updating `action_fcurve_ensure()` to work with
Baklava phase-1 layered actions in limited circumstances, and also
ensuring that the follow curve code passes an appropriate ID RNA pointer
(required to find/create an appropriate Slot).

Pull Request: https://projects.blender.org/blender/blender/pulls/124353
2024-07-12 10:47:32 +02:00
Pratik Borhade
7ee2938bc1 Fix #124468: UI is not refreshed after copying modifier using Outliner
Add notifier when copying a modifier to a different object so that
Properties and Outliner can update and redraw.

Pull Request: https://projects.blender.org/blender/blender/pulls/124510
2024-07-11 20:55:21 +02:00
Sean Kim
c3243f363d UI: Voxel Size Edit status display
Updates the `OBJECT_OT_voxel_size_edit` operator to use the new
workspace status display.

Pull Request: https://projects.blender.org/blender/blender/pulls/124492
2024-07-11 20:22:48 +02:00
Jesse Yurkovich
6ace3eb065 Merge branch 'blender-v4.2-release' 2024-07-11 08:44:58 -07:00