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:
authorTon Roosendaal <ton@blender.org>2004-11-10 14:14:11 +0300
committerTon Roosendaal <ton@blender.org>2004-11-10 14:14:11 +0300
commit46326b62b553f39e3d691ebf611eb3544d6b6f52 (patch)
tree13858c4b12713e7c5611f10fb5dcb07cbb26a8cd
parenta534361b3e41886265fbad6d649f56d8ded021ec (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.c2
-rw-r--r--source/blender/src/editmesh_mods.c2
-rw-r--r--source/blender/src/editmesh_tools.c93
-rw-r--r--source/blender/src/header_view3d.c4
-rw-r--r--source/blender/src/toets.c18
-rw-r--r--source/blender/src/toolbox.c2
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[]= {