From 32255b65df00897ea9f5ec960eec0040edd946be Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 23 Jul 2005 07:45:39 +0000 Subject: - 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) --- source/blender/src/drawobject.c | 50 ++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 26 deletions(-) (limited to 'source/blender/src/drawobject.c') 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)) -- cgit v1.2.3