[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20264] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Mon May 18 18:42:36 CEST 2009


Revision: 20264
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20264
Author:   ton
Date:     2009-05-18 18:42:34 +0200 (Mon, 18 May 2009)

Log Message:
-----------
2.5

Text drawing in 3D window fixed, using BLF default font (yes, nice AA'ed
fonts too :)

Solved it by gathering all strings that needs to be drawn for an object,
and then draw in end of object drawing, in pixelspace. Also cleaned up
some of the code for projecting 3d coords, much nicer now (mat stored in
region-view3d)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
    branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_view3d_types.h

Modified: branches/blender2.5/blender/source/blender/blenfont/intern/blf.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenfont/intern/blf.c	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/blenfont/intern/blf.c	2009-05-18 16:42:34 UTC (rev 20264)
@@ -138,7 +138,7 @@
 
 	filename= blf_dir_search(name);
 	if (!filename) {
-		printf("Can't found font: %s\n", name);
+		printf("Can't find font: %s\n", name);
 		return(-1);
 	}
 

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h	2009-05-18 16:42:34 UTC (rev 20264)
@@ -92,7 +92,7 @@
 
 int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
 int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d);
-void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);
+void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]);
 void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
 
 /* drawobject.c itterators */
@@ -123,7 +123,6 @@
 void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc);
 void view3d_operator_needs_opengl(const struct bContext *C);
 void view3d_get_view_aligned_coordinate(struct ViewContext *vc, float *fp, short mval[2]);
-void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);;
 void view3d_get_transformation(struct ViewContext *vc, struct Object *ob, struct bglMats *mats);
 
 /* XXX should move to arithb.c */

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-05-18 16:42:34 UTC (rev 20264)
@@ -3829,7 +3829,7 @@
 	GHash *vertgh;
 
 	SlideVert *tempsv;
-	float perc = 0, percp = 0,vertdist; // XXX, projectMat[4][4], viewMat[4][4];
+	float perc = 0, percp = 0,vertdist; // XXX, projectMat[4][4];
 	float shiftlabda= 0.0f,len = 0.0f;
 	int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
 	int wasshift = 0;
@@ -3849,7 +3849,7 @@
 	
 //	initNumInput(&num);
 		
-//	view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat);
+//	view3d_get_object_project_mat(curarea, obedit, projectMat);
 	
 	mvalo[0] = -1; mvalo[1] = -1; 
 	numsel =0;  
@@ -4759,7 +4759,7 @@
 	EditVert *eve, *nextve;
 	EditEdge *eed, *seed= NULL;
 	EditFace *efa, *sefa= NULL;
-	float projectMat[4][4], vec[3], dist, mindist, viewMat[4][4];
+	float projectMat[4][4], vec[3], dist, mindist;
 	short doit= 1, *mval= event->mval; // XXX ,propmode,prop;
 	
 	
@@ -4771,7 +4771,7 @@
 	/* select flush... vertices are important */
 	EM_selectmode_set(em);
 	
-	view3d_get_object_project_mat(rv3d, obedit, projectMat, viewMat);
+	view3d_get_object_project_mat(rv3d, obedit, projectMat);
 
 	/* find best face, exclude triangles and break on face select or faces with 2 edges select */
 	mindist= 1000000.0f;

Modified: branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c	2009-05-18 16:42:34 UTC (rev 20264)
@@ -276,7 +276,6 @@
 	float cloneOffset[2];
 	
 	float projectMat[4][4];		/* Projection matrix, use for getting screen coords */
-	float viewMat[4][4];
 	float viewDir[3];			/* View vector, use for do_backfacecull and for ray casting with an ortho viewport  */
 	float viewPos[3];			/* View location in object relative 3D space, so can compare to verts  */
 	float clipsta, clipend;
@@ -2971,7 +2970,7 @@
 	ps->viewDir[1] = 0.0f;
 	ps->viewDir[2] = 1.0f;
 	
-	view3d_get_object_project_mat(ps->rv3d, ps->ob, ps->projectMat, ps->viewMat);
+	view3d_get_object_project_mat(ps->rv3d, ps->ob, ps->projectMat);
 	
 	/* viewDir - object relative */
 	Mat4Invert(ps->ob->imat, ps->ob->obmat);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c	2009-05-18 16:42:34 UTC (rev 20264)
@@ -1805,8 +1805,7 @@
 						/* 	Draw names of bone 	*/
 						if (arm->flag & ARM_DRAWNAMES) {
 							VecMidf(vec, pchan->pose_head, pchan->pose_tail);
-							BLF_draw_default(vec[0], vec[1], vec[2], " ");
-							BLF_draw_default(vec[0] + BLF_width_default(" "), vec[1], vec[2], pchan->name);
+							view3d_object_text_draw_add(vec[0], vec[1], vec[2], pchan->name, 10);
 						}	
 						
 						/*	Draw additional axes on the bone tail  */
