Commit Graph

5349 Commits

Author SHA1 Message Date
priera
ce7667f3b1 GPv3: Join Operator
Adds the `Join` operator in edit mode to connect the selected strokes
by their endpoints.

Resolves #113582 and #113570.

Pull Request: https://projects.blender.org/blender/blender/pulls/117916
2024-09-30 12:16:40 +02:00
Jacques Lucke
83fa565ec2 Nodes: improve inserting nodes with link-drag-search
This makes link-drag-search more convenient when one wants to insert a new node
between existing nodes. The change currently also affects normal node-insertion
when dragging it. The exact behavior still has to be figured out.

Pull Request: https://projects.blender.org/blender/blender/pulls/128197
2024-09-30 11:14:43 +02:00
Pablo Vazquez
d6ec2f0539 UI: Update icon for Grease Pencil layer and group
The current icon for Grease Pencil layers is a pen, it doesn't really
communicate the "layer" aspect. Replace with a paper sheet-like icon.

The layer group gets its own icon. It's a stack of animation paper.

Inspired by Daniel Correa Flores's design on DevTalk:
https://devtalk.blender.org/t/ui-discussion-grease-pencil-layer-and-layer-group-icons/30693/25

Pull Request: https://projects.blender.org/blender/blender/pulls/128208
2024-09-27 17:24:40 +02:00
Harley Acheson
28e5c1412e UI: Editor Edge Highlighting
Customizable highlighting of editor edges that can be used to help
differentiate between areas, indicate active area, and/or help users
with visual impairment. Can be completely removed as well. This
replaces the active area header highlighting, which doesn't work for
transparent headers.

Pull Request: https://projects.blender.org/blender/blender/pulls/116684
2024-09-26 21:55:26 +02:00
Christoph Lendenfeld
fae19d7c92 Anim: Eyedropper for bone properties
This adds an eyedropper button to properties where you can choose a bone.

Clicking it activates the modal operation and you can pick:
* Bones from the Outliner
* Bones from the 3D Viewport if the Armature is in Pose Mode or Edit Mode

## Limitation

Picking from the 3D viewport while in Object Mode doesn't work due to technical reasons.
The selection buffer is only filled with pose bones if the armature is in pose mode.
Using the picker while in object mode gives you the Armature object, not its bones.

So you cannot use the bone picker to constrain an object to a bone.
UNLESS you pin the panel with the object, go to pose mode and then pick.

There is a warning printed for those cases to tell the user why this hasn't worked.

Pull Request: https://projects.blender.org/blender/blender/pulls/121523
2024-09-26 10:05:09 +02:00
Campbell Barton
473bd60164 Cleanup: clarify arguments using const or r_ prefixed return args 2024-09-26 15:03:24 +10:00
Campbell Barton
60e96e40b9 Cleanup: various non-functional changes 2024-09-26 14:05:33 +10:00
Campbell Barton
c6782f53b7 Docs: add note to avoid incorrect use of XRAY_ENABLED
Avoid issues similar to #128074 happening in the future.
2024-09-26 11:50:28 +10:00
Lukas Tönne
2459247f9f GPv3: Enable selection operators and overlays in vertex paint mode
Vertex paint mode also supports masking based on selection, so the
selection overlay and relevant operators should also be enabled in that
mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/128114
2024-09-25 12:40:46 +02:00
Falk David
dddcc3f378 GPv3: Parent to armature with automatic weights
This ports the armature parenting with automatic weights from GPv2.

Pull Request: https://projects.blender.org/blender/blender/pulls/128073
2024-09-24 17:12:46 +02:00
Lukas Tönne
23cd299ba7 GPv3: Selection support in Sculpt mode
Supporting selection operators and overlays in sculpt mode is necessary
to support masking operations.
This enables selection drawing in the overlay in sculpt mode,
and ensures all the necessary operators (pick, lasso, circle, box)
handle the differences in modes correctly.

