Mercurial > code > home > repos > blender-addons
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 |