Blender  V3.3
tracking_ops_stabilize.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2016 Blender Foundation. All rights reserved. */
3 
8 #include "DNA_screen_types.h"
9 #include "DNA_space_types.h"
10 
11 #include "BLI_utildefines.h"
12 
13 #include "BKE_context.h"
14 #include "BKE_tracking.h"
15 
16 #include "DEG_depsgraph.h"
17 
18 #include "WM_api.h"
19 #include "WM_types.h"
20 
21 #include "ED_clip.h"
22 
23 #include "clip_intern.h"
24 
25 /********************* add 2d stabilization tracks operator ********************/
26 
28 {
33  return (tracking_object->flag & TRACKING_OBJECT_CAMERA) != 0;
34  }
35  return 0;
36 }
37 
39 {
42  MovieTracking *tracking = &clip->tracking;
43  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
44  MovieTrackingStabilization *stab = &tracking->stabilization;
45 
46  bool update = false;
47  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
48  if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB) == 0) {
49  track->flag |= TRACK_USE_2D_STAB;
50  stab->tot_track++;
51  update = true;
52  }
53  }
54 
55  if (update) {
56  DEG_id_tag_update(&clip->id, 0);
58  }
59 
60  return OPERATOR_FINISHED;
61 }
62 
64 {
65  /* identifiers */
66  ot->name = "Add Stabilization Tracks";
67  ot->description = "Add selected tracks to 2D translation stabilization";
68  ot->idname = "CLIP_OT_stabilize_2d_add";
69 
70  /* api callbacks */
73 
74  /* flags */
76 }
77 
78 /******************* remove 2d stabilization tracks operator ******************/
79 
81 {
84  MovieTracking *tracking = &clip->tracking;
85  MovieTrackingStabilization *stab = &tracking->stabilization;
86  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
87  int a = 0;
88  bool update = false;
89 
90  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
91  if (track->flag & TRACK_USE_2D_STAB) {
92  if (a == stab->act_track) {
93  track->flag &= ~TRACK_USE_2D_STAB;
94  stab->act_track--;
95  stab->tot_track--;
96  if (stab->act_track < 0) {
97  stab->act_track = 0;
98  }
99  update = true;
100  break;
101  }
102  a++;
103  }
104  }
105 
106  if (update) {
107  DEG_id_tag_update(&clip->id, 0);
109  }
110 
111  return OPERATOR_FINISHED;
112 }
113 
115 {
116  /* identifiers */
117  ot->name = "Remove Stabilization Track";
118  ot->description = "Remove selected track from translation stabilization";
119  ot->idname = "CLIP_OT_stabilize_2d_remove";
120 
121  /* api callbacks */
124 
125  /* flags */
127 }
128 
129 /******************* select 2d stabilization tracks operator ******************/
130 
132 {
134  MovieClip *clip = ED_space_clip_get_clip(sc);
135  MovieTracking *tracking = &clip->tracking;
136  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
137  bool update = false;
138 
139  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
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 */
163 
164  /* flags */
166 }
167 
168 /********************** add 2d stabilization tracks for rotation operator ****************/
169 
171 {
173  MovieClip *clip = ED_space_clip_get_clip(sc);
174  MovieTracking *tracking = &clip->tracking;
175  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
176  MovieTrackingStabilization *stab = &tracking->stabilization;
177 
178  bool update = false;
179  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
180  if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
181  track->flag |= TRACK_USE_2D_STAB_ROT;
182  stab->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 */
205 
206  /* flags */
208 }
209 
210 /********************** remove 2d stabilization tracks for rotation operator *************/
211 
213 {
215  MovieClip *clip = ED_space_clip_get_clip(sc);
216  MovieTracking *tracking = &clip->tracking;
217  MovieTrackingStabilization *stab = &tracking->stabilization;
218  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
219  int a = 0;
220  bool update = false;
221 
222  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
223  if (track->flag & TRACK_USE_2D_STAB_ROT) {
224  if (a == stab->act_rot_track) {
225  track->flag &= ~TRACK_USE_2D_STAB_ROT;
226  stab->act_rot_track--;
227  stab->tot_rot_track--;
228  if (stab->act_rot_track < 0) {
229  stab->act_rot_track = 0;
230  }
231  update = true;
232  break;
233  }
234  a++;
235  }
236  }
237 
238  if (update) {
239  DEG_id_tag_update(&clip->id, 0);
241  }
242 
243  return OPERATOR_FINISHED;
244 }
245 
247 {
248  /* identifiers */
249  ot->name = "Remove Stabilization Rotation Track";
250  ot->description = "Remove selected track from rotation stabilization";
251  ot->idname = "CLIP_OT_stabilize_2d_rotation_remove";
252 
253  /* api callbacks */
256 
257  /* flags */
259 }
260 
261 /********************** select 2d stabilization rotation tracks operator *****************/
262 
264 {
266  MovieClip *clip = ED_space_clip_get_clip(sc);
267  MovieTracking *tracking = &clip->tracking;
268  ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
269  bool update = false;
270 
271  for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
272  if (track->flag & TRACK_USE_2D_STAB_ROT) {
274  update = true;
275  }
276  }
277 
278  if (update) {
280  }
281 
282  return OPERATOR_FINISHED;
283 }
284 
286 {
287  /* identifiers */
288  ot->name = "Select Stabilization Rotation Tracks";
289  ot->description = "Select tracks which are used for rotation stabilization";
290  ot->idname = "CLIP_OT_stabilize_2d_rotation_select";
291 
292  /* api callbacks */
295 
296  /* flags */
298 }
struct SpaceClip * CTX_wm_space_clip(const bContext *C)
Definition: context.c:923
struct ListBase * BKE_tracking_get_active_tracks(struct MovieTracking *tracking)
Definition: tracking.c:346
@ TRACK_AREA_ALL
Definition: BKE_tracking.h:43
void BKE_tracking_track_flag_set(struct MovieTrackingTrack *track, int area, int flag)
Definition: tracking.c:688
#define TRACK_VIEW_SELECTED(sc, track)
Definition: BKE_tracking.h:831
struct MovieTrackingObject * BKE_tracking_object_get_active(struct MovieTracking *tracking)
Definition: tracking.c:2092
#define UNUSED(x)
void DEG_id_tag_update(struct ID *id, int flag)
@ TRACKING_OBJECT_CAMERA
@ TRACK_USE_2D_STAB
@ TRACK_USE_2D_STAB_ROT
@ OPERATOR_FINISHED
bool ED_space_clip_tracking_poll(struct bContext *C)
Definition: clip_editor.c:83
struct MovieClip * ED_space_clip_get_clip(struct SpaceClip *sc)
Definition: clip_editor.c:570
#define C
Definition: RandGen.cpp:25
@ OPTYPE_UNDO
Definition: WM_types.h:148
@ OPTYPE_REGISTER
Definition: WM_types.h:146
#define ND_DISPLAY
Definition: WM_types.h:439
#define NC_MOVIECLIP
Definition: WM_types.h:347
#define ND_SELECT
Definition: WM_types.h:455
#define SELECT
static unsigned a[3]
Definition: RandGen.cpp:78
static void update(bNodeTree *ntree)
void * first
Definition: DNA_listBase.h:31
struct MovieTracking tracking
MovieTrackingStabilization stabilization
const char * name
Definition: WM_types.h:888
const char * idname
Definition: WM_types.h:890
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:943
const char * description
Definition: WM_types.h:893
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:903
static int stabilize_2d_remove_exec(bContext *C, wmOperator *UNUSED(op))
void CLIP_OT_stabilize_2d_rotation_add(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_remove(wmOperatorType *ot)
static int stabilize_2d_rotation_select_exec(bContext *C, wmOperator *UNUSED(op))
void CLIP_OT_stabilize_2d_rotation_remove(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_select(wmOperatorType *ot)
void CLIP_OT_stabilize_2d_add(wmOperatorType *ot)
static int stabilize_2d_rotation_add_exec(bContext *C, wmOperator *UNUSED(op))
static int stabilize_2d_add_exec(bContext *C, wmOperator *UNUSED(op))
void CLIP_OT_stabilize_2d_rotation_select(wmOperatorType *ot)
static int stabilize_2d_rotation_remove_exec(bContext *C, wmOperator *UNUSED(op))
static int stabilize_2d_select_exec(bContext *C, wmOperator *UNUSED(op))
static bool stabilize_2d_poll(bContext *C)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition: wm_files.c:3479