[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47423] trunk/blender: mask mode for clip editor developed by Sergey Sharybin, Pete Larabell and myself.

Campbell Barton ideasman42 at gmail.com
Mon Jun 4 18:43:05 CEST 2012


Revision: 47423
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47423
Author:   campbellbarton
Date:     2012-06-04 16:42:58 +0000 (Mon, 04 Jun 2012)
Log Message:
-----------
mask mode for clip editor developed by Sergey Sharybin, Pete Larabell and myself.

see:
http://wiki.blender.org/index.php/User:Nazg-gul/MaskEditor


note - mask editing tools need continued development, feather option is not working 100%

Modified Paths:
--------------
    trunk/blender/intern/CMakeLists.txt
    trunk/blender/intern/SConscript
    trunk/blender/release/scripts/modules/bpy_extras/keyconfig_utils.py
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/CMakeLists.txt
    trunk/blender/source/blender/blenkernel/BKE_context.h
    trunk/blender/source/blender/blenkernel/BKE_library.h
    trunk/blender/source/blender/blenkernel/BKE_main.h
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/CMakeLists.txt
    trunk/blender/source/blender/blenkernel/SConscript
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/context.c
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/idcode.c
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/compositor/CMakeLists.txt
    trunk/blender/source/blender/compositor/intern/COM_Converter.cpp
    trunk/blender/source/blender/editors/CMakeLists.txt
    trunk/blender/source/blender/editors/SConscript
    trunk/blender/source/blender/editors/animation/keyframes_draw.c
    trunk/blender/source/blender/editors/include/ED_clip.h
    trunk/blender/source/blender/editors/include/ED_keyframes_draw.h
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_api/spacetypes.c
    trunk/blender/source/blender/editors/space_clip/clip_draw.c
    trunk/blender/source/blender/editors/space_clip/clip_editor.c
    trunk/blender/source/blender/editors/space_clip/space_clip.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/editors/space_node/space_node.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/makesdna/DNA_ID.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesdna/DNA_space_types.h
    trunk/blender/source/blender/makesdna/intern/makesdna.c
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/CMakeLists.txt
    trunk/blender/source/blender/makesrna/intern/makesrna.c
    trunk/blender/source/blender/makesrna/intern/rna_ID.c
    trunk/blender/source/blender/makesrna/intern/rna_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_main.c
    trunk/blender/source/blender/makesrna/intern/rna_main_api.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree_types.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c
    trunk/blender/source/blender/nodes/CMakeLists.txt
    trunk/blender/source/blender/nodes/NOD_composite.h
    trunk/blender/source/blender/nodes/composite/node_composite_tree.c
    trunk/blender/source/blender/nodes/composite/node_composite_util.c
    trunk/blender/source/blender/nodes/composite/node_composite_util.h
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/blenderplayer/CMakeLists.txt
    trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c
    trunk/blender/source/creator/CMakeLists.txt

Modified: trunk/blender/intern/CMakeLists.txt
===================================================================
--- trunk/blender/intern/CMakeLists.txt	2012-06-04 16:30:15 UTC (rev 47422)
+++ trunk/blender/intern/CMakeLists.txt	2012-06-04 16:42:58 UTC (rev 47423)
@@ -31,6 +31,7 @@
 add_subdirectory(iksolver)
 add_subdirectory(opennl)
 add_subdirectory(mikktspace)
+add_subdirectory(raskter)
 
 if(WITH_AUDASPACE)
 	add_subdirectory(audaspace)

Modified: trunk/blender/intern/SConscript
===================================================================
--- trunk/blender/intern/SConscript	2012-06-04 16:30:15 UTC (rev 47422)
+++ trunk/blender/intern/SConscript	2012-06-04 16:42:58 UTC (rev 47423)
@@ -14,7 +14,8 @@
             'boolop/SConscript',
             'opennl/SConscript',
             'mikktspace/SConscript',
-            'smoke/SConscript'])
+            'smoke/SConscript',
+            'raskter/SConscript'])
 
 if env ['WITH_BF_REMESH']:
     SConscript(['dualcon/SConscript'])

