[Bf-committers] Teach draw with theme working
Campbell Barton
cbarton at metavr.com
Wed Nov 3 02:21:39 CET 2004
Hi, I added support for tinting each value - Red/Green/Blue, but using
the text colour as a base.
This looks good IMHO.
Chech out the patch- Made from a fresh CVS.
- Cam
--
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
-------------- next part --------------
Index: source/blender/blenkernel/BKE_global.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/BKE_global.h,v
retrieving revision 1.16
diff -u -r1.16 BKE_global.h
--- source/blender/blenkernel/BKE_global.h 23 Sep 2004 20:52:49 -0000 1.16
+++ source/blender/blenkernel/BKE_global.h 3 Nov 2004 00:15:01 -0000
@@ -172,6 +172,10 @@
#define G_DRAWSEAMS (1 << 20)
#define G_HIDDENEDGES (1 << 21)
+#define G_DRAW_EDGLEN (1 << 22) /* Teac info Drawing */
+#define G_DRAW_FACEAREA (1 << 23)
+#define G_DRAW_FACEANG (1 << 24)
+
/* G.fileflags */
#define G_AUTOPACK_BIT 0
Index: source/blender/blenlib/BLI_arithb.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenlib/BLI_arithb.h,v
retrieving revision 1.10
diff -u -r1.10 BLI_arithb.h
--- source/blender/blenlib/BLI_arithb.h 13 Jul 2004 11:48:49 -0000 1.10
+++ source/blender/blenlib/BLI_arithb.h 3 Nov 2004 00:15:01 -0000
@@ -546,6 +546,12 @@
short axis,
short upflag
);
+ float
+VecAngle3(
+ float *v1,
+ float *v2,
+ float *v3
+);
void
i_lookat(
Index: source/blender/blenlib/intern/arithb.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/blenlib/intern/arithb.c,v
retrieving revision 1.12
diff -u -r1.12 arithb.c
--- source/blender/blenlib/intern/arithb.c 13 Jul 2004 11:48:49 -0000 1.12
+++ source/blender/blenlib/intern/arithb.c 3 Nov 2004 00:15:03 -0000
@@ -2065,6 +2065,17 @@
}
}
+float VecAngle3( float *v1, float *v2, float *v3) /* Return the angle between vec 1&2 and vec 1&3 */
+{
+ float vec1[3], vec2[3];
+
+ VecSubf(vec1, v2, v1);
+ VecSubf(vec2, v3, v1);
+ Normalise(vec1);
+ Normalise(vec2);
+ return saacos(vec1[0]*vec2[0] + vec1[1]*vec2[1] + vec1[2]*vec2[2]) * 57.295779;
+}
+
void euler_rot(float *beul, float ang, char axis)
{
float eul[3], mat1[3][3], mat2[3][3], totmat[3][3];
Index: source/blender/src/buttons_editing.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/buttons_editing.c,v
retrieving revision 1.79
diff -u -r1.79 buttons_editing.c
--- source/blender/src/buttons_editing.c 1 Nov 2004 17:03:05 -0000 1.79
+++ source/blender/src/buttons_editing.c 3 Nov 2004 00:15:09 -0000
@@ -2093,20 +2093,27 @@
if(uiNewPanel(curarea, block, "Mesh Tools 1", "Editing", 960, 0, 318, 204)==0) return;
uiBlockBeginAlign(block);
- uiDefBut(block, BUT,B_DOCENTRE, "Centre", 1091, 200, 166, 19, 0, 0, 0, 0, 0, "Shifts object data to be centered about object's origin");
- uiDefBut(block, BUT,B_HIDE, "Hide", 1091, 180, 77, 19, 0, 0, 0, 0, 0, "Hides selected faces");
- uiDefBut(block, BUT,B_REVEAL, "Reveal", 1171, 180, 86, 19, 0, 0, 0, 0, 0, "Reveals selected faces");
- uiDefBut(block, BUT,B_SELSWAP, "Select Swap", 1091, 160, 166, 19, 0, 0, 0, 0, 0, "Selects unselected faces, and deselects selected faces");
+ uiDefBut(block, BUT,B_DOCENTRE, "Centre", 955, 200, 320, 19, 0, 0, 0, 0, 0, "Shifts object data to be centered about object's origin");
+ uiDefBut(block, BUT,B_HIDE, "Hide", 955, 180, 160, 19, 0, 0, 0, 0, 0, "Hides selected faces");
+ uiDefBut(block, BUT,B_REVEAL, "Reveal", 1115, 180, 160, 19, 0, 0, 0, 0, 0, "Reveals selected faces");
+ uiDefBut(block, BUT,B_SELSWAP, "Select Swap", 955, 160, 320, 19, 0, 0, 0, 0, 0, "Selects unselected faces, and deselects selected faces");
uiBlockEndAlign(block);
-
+
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, REDRAWVIEW3D, "NSize:", 1090, 131, 166, 19, &editbutsize, 0.001, 2.0, 10, 0, "Sets the length to use when displaying face normals");
- uiDefButI(block, TOG|BIT|6, REDRAWVIEW3D, "Draw Normals", 1090,110,166,19, &G.f, 0, 0, 0, 0, "Displays face normals as lines");
- uiDefButI(block, TOG|BIT|7, REDRAWVIEW3D, "Draw Faces", 1090,88,166,19, &G.f, 0, 0, 0, 0, "Displays all faces as shades");
- uiDefButI(block, TOG|BIT|18, B_DRAWEDGES, "Draw Edges", 1090,66,166,19, &G.f, 0, 0, 0, 0, "Displays selected edges using hilights");
- uiDefButI(block, TOG|BIT|19, B_DRAWCREASES, "Draw Creases", 1090,44,166,19, &G.f, 0, 0, 0, 0, "Displays creased edges using hilights");
- uiDefButI(block, TOG|BIT|20, REDRAWVIEW3D, "Draw Seams", 1090,22,166,19, &G.f, 0, 0, 0, 0, "Displays UV unwrapping seams");
- uiDefButI(block, TOG|BIT|11, 0, "All Edges", 1090, 0,166,19, &G.f, 0, 0, 0, 0, "Displays all edges in object mode without optimization");
+ uiDefButF(block, NUM, REDRAWVIEW3D, "NSize:", 955, 131, 150, 19, &editbutsize, 0.001, 2.0, 10, 0, "Sets the length to use when displaying face normals");
+ uiDefButI(block, TOG|BIT|6, REDRAWVIEW3D, "Draw Normals", 955,110,150,19, &G.f, 0, 0, 0, 0, "Displays face normals as lines");
+ uiDefButI(block, TOG|BIT|7, REDRAWVIEW3D, "Draw Faces", 955,88,150,19, &G.f, 0, 0, 0, 0, "Displays all faces as shades");
+ uiDefButI(block, TOG|BIT|18, REDRAWVIEW3D, "Draw Edges", 955,66,150,19, &G.f, 0, 0, 0, 0, "Displays selected edges using hilights");
+ uiDefButI(block, TOG|BIT|19, REDRAWVIEW3D, "Draw Creases", 955,44,150,19, &G.f, 0, 0, 0, 0, "Displays face normals as lines");
+ uiDefButI(block, TOG|BIT|20, REDRAWVIEW3D, "Draw Seams", 955,22,150,19, &G.f, 0, 0, 0, 0, "Displays UV unwrapping seams");
+ uiDefButI(block, TOG|BIT|11, 0, "All Edges", 955, 0,150,19, &G.f, 0, 0, 0, 0, "Displays all edges in object mode without optimization");
+ uiBlockEndAlign(block);
+
+ /* Teach drawing options */
+ uiBlockBeginAlign(block);
+ uiDefButI(block, TOG|BIT|22, REDRAWVIEW3D, "Edge Length", 1125,131,150,19, &G.f, 0, 0, 0, 0, "Displays edge lengths");
+ uiDefButI(block, TOG|BIT|23, REDRAWVIEW3D, "Face Area", 1125,110,150,19, &G.f, 0, 0, 0, 0, "Displays the area of faces");
+ uiDefButI(block, TOG|BIT|24, REDRAWVIEW3D, "Face Angles", 1125,88,150,19, &G.f, 0, 0, 0, 0, "Displays the angles in the faces in degrees");
uiBlockEndAlign(block);
}
Index: source/blender/src/drawobject.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/drawobject.c,v
retrieving revision 1.125
diff -u -r1.125 drawobject.c
--- source/blender/src/drawobject.c 31 Oct 2004 21:11:03 -0000 1.125
+++ source/blender/src/drawobject.c 3 Nov 2004 00:15:14 -0000
@@ -2713,9 +2713,15 @@
DispList *dl;
Material *ma;
EditFace *efa;
+ EditEdge *eed;
+
float fvec[3], *f1, *f2, *f3, *f4, *extverts=NULL;
int a, start, end, test, ok, optimal=0;
+ /* For drawing measurements */
+ char val[32]; /* Stores the measurement display text here */
+ float area, col[3]; /* area of the face, colour of the text to draw */
+
me= get_mesh(ob);
if(ob==G.obedit || (G.obedit && ob->data==G.obedit->data)) {
@@ -2830,8 +2836,152 @@
glEnd();
}
- }
- else { /* Object mode draw */
+
+ /* Draw Edge Lengths */
+ if(G.f & G_DRAW_EDGLEN) { /* normals */
+ BIF_GetThemeColor3fv(TH_TEXT, col);
+ col[0]= col[0]*0.7 + 0.3;
+ glColor3fv(col);
+
+ /* Now Draw distance */
+ glDisable(GL_DEPTH_TEST);
+ eed= em->edges.first;
+ while(eed) {
+ if( eed->h==0 && eed->h==0 &&
+ (eed->v1->f & 1 || eed->v2->f & 1) ) {
+
+ sprintf(val,"%.3f",
+ sqrt((eed->v2->co[0] - eed->v1->co[0])*(eed->v2->co[0] - eed->v1->co[0])
+ + (eed->v2->co[1] - eed->v1->co[1])*(eed->v2->co[1] - eed->v1->co[1])
+ + (eed->v2->co[2] - eed->v1->co[2])*(eed->v2->co[2] - eed->v1->co[2])));
+
+ glRasterPos3f( (eed->v1->co[0]+eed->v2->co[0])/2, (eed->v1->co[1]+eed->v2->co[1])/2, (eed->v1->co[2]+eed->v2->co[2])/2);
+ /* Draw the length to the screen */
+ BIF_DrawString( G.fonts, val, 0);
+
+ }
+ eed= eed->next;
+ }
+ }
+
+ /* Draw Face Areas */
+ if(G.f & G_DRAW_FACEAREA) {
+ BIF_GetThemeColor3fv(TH_TEXT, col);
+ col[1]= col[1]*0.7 + 0.3;
+ glColor3fv(col);
+
+ glDisable(GL_DEPTH_TEST);
+ efa= em->faces.first;
+ while(efa) {
+ if(efa->v1->h==0 && efa->v2->h==0 && efa->v3->h==0 && (efa->v4==NULL || efa->v4->h==0)) {
+ if((efa->v1->f & 1 || efa->v2->f & 1 || efa->v3->f & 1) || (efa->v4!=NULL && efa->v4->f & 1) ) {
+ /* Calculate the area of 4 vert face f1 is the area*/
+ if (efa->v4) {
+ area= AreaT3Dfl( efa->v1->co, efa->v2->co, efa->v3->co);
+ area+= AreaT3Dfl( efa->v1->co, efa->v3->co, efa->v4->co);
+ CalcCent4f(fvec, efa->v1->co, efa->v2->co, efa->v3->co, efa->v4->co);
+ } else { /* Calculate the area of 3 verts */
+ area = AreaT3Dfl( efa->v1->co, efa->v2->co, efa->v3->co);
+ CalcCent3f(fvec, efa->v1->co, efa->v2->co, efa->v3->co);
+ }
+ sprintf(val,"%.3f", area);
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ }
+ efa= efa->next;
+ }
+ glEnable(GL_DEPTH_TEST);
+ }
+
+ /* Draw Face Angles */
+ if(G.f & G_DRAW_FACEANG) {
+ BIF_GetThemeColor3fv(TH_TEXT, col);
+ col[2]= col[2]*0.7 + 0.3;
+ glColor3fv(col);
+
+ glDisable(GL_DEPTH_TEST);
+ efa= em->faces.first;
+ while(efa) {
+ if(efa->v1->h==0 && efa->v2->h==0 && efa->v3->h==0 && (efa->v4==NULL || efa->v4->h==0)) {
+
+ /* Calculate the area of 4 vert face */
+ if (efa->v4) {
+ /*Vec 1*/
+ if (efa->v1->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v1->co,efa->v2->co,efa->v4->co));
+ fvec[0] = (efa->v1->co[0]*20 + efa->v2->co[0] + efa->v3->co[0] + efa->v4->co[0]) / 23;
+ fvec[1] = (efa->v1->co[1]*20 + efa->v2->co[1] + efa->v3->co[1] + efa->v4->co[1]) / 23;
+ fvec[2] = (efa->v1->co[2]*20 + efa->v2->co[2] + efa->v3->co[2] + efa->v4->co[2]) / 23;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ /*Vec 2*/
+ if (efa->v2->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v2->co,efa->v1->co,efa->v3->co));
+ fvec[0] = (efa->v2->co[0]*20 + efa->v1->co[0] + efa->v3->co[0] + efa->v4->co[0]) / 23;
+ fvec[1] = (efa->v2->co[1]*20 + efa->v1->co[1] + efa->v3->co[1] + efa->v4->co[1]) / 23;
+ fvec[2] = (efa->v2->co[2]*20 + efa->v1->co[2] + efa->v3->co[2] + efa->v4->co[2]) / 23;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ /*Vec 3*/
+ if (efa->v3->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v3->co,efa->v2->co,efa->v4->co));
+ fvec[0] = (efa->v3->co[0]*20 + efa->v2->co[0] + efa->v1->co[0] + efa->v4->co[0]) / 23;
+ fvec[1] = (efa->v3->co[1]*20 + efa->v2->co[1] + efa->v1->co[1] + efa->v4->co[1]) / 23;
+ fvec[2] = (efa->v3->co[2]*20 + efa->v2->co[2] + efa->v1->co[2] + efa->v4->co[2]) / 23;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ /*Vec 4*/
+ if (efa->v4->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v4->co,efa->v1->co,efa->v3->co));
+ fvec[0] = (efa->v4->co[0]*20 + efa->v2->co[0] + efa->v3->co[0] + efa->v1->co[0]) / 23;
+ fvec[1] = (efa->v4->co[1]*20 + efa->v2->co[1] + efa->v3->co[1] + efa->v1->co[1]) / 23;
+ fvec[2] = (efa->v4->co[2]*20 + efa->v2->co[2] + efa->v3->co[2] + efa->v1->co[2]) / 23;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ } else { /* we have 3 verts in the face */
+
+ /*Vec 1*/
+ if (efa->v1->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v1->co,efa->v2->co,efa->v3->co));
+ fvec[0] = (efa->v1->co[0]*15 + efa->v2->co[0] + efa->v3->co[0]) / 17;
+ fvec[1] = (efa->v1->co[1]*15 + efa->v2->co[1] + efa->v3->co[1]) / 17;
+ fvec[2] = (efa->v1->co[2]*15 + efa->v2->co[2] + efa->v3->co[2]) / 17;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ /*Vec 2*/
+ if (efa->v2->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v2->co,efa->v1->co,efa->v3->co));
+ fvec[0] = (efa->v2->co[0]*15 + efa->v1->co[0] + efa->v3->co[0]) / 17;
+ fvec[1] = (efa->v2->co[1]*15 + efa->v1->co[1] + efa->v3->co[1]) / 17;
+ fvec[2] = (efa->v2->co[2]*15 + efa->v1->co[2] + efa->v3->co[2]) / 17;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ /*Vec 3*/
+ if (efa->v3->f & 1) {
+ sprintf(val,"%.3f", VecAngle3(efa->v3->co,efa->v2->co,efa->v1->co));
+ fvec[0] = (efa->v3->co[0]*15 + efa->v2->co[0] + efa->v1->co[0]) / 17;
+ fvec[1] = (efa->v3->co[1]*15 + efa->v2->co[1] + efa->v1->co[1]) / 17;
+ fvec[2] = (efa->v3->co[2]*15 + efa->v2->co[2] + efa->v1->co[2]) / 17;
+ glRasterPos3f(fvec[0], fvec[1], fvec[2]);
+ BIF_DrawString( G.fonts, val, 0);
+ }
+ }
+ }
+ efa= efa->next;
+ }
+ glEnable(GL_DEPTH_TEST);
+ }
+
+
+
+ } else { /* Object mode draw */
if(me==NULL) return;
More information about the Bf-committers
mailing list