[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27877] trunk/blender/source/blender: - Call DAG_id_flush_update for each object in convert operator if keep_original

Sergey Sharybin g.ulairi at gmail.com
Tue Mar 30 20:10:05 CEST 2010


Revision: 27877
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27877
Author:   nazgul
Date:     2010-03-30 20:10:05 +0200 (Tue, 30 Mar 2010)

Log Message:
-----------
- Call DAG_id_flush_update for each object in convert operator if keep_original
  option is switched off. This fixes trouble when user converts curve which is
  set as taper/bevel object to mesh (scene kept unchanged until object
  recalculation).
- Moved checking of taper/bevel objects type to RNA property update handlers.
- Added resetting taper/bevel object in do_makeDispListCurveTypes it this
  objects aren't curves.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/makesrna/intern/rna_curve.c

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2010-03-30 17:57:09 UTC (rev 27876)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2010-03-30 18:10:05 UTC (rev 27877)
@@ -1227,7 +1227,7 @@
 	/* if a font object is being edited, then do nothing */
 // XXX	if( ob == obedit && ob->type == OB_FONT ) return;
 
-	if(cu->bevobj && cu->bevobj!=ob && cu->bevobj->type==OB_CURVE) {
+	if(cu->bevobj) {
 		bevcu= cu->bevobj->data;
 		if(bevcu->ext1==0.0 && bevcu->ext2==0.0) {
 			ListBase bevdisp= {NULL, NULL};

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2010-03-30 17:57:09 UTC (rev 27876)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2010-03-30 18:10:05 UTC (rev 27877)
@@ -1657,6 +1657,15 @@
 		float (*deformedVerts)[3];
 		int numVerts;
 
+		/* Bevel and taper objects should always be curves */
+		if (cu->bevobj && cu->bevobj->type != OB_CURVE) {
+			cu->bevobj = NULL;
+		}
+
+		if (cu->taperobj && cu->taperobj->type != OB_CURVE) {
+			cu->taperobj = NULL;
+		}
+
 		if(cu->editnurb)
 			nubase= cu->editnurb;
 		else
@@ -1755,10 +1764,8 @@
 							bevp= (BevPoint *)(bl+1);
 							for(a=0; a<bl->nr; a++,bevp++) {
 								float fac=1.0;
-								if (cu->taperobj==NULL ||
-									cu->taperobj->type != OB_CURVE || cu->taperobj == ob) {
-									if ( (cu->bevobj!=NULL && cu->bevobj->type == OB_CURVE) ||
-										!((cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) )
+								if (cu->taperobj==NULL) {
+									if ( (cu->bevobj!=NULL) || !((cu->flag & CU_FRONT) || (cu->flag & CU_BACK)) )
 										fac = bevp->radius;
 								} else {
 									fac = calc_taper(scene, cu->taperobj, a, bl->nr);

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2010-03-30 17:57:09 UTC (rev 27876)
+++ trunk/blender/source/blender/editors/object/object_add.c	2010-03-30 18:10:05 UTC (rev 27877)
@@ -1424,6 +1424,10 @@
 			basen= NULL;
 		}
 
+		if (!keep_original) {
+			DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+		}
+
 		/* delete original if needed */
 		if(basedel) {
 			if(!keep_original)

Modified: trunk/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_curve.c	2010-03-30 17:57:09 UTC (rev 27876)
+++ trunk/blender/source/blender/makesrna/intern/rna_curve.c	2010-03-30 18:10:05 UTC (rev 27877)
@@ -219,10 +219,14 @@
 static void rna_Curve_update_taper(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
 	Curve *cu= (Curve*)ptr->id.data;
-	Object *obj= cu->taperobj;
+	Object *ob= cu->taperobj;
 
-	if (obj && obj->type != OB_CURVE) {
-		cu->taperobj = NULL;
+	if (ob) {
+		/* if taper object has got the save curve, as object, for which it's */
+		/* set as taperobj, there could be infinity loop in displist calculation */
+		if (ob->type != OB_CURVE || ob->data == cu) {
+			cu->taperobj = NULL;
+		}
 	}
 
 	rna_Curve_update_deps(bmain, scene, ptr);
@@ -231,10 +235,14 @@
 static void rna_Curve_update_bevel(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
 	Curve *cu= (Curve*)ptr->id.data;
-	Object *obj= cu->bevobj;
+	Object *ob= cu->bevobj;
 
-	if (obj && obj->type != OB_CURVE) {
-		cu->bevobj = NULL;
+	if (ob) {
+		/* if bevel object has got the save curve, as object, for which it's */
+		/* set as bevobj, there could be infinity loop in displist calculation */
+		if (ob->type != OB_CURVE || ob->data == cu) {
+			cu->bevobj = NULL;
+		}
 	}
 
 	rna_Curve_update_deps(bmain, scene, ptr);





More information about the Bf-blender-cvs mailing list