[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26258] trunk/blender/source/blender: More fixes for radians-degrees, wasn't converting pose channel constraints

Brecht Van Lommel brecht at blender.org
Mon Jan 25 19:38:09 CET 2010


Revision: 26258
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26258
Author:   blendix
Date:     2010-01-25 19:38:09 +0100 (Mon, 25 Jan 2010)

Log Message:
-----------
More fixes for radians-degrees, wasn't converting pose channel constraints
properly yet, also did conversion ik min/max limits.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesrna/intern/rna_pose.c

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h	2010-01-25 18:09:46 UTC (rev 26257)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2010-01-25 18:38:09 UTC (rev 26258)
@@ -43,7 +43,7 @@
 struct ReportList;
 
 #define BLENDER_VERSION			250
-#define BLENDER_SUBVERSION		12
+#define BLENDER_SUBVERSION		13
 
 #define BLENDER_MINVERSION		250
 #define BLENDER_MINSUBVERSION	0

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-01-25 18:09:46 UTC (rev 26257)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-01-25 18:38:09 UTC (rev 26258)
@@ -6497,7 +6497,36 @@
 		}
 	}
 }
+			
+static void do_version_constraints_radians_degrees_250(ListBase *lb)
+{
+	bConstraint *con;
 
+	/* fcurves for this are not converted, assumption is these were unlikely to be used */
+	for	(con=lb->first; con; con=con->next) {
+		if(con->type==CONSTRAINT_TYPE_RIGIDBODYJOINT) {
+			bRigidBodyJointConstraint *data = con->data;
+			data->axX *= M_PI/180.0;
+			data->axY *= M_PI/180.0;
+			data->axZ *= M_PI/180.0;
+		}
+		else if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
+			bKinematicConstraint *data = con->data;
+			data->poleangle *= M_PI/180.0;
+		}
+		else if(con->type==CONSTRAINT_TYPE_ROTLIMIT) {
+			bRotLimitConstraint *data = con->data;
+
+			data->xmin *= M_PI/180.0;
+			data->xmax *= M_PI/180.0;
+			data->ymin *= M_PI/180.0;
+			data->ymax *= M_PI/180.0;
+			data->zmin *= M_PI/180.0;
+			data->zmax *= M_PI/180.0;
+		}
+	}
+}
+
 static void do_versions(FileData *fd, Library *lib, Main *main)
 {
 	/* WATCH IT!!!: pointers from libdata have not been converted */
@@ -10552,56 +10581,34 @@
 	
 	/* put 2.50 compatibility code here until next subversion bump */
 	if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 13)) {
-		/* still missing: - Pose channel IK (min x/y/z, max x/y/z)
-		   NOTE: if you do more conversion, be sure to do it outside of this and
+		/* NOTE: if you do more conversion, be sure to do it outside of this and
 		   increase subversion again, otherwise it will not be correct */
+		Object *ob;
 		bAction *act;
-		Object *ob;
 		
-		float rads_per_deg = M_PI / 180.0;
-		
 		/* convert degrees to radians for internal use */
 		for (ob=main->object.first; ob; ob=ob->id.next) {
 			AnimData *adt = BKE_animdata_from_id((ID *)ob);
-			bConstraint *con;
+			bPoseChannel *pchan;
 
-			if(adt) {
+			if (adt) {
 				do_version_fcurves_radians_degrees_250(&adt->drivers, "rotation_euler");
 				do_version_fcurves_radians_degrees_250(&adt->drivers, "delta_rotation_euler");
 				do_version_fcurves_radians_degrees_250(&adt->drivers, "pole_angle");
 			}
-			
-			for	(con=ob->constraints.first; con; con=con->next) {
-				
-				if(con->type==CONSTRAINT_TYPE_RIGIDBODYJOINT) {
-					bRigidBodyJointConstraint *data = con->data;
-					data->axX *= rads_per_deg;
-					data->axY *= rads_per_deg;
-					data->axZ *= rads_per_deg;
-				}
-				else if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
-					bKinematicConstraint *data = con->data;
-					data->poleangle *= rads_per_deg;
-				}
-				else if(con->type==CONSTRAINT_TYPE_ROTLIMIT) {
-					bRotLimitConstraint *data = con->data;
 
-					if(adt) {
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "minimum_x");
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "minimum_y");
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "minimum_z");
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "maximum_x");
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "maximum_y");
-						do_version_fcurves_radians_degrees_250(&adt->action->curves, "maximum_z");
-					}
+			do_version_constraints_radians_degrees_250(&ob->constraints);
 
