[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47453] trunk/blender: mask editing

Campbell Barton ideasman42 at gmail.com
Tue Jun 5 11:37:46 CEST 2012


Revision: 47453
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47453
Author:   campbellbarton
Date:     2012-06-05 09:37:44 +0000 (Tue, 05 Jun 2012)
Log Message:
-----------
mask editing
- clear feather weights (alt+s)
- fix for glitch where placing the feather would jitter.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_clip.py
    trunk/blender/source/blender/blenkernel/BKE_mask.h
    trunk/blender/source/blender/blenkernel/intern/mask.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/mask/mask_add.c
    trunk/blender/source/blender/editors/mask/mask_edit.c
    trunk/blender/source/blender/editors/mask/mask_intern.h
    trunk/blender/source/blender/editors/mask/mask_ops.c
    trunk/blender/source/blender/makesrna/intern/rna_mask.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/release/scripts/startup/bl_ui/space_clip.py	2012-06-05 09:37:44 UTC (rev 47453)
@@ -63,9 +63,11 @@
                     toolsettings = context.tool_settings
 
                     row = layout.row(align=True)
-                    row.prop(toolsettings, "use_proportional_edit_mask", text="", icon_only=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)
+                        row.prop(toolsettings, "proportional_edit_falloff",
+                                 text="", icon_only=True)
             elif sc.view == 'GRAPH':
                 row = layout.row(align=True)
 
@@ -289,7 +291,8 @@
         col.prop(settings, "keyframe_b")
 
         col = layout.column(align=True)
-        col.active = tracking_object.is_camera and not settings.use_tripod_solver
+        col.active = (tracking_object.is_camera and
+                      not settings.use_tripod_solver)
         col.label(text="Refine:")
         col.prop(settings, "refine_intrinsics", text="")
 
@@ -723,13 +726,16 @@
                 clip = parent.id
                 tracking = clip.tracking
 
-                col.prop_search(parent, "parent", tracking, "objects", icon='OBJECT_DATA', text="Object:")
+                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:")
+                    object = 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:")
+                    col.prop_search(parent, "sub_parent", tracking,
+                                    "tracks", icon='ANIM_DATA', text="Track:")
 
 
 class CLIP_PT_display(CLIP_PT_clip_view_panel, Panel):
@@ -1210,6 +1216,7 @@
         layout.separator()
         layout.operator("mask.cyclic_toggle")
         layout.operator("mask.switch_direction")
+        layout.operator("mask.feather_weight_clear")  # TODO, better place?
 
         layout.separator()
         layout.operator("mask.parent_clear")

Modified: trunk/blender/source/blender/blenkernel/BKE_mask.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/blenkernel/BKE_mask.h	2012-06-05 09:37:44 UTC (rev 47453)
@@ -69,8 +69,15 @@
 
 void BKE_mask_point_direction_switch(struct MaskSplinePoint *point);
 void BKE_mask_spline_direction_switch(struct MaskLayer *masklay, struct MaskSpline *spline);
-float BKE_mask_spline_project_co(struct MaskSpline *spline, struct MaskSplinePoint *point, float start_u, const float co[2]);
 
+typedef enum {
+	MASK_PROJ_NEG = -1,
+	MASK_PROJ_ANY = 0,
+	MASK_PROJ_POS = 1
+} eMaskSign;
+float BKE_mask_spline_project_co(struct MaskSpline *spline, struct MaskSplinePoint *point,
+                                 float start_u, const float co[2], const eMaskSign sign);
+
 /* point */
 int BKE_mask_point_has_handle(struct MaskSplinePoint *point);
 void BKE_mask_point_handle(struct MaskSplinePoint *point, float handle[2]);

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-06-05 09:37:44 UTC (rev 47453)
@@ -410,8 +410,6 @@
 	}
 }
 
-//typedef (float)[MASK_OBJECT_SHAPE_ELEM_SIZE] MaskLayerShapeElem;
-
 typedef struct MaskLayerShapeElem {
 	float value[MASK_OBJECT_SHAPE_ELEM_SIZE];
 } MaskLayerShapeElem;
@@ -467,7 +465,8 @@
 }
 
 
