Blender V4.3
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
9#include "DNA_screen_types.h"
10#include "DNA_space_types.h"
11
12#include "BLI_utildefines.h"
13
14#include "BKE_context.hh"
15#include "BKE_tracking.h"
16
17#include "DEG_depsgraph.hh"
18
19#include "WM_api.hh"
20#include "WM_types.hh"
21
22#include "ED_clip.hh"
23
24#include "clip_intern.hh"
25
26/********************* add 2d stabilization tracks operator ********************/
27
29{
33 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
34 return (tracking_object->flag & TRACKING_OBJECT_CAMERA) != 0;
35 }
36 return false;
37}
38
40{
43 MovieTracking *tracking = &clip->tracking;
44 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
45 MovieTrackingStabilization *stabilization = &tracking->stabilization;
46
47 bool update = false;
48 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
49 if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB) == 0) {
50 track->flag |= TRACK_USE_2D_STAB;
51 stabilization->tot_track++;
52 update = true;
53 }
54 }
55
56 if (update) {
57 DEG_id_tag_update(&clip->id, 0);
59 }
60
61 return OPERATOR_FINISHED;
62}
63
65{
66 /* identifiers */
67 ot->name = "Add Stabilization Tracks";
68 ot->description = "Add selected tracks to 2D translation stabilization";
69 ot->idname = "CLIP_OT_stabilize_2d_add";
70
71 /* api callbacks */
74
75 /* flags */
77}
78
79/******************* remove 2d stabilization tracks operator ******************/
80
82{
85 MovieTracking *tracking = &clip->tracking;
86 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
87 MovieTrackingStabilization *stabilization = &tracking->stabilization;
88 int a = 0;
89 bool update = false;
90
91 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
92 if (track->flag & TRACK_USE_2D_STAB) {
93 if (a == stabilization->act_track) {
94 track->flag &= ~TRACK_USE_2D_STAB;
95 stabilization->act_track--;
96 stabilization->tot_track--;
97 if (stabilization->act_track < 0) {
98 stabilization->act_track = 0;
99 }
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 */
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 */
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 */
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 if (stabilization->act_rot_track < 0) {
229 stabilization->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{
267 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
268 bool update = false;
269
270 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
271 if (track->flag & TRACK_USE_2D_STAB_ROT) {
273 update = true;
274 }
275 }
276
277 if (update) {
279 }
280
281 return OPERATOR_FINISHED;
282}
283
285{
286 /* identifiers */
287 ot->name = "Select Stabilization Rotation Tracks";
288 ot->description = "Select tracks which are used for rotation stabilization";
289 ot->idname = "CLIP_OT_stabilize_2d_rotation_select";
290
291 /* api callbacks */
294
295 /* flags */
297}
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
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
bool ED_space_clip_tracking_poll(bContext *C)
@ OPTYPE_UNDO
Definition WM_types.hh:162
@ OPTYPE_REGISTER
Definition WM_types.hh:160
#define ND_DISPLAY
Definition WM_types.hh:458
#define NC_MOVIECLIP
Definition WM_types.hh:364
#define ND_SELECT
Definition WM_types.hh:474
#define SELECT
static void update(bNodeTree *ntree)
const char * name
Definition WM_types.hh:990
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1042
const char * idname
Definition WM_types.hh:992
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
Definition WM_types.hh:1006
const char * description
Definition WM_types.hh:996
static int stabilize_2d_select_exec(bContext *C, wmOperator *)
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 *)
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 *)
void CLIP_OT_stabilize_2d_rotation_select(wmOperatorType *ot)
static bool stabilize_2d_poll(bContext *C)
static int stabilize_2d_remove_exec(bContext *C, wmOperator *)
static int stabilize_2d_rotation_remove_exec(bContext *C, wmOperator *)
static int stabilize_2d_add_exec(bContext *C, wmOperator *)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition wm_files.cc:4125