* Sculpt now has an API to get brush channel settings.
If a sculpt cache exists it will use the channels there
(ss->cache->channels_final), otherwise it pulls them
from a brush and Sculpt toolsettings. Exampes:
float f = SCULPT_get_float(ss, "setting", sd, brush);
itn i = SCULPT_get_int(ss, "setting", sd, brush);
* Improved the UI a bit
* The input device curves for brush channels
now use a copy on write mechanism.
+ It's based on a global cache of curves.
The alternative is to reference count
BrushChannels, which I also implemented
then abandoned.
+ Profiling showed that copying CurveMapping
instances was actually a problem.
* Lots of small fixes to the old<-> new brush setting
conversion code;
* Brush commands can now, sortof, have individual
spacing. The default brush spacing still acts
as a minimum though.
* Added a BLI_ghash_lookup_p_ex method that
returns the key ptr inside the ghash (it
returns the actual key, not a pointer to
Entry.key).
* Added a general 1d CurveMapping preset operator
that uses an RNA path to get the curve.
BrushChannels are now stored in linked lists
instead of simple arrays. This helps to
avoid memory corruption.
I had originally wanted to be able to pass
BrushChannels by value, but that doesn't really
work since they heap allocd data (the input
mapping curves).
This patch allows Asset Browser previews to be made regardless
of the setting of the (unrelated) "File Preview Type" Preference.
See D12484 for more details.
Differential Revision: https://developer.blender.org/D12484
Reviewed by Julian Eisel
Use the inverse of the grease pencil object. This patch fixes the issue for bones and objects.
Maniphest Tasks: T91481
Differential Revision: https://developer.blender.org/D12539
Add `BLI_uuid` and `DNA_uuid_types.h` with a UUID implementation
following RFC4122 (https://datatracker.ietf.org/doc/html/rfc4122.html).
The following features are implemented:
- A struct of 128 bits that can be used in DNA definitions.
- Generation of version 4 UUIDs, that is, purely random ones.
- UUID equality function.
- String to UUID and UUID to string conversion functions that are
compatible with RFC4122.
- C++ stream operator that outputs the UUID as string.
This UUID will be used by the asset system, to uniquely identify asset
catalogs.
Reviewed By: Severin, jacqueslucke
Differential Revision: https://developer.blender.org/D12475
When using FModifier `Restrict Frame Range`, the resulting influence was
zero being exactly on `Start` / `End` range borders (so borders were
**exclusive**).
This made it impossible to chain FModifers together (forcing the user to
specify values slightly below the desired border in following
FModifiers).
This is now corrected to be **inclusive** on Start / End range borders.
Before
{F10234864}
After
{F10234865}
Testfile
{F10234866}
In the case of touching open borders (so [frame A frame B] followed by
[frame B frame C]) both modifiers are evaluated (in stack order).
If the later modifier has full influence (and is not additive) this simply
means the result is the same as the later modifier's value.
If influences below 1 are used (or modifiers are additive) both modifier's
values are interpolated/added accordingly.
technical notes:
- this was caused by the introduction of FModifier Influence/BlendIn-Out
in rB185663b52b61.
- for comparison, see other occurrences of
`FMODIFIER_FLAG_RANGERESTRICT`.
- the following conditions in `eval_fmodifier_influence` for blend in/
out have been changed accordingly.
Maniphest Tasks: T85564
Differential Revision: https://developer.blender.org/D10401
Change KeyMapItem.alt/ctrl/shift/oskey to integer types,
where -1 is used to ignore the modifier when matching key-map items.
It was only possible to set all modifiers to -1 at once from RNA
using the 'any' property.
Afterwards individual modifiers could be set back to true/false.
Although these key-map items could not be exported/imported.
Exposing the values directly avoids the need for cumbersome workarounds.
Command Lists
* The new system will be based on command lists
generated by (eventually) a node editor.
* For now, the lists will be hardcoded.
* Idea is to make a minimal viable
brush engine that won't cause file breakage
when the upgrade to node-based brushes happen.
Brush Channels
* Wrote new structures and API to wrange
brush parameters: BrushChannel.
* Supports, floats, ints, enums, bitmasks,
with plans for vec3 and vec4.
* This will replace UnifiedPaintStruct,
most of the members of Brush and the
DynTopoSettings struct.
* Brush channels can
be mapped to various input device
channels (e.g. pen pressure); each
mapping has its own associated curve
(CurveMapping instance) and bounds.
Brush channel inheritence chaining
* Brush channels can form inheritence chains
* Channel sets are stored in three places:
in the scene toolsettings, in Brush, and in
individual brush commands.
* Node groups will also have a channel set.
* Channels in each set can be flagged to
inherit from the parent set.
* Inheritence happens in seperate merged
channel sets at runtime. The final
Brush channels live in Brush->channels_final,
while the final command channels live in
BrushCommand->params_final.
These were added in a1c8543f2a (2007)
but never used.
Nor did they have any meaning in practice.
Note that versioning keymap items isn't needed as these values were
never set. The code-paths that set these values also set KM_MOD_FIRST
causing `keymap_event_set` to only ever assign values of 0 or 1.
These flags complicate further exposing KM_ANY (-1)
which is also a valid value for modifiers.
- Show "Lasso Select" in menus (along with Box & Circle select)
- Show "Extrude to Cursor" (along with other extrude actions).
- Rename operators that add/extrude on Ctrl-Click
since their names were inconsistent.
This is mainly for discoverability.
While the screenshot operator showed an "Area" option,
it wasn't usable from the main menu (unless accessed via menu search).
Split screenshot area into an operator that depends on cursor.
Support waiting for input so operators that depend on the
cursor location are usable from menus / buttons.
Use an operator type flag which the user interface code checks for,
waiting for input when run from a menu item.
This patch only supports this feature, there are no functional changes.
The motivation for this change is discoverability since some actions
were either hidden or broken when accessed from menus
(where the behavior of the operator depended on the menu location).
In general, waiting for input is *not* an efficient way to access tools,
however there are over 50 operators with a "wait_for_input" property
so this isn't introducing a new kind of interaction,
rather exposing this in a way that does not need to be hard-coded into
each operator, or having modal callbacks added for the sole purpose
of waiting for input.
Besides requiring boiler plate code using a "wait_for_input" property
has the added down-side of preventing key shortcuts from showing.
Only the menu items will enable the property,
causing them not to match key-map items.
Reviewed By: Severin
Ref D12255
An issue with the previous commit-- the default value of the type was
used instead of the property value when the "use_attribute" property
was missing.
This adds a toggle to node group inputs exposed in the modifier to use
an attribute instead of a single value. When the toggle is pressed, the
button switches to a text button to choose an attribute name. Attribute
search isn't implemented here yet.
One confusing thing is that some values can't be driven by attributes
at all, like the size of a primitive node. In that case, we should have
a node warning, but that will be separate since it's more general.
We can also have an option to turn off this toggle in node group
input settings.
The two new properties for each input are stored with the same name
as the value, but with `"_use_attribute"` and `"_attribute_name"``
suffixes. The properties are not added for socket types that don't
support attribute input, like object sockets.
Differential Revision: https://developer.blender.org/D12504
Adds an "Auto" option to blend thumbnail types that will automatically
use Screenshot if there is no camera and 3dview, or workbench render
with shading settings from the largest 3dview.
See D12407 for more details.
Differential Revision: https://developer.blender.org/D12407
Reviewed by Campbell Barton
This should allow easier changes when it's helpful to use C++ types.
The diff is for a test on the buildbot.
Differential Revision: https://developer.blender.org/D12528