[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59861] branches/soc-2013-motion_track: Modify constraints user interface and usability

Joseph Mansfield sftrabbit at gmail.com
Fri Sep 6 00:59:34 CEST 2013


Revision: 59861
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59861
Author:   sftrabbit
Date:     2013-09-05 22:59:34 +0000 (Thu, 05 Sep 2013)
Log Message:
-----------
Modify constraints user interface and usability

I have recently been preparing focal length constraints for committing to trunk but unfortunately missed BCon2, so it'll have to wait until next time. In the meantime, this commit brings the changes that were made according to code reviews and user feedback into my branch. The interface changes include:

- Constraint value inputs are now in a column.
- User interface button names have been simplified.
- The focal length camera property is not forced to fit inside the focal length constraint range. Instead, the focal length is clamped to the range when solving.
- When the constraint is not enabled, the min and max values will adjust to match the focal length camera property. This gives the user an anchor to help understand the meaning of the values.

Modified Paths:
--------------
    branches/soc-2013-motion_track/extern/libmv/libmv-capi.h
    branches/soc-2013-motion_track/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2013-motion_track/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2013-motion_track/source/blender/blenkernel/intern/movieclip.c
    branches/soc-2013-motion_track/source/blender/blenkernel/intern/tracking.c
    branches/soc-2013-motion_track/source/blender/makesdna/DNA_tracking_types.h
    branches/soc-2013-motion_track/source/blender/makesrna/intern/rna_tracking.c

Modified: branches/soc-2013-motion_track/extern/libmv/libmv-capi.h
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv-capi.h	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/extern/libmv/libmv-capi.h	2013-09-05 22:59:34 UTC (rev 59861)
@@ -85,6 +85,8 @@
 
 #define LIBMV_CONSTRAIN_FOCAL_LENGTH       (1 << 0)
 
+#define LIBMV_CONSTRAIN_FOCAL_LENGTH       (1 << 0)
+
 typedef struct libmv_CameraIntrinsicsOptions {
 	double focal_length;
 	double principal_point_x, principal_point_y;

Modified: branches/soc-2013-motion_track/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2013-motion_track/release/scripts/startup/bl_ui/space_clip.py	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/release/scripts/startup/bl_ui/space_clip.py	2013-09-05 22:59:34 UTC (rev 59861)
@@ -355,14 +355,14 @@
         col = layout.column(align=True)
         col.active = "FOCAL_LENGTH" in settings.refine_intrinsics
         col.prop(settings, "use_focal_length_constraint");
-        row = col.row()
-        row.active = settings.use_focal_length_constraint
+        sub = col.column(align=True)
+        sub.active = settings.use_focal_length_constraint
         if tracking.camera.units == 'MILLIMETERS':
-            row.prop(settings, "focal_length_min_mm")
-            row.prop(settings, "focal_length_max_mm")
+            sub.prop(settings, "focal_length_min", text="Min")
+            sub.prop(settings, "focal_length_max", text="Max")
         else:
-            row.prop(settings, "focal_length_min_px")
-            row.prop(settings, "focal_length_max_px")
+            sub.prop(settings, "focal_length_min_pixels", text="Min")
+            sub.prop(settings, "focal_length_max_pixels", text="Max")
 
 
         col = layout.column(align=True)

Modified: branches/soc-2013-motion_track/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2013-motion_track/source/blender/blenkernel/BKE_tracking.h	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/source/blender/blenkernel/BKE_tracking.h	2013-09-05 22:59:34 UTC (rev 59861)
@@ -160,6 +160,7 @@
                                                                            struct MovieTrackingObject *object);
 
 /* **** Camera **** */
+void BKE_tracking_camera_focal_length_set(struct MovieTracking *tracking, float value);
 void BKE_tracking_camera_shift_get(struct MovieTracking *tracking, int winx, int winy, float *shiftx, float *shifty);
 void BKE_tracking_camera_to_blender(struct MovieTracking *tracking, struct Scene *scene,
                                     struct Camera *camera, int width, int height);

Modified: branches/soc-2013-motion_track/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- branches/soc-2013-motion_track/source/blender/blenkernel/intern/movieclip.c	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/source/blender/blenkernel/intern/movieclip.c	2013-09-05 22:59:34 UTC (rev 59861)
@@ -57,6 +57,8 @@
 #include "DNA_scene_types.h"
 #include "DNA_view3d_types.h"
 
