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>2003-07-21 00:25:30 +0400
committerTon Roosendaal <ton@blender.org>2003-07-21 00:25:30 +0400
commit6b070b3d0d9486efd5ba0f964a34d595857f96cd (patch)
tree9d082ff6175fdb9642c60b8f9f45545149fced7f
parentab76e4594a9c64bf582d001df0b4de822bf0954b (diff)
- added ALT_RIGHTMOUSE select edges in Mesh editmode
- added 'draw edges' mode in F9 menu - changed ugly 'draw faces' in a nice transparant :) - hotkey for screenshots: ALT+CTRL+F3 now works too
-rw-r--r--source/blender/blenkernel/BKE_global.h1
-rw-r--r--source/blender/src/buttons.c1
-rw-r--r--source/blender/src/drawobject.c94
-rw-r--r--source/blender/src/editmesh.c97
-rw-r--r--source/blender/src/editscreen.c2
5 files changed, 151 insertions, 44 deletions
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index ebdd008847c..2f75dd8be16 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -167,6 +167,7 @@ typedef struct Global {
#define G_WEIGHTPAINT 32768 /* __NLA */
#define G_TEXTUREPAINT 65536
#define G_NOFROZEN (1 << 17) // frozen modules inactive
+#define G_DRAWEDGES (1 << 18)
/* G.fileflags */
diff --git a/source/blender/src/buttons.c b/source/blender/src/buttons.c
index b8076c5af1d..6378a536bff 100644
--- a/source/blender/src/buttons.c
+++ b/source/blender/src/buttons.c
@@ -1676,6 +1676,7 @@ void meshbuts(void)
uiDefButF(block, NUM, REDRAWVIEW3D, "NSize:", 1090, 90, 164, 19, &editbutsize, 0.001, 2.0, 10, 0, "Set the length of the face normals");
uiDefButI(block, TOG|BIT|6, REDRAWVIEW3D, "Draw Normals", 1090,70,164,19, &G.f, 0, 0, 0, 0, "Draw face normals");
uiDefButI(block, TOG|BIT|7, REDRAWVIEW3D, "Draw Faces", 1090,50,164,19, &G.f, 0, 0, 0, 0, "Draw faces");
+ uiDefButI(block, TOG|BIT|18, REDRAWVIEW3D, "Draw Edges", 1090,30,164,19, &G.f, 0, 0, 0, 0, "Draw edges");
uiDefButI(block, TOG|BIT|11, 0, "All edges", 1090,10,164,19, &G.f, 0, 0, 0, 0, "Draw edges normally, without optimisation");
uiDrawBlock(block);
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 76dad6c3f15..e5e44617fe7 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -2409,18 +2409,35 @@ static void drawmeshwire(Object *ob)
}
cpack(0x0);
- eed= G.eded.first;
-
- glBegin(GL_LINES);
- while(eed) {
- if(eed->h==0) {
- glVertex3fv(eed->v1->co);
- glVertex3fv(eed->v2->co);
+ if(G.f & G_DRAWEDGES) { /* Use edge Highlighting */
+ glShadeModel(GL_SMOOTH);
+
+ eed= G.eded.first;
+ glBegin(GL_LINES);
+ while(eed) {
+ if(eed->h==0) {
+ if(eed->v1->f & 1) cpack(0x559999); else cpack(0x0);
+ glVertex3fv(eed->v1->co);
+ if(eed->v2->f & 1) cpack(0x559999); else cpack(0x0);
+ glVertex3fv(eed->v2->co);
+ }
+ eed= eed->next;
}
- eed= eed->next;
+ glEnd();
+ glShadeModel(GL_FLAT);
+ }
+ else {
+ eed= G.eded.first;
+ glBegin(GL_LINES);
+ while(eed) {
+ if(eed->h==0) {
+ glVertex3fv(eed->v1->co);
+ glVertex3fv(eed->v2->co);
+ }
+ eed= eed->next;
+ }
+ glEnd();
}
- glEnd();
-
if(ob!=G.obedit) return;
calc_meshverts();
@@ -2458,35 +2475,52 @@ static void drawmeshwire(Object *ob)
}
if(G.f & (G_FACESELECT+G_DRAWFACES)) { /* faces */
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+
evl= G.edvl.first;
while(evl) {
if(evl->v1->h==0 && evl->v2->h==0 && evl->v3->h==0) {
- if(vlakselectedAND(evl, 1)) cpack(0x559999);
- else cpack(0x664466);
-
- if(evl->v4 && evl->v4->h==0) {
-
- CalcCent4f(cent, evl->v1->co, evl->v2->co, evl->v3->co, evl->v4->co);
- glBegin(GL_LINE_LOOP);
- VecMidf(fvec, cent, evl->v1->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, evl->v2->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, evl->v3->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, evl->v4->co); glVertex3fv(fvec);
- glEnd();
- }
- else {
-
- CalcCent3f(cent, evl->v1->co, evl->v2->co, evl->v3->co);
- glBegin(GL_LINE_LOOP);
- VecMidf(fvec, cent, evl->v1->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, evl->v2->co); glVertex3fv(fvec);
- VecMidf(fvec, cent, evl->v3->co); glVertex3fv(fvec);
+ if(1) {
+ if(vlakselectedAND(evl, 1)) glColor4ub(200, 100, 200, 60);
+ else glColor4ub(0, 50, 150, 30);
+
+ glBegin(evl->v4?GL_QUADS:GL_TRIANGLES);
+ glVertex3fv(evl->v1->co);
+ glVertex3fv(evl->v2->co);
+ glVertex3fv(evl->v3->co);
+ if(evl->v4) glVertex3fv(evl->v4->co);
glEnd();
+
+ } else {
+ if(vlakselectedAND(evl, 1)) cpack(0x559999);
+ else cpack(0x664466);
+
+ if(evl->v4 && evl->v4->h==0) {
+
+ CalcCent4f(cent, evl->v1->co, evl->v2->co, evl->v3->co, evl->v4->co);
+ glBegin(GL_LINE_LOOP);
+ VecMidf(fvec, cent, evl->v1->co); glVertex3fv(fvec);
+ VecMidf(fvec, cent, evl->v2->co); glVertex3fv(fvec);
+ VecMidf(fvec, cent, evl->v3->co); glVertex3fv(fvec);
+ VecMidf(fvec, cent, evl->v4->co); glVertex3fv(fvec);
+ glEnd();
+ }
+ else {
+
+ CalcCent3f(cent, evl->v1->co, evl->v2->co, evl->v3->co);
+ glBegin(GL_LINE_LOOP);
+ VecMidf(fvec, cent, evl->v1->co); glVertex3fv(fvec);
+ VecMidf(fvec, cent, evl->v2->co); glVertex3fv(fvec);
+ VecMidf(fvec, cent, evl->v3->co); glVertex3fv(fvec);
+ glEnd();
+ }
}
}
evl= evl->next;
}
+ glDisable(GL_BLEND);
}
}
else {
diff --git a/source/blender/src/editmesh.c b/source/blender/src/editmesh.c
index b86c8baec37..9860f9039e3 100644
--- a/source/blender/src/editmesh.c
+++ b/source/blender/src/editmesh.c
@@ -2033,24 +2033,96 @@ static void tekenvertices_special(int mode, EditVert *act) /* teken = draw */
if(G.zbuf) glEnable(GL_DEPTH_TEST);
}
+static void edge_select(void)
+{
+ EditEdge *closest=0, *eed=0;
+ short found=0, mval[2];
+ float distance[2], v1[2], v2[2], mval2[2];
+
+ calc_meshverts_ext_f2(); /*sets (eve->f & 2) for vertices that aren't visible*/
+
+ if(G.eded.first==0) return;
+ eed=G.eded.first;
+
+ getmouseco_areawin(mval);
+ mval2[0] = (float)mval[0]; /* cast to float because of the pdist function only taking floats...*/
+ mval2[1] = (float)mval[1];
+
+ while(eed) { /*compare the distance to the rest of the edges and find the closest one*/
+ if( !((eed->v1->f & 2) && (eed->v2->f & 2))){ /* Are both vertices of the edge invisible? then don't select the edge*/
+ v1[0] = eed->v1->xs; /* oh great! the screencoordinates are not an array....grrrr*/
+ v1[1] = eed->v1->ys;
+ v2[0] = eed->v2->xs;
+ v2[1] = eed->v2->ys;
+
+ distance[1] = PdistVL2Dfl(mval2, v1, v2);
+
+ if(distance[1]<50){ /* TODO: make this maximum selecting distance selectable (the same with vertice select?) */
+ if(found) { //do we have to compare it to other distances?
+ if (distance[1]<distance[0]){
+ distance[0]=distance[1];
+ closest=eed; /*save the current closest edge*/
+ }
+ } else {
+ distance[0]=distance[1];
+ closest=eed;
+ found=1;
+ }
+ }
+ }
+ eed= eed->next;
+ }
+
+ if(found){ /* Did we find anything that is selectable?*/
+
+ if( (G.qual & LR_SHIFTKEY)==0) {
+ EditVert *eve;
+
+ /* deselectall */
+ for(eve= G.edve.first; eve; eve= eve->next) eve->f&= ~1;
+
+ /* select edge */
+ closest->v1->f |= 1;
+ closest->v2->f |= 1;
+ }
+ else {
+ /* both of the vertices are selected: deselect both*/
+ if((closest->v1->f & 1) && (closest->v2->f & 1) ){
+ closest->v1->f &= ~1;
+ closest->v2->f &= ~1;
+ }
+ else {
+ /* select them */
+ closest->v1->f |= 1;
+ closest->v2->f |= 1;
+ }
+ }
+ allqueue(REDRAWVIEW3D, 0);
+ }
+}
+
void mouse_mesh(void)
{
EditVert *act=0;
- act= findnearestvert(1);
- if(act) {
-
- if((G.qual & LR_SHIFTKEY)==0) {
- tekenvertices_special(0, act);
+ if(G.qual & LR_ALTKEY) edge_select();
+ else {
+
+ act= findnearestvert(1);
+ if(act) {
+
+ if((G.qual & LR_SHIFTKEY)==0) {
+ tekenvertices_special(0, act);
+ }
+ if( (act->f & 1)==0) act->f+= 1;
+ else if(G.qual & LR_SHIFTKEY) act->f-= 1;
+
+ tekenvertices_special(1, act);
+ countall();
}
- if( (act->f & 1)==0) act->f+= 1;
- else if(G.qual & LR_SHIFTKEY) act->f-= 1;
-
- tekenvertices_special(1, act);
- countall();
+
+ rightmouse_transform();
}
-
- rightmouse_transform();
}
static void selectconnectedAll(void)
@@ -2093,7 +2165,6 @@ static void selectconnectedAll(void)
}
-
void selectconnected_mesh(void)
{
EditVert *eve,*v1,*v2,*act= 0;
diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c
index 7ed7063c385..a2c78632e49 100644
--- a/source/blender/src/editscreen.c
+++ b/source/blender/src/editscreen.c
@@ -818,7 +818,7 @@ unsigned short extern_qread_ext(short *val, char *ascii)
else if(event==REDRAW) ext_redraw= *val;
else if(event==INPUTCHANGE) ext_inputchange= *val;
else if(event==MOUSEY || event==MOUSEX) ext_mousemove= 1;
- else if((G.qual & LR_CTRLKEY) && event==F3KEY) {
+ else if((G.qual & (LR_CTRLKEY|LR_ALTKEY)) && event==F3KEY) {
BIF_screendump();
}