[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41501] trunk/blender/source/blender: Fix #29005: Bezier/Surface Datablock switching bug?

Sergey Sharybin g.ulairi at gmail.com
Thu Nov 3 17:16:20 CET 2011


Revision: 41501
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41501
Author:   nazgul
Date:     2011-11-03 16:16:19 +0000 (Thu, 03 Nov 2011)
Log Message:
-----------
Fix #29005: Bezier/Surface Datablock switching bug?

This commit updates curve datablock to respect curve dimension flag
when setting datablock for curve.

Not ideal but this makes behavior quite expected, avoids big changes in
curves core stuff which depends on object type and prevents restrictions
on changing data datablock which works in general cases.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_curve.h
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/makesrna/intern/rna_curve.c

Modified: trunk/blender/source/blender/blenkernel/BKE_curve.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_curve.h	2011-11-03 14:09:18 UTC (rev 41500)
+++ trunk/blender/source/blender/blenkernel/BKE_curve.h	2011-11-03 16:16:19 UTC (rev 41501)
@@ -65,6 +65,7 @@
 struct ListBase *curve_editnurbs(struct Curve *cu);
 short curve_type( struct Curve *cu);
 void test_curve_type( struct Object *ob);
+void update_curve_dimension( struct Curve *cu );
 void tex_space_curve( struct Curve *cu);
 int count_curveverts( struct ListBase *nurb);
 int count_curveverts_without_handles( struct ListBase *nurb);

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2011-11-03 14:09:18 UTC (rev 41500)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2011-11-03 16:16:19 UTC (rev 41501)
@@ -315,9 +315,34 @@
 	return OB_CURVE;
 }
 
+void update_curve_dimension(Curve *cu)
+{
+	ListBase *nurbs= BKE_curve_nurbs(cu);
+	Nurb *nu= nurbs->first;
+
+	if(cu->flag&CU_3D) {
+		for( ; nu; nu= nu->next) {
+			nu->flag &= ~CU_2D;
+		}
+	}
+	else {
+		for( ; nu; nu= nu->next) {
+			nu->flag |= CU_2D;
+			test2DNurb(nu);
+
+			/* since the handles are moved they need to be auto-located again */
+			if(nu->type == CU_BEZIER)
+				calchandlesNurb(nu);
+		}
+	}
+}
+
 void test_curve_type(Object *ob)
-{	
-	ob->type = curve_type(ob->data);
+{
+	ob->type= curve_type(ob->data);
+
+	if(ob->type==OB_CURVE)
+		update_curve_dimension((Curve *)ob->data);
 }
 
 void tex_space_curve(Curve *cu)

Modified: trunk/blender/source/blender/makesrna/intern/rna_curve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_curve.c	2011-11-03 14:09:18 UTC (rev 41500)
+++ trunk/blender/source/blender/makesrna/intern/rna_curve.c	2011-11-03 16:16:19 UTC (rev 41501)
@@ -271,23 +271,10 @@
 	ListBase *nurbs= BKE_curve_nurbs(cu);
 	Nurb *nu= nurbs->first;
 
-	if(value==CU_3D) {
-		cu->flag |=  CU_3D;
-		for( ; nu; nu= nu->next) {
-			nu->flag &= ~CU_2D;
-		}
-	}
-	else {
-		cu->flag &= ~CU_3D;
-		for( ; nu; nu= nu->next) {
-			nu->flag |= CU_2D;
-			test2DNurb(nu);
+	if(value==CU_3D) cu->flag |=  CU_3D;
+	else cu->flag &= ~CU_3D;
 
-			/* since the handles are moved they need to be auto-located again */
-			if(nu->type == CU_BEZIER)
-				calchandlesNurb(nu);
-		}
-	}
+	update_curve_dimension(cu);
 }
 
 static EnumPropertyItem *rna_Curve_fill_mode_itemf(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), int *UNUSED(free))




More information about the Bf-blender-cvs mailing list