+#include "RNA_access.h"
+
 #include "BLI_utildefines.h"
 
 #include "BLI_blenlib.h"
@@ -657,10 +659,12 @@
 	detect_clip_source(clip);
 
 	movieclip_load_get_szie(clip);
+
 	if (clip->lastsize[0]) {
 		int width = clip->lastsize[0];
-
-		clip->tracking.camera.focal = 24.0f * width / clip->tracking.camera.sensor_width;
+ 
+		float focal = 24.0f * width / clip->tracking.camera.sensor_width;
+		BKE_tracking_camera_focal_length_set(&clip->tracking, focal);
 	}
 
 	movieclip_calc_length(clip);

Modified: branches/soc-2013-motion_track/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2013-motion_track/source/blender/blenkernel/intern/tracking.c	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/source/blender/blenkernel/intern/tracking.c	2013-09-05 22:59:34 UTC (rev 59861)
@@ -213,6 +213,8 @@
 	tracking->settings.dist = 1;
 	tracking->settings.object_distance = 1;
 	tracking->settings.reconstruction_success_threshold = 1e-3f;
+	tracking->settings.focal_length_min = 0.0f;
+	tracking->settings.focal_length_max = 5000.0f;
 
 	tracking->stabilization.scaleinf = 1.0f;
 	tracking->stabilization.locinf = 1.0f;
@@ -1817,7 +1819,21 @@
 	}
 }
 
+void BKE_tracking_camera_focal_length_set(MovieTracking *tracking, float value)
+{
+	MovieTrackingSettings *settings = &tracking->settings;
+	MovieTrackingCamera *camera = &tracking->camera;
 
+	if (!(settings->refine_intrinsics & REFINE_FOCAL_LENGTH) ||
+	    !(settings->constrain_intrinsics & CONSTRAIN_FOCAL_LENGTH))
+	{
+		settings->focal_length_min = value;
+		settings->focal_length_max = value;
+	}
+
+	camera->focal = value;
+}
+
 /* converts principal offset from center to offset of blender's camera */
 void BKE_tracking_camera_shift_get(MovieTracking *tracking, int winx, int winy, float *shiftx, float *shifty)
 {
@@ -3591,28 +3607,32 @@
 {
 	short refine = tracking->settings.refine_intrinsics;
 	short constrain = tracking->settings.constrain_intrinsics;
-	short *libmv_refine = &context->refine_intrinsics;
-	short *libmv_constrain = &context->constrain_intrinsics;
+	short libmv_refine = 0;
+	short libmv_constrain = 0;
 
 	if ((object->flag & TRACKING_OBJECT_CAMERA) == 0) {
-		*libmv_refine = 0;
+		context->refine_intrinsics = 0;
+		context->constrain_intrinsics = 0;
 		return;
 	}
 
 	if (refine & REFINE_FOCAL_LENGTH) {
-		*libmv_refine |= LIBMV_REFINE_FOCAL_LENGTH;
+		libmv_refine |= LIBMV_REFINE_FOCAL_LENGTH;
 		if (constrain & CONSTRAIN_FOCAL_LENGTH)
-			*libmv_constrain |= LIBMV_CONSTRAIN_FOCAL_LENGTH;
+			libmv_constrain |= LIBMV_CONSTRAIN_FOCAL_LENGTH;
 	}
 
 	if (refine & REFINE_PRINCIPAL_POINT)
-		*libmv_refine |= LIBMV_REFINE_PRINCIPAL_POINT;
+		libmv_refine |= LIBMV_REFINE_PRINCIPAL_POINT;
 
 	if (refine & REFINE_RADIAL_DISTORTION_K1)
-		*libmv_refine |= LIBMV_REFINE_RADIAL_DISTORTION_K1;
+		libmv_refine |= LIBMV_REFINE_RADIAL_DISTORTION_K1;
 
 	if (refine & REFINE_RADIAL_DISTORTION_K2)
-		*libmv_refine |= LIBMV_REFINE_RADIAL_DISTORTION_K2;
+		libmv_refine |= LIBMV_REFINE_RADIAL_DISTORTION_K2;
+
+	context->refine_intrinsics = libmv_refine;
+	context->constrain_intrinsics = libmv_constrain;
 }
 
 /* Count tracks which has markers at both of keyframes. */
@@ -3776,6 +3796,8 @@
                                                libmv_CameraIntrinsicsOptions *camera_intrinsics_options)
 {
 	camera_intrinsics_options->focal_length = context->focal_length;
+	CLAMP(camera_intrinsics_options->focal_length,
+	      context->focal_length_min, context->focal_length_max);
 
 	camera_intrinsics_options->principal_point_x = context->principal_point[0];
 	camera_intrinsics_options->principal_point_y = context->principal_point[1];

Modified: branches/soc-2013-motion_track/source/blender/makesdna/DNA_tracking_types.h
===================================================================
--- branches/soc-2013-motion_track/source/blender/makesdna/DNA_tracking_types.h	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/source/blender/makesdna/DNA_tracking_types.h	2013-09-05 22:59:34 UTC (rev 59861)
@@ -211,8 +211,8 @@
 	int reconstruction_flag;
 
 	/* refinement */
-	short refine_intrinsics;                  /* which camera intrinsics to refine */
-	short constrain_intrinsics;               /* which camera intrinsics to constrain */
+	short refine_intrinsics;                  /* camera intrinsics to refine */
+	short constrain_intrinsics;               /* camera intrinsics to constrain */
 	float focal_length_min, focal_length_max; /* minimum and maximum values for focal length refinement in pixels */
 
 	/* ** tool settings ** */
@@ -420,7 +420,7 @@
 	REFINE_FOCAL_LENGTH         = (1 << 0),
 	REFINE_PRINCIPAL_POINT      = (1 << 1),
 	REFINE_RADIAL_DISTORTION_K1 = (1 << 2),
-	REFINE_RADIAL_DISTORTION_K2 = (1 << 4),
+	REFINE_RADIAL_DISTORTION_K2 = (1 << 4)
 };
 
 /* MovieTrackingSettings->constrain_intrinsics */