Modified: trunk/blender/release/scripts/modules/bpy_extras/keyconfig_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/bpy_extras/keyconfig_utils.py	2012-06-04 16:30:15 UTC (rev 47422)
+++ trunk/blender/release/scripts/modules/bpy_extras/keyconfig_utils.py	2012-06-04 16:42:58 UTC (rev 47423)
@@ -95,6 +95,7 @@
     ('Clip', 'CLIP_EDITOR', 'WINDOW', [
         ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
         ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
+        ('Mask Editor', 'EMPTY', 'WINDOW', []),  # image (reverse order, UVEdit before Image
         ]),
 
     ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-04 16:30:15 UTC (rev 47422)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-04 16:42:58 UTC (rev 47423)
@@ -44,15 +44,29 @@
 
                 sub.menu("CLIP_MT_clip")
 
-                sub.menu("CLIP_MT_track")
-                sub.menu("CLIP_MT_reconstruction")
+                if clip:
+                    if sc.mode == 'MASKEDITING':
+                        sub.menu("CLIP_MT_mask")
+                    else:
+                        sub.menu("CLIP_MT_track")
+                        sub.menu("CLIP_MT_reconstruction")
 
-        layout.prop(sc, "view", text="", expand=True)
+        if sc.mode != 'MASKEDITING':
+            layout.prop(sc, "view", text="", expand=True)
 
         if clip:
             if sc.view == 'CLIP':
                 layout.prop(sc, "mode", text="")
-            if sc.view == 'GRAPH':
+                layout.prop(sc, "pivot_point", text="", icon_only=True)
+
+                if sc.mode == 'MASKEDITING':
+                    toolsettings = context.tool_settings
+
+                    row = layout.row(align=True)
+                    row.prop(toolsettings, "use_proportional_edit_mask", text="", icon_only=True)
+                    if toolsettings.use_proportional_edit_objects:
+                        row.prop(toolsettings, "proportional_edit_falloff", text="", icon_only=True)
+            elif sc.view == 'GRAPH':
                 row = layout.row(align=True)
 
                 if sc.show_filters:
@@ -71,6 +85,10 @@
         row = layout.row()
         row.template_ID(sc, "clip", open='clip.open')
 
+        if sc.mode == 'MASKEDITING':
+            row = layout.row()
+            row.template_ID(sc, "mask", new="mask.new")
+
         if clip:
             tracking = clip.tracking
             active = tracking.objects.active
@@ -102,6 +120,16 @@
         return clip and sc.view == 'CLIP'
 
 
+class CLIP_PT_mask_view_panel:
+
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+        clip = sc.clip
+
+        return clip and sc.view == 'CLIP' and sc.mode == 'MASKEDITING'
+
+
 class CLIP_PT_tracking_panel:
 
     @classmethod
@@ -359,11 +387,52 @@
         col.prop(settings, "object_distance")
 
 