@@ -1991,8 +1990,7 @@
 						if (arm->flag & ARM_DRAWNAMES) {
 							VecMidf(vec, eBone->head, eBone->tail);
 							glRasterPos3fv(vec);
-							BLF_draw_default(vec[0], vec[1], vec[2], " ");
-							BLF_draw_default(vec[0] + BLF_width_default(" "), vec[1], vec[2], eBone->name);
+							view3d_object_text_draw_add(vec[0], vec[1], vec[2], eBone->name, 10);
 						}					
 						/*	Draw additional axes */
 						if (arm->flag & ARM_DRAWAXES) {
@@ -2154,12 +2152,12 @@
 						/* only draw framenum if several consecutive highlighted points don't occur on same point */
 						if (a == 0) {
 							sprintf(str, "  %d\n", (a+sfra));
-							BLF_draw_default(fp[0], fp[1], fp[2], str);
+							view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
 						}
 						else if ((a > stepsize) && (a < len-stepsize)) { 
 							if ((VecEqual(fp, fp-(stepsize*3))==0) || (VecEqual(fp, fp+(stepsize*3))==0)) {
 								sprintf(str, "  %d\n", (a+sfra));
-								BLF_draw_default(fp[0], fp[1], fp[2], str);
+								view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
 							}
 						}
 					}
@@ -2202,7 +2200,7 @@
 									char str[32];
 									
 									sprintf(str, "  %d\n", (a+sfra));
-									BLF_draw_default(fp[0], fp[1], fp[2], str);
+									view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
 								}
 							}
 						}

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c	2009-05-18 15:53:30 UTC (rev 20263)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c	2009-05-18 16:42:34 UTC (rev 20264)
@@ -96,8 +96,9 @@
 #include "GPU_material.h"
 #include "GPU_extensions.h"
 
+#include "ED_mesh.h"
 #include "ED_particle.h"
-#include "ED_mesh.h"
+#include "ED_screen.h"
 #include "ED_types.h"
 #include "ED_util.h"
 
@@ -133,6 +134,74 @@
 static void draw_empty_sphere(float size);
 static void draw_empty_cone(float size);
 
+
+/* ************* only use while object drawing ************** */
+static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr)
+{
+	RegionView3D *rv3d= ar->regiondata;
+	float fx, fy, vec4[4];
+	
+	adr[0]= IS_CLIPPED;
+	
+	/* clipplanes in eye space */
+	if(rv3d->rflag & RV3D_CLIPPING) {
+		VECCOPY(vec4, vec);
+		Mat4MulVecfl(rv3d->viewmatob, vec4);
+		if(view3d_test_clipping(rv3d, vec4))
+			return;
+	}
+	
+	VECCOPY(vec4, vec);
+	vec4[3]= 1.0;
+	
+	Mat4MulVec4fl(rv3d->persmatob, vec4);
+	
+	/* clipplanes in window space */
+	if( vec4[3]>BL_NEAR_CLIP ) {	/* is the NEAR clipping cutoff for picking */
+		fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
+		
+		if( fx>0 && fx<ar->winx) {
+			
+			fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
+			
+			if(fy>0.0 && fy< (float)ar->winy) {
+				adr[0]= (short)floor(fx); 
+				adr[1]= (short)floor(fy);
+			}
+		}
+	}
+}
+
+/* only use while object drawing */
+static void view3d_project_short_noclip(ARegion *ar, float *vec, short *adr)
+{
+	RegionView3D *rv3d= ar->regiondata;
+	float fx, fy, vec4[4];
+	
+	adr[0]= IS_CLIPPED;
+	
+	VECCOPY(vec4, vec);
+	vec4[3]= 1.0;
+	
+	Mat4MulVec4fl(rv3d->persmatob, vec4);
+	
+	if( vec4[3]>BL_NEAR_CLIP ) {	/* is the NEAR clipping cutoff for picking */
+		fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
+		
+		if( fx>-32700 && fx<32700) {
+			
+			fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
+			
+			if(fy>-32700.0 && fy<32700.0) {
+				adr[0]= (short)floor(fx); 
+				adr[1]= (short)floor(fy);
+			}
+		}
+	}
+}
+
+/* ************************ */
+
 /* check for glsl drawing */
 
 int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt)
@@ -364,11 +433,11 @@
 			// patch for 3d cards crashing on glSelect for text drawing (IBM)
 			if((flag & DRAW_PICKING) == 0) {
 				if (axis==0)
-					BLF_draw_default(v2[0], v2[1], v2[2], "x");
+					view3d_object_text_draw_add(v2[0], v2[1], v2[2], "x", 0);
 				else if (axis==1)
-					BLF_draw_default(v2[0], v2[1], v2[2], "y");
+					view3d_object_text_draw_add(v2[0], v2[1], v2[2], "y", 0);
 				else
-					BLF_draw_default(v2[0], v2[1], v2[2], "z");
+					view3d_object_text_draw_add(v2[0], v2[1], v2[2], "z", 0);
 			}
 		}
 		break;
@@ -426,7 +495,76 @@
 	if(v3d->zbuf)  glDepthFunc(GL_LEQUAL);
 }
 
+/* *********** text drawing for object ************* */
+static ListBase strings= {NULL, NULL};
 
+typedef struct ViewObjectString {
+	struct ViewObjectString *next, *prev;
+	float vec[3], col[4];
+	char str[128]; 
+	short mval[2];
+	short xoffs;
+} ViewObjectString;
+
+
+void view3d_object_text_draw_add(float x, float y, float z, char *str, short xoffs)
+{
+	ViewObjectString *vos= MEM_callocN(sizeof(ViewObjectString), "ViewObjectString");
+
+	BLI_addtail(&strings, vos);
+	BLI_strncpy(vos->str, str, 128);
+	vos->vec[0]= x;
+	vos->vec[1]= y;
+	vos->vec[2]= z;
+	glGetFloatv(GL_CURRENT_COLOR, vos->col);
+	vos->xoffs= xoffs;
+}
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list