- Made the 'zbuf clip select' in editmode default when reading on old file
- Added transparent wires in solid draw for editmmode, to denote selecting clicks "through". Switching this and the zbuf-clip mode is actually nice! - little annoyance; removed object centerpoint drawing in editmode.
This commit is contained in:
@@ -4472,9 +4472,26 @@ static void do_versions(Main *main)
|
||||
}
|
||||
if(main->versionfile <= 234) {
|
||||
Scene *sce;
|
||||
bScreen *sc;
|
||||
int set_zbuf_sel=0;
|
||||
|
||||
for (sce= main->scene.first; sce; sce= sce->id.next) {
|
||||
if(sce->selectmode==0) sce->selectmode= SCE_SELECT_VERTEX;
|
||||
if(sce->selectmode==0) {
|
||||
sce->selectmode= SCE_SELECT_VERTEX;
|
||||
set_zbuf_sel= 1;
|
||||
}
|
||||
}
|
||||
for (sc= main->screen.first; sc; sc= sc->id.next) {
|
||||
ScrArea *sa;
|
||||
for (sa= sc->areabase.first; sa; sa= sa->next) {
|
||||
SpaceLink *sl;
|
||||
for (sl= sa->spacedata.first; sl; sl= sl->next) {
|
||||
if(sl->spacetype==SPACE_VIEW3D) {
|
||||
View3D *v3d= (View3D *)sl;
|
||||
if(set_zbuf_sel) v3d->flag |= V3D_ZBUF_SELECT;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2508,6 +2508,140 @@ static void glVertex_efa_edges(EditFace *efa)
|
||||
}
|
||||
}
|
||||
|
||||
static void drawmeshwire_wirextra(DispListMesh *dlm, int optimal, char alpha)
|
||||
{
|
||||
EditMesh *em= G.editMesh;
|
||||
EditFace *efa;
|
||||
EditEdge *eed;
|
||||
int a;
|
||||
char wire[4], sel[4];
|
||||
|
||||
/* since this function does transparant... */
|
||||
BIF_GetThemeColor3ubv(TH_EDGE_SELECT, sel);
|
||||
BIF_GetThemeColor3ubv(TH_WIRE, wire);
|
||||
|
||||
wire[3]= alpha;
|
||||
sel[3]= alpha;
|
||||
|
||||
if(G.scene->selectmode == SCE_SELECT_FACE) {
|
||||
|
||||
glBegin(GL_LINES);
|
||||
if(dlm && optimal) {
|
||||
MEdge *medge= dlm->medge;
|
||||
MVert *mvert= dlm->mvert;
|
||||
|
||||
for (a=0; a<dlm->totedge; a++, medge++) {
|
||||
if(medge->flag & ME_EDGEDRAW) {
|
||||
eed= dlm->editedge[a];
|
||||
if(eed && eed->h==0) {
|
||||
if(eed->f & SELECT) glColor4ubv(sel);
|
||||
else glColor4ubv(wire);
|
||||
glVertex3fv(mvert[medge->v1].co);
|
||||
glVertex3fv(mvert[medge->v2].co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* draw faces twice, to have selected ones on top */
|
||||
glColor4ubv(wire);
|
||||
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||
if(efa->h==0 && (efa->f & SELECT)==0) {
|
||||
glVertex_efa_edges(efa);
|
||||
}
|
||||
}
|
||||
glColor4ubv(sel);
|
||||
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||
if(efa->h==0 && (efa->f & SELECT)) {
|
||||
glVertex_efa_edges(efa);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
else if( (G.f & G_DRAWEDGES) || (G.scene->selectmode & SCE_SELECT_EDGE) ) {
|
||||
/* Use edge highlighting */
|
||||
|
||||
/* (bleeding edges) to illustrate selection is defined on vertex basis */
|
||||
/* but cannot do with subdivided edges... */
|
||||
if(dlm==NULL && (G.scene->selectmode & SCE_SELECT_VERTEX)) {
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
if(eed->v1->f & SELECT) glColor4ubv(sel);
|
||||
else glColor4ubv(wire);
|
||||
glVertex3fv(eed->v1->co);
|
||||
if(eed->v2->f & SELECT) glColor4ubv(sel);
|
||||
else glColor4ubv(wire);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
glShadeModel(GL_FLAT);
|
||||
}
|
||||
else {
|
||||
glBegin(GL_LINES);
|
||||
if(dlm && optimal) {
|
||||
MEdge *medge= dlm->medge;
|
||||
MVert *mvert= dlm->mvert;
|
||||
|
||||
for (a=0; a<dlm->totedge; a++, medge++) {
|
||||
if(medge->flag & ME_EDGEDRAW) {
|
||||
eed= dlm->editedge[a];
|
||||
if(eed && eed->h==0) {
|
||||
if(eed->f & SELECT) glColor4ubv(sel);
|
||||
else glColor4ubv(wire);
|
||||
glVertex3fv(mvert[medge->v1].co);
|
||||
glVertex3fv(mvert[medge->v2].co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
glBegin(GL_LINES);
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
if(eed->f & SELECT) glColor4ubv(sel);
|
||||
else glColor4ubv(wire);
|
||||
glVertex3fv(eed->v1->co);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
else {
|
||||
glColor4ubv(wire);
|
||||
glBegin(GL_LINES);
|
||||
if(dlm && optimal) {
|
||||
MEdge *medge= dlm->medge;
|
||||
MVert *mvert= dlm->mvert;
|
||||
|
||||
for (a=0; a<dlm->totedge; a++, medge++) {
|
||||
if(medge->flag & ME_EDGEDRAW) {
|
||||
eed= dlm->editedge[a];
|
||||
if(eed && eed->h==0) {
|
||||
glVertex3fv(mvert[medge->v1].co);
|
||||
glVertex3fv(mvert[medge->v2].co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
glVertex3fv(eed->v1->co);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
static void drawmeshwire(Object *ob)
|
||||
{
|
||||
EditMesh *em = G.editMesh;
|
||||
@@ -2582,124 +2716,25 @@ static void drawmeshwire(Object *ob)
|
||||
if(mesh_uses_displist(me)) {
|
||||
|
||||
/* dont draw the subsurf when solid... then this is a 'drawextra' */
|
||||
if(optimal==0 && ob->dt>OB_WIRE && G.vd->drawtype>OB_WIRE);
|
||||
if(ob->dt>OB_WIRE && G.vd->drawtype>OB_WIRE);
|
||||
else {
|
||||
/* don't draw in edge/face mode */
|
||||
if(optimal && (G.scene->selectmode & SCE_SELECT_VERTEX)==0);
|
||||
else {
|
||||
if(optimal) BIF_ThemeColor(TH_WIRE);
|
||||
else BIF_ThemeColorBlend(TH_WIRE, TH_BACK, 0.7);
|
||||
|
||||
BIF_ThemeColorBlend(TH_WIRE, TH_BACK, 0.7);
|
||||
drawDispListwire(&me->disp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(G.scene->selectmode == SCE_SELECT_FACE) {
|
||||
/* here starts all fancy draw-extra over */
|
||||
|
||||
glBegin(GL_LINES);
|
||||
if(dlm && optimal) {
|
||||
MEdge *medge= dlm->medge;
|
||||
MVert *mvert= dlm->mvert;
|
||||
|
||||
for (a=0; a<dlm->totedge; a++, medge++) {
|
||||
if(medge->flag & ME_EDGEDRAW) {
|
||||
eed= dlm->editedge[a];
|
||||
if(eed && eed->h==0) {
|
||||
if(eed->f & SELECT) BIF_ThemeColor(TH_EDGE_SELECT);
|
||||
else BIF_ThemeColor(TH_WIRE);
|
||||
glVertex3fv(mvert[medge->v1].co);
|
||||
glVertex3fv(mvert[medge->v2].co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* draw faces twice, to have selected ones on top */
|
||||
BIF_ThemeColor(TH_WIRE);
|
||||
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||
if(efa->h==0 && (efa->f & SELECT)==0) {
|
||||
glVertex_efa_edges(efa);
|
||||
}
|
||||
}
|
||||
BIF_ThemeColor(TH_EDGE_SELECT);
|
||||
for(efa= em->faces.first; efa; efa= efa->next) {
|
||||
if(efa->h==0 && (efa->f & SELECT)) {
|
||||
glVertex_efa_edges(efa);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
else if( (G.f & G_DRAWEDGES) || (G.scene->selectmode & SCE_SELECT_EDGE) ) {
|
||||
/* Use edge highlighting */
|
||||
char col[4], colhi[4];
|
||||
|
||||
BIF_GetThemeColor3ubv(TH_EDGE_SELECT, colhi);
|
||||
BIF_GetThemeColor3ubv(TH_WIRE, col);
|
||||
|
||||
/* (bleeding edges) to illustrate selection is defined on vertex basis */
|
||||
/* but cannot do with subdivided edges... */
|
||||
if(dlm==NULL && (G.scene->selectmode & SCE_SELECT_VERTEX)) {
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
if(eed->v1->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
|
||||
else glColor3ub(col[0], col[1], col[2]);
|
||||
glVertex3fv(eed->v1->co);
|
||||
if(eed->v2->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
|
||||
else glColor3ub(col[0], col[1], col[2]);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
glShadeModel(GL_FLAT);
|
||||
}
|
||||
else {
|
||||
glBegin(GL_LINES);
|
||||
if(dlm && optimal) {
|
||||
MEdge *medge= dlm->medge;
|
||||
MVert *mvert= dlm->mvert;
|
||||
|
||||
for (a=0; a<dlm->totedge; a++, medge++) {
|
||||
if(medge->flag & ME_EDGEDRAW) {
|
||||
eed= dlm->editedge[a];
|
||||
if(eed && eed->h==0) {
|
||||
if(eed->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
|
||||
else glColor3ub(col[0], col[1], col[2]);
|
||||
glVertex3fv(mvert[medge->v1].co);
|
||||
glVertex3fv(mvert[medge->v2].co);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
glBegin(GL_LINES);
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
if(eed->f & SELECT) glColor3ub(colhi[0], colhi[1], colhi[2]);
|
||||
else glColor3ub(col[0], col[1], col[2]);
|
||||
glVertex3fv(eed->v1->co);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
else if(optimal==0) {
|
||||
BIF_ThemeColor(TH_WIRE);
|
||||
glBegin(GL_LINES);
|
||||
for(eed= em->edges.first; eed; eed= eed->next) {
|
||||
if(eed->h==0) {
|
||||
glVertex3fv(eed->v1->co);
|
||||
glVertex3fv(eed->v2->co);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
/* show wires in transparant when no zbuf clipping for select */
|
||||
if(G.zbuf && (G.vd->flag & V3D_ZBUF_SELECT)==0) {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
drawmeshwire_wirextra(dlm, optimal, 85);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
drawmeshwire_wirextra(dlm, optimal, 255);
|
||||
|
||||
if(G.f & G_DRAWCREASES) drawmeshwire_creases();
|
||||
|
||||
@@ -4269,7 +4304,8 @@ void draw_object(Base *base)
|
||||
|
||||
/* object centers */
|
||||
if(G.zbuf) glDisable(GL_DEPTH_TEST);
|
||||
if(ob->type == OB_LAMP) {
|
||||
if(ob==G.obedit);
|
||||
else if(ob->type == OB_LAMP) {
|
||||
if(ob->id.lib) {
|
||||
if(base->flag & SELECT) rect= rectllib_sel;
|
||||
else rect= rectllib_desel;
|
||||
|
||||
@@ -644,6 +644,7 @@ static void unified_select_draw(EditVert *eve, EditEdge *eed, EditFace *efa)
|
||||
}
|
||||
|
||||
if(G.scene->selectmode & SCE_SELECT_FACE) {
|
||||
if(efa->fgonf==0) {
|
||||
glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE));
|
||||
|
||||
if(efa->f & SELECT) BIF_ThemeColor(TH_FACE_DOT);
|
||||
@@ -654,6 +655,7 @@ static void unified_select_draw(EditVert *eve, EditEdge *eed, EditFace *efa)
|
||||
bglEnd();
|
||||
}
|
||||
}
|
||||
}
|
||||
/* edge selected */
|
||||
if(eed) {
|
||||
if(G.scene->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) {
|
||||
|
||||
Reference in New Issue
Block a user