[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34586] trunk/blender/source/blender/ editors/screen: Bugfix #25874

Ton Roosendaal ton at blender.org
Mon Jan 31 18:28:04 CET 2011


Revision: 34586
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34586
Author:   ton
Date:     2011-01-31 17:28:03 +0000 (Mon, 31 Jan 2011)
Log Message:
-----------
Bugfix #25874

Area split error: if the first split position was exactly aligned
with another 'edge' it merged the edges, causing the subdivision
layout to go haywire. Only happens in rare occasions, good find
this report :)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/screen/screen_intern.h
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2011-01-31 16:34:56 UTC (rev 34585)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2011-01-31 17:28:03 UTC (rev 34586)
@@ -346,7 +346,7 @@
 	}
 }
 
-ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac)
+ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge)
 {
 	ScrArea *newa=NULL;
 	ScrVert *sv1, *sv2;
@@ -400,7 +400,8 @@
 	}
 	
 	/* remove double vertices en edges */
-	removedouble_scrverts(sc);
+	if(merge)
+		removedouble_scrverts(sc);
 	removedouble_scredges(sc);
 	removenotused_scredges(sc);
 	
@@ -1611,7 +1612,7 @@
 		oldscreen->animtimer= NULL;
 
 		/* returns the top small area */
-		newa= area_split(sc, (ScrArea *)sc->areabase.first, 'h', 0.99f);
+		newa= area_split(sc, (ScrArea *)sc->areabase.first, 'h', 0.99f, 1);
 		ED_area_newspace(C, newa, SPACE_INFO);
 
 		/* use random area when we have no active one, e.g. when the

Modified: trunk/blender/source/blender/editors/screen/screen_intern.h
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_intern.h	2011-01-31 16:34:56 UTC (rev 34585)
+++ trunk/blender/source/blender/editors/screen/screen_intern.h	2011-01-31 17:28:03 UTC (rev 34586)
@@ -37,7 +37,7 @@
 
 /* screen_edit.c */
 ScrEdge		*screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
-ScrArea		*area_split(bScreen *sc, ScrArea *sa, char dir, float fac);
+ScrArea		*area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge);
 int			screen_area_join(bContext *C, bScreen* scr, ScrArea *sa1, ScrArea *sa2);
 int			area_getorientation(ScrArea *sa, ScrArea *sb);
 void		select_connected_scredge(bScreen *sc, ScrEdge *edge);

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2011-01-31 16:34:56 UTC (rev 34585)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2011-01-31 17:28:03 UTC (rev 34586)
@@ -1169,7 +1169,7 @@
 	fac= RNA_float_get(op->ptr, "factor");
 	dir= RNA_enum_get(op->ptr, "direction");
 	
-	sd->narea= area_split(sc, sd->sarea, dir, fac);
+	sd->narea= area_split(sc, sd->sarea, dir, fac, 0); /* 0 = no merge */
 	
 	if(sd->narea) {
 		ScrVert *sv;




More information about the Bf-blender-cvs mailing list