Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2005-07-23 11:45:39 +0400
committerDaniel Dunbar <daniel@zuster.org>2005-07-23 11:45:39 +0400
commit32255b65df00897ea9f5ec960eec0040edd946be (patch)
treefac29f661ca0baab417003ab99a1660d364dee77 /source/blender/src/drawobject.c
parente125ed59586d8600135e2a3eb96a133b9f66b44d (diff)
- added DerivedMesh.drawMapped{VertNormals,FaceNormals,FaceCenters}EM
functions and implementation for EditmeshDerivedMesh - switch drawobject to drawing normals/centers through the DerivedMesh - added G_DRAW_VNORMALS flag and button, implementation is not yet complete because editmesh normals are not updated regularly - switch editmesh draw buttons to use uiDefButBit (can't we get some monkey to convert all of the uiDefBut calls with TOG|BIT type? It makes grepping the source much nicer)
Diffstat (limited to 'source/blender/src/drawobject.c')
-rw-r--r--source/blender/src/drawobject.c50
1 files changed, 24 insertions, 26 deletions
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 20a6bb1df3a..391a1acb248 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -1237,35 +1237,29 @@ static unsigned char *calc_weightpaint_colors(Object *ob)
* logic!!!
*/
-static void draw_em_face_normals(EditMesh *em, float normalLength)
+static int ef_nonhiddenAndFgon__setDrawOptions(void *userData, EditFace *efa)
{
- EditFace *efa;
-
- glBegin(GL_LINES);
- for(efa= em->faces.first; efa; efa= efa->next) {
- if(efa->h==0 && efa->fgonf!=EM_FGON) {
- glVertex3fv(efa->cent);
- glVertex3f( efa->cent[0] + normalLength*efa->n[0],
- efa->cent[1] + normalLength*efa->n[1],
- efa->cent[2] + normalLength*efa->n[2]);
-
- }
+ if (userData) {
+ int sel = ((int) userData) - 1;
+ return (efa->h==0 && efa->fgonf!=EM_FGON && (efa->f&SELECT)==sel);
+ } else {
+ return (efa->h==0 && efa->fgonf!=EM_FGON);
}
- glEnd();
}
-
-static void draw_em_face_centers(EditMesh *em, int sel) {
- EditFace *efa;
-
- bglBegin(GL_POINTS);
- for(efa= em->faces.first; efa; efa= efa->next) {
- if(efa->h==0 && efa->fgonf!=EM_FGON && (efa->f&SELECT)==sel) {
- bglVertex3fv(efa->cent);
- }
- }
- bglEnd();
+static int ev_nonhidden__setDrawOptions(void *userData, EditVert *eve)
+{
+ return (eve->h==0);
+}
+static void draw_dm_face_normals(DerivedMesh *dm) {
+ dm->drawMappedFaceNormalsEM(dm, G.scene->editbutsize, ef_nonhiddenAndFgon__setDrawOptions, 0);
+}
+static void draw_dm_face_centers(DerivedMesh *dm, int sel) {
+ dm->drawMappedFaceCentersEM(dm, ef_nonhiddenAndFgon__setDrawOptions, (void*) (sel+1));
}
+static void draw_dm_vert_normals(DerivedMesh *dm) {
+ dm->drawMappedVertNormalsEM(dm, G.scene->editbutsize, ev_nonhidden__setDrawOptions, 0);
+}
/* Draw verts with color set based on selection */
static int draw_dm_verts__setDrawOptions(void *userData, EditVert *eve)
@@ -1415,7 +1409,7 @@ static void draw_em_fancy_verts(EditMesh *em, DerivedMesh *cageDM)
if(G.scene->selectmode & SCE_SELECT_FACE) {
glPointSize(fsize);
glColor4ubv(fcol);
- draw_em_face_centers(em, sel);
+ draw_dm_face_centers(cageDM, sel);
}
if (pass==0) {
@@ -1728,7 +1722,11 @@ static void draw_em_fancy(Object *ob, EditMesh *em, DerivedMesh *cageDM, Derived
if(G.f & G_DRAWNORMALS) {
BIF_ThemeColor(TH_NORMAL);
- draw_em_face_normals(em, G.scene->editbutsize);
+ draw_dm_face_normals(cageDM);
+ }
+ if(G.f & G_DRAW_VNORMALS) {
+ BIF_ThemeColor(TH_NORMAL);
+ draw_dm_vert_normals(cageDM);
}
if(G.f & (G_DRAW_EDGELEN|G_DRAW_FACEAREA|G_DRAW_EDGEANG))