diff options
author | Ton Roosendaal <ton@blender.org> | 2004-11-10 14:14:11 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-11-10 14:14:11 +0300 |
commit | 46326b62b553f39e3d691ebf611eb3544d6b6f52 (patch) | |
tree | 13858c4b12713e7c5611f10fb5dcb07cbb26a8cd | |
parent | a534361b3e41886265fbad6d649f56d8ded021ec (diff) |
1) Fix for bugs #1735 #1759
Rotate edges was unfinished still, and not supposed to work on large
selections. Code cleaned up some, and restricted to work on a single
selected edge, or two adjacent selected faces.
Also changed menu description, and give error() on wrong selection.
2) Fix for undo mixup in texteditor
Global hotkey list now passes on ctrl+z (global undo) to local queue
in textwindow. (Also for ctrl+y). Scriptwindow also doesn't accept
global undo key.
-rw-r--r-- | source/blender/src/drawtext.c | 2 | ||||
-rw-r--r-- | source/blender/src/editmesh_mods.c | 2 | ||||
-rw-r--r-- | source/blender/src/editmesh_tools.c | 93 | ||||
-rw-r--r-- | source/blender/src/header_view3d.c | 4 | ||||
-rw-r--r-- | source/blender/src/toets.c | 18 | ||||
-rw-r--r-- | source/blender/src/toolbox.c | 2 |
6 files changed, 60 insertions, 61 deletions
diff --git a/source/blender/src/drawtext.c b/source/blender/src/drawtext.c index 46a8492e8a5..ef5656c7f1f 100644 --- a/source/blender/src/drawtext.c +++ b/source/blender/src/drawtext.c @@ -1332,7 +1332,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt) } break; case ZKEY: - if (G.qual & LR_ALTKEY || G.qual & LR_CTRLKEY) { + if (G.qual & (LR_ALTKEY|LR_CTRLKEY|LR_COMMANDKEY)) { if (G.qual & LR_SHIFTKEY) { txt_do_redo(text); } else { diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c index bfe4b7b652d..7156a9dd582 100644 --- a/source/blender/src/editmesh_mods.c +++ b/source/blender/src/editmesh_mods.c @@ -1711,7 +1711,7 @@ void editmesh_mark_seam(int clear) void Edge_Menu() { short ret; - ret= pupmenu("Edge Specials%t|Mark Seam %x1|Clear Seam %x2|Rotate Edges %x3"); + ret= pupmenu("Edge Specials%t|Mark Seam %x1|Clear Seam %x2|Rotate Edge %x3"); switch(ret) { diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c index 46934bcbe46..174056f7f66 100644 --- a/source/blender/src/editmesh_tools.c +++ b/source/blender/src/editmesh_tools.c @@ -2381,8 +2381,6 @@ static void edge_rotate(EditEdge *eed) for(efa = em->faces.first;efa;efa = efa->next){ if((efa->e1 == eed || efa->e2 == eed) || (efa->e3 == eed || efa->e4 == eed)){ if(facecount == 2){ - scrarea_do_windraw(curarea); /// what is this for? (ton) - screen_swapbuffers(); return; } if(facecount < 2) @@ -2391,11 +2389,9 @@ static void edge_rotate(EditEdge *eed) } } - if(facecount < 2){ return; } - /* how many edges does each face have */ if(face[0]->e4 == NULL) @@ -2407,7 +2403,6 @@ static void edge_rotate(EditEdge *eed) else fac2=4; - /*store the face info in a handy array */ faces[0][0] = face[0]->v1; faces[0][1] = face[0]->v2; @@ -2469,7 +2464,6 @@ static void edge_rotate(EditEdge *eed) v3 = eed->v1; v4 = eed->v2; - /*figure out where the edges verts lie one the 2 faces */ for(i=0;i<4;i++){ if(v1 == faces[0][i]) @@ -2593,18 +2587,9 @@ static void edge_rotate(EditEdge *eed) return; } - if(fac1 == 3) - newFace[0]->e3->f2 |= 2; - else if(fac1 == 4) - newFace[0]->e4->f2 |= 2; - - /* added this for proper select flags, probably whats below is obsolete then */ - EM_select_face(newFace[0], 1); - EM_select_face(newFace[1], 1); - - /* mark the f1's of the verts for re-selection */ - faces[0][(p1+1)%fac1]->f1 |= 1; - faces[1][(p3+1)%fac2]->f1 |= 1; + /* redo the selection */ + faces[0][(p1+1)%fac1]->f |= SELECT; + faces[1][(p3+1)%fac2]->f |= SELECT; /* get rid of the old edge and faces*/ remedge(eed); @@ -2617,52 +2602,62 @@ static void edge_rotate(EditEdge *eed) return; } - +/* only accepts 1 selected edge, or 2 selected faces */ void edge_rotate_selected() { - EditEdge *eed,*temp; - EditVert *ev; + EditEdge *eed; + EditFace *efa; short edgeCount = 0; - /* Clear the f1 flag */ - for(ev = G.editMesh->verts.first;ev;ev = ev->next) - ev->f1 &= ~1; - - /*clear new flag for new edges*/ - for(eed = G.editMesh->edges.first;eed;eed = eed->next){ + /*clear new flag for new edges, count selected edges */ + for(eed= G.editMesh->edges.first; eed; eed= eed->next){ + eed->f1= 0; eed->f2 &= ~2; - edgeCount++; + if(eed->f & SELECT) edgeCount++; } - eed = G.editMesh->edges.first; - while(eed){ - if(edgeCount-- < 0){ - /* To prevent an infinite loop */ - break; + + if(edgeCount>1) { + /* more selected edges, check faces */ + for(efa= G.editMesh->faces.first; efa; efa= efa->next) { + if(efa->f & SELECT) { + efa->e1->f1++; + efa->e2->f1++; + efa->e3->f1++; + if(efa->e4) efa->e4->f1++; + } } - if(eed->f2 & 2){ - /* Do not rotate newly created edges */ - eed = eed->next; - continue; + edgeCount= 0; + for(eed= G.editMesh->edges.first; eed; eed= eed->next) { + if(eed->f1==2) edgeCount++; } - if(eed->f & SELECT){ // changed this... (ton) - temp = eed; - eed = eed->next; - edge_rotate(temp); - } else - eed = eed->next; - + if(edgeCount==1) { + for(eed= G.editMesh->edges.first; eed; eed= eed->next) { + if(eed->f1==2) { + edge_rotate(eed); + break; + } + } + } + else error("Select one edge or two adjacent faces"); } - - /*clear new edge flags*/ - for(eed = G.editMesh->edges.first; eed; eed = eed->next) - eed->f2 &= ~2; + else if(edgeCount==1) { + for(eed= G.editMesh->edges.first; eed; eed= eed->next) { + if(eed->f & SELECT) { + EM_select_edge(eed, 0); + edge_rotate(eed); + break; + } + } + } + else error("Select one edge or two adjacent faces"); + /* flush selected vertices (again) to edges/faces */ EM_select_flush(); allqueue(REDRAWVIEW3D, 0); - BIF_undo_push("Rotate Edges"); + BIF_undo_push("Rotate Edge"); } /******************* BEVEL CODE STARTS HERE ********************/ diff --git a/source/blender/src/header_view3d.c b/source/blender/src/header_view3d.c index 6257a4fa52b..d92d4a778e0 100644 --- a/source/blender/src/header_view3d.c +++ b/source/blender/src/header_view3d.c @@ -1921,7 +1921,7 @@ void do_view3d_edit_mesh_edgesmenu(void *arg, int event) case 9: /* Cease SubSurf */ transform('e'); break; - case 10: /* Rotate Edges */ + case 10: /* Rotate Edge */ edge_rotate_selected(); break; } @@ -1963,7 +1963,7 @@ static uiBlock *view3d_edit_mesh_edgesmenu(void *arg_unused) } uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, ""); - uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Selected|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, ""); uiBlockSetDirection(block, UI_RIGHT); uiTextBoundsBlock(block, 60); diff --git a/source/blender/src/toets.c b/source/blender/src/toets.c index a7ce1eb3362..dcef102e54c 100644 --- a/source/blender/src/toets.c +++ b/source/blender/src/toets.c @@ -987,16 +987,20 @@ int blenderqread(unsigned short event, short val) } break; case YKEY: // redo alternative - if(G.qual==LR_CTRLKEY) { - BIF_redo(); - return 0; + if(textspace==0) { + if(G.qual==LR_CTRLKEY) { + BIF_redo(); + return 0; + } } break; case ZKEY: // undo - if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/commandkey are accepted - if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo(); - else BIF_redo(); // all combos with ctrl is redo - return 0; + if(textspace==0) { + if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/commandkey are accepted + if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo(); + else BIF_redo(); // all combos with ctrl is redo + return 0; + } } break; } diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c index 7e34acff2b8..659bba0c32b 100644 --- a/source/blender/src/toolbox.c +++ b/source/blender/src/toolbox.c @@ -1728,7 +1728,7 @@ static TBitem tb_mesh_edit_edge[]= { { 0, "SEPR", 0, NULL}, { 0, "Crease SubSurf|Shift E", 9, NULL}, { 0, "SEPR", 0, NULL}, -{ 0, "Rotate Edges|Ctrl E", 10, NULL}, +{ 0, "Rotate Edge|Ctrl E", 10, NULL}, { -1, "", 0, do_view3d_edit_mesh_edgesmenu}}; static TBitem tb_mesh_edit_face[]= { |