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-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-30Animation: Add GP layers in regular DopesheetAmélie Fondevilla
Grease Pencil animation channels are now also shown in the Dopesheet mode of the Dopesheet editor and in the Timeline. Grease pencil related events are now listened not only by container `SACTCONT_GPENCIL` (Grease Pencil Dopesheet), but also `SACTCONT_DOPESHEET` (main Dopesheet), and `SACTCONT_TIMELINE` (timeline). A new Animation Filter flag was added: `ANIMFILTER_FCURVESONLY`. For now this only filters out Grease Pencil Layer channels. **Implemented:** - Preview range set: now only considers selected Grease Pencil keyframes when `onlySel` parameter is true. Not only this allows the operator to work with grease pencil keyframes in main dopesheet, but it also fixes the operator in the Grease Pencil dopesheet. - Translation: allocation (and freeing) of specific memory for translation of Grease Pencil keyframes. - Copy/Paste: call to both Fcurve and GPencil operators, to allow for mixed selection. Errors are only reported when both the FCurve and GPencil functions fail to paste anything. - Keyframe Type change and Insert Keyframe: removed some code here to unify Grease Pencil dopesheet and main dopesheet code. - Jump, Snap, Mirror, Select all/box/lasso/circle, Select left/right, Clickselect: account for Grease Pencil channels within the channels loop, no need for `ANIMFILTER_FCURVESONLY` there. **Not Implemented:** - Graph-related operators. The filter `ANIMFILTER_FCURVESONLY` is naively added to all graph-related operators, meaning more-or-less all operators that used `ANIMFILTER_CURVE_VISIBLE`. - Select linked: is for F-curves channel only - Select more/less: not yet implemented for grease pencil layers. - Clean Keys, Sample, Extrapolation, Interpolation, Easing, and Handle type change: work on Fcurve-channels only, so the `ANIMFILTER_FCURVESONLY` filter is activated Graying out these operators (when no fcurve keyframe is selected) can be done with custom poll functions BUT may affect performance. This is NOT done in this patch. **Dopesheet Summary Selection:** The main summary of the dopesheet now also takes into account Grease Pencil keyframes, using some nasty copy/pasting of code, as explained [on devtalk](https://devtalk.blender.org/t/gpencil-layers-integration-in-main-dopesheet-selection-issue/24527). It works, but may be improved, providing some deeper changes. Reviewed By: mendio, pepeland, sybren Maniphest Tasks: T97477 Differential Revision: https://developer.blender.org/D15003
2022-06-30Transform Snap: nearest face snap mode, snapping options, refactoring.jon denning
This commit adds a new face nearest snapping mode, adds new snapping options, and (lightly) refactors code around snapping. The new face nearest snapping mode will snap transformed geometry to the nearest surface in world space. In contrast, the original face snapping mode uses projection (raycasting) to snap source to target geometry. Face snapping therefore only works with what is visible, while nearest face snapping can snap geometry to occluded parts of the scene. This new mode is critical for retopology work, where some of the target mesh might be occluded (ex: sliding an edge loop that wraps around the backside of target mesh). The nearest face snapping mode has two options: "Snap to Same Target" and "Face Nearest Steps". When the Snap to Same Object option is enabled, the selected source geometry will stay near the target that it is nearest before editing started, which prevents the source geometry from snapping to other targets. The Face Nearest Steps divides the overall transformation for each vertex into n smaller transformations, then applies those n transformations with surface snapping interlacing each step. This steps option handles transformations that cross U-shaped targets better. The new snapping options allow the artist to better control which target objects (objects to which the edited geometry is snapped) are considered when snapping. In particular, the only option for filtering target objects was a "Project onto Self", which allowed the currently edited mesh to be considered as a target. Now, the artist can choose any combination of the following to be considered as a target: the active object, any edited object that isn't active (see note below), any non- edited object. Additionally, the artist has another snapping option to exclude objects that are not selectable as potential targets. The Snapping Options dropdown has been lightly reorganized to allow for the additional options. Included in this patch: - Snap target selection is more controllable for artist with additional snapping options. - Renamed a few of the snap-related functions to better reflect what they actually do now. For example, `applySnapping` implies that this handles the snapping, while `applyProject` implies something entirely different is done there. However, better names would be `applySnappingAsGroup` and `applySnappingIndividual`, respectively, where `applySnappingIndividual` previously only does Face snapping. - Added an initial coordinate parameter to snapping functions so that the nearest target before transforming can be determined(for "Snap to Same Object"), and so the transformation can be broken into smaller steps (for "Face Nearest Steps"). - Separated the BVH Tree getter code from mesh/edit mesh to its own function to reduce code duplication. - Added icon for nearest face snapping. - The original "Project onto Self" was actually not correct! This option should be called "Project onto Active" instead, but that only matters when editing multiple meshes at the same time. This patch makes this change in the UI. Reviewed By: Campbell Barton, Germano Cavalcante Differential Revision: https://developer.blender.org/D14591
2022-06-29VSE: Improved Retiming systemRichard Antalik
Patch implements better way to control playback speed than it is possible to do with speed effect. Speed factor property can be set in Time panel. There are 2 layers of control: Option to retime movie to match scene FPS rate. Custom speed factor to control playback rate. Since playback rate is strip property, it is now possible to manipulate strip as normal one even if it is retimed. To facilitate manipulation, some functions need to consider speed factor and apply necessary corrections to strip offset or strip start. These corrections may need to be float numbers, so start and offsets must be float as well. Sound strips now use speed factor instead of pitch. This means, that strips will change length to match usable length. In addition, it is possible to group movie and sound strip and change speed of meta strip.
2022-06-28Fix T96776: Assets dropped upside down when looking through cameraGermano Cavalcante
In perspective mode the snap point direction needs to be taken into account to define which side of the face is being looked at. If there is no face under the mouse cursor, there is no direction adjustment and the element normal will be used.
2022-06-24Fix T99037: bpy.ops.transform.rotate fails in background modeCampbell Barton
This reverts commit c503c5f756aab850e8afe2513b2dc7b645cf84af, alternate fix for T82244. Scripts that run in background mode expected rotation to be usable, defaulting to the 3D viewport when there is no active windowing data. Also resolves T88610.
2022-06-22Mask Editor: Add toggle for mask spline drawingSimon Lenz
Adds an overlay option to show/hide the spline points & lines of masks in the Mask Editor. It also moves the "smooth" option up (its position left of the selection dropdown was missleading). {F11847272} This emerged from a discussion in https://developer.blender.org/D12776 Differential Revision: https://developer.blender.org/D13314
2022-06-14Cleanup: Move function definition to correct fileRichard Antalik
Function `SEQ_transform_handle_overlap` was declared in sequencer module header file, but it was defined in editor/transform module. Move definition to sequencer module.
2022-06-14Fix T72831: Incorrect animation handling when strips overlapRichard Antalik
Function `SEQ_transform_seqbase_shuffle_time` did not have access to strip effects, and therefore could not handle their animation. Since now transformation knows what strips can't be directly moved, but their position depends on other strips, this collection of strips is passed as argument, so animation can be offset correctly.
2022-06-13Fix T93469: Image not moving in proportion to mouseRichard Antalik
Apply scale factor when preview aspect ratio is not 1:1.
2022-06-10Cleanup: Clang tidyHans Goudey
2022-06-09Fix T98688: Snapping not working in curve objects with evaluated geometryGermano Cavalcante
It's an old behavior. Not really considered a bug. But snapping to faces is already supported in this case. And allowing snapping to other elements is not disruptive.
2022-06-09Fix assert triggered when snapping to evaluated geometry of a CurveGermano Cavalcante
Curves can have a Mesh evaluated, but only objects of type Mesh have EditMesh. This bug is harmless because `sctx->editmesh_caches.remove(value)` only works with pointers and `BKE_editmesh_from_object(ob_eval)`, even though it doesn't actually return a `BMEditMesh`, it still returns a pointer that doesn't exist as a key.
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-06-07Remove workaround for drawing the rotation gizmoGermano Cavalcante
Since [0], transform gizmos are no longer hidden during transform. The same can be observed for rotation gizmos. However, as a workaround for these rotation gizmos, there was already a drawing utility running. With the gizmo and the utility this drawing is now being done twice. So remove the utility/workaround and update the gizmo accordingly. [0] {648350e456490f8d6258e7de9bf94d3a6a34dbb2} Differential Revision: https://developer.blender.org/D9542
2022-06-06Refactor: Snap-related. Clarified attribute names and refactored #defines ↵jon denning
into enums The transformation snapping code contains a bunch of `#define`s, some ambiguously or incorrectly named attributes. This patch contains refactored code to improve this. This patch does (should) not change functionality of snapping. Clarified ambiguously / incorrectly named attributes. - "Target" is used to refer to the part of the source that is to be snapped (Active, Median, Center, Closest), but several other areas of Blender use the term "target" to refer to the thing being snapped to and "source" to refer to the thing getting snapped. Moreover, the implications of the previous terms do not match the descriptions. For example: `SCE_SNAP_TARGET_CENTER` does not snap the grabbed geometry to the center of the target, but instead "Snap transforamtion center onto target". - "Select" refers to the condition for an object to be a possible target for snapping. - `SCE_SNAP_MODE_FACE` is renamed to `SCE_SNAP_MODE_FACE_RAYCAST` to better describe its affect and to make way for other face snapping methods (ex: nearest). Refactored related `#define` into `enum`s. In particular, constants relating to... - `ToolSettings.snap_flag` are now in `enum eSnapFlag` - `ToolSettings.snap_mode` are now in `enum eSnapMode` - `ToolSettings.snap_source` (was `snap_target`) are now in `enum eSnapSourceSelect` - `ToolSettings.snap_flag` (`SCE_SNAP_NO_SELF`) and `TransSnap.target_select` are now in `enum eSnapTargetSelect` As the terms became more consistent and the constants were packed together into meaningful enumerations, some of the attribute names seemed ambiguous. For example, it is unclear whether `SnapObjectParams.snap_select` referred to the target or the source. This patch also adds a small amount of clarity. This patch also swaps out generic types (ex: `char`, `short`, `ushort`) and unclear hard coded numbers (ex: `0`) used with snap-related enumerations with the actual `enum`s and values. Note: I did leave myself some comments to follow-up with further refactoring. Specifically, using "target" and "source" consistently will mean the Python API will need to change (ex: `ToolSettings.snap_target` is not `ToolSettings.snap_source`). If the API is going to change, it would be good to make sure that the used terms are descriptive enough. For example, `bpy.ops.transform.translate` uses a `snap` argument to determine if snapping should be enabled while transforming. Perhaps `use_snap` might be an improvement that's more consistent with other conventions. This patch is (mostly) a subset of D14591, as suggested by @mano-wii. Task T69342 proposes to separate the `Absolute Grid Snap` option out from `Increment` snapping method into its own method. Also, there might be reason to create additional snapping methods or options. (Indeed, D14591 heads in this direction). This patch can work along with these suggestions, as this patch is trying to clarify the snapping code and to prompt more work in this area. Reviewed By: mano-wii Differential Revision: https://developer.blender.org/D15037
2022-06-06UI: offset scale gizmos instead of scaling their shapeCampbell Barton
Scaling handles while dragging could be distracting, especially at extreme values where handles could become large on-screen. Now all gizmos are shown while scaling. GIZMO_GT_arrow_3d now now support changing their length while being dragged as well as negative lengths.
2022-06-05UI: align gizmo scale handles to both Y and Z axesCampbell Barton
This resolves a minor inconsistency displaying the scale gizmo handles since they're cubes it's noticeable when they're not axes aligned.
2022-06-05UI: show gizmo while transformingCampbell Barton
When interacting with translate/rotate/scale gizmo, show the gizmo while it's in use. There are some exceptions to this, as showing all scale gizmos while scaling causes the gizmos to become large & distracting so in this case only the gizmo being dragged is shown. Resolves T63743.
2022-06-03Cleanup: remove gizmo transform workaround which is no longer neededCampbell Barton
Now gizmos forward the original event to transform so assuming an LMB event is no longer needed.
2022-06-02VSE: Make time operations self-containedRichard Antalik
This patch makes it possible to manipulate strips without need to use update functions to recalculate effect and meta strips. Prior to this change function `SEQ_time_update_sequence` had to be used to update mainly effects and meta strips. This was implemented in a way that relied on sorted list of strips, which can't always be done and in rare cases this approach failed. In case of meta strips, `seqbase` had to be passed and compared with "active" one to determine whether meta strip should be updated or not. This is especially weak system that is prone to bugs when functions are used by python API functions. Finally, other strip types had startdisp` and `enddisp` fields updated by this function and a lot of code relied on these fields even if strip start, length and offsets are available. This is completely unnecessary. Implemented changes: All effects and meta strips are updated when strip handles are moved or strip is translated, without need to call any update function. Function `SEQ_time_update_sequence` has been split to `SEQ_time_update_meta_strip_range` and `seq_time_update_effects_strip_range`. These functions should be only used within sequencer module code. Meta update is used for versioning, which is only reason for it not being declared internally. Sequence fields `startdisp` and `enddisp` are now only used for effects to store strip start and end points. These fields should be used only internally within sequencer module code. Use function `SEQ_time_*_handle_frame_get` to get strip start and end points. To update effects and meta strips with reasonable performance, cache for "parent" meta strip and attached effects is added to `SequenceLookup` cache, so it shares invalidation mechanisms. All caches are populated during single iteration. There should be no functional changes. Differential Revision: https://developer.blender.org/D14990
2022-05-30Cleanup: Clang tidyHans Goudey
Mostly duplicate includes, also use nullptr, and using default member initializers.
2022-05-29Merge branch 'blender-v3.2-release'Germano Cavalcante
2022-05-29Fix (unreported): cyclic snap of curve handlesGermano Cavalcante
The logic of skipping selected handles was inverted and confusing.
2022-05-24Fix T98141: Strip rotation is limited to +/360 degreesRichard Antalik
This limiting prevented visual keyframing from working correctly and is not consistent with object rotation, so limiting is removed.
2022-05-20Cleanup: warnings, spelling, formattingCampbell Barton
Avoid multiple `sound.bl_rna.properties["channels"].enum_items` in the same line. Note we might want a way to avoid having to do this.
2022-05-19Merge branch 'blender-v3.2-release'Germano Cavalcante
2022-05-19Fix T98230: Automatic Constraint doesn't work if cursor is not movingGermano Cavalcante
The change was kind of intentional on {rB21e72496a629}. That commit made mouse movement to "select" the contraint in Auto Constraint a requirement. This deduplicated the code a bit, but this requirement is not comfortable for the first "selection" of the contraint. So the constraint "selection" is now done in two ways: - If there is no contraint, the "selection" is done immediately; - If there is already a constraint, the "selection" is delayed by 1 event to simulate a constraint cancellation if there is no mouse movement.
2022-05-18Cleanup: Move strip handle manipulation to time sectionRichard Antalik
2022-05-13Merge branch 'blender-v3.2-release'Sergey Sharybin
2022-05-13Fix crash toggling marker translate with marker offsetSergey Sharybin
The shortcut is G-G. Caused by loop argument "shadowing".
2022-05-12Cleanup: Refactor marker area clampingSergey Sharybin
Switch from a single function with a lot of branching at its top level to dedicated function calls with own documentation.
2022-05-12Cleanup: Remove redundant marker clamping code pathSergey Sharybin
Pattern is expected to be freely resized to any size, and the search area s to become bigger when needed. Remove confusing pattern size clamping which was actually clamping search area. There should be no functional changes.
2022-05-12Merge branch 'blender-v3.2-release'Campbell Barton
2022-05-12Fix T96367: Crash snapping to instances on an objectCampbell Barton
In rare cases the mesh has not been evaluated when snapping, this fix just prevents the crash as is done elsewhere in Blender when the evaluated mesh isn't available, there is a separate report (T96536) about evaluation not working properly.
2022-05-11Fix cursor snap not acting on selected UVsGermano Cavalcante
Regression in rBd2271cf939.
2022-05-10Fix T50398: Constrain to Image Bounds failed with 2D cursor pivotChris Blackbourn
Use more robust logic for "Constrain to Image Bounds" when scaling UVs. Reviewed By: campbellbarton Ref D14882
2022-05-06Cleanup: spelling in comments, use doxygen commentsCampbell Barton
2022-05-04Transform: use a threshold for UV snappingGermano Cavalcante
Unlike 3Dview snapping, UV snapping is always done to the UV closest to the mouse cursor, no matter the distance. From the user's point of view, this appears to be an inconsistency (See {T93538}). Therefore, set a minimum distance for snapping and, as in 3D View and highlight the snap with a drawing of a circle. Release Note: https://wiki.blender.org/wiki/Reference/Release_Notes/3.3/Modeling Reviewed By: #uv_editing, campbellbarton Maniphest Tasks: T93538 Differential Revision: https://developer.blender.org/D13873
2022-05-03Fix T95752: crash 'Select Linked' after loopcut in multiobject editmodePhilipp Oeser
This was reported explicitly for originally being in face selectmode, but could also crash when in vertex selectmode (when doing multiple cuts). The reason here is that `MESH_OT_loopcut` switches to edge select mode (needed for `TRANSFORM_OT_edge_slide`, done in `ringsel_finish`), but was only doing this on the active object's editmesh, all other participating meshes would keep their selectmode which would now be out of sync with both the active object's editmesh and scene settings for these. This causes problems later in 'Select Linked'. Here, a mixture of objects are used. First the viewcontext is set up with the active object, then all participating objects are iterated (changing the viewcontext to another object), then `unified_findnearest` would use that changed viewcontext which would now contain the last object iterated. To repeat: this could now have a different selectmode than the active object which is later **again** used to get the nearest `BMElem` from in `EDBM_elem_from_selectmode`. So in the failing case, we could get an edge (but no face because of edge selectmode) from `unified_findnearest`, `EDBM_elem_from_selectmode` would return NULL though (edge provided, but in face selectmode), leading to the crash. To solve this I assume it is best to change selectmode on all participating meshes in multi-object editmode loopcut if necessary so these are always in sync for following operations. Alternatively, `Select Linked` (and probably lots more operators) would have to be tweaked to pay closer attention which object is really used to get selectmode from. Note the selectmode is actually set back from edge selectmode in certain cases (see `USE_LOOPSLIDE_HACK`), this patch changes that as well to act on all participating meshes. Maniphest Tasks: T95752 Differential Revision: https://developer.blender.org/D14791
2022-04-28Fix: Incorrect conversion from C bitfield syntaxHans Goudey
Recent cleanups 9a8669ac81b99b2 and 1c790555a02bfc3 incorrectly interpereted the bitfield width syntax as a default value. Also resolve two other compilation warnings.
2022-04-28VSE: Add option to limit timeline view heightRichard Antalik
When height is limited, it is defined by space occupied by strips, but at least channels 1 to 7 will be always visible. This allows it to easily overview timeline content by zooming out to maximum extent in Y axis and panning in X axis. More channels can be "created" on demand by moving strip to higher channel. When strip is removed and highest channel becomes empty, view will stay as is until it is moved down. Then new highest point is remembered and it is not possible to pan upwards until strip is moved to higher channel. Limiting takes into account height of scrubbing and markers area as well as scrollers. This means that when zoomed out to maximum extent, no strips are obstructed by fixed UI element. Fixes T57976 Reviewed By: Severin Differential Revision: https://developer.blender.org/D14263
2022-04-28VSE: Add precise drag and drop and strip previewsSebastian Parborg
This patch adds the drag and drop strip previews in the VSE. It also adds two new functions to the drag and drop API. 1. "draw_in_view" for callbacks that wants to draw elements in local viewport coordinates 2. "on_drag_start" that can be used for prefetching data only once at the start of the drag. Reviewed By: Julian, Campbell Differential Revision: http://developer.blender.org/D14560
2022-04-27Cleanup: Use bool, remove unnecessary struct keywordsHans Goudey
2022-04-27Snap: Use Map and unique_ptr for snap cacheHans Goudey
Use C++ types instead of GHash to make code easier to read and simpler. Differential Revision: https://developer.blender.org/D14758
2022-04-26Cleanup: unused return value warningCampbell Barton
2022-04-25Transform Snap Refactor: dedicate ghash to different SnapData typesGermano Cavalcante
Changes: - Remove `BLI_memarena` (Use `MEM_cnew` and `MEM_delete` to allocate cached data) - Implement `snap_object_data_mesh_free_ensure` and `snap_object_data_editmesh_free_ensure` and skip need to get original key Object for editmesh data - Use `BMEditMesh` as key for editmesh `Ghash` - Make a better distinction between `SnapObjectData`s. (`SnapData_Mesh` and `SnapData_EditMesh`)
2022-04-25Cleanup: Turn some 'eTFlag' into macrosGermano Cavalcante
Some of the enum values are a mixture of others and make it difficult for the IDE to identify them. Separating these values makes debugging easier.
2022-04-25Fix T97401: Snap options ignored for Nurbs surfacesGermano Cavalcante
The editing data of a `SURF`s is similar to that of Curves and should be supported for snapping. But unlike Curve objects, for snapping, only support the nurb points if the object is in edit mode. This matches the solution for Meshes and avoids having to create a kind of "boundbox" for the SURF nurb points.
2022-04-22Cleanup: spelling in commentsCampbell Barton