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:
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r--source/blender/editors/mesh/editmesh.c83
-rw-r--r--source/blender/editors/mesh/editmesh_add.c94
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c24
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c32
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c260
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c132
-rw-r--r--source/blender/editors/mesh/mesh_intern.h8
-rw-r--r--source/blender/editors/mesh/meshtools.c12
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);