[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32006] trunk/blender/source/blender/ editors/space_view3d: fix for object centers size flickering when the view is far from the center (1000 or more units).

Campbell Barton ideasman42 at gmail.com
Sun Sep 19 08:41:45 CEST 2010


Revision: 32006
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32006
Author:   campbellbarton
Date:     2010-09-19 08:41:44 +0200 (Sun, 19 Sep 2010)

Log Message:
-----------
fix for object centers size flickering when the view is far from the center (1000 or more units).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-09-18 21:04:33 UTC (rev 32005)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c	2010-09-19 06:41:44 UTC (rev 32006)
@@ -1979,20 +1979,18 @@
 	
 	/* calculate pixelsize factor once, is used for lamps and obcenters */
 	{
-		float len1, len2, vec[3];
+		rv3d->pixsize= 2.0f;
 		
-		copy_v3_v3(vec, rv3d->persinv[0]);
-		len1= normalize_v3(vec);
-		copy_v3_v3(vec, rv3d->persinv[1]);
-		len2= normalize_v3(vec);
-		
-		rv3d->pixsize= 2.0f*(len1>len2?len1:len2);
-		
+		if(view3d_is_ortho(v3d, rv3d)) {
+			float len1= len_v3(rv3d->persinv[0]);
+			float len2= len_v3(rv3d->persinv[1]);
+			rv3d->pixsize *= MAX2(len1, len2);
+		}
+
 		/* correct for window size */
-		if(ar->winx > ar->winy) rv3d->pixsize/= (float)ar->winx;
-		else rv3d->pixsize/= (float)ar->winy;
+		rv3d->pixsize/= (float)MAX2(ar->winx, ar->winy);
 	}
-	
+
 	/* set for opengl */
 	glMatrixMode(GL_PROJECTION);
 	glLoadMatrixf(rv3d->winmat);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2010-09-18 21:04:33 UTC (rev 32005)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_intern.h	2010-09-19 06:41:44 UTC (rev 32006)
@@ -141,6 +141,7 @@
 
 /* view3d_view.c */
 void view3d_settings_from_ob(struct Object *ob, float *ofs, float *quat, float *dist, float *lens);
+int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d);
 
 void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
 void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-09-18 21:04:33 UTC (rev 32005)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-09-19 06:41:44 UTC (rev 32006)
@@ -2722,3 +2722,7 @@
 	}
 }
 
+int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d)
+{
+	return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO));
+}





More information about the Bf-blender-cvs mailing list