[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49213] trunk/blender/source/blender/ editors: fix some crashes with mask/image transfor, a few more areas working now.

Campbell Barton ideasman42 at gmail.com
Wed Jul 25 18:03:10 CEST 2012


Revision: 49213
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49213
Author:   campbellbarton
Date:     2012-07-25 16:03:08 +0000 (Wed, 25 Jul 2012)
Log Message:
-----------
fix some crashes with mask/image transfor, a few more areas working now.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mask/mask_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

Modified: trunk/blender/source/blender/editors/mask/mask_edit.c
===================================================================
--- trunk/blender/source/blender/editors/mask/mask_edit.c	2012-07-25 15:07:47 UTC (rev 49212)
+++ trunk/blender/source/blender/editors/mask/mask_edit.c	2012-07-25 16:03:08 UTC (rev 49213)
@@ -48,6 +48,8 @@
 #include "ED_sequencer.h"
 #include "ED_transform.h"
 
+#include "UI_view2d.h"
+
 #include "RNA_access.h"
 
 #include "mask_intern.h"  /* own include */
@@ -101,11 +103,17 @@
 				break;
 			}
 			case SPACE_SEQ:
-				zero_v2(co); /* MASKTODO */
+			{
+				ARegion *ar = CTX_wm_region(C);
+				UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]);
 				break;
+			}
 			case SPACE_IMAGE:
-				zero_v2(co); /* MASKTODO */
+			{
+				ARegion *ar = CTX_wm_region(C);
+				UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]);
 				break;
+			}
 			default:
 				/* possible other spaces from which mask editing is available */
 				BLI_assert(0);
@@ -139,8 +147,11 @@
 				zero_v2(co); /* MASKTODO */
 				break;
 			case SPACE_IMAGE:
+			{
+				//SpaceImage *sima = sa->spacedata.first;
 				zero_v2(co); /* MASKTODO */
 				break;
+			}
 			default:
 				/* possible other spaces from which mask editing is available */
 				BLI_assert(0);
@@ -251,8 +262,8 @@
 			}
 			case SPACE_IMAGE:
 			{
-				// SpaceImage *sima = sa->spacedata.first;
-				*aspx = *aspy = 1.0f;  /* MASKTODO - image aspect? */
+				SpaceImage *sima = sa->spacedata.first;
+				ED_space_image_uv_aspect(sima, aspx, aspy);
 				break;
 			}
 			default:

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2012-07-25 15:07:47 UTC (rev 49212)
+++ trunk/blender/source/blender/editors/transform/transform.c	2012-07-25 16:03:08 UTC (rev 49213)
@@ -145,6 +145,8 @@
 
 		convertViewVec2D(t->view, r_vec, dx, dy);
 
+		/* MASKTODO - see clip clamp w/h */
+
 		ED_space_image_uv_aspect(t->sa->spacedata.first, &aspx, &aspy);
 		r_vec[0] *= aspx;
 		r_vec[1] *= aspy;
@@ -406,10 +408,17 @@
 		WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, NULL);
 	}
 	else if (t->spacetype == SPACE_IMAGE) {
-		// XXX how to deal with lock?
-		SpaceImage *sima = (SpaceImage *)t->sa->spacedata.first;
-		if (sima->lock) WM_event_add_notifier(C, NC_GEOM | ND_DATA, t->obedit->data);
-		else ED_area_tag_redraw(t->sa);
+		if (t->options & CTX_MASK) {
+			Mask *mask = CTX_data_edit_mask(C);
+
+			WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask);
+		}
+		else {
+			// XXX how to deal with lock?
+			SpaceImage *sima = (SpaceImage *)t->sa->spacedata.first;
+			if (sima->lock) WM_event_add_notifier(C, NC_GEOM | ND_DATA, t->obedit->data);
+			else ED_area_tag_redraw(t->sa);
+		}
 	}
 	else if (t->spacetype == SPACE_CLIP) {
 		SpaceClip *sc = (SpaceClip *)t->sa->spacedata.first;
@@ -423,7 +432,7 @@
 			WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
 		}
 		else if (ED_space_clip_check_show_maskedit(sc)) {
-			Mask *mask = ED_space_clip_get_mask(sc);
+			Mask *mask = CTX_data_edit_mask(C);
 
 			WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask);
 		}

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-07-25 15:07:47 UTC (rev 49212)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2012-07-25 16:03:08 UTC (rev 49213)
@@ -5009,7 +5009,8 @@
 			}
 		}
 	}
