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:
authorJoseph Eagar <joeedh@gmail.com>2009-05-18 19:13:11 +0400
committerJoseph Eagar <joeedh@gmail.com>2009-05-18 19:13:11 +0400
commitb99948d1daed4307cc384775de49e0eb006397f4 (patch)
treec697038864bfd3c682dea64daf1941763f8d7a72
parent5e1fba0e43381a1965189853eb8b1ee60bb878bb (diff)
add primitives works again. also switching selection modes almost works correctly, going from edge mode to vert messes up selection though.
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c65
-rw-r--r--source/blender/editors/mesh/editmesh.c6
2 files changed, 36 insertions, 35 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c
index ebfeca2e7ea..c68a9cc5cb5 100644
--- a/source/blender/bmesh/intern/bmesh_marking.c
+++ b/source/blender/bmesh/intern/bmesh_marking.c
@@ -27,23 +27,40 @@
*
*/
+static void recount_totsels(BMesh *bm)
+{
+ BMIter iter;
+ BMHeader *ele;
+ int types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH};
+ int *tots[3];
+ int i;
+
+ /*recount tot*sel variables*/
+ bm->totvertsel = bm->totedgesel = bm->totfacesel = 0;
+ tots[0] = &bm->totvertsel;
+ tots[1] = &bm->totedgesel;
+ tots[2] = &bm->totfacesel;
+
+ for (i=0; i<3; i++) {
+ ele = BMIter_New(&iter, bm, types[i], NULL);
+ for ( ; ele; ele=BMIter_Step(&iter)) {
+ if (BM_TestHFlag(ele, BM_SELECT)) *tots[i] += 1;
+ }
+ }
+}
+
void BM_SelectMode_Flush(BMesh *bm)
{
BMEdge *e;
BMLoop *l;
BMFace *f;
- BMHeader *ele;
BMIter edges;
BMIter faces;
- BMIter iter;
-
- int types[3] = {BM_VERTS_OF_MESH, BM_EDGES_OF_MESH, BM_FACES_OF_MESH};
- int *tots[3];
- int i;
+
int totsel;
- if(bm->selectmode & BM_VERT){
+ if(bm->selectmode & SCE_SELECT_VERTEX){
for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges)){
if(BM_TestHFlag(e->v1, BM_SELECT) && BM_TestHFlag(e->v2, BM_SELECT)) BM_SetHFlag(e, 1);
else BM_ClearHFlag(e, 0);
@@ -63,7 +80,7 @@ void BM_SelectMode_Flush(BMesh *bm)
BM_ClearHFlag(f, 0);
}
}
- else if(bm->selectmode & BM_EDGE) {
+ else if(bm->selectmode & SCE_SELECT_EDGE) {
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces)){
totsel = 0;
l=f->loopbase;
@@ -80,18 +97,7 @@ void BM_SelectMode_Flush(BMesh *bm)
}
}
- /*recount tot*sel variables*/
- bm->totvertsel = bm->totedgesel = bm->totfacesel = 0;
- tots[0] = &bm->totvertsel;
- tots[1] = &bm->totedgesel;
- tots[2] = &bm->totfacesel;
-
- for (i=0; i<3; i++) {
- ele = BMIter_New(&iter, bm, types[i], NULL);
- for ( ; ele; ele=BMIter_Step(&iter)) {
- if (BM_TestHFlag(ele, BM_SELECT)) *tots[i] += 1;
- }
- }
+ recount_totsels(bm);
}
/*
@@ -164,8 +170,8 @@ void BM_Select_Edge(BMesh *bm, BMEdge *e, int select)
if (!BM_TestHFlag(e, BM_SELECT)) bm->totedgesel += 1;
BM_SetHFlag(&(e->head), BM_SELECT);
- BM_SetHFlag(&(e->v1->head), BM_SELECT);
- BM_SetHFlag(&(e->v2->head), BM_SELECT);
+ BM_SetHFlag(e->v1, BM_SELECT);
+ BM_SetHFlag(e->v2, BM_SELECT);
}
else{
if (BM_TestHFlag(e, BM_SELECT)) bm->totedgesel -= 1;
@@ -232,29 +238,30 @@ void BM_Selectmode_Set(BMesh *bm, int selectmode)
bm->selectmode = selectmode;
- if(bm->selectmode & BM_VERT){
+ if(bm->selectmode & SCE_SELECT_VERTEX) {
for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges))
- BM_Select_Edge(bm, e, 0);
+ BM_ClearHFlag(e, 0);
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces))
- BM_Select_Face(bm, f, 0);
+ BM_ClearHFlag(f, 0);
BM_SelectMode_Flush(bm);
}
- else if(bm->selectmode & BM_EDGE){
+ else if(bm->selectmode & SCE_SELECT_EDGE) {
for(v= BMIter_New(&verts, bm, BM_VERTS_OF_MESH, bm ); v; v= BMIter_Step(&verts))
- BM_Select_Vert(bm, v, 0);
+ BM_ClearHFlag(v, 0);
for(e= BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges)){
if(BM_TestHFlag(&(e->head), BM_SELECT))
BM_Select_Edge(bm, e, 1);
}
BM_SelectMode_Flush(bm);
}
- else if(bm->selectmode & BM_FACE){
+ else if(bm->selectmode & SCE_SELECT_FACE) {
for(e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm ); e; e= BMIter_Step(&edges))
- BM_Select_Edge(bm, e, 0);
+ BM_ClearHFlag(e, 0);
for(f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm ); f; f= BMIter_Step(&faces)){
if(BM_TestHFlag(&(f->head), BM_SELECT))
BM_Select_Face(bm, f, 1);
}
+ BM_SelectMode_Flush(bm);
}
}
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index f75907f9247..ac4a8ecbb62 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -804,15 +804,9 @@ EditMesh *make_editMesh(Scene *scene, Object *ob)
em->totedge= me->totedge;
em->totface= me->totface;
- if(tot==0) {
- return NULL;
- }
-
actkey = ob_get_keyblock(ob);
if(actkey) {
tot= actkey->totelem;
- /* undo-ing in past for previous editmode sessions gives corrupt 'keyindex' values */
- undo_editmode_clear();
}