[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32694] trunk/blender/source/blender: bugfix [#24376] Fly mode disturbs the rotation or scale of the camera object

Campbell Barton ideasman42 at gmail.com
Mon Oct 25 09:12:29 CEST 2010


Revision: 32694
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32694
Author:   campbellbarton
Date:     2010-10-25 09:12:29 +0200 (Mon, 25 Oct 2010)

Log Message:
-----------
bugfix [#24376] Fly mode disturbs the rotation or scale of the camera object

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_object.h
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/armature/editarmature.c
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/editors/object/object_transform.c
    trunk/blender/source/blender/editors/space_view3d/view3d_fly.c
    trunk/blender/source/blender/makesrna/intern/CMakeLists.txt
    trunk/blender/source/blender/makesrna/intern/rna_object.c

Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h	2010-10-25 07:12:29 UTC (rev 32694)
@@ -98,10 +98,10 @@
 float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs);
 void object_scale_to_mat3(struct Object *ob, float mat[][3]);
 void object_rot_to_mat3(struct Object *ob, float mat[][3]);
-void object_mat3_to_rot(struct Object *ob, float mat[][3], int use_compat);
+void object_mat3_to_rot(struct Object *ob, float mat[][3], short use_compat);
 void object_to_mat3(struct Object *ob, float mat[][3]);
 void object_to_mat4(struct Object *ob, float mat[][4]);
-void object_apply_mat4(struct Object *ob, float mat[][4]);
+void object_apply_mat4(struct Object *ob, float mat[][4], short use_compat);
 
 void set_no_parent_ipo(int val);
 

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -1550,7 +1550,7 @@
 	if(gob) {
 		ob->rotmode= target->rotmode;
 		mul_m4_m4m4(ob->obmat, target->obmat, gob->obmat);
-		object_apply_mat4(ob, ob->obmat);
+		object_apply_mat4(ob, ob->obmat, FALSE);
 	}
 	else {
 		copy_object_transform(ob, target);
@@ -1678,7 +1678,7 @@
 	mul_m3_m3m3(mat, dmat, rmat);
 }
 
-void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat)
+void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat)
 {
 	if (ob->rotmode == ROT_MODE_QUAT)
 		mat3_to_quat(ob->quat, mat);
@@ -1696,7 +1696,7 @@
 }
 
 /* see pchan_apply_mat4() for the equivalent 'pchan' function */
-void object_apply_mat4(Object *ob, float mat[][4])
+void object_apply_mat4(Object *ob, float mat[][4], short use_compat)
 {
 	float mat3[3][3];    /* obmat -> 3x3 */
 	float mat3_n[3][3];  /* obmat -> normalized, 3x3 */
@@ -1718,7 +1718,7 @@
 	}
 
 	/* rotation */
-	object_mat3_to_rot(ob, mat3_n, 0);
+	object_mat3_to_rot(ob, mat3_n, use_compat);
 
 	/* scale */
 	/* note: mat4_to_size(ob->size, mat) fails for negative scale */

Modified: trunk/blender/source/blender/editors/armature/editarmature.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/editors/armature/editarmature.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -546,7 +546,7 @@
 			/* apply current transform from parent (not yet destroyed), 
 			 * then calculate new parent inverse matrix
 			 */
-			object_apply_mat4(ob, ob->obmat);
+			object_apply_mat4(ob, ob->obmat, FALSE);
 			
 			what_does_parent(scene, ob, &workob);
 			invert_m4_m4(ob->parentinv, workob.obmat);

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/editors/object/object_add.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -985,7 +985,7 @@
 		ob->lay= base->lay;
 		
 		copy_m4_m4(ob->obmat, dob->mat);
-		object_apply_mat4(ob, ob->obmat);
+		object_apply_mat4(ob, ob->obmat, FALSE);
 	}
 	
 	copy_object_set_idnew(C, 0);

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -431,7 +431,7 @@
 		}			
 		else if(type == 1) {
 			ob->parent= NULL;
-			object_apply_mat4(ob, ob->obmat);
+			object_apply_mat4(ob, ob->obmat, TRUE);
 		}
 		else if(type == 2)
 			unit_m4(ob->parentinv);
@@ -906,7 +906,7 @@
 		}
 		
 		if(type == 1)
-			object_apply_mat4(ob, ob->obmat);
+			object_apply_mat4(ob, ob->obmat, TRUE);
 	}
 	CTX_DATA_END;
 

