[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49220] trunk/blender/source/blender: mask transform now works in the image space

Campbell Barton ideasman42 at gmail.com
Wed Jul 25 21:36:59 CEST 2012


Revision: 49220
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49220
Author:   campbellbarton
Date:     2012-07-25 19:36:59 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
mask transform now works in the image space

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mask/mask_edit.c
    trunk/blender/source/blender/editors/space_clip/clip_editor.c
    trunk/blender/source/blender/editors/space_image/image_edit.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/editors/transform/transform_snap.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h

Modified: trunk/blender/source/blender/editors/mask/mask_edit.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_edit.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/mask/mask_edit.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -263,7 +263,7 @@
 			case SPACE_IMAGE:
 			{
 				SpaceImage *sima = sa->spacedata.first;
-				ED_space_image_get_uv_aspect(sima, aspx, aspy);
+				ED_space_image_get_aspect(sima, aspx, aspy);
 				break;
 			}
 			default:
@@ -312,7 +312,7 @@
 
 				ED_space_image_get_size(sima, &width, &height);
 				ED_space_image_get_zoom(sima, ar, &zoomx, &zoomy);
-				ED_space_image_get_uv_aspect(sima, &aspx, &aspy);
+				ED_space_image_get_aspect(sima, &aspx, &aspy);
 
 				*scalex = ((float)width * aspx) * zoomx;
 				*scaley = ((float)height * aspy) * zoomy;

Modified: trunk/blender/source/blender/editors/space_clip/clip_editor.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/clip_editor.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/space_clip/clip_editor.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -128,11 +128,11 @@
 {
 	SpaceClip *sc = CTX_wm_space_clip(C);
 
-	if (!sc->clip) {
-		*width = *height = 0;
+	if (sc->clip) {
+		BKE_movieclip_get_size(sc->clip, &sc->user, width, height);
 	}
 	else {
-		BKE_movieclip_get_size(sc->clip, &sc->user, width, height);
+		*width = *height = IMG_SIZE_FALLBACK;
 	}
 }
 

Modified: trunk/blender/source/blender/editors/space_image/image_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_edit.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/space_image/image_edit.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -149,8 +149,8 @@
 		*height = ibuf->y;
 	}
 	else {
-		*width = 256;
-		*height = 256;
+		*width  = IMG_SIZE_FALLBACK;
+		*height = IMG_SIZE_FALLBACK;
 	}
 
 	if (ima)
@@ -183,8 +183,8 @@
 	/* I know a bit weak... but preview uses not actual image size */
 	// XXX else if (image_preview_active(sima, width, height));
 	else {
-		*width = 256;
-		*height = 256;
+		*width  = IMG_SIZE_FALLBACK;
+		*height = IMG_SIZE_FALLBACK;
 	}
 
 	ED_space_image_release_buffer(sima, lock);

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -120,18 +120,46 @@
 	calculateCenter2D(t);
 }
 
-static void convertViewVec2D(View2D *v2d, float vec[3], int dx, int dy)
+static void convertViewVec2D(View2D *v2d, float r_vec[3], int dx, int dy)
 {
 	float divx, divy;
 	
 	divx = v2d->mask.xmax - v2d->mask.xmin;
 	divy = v2d->mask.ymax - v2d->mask.ymin;
 
-	vec[0] = (v2d->cur.xmax - v2d->cur.xmin) * dx / divx;
-	vec[1] = (v2d->cur.ymax - v2d->cur.ymin) * dy / divy;
-	vec[2] = 0.0f;
+	r_vec[0] = (v2d->cur.xmax - v2d->cur.xmin) * dx / divx;
+	r_vec[1] = (v2d->cur.ymax - v2d->cur.ymin) * dy / divy;
+	r_vec[2] = 0.0f;
 }
 
