comparison add_track_corners.py @ 2:d22d386c5e04

some old addons that need updating
author drewp@bigasterisk.com
date Sat, 28 Mar 2020 15:57:33 -0700
parents
children
comparison
equal deleted inserted replaced
1:d07887d9837e 2:d22d386c5e04
1 import bpy
2 from mathutils import Vector
3
4 class AddTrackCornersOperator(bpy.types.Operator):
5 bl_idname = 'clip.add_track_corners'
6 bl_label = 'Add track corners'
7 bl_description = 'Create new tracks that follow the corners of the active track.'
8 bl_options = {'REGISTER', 'UNDO'}
9
10 dense_fill = bpy.props.BoolProperty(
11 name="Dense fill",
12 description='Make 8 points (corners and half-edges) instead of just 4',
13 default=False,
14 )
15
16 @classmethod
17 def _tracks(cls, context):
18 clip = context.space_data.clip
19 if clip:
20 return clip.tracking.tracks
21
22 @classmethod
23 def poll(cls, context):
24 tracks = AddTrackCornersOperator._tracks(context)
25 if tracks:
26 return tracks.active
27
28 def _new_offset_marker(self, base_marker, norm_offset, track):
29 co = base_marker.co + norm_offset
30 return track.markers.insert_frame(base_marker.frame, co=co)
31
32 def _new_track(self, tracks, name, frame):
33 # wrong: always adds to camera, even if active track was
34 # on another object
35 return tracks.new(name, frame)
36
37 def execute(self, context):
38 tracks = self._tracks(context)
39 track = tracks.active
40
41 first_frame = min(m.frame for m in track.markers)
42 for corner_index in range(4):
43 new_track = self._new_track(tracks,
44 '%s.%s' % (track.name, corner_index),
45 first_frame)
46 for marker in track.markers:
47 corner = Vector(marker.pattern_corners[corner_index])
48 self._new_offset_marker(marker, corner, new_track)
49 print("added new track %s" % new_track.name)
50 if self.dense_fill:
51 for c1, c2 in [(0, 1), (1, 2), (2, 3), (3, 0)]:
52 new_track = self._new_track(tracks,
53 '%s.%s-%s' % (track.name, c1, c2),
54 first_frame)
55 for marker in track.markers:
56 corner1 = Vector(marker.pattern_corners[c1])
57 corner2 = Vector(marker.pattern_corners[c2])
58 self._new_offset_marker(marker,
59 corner1.lerp(corner2, .5), new_track)
60 print("added new dense track %s" % new_track.name)
61
62 return {'FINISHED'}
63
64 def register():
65 bpy.utils.register_module(__name__)
66
67 def unregister():
68 bpy.utils.unregister_module(__name__)
69
70 if __name__ == '__main__':
71 register()
72