Modified: trunk/blender/source/blender/editors/object/object_transform.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_transform.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/editors/object/object_transform.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -390,7 +390,7 @@
 	/* a change was made, adjust the children to compensate */
 	for(ob_child=bmain->object.first; ob_child; ob_child=ob_child->id.next) {
 		if(ob_child->parent == ob) {
-			object_apply_mat4(ob_child, ob_child->obmat);
+			object_apply_mat4(ob_child, ob_child->obmat, TRUE);
 			what_does_parent(scene, ob_child, &workob);
 			invert_m4_m4(ob_child->parentinv, workob.obmat);
 		}
@@ -574,7 +574,7 @@
 	
 	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		where_is_object(scene, ob);
-		object_apply_mat4(ob, ob->obmat);
+		object_apply_mat4(ob, ob->obmat, TRUE);
 		where_is_object(scene, ob);
 		
 		change = 1;

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_fly.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_fly.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_fly.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -377,15 +377,7 @@
 		}
 	}
 	else if (fly->persp_backup==RV3D_CAMOB) {	/* camera */
-		float mat3[3][3];
-		if(fly->root_parent) {
-			DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB);
-		}
-		else {
-			copy_m3_m4(mat3, v3d->camera->obmat);
-			object_mat3_to_rot(v3d->camera, mat3, TRUE);
-			DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB);
-		}
+		DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB);
 	}
 	else { /* not camera */
 		/* Apply the fly mode view */
@@ -802,7 +794,7 @@
 					view3d_persp_mat4(rv3d, view_mat);
 					mul_m4_m4m4(diff_mat, prev_view_imat, view_mat);
 					mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat);
-					object_apply_mat4(fly->root_parent, parent_mat);
+					object_apply_mat4(fly->root_parent, parent_mat, TRUE);
 
 					// where_is_object(scene, fly->root_parent);
 
@@ -820,7 +812,7 @@
 				else {
 					float view_mat[4][4];
 					view3d_persp_mat4(rv3d, view_mat);
-					object_apply_mat4(v3d->camera, view_mat);
+					object_apply_mat4(v3d->camera, view_mat, TRUE);
 					id_key= &v3d->camera->id;
 				}
 
@@ -901,7 +893,7 @@
 static int fly_modal(bContext *C, wmOperator *op, wmEvent *event)
 {
 	int exit_code;
-
+	short do_draw= FALSE;
 	FlyInfo *fly = op->customdata;
 
 	fly->redraw= 0;
@@ -911,14 +903,20 @@
 	if(event->type==TIMER && event->customdata == fly->timer)
 		flyApply(C, fly);
 
-	if(fly->redraw) {
-		ED_region_tag_redraw(CTX_wm_region(C));
-	}
+	do_draw |= fly->redraw;
 
 	exit_code = flyEnd(C, fly);
 
 	if(exit_code!=OPERATOR_RUNNING_MODAL)
+		do_draw= TRUE;
+	
+	if(do_draw) {
+		if(fly->rv3d->persp==RV3D_CAMOB) {
+			WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera);
+		}
+
 		ED_region_tag_redraw(CTX_wm_region(C));
+	}
 
 	return exit_code;
 }

Modified: trunk/blender/source/blender/makesrna/intern/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/makesrna/intern/CMakeLists.txt	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/makesrna/intern/CMakeLists.txt	2010-10-25 07:12:29 UTC (rev 32694)
@@ -27,13 +27,17 @@
 # Generated code has some unused vars we can ignore.
 REMOVE_STRICT_FLAGS()
 
+MESSAGE(STATUS "Configuring makesrna")
+
 FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
 FILE(GLOB APISRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*_api.c")
 LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c)
 LIST(REMOVE_ITEM DEFSRC ${APISRC})
  
 STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}")
+SET_SOURCE_FILES_PROPERTIES(GENSRC PROPERTIES GENERATED true)
 
+
 SET(SRC
 	makesrna.c
 	rna_define.c
@@ -147,5 +151,3 @@
 # Build bf_rna
 SET(SRC rna_access.c ${GENSRC})
 BLENDERLIB(bf_rna "${SRC}" "${INC}")
-
-MESSAGE(STATUS "Configuring makesrna")

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2010-10-25 07:11:39 UTC (rev 32693)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2010-10-25 07:12:29 UTC (rev 32694)
@@ -143,7 +143,8 @@
 
 static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
 {
-	object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat);
+	/* dont use compat so we get pradictable rotation */
+	object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat, FALSE);
 	rna_Object_internal_update(bmain, scene, ptr);
 }
 
@@ -177,7 +178,8 @@
 		copy_m4_m4(ob->obmat, (float(*)[4])values);
 	}
 
-	object_apply_mat4(ob, ob->obmat);
+	/* dont use compat so we get pradictable rotation */
+	object_apply_mat4(ob, ob->obmat, FALSE);
 }
 
 void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)





More information about the Bf-blender-cvs mailing list