-float BKE_mask_spline_project_co(MaskSpline *spline, MaskSplinePoint *point, float start_u, const float co[2])
+float BKE_mask_spline_project_co(MaskSpline *spline, MaskSplinePoint *point,
+                                 float start_u, const float co[2], const eMaskSign sign)
 {
 	const float proj_eps         = 1e-3;
 	const float proj_eps_squared = proj_eps * proj_eps;
@@ -475,6 +474,8 @@
 	float u = -1.0f, du = 1.0f / N, u1 = start_u, u2 = start_u;
 	float ang = -1.0f;
 
+	BLI_assert(ABS(sign) <= 1); /* (-1, 0, 1) */
+
 	while (u1 > 0.0f || u2 < 1.0f) {
 		float n1[2], n2[2], co1[2], co2[2];
 		float v1[2], v2[2];
@@ -485,20 +486,26 @@
 			BKE_mask_point_normal(spline, point, u1, n1);
 			sub_v2_v2v2(v1, co, co1);
 
-			if (len_squared_v2(v1) > proj_eps_squared) {
-				ang1 = angle_v2v2(v1, n1);
-				if (ang1 > M_PI / 2.0f)
-					ang1 = M_PI  - ang1;
+			if ((sign == MASK_PROJ_ANY) ||
+			    ((sign == MASK_PROJ_NEG) && (dot_v2v2(v1, n1) <= 0.0f)) ||
+			    ((sign == MASK_PROJ_POS) && (dot_v2v2(v1, n1) >= 0.0f)))
+			{
 
-				if (ang < 0.0f || ang1 < ang) {
-					ang = ang1;
+				if (len_squared_v2(v1) > proj_eps_squared) {
+					ang1 = angle_v2v2(v1, n1);
+					if (ang1 > M_PI / 2.0f)
+						ang1 = M_PI  - ang1;
+
+					if (ang < 0.0f || ang1 < ang) {
+						ang = ang1;
+						u = u1;
+					}
+				}
+				else {
 					u = u1;
+					break;
 				}
 			}
-			else {
-				u = u1;
-				break;
-			}
 		}
 
 		if (u2 <= 1.0f) {
@@ -506,20 +513,26 @@
 			BKE_mask_point_normal(spline, point, u2, n2);
 			sub_v2_v2v2(v2, co, co2);
 
-			if (len_squared_v2(v2) > proj_eps_squared) {
-				ang2 = angle_v2v2(v2, n2);
-				if (ang2 > M_PI / 2.0f)
-					ang2 = M_PI  - ang2;
+			if ((sign == MASK_PROJ_ANY) ||
+			    ((sign == MASK_PROJ_NEG) && (dot_v2v2(v2, n2) <= 0.0f)) ||
+			    ((sign == MASK_PROJ_POS) && (dot_v2v2(v2, n2) >= 0.0f)))
+			{
 
-				if (ang2 < ang) {
-					ang = ang2;
+				if (len_squared_v2(v2) > proj_eps_squared) {
+					ang2 = angle_v2v2(v2, n2);
+					if (ang2 > M_PI / 2.0f)
+						ang2 = M_PI  - ang2;
+
+					if (ang2 < ang) {
+						ang = ang2;
+						u = u2;
+					}
+				}
+				else {
 					u = u2;
+					break;
 				}
 			}
-			else {
-				u = u2;
-				break;
-			}
 		}
 
 		u1 -= du;

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2012-06-05 09:37:44 UTC (rev 47453)
@@ -2242,7 +2242,7 @@
 		}
 	}
 	else if (itemptr->type == &RNA_MaskLayer) {
-		split = uiLayoutSplit(sub, 0.66f, 0);
+		split = uiLayoutSplit(sub, 0.5f, 0);
 
 		uiItemL(split, name, icon);
 

Modified: trunk/blender/source/blender/editors/mask/mask_add.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_add.c	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/editors/mask/mask_add.c	2012-06-05 09:37:44 UTC (rev 47453)
@@ -150,7 +150,7 @@
 			*point_r = point;
 
 		if (u_r) {
-			u = BKE_mask_spline_project_co(point_spline, point, u, normal_co);
+			u = BKE_mask_spline_project_co(point_spline, point, u, normal_co, MASK_PROJ_ANY);
 
 			*u_r = u;
 		}

Modified: trunk/blender/source/blender/editors/mask/mask_edit.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_edit.c	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/editors/mask/mask_edit.c	2012-06-05 09:37:44 UTC (rev 47453)
@@ -212,6 +212,9 @@
 	WM_operatortype_append(MASK_OT_hide_view_clear);
 	WM_operatortype_append(MASK_OT_hide_view_set);
 
+	/* feather */
+	WM_operatortype_append(MASK_OT_feather_weight_clear);
+
 	/* shape */
 	WM_operatortype_append(MASK_OT_slide_point);
 	WM_operatortype_append(MASK_OT_cyclic_toggle);
@@ -293,6 +296,7 @@
 	WM_keymap_add_item(keymap, "MASK_OT_cyclic_toggle", CKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "MASK_OT_slide_point", LEFTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "MASK_OT_handle_type_set", VKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "MASK_OT_feather_weight_clear", SKEY, KM_PRESS, KM_ALT, 0);
 
 	/* relationships */
 	WM_keymap_add_item(keymap, "MASK_OT_parent_set", PKEY, KM_PRESS, KM_CTRL, 0);

Modified: trunk/blender/source/blender/editors/mask/mask_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_intern.h	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/editors/mask/mask_intern.h	2012-06-05 09:37:44 UTC (rev 47453)
@@ -54,6 +54,7 @@
 
 void MASK_OT_hide_view_clear(struct wmOperatorType *ot);
 void MASK_OT_hide_view_set(struct wmOperatorType *ot);
+void MASK_OT_feather_weight_clear(struct wmOperatorType *ot);
 void MASK_OT_switch_direction(struct wmOperatorType *ot);
 
 void MASK_OT_handle_type_set(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/mask/mask_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_ops.c	2012-06-05 09:29:47 UTC (rev 47452)
+++ trunk/blender/source/blender/editors/mask/mask_ops.c	2012-06-05 09:37:44 UTC (rev 47453)
@@ -355,10 +355,12 @@
 
 /******************** slide *********************/
 
-#define SLIDE_ACTION_NONE       0
-#define SLIDE_ACTION_POINT      1
-#define SLIDE_ACTION_HANDLE     2
-#define SLIDE_ACTION_FEATHER    3
+enum {
+	SLIDE_ACTION_NONE    = 0,
+	SLIDE_ACTION_POINT   = 1,
+	SLIDE_ACTION_HANDLE  = 2,
+	SLIDE_ACTION_FEATHER = 3
+};
 
 typedef struct SlidePointData {
 	int action;
@@ -648,8 +650,30 @@
 				add_v2_v2v2(offco, data->feather, dco);
 
 				if (data->uw) {
-					float u = BKE_mask_spline_project_co(data->spline, data->point, data->uw->u, offco);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list