+static void convertViewVec2D_mask(View2D *v2d, float r_vec[3], int dx, int dy)
+{
+	float divx, divy;
+	float mulx, muly;
+
+	divx = v2d->mask.xmax - v2d->mask.xmin;
+	divy = v2d->mask.ymax - v2d->mask.ymin;
+
+	mulx = (v2d->cur.xmax - v2d->cur.xmin);
+	muly = (v2d->cur.ymax - v2d->cur.ymin);
+
+	/* difference with convertViewVec2D */
+	/* clamp w/h, mask only */
+	if (mulx / divx < muly / divy) {
+		divy = divx;
+		muly = mulx;
+	}
+	else {
+		divx = divy;
+		mulx = muly;
+	}
+	/* end difference */
+
+	r_vec[0] = mulx * dx / divx;
+	r_vec[1] = muly * dy / divy;
+	r_vec[2] = 0.0f;
+}
+
 void convertViewVec(TransInfo *t, float r_vec[3], int dx, int dy)
 {
 	if ((t->spacetype == SPACE_VIEW3D) && (t->ar->regiontype == RGN_TYPE_WINDOW)) {
@@ -143,11 +171,17 @@
 	else if (t->spacetype == SPACE_IMAGE) {
 		float aspx, aspy;
 
-		convertViewVec2D(t->view, r_vec, dx, dy);
+		if (t->options & CTX_MASK) {
 
-		/* MASKTODO - see clip clamp w/h */
+			convertViewVec2D_mask(t->view, r_vec, dx, dy);
 
-		ED_space_image_get_uv_aspect(t->sa->spacedata.first, &aspx, &aspy);
+			ED_space_image_get_aspect(t->sa->spacedata.first, &aspx, &aspy);
+		}
+		else {
+			convertViewVec2D(t->view, r_vec, dx, dy);
+			ED_space_image_get_uv_aspect(t->sa->spacedata.first, &aspx, &aspy);
+		}
+
 		r_vec[0] *= aspx;
 		r_vec[1] *= aspy;
 	}
@@ -158,33 +192,15 @@
 		convertViewVec2D(&t->ar->v2d, r_vec, dx, dy);
 	}
 	else if (t->spacetype == SPACE_CLIP) {
-		View2D *v2d = t->view;
-		float divx, divy;
-		float mulx, muly;
-		float aspx = 1.0f, aspy = 1.0f;
+		float aspx, aspy;
 
-		divx = v2d->mask.xmax - v2d->mask.xmin;
-		divy = v2d->mask.ymax - v2d->mask.ymin;
-
-		mulx = (v2d->cur.xmax - v2d->cur.xmin);
-		muly = (v2d->cur.ymax - v2d->cur.ymin);
-
 		if (t->options & CTX_MASK) {
-			/* clamp w/h, mask only */
-			if (mulx / divx < muly / divy) {
-				divy = divx;
-				muly = mulx;
-			}
-			else {
-				divx = divy;
-				mulx = muly;
-			}
+			convertViewVec2D_mask(t->view, r_vec, dx, dy);
 		}
+		else {
+			convertViewVec2D(t->view, r_vec, dx, dy);
+		}
 
-		r_vec[0] = mulx * (dx) / divx;
-		r_vec[1] = muly * (dy) / divy;
-		r_vec[2] = 0.0f;
-
 		if (t->options & CTX_MOVIECLIP) {
 			ED_space_clip_get_aspect_dimension_aware(t->sa->spacedata.first, &aspx, &aspy);
 		}

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -4964,7 +4964,37 @@
 	}
 }
 
