[Bf-committers] New Angle Code

Campbell Barton cbarton at metavr.com
Fri Mar 11 05:58:58 CET 2005


Hi, I coded this teac draw as one of my first steps into C / Blender 
code- edge to edge based angle drawing would be cool, but mabe as a 4th 
option?

It would be realy nice when drawing a poly line to see all the angles 
before any faces were drawn.
- Cam

Austin Benesh wrote:

> Hey all,
>
> I’m not trying to prove anyone wrong, but I have figured out a way to 
> calculate angles between edges that is completely independent from 
> faces. This also allows for all angles of edges that share the same 
> vertex to be calculated. This is a new, more independent style of 
> angle calculation. The only problem is I can’t get down exactly where 
> to place the actual number, but that’s a minor detail. I feel this 
> should replace the old code, seeing as how it is much more versatile.
>
> -- Austin
>
>------------------------------------------------------------------------
>
>Index: drawobject.c
>===================================================================
>RCS file: /cvsroot/bf-blender/blender/source/blender/src/drawobject.c,v
>retrieving revision 1.146
>diff -u -w -b -r1.146 drawobject.c
>--- drawobject.c	9 Mar 2005 19:45:56 -0000	1.146
>+++ drawobject.c	11 Mar 2005 03:48:06 -0000
>@@ -2730,7 +2730,7 @@
> static void draw_measure_stats(void)
> {
> 	EditMesh *em = G.editMesh;
>-	EditEdge *eed;
>+	EditEdge *eed, *eed2;
> 	EditFace *efa;
> 	float *v1, *v2, *v3, *v4, fvec[3];
> 	char val[32]; /* Stores the measurement display text here */
>@@ -2787,69 +2787,61 @@
> 
> 	/* Draw Edge Angles */
> 	if(G.f & G_DRAW_EDGEANG) {
>-		EditEdge *e1, *e2, *e3, *e4;
> 		
> 		BIF_GetThemeColor3fv(TH_TEXT, col);
> 		/* make color a bit more blue */
> 		if(col[2]> 0.5) {col[0]*=0.7; col[1]*= 0.7;}
> 		else col[2]= col[2]*0.7 + 0.3;
> 		glColor3fv(col);
>-		
>-		for(efa= em->faces.first; efa; efa= efa->next) {
>-			v1= efa->v1->co;
>-			v2= efa->v2->co;
>-			v3= efa->v3->co;
>-			if(efa->v4) v4= efa->v4->co; else v4= v3;
>-			e1= efa->e1;
>-			e2= efa->e2;
>-			e3= efa->e3;
>-			if(efa->e4) e4= efa->e4; else e4= e3;
>-			
>-			/* Calculate the angles */
>-				
>-			if(e4->f & e1->f & SELECT ) {
>-				/* Vec 1 */
>-				sprintf(val,"%.3f", VecAngle3(v4, v1, v2));
>-				fvec[0]= 0.2*efa->cent[0] + 0.8*v1[0];
>-				fvec[1]= 0.2*efa->cent[1] + 0.8*v1[1];
>-				fvec[2]= 0.2*efa->cent[2] + 0.8*v1[2];
>+		/* Revised method written by Austin Benesh 03/10/05 */
>+		for(eed=em->edges.first;eed;eed=eed->next)
>+		{
>+			// this causes the angle values to be double drawn...
>+				for(eed2=em->edges.first;eed2;eed2=eed2->next)
>+				{
>+					
>+					if((eed->f & eed2->f & SELECT)&&(eed!=eed2))
>+					{
>+					
>+						if(eed2->v1==eed->v1)
>+						{
>+							sprintf(val,"%.3f", VecAngle3(eed2->v2->co, eed2->v1->co, eed->v2->co));
>+							fvec[0]=(eed->v2->co[0]+eed2->v2->co[0])/2;
>+							fvec[1]=(eed->v2->co[1]+eed2->v2->co[1])/2;
>+							fvec[2]=(eed->v2->co[2]+eed2->v2->co[2])/2;
> 				glRasterPos3f(fvec[0], fvec[1], fvec[2]);
> 				BMF_DrawString( G.fonts, val);
> 			}
>-			if(e1->f & e2->f & SELECT ) {
>-				/* Vec 2 */
>-				sprintf(val,"%.3f", VecAngle3(v1, v2, v3));
>-				fvec[0]= 0.2*efa->cent[0] + 0.8*v2[0];
>-				fvec[1]= 0.2*efa->cent[1] + 0.8*v2[1];
>-				fvec[2]= 0.2*efa->cent[2] + 0.8*v2[2];
>+						if(eed2->v2==eed->v2)
>+						{
>+							sprintf(val,"%.3f", VecAngle3(eed2->v1->co, eed2->v2->co, eed->v1->co));
>+							fvec[0]=(eed->v1->co[0]+eed2->v1->co[0])/2;
>+							fvec[1]=(eed->v1->co[1]+eed2->v1->co[1])/2;
>+							fvec[2]=(eed->v1->co[2]+eed2->v1->co[2])/2;
> 				glRasterPos3f(fvec[0], fvec[1], fvec[2]);
> 				BMF_DrawString( G.fonts, val);
> 			}
>-			if(e2->f & e3->f & SELECT ) {
>-				/* Vec 3 */
>-				if(efa->v4) 
>-					sprintf(val,"%.3f", VecAngle3(v2, v3, v4));
>-				else
>-					sprintf(val,"%.3f", VecAngle3(v2, v3, v1));
>-				fvec[0]= 0.2*efa->cent[0] + 0.8*v3[0];
>-				fvec[1]= 0.2*efa->cent[1] + 0.8*v3[1];
>-				fvec[2]= 0.2*efa->cent[2] + 0.8*v3[2];
>+						if(eed2->v2==eed->v1)
>+						{
>+							sprintf(val,"%.3f", VecAngle3(eed2->v1->co, eed2->v2->co, eed->v2->co));
>+							fvec[0]=(eed->v2->co[0]+eed2->v1->co[0])/2;
>+							fvec[1]=(eed->v2->co[1]+eed2->v1->co[1])/2;
>+							fvec[2]=(eed->v2->co[2]+eed2->v1->co[2])/2;
> 				glRasterPos3f(fvec[0], fvec[1], fvec[2]);
> 				BMF_DrawString( G.fonts, val);
> 			}
>-				/* Vec 4 */
>-			if(efa->v4) {
>-				if(e3->f & e4->f & SELECT ) {
>-					sprintf(val,"%.3f", VecAngle3(v3, v4, v1));
>-
>-					fvec[0]= 0.2*efa->cent[0] + 0.8*v4[0];
>-					fvec[1]= 0.2*efa->cent[1] + 0.8*v4[1];
>-					fvec[2]= 0.2*efa->cent[2] + 0.8*v4[2];
>+						if(eed2->v1==eed->v2)
>+						{
>+							sprintf(val,"%.3f", VecAngle3(eed2->v2->co, eed2->v1->co, eed->v1->co));
>+							fvec[0]=(eed->v1->co[0]+eed2->v2->co[0])/2;
>+							fvec[1]=(eed->v1->co[1]+eed2->v2->co[1])/2;
>+							fvec[2]=(eed->v1->co[2]+eed2->v2->co[2])/2;
> 					glRasterPos3f(fvec[0], fvec[1], fvec[2]);
> 					BMF_DrawString( G.fonts, val);
> 				}
> 			}
> 		}
>+			}
> 	}    
> 	
> 	if(G.zbuf) {
>
>
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Bf-committers mailing list
>Bf-committers at projects.blender.org
>http://projects.blender.org/mailman/listinfo/bf-committers
>  
>


-- 
Campbell J Barton

133 Hope Street
Geelong West, Victoria 3218 Australia

URL:    http://www.metavr.com
e-mail: cbarton at metavr.com
phone: AU (03) 5229 0241



More information about the Bf-committers mailing list