diff options
author | Campbell Barton <ideasman42@gmail.com> | 2007-09-25 07:31:12 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2007-09-25 07:31:12 +0400 |
commit | 2c0db4d707f02f747496308565de0d902d55f5aa (patch) | |
tree | 21d6ece112cb1c14b5a4b85d50f2d3b9b3256246 /source/blender/blenkernel | |
parent | 3a5db1c40cce63fc97142ee6782d25299a8941a4 (diff) |
made active vert/edge/face draw properly with modifiers applied and made their theme default white.
removed active face draw in Face/UV (which is now paint mask mode) mode.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 18 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_blender.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 24 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/subsurf_ccg.c | 95 |
4 files changed, 94 insertions, 45 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 4a19bfb9249..c710e16ad1a 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -435,5 +435,23 @@ void weight_to_rgb(float input, float *fr, float *fg, float *fb); /* determines required DerivedMesh data according to view and edit modes */ CustomDataMask get_viewedit_datamask(); +/* repeate this pattern + X000X000 + 00000000 + 00X000X0 + 00000000 */ + +#define DM_FACE_STIPPLE \ +{ \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0, \ + 136,136,136,136,0,0,0,0,34,34,34,34,0,0,0,0 \ +} + #endif diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 0a202dfadc3..c79076b4e68 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -44,7 +44,7 @@ struct ListBase; struct MemFile; #define BLENDER_VERSION 245 -#define BLENDER_SUBVERSION 2 +#define BLENDER_SUBVERSION 3 #define BLENDER_MINVERSION 240 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index ff98f6f642e..299bbc10241 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -633,9 +633,10 @@ static void emDM_foreachMappedFaceCenter(DerivedMesh *dm, void (*func)(void *use } static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r), void *userData, int useColors) { + GLubyte act_face_stipple[32*32/8] = DM_FACE_STIPPLE; EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm; EditFace *efa; - int i; + int i, draw; if (emdm->vertexCos) { EditVert *eve; @@ -645,7 +646,13 @@ static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) { int drawSmooth = (efa->flag & ME_SMOOTH); - if(!setDrawOptions || setDrawOptions(userData, i, &drawSmooth)) { + draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth); + if(draw) { + if (draw==2) { /* enabled with stipple */ + glEnable(GL_POLYGON_STIPPLE); + glPolygonStipple(act_face_stipple); + } + glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT); glBegin(efa->v4?GL_QUADS:GL_TRIANGLES); @@ -668,12 +675,20 @@ static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us } } glEnd(); + + if (draw==2) + glDisable(GL_POLYGON_STIPPLE); } } } else { for (i=0,efa= emdm->em->faces.first; efa; i++,efa= efa->next) { int drawSmooth = (efa->flag & ME_SMOOTH); - if(!setDrawOptions || setDrawOptions(userData, i, &drawSmooth)) { + draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, i, &drawSmooth); + if(draw) { + if (draw==2) { /* enabled with stipple */ + glEnable(GL_POLYGON_STIPPLE); + glPolygonStipple(act_face_stipple); + } glShadeModel(drawSmooth?GL_SMOOTH:GL_FLAT); glBegin(efa->v4?GL_QUADS:GL_TRIANGLES); @@ -696,6 +711,9 @@ static void emDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us } } glEnd(); + + if (draw==2) + glDisable(GL_POLYGON_STIPPLE); } } } diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c index 646157991bb..0b1563beced 100644 --- a/source/blender/blenkernel/intern/subsurf_ccg.c +++ b/source/blender/blenkernel/intern/subsurf_ccg.c @@ -1908,6 +1908,7 @@ static void ccgDM_drawUVEdges(DerivedMesh *dm) } static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index, int *drawSmooth_r), void *userData, int useColors) { + GLubyte act_face_stipple[32*32/8] = DM_FACE_STIPPLE; CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm; CCGSubSurf *ss = ccgdm->ss; CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss); @@ -1924,51 +1925,63 @@ static void ccgDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *u if(faceFlags) drawSmooth = (faceFlags[origIndex*4] & ME_SMOOTH); else drawSmooth = 1; - - if (index!=-1 && (!setDrawOptions || setDrawOptions(userData, index, &drawSmooth))) { - for (S=0; S<numVerts; S++) { - VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S); - if (drawSmooth) { - glShadeModel(GL_SMOOTH); - for (y=0; y<gridSize-1; y++) { - glBegin(GL_QUAD_STRIP); - for (x=0; x<gridSize; x++) { - VertData *a = &faceGridData[(y+0)*gridSize + x]; - VertData *b = &faceGridData[(y+1)*gridSize + x]; - - glNormal3fv(a->no); - glVertex3fv(a->co); - glNormal3fv(b->no); - glVertex3fv(b->co); + + if (index!=-1) { + int draw; + draw = setDrawOptions==NULL ? 1 : setDrawOptions(userData, index, &drawSmooth); + + if (draw) { + if (draw==2) { + glEnable(GL_POLYGON_STIPPLE); + glPolygonStipple(act_face_stipple); + } + + for (S=0; S<numVerts; S++) { + VertData *faceGridData = ccgSubSurf_getFaceGridDataArray(ss, f, S); + if (drawSmooth) { + glShadeModel(GL_SMOOTH); + for (y=0; y<gridSize-1; y++) { + glBegin(GL_QUAD_STRIP); + for (x=0; x<gridSize; x++) { + VertData *a = &faceGridData[(y+0)*gridSize + x]; + VertData *b = &faceGridData[(y+1)*gridSize + x]; + + glNormal3fv(a->no); + glVertex3fv(a->co); + glNormal3fv(b->no); + glVertex3fv(b->co); + } + glEnd(); } - glEnd(); - } - } else { - glShadeModel(GL_FLAT); - glBegin(GL_QUADS); - for (y=0; y<gridSize-1; y++) { - for (x=0; x<gridSize-1; x++) { - float *a = faceGridData[(y+0)*gridSize + x].co; - float *b = faceGridData[(y+0)*gridSize + x + 1].co; - float *c = faceGridData[(y+1)*gridSize + x + 1].co; - float *d = faceGridData[(y+1)*gridSize + x].co; - float a_cX = c[0]-a[0], a_cY = c[1]-a[1], a_cZ = c[2]-a[2]; - float b_dX = d[0]-b[0], b_dY = d[1]-b[1], b_dZ = d[2]-b[2]; - float no[3]; - - no[0] = b_dY*a_cZ - b_dZ*a_cY; - no[1] = b_dZ*a_cX - b_dX*a_cZ; - no[2] = b_dX*a_cY - b_dY*a_cX; - glNormal3fv(no); - - glVertex3fv(d); - glVertex3fv(c); - glVertex3fv(b); - glVertex3fv(a); + } else { + glShadeModel(GL_FLAT); + glBegin(GL_QUADS); + for (y=0; y<gridSize-1; y++) { + for (x=0; x<gridSize-1; x++) { + float *a = faceGridData[(y+0)*gridSize + x].co; + float *b = faceGridData[(y+0)*gridSize + x + 1].co; + float *c = faceGridData[(y+1)*gridSize + x + 1].co; + float *d = faceGridData[(y+1)*gridSize + x].co; + float a_cX = c[0]-a[0], a_cY = c[1]-a[1], a_cZ = c[2]-a[2]; + float b_dX = d[0]-b[0], b_dY = d[1]-b[1], b_dZ = d[2]-b[2]; + float no[3]; + + no[0] = b_dY*a_cZ - b_dZ*a_cY; + no[1] = b_dZ*a_cX - b_dX*a_cZ; + no[2] = b_dX*a_cY - b_dY*a_cX; + glNormal3fv(no); + + glVertex3fv(d); + glVertex3fv(c); + glVertex3fv(b); + glVertex3fv(a); + } } + glEnd(); } - glEnd(); } + if (draw==2) + glDisable(GL_POLYGON_STIPPLE); } } } |