Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-11-01Refactor: Rename Object->obmat to Object->object_to_worldSergey Sharybin
Motivation is to disambiguate on the naming level what the matrix actually means. It is very easy to understand the meaning backwards, especially since in Python the name goes the opposite way (it is called `world_matrix` in the Python API). It is important to disambiguate the naming without making developers to look into the comment in the header file (which is also not super clear either). Additionally, more clear naming facilitates the unit verification (or, in this case, space validation) when reading an expression. This patch calls the matrix `object_to_world` which makes it clear from the local code what is it exactly going on. This is only done on DNA level, and a lot of local variables still follow the old naming. A DNA rename is setup in a way that there is no change on the file level, so there should be no regressions at all. The possibility is to add `_matrix` or `_mat` suffix to the name to make it explicit that it is a matrix. Although, not sure if it really helps the readability, or is it something redundant. Differential Revision: https://developer.blender.org/D16328
2022-10-07Cleanup: redundant parenthesisCampbell Barton
2022-08-25Keyframing: replace mat3_to_quat_is_ok with mat4_to_quatCampbell Barton
Added [0] which notes in most cases results are the same but in some cases the result seems better. While true at the time of writing since then mat3_to_quat has been improved and used for nearly all matrix to quaternion conversion. 0: 876cfc837e2f065fa370940ca578983d84c48a11
2022-07-29Cleanup: Move RNA path functions into own C++ fileJulian Eisel
Adds `rna_path.cc` and `RNA_path.h`. `rna_access.c` is a quite big file, which makes it rather hard and inconvenient to navigate. RNA path functions form a nicely coherent unit that can stand well on it's own, so it makes sense to split them off to mitigate the problem. Moreover, I was looking into refactoring the quite convoluted/overloaded `rna_path_parse()`, and found that some C++ features may help greatly with that. So having that code compile in C++ would be helpful to attempt that. Differential Revision: https://developer.blender.org/D15540 Reviewed by: Brecht Van Lommel, Campbell Barton, Bastien Montagne
2022-07-14Cleanup: Rename & refactor several F-curve functionsColin Basnett
Rename and refactor several F-curve key manipulation functions, and move them from `editors` to `blenkernel`. The functions formerly known as `delete_fcurve_key`, `delete_fcurve_keys`, and `clear_fcurve_keys` have been moved from `ED_keyframes_edit.h` to `BKE_fcurve.h` and have been renamed according to hierarchical naming rules. Below is a table of the naming changes. | From | To | | -- | -- | | `delete_fcurve_key(fcu, index, do_recalc)` | `BKE_fcurve_delete_key(fcu, index)` | | `delete_fcurve_keys(fcu)` | `BKE_fcurve_delete_keys_selected(fcu)` | | `clear_fcurve_keys(fcu)` | `BKE_fcurve_delete_keys_all(fcu)` | | `calchandles_fcurve()` | `BKE_fcurve_handles_recalc()` | | `calchandles_fcurve_ex()`| `BKE_fcurve_handles_recalc_ex()` | The function formerly known as `delete_fcurve_key` no longer takes a `do_fast` parameter, which determined whether or not to call `calchandles_fcurve`. Now, the responsibility is on the caller to run the new `BKE_fcurve_handles_recalc` function if they have want to recalculate the handles. In addition, there is now a new static private function called `fcurve_bezt_free` which sets the key count to zero and frees the key array. This function is now used in couple of instances of functionally equivalent code. Note that `BKE_fcurve_delete_keys_all` is just a wrapper around `fcurve_bezt_free`. This change was initially spurred by the fact that `delete_fcurve_keys` was improperly named; this was a good opportunity to fix the location and naming of a few of these functions. Reviewed By: sybren Differential Revision: https://developer.blender.org/D15282
2022-06-30Cleanup: Remove scene frame macros (`CFRA` et al.)Julian Eisel
Removes the following macros for scene/render frame values: - `CFRA` - `SUBFRA` - `SFRA` - `EFRA` These macros don't add much, other than saving a few characters when typing. It's not immediately clear what they refer to, they just hide what they actually access. Just be explicit and clear about that. Plus these macros gave read and write access to the variables, so eyesores like this would be done (eyesore because it looks like assigning to a constant): ``` CFRA = some_frame_nbr; ``` Reviewed By: sergey Differential Revision: https://developer.blender.org/D15311
2022-06-09Cleanup: formatCampbell Barton
2022-06-07VSE preview transform autokeying improvementsPhilipp Oeser
NOTE: this patch originated in T98015 which was split into multiple reports. While it could be split into multiple patches these are very much related so keeping as one for now This patch fixes the following issues: [1] autokeying transforms in preview only creates keyframes if there is an FCurve already [2] autokeying transforms in preview only creates keyframes for rotation/scale if rotating/scaling around cursor (should keyframe position as well) [3] autokeying transforms in preview does not work during animation playback For [1], a param was added to `ED_autokeyframe_property` which can tweak its default behavior of only creating keyframes on already keyed properties (which was fine because this is mostly called from buttons where this behavior is desired). Callers such as gizmos (or the VSE in our case) can use this additional param so that keyframes are also created on "not-yet-keyframed" properties. For [2], the pivot is checked and position properties also keyed if necessary (which is also consistent with the way objects are keyed in the 3DView) For [3], `animrecord_check_state` was changed to be able to work on scenes as well and the transform system in the VSE preview was made aware of the screen's `animtimer`. NOTE: there are still things to be improved for keyframing in the VSE, the most obvious is probably a `keyframe_insert` operator (with keyingsets) Fixes T98429, T98430, T98431 Maniphest Tasks: T98015, T98431, T98430, T98429 Differential Revision: https://developer.blender.org/D15047
2022-05-26UI support for showing candidates for string propertiesCampbell Barton
Currently strings are used for cases where a list of identifiers would be useful to show. Add support for string properties to reference a callback to populate candidates to show when editing a string. The user isn't prevented from typing in text not found in this list, it's just useful as a reference. Support for expanding the following strings has been added: - Operator, menu & panel identifiers in the keymap editor. - WM operators that reference data-paths expand using the Python-consoles auto-complete functionality. - Names of keying sets for insert/delete keyframe operators. Details: - `bpy.props.StringProperty` takes an option `search` callback. - A new string callback has been added, set via `RNA_def_property_string_search_func` or `RNA_def_property_string_search_func_runtime`. - Addresses usability issue highlighted by T89560, where setting keying set identifiers as strings isn't practical. - Showing additional right-aligned text in the search results is supported but disabled by default as the text is too cramped in most string search popups where the feature would make sense. It could be enabled as part of other layout tweaks. Reviewed By: brecht Ref D14986
2022-04-20Cleanup: spelling in commentsCampbell Barton
2022-04-15Fix: Missing Null CheckWayde Moss
Introduced by my recent commit: {rB3acbe2d1e933} Lead to crash when insert_keyframe_direct() was called. Keyframing crashed for NLA special properties (influence, animated_time), driven properties, etc.
2022-04-14NLA: Keyframe Remap Through Upper StripsWayde Moss
Add a new operator, "Start Tweaking Strip Actions (Full Stack)", which allows you to insert keyframes and preserve the pose that you visually keyed while upper strips are evaluating, The old operator has been renamed from "Start Tweaking Strip Actions" to "Start Tweaking Strip Actions (Lower Stack)" and remains the default for the hotkey {key TAB}. **Limitations, Keyframe Remapping Failure Cases**: 1. For *transitions* above the tweaked strip, keyframe remapping will fail for channel values that are affected by the transition. A work around is to tweak the active strip without evaluating the upper NLA stack. It's not supported because it's non-trivial and I couldn't figure it out for all transition combinations of blend modes. In the future, it would be nice if transitions (and metas) supported nested tracks instead of using the left/right strips for the transitions. That would allow the transitioned strips to overlap in time. It would also allow N strips to be part of the (previously) left and right strips, or perhaps even N strips being transitioned in sequence (similar to a blend tree). Proper keyframe remapping through all that is currently beyond my mathematical ability. And even if I could figure it out, would it make sense to keyframe remap through a transition? //This case is reported to the user for failed keyframe insertions.// 2. Full replace upper strip that contains the keyed channels. //This case is reported to the user for failed keyframe insertions.// 3. When the same action clip occurs multiple times (colored Red to denote it's a linked strip) and vertically overlaps the tweaked strip, then the remapping will generally fail and is expected to fail. I don't plan on adding support for this case as it's also non-trivial and (hopefully) not a common or expected use case so it shouldn't be much of an issue to lack support here. For anyone curious on the cases that would work, it works when the linked strips aren't time-aligned and when we can insert a keyframe into the tweaked strip without modifying the current frame output of the other linked strips. Having all frames sampled and the strip non-time aligned leads to a working case. But if all key handles are AUTO, then it's likely to fail. //This case is not reported to the user for failed keyframe insertions.// 4. When using Quaternions and a small strip influence on the tweaked Combine strip. This was an existing failure case before this patch too but worth a mention in case it causes confusion. D10504 has an example file with instructions. //This case is not reported to the user for failed keyframe insertions. // 5. When an upper Replace strip with high influence and animator keys to Quaternion Combine (Replace is fine). This case is similar to (4) where Quaternion 180 degree rotation limitations prevent a solution. //This case is not reported to the user for failed keyframe insertions.// Reviewed By: sybren, RiggingDojo Differential Revision: https://developer.blender.org/D10504
2022-04-11Fix setting key shortcuts for insert keyframe menu itemsCampbell Barton
It was not possible to assign a shortcut to menu items in the insert key-frame menu going back to version 2.7x. Doing so would replace the current key that opens the insert keyframe menu (I-key by default), instead of binding a key to insert a key-frame for the keying-set referenced by the menu item. Now each menu item can be bound to a key or added to the "Quick Favorites" menu, directly inserting a key-frame for the corresponding keying-set. Note that users must use the operator `anim.keyframe_insert_by_name` when setting up key-shortcuts as `anim.keyframe_insert` is only intended to launch the menu. Keymap Editor: When editing these key-map items in the key-map editor, the keying-set identifier must be used. At the moment the key-map editor doesn't support showing a drop-down list. The identifiers can be used from the tool-tip or the info editor. {F12994924} Details: Use `ANIM_OT_keyframe_insert_by_name` instead of `ANIM_OT_keyframe_insert_menu` for the insert keyframe popup menu to resolve the following issues binding keys to keying sets: - The index of the keying set isn't stable (adding/removing keying sets may change it). - Binding a key to items in the popup menu triggers a popup instead of inserting a key using the keying set from the menu item. While support for using the current operator could be improved, it will still only work for built-in keying sets, so I'd prefer to use an operator that is intended for key-bindings. Besides supporting binding keys to menu items there are no functional changes. Reviewed By: sybren Ref D14289
2022-03-14Auto-generate RNA-structs declarations in `RNA_prototypes.h`Julian Eisel
So far it was needed to declare a new RNA struct to `RNA_access.h` manually. Since 9b298cf3dbec we generate a `RNA_prototypes.h` for RNA property declarations. Now this also includes the RNA struct declarations, so they don't have to be added manually anymore. Differential Revision: https://developer.blender.org/D13862 Reviewed by: brecht, campbellbarton
2022-03-10Cleanup: spelling in comments & some minor clarificationsCampbell Barton
2022-03-09Cleanup: use doxygen comments & sections for animation filesCampbell Barton
2022-03-09Correct assert in 399ac1ff113e20688f277157ccb3c671648c9b1cCampbell Barton
Pass NULL instead of an empty string.
2022-03-09Fix subtype & default for keying set operator propertiesCampbell Barton
Error in 1a12c9edab4ac89c8a87c20ad3a2195d0e681bc8, also correct descriptions.
2022-02-11File headers: SPDX License migrationCampbell Barton
Use a shorter/simpler license convention, stops the header taking so much space. Follow the SPDX license specification: https://spdx.org/licenses - C/C++/objc/objc++ - Python - Shell Scripts - CMake, GNUmakefile While most of the source tree has been included - `./extern/` was left out. - `./intern/cycles` & `./intern/atomic` are also excluded because they use different header conventions. doc/license/SPDX-license-identifiers.txt has been added to list SPDX all used identifiers. See P2788 for the script that automated these edits. Reviewed By: brecht, mont29, sergey Ref D14069
2022-01-14Cleanup: spelling in comments, C++ style comments for disabled codeCampbell Barton
Also ensure space at end of comment.
2021-12-10Cleanup: move public doc-strings into headers for various API'sCampbell Barton
Some doc-strings were skipped because of blank-lines between the doc-string and the symbol and needed to be moved manually. - Added space below non doc-string comments to make it clear these aren't comments for the symbols directly below them. - Use doxy sections for some headers. Ref T92709
2021-11-24Animation: allow marking actions as cyclic for Cycle-Aware Keying.Alexander Gavrilov
When a manual frame range is set, allow marking an action as having Cyclic Animation. This does not affect how the action is evaluated, but the Cycle-Aware Keying option will automatically make any newly added F-Curves cyclic. This allows using the option from the start to build the cycle, rather than only for tweaking an existing loop. The curves are made cyclic when they have only one key, either after inserting the first key, or before adding the second one. The latter case avoids the need to manually make the first added curve cyclic after marking a newly added action cyclic. Differential Revision: https://developer.blender.org/D11803
2021-10-20Cleanup: use elem macrosCampbell Barton
2021-10-14Cleanup: pass the sizeof(..) as the second arg for array allocationCampbell Barton
By argument naming and convention this is the intended argument order.
2021-10-04Make keyframe inserts/removals less verbose when called from python.Gaia Clary
Following operators now only report messages back when they are called via their invoke-methods: - ANIM_OT_keyframe_insert - ANIM_OT_keyframe_insert_by_name - ANIM_OT_keyframe_insert_menu - ANIM_OT_keyframe_delete - ANIM_OT_keyframe_clear_v3d - ANIM_OT_keyframe_delete_v3d Also removed the attribute confirm_success from the following operators: - ANIM_OT_keyframe_insert - ANIM_OT_keyframe_insert_by_name - ANIM_OT_keyframe_insert_menu - ANIM_OT_keyframe_delete - ANIM_OT_keyframe_delete_by_name Note: addons/scripts possibly need to be updated if they use the above operators AND set the "confirm_success" attribute Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D12697
2021-09-29Add an option to silence bpy.ops.anim.keyframe_delete_v3d when used in AddonsGaia Clary
The issues: 1.) When we want to remove keyframes from a range of frames in an action, then we can use bpy.ops.anim.keyframe_delete_v3d to remove the keys frame by frame. However, whenever the operator hits a frame with no keyframes, then it generates an error. While when it hits a frame with keyframes, then it reports the numbner of removed keys. This creates a lot of unnecessary noise in the Blender console. 2.) Furthermore a related issue is that WM_event_add_notifier() is called also when no frames where removed. This seems to significantly slow down the removal of keyframes in a range of frames at least when i use vscode for debugging. A proposal for improvement: This patch adds an attribute 'confirm_success' which controls if the operator reports back what it did (or did not) while executing. Silent mode would then be called like this: bpy.ops.anim.keyframe_delete_v3d(confirm_success=False) Note: confirm_success is True by default so this patchj does not change the behavior of Blender, it only gives the option to scripts. 3.) Personal note: I have chosen the attribute name to be equal as it is used in other related operators. However i rather would rename the attribute to "verbose" (preferred) or "with_confirm". But i let this to be decided by the reviewers. Thanks for your time to review! Reviewed By: campbellbarton Differential Revision: https://developer.blender.org/D12629
2021-09-04RNA: support extracting names from paths without allocating memoryCampbell Barton
Support extracting identifiers RNA paths into fixed size buffer since the maximum size of the identifier is known all cases. - Add BLI_str_unescape_ex to support limiting the destination buffer. - Add BLI_str_quoted_substr to copy values into a fixed size buffer.
2021-09-01Cleanup: remove redundant strstr callsCampbell Barton
Rely on BLI_str_quoted_substrN to detect if the prefix exists since this function exists early there is no need to check before calling.
2021-07-09Cleanup: rename BKE_animdata_{add=>ensure}_idCampbell Barton
Use the term `ensure` as existing data is used when present.
2021-07-06Fix T89592: Can't remove keyframes without active keying setSybren A. Stüvel
Partially revert 7fc220517f87a2c40a4f438a50485233ae6ed62f, as it introduced two issues: - Deleting keys without active keying set was no longer possible, and - there was no more confirmation popup. Pressing {key Alt I} in the 3D Viewport now executes `ANIM_OT_keyframe_delete_v3d`, adjusted to suit both T88068 and T89592: - If there is an active keying set, delete keys according to that keying set. - Otherwise, behave as `ANIM_OT_keyframe_delete_v3d` did before, that is, delete all keyframes of the selected object and in pose-mode also of selected bones.
2021-07-06Cleanup: Keyframing, remove duplicate codeSybren A. Stüvel
Remove duplicate code from the `ANIM_OT_keyframe_delete` operator. The actions of the removed code are already performed by the preceding `keyingset_get_from_op_with_error()` call. No functional changes.
2021-07-03Cleanup: consistent use of tags: NOTE/TODO/FIXME/XXXCampbell Barton
Also use doxy style function reference `#` prefix chars when referencing identifiers.
2021-06-30Cleanup: use const arguments for accessor functionsCampbell Barton
2021-06-26Cleanup: full sentences in comments, improve comment formattingCampbell Barton
2021-06-24Cleanup: comment blocks, trailing space in commentsCampbell Barton
2021-04-09Cleanup: use our own code style for doxy-gen comment blocksCampbell Barton
2021-03-30Cleanup: animation, remove `BONE_UNKEYED` flagSybren A. Stüvel
Remove the `BONE_UNKEYED` flag. It was only written (set/cleared) but never actually read. Also remove `framechange_poses_clear_unkeyed()` as its only function was to clear the `BONE_UNKEYED` flag. It wasn't used anywhere either. The only code that used the flag was the `extract_pose_from_action()`, which was removed in 2869ce6cfab3aa4ff471bef6e49ac6fe15426247 (2009). No functional changes.
2021-02-16Cleanup: spellingCampbell Barton
2021-02-05Cleanup: correct spelling in commentsCampbell Barton
2021-01-15Nla Refactor: Split animsys_evaluate_nla()Wayde Moss
No intended functional changes. Refactors animsys_evaluate_nla() into 2 versions: animsys_evaluate_nla_for_keyframing(), animsys_evaluate_nla_for_flush() to make it clear what data is being calculated and why. Dummy strip creation has been refactored to two separate functions, animsys_create_tweak_strip() and animsys_create_action_track_strip(). Both are evaluated differently from other strips and eachother. There's no need to interweave them. A future patch D8296, generally requires both strips. ___ XXX anim_sys.c) nlatrack_find_tweaked() is a temporary work around. If anyone has any insight into this problem, help is appreciated. Reviewed by: sybren Differential Revision: http://developer.blender.org/D9696
2020-12-10BLI_string: return NULL from BLI_str_quoted_substrN on failureCampbell Barton
This was returning an empty allocated string, however almost all callers checked if the return value was NULL before freeing, making for misunderstandings on the intended use of this function. BCAnimationSampler::initialize_curves for example detected the f-curves animation type to 'bone' based on a non-NULL return value which never failed. Also fixes two leaks where the the result of BLI_str_quoted_substrN wasn't freed.
2020-11-19Cleanup: Grammar: "Allow to" vs gerundHans Goudey
In cases where "Allow" is followed by an infinitive, a noun needs to directly follow it. But it makes more sense to follow it with a gerund instead.
2020-10-13Cleanup: use BKE_fcurve_ prefix for keyframing bezier functionsCampbell Barton
- BKE_bezt_subdivide_handles -> BKE_fcurve_bezt_subdivide_handles - binarysearch_bezt_index -> BKE_fcurve_bezt_binarysearch_index These functions are specific to F-Curves and don't make sense for other uses of BezTriple (curve-object data for e.g.) Also: - Move detailed doxygen comment above code, following code-style. - Mark bezt_add_to_cfra_elem unused.
2020-10-12Animation: enforce that the active keyframe is always selectedSybren A. Stüvel
Check selection state in `BKE_fcurve_active_keyframe_index()`, and only return the active keyframe index when that keyframe is actually selected. This is now also asserted in the `BKE_fcurve_active_keyframe_set()` function, which is now also used when inserting a keyframe.
2020-10-12Animation: always try to match the existing curve when inserting keysSybren A. Stüvel
Previously Blender would only match the existing curve slope when the to-be-inserted key value was already very close to the curve. This check is now removed, allowing for sliders in the graph editor to subtly change the curve, and for keyframes added with ctrl+click to follow the curve better.
2020-10-10Cleanup: use C comments for descriptive textCampbell Barton
Follow our code style guide by using C-comments for text descriptions.
2020-10-07Fix T76595: Indicate the Active Keyframe in Graph EditorHans Goudey
In the graph editor there is a panel that says "Active Keyframe" for numerically editing a keyframe's values, but in the code there is no concept of the "active keyframe." Since this is a useful concept to have for some other features anyway, this commit adds an active keyframe index value to FCurves. It also displays it with a theme color for the active vertex (which didn't exist before) if the FCurve is active. The active keyframe in the graph editor is treated similarly to the active vertex in the 3D view. It is the keyframe most recently selected with a single click, and it is always selected. For now, the only real functional change is that the active keyframe appears in white and it should be more predictable which keyframe is being edited in the sidebar panel. Differential Revision: https://developer.blender.org/D7737
2020-10-05Insert keyframes while preserving shape of curveSybren A. Stüvel
Apply the De Casteljau algorithm to split the Bèzier curve at the X coordinate where the new key is inserted, and uses the result to update both the newly inserted and surrounding handles. For curves that use Auto keyframes this has been largely addressed by the new algorithm from D2884. This commit extends this to non-auto handles. This code is heavily based on D3172 by Alexander Gavrilov (@angavrilov). Manifest Task: https://developer.blender.org/T81353
2020-09-25Animation: set Action `idroot` at assignment instead of just at evaluationSybren A. Stüvel
Actions are either locked to a specific ID type, or "floating". Actions in the floating state are now locked when they are assigned to an ID block. Previously (rB94b99b5d4a7c20cf2) this was done at evaluation time, which caused various problems: - The ID type was set on the evaluated copy, and inconsistently flushed back to the original. - A newly created Action could not be assigned to an Action constraint, unless a depsgraph evaluation was be forced first. This is now resolved by calling `BKE_animdata_set_action()` to set the action (instead of direct assignment) where possible, and calling `BKE_animdata_action_ensure_idroot()` otherwise. Manifest Task: https://developer.blender.org/T80986
2020-09-15Cleanup: Remove unneeded parameterNathan Craddock
A parameter was added during development, but it was not needed and was never removed. No functional changes.