diff options
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/editmesh.c | 83 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_add.c | 94 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_lib.c | 24 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_loop.c | 32 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_mods.c | 260 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 132 | ||||
-rw-r--r-- | source/blender/editors/mesh/mesh_intern.h | 8 | ||||
-rw-r--r-- | source/blender/editors/mesh/meshtools.c | 12 |
8 files changed, 239 insertions, 406 deletions
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c index 80e5d0f910a..ab9627df28d 100644 --- a/source/blender/editors/mesh/editmesh.c +++ b/source/blender/editors/mesh/editmesh.c @@ -389,8 +389,7 @@ EditFace *addfacelist(EditMesh *em, EditVert *v1, EditVert *v2, EditVert *v3, Ed CustomData_em_copy_data(&em->fdata, &em->fdata, example->data, &efa->data); } else { - if (G.obedit && G.obedit->actcol) - efa->mat_nr= G.obedit->actcol-1; + efa->mat_nr= em->mat_nr; CustomData_em_set_default(&em->fdata, &efa->data); } @@ -1431,7 +1430,7 @@ void remake_editMesh(Scene *scene, Object *ob) -void separate_mesh(Scene *scene, Object *ob) +void separate_mesh(Scene *scene, Object *obedit) { EditMesh *em, emcopy; EditVert *eve, *v1; @@ -1442,12 +1441,12 @@ void separate_mesh(Scene *scene, Object *ob) Base *base, *oldbase; ListBase edve, eded, edvl; - TEST_EDITMESH + if(obedit==NULL) return; if(multires_test()) return; waitcursor(1); - me= G.obedit->data; + me= obedit->data; em= me->edit_mesh; if(me->key) { error("Can't separate with vertex keys"); @@ -1470,7 +1469,7 @@ void separate_mesh(Scene *scene, Object *ob) base= FIRSTBASE; while(base) { // XXX if(base->lay & G.vd->lay) { - if(base->object==G.obedit) base->flag |= SELECT; + if(base->object==obedit) base->flag |= SELECT; else base->flag &= ~SELECT; // } base= base->next; @@ -1521,19 +1520,19 @@ void separate_mesh(Scene *scene, Object *ob) efa= vl1; } - oldob= G.obedit; + oldob= obedit; oldbase= BASACT; adduplicate(1, 0); /* notrans and a linked duplicate */ - G.obedit= BASACT->object; /* basact was set in adduplicate() */ + obedit= BASACT->object; /* basact was set in adduplicate() */ men= copy_mesh(me); - set_mesh(G.obedit, men); + set_mesh(obedit, men); /* because new mesh is a copy: reduce user count */ men->id.us--; - load_editMesh(scene, G.obedit); + load_editMesh(scene, obedit); BASACT->flag &= ~SELECT; @@ -1554,19 +1553,19 @@ void separate_mesh(Scene *scene, Object *ob) /* hashedges are freed now, make new! */ editMesh_set_hash(em); - DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); - G.obedit= oldob; + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); + obedit= oldob; BASACT= oldbase; BASACT->flag |= SELECT; waitcursor(0); // allqueue(REDRAWVIEW3D, 0); - DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); } -void separate_material(Scene *scene, Object *ob) +void separate_material(Scene *scene, Object *obedit) { Mesh *me; EditMesh *em; @@ -1574,33 +1573,33 @@ void separate_material(Scene *scene, Object *ob) if(multires_test()) return; - me= G.obedit->data; + me= obedit->data; em= me->edit_mesh; if(me->key) { error("Can't separate with vertex keys"); return; } - if(G.obedit && em) { - if(G.obedit->type == OB_MESH) { - for (curr_mat = 1; curr_mat < G.obedit->totcol; ++curr_mat) { + if(obedit && em) { + if(obedit->type == OB_MESH) { + for (curr_mat = 1; curr_mat < obedit->totcol; ++curr_mat) { /* clear selection, we're going to use that to select material group */ EM_clear_flag_all(em, SELECT); /* select the material */ editmesh_select_by_material(em, curr_mat); /* and now separate */ - separate_mesh(scene, ob); + separate_mesh(scene, obedit); } } } // allqueue(REDRAWVIEW3D, 0); - DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); } -void separate_mesh_loose(Scene *scene, Object *ob) +void separate_mesh_loose(Scene *scene, Object *obedit) { EditMesh *em, emcopy; EditVert *eve, *v1; @@ -1613,14 +1612,13 @@ void separate_mesh_loose(Scene *scene, Object *ob) int vertsep=0; short done=0, check=1; - me= G.obedit->data; + me= obedit->data; em= me->edit_mesh; if(me->key) { error("Can't separate a mesh with vertex keys"); return; } - TEST_EDITMESH if(multires_test()) return; waitcursor(1); @@ -1639,7 +1637,7 @@ void separate_mesh_loose(Scene *scene, Object *ob) base= FIRSTBASE; while(base) { // XXX if(base->lay & G.vd->lay) { - if(base->object==G.obedit) base->flag |= SELECT; + if(base->object==obedit) base->flag |= SELECT; else base->flag &= ~SELECT; // } base= base->next; @@ -1718,19 +1716,19 @@ void separate_mesh_loose(Scene *scene, Object *ob) efa= vl1; } - oldob= G.obedit; + oldob= obedit; oldbase= BASACT; adduplicate(1, 0); /* notrans and a linked duplicate*/ - G.obedit= BASACT->object; /* basact was set in adduplicate() */ + obedit= BASACT->object; /* basact was set in adduplicate() */ men= copy_mesh(me); - set_mesh(G.obedit, men); + set_mesh(obedit, men); /* because new mesh is a copy: reduce user count */ men->id.us--; - load_editMesh(scene, G.obedit); + load_editMesh(scene, obedit); BASACT->flag &= ~SELECT; @@ -1751,7 +1749,7 @@ void separate_mesh_loose(Scene *scene, Object *ob) /* hashedges are freed now, make new! */ editMesh_set_hash(em); - G.obedit= oldob; + obedit= oldob; BASACT= oldbase; BASACT->flag |= SELECT; @@ -1763,12 +1761,12 @@ void separate_mesh_loose(Scene *scene, Object *ob) waitcursor(0); // allqueue(REDRAWVIEW3D, 0); - DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); } -void separatemenu(Scene *scene, Object *ob) +void separatemenu(Scene *scene, Object *obedit) { - Mesh *me= ob->data; + Mesh *me= obedit->data; short event; if(me->edit_mesh->verts.first==NULL) return; @@ -1780,13 +1778,13 @@ void separatemenu(Scene *scene, Object *ob) switch (event) { case 1: - separate_mesh(scene, ob); + separate_mesh(scene, obedit); break; case 2: - separate_mesh_loose(scene, ob); + separate_mesh_loose(scene, obedit); break; case 3: - separate_material(scene, ob); + separate_material(scene, obedit); break; } waitcursor(0); @@ -1975,8 +1973,9 @@ static void *editMesh_to_undoMesh(void *emv) // um->retopo_mode= scene->toolsettings->retopo_mode; { - Multires *mr= get_mesh(G.obedit)->mr; - UndoMesh *prev= undo_editmode_get_prev(G.obedit); + Mesh *me= NULL; // XXX + Multires *mr= me->mr; + UndoMesh *prev= NULL; // XXX undo_editmode_get_prev(obedit); um->mru= NULL; @@ -2103,7 +2102,7 @@ static void undoMesh_to_editMesh(void *umv, void *emv) // } { - Mesh *me= get_mesh(G.obedit); + Mesh *me= NULL; // XXX; multires_free(me->mr); me->mr= NULL; if(um->mru && um->mru->mr) me->mr= multires_copy(um->mru->mr); @@ -2192,9 +2191,7 @@ EditFace *EM_get_face_for_index(int index) int EM_texFaceCheck(EditMesh *em) { /* some of these checks could be a touch overkill */ - if ( (G.obedit) && - (G.obedit->type == OB_MESH) && - (em) && + if ( (em) && (em->faces.first) && (CustomData_has_layer(&em->fdata, CD_MTFACE))) return 1; @@ -2205,9 +2202,7 @@ int EM_texFaceCheck(EditMesh *em) int EM_vertColorCheck(EditMesh *em) { /* some of these checks could be a touch overkill */ - if ( (G.obedit) && - (G.obedit->type == OB_MESH) && - (em) && + if ( (em) && (em->faces.first) && (CustomData_has_layer(&em->fdata, CD_MCOL))) return 1; diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 60d821b9801..1833682b19e 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -131,14 +131,13 @@ static void get_view_aligned_coordinate(float *fp, short mval[2]) // } } -void add_click_mesh(Scene *scene, EditMesh *em) +void add_click_mesh(Scene *scene, Object *obedit, EditMesh *em) { View3D *v3d= NULL; // XXX EditVert *eve, *v1; float min[3], max[3]; int done= 0; - TEST_EDITMESH if(multires_test()) return; INIT_MINMAX(min, max); @@ -174,10 +173,10 @@ void add_click_mesh(Scene *scene, EditMesh *em) VecMulf(cent, 0.5f); VECCOPY(min, cent); - Mat4MulVecfl(G.obedit->obmat, min); // view space + Mat4MulVecfl(obedit->obmat, min); // view space get_view_aligned_coordinate(min, mval); - Mat4Invert(G.obedit->imat, G.obedit->obmat); - Mat4MulVecfl(G.obedit->imat, min); // back in object space + Mat4Invert(obedit->imat, obedit->obmat); + Mat4MulVecfl(obedit->imat, min); // back in object space VecSubf(min, min, cent); @@ -206,7 +205,7 @@ void add_click_mesh(Scene *scene, EditMesh *em) } } - extrudeflag(em, SELECT, nor); + extrudeflag(obedit, em, SELECT, nor); rotateflag(em, SELECT, cent, mat); translateflag(em, SELECT, min); @@ -218,11 +217,11 @@ void add_click_mesh(Scene *scene, EditMesh *em) eve= addvertlist(em, 0, NULL); - Mat3CpyMat4(mat, G.obedit->obmat); + Mat3CpyMat4(mat, obedit->obmat); Mat3Inv(imat, mat); VECCOPY(eve->co, curs); - VecSubf(eve->co, eve->co, G.obedit->obmat[3]); + VecSubf(eve->co, eve->co, obedit->obmat[3]); Mat3MulVecfl(imat, eve->co); @@ -232,7 +231,7 @@ void add_click_mesh(Scene *scene, EditMesh *em) retopo_do_all(); BIF_undo_push("Add vertex/edge/face"); -// XXX DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); while(0); // XXX get_mbut()&R_MOUSE); @@ -258,7 +257,7 @@ static void make_fgon(EditMesh *em, int make) } } EM_fgon_flags(em); // redo flags and indices for fgons -// XXX DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); BIF_undo_push("Clear FGon"); return; } @@ -335,7 +334,7 @@ static void make_fgon(EditMesh *em, int make) else { EM_fgon_flags(em); // redo flags and indices for fgons -// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Make FGon"); } } @@ -601,7 +600,7 @@ void addfaces_from_edgenet(EditMesh *em) EM_select_flush(em); BIF_undo_push("Add faces"); -// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } void addedgeface_mesh(EditMesh *em) @@ -633,7 +632,7 @@ void addedgeface_mesh(EditMesh *em) EM_select_edge(eed, 1); BIF_undo_push("Add edge"); - // XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); return; } else if(amount > 4) { @@ -735,14 +734,13 @@ void addedgeface_mesh(EditMesh *em) BIF_undo_push("Add face"); } -// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } -void adduplicate_mesh(EditMesh *em) +void adduplicate_mesh(Object *obedit, EditMesh *em) { - TEST_EDITMESH if(multires_test()) return; waitcursor(1); @@ -757,8 +755,8 @@ void adduplicate_mesh(EditMesh *em) * This shouldn't be necessary, derived queries should be * automatically building this data if invalid. Or something. */ -// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); - object_handle_update(G.obedit); +// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); + object_handle_update(obedit); // XXX BIF_TransformSetUndo("Add Duplicate"); // initTransform(TFM_TRANSLATION, CTX_NO_PET); @@ -767,32 +765,32 @@ void adduplicate_mesh(EditMesh *em) /* check whether an object to add mesh to exists, if not, create one * returns 1 if new object created, else 0 */ -static int confirm_objectExists(Scene *scene, Mesh **me, float mat[][3] ) +static int confirm_objectExists(Scene *scene, Object *obedit, Mesh **me, float mat[][3] ) { int newob = 0; /* if no obedit: new object and enter editmode */ - if(G.obedit==NULL) { + if(obedit==NULL) { /* add_object actually returns an object ! :-) But it also stores the added object struct in G.scene->basact->object (BASACT->object) */ // XXX add_object_draw(OB_MESH); - G.obedit= BASACT->object; + obedit= BASACT->object; - where_is_object(G.obedit); + where_is_object(obedit); - make_editMesh(scene, G.obedit); + make_editMesh(scene, obedit); newob= 1; } - *me = G.obedit->data; + *me = obedit->data; /* deselectall */ EM_clear_flag_all((*me)->edit_mesh, SELECT); /* imat and center and size */ - Mat3CpyMat4(mat, G.obedit->obmat); + Mat3CpyMat4(mat, obedit->obmat); return newob; } @@ -943,7 +941,7 @@ signed char monkeyf[250][4]= { // ------------------------------- end copied code -void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg, +void make_prim(Object *obedit, EditMesh *em, int type, float imat[3][3], int tot, int seg, int subdiv, float dia, float d, int ext, int fill, float cent[3]) { @@ -992,7 +990,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg, vec[1]= dia*phid; Mat3MulVecfl(imat, vec); for(a=0;a<seg-1;a++) { - extrudeflag_vert(em, 2, nor); // nor unused + extrudeflag_vert(obedit, em, 2, nor); // nor unused translateflag(em, 2, vec); } break; @@ -1027,7 +1025,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg, QuatToMat3(q, cmat); for(a=0; a<seg; a++) { - extrudeflag_vert(em, 2, nor); // nor unused + extrudeflag_vert(obedit, em, 2, nor); // nor unused rotateflag(em, 2, v1->co, cmat); } @@ -1074,7 +1072,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg, } dia*=200; - for(a=1; a<subdiv; a++) esubdivideflag(em, 2, dia, 0,1,0); + for(a=1; a<subdiv; a++) esubdivideflag(obedit, em, 2, dia, 0,1,0); /* and now do imat */ eve= em->verts.first; while(eve) { @@ -1234,7 +1232,7 @@ void make_prim(EditMesh *em, int type, float imat[3][3], int tot, int seg, righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction */ } -void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) +void add_primitiveMesh(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em, int type) { Mesh *me; float *curs, d, dia, phi, phid, cent[3], imat[3][3], mat[3][3]; @@ -1252,7 +1250,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) /* this function also comes from an info window */ // XXX if ELEM(curarea->spacetype, SPACE_VIEW3D, SPACE_INFO); else return; - if (G.obedit && G.obedit->type==OB_MESH && multires_test()) return; + if (obedit && obedit->type==OB_MESH && multires_test()) return; /* if editmode exists for other type, it exits */ check_editmode(OB_MESH); @@ -1272,7 +1270,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) tot= 4; ext= 0; fill= 1; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Plane"; undostr="Add Plane"; break; @@ -1280,7 +1278,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) tot= 4; ext= 1; fill= 1; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Cube"; undostr="Add Cube"; break; @@ -1291,7 +1289,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) if (!(do_clever_numbuts("Add Circle", 3, 0))) return; ext= 0; fill = fill_circle; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Circle"; undostr="Add Circle"; break; @@ -1305,7 +1303,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) ext= 1; fill = fill_cylinder; d/=2; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) { if (fill) name = "Cylinder"; else name = "Tube"; @@ -1322,7 +1320,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) d/=2; ext= 0; fill = fill_cone; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Cone"; undostr="Add Cone"; break; @@ -1330,7 +1328,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) add_numbut(0, NUM|INT, "X res:", 3, 1000, &tot, NULL); add_numbut(1, NUM|INT, "Y res:", 3, 1000, &seg, NULL); if (!(do_clever_numbuts("Add Grid", 2, 0))) return; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Grid"; undostr="Add Grid"; break; @@ -1341,7 +1339,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) if (!(do_clever_numbuts("Add UV Sphere", 3, 0))) return; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Sphere"; undostr="Add UV Sphere"; break; @@ -1350,31 +1348,31 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) add_numbut(1, NUM|FLO, "Radius:", 0.001*v3d->grid, 100*v3d->grid, &dia, NULL); if (!(do_clever_numbuts("Add Ico Sphere", 2, 0))) return; - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Sphere"; undostr="Add Ico Sphere"; break; case 13: /* Monkey */ - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); if(newob) name = "Suzanne"; undostr="Add Monkey"; break; default: - newob = confirm_objectExists(scene, &me, mat ); + newob = confirm_objectExists(scene, obedit, &me, mat ); break; } if( name!=NULL ) { - rename_id((ID *)G.obedit, name ); + rename_id((ID *)obedit, name ); rename_id((ID *)me, name ); } d = -d; curs= give_cursor(scene, v3d); VECCOPY(cent, curs); - cent[0]-= G.obedit->obmat[3][0]; - cent[1]-= G.obedit->obmat[3][1]; - cent[2]-= G.obedit->obmat[3][2]; + cent[0]-= obedit->obmat[3][0]; + cent[1]-= obedit->obmat[3][1]; + cent[2]-= obedit->obmat[3][2]; if ( !(newob) || U.flag & USER_ADD_VIEWALIGNED) Mat3CpyMat4(imat, v3d->viewmat); else Mat3One(imat); @@ -1389,7 +1387,7 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) phid= 2*M_PI/tot; phi= .25*M_PI; - make_prim(em, type, imat, tot, seg, subdiv, dia, d, ext, fill, cent); + make_prim(obedit, em, type, imat, tot, seg, subdiv, dia, d, ext, fill, cent); if(type<2) tot = totoud; @@ -1398,11 +1396,11 @@ void add_primitiveMesh(Scene *scene, View3D *v3d, EditMesh *em, int type) if(type!=0 && type!=13) righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction... */ -// XXX DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// XXX DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); /* if a new object was created, it stores it in Mesh, for reload original data and undo */ if ( !(newob) || U.flag & USER_ADD_EDITMODE) { - if(newob) load_editMesh(scene, G.obedit); + if(newob) load_editMesh(scene, obedit); } else { exit_editmode(2); } diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c index 115207736c9..974528626d0 100644 --- a/source/blender/editors/mesh/editmesh_lib.c +++ b/source/blender/editors/mesh/editmesh_lib.c @@ -917,7 +917,7 @@ short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor) EditEdge *eed; EditFace *efa, *nextfa; - if(G.obedit==0 || get_mesh(G.obedit)==0) return 0; + if(em==NULL) return 0; /* selected edges with 1 or more selected face become faces */ /* selected faces each makes new faces */ @@ -1091,7 +1091,7 @@ short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor) /* this is actually a recode of extrudeflag(), using proper edge/face select */ /* hurms, doesnt use 'flag' yet, but its not called by primitive making stuff anyway */ -static short extrudeflag_edge(EditMesh *em, short flag, float *nor) +static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor) { /* all select edges/faces: extrude */ /* old select is cleared, in new ones it is set */ @@ -1101,9 +1101,9 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor) short del_old= 0; ModifierData *md; - if(G.obedit==0 || get_mesh(G.obedit)==0) return 0; + if(em==NULL) return 0; - md = G.obedit->modifiers.first; + md = obedit->modifiers.first; /* selected edges with 0 or 1 selected face become faces */ /* selected faces generate new faces */ @@ -1166,7 +1166,7 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor) if (mmd->mirror_ob) { float imtx[4][4]; Mat4Invert(imtx, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, G.obedit->obmat, imtx); + Mat4MulMat4(mtx, obedit->obmat, imtx); } for (eed= em->edges.first; eed; eed= eed->next) { @@ -1346,7 +1346,7 @@ static short extrudeflag_edge(EditMesh *em, short flag, float *nor) return 'n'; // normal constraint } -short extrudeflag_vert(EditMesh *em, short flag, float *nor) +short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor) { /* all verts/edges/faces with (f & 'flag'): extrude */ /* from old verts, 'flag' is cleared, in new ones it is set */ @@ -1356,9 +1356,9 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor) short sel=0, del_old= 0, is_face_sel=0; ModifierData *md; - if(G.obedit==0 || get_mesh(G.obedit)==0) return 0; + if(em) return 0; - md = G.obedit->modifiers.first; + md = obedit->modifiers.first; /* clear vert flag f1, we use this to detect a loose selected vertice */ eve= em->verts.first; @@ -1453,7 +1453,7 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor) if (mmd->mirror_ob) { float imtx[4][4]; Mat4Invert(imtx, mmd->mirror_ob->obmat); - Mat4MulMat4(mtx, G.obedit->obmat, imtx); + Mat4MulMat4(mtx, obedit->obmat, imtx); } for (eed= em->edges.first; eed; eed= eed->next) { @@ -1633,12 +1633,12 @@ short extrudeflag_vert(EditMesh *em, short flag, float *nor) } /* generic extrude */ -short extrudeflag(EditMesh *em, short flag, float *nor) +short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor) { if(em->selectmode & SCE_SELECT_VERTEX) - return extrudeflag_vert(em, flag, nor); + return extrudeflag_vert(obedit, em, flag, nor); else - return extrudeflag_edge(em, flag, nor); + return extrudeflag_edge(obedit, em, flag, nor); } diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c index d12c2845718..13cc90f3e2d 100644 --- a/source/blender/editors/mesh/editmesh_loop.c +++ b/source/blender/editors/mesh/editmesh_loop.c @@ -146,7 +146,7 @@ static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int prev if(previewlines > 0 && select == 0){ // XXX persp(PERSP_VIEW); // XXX glPushMatrix(); -// XXX mymultmatrix(G.obedit->obmat); +// XXX mymultmatrix(obedit->obmat); for(efa= em->faces.first; efa; efa= efa->next) { if(efa->v4 == NULL) { continue; } @@ -193,7 +193,7 @@ static void edgering_sel(EditMesh *em, EditEdge *startedge, int select, int prev } } } -void CutEdgeloop(EditMesh *em, int numcuts) +void CutEdgeloop(Object *obedit, EditMesh *em, int numcuts) { ViewContext vc; // XXX EditEdge *nearest=NULL, *eed; @@ -363,9 +363,9 @@ void CutEdgeloop(EditMesh *em, int numcuts) fac= 1.0f; // XXX if(fbutton(&fac, 0.0f, 5.0f, 10, 10, "Smooth:")==0) return; fac= 0.292f*fac; - esubdivideflag(em, SELECT,fac,B_SMOOTH,numcuts,SUBDIV_SELECT_LOOPCUT); + esubdivideflag(obedit, em, SELECT,fac,B_SMOOTH,numcuts,SUBDIV_SELECT_LOOPCUT); } else { - esubdivideflag(em, SELECT,0,0,numcuts,SUBDIV_SELECT_LOOPCUT); + esubdivideflag(obedit, em, SELECT,0,0,numcuts,SUBDIV_SELECT_LOOPCUT); } /* if this was a single cut, enter edgeslide mode */ if(numcuts == 1 && hasHidden == 0){ @@ -383,7 +383,7 @@ void CutEdgeloop(EditMesh *em, int numcuts) EM_selectmode_set(em); } -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); return; } @@ -449,7 +449,7 @@ static CutCurve *get_mouse_trail(int *len, char mode, char cutmode, struct GHash /* prototype */ static float seg_intersect(struct EditEdge * e, CutCurve *c, int len, char mode, struct GHash *gh); -void KnifeSubdivide(EditMesh *em, char mode) +void KnifeSubdivide(Object *obedit, EditMesh *em, char mode) { EditEdge *eed; EditVert *eve; @@ -461,7 +461,7 @@ void KnifeSubdivide(EditMesh *em, char mode) short numcuts=1; float *scr, co[4]; - if (G.obedit==0) return; + if (em==NULL) return; if (EM_nvertices_selected(em) < 2) { error("No edges are selected to operate on"); @@ -488,7 +488,7 @@ void KnifeSubdivide(EditMesh *em, char mode) scr = MEM_mallocN(sizeof(float)*2, "Vertex Screen Coordinates"); VECCOPY(co, eve->co); co[3]= 1.0; - Mat4MulVec4fl(G.obedit->obmat, co); +// Mat4MulVec4fl(obedit->obmat, co); // XXX project_float(co,scr); BLI_ghash_insert(gh, eve, scr); eve->f1 = 0; /*store vertex intersection flag here*/ @@ -514,9 +514,9 @@ void KnifeSubdivide(EditMesh *em, char mode) eed= eed->next; } - if(mode==KNIFE_EXACT) esubdivideflag(em, SELECT, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG); - else if (mode==KNIFE_MIDPOINT) esubdivideflag(em, SELECT, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG); - else if (mode==KNIFE_MULTICUT) esubdivideflag(em, SELECT, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG); + if(mode==KNIFE_EXACT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE|B_PERCENTSUBD,1,SUBDIV_SELECT_ORIG); + else if (mode==KNIFE_MIDPOINT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE,1,SUBDIV_SELECT_ORIG); + else if (mode==KNIFE_MULTICUT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE,numcuts,SUBDIV_SELECT_ORIG); eed=em->edges.first; while(eed){ @@ -687,7 +687,7 @@ static float seg_intersect(EditEdge *e, CutCurve *c, int len, char mode, struct return(perc); } -void LoopMenu(EditMesh *em) /* Called by KKey */ +void LoopMenu(Object *obedit, EditMesh *em) /* Called by KKey */ { short ret; @@ -696,16 +696,16 @@ void LoopMenu(EditMesh *em) /* Called by KKey */ switch (ret){ case 2: - CutEdgeloop(em, 1); + CutEdgeloop(obedit, em, 1); break; case 3: - KnifeSubdivide(em, KNIFE_EXACT); + KnifeSubdivide(obedit, em, KNIFE_EXACT); break; case 4: - KnifeSubdivide(em, KNIFE_MIDPOINT); + KnifeSubdivide(obedit, em, KNIFE_MIDPOINT); break; case 5: - KnifeSubdivide(em, KNIFE_MULTICUT); + KnifeSubdivide(obedit, em, KNIFE_MULTICUT); break; } diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c index fb7bb46982a..018df499dcc 100644 --- a/source/blender/editors/mesh/editmesh_mods.c +++ b/source/blender/editors/mesh/editmesh_mods.c @@ -98,14 +98,14 @@ static int pupmenu() {return 0;} /* ****************************** MIRROR **************** */ -void EM_select_mirrored(EditMesh *em) +void EM_select_mirrored(Object *obedit, EditMesh *em) { if(em->selectmode & SCE_SELECT_VERTEX) { EditVert *eve, *v1; for(eve= em->verts.first; eve; eve= eve->next) { if(eve->f & SELECT) { - v1= editmesh_get_x_mirror_vert(G.obedit, em, eve->co); + v1= editmesh_get_x_mirror_vert(obedit, em, eve->co); if(v1) { eve->f &= ~SELECT; v1->f |= SELECT; @@ -120,14 +120,14 @@ void EM_automerge(int update) // XXX int len; // if ((G.scene->automerge) && -// (G.obedit && G.obedit->type==OB_MESH) && -// (((Mesh*)G.obedit->data)->mr==NULL) +// (obedit && obedit->type==OB_MESH) && +// (((Mesh*)obedit->data)->mr==NULL) // ) { // len = removedoublesflag(1, 1, G.scene->toolsettings->doublimit); // if (len) { // G.totvert -= len; /* saves doing a countall */ // if (update) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // } // } // } @@ -194,7 +194,7 @@ int EM_init_backbuf_border(ViewContext *vc, short xmin, short ymin, short xmax, unsigned int *dr; int a; - if(G.obedit==NULL || vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0; + if(vc->obedit==NULL || vc->v3d->drawtype<OB_SOLID || (vc->v3d->flag & V3D_ZBUF_SELECT)==0) return 0; buf= view3d_read_backbuf(vc, xmin, ymin, xmax, ymax); if(buf==NULL) return 0; @@ -242,7 +242,7 @@ int EM_mask_init_backbuf_border(ViewContext *vc, short mcords[][2], short tot, s int a; /* method in use for face selecting too */ - if(G.obedit==NULL) { + if(vc->obedit==NULL) { if(FACESEL_PAINT_TEST); else return 0; } @@ -304,7 +304,7 @@ int EM_init_backbuf_circle(ViewContext *vc, short xs, short ys, short rads) int radsq; /* method in use for face selecting too */ - if(G.obedit==NULL) { + if(vc->obedit==NULL) { if(FACESEL_PAINT_TEST); else return 0; } @@ -475,7 +475,7 @@ static void findnearestedge__doClosest(void *userData, EditEdge *eed, int x0, in vec[0]= eed->v1->co[0] + labda*(eed->v2->co[0] - eed->v1->co[0]); vec[1]= eed->v1->co[1] + labda*(eed->v2->co[1] - eed->v1->co[1]); vec[2]= eed->v1->co[2] + labda*(eed->v2->co[2] - eed->v1->co[2]); - Mat4MulVecfl(G.obedit->obmat, vec); + Mat4MulVecfl(data->vc.obedit->obmat, vec); if(view3d_test_clipping(data->vc.v3d, vec)==0) { data->dist = distance; @@ -610,147 +610,6 @@ static EditFace *findnearestface(ViewContext *vc, int *dist) } } -#if 0 -/* for interactivity, frontbuffer draw in current window */ -static void draw_dm_mapped_vert__mapFunc(void *theVert, int index, float *co, float *no_f, short *no_s) -{ - if (EM_get_vert_for_index(index)==theVert) { - bglVertex3fv(co); - } -} -static void draw_dm_mapped_vert(EditMesh *em, DerivedMesh *dm, EditVert *eve) -{ - EM_init_index_arrays(em, 1, 0, 0); - bglBegin(GL_POINTS); - dm->foreachMappedVert(dm, draw_dm_mapped_vert__mapFunc, eve); - bglEnd(); - EM_free_index_arrays(); -} - -static int draw_dm_mapped_edge__setDrawOptions(void *theEdge, int index) -{ - return EM_get_edge_for_index(index)==theEdge; -} -static void draw_dm_mapped_edge(EditMesh *em, DerivedMesh *dm, EditEdge *eed) -{ - EM_init_index_arrays(em, 0, 1, 0); - dm->drawMappedEdges(dm, draw_dm_mapped_edge__setDrawOptions, eed); - EM_free_index_arrays(); -} - -static void draw_dm_mapped_face_center__mapFunc(void *theFace, int index, float *cent, float *no) -{ - if (EM_get_face_for_index(index)==theFace) { - bglVertex3fv(cent); - } -} -static void draw_dm_mapped_face_center(EditMesh *em, DerivedMesh *dm, EditFace *efa) -{ - EM_init_index_arrays(em, 0, 0, 1); - bglBegin(GL_POINTS); - dm->foreachMappedFaceCenter(dm, draw_dm_mapped_face_center__mapFunc, efa); - bglEnd(); - EM_free_index_arrays(); -} - -#endif - -static void unified_select_draw(EditMesh *em, EditVert *eve, EditEdge *eed, EditFace *efa) -{ -#if 0 - /* XXX depricated, no frontbuffer, later we can partial copy? */ - - DerivedMesh *dm = editmesh_get_derived_cage(CD_MASK_BAREMESH); - - glDrawBuffer(GL_FRONT); - -// XXX persp(PERSP_VIEW); - - if(v3d->flag & V3D_CLIPPING) - view3d_set_clipping(v3d); - - glPushMatrix(); - mymultmatrix(G.obedit->obmat); - - /* face selected */ - if(efa) { - if(em->selectmode & SCE_SELECT_VERTEX) { - glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE)); - - if(efa->f & SELECT) BIF_ThemeColor(TH_VERTEX_SELECT); - else BIF_ThemeColor(TH_VERTEX); - - bglBegin(GL_POINTS); - bglVertex3fv(efa->v1->co); - bglVertex3fv(efa->v2->co); - bglVertex3fv(efa->v3->co); - if(efa->v4) bglVertex3fv(efa->v4->co); - bglEnd(); - } - - if(em->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) { - if(efa->fgonf==0) { - BIF_ThemeColor((efa->f & SELECT)?TH_EDGE_SELECT:TH_WIRE); - - draw_dm_mapped_edge(em, dm, efa->e1); - draw_dm_mapped_edge(em, dm, efa->e2); - draw_dm_mapped_edge(em, dm, efa->e3); - if (efa->e4) { - draw_dm_mapped_edge(em, dm, efa->e4); - } - } - } - - if( CHECK_OB_DRAWFACEDOT(G.scene, v3d, G.obedit->dt) ) { - if(efa->fgonf==0) { - glPointSize(BIF_GetThemeValuef(TH_FACEDOT_SIZE)); - BIF_ThemeColor((efa->f & SELECT)?TH_FACE_DOT:TH_WIRE); - - draw_dm_mapped_face_center(em, dm, efa); - } - } - } - /* edge selected */ - if(eed) { - if(em->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) { - BIF_ThemeColor((eed->f & SELECT)?TH_EDGE_SELECT:TH_WIRE); - - draw_dm_mapped_edge(em, dm, eed); - } - if(em->selectmode & SCE_SELECT_VERTEX) { - glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE)); - - BIF_ThemeColor((eed->f & SELECT)?TH_VERTEX_SELECT:TH_VERTEX); - - draw_dm_mapped_vert(em, dm, eed->v1); - draw_dm_mapped_vert(em, dm, eed->v2); - } - } - if(eve) { - if(em->selectmode & SCE_SELECT_VERTEX) { - glPointSize(BIF_GetThemeValuef(TH_VERTEX_SIZE)); - - BIF_ThemeColor((eve->f & SELECT)?TH_VERTEX_SELECT:TH_VERTEX); - - draw_dm_mapped_vert(em, dm, eve); - } - } - - glPointSize(1.0); - glPopMatrix(); - - bglFlush(); - glDrawBuffer(GL_BACK); - - if(v3d->flag & V3D_CLIPPING) - view3d_clr_clipping(); - - - dm->release(dm); -#endif -} - - /* best distance based on screen coords. use em->selectmode to define how to use selected vertices and edges get disadvantage @@ -1484,7 +1343,7 @@ void EM_mesh_copy_edge(EditMesh *em, short type) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Copy Edge Attribute"); } @@ -1613,7 +1472,7 @@ void EM_mesh_copy_face(EditMesh *em, short type) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); if (type==3) { // XXX allqueue(REDRAWIMAGE, 0); } @@ -1747,7 +1606,7 @@ void EM_mesh_copy_face_layer(EditMesh *em, short type) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Copy Face Layer"); } @@ -2102,9 +1961,6 @@ static void mouse_mesh_loop(ViewContext *vc) edgeloop_select(em, eed, select); } - /* frontbuffer draw of last selected only */ - unified_select_draw(em, NULL, eed, NULL); - EM_selectmode_flush(em); // if (EM_texFaceCheck()) @@ -2165,9 +2021,7 @@ static void mouse_mesh_loop(ViewContext *vc) break; } - unified_select_draw(em, NULL, eed, NULL); - -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } } @@ -2228,20 +2082,18 @@ void mouse_mesh(bContext *C, short mval[2], short extend) } } - /* frontbuffer draw of last selected only */ - unified_select_draw(vc.em, eve, eed, efa); - EM_selectmode_flush(vc.em); // if (EM_texFaceCheck()) { - if (efa && efa->mat_nr != G.obedit->actcol-1) { - G.obedit->actcol= efa->mat_nr+1; + if (efa && efa->mat_nr != vc.obedit->actcol-1) { + vc.obedit->actcol= efa->mat_nr+1; + vc.em->mat_nr= efa->mat_nr; // BIF_preview_changed(ID_MA); } } - WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit); // rightmouse_transform(); } @@ -2481,7 +2333,7 @@ void hide_mesh(EditMesh *em, int swap) EditFace *efa; int a; - if(G.obedit==0) return; + if(em==NULL) return; /* hide happens on least dominant select mode, and flushes up, not down! (helps preventing errors in subsurf) */ /* - vertex hidden, always means edge is hidden too @@ -2573,7 +2425,7 @@ void hide_mesh(EditMesh *em, int swap) G.totedgesel= G.totfacesel= G.totvertsel= 0; // if(EM_texFaceCheck()) - // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Hide"); } @@ -2584,7 +2436,7 @@ void reveal_mesh(EditMesh *em) EditEdge *eed; EditFace *efa; - if(G.obedit==0) return; + if(em==NULL) return; for(eve= em->verts.first; eve; eve= eve->next) { if(eve->h) { @@ -2611,7 +2463,7 @@ void reveal_mesh(EditMesh *em) EM_selectmode_flush(em); // if (EM_texFaceCheck()) -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Reveal"); } @@ -3245,7 +3097,7 @@ static int toggle_select_all_exec(bContext *C, wmOperator *op) // if (EM_texFaceCheck()) - WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, G.obedit); + WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); return OPERATOR_FINISHED; } @@ -3600,7 +3452,7 @@ void Vertex_Menu(EditMesh *em) break; } /* some items crashed because this is in the original W menu but not here. should really manage this better */ -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } @@ -3647,16 +3499,16 @@ void Edge_Menu(EditMesh *em) case 11: // editmesh_mark_sharp(em, 1); BIF_undo_push("Mark Sharp"); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); break; case 12: // editmesh_mark_sharp(em, 0); BIF_undo_push("Clear Sharp"); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); break; } /* some items crashed because this is in the original W menu but not here. should really manage this better */ -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } void Face_Menu(EditMesh *em) @@ -3673,7 +3525,7 @@ void Face_Menu(EditMesh *em) { case 1: // flip_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Flip Normals"); break; case 2: @@ -3688,7 +3540,7 @@ void Face_Menu(EditMesh *em) case 5: /* Quads to Tris */ // convert_to_triface(em, 0); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); break; case 6: /* Tris to Quads */ // join_triangles(em); @@ -3718,7 +3570,7 @@ void Face_Menu(EditMesh *em) break; } /* some items crashed because this is in the original W menu but not here. should really manage this better */ -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } @@ -3929,7 +3781,7 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning * recalc_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); waitcursor(0); } @@ -4008,19 +3860,19 @@ void faceselect_align_view_to_selected(View3D *v3d, Mesh *me, int axis) } /* helper for below, to survive non-uniform scaled objects */ -static void face_getnormal_obspace(EditFace *efa, float *fno) +static void face_getnormal_obspace(Object *obedit, EditFace *efa, float *fno) { float vec[4][3]; VECCOPY(vec[0], efa->v1->co); - Mat4Mul3Vecfl(G.obedit->obmat, vec[0]); + Mat4Mul3Vecfl(obedit->obmat, vec[0]); VECCOPY(vec[1], efa->v2->co); - Mat4Mul3Vecfl(G.obedit->obmat, vec[1]); + Mat4Mul3Vecfl(obedit->obmat, vec[1]); VECCOPY(vec[2], efa->v3->co); - Mat4Mul3Vecfl(G.obedit->obmat, vec[2]); + Mat4Mul3Vecfl(obedit->obmat, vec[2]); if(efa->v4) { VECCOPY(vec[3], efa->v4->co); - Mat4Mul3Vecfl(G.obedit->obmat, vec[3]); + Mat4Mul3Vecfl(obedit->obmat, vec[3]); CalcNormFloat4(vec[0], vec[1], vec[2], vec[3], fno); } @@ -4028,7 +3880,7 @@ static void face_getnormal_obspace(EditFace *efa, float *fno) } -void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis) +void editmesh_align_view_to_selected(Object *obedit, EditMesh *em, View3D *v3d, int axis) { int nselverts= EM_nvertices_selected(em); float norm[3]={0.0, 0.0, 0.0}; /* used for storing the mesh normal */ @@ -4042,7 +3894,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis) if (faceselectedAND(efa, SELECT)) { float fno[3]; - face_getnormal_obspace(efa, fno); + face_getnormal_obspace(obedit, efa, fno); norm[0]+= fno[0]; norm[1]+= fno[1]; norm[2]+= fno[2]; @@ -4073,7 +3925,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis) } } - Mat4Mul3Vecfl(G.obedit->obmat, norm); + Mat4Mul3Vecfl(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, axis, norm); } else if (nselverts==2) { /* Align view to edge (or 2 verts) */ @@ -4090,7 +3942,7 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis) leve= eve; } } - Mat4Mul3Vecfl(G.obedit->obmat, norm); + Mat4Mul3Vecfl(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, axis, norm); } else if (nselverts==1) { /* Align view to vert normal */ @@ -4104,23 +3956,23 @@ void editmesh_align_view_to_selected(EditMesh *em, View3D *v3d, int axis) break; /* we know this is the only selected vert, so no need to keep looking */ } } - Mat4Mul3Vecfl(G.obedit->obmat, norm); + Mat4Mul3Vecfl(obedit->obmat, norm); view3d_align_axis_to_vector(v3d, axis, norm); } } /* **************** VERTEX DEFORMS *************** */ -void vertexsmooth(EditMesh *em) +void vertexsmooth(Object *obedit, EditMesh *em) { EditVert *eve, *eve_mir = NULL; EditEdge *eed; float *adror, *adr, fac; float fvec[3]; int teller=0; - ModifierData *md= G.obedit->modifiers.first; + ModifierData *md= obedit->modifiers.first; - if(G.obedit==0) return; + if(em==NULL) return; /* count */ eve= em->verts.first; @@ -4198,7 +4050,7 @@ void vertexsmooth(EditMesh *em) if(eve->f1) { // XXX if (G.scene->toolsettings->editbutflag & B_MESH_X_MIRROR) { -// eve_mir= editmesh_get_x_mirror_vert(G.obedit, em, eve->co); +// eve_mir= editmesh_get_x_mirror_vert(obedit, em, eve->co); // } adr = eve->tmp.p; @@ -4237,21 +4089,21 @@ void vertexsmooth(EditMesh *em) recalc_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Vertex Smooth"); } -void vertexnoise(EditMesh *em) +void vertexnoise(Object *obedit, EditMesh *em) { Material *ma; Tex *tex; EditVert *eve; float b2, ofs, vec[3]; - if(G.obedit==0) return; + if(em==NULL) return; - ma= give_current_material(G.obedit, G.obedit->actcol); + ma= give_current_material(obedit, obedit->actcol); if(ma==0 || ma->mtex[0]==0 || ma->mtex[0]->tex==0) { return; } @@ -4283,33 +4135,31 @@ void vertexnoise(EditMesh *em) } recalc_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Vertex Noise"); } -void vertices_to_sphere(Scene *scene, View3D *v3d, EditMesh *em) +void vertices_to_sphere(Scene *scene, View3D *v3d, Object *obedit, EditMesh *em) { EditVert *eve; float *curs, len, vec[3], cent[3], fac, facm, imat[3][3], bmat[3][3]; int tot; short perc=100; - TEST_EDITMESH - // XXX if(button(&perc, 1, 100, "Percentage:")==0) return; fac= perc/100.0; facm= 1.0-fac; - Mat3CpyMat4(bmat, G.obedit->obmat); + Mat3CpyMat4(bmat, obedit->obmat); Mat3Inv(imat, bmat); /* center */ curs= give_cursor(scene, v3d); - cent[0]= curs[0]-G.obedit->obmat[3][0]; - cent[1]= curs[1]-G.obedit->obmat[3][1]; - cent[2]= curs[2]-G.obedit->obmat[3][2]; + cent[0]= curs[0]-obedit->obmat[3][0]; + cent[1]= curs[1]-obedit->obmat[3][1]; + cent[2]= curs[2]-obedit->obmat[3][2]; Mat3MulVecfl(imat, cent); len= 0.0; @@ -4344,7 +4194,7 @@ void vertices_to_sphere(Scene *scene, View3D *v3d, EditMesh *em) } recalc_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("To Sphere"); } diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 663ed2ef2c1..1d5e2b24d17 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -594,12 +594,11 @@ void hashvert_flag(EditMesh *em, int flag) } /* generic extern called extruder */ -void extrude_mesh(EditMesh *em) +void extrude_mesh(Object *obedit, EditMesh *em) { float nor[3]= {0.0, 0.0, 0.0}; short nr, transmode= 0; - TEST_EDITMESH if(multires_test()) return; if(em->selectmode & SCE_SELECT_VERTEX) { @@ -631,7 +630,7 @@ void extrude_mesh(EditMesh *em) if(nr<1) return; - if(nr==1) transmode= extrudeflag(em, SELECT, nor); + if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor); else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor); else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor); else transmode= extrudeflag_face_indiv(em, SELECT, nor); @@ -648,8 +647,8 @@ void extrude_mesh(EditMesh *em) * This shouldn't be necessary, derived queries should be * automatically building this data if invalid. Or something. */ -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); - object_handle_update(G.obedit); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); + object_handle_update(obedit); /* individual faces? */ // BIF_TransformSetUndo("Extrude"); @@ -660,8 +659,8 @@ void extrude_mesh(EditMesh *em) else { // initTransform(TFM_TRANSLATION, CTX_NO_PET|CTX_NO_MIRROR); if(transmode=='n') { - Mat4MulVecfl(G.obedit->obmat, nor); - VecSubf(nor, nor, G.obedit->obmat[3]); + Mat4MulVecfl(obedit->obmat, nor); + VecSubf(nor, nor, obedit->obmat[3]); // BIF_setSingleAxisConstraint(nor, "along normal"); } // Transform(); @@ -673,7 +672,6 @@ void extrude_mesh(EditMesh *em) void split_mesh(EditMesh *em) { - TEST_EDITMESH if(multires_test()) return; if(okee(" Split ")==0) return; @@ -688,18 +686,17 @@ void split_mesh(EditMesh *em) waitcursor(0); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Split"); } -void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs) +void extrude_repeat_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float offs) { float dvec[3], tmat[3][3], bmat[3][3], nor[3]= {0.0, 0.0, 0.0}; short a; - TEST_EDITMESH if(multires_test()) return; /* dvec */ @@ -712,12 +709,12 @@ void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs) dvec[2]*= offs; /* base correction */ - Mat3CpyMat4(bmat, G.obedit->obmat); + Mat3CpyMat4(bmat, obedit->obmat); Mat3Inv(tmat, bmat); Mat3MulVecfl(tmat, dvec); for(a=0; a<steps; a++) { - extrudeflag(em, SELECT, nor); + extrudeflag(obedit, em, SELECT, nor); translateflag(em, SELECT, dvec); } @@ -725,12 +722,12 @@ void extrude_repeat_mesh(View3D *v3d, EditMesh *em, int steps, float offs) EM_fgon_flags(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Extrude Repeat"); } -void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, int mode) +void spin_mesh(View3D *v3d, Object *obedit, EditMesh *em, int steps, float degr, float *dvec, int mode) { EditVert *eve,*nextve; float nor[3]= {0.0, 0.0, 0.0}; @@ -739,18 +736,17 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in float phi; short a,ok; - TEST_EDITMESH if(multires_test()) return; /* imat and center and size */ - Mat3CpyMat4(bmat, G.obedit->obmat); + Mat3CpyMat4(bmat, obedit->obmat); Mat3Inv(imat,bmat); curs= give_cursor(NULL, v3d); VECCOPY(cent, curs); - cent[0]-= G.obedit->obmat[3][0]; - cent[1]-= G.obedit->obmat[3][1]; - cent[2]-= G.obedit->obmat[3][2]; + cent[0]-= obedit->obmat[3][0]; + cent[1]-= obedit->obmat[3][1]; + cent[2]-= obedit->obmat[3][2]; Mat3MulVecfl(imat, cent); phi= degr*M_PI/360.0; @@ -782,7 +778,7 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in ok= 1; for(a=0;a<steps;a++) { - if(mode==0) ok= extrudeflag(em, SELECT, nor); + if(mode==0) ok= extrudeflag(obedit, em, SELECT, nor); else adduplicateflag(em, SELECT); if(ok==0) { error("No valid vertices are selected"); @@ -811,20 +807,19 @@ void spin_mesh(View3D *v3d, EditMesh *em, int steps, float degr, float *dvec, in EM_fgon_flags(em); - // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); if(dvec==NULL) BIF_undo_push("Spin"); } -void screw_mesh(EditMesh *em, int steps, int turns) +void screw_mesh(Object *obedit, EditMesh *em, int steps, int turns) { View3D *v3d= NULL; // XXX EditVert *eve,*v1=0,*v2=0; EditEdge *eed; float dvec[3], nor[3]; - TEST_EDITMESH if(multires_test()) return; /* clear flags */ @@ -868,7 +863,7 @@ void screw_mesh(EditMesh *em, int steps, int turns) dvec[1]= ( (v1->co[1]- v2->co[1]) )/(steps); dvec[2]= ( (v1->co[2]- v2->co[2]) )/(steps); - VECCOPY(nor, G.obedit->obmat[2]); + VECCOPY(nor, obedit->obmat[2]); if(nor[0]*dvec[0]+nor[1]*dvec[1]+nor[2]*dvec[2]>0.000) { dvec[0]= -dvec[0]; @@ -876,7 +871,7 @@ void screw_mesh(EditMesh *em, int steps, int turns) dvec[2]= -dvec[2]; } - spin_mesh(v3d, em, turns*steps, turns*360, dvec, 0); + spin_mesh(v3d, obedit, em, turns*steps, turns*360, dvec, 0); BIF_undo_push("Spin"); } @@ -928,7 +923,7 @@ static void erase_vertices(EditMesh *em, ListBase *l) } } -void delete_mesh(EditMesh *em) +void delete_mesh(Object *obedit, EditMesh *em) { EditFace *efa, *nextvl; EditVert *eve,*nextve; @@ -937,7 +932,6 @@ void delete_mesh(EditMesh *em) int count; char *str="Erase"; - TEST_EDITMESH if(multires_test()) return; event= pupmenu("Erase %t|Vertices%x10|Edges%x1|Faces%x2|All%x3|Edges & Faces%x4|Only Faces%x5|Edge Loop%x6"); @@ -1068,7 +1062,7 @@ void delete_mesh(EditMesh *em) EM_fgon_flags(em); // redo flags and indices for fgons -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push(str); } @@ -1082,7 +1076,7 @@ void fill_mesh(EditMesh *em) EditFace *efa,*nextvl, *efan; short ok; - if(G.obedit==0 || (G.obedit->type!=OB_MESH)) return; + if(em==NULL) return; if(multires_test()) return; waitcursor(1); @@ -1136,7 +1130,7 @@ void fill_mesh(EditMesh *em) } } - if(BLI_edgefill(0, (G.obedit && G.obedit->actcol)?(G.obedit->actcol-1):0)) { + if(BLI_edgefill(0, em->mat_nr)) { efa= fillfacebase.first; while(efa) { /* normals default pointing up */ @@ -1151,7 +1145,7 @@ void fill_mesh(EditMesh *em) waitcursor(0); EM_select_flush(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Fill"); } @@ -2366,7 +2360,7 @@ static EditVert *subdivideedgenum(EditMesh *em, EditEdge *edge, int curpoint, in return ev; } -void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype) +void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype) { EditFace *ef; EditEdge *eed, *cedge, *sort[4]; @@ -2374,7 +2368,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, struct GHash *gh; float length[4], v1mat[3], v2mat[3], v3mat[3], v4mat[3]; int i, j, edgecount, touchcount, facetype,hold; - ModifierData *md= G.obedit->modifiers.first; + ModifierData *md= obedit->modifiers.first; int ctrl= 0; // XXX if(multires_test()) return; @@ -2438,10 +2432,10 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, VECCOPY(v2mat, ef->v2->co); VECCOPY(v3mat, ef->v3->co); VECCOPY(v4mat, ef->v4->co); - Mat4Mul3Vecfl(G.obedit->obmat, v1mat); - Mat4Mul3Vecfl(G.obedit->obmat, v2mat); - Mat4Mul3Vecfl(G.obedit->obmat, v3mat); - Mat4Mul3Vecfl(G.obedit->obmat, v4mat); + Mat4Mul3Vecfl(obedit->obmat, v1mat); + Mat4Mul3Vecfl(obedit->obmat, v2mat); + Mat4Mul3Vecfl(obedit->obmat, v3mat); + Mat4Mul3Vecfl(obedit->obmat, v4mat); length[0] = VecLenf(v1mat, v2mat); length[1] = VecLenf(v2mat, v3mat); @@ -2532,7 +2526,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, } } -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // Now for each face in the mesh we need to figure out How many edges were cut // and which filling method to use for that face for(ef = em->faces.first;ef;ef = ef->next) { @@ -2735,7 +2729,7 @@ void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, } recalc_editnormals(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } static int count_selected_edges(EditEdge *ed) @@ -3085,7 +3079,7 @@ void beauty_fill(EditMesh *em) EM_select_flush(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Beauty Fill"); } @@ -3390,7 +3384,7 @@ void join_triangles(EditMesh *em) if(edsortblock) MEM_freeN(edsortblock); EM_selectmode_flush(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Convert Triangles to Quads"); } @@ -3488,7 +3482,7 @@ void edge_flip(EditMesh *em) MEM_freeN(efaar); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Flip Triangle Edges"); @@ -3725,7 +3719,7 @@ void edge_rotate_selected(EditMesh *em, int dir) /* flush selected vertices (again) to edges/faces */ EM_select_flush(em); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Rotate Edge"); } @@ -3849,7 +3843,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc) // initNumInput(&num); -// view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat); +// view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat); mvalo[0] = -1; mvalo[1] = -1; numsel =0; @@ -4417,7 +4411,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc) // scrarea_do_windraw(curarea); // persp(PERSP_VIEW); // glPushMatrix(); -// mymultmatrix(G.obedit->obmat); +// mymultmatrix(obedit->obmat); glColor3ub(0, 255, 0); glBegin(GL_LINES); @@ -4549,7 +4543,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc) } else { draw = 0; } -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); } @@ -4569,7 +4563,7 @@ int EdgeSlide(EditMesh *em, short immediate, float imperc) if(!immediate) EM_automerge(0); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // scrarea_queue_winredraw(curarea); //BLI_ghash_free(edgesgh, freeGHash, NULL); @@ -4618,7 +4612,7 @@ int EdgeLoopDelete(EditMesh *em) EM_select_more(em); removedoublesflag(em, 1,0, 0.001); EM_select_flush(em); - // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); return 1; } @@ -4700,9 +4694,7 @@ void mesh_set_smooth_faces(EditMesh *em, short event) { EditFace *efa; - if(G.obedit==0) return; - - if(G.obedit->type != OB_MESH) return; + if(em==NULL) return; efa= em->faces.first; while(efa) { @@ -4713,7 +4705,7 @@ void mesh_set_smooth_faces(EditMesh *em, short event) efa= efa->next; } -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); if(event==1) BIF_undo_push("Set Smooth"); else if(event==0) BIF_undo_push("Set Solid"); @@ -4771,7 +4763,7 @@ void mesh_rip(EditMesh *em) EM_selectmode_set(em); // XXX getmouseco_areawin(mval); -// view3d_get_object_project_mat(curarea, G.obedit, projectMat, viewMat); +// view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat); /* find best face, exclude triangles and break on face select or faces with 2 edges select */ mindist= 1000000.0f; @@ -4957,10 +4949,10 @@ void mesh_rip(EditMesh *em) // XXX G.scene->proportional = prop; } -void shape_propagate(Scene *scene, EditMesh *em) +void shape_propagate(Scene *scene, Object *obedit, EditMesh *em) { EditVert *ev = NULL; - Mesh* me = (Mesh*)G.obedit->data; + Mesh* me = (Mesh*)obedit->data; Key* ky = NULL; KeyBlock* kb = NULL; Base* base=NULL; @@ -4996,7 +4988,7 @@ void shape_propagate(Scene *scene, EditMesh *em) } BIF_undo_push("Propagate Blendshape Verts"); - DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA); + DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); return; } @@ -5041,7 +5033,7 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock } } sprintf(str,"Blending at %d%c MMB to Copy at 100%c",(int)(perc*100),'%','%'); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // headerprint(str); // force_draw(0); @@ -5083,11 +5075,11 @@ void shape_copy_from_lerp(EditMesh *em, KeyBlock* thisBlock, KeyBlock* fromBlock -void shape_copy_select_from(EditMesh *em) +void shape_copy_select_from(Object *obedit, EditMesh *em) { - Mesh* me = (Mesh*)G.obedit->data; + Mesh* me = (Mesh*)obedit->data; EditVert *ev = NULL; - int totverts = 0,curshape = G.obedit->shapenr; + int totverts = 0,curshape = obedit->shapenr; Key* ky = NULL; KeyBlock *kb = NULL,*thisBlock = NULL; @@ -5641,7 +5633,7 @@ int collapseEdges(EditMesh *em) freecollections(&allcollections); removedoublesflag(em, 1, 0, MERGELIMIT); /*get rid of this!*/ -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // if (EM_texFaceCheck()) @@ -5701,7 +5693,7 @@ int merge_target(EditMesh *em, int target, int uvmerge) collapseuvs(em, NULL); } -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); return removedoublesflag(em, 1, 0, MERGELIMIT); @@ -5866,7 +5858,7 @@ void pathselect(EditMesh *em) MEM_freeN(previous); BLI_heap_free(heap, NULL); EM_select_flush(em); - // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // if (EM_texFaceCheck()) } @@ -5903,7 +5895,7 @@ void region_to_loop(EditMesh *em) em->selectmode = SCE_SELECT_EDGE; EM_selectmode_set(em); - // DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); + // DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // if (EM_texFaceCheck()) @@ -6062,7 +6054,7 @@ void loop_to_region(EditMesh *em) } freecollections(&allcollections); -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); // if (EM_texFaceCheck()) @@ -6134,7 +6126,7 @@ void mesh_rotate_uvs(EditMesh *em) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Rotate UV face"); } @@ -6217,7 +6209,7 @@ void mesh_mirror_uvs(EditMesh *em) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Mirror UV face"); } @@ -6267,7 +6259,7 @@ void mesh_rotate_colors(EditMesh *em) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Rotate Color face"); } @@ -6316,7 +6308,7 @@ void mesh_mirror_colors(EditMesh *em) } if (change) { -// DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA); +// DAG_object_flush_update(G.scene, obedit, OB_RECALC_DATA); BIF_undo_push("Mirror Color face"); } } diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h index a23e3e42012..8000d227885 100644 --- a/source/blender/editors/mesh/mesh_intern.h +++ b/source/blender/editors/mesh/mesh_intern.h @@ -35,8 +35,6 @@ struct bContext; struct wmOperatorType; -#define TEST_EDITMESH if(G.obedit==0) return; /* layer test XXX */ - #define UVCOPY(t, s) memcpy(t, s, 2 * sizeof(float)); /* ******************** editface.c */ @@ -136,8 +134,8 @@ void recalc_editnormals(EditMesh *em); extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor); extern short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor); extern short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor); -extern short extrudeflag_vert(EditMesh *em, short flag, float *nor); -extern short extrudeflag(EditMesh *em, short flag, float *nor); +extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor); +extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor); extern void adduplicateflag(EditMesh *em, int flag); extern void delfaceflag(EditMesh *em, int flag); @@ -193,7 +191,7 @@ extern EditVert *findnearestvert(ViewContext *vc, int *dist, short sel, short st void join_triangles(EditMesh *em); int removedoublesflag(EditMesh *em, short flag, short automerge, float limit); /* return amount */ -void esubdivideflag(EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype); +void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beauty, int numcuts, int seltype); int EdgeSlide(EditMesh *em, short immediate, float imperc); diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index 97ce1ec617a..94730be507c 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -118,7 +118,7 @@ int join_mesh(Scene *scene, View3D *v3d) MDeformVert *dvert; CustomData vdata, edata, fdata; - if(G.obedit) return 0; + if(scene->obedit) return 0; ob= OBACT; if(!ob || ob->type!=OB_MESH) return 0; @@ -445,7 +445,7 @@ void sort_faces(Scene *scene, View3D *v3d) int ctrl= 0; // XXX if(!ob) return; - if(G.obedit) return; + if(scene->obedit) return; if(ob->type!=OB_MESH) return; if (!v3d) return; @@ -709,7 +709,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode) if(MeshOctree.table) { Mesh *me= ob->data; bt= MeshOctree.table + mesh_octree_get_base_offs(co, MeshOctree.offs, MeshOctree.div); - if(ob==G.obedit) + if(me->edit_mesh) return mesh_octree_find_index(bt, NULL, NULL, co); else return mesh_octree_find_index(bt, MeshOctree.orco, me->mvert, co); @@ -724,7 +724,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode) * we are using the undeformed coordinates*/ INIT_MINMAX(min, max); - if(ob==G.obedit) { + if(me->edit_mesh==em) { EditVert *eve; for(eve= em->verts.first; eve; eve= eve->next) @@ -765,7 +765,7 @@ intptr_t mesh_octree_table(Object *ob, EditMesh *em, float *co, char mode) MeshOctree.table= MEM_callocN(MOC_RES*MOC_RES*MOC_RES*sizeof(void *), "sym table"); - if(ob==G.obedit) { + if(me->edit_mesh==em) { EditVert *eve; for(eve= em->verts.first; eve; eve= eve->next) { @@ -1106,7 +1106,7 @@ void objects_bake_render(Scene *scene, short event, char **error_msg) static void objects_bake_render_ui(Scene *scene, short event) { char *error_msg = NULL; -// int is_editmode = (G.obedit!=NULL); +// int is_editmode = (obedit!=NULL); /* Deal with editmode, this is a bit clunky but since UV's are in editmode, users are likely to bake from their */ // XXX if (is_editmode) exit_editmode(0); |