196
216
static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
198
MarkerUpdateCb *cb = (MarkerUpdateCb*) arg_cb;
218
MarkerUpdateCb *cb = (MarkerUpdateCb *) arg_cb;
199
219
MovieTrackingMarker *marker;
201
221
if (!cb->compact)
204
marker = BKE_tracking_ensure_marker(cb->track, cb->framenr);
224
marker = BKE_tracking_marker_ensure(cb->track, cb->framenr);
206
226
marker->flag = cb->marker_flag;
208
WM_event_add_notifier(C, NC_MOVIECLIP|NA_EDITED, NULL);
228
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL);
211
231
static void marker_block_handler(bContext *C, void *arg_cb, int event)
213
MarkerUpdateCb *cb = (MarkerUpdateCb*) arg_cb;
233
MarkerUpdateCb *cb = (MarkerUpdateCb *) arg_cb;
214
234
MovieTrackingMarker *marker;
215
235
int width, height, ok = FALSE;
217
237
BKE_movieclip_get_size(cb->clip, cb->user, &width, &height);
219
marker = BKE_tracking_ensure_marker(cb->track, cb->framenr);
239
marker = BKE_tracking_marker_ensure(cb->track, cb->framenr);
221
241
if (event == B_MARKER_POS) {
222
marker->pos[0] = cb->marker_pos[0]/width;
223
marker->pos[1] = cb->marker_pos[1]/height;
242
marker->pos[0] = cb->marker_pos[0] / width;
243
marker->pos[1] = cb->marker_pos[1] / height;
225
245
/* to update position of "parented" objects */
226
246
DAG_id_tag_update(&cb->clip->id, 0);
227
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, NULL);
247
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
231
251
else if (event == B_MARKER_PAT_DIM) {
232
float dim[2], pat_dim[2];
234
sub_v2_v2v2(pat_dim, cb->track->pat_max, cb->track->pat_min);
236
dim[0] = cb->track_pat[0] / width;
237
dim[1] = cb->track_pat[1] / height;
239
sub_v2_v2(dim, pat_dim);
240
mul_v2_fl(dim, 0.5f);
242
cb->track->pat_min[0] -= dim[0];
243
cb->track->pat_min[1] -= dim[1];
245
cb->track->pat_max[0] += dim[0];
246
cb->track->pat_max[1] += dim[1];
248
BKE_tracking_clamp_track(cb->track, CLAMP_PAT_DIM);
252
float dim[2], pat_dim[2], pat_min[2], pat_max[2];
253
float scale_x, scale_y;
256
BKE_tracking_marker_pattern_minmax(cb->marker, pat_min, pat_max);
258
sub_v2_v2v2(pat_dim, pat_max, pat_min);
260
dim[0] = cb->marker_pat[0] / width;
261
dim[1] = cb->marker_pat[1] / height;
263
scale_x = dim[0] / pat_dim[0];
264
scale_y = dim[1] / pat_dim[1];
266
for (a = 0; a < 4; a++) {
267
cb->marker->pattern_corners[a][0] *= scale_x;
268
cb->marker->pattern_corners[a][1] *= scale_y;
271
BKE_tracking_marker_clamp(cb->marker, CLAMP_PAT_DIM);
252
275
else if (event == B_MARKER_SEARCH_POS) {
253
276
float delta[2], side[2];
255
sub_v2_v2v2(side, cb->track->search_max, cb->track->search_min);
278
sub_v2_v2v2(side, cb->marker->search_max, cb->marker->search_min);
256
279
mul_v2_fl(side, 0.5f);
258
delta[0] = cb->track_search_pos[0] / width;
259
delta[1] = cb->track_search_pos[1] / height;
261
sub_v2_v2v2(cb->track->search_min, delta, side);
262
add_v2_v2v2(cb->track->search_max, delta, side);
264
BKE_tracking_clamp_track(cb->track, CLAMP_SEARCH_POS);
281
delta[0] = cb->marker_search_pos[0] / width;
282
delta[1] = cb->marker_search_pos[1] / height;
284
sub_v2_v2v2(cb->marker->search_min, delta, side);
285
add_v2_v2v2(cb->marker->search_max, delta, side);
287
BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_POS);
268
291
else if (event == B_MARKER_SEARCH_DIM) {
269
292
float dim[2], search_dim[2];
271
sub_v2_v2v2(search_dim, cb->track->search_max, cb->track->search_min);
294
sub_v2_v2v2(search_dim, cb->marker->search_max, cb->marker->search_min);
273
dim[0] = cb->track_search[0]/width;
274
dim[1] = cb->track_search[1]/height;
296
dim[0] = cb->marker_search[0] / width;
297
dim[1] = cb->marker_search[1] / height;
276
299
sub_v2_v2(dim, search_dim);
277
300
mul_v2_fl(dim, 0.5f);
279
cb->track->search_min[0]-= dim[0];
280
cb->track->search_min[1]-= dim[1];
282
cb->track->search_max[0]+= dim[0];
283
cb->track->search_max[1]+= dim[1];
285
BKE_tracking_clamp_track(cb->track, CLAMP_SEARCH_DIM);
302
cb->marker->search_min[0] -= dim[0];
303
cb->marker->search_min[1] -= dim[1];
305
cb->marker->search_max[0] += dim[0];
306
cb->marker->search_max[1] += dim[1];
308
BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM);
363
389
block = uiLayoutGetBlock(layout);
365
391
if (cb->marker_flag & MARKER_DISABLED)
366
tip= "Marker is disabled at current frame";
392
tip = TIP_("Marker is disabled at current frame");
368
tip= "Marker is enabled at current frame";
394
tip = TIP_("Marker is enabled at current frame");
370
bt = uiDefIconButBitI(block, TOGN, MARKER_DISABLED, 0, ICON_RESTRICT_VIEW_OFF, 0, 0, 20, 20, &cb->marker_flag, 0, 0, 1, 0, tip);
396
bt = uiDefIconButBitI(block, TOGN, MARKER_DISABLED, 0, ICON_RESTRICT_VIEW_OFF, 0, 0, UI_UNIT_X, UI_UNIT_Y,
397
&cb->marker_flag, 0, 0, 1, 0, tip);
371
398
uiButSetNFunc(bt, marker_update_cb, cb, NULL);
374
401
int width, height, step, digits;
375
float pat_dim[2], pat_pos[2], search_dim[2], search_pos[2];
402
float pat_dim[2], search_dim[2], search_pos[2];
378
405
BKE_movieclip_get_size(clip, user, &width, &height);
380
407
if (track->flag & TRACK_LOCKED) {
381
uiLayoutSetActive(layout, 0);
408
uiLayoutSetActive(layout, FALSE);
382
409
block = uiLayoutAbsoluteBlock(layout);
383
uiDefBut(block, LABEL, 0, "Track is locked", 0, 0, 300, 19, NULL, 0, 0, 0, 0, "");
410
uiDefBut(block, LABEL, 0, IFACE_("Track is locked"), 0, 0, UI_UNIT_X*15.0f, UI_UNIT_Y, NULL, 0, 0, 0, 0, "");
391
sub_v2_v2v2(pat_dim, track->pat_max, track->pat_min);
392
sub_v2_v2v2(search_dim, track->search_max, track->search_min);
394
add_v2_v2v2(search_pos, track->search_max, track->search_min);
418
BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
420
sub_v2_v2v2(pat_dim, pat_max, pat_min);
421
sub_v2_v2v2(search_dim, marker->search_max, marker->search_min);
423
add_v2_v2v2(search_pos, marker->search_max, marker->search_min);
395
424
mul_v2_fl(search_pos, 0.5);
397
add_v2_v2v2(pat_pos, track->pat_max, track->pat_min);
398
mul_v2_fl(pat_pos, 0.5);
400
426
to_pixel_space(cb->marker_pos, marker->pos, width, height);
401
to_pixel_space(cb->track_pat, pat_dim, width, height);
402
to_pixel_space(cb->track_search, search_dim, width, height);
403
to_pixel_space(cb->track_search_pos, search_pos, width, height);
427
to_pixel_space(cb->marker_pat, pat_dim, width, height);
428
to_pixel_space(cb->marker_search, search_dim, width, height);
429
to_pixel_space(cb->marker_search_pos, search_pos, width, height);
404
430
to_pixel_space(cb->track_offset, track->offset, width, height);
406
432
cb->marker_flag = marker->flag;
408
block= uiLayoutAbsoluteBlock(layout);
434
block = uiLayoutAbsoluteBlock(layout);
409
435
uiBlockSetHandleFunc(block, marker_block_handler, cb);
410
436
uiBlockSetNFunc(block, marker_update_cb, cb, NULL);
412
438
if (cb->marker_flag & MARKER_DISABLED)
413
tip= "Marker is disabled at current frame";
439
tip = TIP_("Marker is disabled at current frame");
415
tip= "Marker is enabled at current frame";
417
uiDefButBitI(block, OPTIONN, MARKER_DISABLED, B_MARKER_FLAG, "Enabled", 10, 190, 145, 19, &cb->marker_flag,
420
col = uiLayoutColumn(layout, 1);
421
uiLayoutSetActive(col, (cb->marker_flag&MARKER_DISABLED)==0);
441
tip = TIP_("Marker is enabled at current frame");
443
uiDefButBitI(block, OPTIONN, MARKER_DISABLED, B_MARKER_FLAG, IFACE_("Enabled"), 10, 190, 145, 19,
444
&cb->marker_flag, 0, 0, 0, 0, tip);
446
col = uiLayoutColumn(layout, TRUE);
447
uiLayoutSetActive(col, (cb->marker_flag & MARKER_DISABLED) == 0);
423
449
block = uiLayoutAbsoluteBlock(col);
424
450
uiBlockBeginAlign(block);
426
uiDefBut(block, LABEL, 0, "Position:", 0, 190, 300, 19, NULL, 0, 0, 0, 0, "");
427
uiDefButF(block, NUM, B_MARKER_POS, "X:", 10, 171, 145, 19, &cb->marker_pos[0],
428
-10*width, 10.0*width, step, digits, "X-position of marker at frame in screen coordinates");
429
uiDefButF(block, NUM, B_MARKER_POS, "Y:", 165, 171, 145, 19, &cb->marker_pos[1],
430
-10*height, 10.0*height, step, digits, "Y-position of marker at frame in screen coordinates");
432
uiDefBut(block, LABEL, 0, "Offset:", 0, 152, 300, 19, NULL, 0, 0, 0, 0, "");
433
uiDefButF(block, NUM, B_MARKER_OFFSET, "X:", 10, 133, 145, 19, &cb->track_offset[0],
434
-10*width, 10.0*width, step, digits, "X-offset to parenting point");
435
uiDefButF(block, NUM, B_MARKER_OFFSET, "Y:", 165, 133, 145, 19, &cb->track_offset[1],
436
-10*height, 10.0*height, step, digits, "Y-offset to parenting point");
438
uiDefBut(block, LABEL, 0, "Pattern Area:", 0, 114, 300, 19, NULL, 0, 0, 0, 0, "");
439
uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Width:", 10, 95, 300, 19, &cb->track_pat[0], 3.0f,
440
10.0*width, step, digits, "Width of marker's pattern in screen coordinates");
441
uiDefButF(block, NUM, B_MARKER_PAT_DIM, "Height:", 10, 76, 300, 19, &cb->track_pat[1], 3.0f,
442
10.0*height, step, digits, "Height of marker's pattern in screen coordinates");
444
uiDefBut(block, LABEL, 0, "Search Area:", 0, 57, 300, 19, NULL, 0, 0, 0, 0, "");
445
uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "X:", 10, 38, 145, 19, &cb->track_search_pos[0],
446
-width, width, step, digits, "X-position of search at frame relative to marker's position");
447
uiDefButF(block, NUM, B_MARKER_SEARCH_POS, "Y:", 165, 38, 145, 19, &cb->track_search_pos[1],
448
-height, height, step, digits, "X-position of search at frame relative to marker's position");
449
uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Width:", 10, 19, 300, 19, &cb->track_search[0], 3.0f,
450
10.0*width, step, digits, "Width of marker's search in screen soordinates");
451
uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, "Height:", 10, 0, 300, 19, &cb->track_search[1], 3.0f,
452
10.0*height, step, digits, "Height of marker's search in screen soordinates");
452
uiDefBut(block, LABEL, 0, IFACE_("Position:"), 0, 190, 300, 19, NULL, 0, 0, 0, 0, "");
453
uiDefButF(block, NUM, B_MARKER_POS, IFACE_("X:"), 10, 171, 145, 19, &cb->marker_pos[0],
454
-10 * width, 10.0 * width, step, digits, TIP_("X-position of marker at frame in screen coordinates"));
455
uiDefButF(block, NUM, B_MARKER_POS, IFACE_("Y:"), 165, 171, 145, 19, &cb->marker_pos[1],
456
-10 * height, 10.0 * height, step, digits,
457
TIP_("Y-position of marker at frame in screen coordinates"));
459
uiDefBut(block, LABEL, 0, IFACE_("Offset:"), 0, 152, 300, 19, NULL, 0, 0, 0, 0, "");
460
uiDefButF(block, NUM, B_MARKER_OFFSET, IFACE_("X:"), 10, 133, 145, 19, &cb->track_offset[0],
461
-10 * width, 10.0 * width, step, digits, TIP_("X-offset to parenting point"));
462
uiDefButF(block, NUM, B_MARKER_OFFSET, IFACE_("Y:"), 165, 133, 145, 19, &cb->track_offset[1],
463
-10 * height, 10.0 * height, step, digits, TIP_("Y-offset to parenting point"));
465
uiDefBut(block, LABEL, 0, IFACE_("Pattern Area:"), 0, 114, 300, 19, NULL, 0, 0, 0, 0, "");
466
uiDefButF(block, NUM, B_MARKER_PAT_DIM, IFACE_("Width:"), 10, 95, 300, 19, &cb->marker_pat[0], 3.0f,
467
10.0 * width, step, digits, TIP_("Width of marker's pattern in screen coordinates"));
468
uiDefButF(block, NUM, B_MARKER_PAT_DIM, IFACE_("Height:"), 10, 76, 300, 19, &cb->marker_pat[1], 3.0f,
469
10.0 * height, step, digits, TIP_("Height of marker's pattern in screen coordinates"));
471
uiDefBut(block, LABEL, 0, IFACE_("Search Area:"), 0, 57, 300, 19, NULL, 0, 0, 0, 0, "");
472
uiDefButF(block, NUM, B_MARKER_SEARCH_POS, IFACE_("X:"), 10, 38, 145, 19, &cb->marker_search_pos[0],
473
-width, width, step, digits, TIP_("X-position of search at frame relative to marker's position"));
474
uiDefButF(block, NUM, B_MARKER_SEARCH_POS, IFACE_("Y:"), 165, 38, 145, 19, &cb->marker_search_pos[1],
475
-height, height, step, digits, TIP_("Y-position of search at frame relative to marker's position"));
476
uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, IFACE_("Width:"), 10, 19, 300, 19, &cb->marker_search[0], 3.0f,
477
10.0 * width, step, digits, TIP_("Width of marker's search in screen coordinates"));
478
uiDefButF(block, NUM, B_MARKER_SEARCH_DIM, IFACE_("Height:"), 10, 0, 300, 19, &cb->marker_search[1], 3.0f,
479
10.0 * height, step, digits, TIP_("Height of marker's search in screen coordinates"));
454
481
uiBlockEndAlign(block);