Camera tracking: fixes in Link Empty to Track and Bundles to Mesh operators

- This operators always used to work with tracks for camera
- Properly set camera and object fields to Follow Track constraint
- TrackingObject.tracks is now pointing to actual list of tracks for
  camera objects.
This commit is contained in:
2012-01-04 09:19:39 +00:00
parent 76b8b67565
commit 388da558ed
2 changed files with 32 additions and 5 deletions

View File

@@ -60,6 +60,22 @@ def CLIP_set_viewport_background(context, all_screens, clip, clip_user):
set_background, clip, clip_user)
def CLIP_camera_for_clip(context, clip):
scene = context.scene
camera = scene.camera
for ob in scene.objects:
if ob.type == 'CAMERA':
for con in ob.constraints:
if con.type == 'CAMERA_SOLVER':
cur_clip = scene.clip if con.use_active_clip else con.clip
if cur_clip == clip:
return ob
return camera
def CLIP_track_view_selected(sc, track):
if track.select_anchor:
return True
@@ -80,7 +96,7 @@ class CLIP_OT_track_to_empty(Operator):
bl_label = "Link Empty to Track"
bl_options = {'UNDO', 'REGISTER'}
def _link_track(self, context, track):
def _link_track(self, context, clip, tracking_object, track):
sc = context.space_data
constraint = None
ob = None
@@ -101,14 +117,17 @@ class CLIP_OT_track_to_empty(Operator):
constraint.clip = sc.clip
constraint.track = track.name
constraint.use_3d_position = False
constraint.object = tracking_object.name
constraint.camera = CLIP_camera_for_clip(context, clip);
def execute(self, context):
sc = context.space_data
clip = sc.clip
tracking_object = clip.tracking.objects.active
for track in clip.tracking.tracks:
for track in tracking_object.tracks:
if CLIP_track_view_selected(sc, track):
self._link_track(context, track)
self._link_track(context, clip, tracking_object ,track)
return {'FINISHED'}
@@ -130,11 +149,12 @@ class CLIP_OT_bundles_to_mesh(Operator):
sc = context.space_data
clip = sc.clip
tracking_object = clip.tracking.objects.active
new_verts = []
mesh = bpy.data.meshes.new(name="Tracks")
for track in clip.tracking.tracks:
for track in tracking_object.tracks:
if track.has_bundle:
new_verts.append(track.bundle)

View File

@@ -305,7 +305,14 @@ static void rna_trackingObject_tracks_begin(CollectionPropertyIterator *iter, Po
{
MovieTrackingObject *object= (MovieTrackingObject* )ptr->data;
rna_iterator_listbase_begin(iter, &object->tracks, NULL);
if(object->flag&TRACKING_OBJECT_CAMERA) {
MovieClip *clip= (MovieClip*)ptr->id.data;
rna_iterator_listbase_begin(iter, &clip->tracking.tracks, NULL);
}
else {
rna_iterator_listbase_begin(iter, &object->tracks, NULL);
}
}
static PointerRNA rna_tracking_active_object_get(PointerRNA *ptr)