[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