Modified: branches/soc-2013-motion_track/source/blender/makesrna/intern/rna_tracking.c
===================================================================
--- branches/soc-2013-motion_track/source/blender/makesrna/intern/rna_tracking.c	2013-09-05 22:58:35 UTC (rev 59860)
+++ branches/soc-2013-motion_track/source/blender/makesrna/intern/rna_tracking.c	2013-09-05 22:59:34 UTC (rev 59861)
@@ -55,35 +55,29 @@
 
 #include "WM_api.h"
 
-static void rna_trackingSettings_focal_length_min_px_set(PointerRNA *ptr, float value)
+static void rna_trackingSettings_focal_length_min_pixels_set(PointerRNA *ptr, float value)
 {
 	MovieClip *clip = (MovieClip *)ptr->id.data;
 	MovieTrackingSettings *settings = &clip->tracking.settings;
-	MovieTrackingCamera *camera = &clip->tracking.camera;
 
-	if (value > camera->focal) {
-		settings->focal_length_min = camera->focal; 
-	}
-	else {
-		settings->focal_length_min = value;
-	}
+	if (value > settings->focal_length_max)
+		value = settings->focal_length_max;
+
+	settings->focal_length_min = value;
 }
 
-static void rna_trackingSettings_focal_length_max_px_set(PointerRNA *ptr, float value)
+static void rna_trackingSettings_focal_length_max_pixels_set(PointerRNA *ptr, float value)
 {
 	MovieClip *clip = (MovieClip *)ptr->id.data;
 	MovieTrackingSettings *settings = &clip->tracking.settings;
-	MovieTrackingCamera *camera = &clip->tracking.camera;
 
-	if (value < camera->focal) {
-		settings->focal_length_max = camera->focal; 
-	}
-	else {
-		settings->focal_length_max = value;
-	}
+	if (value < settings->focal_length_min)
+		value = settings->focal_length_min;
+
+	settings->focal_length_max = value;
 }
 
-static float rna_trackingSettings_focal_length_min_mm_get(PointerRNA *ptr)
+static float rna_trackingSettings_focal_length_min_get(PointerRNA *ptr)
 {
 	MovieClip *clip = (MovieClip *)ptr->id.data;
 	MovieTrackingSettings *settings = &clip->tracking.settings;
@@ -96,7 +90,7 @@
 	return value;
 }
 
-static void rna_trackingSettings_focal_length_min_mm_set(PointerRNA *ptr, float value)
+static void rna_trackingSettings_focal_length_min_set(PointerRNA *ptr, float value)
 {
 	MovieClip *clip = (MovieClip *)ptr->id.data;
 	MovieTrackingCamera *camera = &clip->tracking.camera;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list