[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52893] trunk/blender/source/blender/ editors: change to r52888, since we dont always want ED_view3d_offset_distance() to give a corrected value, instead pass a fallback so callers don' t allow zero by accident.

Campbell Barton ideasman42 at gmail.com
Tue Dec 11 16:56:12 CET 2012


Revision: 52893
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52893
Author:   campbellbarton
Date:     2012-12-11 15:56:11 +0000 (Tue, 11 Dec 2012)
Log Message:
-----------
change to r52888, since we dont always want ED_view3d_offset_distance() to give a corrected value, instead pass a fallback so callers don't allow zero by accident.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52888

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2012-12-11 15:29:08 UTC (rev 52892)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2012-12-11 15:56:11 UTC (rev 52893)
@@ -295,7 +295,8 @@
 void ED_view3D_background_image_clear(struct View3D *v3d);
 
 #define VIEW3D_MARGIN 1.4f
-float ED_view3d_offset_distance(float mat[4][4], float ofs[3]);
+#define VIEW3D_DIST_FALLBACK 1.0f
+float ED_view3d_offset_distance(float mat[4][4], const float ofs[3], const float dist_fallback);
 
 float ED_scene_grid_scale(struct Scene *scene, const char **grid_unit);
 float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-12-11 15:29:08 UTC (rev 52892)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-12-11 15:56:11 UTC (rev 52893)
@@ -96,7 +96,8 @@
 void ED_view3d_camera_lock_init(View3D *v3d, RegionView3D *rv3d)
 {
 	if (ED_view3d_camera_lock_check(v3d, rv3d)) {
-		rv3d->dist = ED_view3d_offset_distance(v3d->camera->obmat, rv3d->ofs);
+		/* using a fallback dist is OK here since ED_view3d_from_object() compensates for it */
+		rv3d->dist = ED_view3d_offset_distance(v3d->camera->obmat, rv3d->ofs, VIEW3D_DIST_FALLBACK);
 		ED_view3d_from_object(v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL);
 	}
 }
@@ -895,7 +896,7 @@
 
 			/* changed since 2.4x, use the camera view */
 			if (vod->v3d->camera) {
-				rv3d->dist = ED_view3d_offset_distance(vod->v3d->camera->obmat, rv3d->ofs);
+				rv3d->dist = ED_view3d_offset_distance(vod->v3d->camera->obmat, rv3d->ofs, VIEW3D_DIST_FALLBACK);
 				ED_view3d_from_object(vod->v3d->camera, rv3d->ofs, rv3d->viewquat, &rv3d->dist, NULL);
 			}
 
@@ -3977,7 +3978,11 @@
 	return (*depth == FLT_MAX) ? 0 : 1;
 }
 
-float ED_view3d_offset_distance(float mat[4][4], float ofs[3])
+/* problem - ofs[3] can be on same location as camera itself.
+ * Blender needs proper dist value for zoom.
+ * use fallback_dist to override small values
+ */
+float ED_view3d_offset_distance(float mat[4][4], const float ofs[3], const float fallback_dist)
 {
 	float pos[4] = {0.0f, 0.0f, 0.0f, 1.0f};
 	float dir[4] = {0.0f, 0.0f, 1.0f, 0.0f};
@@ -3989,12 +3994,11 @@
 	normalize_v3(dir);
 
 	dist = dot_v3v3(pos, dir);
-	
-	/* problem - ofs[3] can be on same location as camera itself. 
-	   Blender needs proper dist value for zoom */
-	if (fabsf(dist) <= FLT_EPSILON) {
-		return 1.0f;
+
+	if ((dist < FLT_EPSILON) && (fallback_dist != 0.0f)) {
+		dist = fallback_dist;
 	}
+
 	return dist;
 }
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2012-12-11 15:29:08 UTC (rev 52892)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2012-12-11 15:56:11 UTC (rev 52893)
@@ -161,7 +161,7 @@
 	if (lens) sms.new_lens = *lens;
 
 	if (camera) {
-		sms.new_dist = ED_view3d_offset_distance(camera->obmat, ofs);
+		sms.new_dist = ED_view3d_offset_distance(camera->obmat, ofs, VIEW3D_DIST_FALLBACK);
 		ED_view3d_from_object(camera, sms.new_ofs, sms.new_quat, &sms.new_dist, &sms.new_lens);
 		sms.to_camera = TRUE; /* restore view3d values in end */
 	}
@@ -186,7 +186,7 @@
 
 			/* original values */
 			if (oldcamera) {
-				sms.orig_dist = ED_view3d_offset_distance(oldcamera->obmat, rv3d->ofs);
+				sms.orig_dist = ED_view3d_offset_distance(oldcamera->obmat, rv3d->ofs, 0.0f);
 				ED_view3d_from_object(oldcamera, sms.orig_ofs, sms.orig_quat, &sms.orig_dist, &sms.orig_lens);
 			}
 			else {




More information about the Bf-blender-cvs mailing list