-					data->xmin *= rads_per_deg;
-					data->xmax *= rads_per_deg;
-					data->ymin *= rads_per_deg;
-					data->ymax *= rads_per_deg;
-					data->zmin *= rads_per_deg;
-					data->zmax *= rads_per_deg;
+			if (ob->pose) {
+				for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
+					pchan->limitmin[0] *= M_PI/180.0;
+					pchan->limitmin[1] *= M_PI/180.0;
+					pchan->limitmin[2] *= M_PI/180.0;
+					pchan->limitmax[0] *= M_PI/180.0;
+					pchan->limitmax[1] *= M_PI/180.0;
+					pchan->limitmax[2] *= M_PI/180.0;
 
+					do_version_constraints_radians_degrees_250(&pchan->constraints);
 				}
 			}
 		}

Modified: trunk/blender/source/blender/makesrna/intern/rna_pose.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_pose.c	2010-01-25 18:09:46 UTC (rev 26257)
+++ trunk/blender/source/blender/makesrna/intern/rna_pose.c	2010-01-25 18:38:09 UTC (rev 26258)
@@ -37,6 +37,8 @@
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 
+#include "BLI_math.h"
+
 #include "WM_types.h"
 
 #ifdef RNA_RUNTIME
@@ -44,7 +46,6 @@
 #include "BIK_api.h"
 #include "BKE_action.h"
 #include "BKE_armature.h"
-#include "BLI_math.h"
 
 #include "DNA_userdef_types.h"
 
@@ -860,44 +861,44 @@
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 	
-	prop= RNA_def_property(srna, "ik_min_x", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_min_x", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmin[0]");
-	RNA_def_property_range(prop, -180.0f, 0.0f);
+	RNA_def_property_range(prop, -M_PI, 0.0f);
 	RNA_def_property_ui_text(prop, "IK X Minimum", "Minimum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 
-	prop= RNA_def_property(srna, "ik_max_x", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_max_x", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmax[0]");
-	RNA_def_property_range(prop, 0.0f, 180.0f);
+	RNA_def_property_range(prop, 0.0f, M_PI);
 	RNA_def_property_ui_text(prop, "IK X Maximum", "Maximum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 
-	prop= RNA_def_property(srna, "ik_min_y", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_min_y", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmin[1]");
-	RNA_def_property_range(prop, -180.0f, 0.0f);
+	RNA_def_property_range(prop, -M_PI, 0.0f);
 	RNA_def_property_ui_text(prop, "IK Y Minimum", "Minimum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 
-	prop= RNA_def_property(srna, "ik_max_y", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_max_y", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmax[1]");
-	RNA_def_property_range(prop, 0.0f, 180.0f);
+	RNA_def_property_range(prop, 0.0f, M_PI);
 	RNA_def_property_ui_text(prop, "IK Y Maximum", "Maximum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 
-	prop= RNA_def_property(srna, "ik_min_z", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_min_z", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmin[2]");
-	RNA_def_property_range(prop, -180.0f, 0.0f);
+	RNA_def_property_range(prop, -M_PI, 0.0f);
 	RNA_def_property_ui_text(prop, "IK Z Minimum", "Minimum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
 
-	prop= RNA_def_property(srna, "ik_max_z", PROP_FLOAT, PROP_NONE);
+	prop= RNA_def_property(srna, "ik_max_z", PROP_FLOAT, PROP_ANGLE);
 	RNA_def_property_float_sdna(prop, NULL, "limitmax[2]");
-	RNA_def_property_range(prop, 0.0f, 180.0f);
+	RNA_def_property_range(prop, 0.0f, M_PI);
 	RNA_def_property_ui_text(prop, "IK Z Maximum", "Maximum angles for IK Limit");
 	RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
 	RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");





More information about the Bf-blender-cvs mailing list