The selection code so far was expecting object mode, so the `vc->obedit`
object was used without further checks. Now the selection code can be
called outside of edit mode, in which case the `vc->obact` object must
be used instead. Similarly edit mode and sculpt mode have separate
`selectmode` flags, so the correct mode property must be used from the
tool settings depending on the object mode. These changes require some
refactoring of unrelated selection code.

Pull Request: https://projects.blender.org/blender/blender/pulls/128040
2024-09-24 16:27:06 +02:00
Falk David
37458329e2 Refactor: GPv3: Arguments to ensure_active_keyframe function
This does some changes to the ed::greasepencil::ensure_active_keyframe` function.
* The context was only needed to get the scene, pass the scene directly
* Don't use the active layer by default but pass a reference to a
  layer instead. This makes it also possible to create keyframes
  on multiple layers using a loop.
2024-09-24 11:58:36 +02:00
Jacques Lucke
6e5e01e630 Geometry Nodes: new For Each Geometry Element zone
This adds a new type of zone to Geometry Nodes that allows executing some nodes
for each element in a geometry.

## Features

* The `Selection` input allows iterating over a subset of elements on the set
  domain.
* Fields passed into the input node are available as single values inside of the
  zone.
* The input geometry can be split up into separate (completely independent)
  geometries for each element (on all domains except face corner).
* New attributes can be created on the input geometry by outputting a single
  value from each iteration.
* New geometries can be generated in each iteration.
    * All of these geometries are joined to form the final output.
    * Attributes from the input geometry are propagated to the output
      geometries.

## Evaluation

The evaluation strategy is similar to the one used for repeat zones. Namely, it
dynamically builds a `lazy_function::Graph` once it knows how many iterations
are necessary. It contains a separate node for each iteration. The inputs for
each iteration are hardcoded into the graph. The outputs of each iteration a
passed to a separate lazy-function that reduces all the values down to the final
outputs. This final output can have a huge number of inputs and that is not
ideal for multi-threading yet, but that can still be improved in the future.

## Performance

There is a non-neglilible amount of overhead for each iteration. The overhead is
way larger than the per-element overhead when just doing field evaluation.
Therefore, normal field evaluation should be preferred when possible. That can
partially still be optimized if there is only some number crunching going on in
the zone but that optimization is not implemented yet.

However, processing many small geometries (e.g. each hair of a character
separately) will likely **always be slower** than working on fewer larger
geoemtries. The additional flexibility you get by processing each element
separately comes at the cost that Blender can't optimize the operation as well.
For node groups that need to handle lots of geometry elements, we recommend
trying to design the node setup so that iteration over tiny sub-geometries is
not required.

An opposite point is true as well though. It can be faster to process more
medium sized geometries in parallel than fewer very large geometries because of
more multi-threading opportunities. The exact threshold between tiny, medium and
large geometries depends on a lot of factors though.

Overall, this initial version of the new zone does not implement all
optimization opportunities yet, but the points mentioned above will still hold
true later.

Pull Request: https://projects.blender.org/blender/blender/pulls/127331
2024-09-24 11:52:02 +02:00
Lukas Tönne
bf2f4e54cc GPv3: Take layer transform into account when using clipboard
This affects the edit-mode copy/paste operators as well as the sculpt
mode _Clone_ tool. These copy and paste to/from the clipboard, but were
not applying the layer transform in the process. All curves were stored
in their respective local layer space. Since everything gets merged
these transforms get lost when storing to the clipboard.

Pasting curves from the clipboard was also not applying the target layer
transform. Also the clipboard content was getting pasted into every
editable drawing.

Now clipboard curves are always stored in world space. Pasting only
happens on the active layer, and the active layer inverse transform is
applied so visual transform of curves shouldn't change through copy and
paste.

Pull Request: https://projects.blender.org/blender/blender/pulls/127917
2024-09-24 11:35:07 +02:00
Campbell Barton
2ab800b685 Cleanup: pass const arguments to BMBVHTree related functions 2024-09-24 15:36:00 +10:00
Campbell Barton
890f06ec42 WM: prevent potential freed memory access for the UV unwrapping timer 2024-09-21 17:17:25 +10:00
Campbell Barton
a5453ce992 Cleanup: use bool for unwrap cancel argument 2024-09-21 16:58:19 +10:00
Lukasz Czyz
788bc5158e UV: add support for the SLIM unwrapping algorithm
Integrate an existing implementation of the SLIM unwrapping algorithm
into Blender. More info about SLIM here:
https://igl.ethz.ch/projects/slim/

This commit is based on the integration code written by Aurel Gruber
for Blender 2.7x (unfinished and never merged with the main branch).

This commit is based on Aurel's code, rebased and further improved.

Details:

- Unwrap has been moved into a sub-menu,
  slim unwrapping is exposed as: "Minimum Stretch".
- Live unwrap with SLIM refines the solutions using a timer.
- When using SLIM there are options to:
  - Set the number of iterations.
  - Weight the influence using vertex weights.
- SLIM can be disabled using the `WITH_UV_SLIM` build option.

Co-authored-by: Aurel Gruber <aurel.gruber@infix.ch>

Ref !114545
2024-09-21 16:48:53 +10:00
Falk David
c20399442d Fix #127906: Issues with reproject operator
There were some issues with the operator:
* The `keep_original` option could easily crash blender.
* The surface projection did not work correctly.

This commits fixes those issues. The `keep_original` was
missing a tag for the topology that changes in the
drawing. The surface projection needed to cache the
viewport depths. This is done once and then used
to initialize the `DrawingPlacement`.
2024-09-20 16:53:41 +02:00
Bastien Montagne
3e03576b09 Add more control over ID renaming behavior.
This commit adds low-level logic in BKE to support three behaviors in
case of name conflict when renaming an ID:
1. Always tweak new name of the renamed ID (never modify the other ID
  name).
2. Always set requested name in renamed ID, modifying as needed the
  other ID name.
3. Only modify the other ID name if it shares the same root name with the
  current renamed ID's name.

It also adds quite some changes to IDTemplate, Outliner code, and
RNA-defined UILayout code, and the lower-level UI button API, to allow
for the new behavior defined in the design (i.e. option three from above list).

When renaming from the UI either 'fails' (falls back to adjusted name) or forces
renaming another ID, an INFO report is displayed.

This commit also fixes several issues in existing code, especially
regarding undo handling in rename operations (which could lead to saving
the wrong name in undo step, and/or over-generating undo steps).

API wise, the bahavior when directly assigning a name to the `ID.name`
property remains unchanged (option one from the list above). But a new
API call `ID.rename` has been added, which offers all three behaviors.

Unittests were added to cover the new implemented behaviors (both at
BKE level, and the RNA/Py API).

This commit implements #119139 design.

Pull Request: https://projects.blender.org/blender/blender/pulls/126996
2024-09-20 13:36:50 +02:00
Julian Eisel
439d4dfc3c Fix: UI: Small layout glitch with search template and decorators
Button layout wouldn't be entirely correct with split layout was
enabled, but decorators disabled (`uiLayout.use_property_split = True`,
`uiLayout.use_property_decorate = False`).

See https://projects.blender.org/blender/blender/pulls/127751#issuecomment-1298468.
2024-09-20 13:06:21 +02:00
Julian Eisel
7d97f99dfc Refactor: UI: Avoid confusing layout property split return value
The function would return two very different layouts in different code
paths, making it not clear to the caller what to expect. For one code
path the return value was rather useless, and in fact unused, so I was
able to just remove this. Also clarified behavior and return values in
the function API comment.
2024-09-20 12:33:56 +02:00
Julian Eisel
a3a5793a28 UI: Allow label for search template (respecting property split layout)
Since 5bcb0c9935, `uiLayout.template_ID()` already supports passing a label, in
which case the `uiLayout.use_property_split` would be respected. This makes the
template fit nicely with the surrounding layout, where buttons might have a
label split on the left, and a decorator button on the right.

This change brings the same to `uiLayout.template_search()`, plus makes it
respect `uiLayout.use_property_decorate`

Pull Request: https://projects.blender.org/blender/blender/pulls/127751
2024-09-20 12:24:36 +02:00
Sean Kim
bd7c6208b7 GPv3: Add Bake Grease Pencil Animation operator
This commit ports over the legacy Grease Pencil "Bake Object Transform
to Grease Pencil" (`GPENCIL_OT_bake_grease_pencil_animation`) to GPv3.

It is accessed in the same location as the old operator, via the menu
path Object > Animation > Bake Object Transform to Grease Pencil

Pull Request: https://projects.blender.org/blender/blender/pulls/126581
2024-09-20 10:53:31 +02:00
Campbell Barton
02345de80b Docs: improve wording in doc-strings for ED_view3d.h 2024-09-20 12:52:22 +10: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
Sean Kim
4291ab855c GPv3: Add Reproject operator
This commit adds the `Reproject Strokes` operator in the
`Grease Pencil` > `Cleanup` menu in edit mode.

All similar operator settings have been ported over from GPv2.

Pull Request: https://projects.blender.org/blender/blender/pulls/127735
2024-09-19 14:06:10 +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
Julian Eisel
93d37e7000 Cleanup: UI: Use default arguments for rarely used template options
These arguments are almost never used. Default arguments can make the
invokations quite a bit simpler.
2024-09-17 12:22:18 +02:00
Campbell Barton
9be29e1bbc Cleanup: match function & declaration names 2024-09-15 23:14:07 +10:00
Guillermo Venegas
033f18b5e9 Fix #127502: Popup resizes few times after closing a layout panel
Avoid truncation errors causing unneccessary resizing by passing floats
to UI_block_translate. That function translates block and button rects
which are floats.

Pull Request: https://projects.blender.org/blender/blender/pulls/127505
2024-09-13 20:04:15 +02:00
casey bianco-davis
3c67ae7785 GPv3: Rename Cutter tool to Trim
This rename the `Cutter` tool's name, code and icon to `Trim`.
The legacy Grease Pencil code is unchanged.

This was discussed in the 2024-07-30 Grease Pencil Module Meeting.

Reasons for the change:
 - Match the `Trim Stroke Ends` setting on brushes.
 - Match the `stroke_trim` operator.
 - Name is more clear and more commonly used.
 - Frees the name for a future boolean cutting tool.

Pull Request: https://projects.blender.org/blender/blender/pulls/126452
2024-09-13 16:56:51 +02:00
Falk David
8cbdbf5634 GPv3: Vertex Paint operators
This adds the following operators:
* Set Vertex Color
* Reset Vertex Colors
* Invert
* Brightness/Contrast
* HSV
* Levels

Also populates the `Paint` menu with them in vertex paint mode.

Pull Request: https://projects.blender.org/blender/blender/pulls/127572
2024-09-13 15:42:21 +02:00
Campbell Barton
81e2ccbf2b Cleanup: spelling in comments 2024-09-13 10:56:26 +10: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
Jacques Lucke
e9ad0e506c UI: speedup drawing large tree views
Previously, mapping old to new items was O(n^2) because each new item was
compared to all old items until the corresponding one was found. This patch
introduces a pre-filter to the old elements that have to be checked. Instead of
comparing all old items, only the ones with the same label are compared now.
This reduces the time complexity to O(n), making the tree view much more
usable with many items.
2024-09-12 18:12:22 +02:00
Sybren A. Stüvel
3417934eff Anim: add Action Slot assignment to NLA strip
For an NLA strip to use a slotted Action, it needs to specify which slot
to use in that action. This is now handled by two new properties on the
strip in DNA & RNA: `action_slot_handle` and `action_slot_name`.

These serve the same purpose as their counterparts on the `AnimData`
struct.

Note that this commit does NOT add NLA evaluation support for slotted
Actions. It merely allows assigning them. Evaluation, tweak mode
support, etc. will be implemented in future commits.

Pull Request: https://projects.blender.org/blender/blender/pulls/127359
2024-09-12 14:08:16 +02:00
Campbell Barton
e00fed43e6 Cleanup: redundant struct declarations 2024-09-11 16:25:25 +10: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
Campbell Barton
62dbebc18e Cleanup: pass const depsgraph for viewport funcitons 2024-09-10 17:31:02 +10:00
Dalai Felinto
d939557e4b UI: Fix viewport selection icons
These icons are extremely order dependent and set dynamically in a
four-way option at:

`rna_object_type_visibility_icon_get_common`

Problem introduced on: 60cc73afe6, when I sorted the non-toggle icons
alphabetically.

Bug reported by Pablo Vazquez in real life.
2024-09-09 11:10:51 +02:00
Nathan Vegdahl
e991765a83 Fix: incorrect indentation in action editor with layered actions
The code that decides the indentation for channel groups and fcurve channels
already accounted for the difference between the Action Editor and Dopesheet/
Graph Editor, since the level of nesting is different in the Action Editor vs
the other two.  However, it didn't account for the difference between legacy and
layered actions, which have different nesting in the Action Editor.

Additionally, before layered actions were introduced it was impossible for
the Action Editor to display channels from e.g. materials, but those channels
can now be displayed in the Action Editor via the slot system.  However, the
indentation code was structured such that material (etc.) channels were *always*
indented as if they were in the Dopesheet/Graph Editor, where they're always
nested under the IDs that use them.

This commit fixes the issue by having a separate code path for indenting in the
Action Editor that only indents channel groups and fcurve channels, and which
properly handles the difference between layered and legacy actions.

Pull Request: https://projects.blender.org/blender/blender/pulls/127202
2024-09-06 17:37:50 +02:00
Nathan Vegdahl
92a7229f67 Anim: implement channel grouping/moving ops for layered actions
This adds layered animation support to the following operators, allowing users to manage the grouping and arrangement of fcurves in the channel list:

- "Group Channels"
- "Ungroup Channels"
- "Move Channels"

Pull Request: https://projects.blender.org/blender/blender/pulls/127080
2024-09-06 16:12:05 +02:00
Dalai Felinto
60cc73afe6 Cleanup: UI: Icons: Sort the icons alphabetically between their categories
No functional changes.

The TOGGLES and INPUT were left untouched since they are order-dependent.

Ref: !127197

Pull Request: https://projects.blender.org/blender/blender/pulls/127197
2024-09-06 12:37:56 +02:00
Dalai Felinto
d563926d73 Cleanup: UI: Shuffle icons and group them in categories
No functional changes.

The comments in the file are used as categories by some of our ICON
reading tools.

This also groups the TOGGLES icons together, with comments about their
order. This only includes the icons actively used as toggles at the
moment.

Note that ICON_NONE has always to be the first one in this file since
some parts of the code (e.g., the code to turn RECORD_ON into colored,
and the code for the popover chevron) have no-icon hardcoded as 0.

Ref: !127197
2024-09-06 12:37:55 +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
Harley Acheson
382244c258 UI: Docking Drag Mouse Cursor
This shows the docking feedback very similar to how tooltips are shown
elsewhere. It describes the operation and also includes the icon and
name of the moving/changing area.

Pull Request: https://projects.blender.org/blender/blender/pulls/126898
2024-09-04 22:43:57 +02:00
Campbell Barton
ad67ad63fe Cleanup: spelling in comments 2024-09-04 19:34:15 +10:00
Sybren A. Stüvel
4d4ad34f4c Anim: Action Slot icon
Add an icon for Action Slots. Design task: #123372

Pull Request: https://projects.blender.org/blender/blender/pulls/127102
2024-09-03 18:33:36 +02:00
Nathan Vegdahl
56e5b61ad0 Fix: layered-action channel groups not shown in graph editor
The issue was that we were misinterpreting the `ANIMFILTER_FCURVESONLY`
flag in the animation filtering code. We were taking it to mean that
literally only actual fcurve channels should be included, but in fact
it should include the channel groups for those fcurve channels as well.

The graph editor code (but not the dopesheet code) depended on this
interpretation to function correctly, and doesn't display the groups
at all without it.

This fixes the issue by not excluding channel groups even when that
flag is set. This also updates the documentation of that flag to
clarify its actual semantics.

Pull Request: https://projects.blender.org/blender/blender/pulls/127108
2024-09-03 15:48:40 +02:00