-	
+
+
 	if (t->spacetype == SPACE_SEQ) {
 		/* freeSeqData in transform_conversions.c does this
 		 * keep here so the else at the end wont run... */
@@ -5030,8 +5031,10 @@
 				ED_markers_post_apply_transform(&t->scene->markers, t->scene, TFM_TIME_EXTEND, t->values[0], t->frame_side);
 			}
 		}
-
 	}
+	else if (t->spacetype == SPACE_IMAGE) {
+		/* prevent this passing through to final 'else' which assumes objects */
+	}
 	else if (t->spacetype == SPACE_NODE) {
 		SpaceNode *snode = (SpaceNode *)t->sa->spacedata.first;
 		if (canceled == 0) {
@@ -5356,6 +5359,8 @@
 	else { /* Objects */
 		int i, recalcObPaths = 0;
 
+		BLI_assert(t->flag & T_OBJECT);
+
 		for (i = 0; i < t->total; i++) {
 			TransData *td = t->data + i;
 			ListBase pidlist;
@@ -6069,19 +6074,17 @@
 	MaskSplinePoint *point;
 } TransDataMasking;
 
-static void MaskPointToTransData(SpaceClip *sc, MaskSplinePoint *point,
-                                 TransData *td, TransData2D *td2d, TransDataMasking *tdm, int propmode)
+static void MaskPointToTransData(MaskSplinePoint *point,
+                                 TransData *td, TransData2D *td2d, TransDataMasking *tdm,
+                                 const int propmode, const float asp[2])
 {
 	BezTriple *bezt = &point->bezt;
-	float aspx, aspy;
 	short is_sel_point = MASKPOINT_ISSEL_KNOT(point);
 	short is_sel_any = MASKPOINT_ISSEL_ANY(point);
 
 	tdm->point = point;
 	copy_m3_m3(tdm->vec, bezt->vec);
 
-	ED_space_clip_get_aspect(sc, &aspx, &aspy);
-
 	if (propmode || is_sel_point) {
 		int i;
 		for (i = 0; i < 3; i++) {
@@ -6089,8 +6092,8 @@
 			 * proportional editing to be consistent with the stretched CV coords
 			 * that are displayed. this also means that for display and numinput,
 			 * and when the the CV coords are flushed, these are converted each time */
-			td2d->loc[0] = bezt->vec[i][0] * aspx;
-			td2d->loc[1] = bezt->vec[i][1] * aspy;
+			td2d->loc[0] = bezt->vec[i][0] * asp[0];
+			td2d->loc[1] = bezt->vec[i][1] * asp[1];
 			td2d->loc[2] = 0.0f;
 			td2d->loc2d = bezt->vec[i];
 
@@ -6132,8 +6135,8 @@
 
 		copy_v2_v2(tdm->orig_handle, tdm->handle);
 
-		td2d->loc[0] = tdm->handle[0] * aspx;
-		td2d->loc[1] = tdm->handle[1] * aspy;
+		td2d->loc[0] = tdm->handle[0] * asp[0];
+		td2d->loc[1] = tdm->handle[1] * asp[1];
 		td2d->loc[2] = 0.0f;
 		td2d->loc2d = tdm->handle;
 
@@ -6164,7 +6167,6 @@
 
 static void createTransMaskingData(bContext *C, TransInfo *t)
 {
-	SpaceClip *sc = CTX_wm_space_clip(C);
 	Mask *mask = CTX_data_edit_mask(C);
 	MaskLayer *masklay;
 	TransData *td = NULL;
@@ -6172,6 +6174,7 @@
 	TransDataMasking *tdm = NULL;
 	int count = 0, countsel = 0;
 	int propmode = t->flag & T_PROP_EDIT;
+	float asp[2];
 
 	t->total = 0;
 
@@ -6206,8 +6209,12 @@
 	}
 
 	/* note: in prop mode we need at least 1 selected */
-	if (countsel == 0) return;
+	if (countsel == 0) {
+		return;
+	}
 
+	ED_mask_aspect(C, &asp[0], &asp[1]);
+
 	t->total = (propmode) ? count : countsel;
 	td = t->data = MEM_callocN(t->total * sizeof(TransData), "TransObData(Mask Editing)");
 	/* for each 2d uv coord a 3d vector is allocated, so that they can be
@@ -6232,7 +6239,7 @@
 				MaskSplinePoint *point = &spline->points[i];
 
 				if (propmode || MASKPOINT_ISSEL_ANY(point)) {
-					MaskPointToTransData(sc, point, td, td2d, tdm, propmode);
+					MaskPointToTransData(point, td, td2d, tdm, propmode, asp);
 
 					if (propmode || MASKPOINT_ISSEL_KNOT(point)) {
 						td += 3;
@@ -6297,12 +6304,24 @@
 	}
 	else if (t->spacetype == SPACE_IMAGE) {
 		t->flag |= T_POINTS | T_2D_EDIT;
-		createTransUVs(C, t);
-		if (t->data && (t->flag & T_PROP_EDIT)) {
-			sort_trans_data(t); // makes selected become first in array
-			set_prop_dist(t, 1);
-			sort_trans_data_dist(t);
+		if (t->options & CTX_MASK) {
+			/* copied from below */
+			createTransMaskingData(C, t);
+
+			if (t->data && (t->flag & T_PROP_EDIT)) {
+				sort_trans_data(t); // makes selected become first in array
+				set_prop_dist(t, TRUE);
+				sort_trans_data_dist(t);
+			}
 		}
+		else {
+			createTransUVs(C, t);
+			if (t->data && (t->flag & T_PROP_EDIT)) {
+				sort_trans_data(t); // makes selected become first in array
+				set_prop_dist(t, 1);
+				sort_trans_data_dist(t);
+			}
+		}
 	}
 	else if (t->spacetype == SPACE_ACTION) {
 		t->flag |= T_POINTS | T_2D_EDIT;
@@ -6342,6 +6361,7 @@
 		if (t->options & CTX_MOVIECLIP)
 			createTransTrackingData(C, t);
 		else if (t->options & CTX_MASK) {
+			/* copied from above */
 			createTransMaskingData(C, t);
 
 			if (t->data && (t->flag & T_PROP_EDIT)) {

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2012-07-25 15:07:47 UTC (rev 49212)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2012-07-25 16:03:08 UTC (rev 49213)
@@ -1099,6 +1099,16 @@
 		// XXX for now, get View2D from the active region
 		t->view = &ar->v2d;
 		t->around = sima->around;
+
+		if (t->obedit) {
+			/* UV transform */
+		}
+		else if (sima->mode == SI_MODE_MASK) {
+			t->options |= CTX_MASK;
+		}
+		else {
+			BLI_assert(0);
+		}
 	}
 	else if (t->spacetype == SPACE_NODE) {
 		// XXX for now, get View2D from the active region
@@ -1280,9 +1290,14 @@
 	}
 	
 	if (t->spacetype == SPACE_IMAGE) {
-		SpaceImage *sima = t->sa->spacedata.first;
-		if (sima->flag & SI_LIVE_UNWRAP)
-			ED_uvedit_live_unwrap_end(t->state == TRANS_CANCEL);
+		if (t->options & CTX_MASK) {
+			/* pass */
+		}
+		else {
+			SpaceImage *sima = t->sa->spacedata.first;
+			if (sima->flag & SI_LIVE_UNWRAP)
+				ED_uvedit_live_unwrap_end(t->state == TRANS_CANCEL);
+		}
 	}
 	else if (t->spacetype == SPACE_VIEW3D) {
 		View3D *v3d = t->sa->spacedata.first;




More information about the Bf-blender-cvs mailing list