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.
This commit is contained in:
@@ -1332,7 +1332,7 @@ void winqreadtextspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZKEY:
|
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) {
|
if (G.qual & LR_SHIFTKEY) {
|
||||||
txt_do_redo(text);
|
txt_do_redo(text);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1711,7 +1711,7 @@ void editmesh_mark_seam(int clear)
|
|||||||
void Edge_Menu() {
|
void Edge_Menu() {
|
||||||
short ret;
|
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)
|
switch(ret)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2381,8 +2381,6 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
for(efa = em->faces.first;efa;efa = efa->next){
|
for(efa = em->faces.first;efa;efa = efa->next){
|
||||||
if((efa->e1 == eed || efa->e2 == eed) || (efa->e3 == eed || efa->e4 == eed)){
|
if((efa->e1 == eed || efa->e2 == eed) || (efa->e3 == eed || efa->e4 == eed)){
|
||||||
if(facecount == 2){
|
if(facecount == 2){
|
||||||
scrarea_do_windraw(curarea); /// what is this for? (ton)
|
|
||||||
screen_swapbuffers();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(facecount < 2)
|
if(facecount < 2)
|
||||||
@@ -2391,11 +2389,9 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(facecount < 2){
|
if(facecount < 2){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* how many edges does each face have */
|
/* how many edges does each face have */
|
||||||
if(face[0]->e4 == NULL)
|
if(face[0]->e4 == NULL)
|
||||||
@@ -2407,7 +2403,6 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
else
|
else
|
||||||
fac2=4;
|
fac2=4;
|
||||||
|
|
||||||
|
|
||||||
/*store the face info in a handy array */
|
/*store the face info in a handy array */
|
||||||
faces[0][0] = face[0]->v1;
|
faces[0][0] = face[0]->v1;
|
||||||
faces[0][1] = face[0]->v2;
|
faces[0][1] = face[0]->v2;
|
||||||
@@ -2469,7 +2464,6 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
v3 = eed->v1;
|
v3 = eed->v1;
|
||||||
v4 = eed->v2;
|
v4 = eed->v2;
|
||||||
|
|
||||||
|
|
||||||
/*figure out where the edges verts lie one the 2 faces */
|
/*figure out where the edges verts lie one the 2 faces */
|
||||||
for(i=0;i<4;i++){
|
for(i=0;i<4;i++){
|
||||||
if(v1 == faces[0][i])
|
if(v1 == faces[0][i])
|
||||||
@@ -2593,18 +2587,9 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fac1 == 3)
|
/* redo the selection */
|
||||||
newFace[0]->e3->f2 |= 2;
|
faces[0][(p1+1)%fac1]->f |= SELECT;
|
||||||
else if(fac1 == 4)
|
faces[1][(p3+1)%fac2]->f |= SELECT;
|
||||||
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;
|
|
||||||
|
|
||||||
/* get rid of the old edge and faces*/
|
/* get rid of the old edge and faces*/
|
||||||
remedge(eed);
|
remedge(eed);
|
||||||
@@ -2617,52 +2602,62 @@ static void edge_rotate(EditEdge *eed)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* only accepts 1 selected edge, or 2 selected faces */
|
||||||
void edge_rotate_selected()
|
void edge_rotate_selected()
|
||||||
{
|
{
|
||||||
EditEdge *eed,*temp;
|
EditEdge *eed;
|
||||||
EditVert *ev;
|
EditFace *efa;
|
||||||
short edgeCount = 0;
|
short edgeCount = 0;
|
||||||
|
|
||||||
/* Clear the f1 flag */
|
/*clear new flag for new edges, count selected edges */
|
||||||
for(ev = G.editMesh->verts.first;ev;ev = ev->next)
|
for(eed= G.editMesh->edges.first; eed; eed= eed->next){
|
||||||
ev->f1 &= ~1;
|
eed->f1= 0;
|
||||||
|
|
||||||
/*clear new flag for new edges*/
|
|
||||||
for(eed = G.editMesh->edges.first;eed;eed = eed->next){
|
|
||||||
eed->f2 &= ~2;
|
eed->f2 &= ~2;
|
||||||
edgeCount++;
|
if(eed->f & SELECT) edgeCount++;
|
||||||
}
|
}
|
||||||
eed = G.editMesh->edges.first;
|
|
||||||
while(eed){
|
if(edgeCount>1) {
|
||||||
if(edgeCount-- < 0){
|
/* more selected edges, check faces */
|
||||||
/* To prevent an infinite loop */
|
for(efa= G.editMesh->faces.first; efa; efa= efa->next) {
|
||||||
break;
|
if(efa->f & SELECT) {
|
||||||
|
efa->e1->f1++;
|
||||||
|
efa->e2->f1++;
|
||||||
|
efa->e3->f1++;
|
||||||
|
if(efa->e4) efa->e4->f1++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(eed->f2 & 2){
|
edgeCount= 0;
|
||||||
/* Do not rotate newly created edges */
|
for(eed= G.editMesh->edges.first; eed; eed= eed->next) {
|
||||||
eed = eed->next;
|
if(eed->f1==2) edgeCount++;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if(eed->f & SELECT){ // changed this... (ton)
|
if(edgeCount==1) {
|
||||||
temp = eed;
|
for(eed= G.editMesh->edges.first; eed; eed= eed->next) {
|
||||||
eed = eed->next;
|
if(eed->f1==2) {
|
||||||
edge_rotate(temp);
|
edge_rotate(eed);
|
||||||
} else
|
break;
|
||||||
eed = eed->next;
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else error("Select one edge or two adjacent faces");
|
||||||
}
|
}
|
||||||
|
else if(edgeCount==1) {
|
||||||
/*clear new edge flags*/
|
for(eed= G.editMesh->edges.first; eed; eed= eed->next) {
|
||||||
for(eed = G.editMesh->edges.first; eed; eed = eed->next)
|
if(eed->f & SELECT) {
|
||||||
eed->f2 &= ~2;
|
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 */
|
/* flush selected vertices (again) to edges/faces */
|
||||||
EM_select_flush();
|
EM_select_flush();
|
||||||
|
|
||||||
allqueue(REDRAWVIEW3D, 0);
|
allqueue(REDRAWVIEW3D, 0);
|
||||||
|
|
||||||
BIF_undo_push("Rotate Edges");
|
BIF_undo_push("Rotate Edge");
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* BEVEL CODE STARTS HERE ********************/
|
/******************* BEVEL CODE STARTS HERE ********************/
|
||||||
|
|||||||
@@ -1921,7 +1921,7 @@ void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
|
|||||||
case 9: /* Cease SubSurf */
|
case 9: /* Cease SubSurf */
|
||||||
transform('e');
|
transform('e');
|
||||||
break;
|
break;
|
||||||
case 10: /* Rotate Edges */
|
case 10: /* Rotate Edge */
|
||||||
edge_rotate_selected();
|
edge_rotate_selected();
|
||||||
break;
|
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, "");
|
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);
|
uiBlockSetDirection(block, UI_RIGHT);
|
||||||
uiTextBoundsBlock(block, 60);
|
uiTextBoundsBlock(block, 60);
|
||||||
|
|||||||
@@ -987,16 +987,20 @@ int blenderqread(unsigned short event, short val)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case YKEY: // redo alternative
|
case YKEY: // redo alternative
|
||||||
if(G.qual==LR_CTRLKEY) {
|
if(textspace==0) {
|
||||||
BIF_redo();
|
if(G.qual==LR_CTRLKEY) {
|
||||||
return 0;
|
BIF_redo();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZKEY: // undo
|
case ZKEY: // undo
|
||||||
if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/commandkey are accepted
|
if(textspace==0) {
|
||||||
if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo();
|
if(G.qual & (LR_CTRLKEY|LR_COMMANDKEY)) { // all combos with ctrl/commandkey are accepted
|
||||||
else BIF_redo(); // all combos with ctrl is redo
|
if ELEM(G.qual, LR_CTRLKEY, LR_COMMANDKEY) BIF_undo();
|
||||||
return 0;
|
else BIF_redo(); // all combos with ctrl is redo
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1728,7 +1728,7 @@ static TBitem tb_mesh_edit_edge[]= {
|
|||||||
{ 0, "SEPR", 0, NULL},
|
{ 0, "SEPR", 0, NULL},
|
||||||
{ 0, "Crease SubSurf|Shift E", 9, NULL},
|
{ 0, "Crease SubSurf|Shift E", 9, NULL},
|
||||||
{ 0, "SEPR", 0, 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}};
|
{ -1, "", 0, do_view3d_edit_mesh_edgesmenu}};
|
||||||
|
|
||||||
static TBitem tb_mesh_edit_face[]= {
|
static TBitem tb_mesh_edit_face[]= {
|
||||||
|
|||||||
Reference in New Issue
Block a user