Merge branch 'master' into blender2.8
This commit is contained in:
@@ -289,6 +289,46 @@ void BKE_tracking_stabilization_data_to_mat4(int width, int height, float aspect
|
|||||||
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking);
|
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking);
|
||||||
void BKE_tracking_dopesheet_update(struct MovieTracking *tracking);
|
void BKE_tracking_dopesheet_update(struct MovieTracking *tracking);
|
||||||
|
|
||||||
|
/* **** Query/search **** */
|
||||||
|
|
||||||
|
struct MovieTrackingObject *BKE_tracking_find_object_for_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track);
|
||||||
|
struct ListBase *BKE_tracking_find_tracks_list_for_track(
|
||||||
|
struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track);
|
||||||
|
|
||||||
|
struct MovieTrackingObject *BKE_tracking_find_object_for_plane_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track);
|
||||||
|
struct ListBase *BKE_tracking_find_tracks_list_for_plane_track(
|
||||||
|
struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track);
|
||||||
|
|
||||||
|
|
||||||
|
void BKE_tracking_get_rna_path_for_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len);
|
||||||
|
void BKE_tracking_get_rna_path_prefix_for_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len);
|
||||||
|
void BKE_tracking_get_rna_path_for_plane_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len);
|
||||||
|
void BKE_tracking_get_rna_path_prefix_for_plane_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len);
|
||||||
|
|
||||||
|
/* **** Utility macros **** */
|
||||||
|
|
||||||
#define TRACK_SELECTED(track) ((track)->flag & SELECT || (track)->pat_flag & SELECT || (track)->search_flag & SELECT)
|
#define TRACK_SELECTED(track) ((track)->flag & SELECT || (track)->pat_flag & SELECT || (track)->search_flag & SELECT)
|
||||||
|
|
||||||
#define TRACK_AREA_SELECTED(track, area) ((area) == TRACK_AREA_POINT ? (track)->flag & SELECT : \
|
#define TRACK_AREA_SELECTED(track, area) ((area) == TRACK_AREA_POINT ? (track)->flag & SELECT : \
|
||||||
|
@@ -2905,3 +2905,155 @@ void BKE_tracking_dopesheet_update(MovieTracking *tracking)
|
|||||||
|
|
||||||
dopesheet->ok = true;
|
dopesheet->ok = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NOTE: Returns NULL if the track comes from camera object, */
|
||||||
|
MovieTrackingObject *BKE_tracking_find_object_for_track(
|
||||||
|
const MovieTracking *tracking,
|
||||||
|
const MovieTrackingTrack *track)
|
||||||
|
{
|
||||||
|
const ListBase *tracksbase = &tracking->tracks;
|
||||||
|
if (BLI_findindex(tracksbase, track) != -1) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
MovieTrackingObject *object = tracking->objects.first;
|
||||||
|
while (object != NULL) {
|
||||||
|
if (BLI_findindex(&object->tracks, track) != -1) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
object = object->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListBase *BKE_tracking_find_tracks_list_for_track(
|
||||||
|
MovieTracking *tracking,
|
||||||
|
const MovieTrackingTrack *track)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object = BKE_tracking_find_object_for_track(tracking,
|
||||||
|
track);
|
||||||
|
if (object != NULL) {
|
||||||
|
return &object->tracks;
|
||||||
|
}
|
||||||
|
return &tracking->tracks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* NOTE: Returns NULL if the track comes from camera object, */
|
||||||
|
MovieTrackingObject *BKE_tracking_find_object_for_plane_track(
|
||||||
|
const MovieTracking *tracking,
|
||||||
|
const MovieTrackingPlaneTrack *plane_track)
|
||||||
|
{
|
||||||
|
const ListBase *plane_tracks_base = &tracking->plane_tracks;
|
||||||
|
if (BLI_findindex(plane_tracks_base, plane_track) != -1) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
MovieTrackingObject *object = tracking->objects.first;
|
||||||
|
while (object != NULL) {
|
||||||
|
if (BLI_findindex(&object->plane_tracks, plane_track) != -1) {
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
object = object->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ListBase *BKE_tracking_find_tracks_list_for_plane_track(
|
||||||
|
MovieTracking *tracking,
|
||||||
|
const MovieTrackingPlaneTrack *plane_track)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object =
|
||||||
|
BKE_tracking_find_object_for_plane_track(tracking, plane_track);
|
||||||
|
if (object != NULL) {
|
||||||
|
return &object->plane_tracks;
|
||||||
|
}
|
||||||
|
return &tracking->plane_tracks;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BKE_tracking_get_rna_path_for_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object =
|
||||||
|
BKE_tracking_find_object_for_track(tracking, track);
|
||||||
|
char track_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(track_name_esc, track->name, sizeof(track_name_esc));
|
||||||
|
if (object == NULL) {
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.tracks[\"%s\"]",
|
||||||
|
track_name_esc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char object_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.objects[\"%s\"].tracks[\"%s\"]",
|
||||||
|
object_name_esc,
|
||||||
|
track_name_esc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BKE_tracking_get_rna_path_prefix_for_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingTrack *track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object =
|
||||||
|
BKE_tracking_find_object_for_track(tracking, track);
|
||||||
|
if (object == NULL) {
|
||||||
|
BLI_snprintf(rna_path, rna_path_len, "tracking.tracks");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char object_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.objects[\"%s\"]",
|
||||||
|
object_name_esc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BKE_tracking_get_rna_path_for_plane_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object =
|
||||||
|
BKE_tracking_find_object_for_plane_track(tracking, plane_track);
|
||||||
|
char track_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(track_name_esc, plane_track->name, sizeof(track_name_esc));
|
||||||
|
if (object == NULL) {
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.plane_tracks[\"%s\"]",
|
||||||
|
track_name_esc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char object_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.objects[\"%s\"].plane_tracks[\"%s\"]",
|
||||||
|
object_name_esc,
|
||||||
|
track_name_esc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BKE_tracking_get_rna_path_prefix_for_plane_track(
|
||||||
|
const struct MovieTracking *tracking,
|
||||||
|
const struct MovieTrackingPlaneTrack *plane_track,
|
||||||
|
char *rna_path,
|
||||||
|
size_t rna_path_len)
|
||||||
|
{
|
||||||
|
MovieTrackingObject *object =
|
||||||
|
BKE_tracking_find_object_for_plane_track(tracking, plane_track);
|
||||||
|
if (object == NULL) {
|
||||||
|
BLI_snprintf(rna_path, rna_path_len, "tracking.plane_tracks");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char object_name_esc[MAX_NAME * 2];
|
||||||
|
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
||||||
|
BLI_snprintf(rna_path, rna_path_len,
|
||||||
|
"tracking.objects[\"%s\"].plane_tracks",
|
||||||
|
object_name_esc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -139,6 +139,8 @@ void clip_graph_tracking_iterate(struct SpaceClip *sc, bool selected_only, bool
|
|||||||
void clip_delete_track(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track);
|
void clip_delete_track(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track);
|
||||||
void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker);
|
void clip_delete_marker(struct bContext *C, struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker);
|
||||||
|
|
||||||
|
void clip_delete_plane_track(struct bContext *C, struct MovieClip *clip, struct MovieTrackingPlaneTrack *plane_track);
|
||||||
|
|
||||||
void clip_view_center_to_point(SpaceClip *sc, float x, float y);
|
void clip_view_center_to_point(SpaceClip *sc, float x, float y);
|
||||||
|
|
||||||
void clip_draw_cfra(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
void clip_draw_cfra(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
|
||||||
|
@@ -184,37 +184,37 @@ void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
|
|||||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||||
bool has_bundle = false;
|
bool has_bundle = false;
|
||||||
char track_name_escaped[MAX_NAME], prefix[MAX_NAME * 2];
|
const bool used_for_stabilization =
|
||||||
const bool used_for_stabilization = (track->flag & (TRACK_USE_2D_STAB | TRACK_USE_2D_STAB_ROT));
|
(track->flag & (TRACK_USE_2D_STAB | TRACK_USE_2D_STAB_ROT)) != 0;
|
||||||
|
if (track == act_track) {
|
||||||
if (track == act_track)
|
|
||||||
tracking->act_track = NULL;
|
tracking->act_track = NULL;
|
||||||
|
}
|
||||||
/* handle reconstruction display in 3d viewport */
|
/* Handle reconstruction display in 3d viewport. */
|
||||||
if (track->flag & TRACK_HAS_BUNDLE)
|
if (track->flag & TRACK_HAS_BUNDLE) {
|
||||||
has_bundle = true;
|
has_bundle = true;
|
||||||
|
}
|
||||||
/* Make sure no plane will use freed track */
|
/* Make sure no plane will use freed track */
|
||||||
BKE_tracking_plane_tracks_remove_point_track(tracking, track);
|
BKE_tracking_plane_tracks_remove_point_track(tracking, track);
|
||||||
|
|
||||||
/* Delete f-curves associated with the track (such as weight, i.e.) */
|
/* Delete f-curves associated with the track (such as weight, i.e.) */
|
||||||
BLI_strescape(track_name_escaped, track->name, sizeof(track_name_escaped));
|
/* Escaped object name, escaped track name, rest of the path. */
|
||||||
BLI_snprintf(prefix, sizeof(prefix), "tracks[\"%s\"]", track_name_escaped);
|
char rna_path[MAX_NAME * 4 + 64];
|
||||||
BKE_animdata_fix_paths_remove(&clip->id, prefix);
|
BKE_tracking_get_rna_path_for_track(tracking,
|
||||||
|
track,
|
||||||
|
rna_path, sizeof(rna_path));
|
||||||
|
BKE_animdata_fix_paths_remove(&clip->id, rna_path);
|
||||||
|
/* Delete track itself. */
|
||||||
BKE_tracking_track_free(track);
|
BKE_tracking_track_free(track);
|
||||||
BLI_freelinkN(tracksbase, track);
|
BLI_freelinkN(tracksbase, track);
|
||||||
|
/* Send notifiers. */
|
||||||
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
|
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
|
||||||
|
|
||||||
if (used_for_stabilization) {
|
if (used_for_stabilization) {
|
||||||
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
|
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
|
||||||
}
|
}
|
||||||
|
/* Inform dependency graph. */
|
||||||
DEG_id_tag_update(&clip->id, 0);
|
DEG_id_tag_update(&clip->id, 0);
|
||||||
|
if (has_bundle) {
|
||||||
if (has_bundle)
|
|
||||||
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
|
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track,
|
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track,
|
||||||
@@ -230,6 +230,28 @@ void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clip_delete_plane_track(bContext *C,
|
||||||
|
MovieClip *clip,
|
||||||
|
MovieTrackingPlaneTrack *plane_track)
|
||||||
|
{
|
||||||
|
MovieTracking *tracking = &clip->tracking;
|
||||||
|
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||||
|
/* Delete f-curves associated with the track (such as weight, i.e.) */
|
||||||
|
/* Escaped object name, escaped track name, rest of the path. */
|
||||||
|
char rna_path[MAX_NAME * 4 + 64];
|
||||||
|
BKE_tracking_get_rna_path_for_plane_track(tracking,
|
||||||
|
plane_track,
|
||||||
|
rna_path, sizeof(rna_path));
|
||||||
|
BKE_animdata_fix_paths_remove(&clip->id, rna_path);
|
||||||
|
/* Delete the plane track itself. */
|
||||||
|
BKE_tracking_plane_track_free(plane_track);
|
||||||
|
BLI_freelinkN(plane_tracks_base, plane_track);
|
||||||
|
/* TODO(sergey): Any notifiers to be sent here? */
|
||||||
|
(void) C;
|
||||||
|
/* Inform dependency graph. */
|
||||||
|
DEG_id_tag_update(&clip->id, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
|
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
|
||||||
{
|
{
|
||||||
int width, height;
|
int width, height;
|
||||||
|
@@ -227,7 +227,6 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||||
MovieTracking *tracking = &clip->tracking;
|
MovieTracking *tracking = &clip->tracking;
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
/* Delete selected plane tracks. */
|
/* Delete selected plane tracks. */
|
||||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first,
|
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first,
|
||||||
@@ -236,14 +235,11 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
plane_track = next_plane_track)
|
plane_track = next_plane_track)
|
||||||
{
|
{
|
||||||
next_plane_track = plane_track->next;
|
next_plane_track = plane_track->next;
|
||||||
|
|
||||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||||
BKE_tracking_plane_track_free(plane_track);
|
clip_delete_plane_track(C, clip, plane_track);
|
||||||
BLI_freelinkN(plane_tracks_base, plane_track);
|
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove selected point tracks (they'll also be removed from planes which
|
/* Remove selected point tracks (they'll also be removed from planes which
|
||||||
* uses them).
|
* uses them).
|
||||||
*/
|
*/
|
||||||
@@ -258,14 +254,11 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nothing selected now, unlock view so it can be scrolled nice again. */
|
/* Nothing selected now, unlock view so it can be scrolled nice again. */
|
||||||
sc->flag &= ~SC_LOCK_SELECTION;
|
sc->flag &= ~SC_LOCK_SELECTION;
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
|
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
|
||||||
}
|
}
|
||||||
|
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2190,23 +2190,24 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
Editing *ed = BKE_sequencer_editing_get(scene, false);
|
Editing *ed = BKE_sequencer_editing_get(scene, false);
|
||||||
Sequence *seq;
|
Sequence *seq;
|
||||||
MetaStack *ms;
|
MetaStack *ms;
|
||||||
bool nothingSelected = true;
|
bool nothing_selected = true;
|
||||||
|
|
||||||
seq = BKE_sequencer_active_get(scene);
|
seq = BKE_sequencer_active_get(scene);
|
||||||
if (seq && seq->flag & SELECT) { /* avoid a loop since this is likely to be selected */
|
if (seq && seq->flag & SELECT) { /* avoid a loop since this is likely to be selected */
|
||||||
nothingSelected = false;
|
nothing_selected = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
||||||
if (seq->flag & SELECT) {
|
if (seq->flag & SELECT) {
|
||||||
nothingSelected = false;
|
nothing_selected = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nothingSelected)
|
if (nothing_selected) {
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
/* for effects and modifiers, try to find a replacement input */
|
/* for effects and modifiers, try to find a replacement input */
|
||||||
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
||||||
|
@@ -48,6 +48,9 @@
|
|||||||
|
|
||||||
#ifdef RNA_RUNTIME
|
#ifdef RNA_RUNTIME
|
||||||
|
|
||||||
|
#include "DNA_anim_types.h"
|
||||||
|
|
||||||
|
#include "BKE_animsys.h"
|
||||||
#include "BKE_node.h"
|
#include "BKE_node.h"
|
||||||
|
|
||||||
#include "DEG_depsgraph.h"
|
#include "DEG_depsgraph.h"
|
||||||
@@ -56,71 +59,6 @@
|
|||||||
|
|
||||||
#include "WM_api.h"
|
#include "WM_api.h"
|
||||||
|
|
||||||
static MovieTrackingObject *tracking_object_from_track(MovieClip *clip,
|
|
||||||
MovieTrackingTrack *track)
|
|
||||||
{
|
|
||||||
MovieTracking *tracking = &clip->tracking;
|
|
||||||
ListBase *tracksbase = &tracking->tracks;
|
|
||||||
/* TODO: it's a bit difficult to find list track came from knowing just
|
|
||||||
* movie clip ID and MovieTracking structure, so keep this naive
|
|
||||||
* search for a while */
|
|
||||||
if (BLI_findindex(tracksbase, track) == -1) {
|
|
||||||
MovieTrackingObject *object = tracking->objects.first;
|
|
||||||
while (object) {
|
|
||||||
if (BLI_findindex(&object->tracks, track) != -1) {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
object = object->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ListBase *tracking_tracksbase_from_track(MovieClip *clip,
|
|
||||||
MovieTrackingTrack *track)
|
|
||||||
{
|
|
||||||
MovieTracking *tracking = &clip->tracking;
|
|
||||||
MovieTrackingObject *object = tracking_object_from_track(clip, track);
|
|
||||||
if (object != NULL) {
|
|
||||||
return &object->tracks;
|
|
||||||
}
|
|
||||||
return &tracking->tracks;
|
|
||||||
}
|
|
||||||
|
|
||||||
static MovieTrackingObject *tracking_object_from_plane_track(
|
|
||||||
MovieClip *clip,
|
|
||||||
MovieTrackingPlaneTrack *plane_track)
|
|
||||||
{
|
|
||||||
MovieTracking *tracking = &clip->tracking;
|
|
||||||
ListBase *plane_tracks_base = &tracking->plane_tracks;
|
|
||||||
/* TODO: it's a bit difficult to find list track came from knowing just
|
|
||||||
* movie clip ID and MovieTracking structure, so keep this naive
|
|
||||||
* search for a while */
|
|
||||||
if (BLI_findindex(plane_tracks_base, plane_track) == -1) {
|
|
||||||
MovieTrackingObject *object = tracking->objects.first;
|
|
||||||
while (object) {
|
|
||||||
if (BLI_findindex(&object->plane_tracks, plane_track) != -1) {
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
object = object->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ListBase *tracking_tracksbase_from_plane_track(
|
|
||||||
MovieClip *clip,
|
|
||||||
MovieTrackingPlaneTrack *plane_track)
|
|
||||||
{
|
|
||||||
MovieTracking *tracking = &clip->tracking;
|
|
||||||
MovieTrackingObject *object = tracking_object_from_plane_track(clip,
|
|
||||||
plane_track);
|
|
||||||
if (object != NULL) {
|
|
||||||
return &object->plane_tracks;
|
|
||||||
}
|
|
||||||
return &tracking->plane_tracks;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *rna_tracking_path(PointerRNA *UNUSED(ptr))
|
static char *rna_tracking_path(PointerRNA *UNUSED(ptr))
|
||||||
{
|
{
|
||||||
return BLI_sprintfN("tracking");
|
return BLI_sprintfN("tracking");
|
||||||
@@ -150,19 +88,12 @@ static char *rna_trackingTrack_path(PointerRNA *ptr)
|
|||||||
{
|
{
|
||||||
MovieClip *clip = (MovieClip *)ptr->id.data;
|
MovieClip *clip = (MovieClip *)ptr->id.data;
|
||||||
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
|
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
|
||||||
MovieTrackingObject *object = tracking_object_from_track(clip, track);
|
/* Escaped object name, escaped track name, rest of the path. */
|
||||||
char track_name_esc[sizeof(track->name) * 2];
|
char rna_path[MAX_NAME * 4 + 64];
|
||||||
BLI_strescape(track_name_esc, track->name, sizeof(track_name_esc));
|
BKE_tracking_get_rna_path_for_track(&clip->tracking,
|
||||||
if (object == NULL) {
|
track,
|
||||||
return BLI_sprintfN("tracking.tracks[\"%s\"]", track_name_esc);
|
rna_path, sizeof(rna_path));
|
||||||
}
|
return BLI_strdup(rna_path);
|
||||||
else {
|
|
||||||
char object_name_esc[sizeof(object->name) * 2];
|
|
||||||
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
|
||||||
return BLI_sprintfN("tracking.objects[\"%s\"].tracks[\"%s\"]",
|
|
||||||
object_name_esc,
|
|
||||||
track_name_esc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
|
||||||
@@ -256,9 +187,26 @@ static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value)
|
|||||||
{
|
{
|
||||||
MovieClip *clip = (MovieClip *)ptr->id.data;
|
MovieClip *clip = (MovieClip *)ptr->id.data;
|
||||||
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
|
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
|
||||||
ListBase *tracksbase = tracking_tracksbase_from_track(clip, track);
|
ListBase *tracksbase =
|
||||||
|
BKE_tracking_find_tracks_list_for_track(&clip->tracking, track);
|
||||||
|
/* Store old name, for the animation fix later. */
|
||||||
|
char old_name[sizeof(track->name)];
|
||||||
|
BLI_strncpy(old_name, track->name, sizeof(track->name));
|
||||||
|
/* Update the name, */
|
||||||
BLI_strncpy(track->name, value, sizeof(track->name));
|
BLI_strncpy(track->name, value, sizeof(track->name));
|
||||||
BKE_tracking_track_unique_name(tracksbase, track);
|
BKE_tracking_track_unique_name(tracksbase, track);
|
||||||
|
/* Fix animation paths. */
|
||||||
|
AnimData *adt = BKE_animdata_from_id(&clip->id);
|
||||||
|
if (adt != NULL) {
|
||||||
|
char rna_path[MAX_NAME * 2 + 64];
|
||||||
|
BKE_tracking_get_rna_path_prefix_for_track(&clip->tracking,
|
||||||
|
track,
|
||||||
|
rna_path, sizeof(rna_path));
|
||||||
|
BKE_animdata_fix_paths_rename(&clip->id, adt, NULL,
|
||||||
|
rna_path,
|
||||||
|
old_name, track->name,
|
||||||
|
0, 0, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rna_trackingTrack_select_get(PointerRNA *ptr)
|
static int rna_trackingTrack_select_get(PointerRNA *ptr)
|
||||||
@@ -327,28 +275,40 @@ static char *rna_trackingPlaneTrack_path(PointerRNA *ptr)
|
|||||||
{
|
{
|
||||||
MovieClip *clip = (MovieClip *)ptr->id.data;
|
MovieClip *clip = (MovieClip *)ptr->id.data;
|
||||||
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
|
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
|
||||||
char track_name_esc[sizeof(plane_track->name) * 2];
|
/* Escaped object name, escaped track name, rest of the path. */
|
||||||
MovieTrackingObject *object = tracking_object_from_plane_track(clip, plane_track);
|
char rna_path[MAX_NAME * 4 + 64];
|
||||||
BLI_strescape(track_name_esc, plane_track->name, sizeof(track_name_esc));
|
BKE_tracking_get_rna_path_for_plane_track(&clip->tracking,
|
||||||
if (object == NULL) {
|
plane_track,
|
||||||
return BLI_sprintfN("tracking.plane_tracks[\"%s\"]", track_name_esc);
|
rna_path, sizeof(rna_path));
|
||||||
}
|
return BLI_strdup(rna_path);
|
||||||
else {
|
|
||||||
char object_name_esc[sizeof(object->name) * 2];
|
|
||||||
BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc));
|
|
||||||
return BLI_sprintfN("tracking.objects[\"%s\"].plane_tracks[\"%s\"]",
|
|
||||||
object_name_esc,
|
|
||||||
track_name_esc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
|
static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
|
||||||
{
|
{
|
||||||
MovieClip *clip = (MovieClip *)ptr->id.data;
|
MovieClip *clip = (MovieClip *)ptr->id.data;
|
||||||
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
|
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
|
||||||
ListBase *plane_tracks_base = tracking_tracksbase_from_plane_track(clip, plane_track);
|
ListBase *plane_tracks_base =
|
||||||
|
BKE_tracking_find_tracks_list_for_plane_track(&clip->tracking,
|
||||||
|
plane_track);
|
||||||
|
/* Store old name, for the animation fix later. */
|
||||||
|
char old_name[sizeof(plane_track->name)];
|
||||||
|
BLI_strncpy(old_name, plane_track->name, sizeof(plane_track->name));
|
||||||
|
/* Update the name, */
|
||||||
BLI_strncpy(plane_track->name, value, sizeof(plane_track->name));
|
BLI_strncpy(plane_track->name, value, sizeof(plane_track->name));
|
||||||
BKE_tracking_plane_track_unique_name(plane_tracks_base, plane_track);
|
BKE_tracking_plane_track_unique_name(plane_tracks_base, plane_track);
|
||||||
|
/* Fix animation paths. */
|
||||||
|
AnimData *adt = BKE_animdata_from_id(&clip->id);
|
||||||
|
if (adt != NULL) {
|
||||||
|
char rna_path[MAX_NAME * 2 + 64];
|
||||||
|
BKE_tracking_get_rna_path_prefix_for_plane_track(&clip->tracking,
|
||||||
|
plane_track,
|
||||||
|
rna_path,
|
||||||
|
sizeof(rna_path));
|
||||||
|
BKE_animdata_fix_paths_rename(&clip->id, adt, NULL,
|
||||||
|
rna_path,
|
||||||
|
old_name, plane_track->name,
|
||||||
|
0, 0, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr))
|
static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr))
|
||||||
@@ -1651,6 +1611,7 @@ static void rna_def_trackingPlaneTrack(BlenderRNA *brna)
|
|||||||
/* auto keyframing */
|
/* auto keyframing */
|
||||||
prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
|
prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
|
||||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", PLANE_TRACK_AUTOKEY);
|
RNA_def_property_boolean_sdna(prop, NULL, "flag", PLANE_TRACK_AUTOKEY);
|
||||||
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||||
RNA_def_property_ui_text(prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners");
|
RNA_def_property_ui_text(prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners");
|
||||||
RNA_def_property_ui_icon(prop, ICON_REC, 0);
|
RNA_def_property_ui_icon(prop, ICON_REC, 0);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user