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:
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h4
-rw-r--r--source/blender/blenkernel/intern/mesh.c2
-rw-r--r--source/blender/blenkernel/intern/modifiers_bmesh.c8
-rw-r--r--source/blender/bmesh/bmesh_class.h3
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.c14
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.h2
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_conv.c2
-rw-r--r--source/blender/bmesh/operators/bmo_mesh_conv.c2
-rw-r--r--source/blender/editors/mesh/bmesh_tools.c2
-rw-r--r--source/blender/editors/mesh/bmesh_utils.c11
-rw-r--r--source/blender/editors/transform/transform.c6
-rw-r--r--source/blender/modifiers/intern/MOD_array.c6
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c10
-rw-r--r--source/blender/modifiers/intern/MOD_edgesplit.c4
-rw-r--r--source/blender/python/bmesh/bmesh_py_api.c2
16 files changed, 38 insertions, 42 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 87ba2092437..b8cedfb5708 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -447,12 +447,12 @@ int DM_release(DerivedMesh *dm);
*/
void DM_to_mesh(DerivedMesh *dm, struct Mesh *me, struct Object *ob);
-struct BMEditMesh *DM_to_editbmesh(struct Object *ob, struct DerivedMesh *dm,
+struct BMEditMesh *DM_to_editbmesh(struct DerivedMesh *dm,
struct BMEditMesh *existing, int do_tesselate);
/* conversion to bmesh only */
void DM_to_bmesh_ex(struct DerivedMesh *dm, struct BMesh *bm);
-struct BMesh *DM_to_bmesh(struct Object *ob, struct DerivedMesh *dm);
+struct BMesh *DM_to_bmesh(struct DerivedMesh *dm);
/* utility function to convert a DerivedMesh to a shape key block
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 909a87cfd4b..054cbe0021b 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -546,7 +546,7 @@ BMesh *BKE_mesh_to_bmesh(Mesh *me, Object *ob)
{
BMesh *bm;
- bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+ bm = BM_mesh_create(&bm_mesh_allocsize_default);
BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%b", me, ob, TRUE);
diff --git a/source/blender/blenkernel/intern/modifiers_bmesh.c b/source/blender/blenkernel/intern/modifiers_bmesh.c
index 8fe8c9cbaed..46bdcc6fdd8 100644
--- a/source/blender/blenkernel/intern/modifiers_bmesh.c
+++ b/source/blender/blenkernel/intern/modifiers_bmesh.c
@@ -137,7 +137,7 @@ void DM_to_bmesh_ex(DerivedMesh *dm, BMesh *bm)
/* converts a cddm to a BMEditMesh. if existing is non-NULL, the
* new geometry will be put in there.*/
-BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, int do_tesselate)
+BMEditMesh *DM_to_editbmesh(DerivedMesh *dm, BMEditMesh *existing, int do_tesselate)
{
BMEditMesh *em = existing;
BMesh *bm;
@@ -146,7 +146,7 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i
bm = em->bm;
}
else {
- bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+ bm = BM_mesh_create(&bm_mesh_allocsize_default);
}
DM_to_bmesh_ex(dm, bm);
@@ -163,11 +163,11 @@ BMEditMesh *DM_to_editbmesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing, i
return em;
}
-BMesh *DM_to_bmesh(Object *ob, DerivedMesh *dm)
+BMesh *DM_to_bmesh(DerivedMesh *dm)
{
BMesh *bm;
- bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+ bm = BM_mesh_create(&bm_mesh_allocsize_default);
DM_to_bmesh_ex(dm, bm);
diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h
index 02953f84a22..8d79ba52953 100644
--- a/source/blender/bmesh/bmesh_class.h
+++ b/source/blender/bmesh/bmesh_class.h
@@ -194,8 +194,7 @@ typedef struct BMesh {
BMFace *act_face;
ListBase errorstack;
- struct Object *ob; /* owner object */
-
+
void *py_handle;
int opflag; /* current operator flag */
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c
index f58c1141561..b27f40777e6 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -593,7 +593,7 @@ BMesh *BM_mesh_copy(BMesh *bm_old)
bm_old->totface};
/* allocate a bmesh */
- bm_new = BM_mesh_create(bm_old->ob, &allocsize);
+ bm_new = BM_mesh_create(&allocsize);
CustomData_copy(&bm_old->vdata, &bm_new->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
CustomData_copy(&bm_old->edata, &bm_new->edata, CD_MASK_BMESH, CD_CALLOC, 0);
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index c01e8afd716..04279d30e61 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -71,12 +71,10 @@ static void bm_mempool_init(BMesh *bm, const BMAllocTemplate *allocsize)
*
* \note ob is needed by multires
*/
-BMesh *BM_mesh_create(struct Object *ob, BMAllocTemplate *allocsize)
+BMesh *BM_mesh_create(BMAllocTemplate *allocsize)
{
/* allocate the structure */
BMesh *bm = MEM_callocN(sizeof(BMesh), __func__);
-
- bm->ob = ob;
/* allocate the memory pools for the mesh elements */
bm_mempool_init(bm, allocsize);
@@ -164,15 +162,10 @@ void BM_mesh_data_free(BMesh *bm)
*/
void BM_mesh_clear(BMesh *bm)
{
- Object *ob = bm->ob;
-
/* free old mesh */
BM_mesh_data_free(bm);
memset(bm, 0, sizeof(BMesh));
-
- /* re-initialize mesh */
- bm->ob = ob;
-
+
/* allocate the memory pools for the mesh elements */
bm_mempool_init(bm, &bm_mesh_allocsize_default);
@@ -344,11 +337,10 @@ static void bm_rationalize_normals(BMesh *bm, int undo)
BMO_op_finish(bm, &bmop);
}
-static void UNUSED_FUNCTION(bm_mdisps_space_set)(BMesh *bm, int from, int to)
+static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from, int to)
{
/* switch multires data out of tangent space */
if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
- Object *ob = bm->ob;
BMEditMesh *em = BMEdit_Create(bm, FALSE);
DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
MDisps *mdisps;
diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h
index d045cd8be90..f48cc09af3b 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.h
+++ b/source/blender/bmesh/intern/bmesh_mesh.h
@@ -29,7 +29,7 @@
struct BMAllocTemplate;
-BMesh *BM_mesh_create(struct Object *ob, struct BMAllocTemplate *allocsize);
+BMesh *BM_mesh_create(struct BMAllocTemplate *allocsize);
void BM_mesh_free(BMesh *bm);
void BM_mesh_data_free(BMesh *bm);
diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c
index 3b7f5182d2d..24cb2bc4d5a 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_conv.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c
@@ -582,7 +582,7 @@ void BM_mesh_bm_to_me(BMesh *bm, Mesh *me, int dotess)
int i, j;
for (ob = G.main->object.first; ob; ob = ob->id.next) {
- if (ob->parent == bm->ob && ELEM(ob->partype, PARVERT1, PARVERT3)) {
+ if ((ob->parent) && (ob->parent->data == me) && ELEM(ob->partype, PARVERT1, PARVERT3)) {
if (vertMap == NULL) {
vertMap = bm_to_mesh_vertex_map(bm, ototvert);
diff --git a/source/blender/bmesh/operators/bmo_mesh_conv.c b/source/blender/bmesh/operators/bmo_mesh_conv.c
index 651093806b6..4578270d571 100644
--- a/source/blender/bmesh/operators/bmo_mesh_conv.c
+++ b/source/blender/bmesh/operators/bmo_mesh_conv.c
@@ -57,7 +57,7 @@ void bmo_mesh_to_bmesh_exec(BMesh *bm, BMOperator *op)
Mesh *me = BMO_slot_ptr_get(op, "mesh");
int set_key = BMO_slot_bool_get(op, "set_shapekey");
- BM_mesh_bm_from_me(bm, me, set_key, ob->shapenr - 1);
+ BM_mesh_bm_from_me(bm, me, set_key, ob->shapenr);
if (me->key && ob->shapenr > me->key->totkey) {
ob->shapenr = me->key->totkey - 1;
diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c
index da08b3354e1..bbfbb16a5bb 100644
--- a/source/blender/editors/mesh/bmesh_tools.c
+++ b/source/blender/editors/mesh/bmesh_tools.c
@@ -3222,7 +3222,7 @@ static int mesh_separate_selected(Main *bmain, Scene *scene, Base *editbase, wmO
if (!em)
return OPERATOR_CANCELLED;
- bm_new = BM_mesh_create(obedit, &bm_mesh_allocsize_default);
+ bm_new = BM_mesh_create(&bm_mesh_allocsize_default);
CustomData_copy(&em->bm->vdata, &bm_new->vdata, CD_MASK_BMESH, CD_CALLOC, 0);
CustomData_copy(&em->bm->edata, &bm_new->edata, CD_MASK_BMESH, CD_CALLOC, 0);
CustomData_copy(&em->bm->ldata, &bm_new->ldata, CD_MASK_BMESH, CD_CALLOC, 0);
diff --git a/source/blender/editors/mesh/bmesh_utils.c b/source/blender/editors/mesh/bmesh_utils.c
index bee4d4283f6..8ca5dce647f 100644
--- a/source/blender/editors/mesh/bmesh_utils.c
+++ b/source/blender/editors/mesh/bmesh_utils.c
@@ -514,7 +514,7 @@ static void *editbtMesh_to_undoMesh(void *emv, void *obdata)
Mesh *obme = obdata;
undomesh *um = MEM_callocN(sizeof(undomesh), "undo Mesh");
- BLI_strncpy(um->obname, em->bm->ob->id.name + 2, sizeof(um->obname));
+ BLI_strncpy(um->obname, em->ob->id.name + 2, sizeof(um->obname));
/* make sure shape keys work */
um->me.key = obme->key ? copy_key_nolib(obme->key) : NULL;
@@ -546,7 +546,7 @@ static void undoMesh_to_editbtMesh(void *umv, void *emv, void *UNUSED(obdata))
BMEdit_Free(em);
- bm = BM_mesh_create(ob, &bm_mesh_allocsize_default);
+ bm = BM_mesh_create(&bm_mesh_allocsize_default);
BMO_op_callf(bm, "mesh_to_bmesh mesh=%p object=%p set_shapekey=%b", &um->me, ob, FALSE);
em2 = BMEdit_Create(bm, TRUE);
@@ -572,6 +572,13 @@ static void free_undo(void *umv)
/* and this is all the undo system needs to know */
void undo_push_mesh(bContext *C, const char *name)
{
+ /* em->ob gets out of date and crashes on mesh undo,
+ * this is an easy way to ensure its OK
+ * though we could investigate the matter further. */
+ Object *obedit = CTX_data_edit_object(C);
+ BMEditMesh *em = BMEdit_FromObject(obedit);
+ em->ob = obedit;
+
undo_editmode_push(C, name, getEditMesh, free_undo, undoMesh_to_editbtMesh, editbtMesh_to_undoMesh, NULL);
}
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 666d0a2f7f2..7b98a2f0083 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -4552,7 +4552,7 @@ static int createSlideVerts(TransInfo *t)
float vec1[3], dis2, mval[2] = {t->mval[0], t->mval[1]}, d;
/* search cross edges for visible edge to the mouse cursor,
- * then use the shared vertex to calculate screen vector*/
+ * then use the shared vertex to calculate screen vector*/
dis2 = -1.0f;
for (i=0; i<2; i++) {
v = i?e->v1:e->v2;
@@ -4590,8 +4590,7 @@ static int createSlideVerts(TransInfo *t)
}
}
}
-
- em->bm->ob = t->obedit;
+
bmesh_edit_begin(em->bm, BMO_OP_FLAG_UNTAN_MULTIRES);
/*create copies of faces for customdata projection*/
@@ -4779,7 +4778,6 @@ void freeSlideVerts(TransInfo *t)
freeSlideTempFaces(sld);
- sld->em->bm->ob = t->obedit;
bmesh_edit_end(sld->em->bm, BMO_OP_FLAG_UNTAN_MULTIRES);
BLI_smallhash_release(&sld->vhash);
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 2fbec392b1e..05fcb04d7ea 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -186,11 +186,11 @@ static void bm_merge_dm_transform(BMesh* bm, DerivedMesh *dm, float mat[4][4])
}
static DerivedMesh *arrayModifier_doArray(ArrayModifierData *amd,
- Scene *scene, Object *ob, DerivedMesh *dm,
- int UNUSED(initFlags))
+ Scene *scene, Object *ob, DerivedMesh *dm,
+ int UNUSED(initFlags))
{
DerivedMesh *result;
- BMEditMesh *em = DM_to_editbmesh(ob, dm, NULL, FALSE);
+ BMEditMesh *em = DM_to_editbmesh(dm, NULL, FALSE);
BMOperator op, oldop, weldop;
int i, j, indexLen;
/* offset matrix */
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 3e110909702..112b9398d23 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -105,10 +105,10 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
* note: this code is very close to MOD_edgesplit.c.
* note: if 0'd code from trunk included below.
*/
-static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob,
- DerivedMesh *dm,
- int UNUSED(useRenderParams),
- int UNUSED(isFinalCalc))
+static DerivedMesh *applyModifier(ModifierData *md, struct Object *UNUSED(ob),
+ DerivedMesh *dm,
+ int UNUSED(useRenderParams),
+ int UNUSED(isFinalCalc))
{
DerivedMesh *result;
BMesh *bm;
@@ -118,7 +118,7 @@ static DerivedMesh *applyModifier(ModifierData *md, struct Object *ob,
BevelModifierData *bmd = (BevelModifierData*) md;
float threshold = cos((bmd->bevel_angle + 0.00001) * M_PI / 180.0);
- em = DM_to_editbmesh(ob, dm, NULL, FALSE);
+ em = DM_to_editbmesh(dm, NULL, FALSE);
bm = em->bm;
BM_mesh_normals_update(bm, FALSE);
diff --git a/source/blender/modifiers/intern/MOD_edgesplit.c b/source/blender/modifiers/intern/MOD_edgesplit.c
index 481ab805c5a..9fb4821229c 100644
--- a/source/blender/modifiers/intern/MOD_edgesplit.c
+++ b/source/blender/modifiers/intern/MOD_edgesplit.c
@@ -57,7 +57,7 @@
#define EDGE_MARK 1
-static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Object *ob)
+static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Object *UNUSED(ob))
{
DerivedMesh *result;
BMesh *bm;
@@ -66,7 +66,7 @@ static DerivedMesh *doEdgeSplit(DerivedMesh *dm, EdgeSplitModifierData *emd, Obj
BMEdge *e;
float threshold = cos((emd->split_angle + 0.00001) * M_PI / 180.0);
- em = DM_to_editbmesh(ob, dm, NULL, FALSE);
+ em = DM_to_editbmesh(dm, NULL, FALSE);
bm = em->bm;
BM_mesh_normals_update(bm, FALSE);
diff --git a/source/blender/python/bmesh/bmesh_py_api.c b/source/blender/python/bmesh/bmesh_py_api.c
index 1601034542b..d3dcc979015 100644
--- a/source/blender/python/bmesh/bmesh_py_api.c
+++ b/source/blender/python/bmesh/bmesh_py_api.c
@@ -59,7 +59,7 @@ static PyObject *bpy_bm_new(PyObject *UNUSED(self))
{
BMesh *bm;
- bm = BM_mesh_create(NULL, &bm_mesh_allocsize_default);
+ bm = BM_mesh_create(&bm_mesh_allocsize_default);
return BPy_BMesh_CreatePyObject(bm, BPY_BMFLAG_NOP);
}