diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/add_track_corners.py	Sat Mar 28 15:57:33 2020 -0700
@@ -0,0 +1,72 @@
+import bpy
+from mathutils import Vector
+
+class AddTrackCornersOperator(bpy.types.Operator):
+    bl_idname = 'clip.add_track_corners'
+    bl_label = 'Add track corners'
+    bl_description = 'Create new tracks that follow the corners of the active track.'
+    bl_options = {'REGISTER', 'UNDO'}
+
+    dense_fill = bpy.props.BoolProperty(
+        name="Dense fill",
+        description='Make 8 points (corners and half-edges) instead of just 4',
+        default=False,
+    )
+
+    @classmethod
+    def _tracks(cls, context):
+        clip = context.space_data.clip
+        if clip:
+            return clip.tracking.tracks
+    
+    @classmethod
+    def poll(cls, context):
+        tracks = AddTrackCornersOperator._tracks(context)
+        if tracks:
+            return tracks.active
+
+    def _new_offset_marker(self, base_marker, norm_offset, track):
+        co = base_marker.co + norm_offset
+        return track.markers.insert_frame(base_marker.frame, co=co)
+
+    def _new_track(self, tracks, name, frame):
+        # wrong: always adds to camera, even if active track was
+        # on another object
+        return tracks.new(name, frame)
+
+    def execute(self, context):
+        tracks = self._tracks(context)
+        track = tracks.active
+
+        first_frame = min(m.frame for m in track.markers)
+        for corner_index in range(4):
+            new_track = self._new_track(tracks,
+                                        '%s.%s' % (track.name, corner_index),
+                                        first_frame)
+            for marker in track.markers:
+                corner = Vector(marker.pattern_corners[corner_index])
+                self._new_offset_marker(marker, corner, new_track)
+            print("added new track %s" % new_track.name)
+        if self.dense_fill:
+            for c1, c2 in [(0, 1), (1, 2), (2, 3), (3, 0)]:
+                new_track = self._new_track(tracks,
+                                            '%s.%s-%s' % (track.name, c1, c2),
+                                            first_frame)
+                for marker in track.markers:
+                    corner1 = Vector(marker.pattern_corners[c1])
+                    corner2 = Vector(marker.pattern_corners[c2])
+                    self._new_offset_marker(marker,
+                                            corner1.lerp(corner2, .5), new_track)
+                print("added new dense track %s" % new_track.name)
+                    
+        return {'FINISHED'}
+        
+def register():
+   bpy.utils.register_module(__name__)
+  
+def unregister():
+    bpy.utils.unregister_module(__name__)
+  
+if __name__ == '__main__':
+    register()
+