[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23941] trunk/blender/source/blender/ editors/transform/transform_conversions.c: fix for bug where moving strips that are next to eachother would detect invalid overlaps

Campbell Barton ideasman42 at gmail.com
Mon Oct 19 12:37:50 CEST 2009


Revision: 23941
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23941
Author:   campbellbarton
Date:     2009-10-19 12:37:50 +0200 (Mon, 19 Oct 2009)

Log Message:
-----------
fix for bug where moving strips that are next to eachother would detect invalid overlaps
first update strips, then check overlap in a second loop

Modified Paths:
--------------
    trunk/blender/source/blender/editors/transform/transform_conversions.c

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-19 10:10:05 UTC (rev 23940)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-10-19 10:37:50 UTC (rev 23941)
@@ -2325,8 +2325,8 @@
 {
 	ListBase *seqbasep= seq_give_editing(t->scene, FALSE)->seqbasep; /* Editing null check alredy done */
 	int a, new_frame;
-	TransData *td= t->data;
-	TransData2D *td2d= t->data2d;
+	TransData *td= NULL;
+	TransData2D *td2d= NULL;
 	TransDataSeq *tdsq= NULL;
 	Sequence *seq;
 
@@ -2338,7 +2338,7 @@
 	Sequence *seq_prev= NULL;
 
 	/* flush to 2d vector from internally used 3d vector */
-	for(a=0; a<t->total; a++, td++, td2d++) {
+	for(a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td++, td2d++) {
 
 		tdsq= (TransDataSeq *)td->extra;
 		seq= tdsq->seq;
@@ -2372,16 +2372,30 @@
 				 * children are ALWAYS transformed first
 				 * so we dont need to do this in another loop. */
 				calc_sequence(seq);
+			}
+			else {
+				calc_sequence_disp(seq);
+			}
+		}
+		seq_prev= seq;
+	}
 
+	/* need to do the overlap check in a new loop otherwise adjacent strips
+	 * will not be updated and we'll get false positives */
+	seq_prev= NULL;
+	for(a=0, td= t->data, td2d= t->data2d; a<t->total; a++, td++, td2d++) {
+
+		tdsq= (TransDataSeq *)td->extra;
+		seq= tdsq->seq;
+
+		if (seq != seq_prev) {
+			if(seq->depth==0) {
 				/* test overlap, displayes red outline */
 				seq->flag &= ~SEQ_OVERLAP;
 				if( seq_test_overlap(seqbasep, seq) ) {
 					seq->flag |= SEQ_OVERLAP;
 				}
 			}
-			else {
-				calc_sequence_disp(seq);
-			}
 		}
 		seq_prev= seq;
 	}





More information about the Bf-blender-cvs mailing list