+static void special_aftertrans_update__mask(bContext *C, TransInfo *t)
+{
+	Mask *mask;
 
+	if (t->spacetype == SPACE_CLIP) {
+		SpaceClip *sc = t->sa->spacedata.first;
+		mask = ED_space_clip_get_mask(sc);
+	}
+	else if (t->spacetype == SPACE_IMAGE) {
+		SpaceImage *sima = t->sa->spacedata.first;
+		mask = ED_space_image_get_mask(sima);
+	}
+	else {
+		BLI_assert(0);
+	}
+
+	if (t->scene->nodetree) {
+		/* tracks can be used for stabilization nodes,
+		 * flush update for such nodes */
+		nodeUpdateID(t->scene->nodetree, &mask->id);
+		WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL);
+	}
+
+	/* TODO - dont key all masks... */
+	if (IS_AUTOKEY_ON(t->scene)) {
+		Scene *scene = t->scene;
+
+		ED_mask_layer_shape_auto_key_select(mask, CFRA);
+	}
+}
+
 /* inserting keys, pointcache, redraw events... */
 /* 
  * note: sequencer freeing has its own function now because of a conflict with transform's order of freeing (campbell)
@@ -5033,7 +5063,9 @@
 		}
 	}
 	else if (t->spacetype == SPACE_IMAGE) {
-		/* prevent this passing through to final 'else' which assumes objects */
+		if (t->options & CTX_MASK) {
+			special_aftertrans_update__mask(C, t);
+		}
 	}
 	else if (t->spacetype == SPACE_NODE) {
 		SpaceNode *snode = (SpaceNode *)t->sa->spacedata.first;
@@ -5059,22 +5091,7 @@
 			}
 		}
 		else if (t->options & CTX_MASK) {
-			SpaceClip *sc = t->sa->spacedata.first;
-			Mask *mask = ED_space_clip_get_mask(sc);
-
-			if (t->scene->nodetree) {
-				/* tracks can be used for stabilization nodes,
-				 * flush update for such nodes */
-				nodeUpdateID(t->scene->nodetree, &mask->id);
-				WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL);
-			}
-
-			/* TODO - dont key all masks... */
-			if (IS_AUTOKEY_ON(t->scene)) {
-				Scene *scene = t->scene;
-
-				ED_mask_layer_shape_auto_key_select(mask, CFRA);
-			}
+			special_aftertrans_update__mask(C, t);
 		}
 	}
 	else if (t->spacetype == SPACE_ACTION) {
@@ -6259,20 +6276,19 @@
 
 void flushTransMasking(TransInfo *t)
 {
-	SpaceClip *sc = t->sa->spacedata.first;
 	TransData2D *td;
 	TransDataMasking *tdm;
 	int a;
-	float aspx, aspy, invx, invy;
+	float asp[2], inv[2];
 
-	ED_space_clip_get_aspect(sc, &aspx, &aspy);
-	invx = 1.0f / aspx;
-	invy = 1.0f / aspy;
+	ED_mask_aspect(t->context, &asp[0], &asp[1]);
+	inv[0] = 1.0f / asp[0];
+	inv[1] = 1.0f / asp[1];
 
 	/* flush to 2d vector from internally used 3d vector */
 	for (a = 0, td = t->data2d, tdm = t->customData; a < t->total; a++, td++, tdm++) {
-		td->loc2d[0] = td->loc[0] * invx;
-		td->loc2d[1] = td->loc[1] * invy;
+		td->loc2d[0] = td->loc[0] * inv[0];
+		td->loc2d[1] = td->loc[1] * inv[1];
 
 		if (tdm->is_handle)
 			BKE_mask_point_set_handle(tdm->point, td->loc2d, t->flag & T_ALT_TRANSFORM, tdm->orig_handle, tdm->vec);

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -607,6 +607,15 @@
 	}
 }
 
+static void recalcData_mask_common(TransInfo *t)
+{
+	Mask *mask = CTX_data_edit_mask(t->context);
+
+	flushTransMasking(t);
+
+	DAG_id_tag_update(&mask->id, 0);
+}
+
 /* helper for recalcData() - for Image Editor transforms */
 static void recalcData_image(TransInfo *t)
 {
@@ -619,6 +628,9 @@
 		
 		DAG_id_tag_update(t->obedit->data, 0);
 	}
+	else if (t->options & CTX_MASK) {
+		recalcData_mask_common(t);
+	}
 }
 
 /* helper for recalcData() - for Movie Clip transforms */
@@ -662,12 +674,8 @@
 
 		DAG_id_tag_update(&clip->id, 0);
 	}
-	else if (ED_space_clip_check_show_maskedit(sc)) {
-		Mask *mask = ED_space_clip_get_mask(sc);
-
-		flushTransMasking(t);
-
-		DAG_id_tag_update(&mask->id, 0);
+	else if (t->options & CTX_MASK) {
+		recalcData_mask_common(t);
 	}
 }
 
@@ -908,6 +916,10 @@
 	else if (t->spacetype == SPACE_CLIP) {
 		recalcData_spaceclip(t);
 	}
+
+	if (t->options & CTX_MASK) {
+
+	}
 }
 
 void drawLine(TransInfo *t, float *center, float *dir, char axis, short options)

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2012-07-25 18:42:52 UTC (rev 49219)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2012-07-25 19:36:59 UTC (rev 49220)
@@ -208,8 +208,8 @@
 			
 			ED_space_image_get_aspect(t->sa->spacedata.first, &xuser_aspx, &yuser_asp);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list