[Bf-blender-cvs] [fc965a8] soc-2016-multiview: add a new mode in space clip view

Tianwei Shen noreply at git.blender.org
Fri Jul 15 14:56:31 CEST 2016


Commit: fc965a85c6d141edff11f9e634c2bc95d363f7c5
Author: Tianwei Shen
Date:   Fri Jul 15 16:07:59 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBfc965a85c6d141edff11f9e634c2bc95d363f7c5

add a new mode in space clip view

===================================================================

M	release/scripts/startup/bl_ui/space_clip.py
M	source/blender/editors/include/ED_clip.h
M	source/blender/editors/space_clip/clip_editor.c
M	source/blender/editors/space_clip/tracking_ops_correspondence.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index c952a64..017db04 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -143,6 +143,36 @@ class CLIP_HT_header(Header):
                 row.prop(toolsettings, "proportional_edit_falloff",
                          text="", icon_only=True)
 
+    def _draw_correspondence(self, context):
+        layout = self.layout
+
+        toolsettings = context.tool_settings
+        sc = context.space_data
+        clip = sc.clip
+
+        row = layout.row(align=True)
+        row.template_header()
+
+        CLIP_MT_correspondence_editor_menus.draw_collapsible(context, layout)
+
+        row = layout.row()
+        row.template_ID(sc, "clip", open="clip.open")
+
+        if clip:
+            tracking = clip.tracking
+            active_object = tracking.objects.active
+
+            layout.prop(sc, "mode", text="")
+            layout.prop(sc, "view", text="", expand=True)
+            layout.prop(sc, "pivot_point", text="", icon_only=True)
+
+            r = active_object.reconstruction
+
+            if r.is_valid and sc.view == 'CLIP':
+                layout.label(text="Solve error: %.4f" % (r.average_error))
+        else:
+            layout.prop(sc, "view", text="", expand=True)
+
     def draw(self, context):
         layout = self.layout
 
@@ -150,8 +180,10 @@ class CLIP_HT_header(Header):
 
         if sc.mode == 'TRACKING':
             self._draw_tracking(context)
-        else:
+        elif sc.mode == 'MASK':
             self._draw_masking(context)
+        else:       # sc.mode == 'CORRESPONDENCE'
+            self._draw_correspondence(context)
 
         layout.template_running_jobs()
 
@@ -203,6 +235,30 @@ class CLIP_MT_masking_editor_menus(Menu):
             layout.menu("CLIP_MT_clip")  # XXX - remove?
 
 
+class CLIP_MT_correspondence_editor_menus(Menu):
+
+    bl_idname = "CLIP_MT_correspondence_editor_menus"
+    bl_label = ""
+
+    def draw(self, context):
+        self.draw_menus(self.layout, context)
+
+    @staticmethod
+    def draw_menus(layout, context):
+        sc = context.space_data
+        clip = sc.clip
+
+        layout.menu("CLIP_MT_view")
+
+        if clip:
+            layout.menu("CLIP_MT_select")
+            layout.menu("CLIP_MT_clip")
+            layout.menu("CLIP_MT_track")
+            layout.menu("CLIP_MT_reconstruction")
+        else:
+            layout.menu("CLIP_MT_clip")
+
+
 class CLIP_PT_clip_view_panel:
 
     @classmethod
diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index 5f8ebd8..5085803 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -51,6 +51,7 @@ int ED_space_clip_view_clip_poll(struct bContext *C);
 int ED_space_clip_tracking_poll(struct bContext *C);
 int ED_space_clip_maskedit_poll(struct bContext *C);
 int ED_space_clip_maskedit_mask_poll(struct bContext *C);
+int ED_space_clip_correspondence_poll(bContext *C);
 
 void ED_space_clip_get_size(struct SpaceClip *sc, int *width, int *height);
 void ED_space_clip_get_size_fl(struct SpaceClip *sc, float size[2]);
@@ -75,6 +76,7 @@ void ED_clip_mouse_pos(struct SpaceClip *sc, struct ARegion *ar, const int mval[
 
 bool ED_space_clip_check_show_trackedit(struct SpaceClip *sc);
 bool ED_space_clip_check_show_maskedit(struct SpaceClip *sc);
+bool ED_space_clip_check_show_correspondence(struct SpaceClip *sc);
 
 struct MovieClip *ED_space_clip_get_clip(struct SpaceClip *sc);
 void ED_space_clip_set_clip(struct bContext *C, struct bScreen *screen, struct SpaceClip *sc, struct MovieClip *clip);
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index 1ff6562..ca7466b 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -133,6 +133,17 @@ int ED_space_clip_maskedit_mask_poll(bContext *C)
 	return false;
 }
 
+int ED_space_clip_correspondence_poll(bContext *C)
+{
+	SpaceClip *sc = CTX_wm_space_clip(C);
+
+	if (sc && sc->clip) {
+		return ED_space_clip_check_show_correspondence(sc);
+	}
+
+	return false;
+}
+
 /* ******** common editing functions ******** */
 
 void ED_space_clip_get_size(SpaceClip *sc, int *width, int *height)
@@ -549,6 +560,15 @@ bool ED_space_clip_check_show_maskedit(SpaceClip *sc)
 	return false;
 }
 
+bool ED_space_clip_check_show_correspondence(SpaceClip *sc)
+{
+	if (sc) {
+		return sc->mode == SC_MODE_CORRESPONDENCE;
+	}
+
+	return false;
+}
+
 /* ******** clip editing functions ******** */
 
 MovieClip *ED_space_clip_get_clip(SpaceClip *sc)
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index 58c2504..608d637 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -113,8 +113,6 @@ static int add_correspondence_exec(bContext *C, wmOperator *op)
 		return OPERATOR_CANCELLED;
 	}
 
-	// TODO(tianwei): mark these two tracks in a different color when clicked
-
 	// add these correspondence
 	char error_msg[256] = "\0";
 	if (!BKE_tracking_correspondence_add(&(tracking->correspondences), primary_track, witness_track,
@@ -304,7 +302,7 @@ static void solve_multiview_startjob(void *scv, short *stop, short *do_update, f
 	                                            sizeof(smj->stats_message));
 }
 
-// TODO(tianwei): setting status for witness camera is not finished
+// TODO(tianwei): not sure about the scene for witness cameras, check with Sergey
 static void solve_multiview_freejob(void *scv)
 {
 	SolveMultiviewJob *smj = (SolveMultiviewJob *)scv;
@@ -332,7 +330,7 @@ static void solve_multiview_freejob(void *scv)
 		            tracking->reconstruction.error);
 	}
 
-	/* Set currently solved clip as active for scene. */
+	/* Set the currently solved primary clip as active for scene. */
 	if (scene->clip != NULL) {
 		id_us_min(&clip->id);
 	}
@@ -363,7 +361,6 @@ static void solve_multiview_freejob(void *scv)
 
 	BKE_tracking_multiview_reconstruction_context_free(smj->context);
 	MEM_freeN(smj);
-	printf("free multiview reconstruction context\n");
 }
 
 static int solve_multiview_exec(bContext *C, wmOperator *op)




More information about the Bf-blender-cvs mailing list