Baking could fail to access an objects evaluated mesh data (see #107426),
while the error remains, prefer an error instead of crashing.
Since the depsgraph runs Python callbacks I don't think we can
provide a guarantee the mesh data will available, so even if #107426
is fixed, it's reasonable to have a check here.
`GPENCIL_draw_scene` uses `pd->tobjects.first == nullptr` to determine
whether to early return (draw nothing). When there's only "In Front"
grease pencil objects in scene, `tobjects.first` can be `nullptr` but
`tobjects_infront.first` is valid, in which case no grease pencil would
be drawn. Becase `gpencil_object_cache_sort` will link those two command
lists both to `tobjects` and allow `infront` ones to draw after others,
thus move it before the early return to allow drawing to proceed
normally.
Pull Request: https://projects.blender.org/blender/blender/pulls/132155
Slight displacement in mouse position triggers timer reset (pass=1).
With such condition, new redraw call to tooltip sets non zero timer
value (`r_pass_delay`) and `is_label=true` inside `ui_but_tooltip_init`.
This label boolean further skips drawing of description (for example, see:
`ui_tooltip_data_from_tool`).
To resolve this situation, inside timer_reset function keep `pass=0`
when tooltip region exists (i.e label is already visible on tooltip)
Pull Request: https://projects.blender.org/blender/blender/pulls/133258
Changes to the formatting of the OS window title for MacOS platform to
better follow their guidelines. Some refactoring, but there should be
no changes seen on other platforms.
Pull Request: https://projects.blender.org/blender/blender/pulls/132410
While the RecentFile struct itself was removed from the list of recent
files, the `filepath` field was not freed. Use the already existing
`wm_history_file_free` function to perform the cleanup.
Pull Request: https://projects.blender.org/blender/blender/pulls/133354
Previously, when evaluated on the face corner domain, the normal input
node just returned the face normals, as if the mesh was completely flat
shaded. This ignores face and edge smoothness, and custom face corner
normals. In the past couple years the expected behavior of accessing
normals has become much clearer and this behavior is clearly a mistake
in retrospect.
This commit exposes the same face corner normals used everywhere else
in Blender when the node is evaluated on the corner domain. The old
behavior is accessible with a node property in the sidebar. There is
versioning so old files have the property set and get the same results.
This is split from !132583.
Pull Request: https://projects.blender.org/blender/blender/pulls/133340
Now the output socket checks if the corresponding inline socket that it should
be aligned with is visible.
This is an alternative to #133271 which had the problem that it resulted in
`flat_item::Socket` instances for which the input and output is `nullptr`.
Pull Request: https://projects.blender.org/blender/blender/pulls/133325
Similar to `bpy.data.user_map`, it returns a mapping of IDs to all the
filepaths they use.
Fairly basic still, may need to be refined with more options to
control which filepaths are included etc.
Mainly intended to make handling of a production blendfile dependencies
more easy.
Also adds some basic testing of the new feature.
Pull Request: https://projects.blender.org/blender/blender/pulls/127252
With an asset library configured in the Preferences that had an empty
path, the catalog tree of the "Current File" asset library would be
empty. That is because the path-less library would incorrectly be
considered as containing the current file's path (`BLI_path_contains()`
returned true for the empty path).
Before slotted actions, it was only useful to stash an action once on a
data-block: that was all that was needed to keep the action's channels
associated with the data-block, and stashing it multiple times was redundant.
Therefore Blender would simply refuse to stash an action if it was already
stashed.
However, now with slotted actions the user may legitimately want to stash an
action more than one time: if the action has multiple slots, the user may want
to keep the channels of multiple slots all associated with a data-block. Doing
that requires stashing each action+slot combination separately.
This PR addresses this use case by now allowing each action+slot *combo* to be
stashed once. Stashing a given action+slot combo more than once per data-block
is still prevented, however, since that is still redundant.
Pull Request: https://projects.blender.org/blender/blender/pulls/133307
For points with locked material, add them to `src_to_dst_points`
as in they are outside the eraser ring to avoid deleting these points.
A new function is introduced to deal with it.
For stroke eraser mode, pass true in Indexmask `strokes_to_keep`.
Pull Request: https://projects.blender.org/blender/blender/pulls/133137
The name `id_root` was not descriptive, and was just a hold-over from the
equivalent (now deprecated) property on the Action itself. `target_id_type`
is more clear, reflecting that this is the type of ID the Slot is intended
to animate.
This PR also renames the corresponding `id_root_icon` to
`target_id_type_icon`.
Note that this PR updates the GLTF import/export core addon to adhere to
these name changes as well.
Pull Request: https://projects.blender.org/blender/blender/pulls/133164
Did a pass through the code base to make sure the uses of `Action.idroot`
are correct in the context of layered actions.
I found and fixed one issue in Grease Pencil v2 -> v3 conversion code
where the idroot was being set to a non-zero value without checking if
the action was layered or not first. Other than that, I also cleaned up
a couple of dodgy-looking things I found.
Pull Request: https://projects.blender.org/blender/blender/pulls/133205
This was true for Opacity or Tint modifiers where influence vertexgroups
were having an effect on strokes, but were ignored for fills.
This was also the case for GPv2 / 4.2, but there is no apparent reason
for not doing this on fills (if we are doing it for strokes).
NOTE: it was actually in use if "Use Weight as Factor" was used (but
that only means weights should be used directly, otherwise [when used as
influence], weights should be multiplied).
Pull Request: https://projects.blender.org/blender/blender/pulls/133306
`Reset color attribute` operator currently removes the `vertex_color`
attribute from geometry. If selection exists, reset the color value to
1.0 instead of clearing the entire attribute.
Pull Request: https://projects.blender.org/blender/blender/pulls/133249
`apply_color_operation_for_mode` only deals with the selection mask if
vertex color mode is `Stroke` (or the attribute domain is `Point`).
Use similiar logic for `mode=Fill`(domain=`Stroke`).
Pull Request: https://projects.blender.org/blender/blender/pulls/133256
The File Output node no longer works inside node groups since the
introduction of the new CPU compositor. This is explicit in the code, so
we just consider all file output nodes recursively to fix this issue.
Randomization of stroke color(H/S/V), opacity, radius and rotation was
implemented using this formula:
`value = original_value * random(0~2)` (1)
Which was different from before Grease Pencil v3 rewrite:
`value = original_value + random(0~2)` (2)
This leads to different looks of the stroke. This PR fixes the problem
by implementing formula (2) for the randomization mixing to restore
original behaviour.
Also makes sure the values are correctly clamped to the expected ranges.
Pull Request: https://projects.blender.org/blender/blender/pulls/133032
Use BLI_uniquename_cb to check and fix naming conflicts, and keep track
of the potentially modified node names in a map.
Reserve the material name, so that later the output node can be renamed to it
without conflicts. Also make sure there are no conflicts with names auto
generated by MaterialX, by always naming nodes ourselves.
Pull Request: https://projects.blender.org/blender/blender/pulls/133234
The weights were only used when "Use Weight as Factor" was used (this is
wrong though, that button uses the weights directly, otherwise the
Factor has to be multiplied by the weights -- as done in all other
modifiers [and in 4.2])
Pull Request: https://projects.blender.org/blender/blender/pulls/133297
Code at the XR actionmap level is using calloc/free, but later when
conditions trigger WM_operator_properties_alloc in
`windowmanager\intern\wm_operators.cc` it is using MEM_new, which is
the mismatch. XR actionmap code needed to be modified to be compatible
with the allocators it is using.
Pull Request: https://projects.blender.org/blender/blender/pulls/133274
This error would occur because the quadratic equation solving code didn't
check for `a` being non-zero. Fixed by adding the additional check. This
can be tested and reproduced using the `ShrinkwrapTargetNormalProject2`
`modifiers` test.
Pull Request: https://projects.blender.org/blender/blender/pulls/133273
Resolve an error where the brushes from the image/3D viewport
where shared but the tool was not. Causing the brush not to match
the appropriate tool when both an image & 3D viewport were displayed.
Resolve the issue by adding support for a "pending" tool,
a tool ID which is to be used.
This accounts for cases where it's not known if the requested tool
exists and uses the same code paths for initializing tools as is done
for initializing on file load for e.g.
Ref !133085
API was defined only for movie strips. Define is also for Scene, image
and sound strips.
This required minor refactoring of how RNA collection type is defined.
Pull Request: https://projects.blender.org/blender/blender/pulls/133103
Enabling `use_snap_rotate` in 3D viewport caused rotation in sequencer
to apply snapping. Rotation snapping was using mixed snapping functions,
which aren't implemented in sequencer.
Ignore affect rotation/scale tool setting property and force increment
snapping to be used with these transform modes.
Pull Request: https://projects.blender.org/blender/blender/pulls/133272
Instead of the old time cursor, this will now show a progress bar in the
OS taskbar or dock, as well as the main window status bar. Along with the
job name and cancel button.
Pull Request: https://projects.blender.org/blender/blender/pulls/133174
When first starting the Mesh Bisect operator, the Status Bar shows
"LMB: Click and drag to draw cut line". This PR just changes that to
show the message with an icon instead. And adds "Cancel".
Pull Request: https://projects.blender.org/blender/blender/pulls/133244
When drawing strokes in Grease Pencil, some (custom) attribute values
stayed uninitialized. This was due to a tiny bug in the Draw operator
initializing only some attribute values of newly drawn stroke points
to their default value and not all of them.
This PR fixes that.
Pull Request: https://projects.blender.org/blender/blender/pulls/133216
In Sculpt, Vertex Paint, and Weight Paint, the operator used while
painting (`SCULPT_OT_brush_stroke`, `PAINT_OT_vertex_paint`, and
`PAINT_OT_weight_paint`) can currently be executed in python as they
define `exec` methods. However, each of them has a implicit dependency
on the `OperatorStrokeElement` struct containing a `location`
corresponding to the object space location of the stroke daub.
This limits the usefulness of the operator in non-interactive
situations, as determining the actual location of a stroke on a 3D
object requires access to the Paint BVH to perform a raycast and project
the mouse from 2D region space into object space.
To allow users to define a stroke in region space coordinates, this
commit adds a new parameter to the associated operators,
`reproject_stroke` which indicates whether or not the current `location`
data should be discarded and replaced with newly calculated positions.
Ref: #132960
Pull Request: https://projects.blender.org/blender/blender/pulls/132974