-class CLIP_PT_tools_grease_pencil(CLIP_PT_distortion_panel, Panel):
+class CLIP_PT_tools_mask(CLIP_PT_mask_view_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
+    bl_label = "Mask Tools"
+
+    def draw(self, context):
+        layout = self.layout
+
+        col = layout.column(align=True)
+        col.label(text="Transform:")
+        col.operator("transform.translate")
+        col.operator("transform.rotate")
+        col.operator("transform.resize", text="Scale")
+
+        col = layout.column(align=True)
+        col.label(text="Spline:")
+        col.operator("mask.delete")
+        col.operator("mask.cyclic_toggle")
+        col.operator("mask.switch_direction")
+
+        col = layout.column(align=True)
+        col.label(text="Parenting:")
+        col.operator("mask.parent_set")
+        col.operator("mask.parent_clear")
+
+
+class CLIP_PT_tools_grease_pencil(Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'TOOLS'
     bl_label = "Grease Pencil"
 
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+        clip = sc.clip
+
+        if not clip:
+            return False
+
+        if sc.mode == 'DISTORTION':
+            return sc.view == 'CLIP'
+        elif sc.mode == 'MASKEDITING':
+            return True
+
+        return False
+
     def draw(self, context):
         layout = self.layout
 
@@ -550,6 +619,119 @@
         col.prop(clip.tracking.camera, "k3")
 
 
+class CLIP_PT_mask_objects(Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Mask Layers"
+
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+
+        return sc.mask and sc.mode == 'MASKEDITING'
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        mask = sc.mask
+
+        row = layout.row()
+        row.template_list(mask, "layers",
+                          mask, "active_layer_index", rows=3)
+
+        sub = row.column(align=True)
+
+        sub.operator("mask.layer_new", icon='ZOOMIN', text="")
+        sub.operator("mask.layer_remove", icon='ZOOMOUT', text="")
+
+        active = mask.layers.active
+        if active:
+            layout.prop(active, "name")
+
+            # blending
+            row = layout.row(align=True)
+            row.prop(active, "alpha")
+            row.prop(active, "invert", text="", icon='IMAGE_ALPHA')
+
+            layout.prop(active, "blend")
+
+
+class CLIP_PT_active_mask_spline(Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Active Spline"
+
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+        mask = sc.mask
+
+        if mask and sc.mode == 'MASKEDITING':
+            return mask.layers.active and mask.layers.active.splines.active
+
+        return False
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        mask = sc.mask
+        spline = mask.layers.active.splines.active
+
+        col = layout.column()
+        col.prop(spline, "weight_interpolation")
+        col.prop(spline, "use_cyclic")
+
+
+class CLIP_PT_active_mask_point(Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Active Point"
+
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+        mask = sc.mask
+
+        if mask and sc.mode == 'MASKEDITING':
+            return mask.layers.active and mask.layers.active.splines.active_point
+
+        return False
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        mask = sc.mask
+        point = mask.layers.active.splines.active_point
+        parent = point.parent
+
+        col = layout.column()
+        col.prop(point, "handle_type")
+
+        col = layout.column()
+        col.prop(parent, "use_parent", text="Parent")
+        if parent.use_parent:
+            # Currently only parenting yo movie clip is allowed, so do not
+            # ver-oplicate things for now and use single template_ID
+            #col.template_any_ID(parent, "id", "id_type", text="")
+
+            col.template_ID(parent, "id")
+
+            if parent.id_type == 'MOVIECLIP' and parent.id:
+                clip = parent.id
+                tracking = clip.tracking
+
+                col.prop_search(parent, "parent", tracking, "objects", icon='OBJECT_DATA', text="Object:")
+
+                if parent.parent and parent.parent in tracking.objects:
+                    object = clip.tracking.objects[parent.parent]
+                    col.prop_search(parent, "sub_parent", object, "tracks", icon='ANIM_DATA', text="Track:")
+                else:
+                    col.prop_search(parent, "sub_parent", clip.tracking, "tracks", icon='ANIM_DATA', text="Track:")
+
+
 class CLIP_PT_display(CLIP_PT_clip_view_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'UI'
@@ -594,12 +776,23 @@
             row = col.row()
             row.prop(clip, "display_aspect", text="")
 
+        if sc.mode == 'MASKEDITING':
+            col = layout.column()
+            col.prop(sc, "mask_draw_type", text="")
+            col.prop(sc, "show_mask_smooth")
 
+
 class CLIP_PT_marker_display(CLIP_PT_clip_view_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'UI'
     bl_label = "Marker Display"
 
+    @classmethod
+    def poll(cls, context):
+        sc = context.space_data
+
+        return sc.mode != 'MASKEDITING'
+
     def draw(self, context):
         layout = self.layout
         sc = context.space_data
@@ -763,6 +956,7 @@
             layout.operator("clip.open", icon='FILESEL')
 
 
+
 class CLIP_PT_tools_clip(CLIP_PT_clip_view_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
@@ -942,18 +1136,28 @@
 
     def draw(self, context):
         layout = self.layout
+        sc = context.space_data
 
-        layout.operator("clip.select_border")
-        layout.operator("clip.select_circle")
+        if sc.mode == 'MASKEDITING':
+            layout.operator("mask.select_border")
+            layout.operator("mask.select_circle")
 
-        layout.separator()
+            layout.separator()
 
-        layout.operator("clip.select_all").action = 'TOGGLE'
-        layout.operator("clip.select_all", text="Inverse").action = 'INVERT'

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list