Blender V5.0
tracking_ops_stabilize.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2016 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <algorithm>
10
11#include "BLI_listbase.h"
12
13#include "DNA_screen_types.h"
14#include "DNA_space_types.h"
15
16#include "BKE_context.hh"
17#include "BKE_tracking.h"
18
19#include "DEG_depsgraph.hh"
20
21#include "WM_api.hh"
22#include "WM_types.hh"
23
24#include "ED_clip.hh"
25
26#include "clip_intern.hh"
27
28/********************* add 2d stabilization tracks operator ********************/
29
31{
36 return (tracking_object->flag & TRACKING_OBJECT_CAMERA) != 0;
37 }
38 return false;
39}
40
42{
45 MovieTracking *tracking = &clip->tracking;
46 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
47 MovieTrackingStabilization *stabilization = &tracking->stabilization;
48
49 bool update = false;
50 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
51 if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB) == 0) {
52 track->flag |= TRACK_USE_2D_STAB;
53 stabilization->tot_track++;
54 update = true;
55 }
56 }
57
58 if (update) {
59 DEG_id_tag_update(&clip->id, 0);
61 }
62
63 return OPERATOR_FINISHED;
64}
65
67{
68 /* identifiers */
69 ot->name = "Add Stabilization Tracks";
70 ot->description = "Add selected tracks to 2D translation stabilization";
71 ot->idname = "CLIP_OT_stabilize_2d_add";
72
73 /* API callbacks. */
75 ot->poll = stabilize_2d_poll;
76
77 /* flags */
79}
80
81/******************* remove 2d stabilization tracks operator ******************/
82
84{
87 MovieTracking *tracking = &clip->tracking;
88 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
89 MovieTrackingStabilization *stabilization = &tracking->stabilization;
90 int a = 0;
91 bool update = false;
92
93 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
94 if (track->flag & TRACK_USE_2D_STAB) {
95 if (a == stabilization->act_track) {
96 track->flag &= ~TRACK_USE_2D_STAB;
97 stabilization->act_track--;
98 stabilization->tot_track--;
99 stabilization->act_track = std::max(stabilization->act_track, 0);
100 update = true;
101 break;
102 }
103 a++;
104 }
105 }
106
107 if (update) {
108 DEG_id_tag_update(&clip->id, 0);
110 }
111
112 return OPERATOR_FINISHED;
113}
114
116{
117 /* identifiers */
118 ot->name = "Remove Stabilization Track";
119 ot->description = "Remove selected track from translation stabilization";
120 ot->idname = "CLIP_OT_stabilize_2d_remove";
121
122 /* API callbacks. */
124 ot->poll = stabilize_2d_poll;
125
126 /* flags */
128}
129
130/******************* select 2d stabilization tracks operator ******************/
131
133{
136 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
137 bool update = false;
138
139 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
140 if (track->flag & TRACK_USE_2D_STAB) {
142 update = true;
143 }
144 }
145
146 if (update) {
148 }
149
150 return OPERATOR_FINISHED;
151}
152
154{
155 /* identifiers */
156 ot->name = "Select Stabilization Tracks";
157 ot->description = "Select tracks which are used for translation stabilization";
158 ot->idname = "CLIP_OT_stabilize_2d_select";
159
160 /* API callbacks. */
162 ot->poll = stabilize_2d_poll;
163
164 /* flags */
166}
167
168/********************** add 2d stabilization tracks for rotation operator ****************/
169
171{
174 MovieTracking *tracking = &clip->tracking;
175 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
176 MovieTrackingStabilization *stabilization = &tracking->stabilization;
177
178 bool update = false;
179 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
180 if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
181 track->flag |= TRACK_USE_2D_STAB_ROT;
182 stabilization->tot_rot_track++;
183 update = true;
184 }
185 }
186
187 if (update) {
188 DEG_id_tag_update(&clip->id, 0);
190 }
191
192 return OPERATOR_FINISHED;
193}
194
196{
197 /* identifiers */
198 ot->name = "Add Stabilization Rotation Tracks";
199 ot->description = "Add selected tracks to 2D rotation stabilization";
200 ot->idname = "CLIP_OT_stabilize_2d_rotation_add";
201
202 /* API callbacks. */
204 ot->poll = stabilize_2d_poll;
205
206 /* flags */
208}
209
210/********************** remove 2d stabilization tracks for rotation operator *************/
211
213{
216 MovieTracking *tracking = &clip->tracking;
217 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
218 MovieTrackingStabilization *stabilization = &tracking->stabilization;
219 int a = 0;
220 bool update = false;
221
222 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
223 if (track->flag & TRACK_USE_2D_STAB_ROT) {
224 if (a == stabilization->act_rot_track) {
225 track->flag &= ~TRACK_USE_2D_STAB_ROT;
226 stabilization->act_rot_track--;
227 stabilization->tot_rot_track--;
228 stabilization->act_rot_track = std::max(stabilization->act_rot_track, 0);
229 update = true;
230 break;
231 }
232 a++;
233 }
234 }
235
236 if (update) {
237 DEG_id_tag_update(&clip->id, 0);
239 }
240
241 return OPERATOR_FINISHED;
242}
243
245{
246 /* identifiers */
247 ot->name = "Remove Stabilization Rotation Track";
248 ot->description = "Remove selected track from rotation stabilization";
249 ot->idname = "CLIP_OT_stabilize_2d_rotation_remove";
250
251 /* API callbacks. */
253 ot->poll = stabilize_2d_poll;
254
255 /* flags */
257}
258
259/********************** select 2d stabilization rotation tracks operator *****************/
260
262{
265 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
266 bool update = false;
267
268 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
269 if (track->flag & TRACK_USE_2D_STAB_ROT) {
271 update = true;
272 }
273 }
274
275 if (update) {
277 }
278
279 return OPERATOR_FINISHED;
280}
281
283{
284 /* identifiers */
285 ot->name = "Select Stabilization Rotation Tracks";
286 ot->description = "Select tracks which are used for rotation stabilization";
287 ot->idname = "CLIP_OT_stabilize_2d_rotation_select";
288
289 /* API callbacks. */
291 ot->poll = stabilize_2d_poll;
292
293 /* flags */
295}
SpaceClip * CTX_wm_space_clip(const bContext *C)
@ TRACK_AREA_ALL
void BKE_tracking_track_flag_set(struct MovieTrackingTrack *track, int area, int flag)
Definition tracking.cc:675
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
#define TRACK_VIEW_SELECTED(sc, track)
#define LISTBASE_FOREACH(type, var, list)
void DEG_id_tag_update(ID *id, unsigned int flags)
@ TRACK_USE_2D_STAB
@ TRACK_USE_2D_STAB_ROT
@ TRACKING_OBJECT_CAMERA
@ OPERATOR_FINISHED
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
bool ED_space_clip_tracking_poll(bContext *C)
#define C
Definition RandGen.cpp:29
#define ND_DISPLAY
Definition WM_types.hh:491
#define NC_MOVIECLIP
Definition WM_types.hh:397
@ OPTYPE_UNDO
Definition WM_types.hh:182
@ OPTYPE_REGISTER
Definition WM_types.hh:180
#define ND_SELECT
Definition WM_types.hh:508
#define SELECT
static void update(bNodeTree *ntree)
struct MovieTracking tracking
MovieTrackingStabilization stabilization
static wmOperatorStatus stabilize_2d_select_exec(bContext *C, wmOperator *)
void CLIP_OT_stabilize_2d_rotation_add(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_remove(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_rotation_remove(wmOperatorType *ot)
static wmOperatorStatus stabilize_2d_rotation_remove_exec(bContext *C, wmOperator *)
void CLIP_OT_stabilize_2d_select(wmOperatorType *ot)
static wmOperatorStatus stabilize_2d_remove_exec(bContext *C, wmOperator *)
void CLIP_OT_stabilize_2d_add(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_rotation_select(wmOperatorType *ot)
static wmOperatorStatus stabilize_2d_add_exec(bContext *C, wmOperator *)
static wmOperatorStatus stabilize_2d_rotation_add_exec(bContext *C, wmOperator *)
static bool stabilize_2d_poll(bContext *C)
static wmOperatorStatus stabilize_2d_rotation_select_exec(bContext *C, wmOperator *)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4237