[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