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:
authorCampbell Barton <ideasman42@gmail.com>2018-10-01 09:43:49 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-10-01 09:45:57 +0300
commitc06333d77bf085c177ed78282e6b9f010295aef6 (patch)
tree198310c223455bd103f8888bcbd92a8f50914eae /source/blender/editors/mesh/meshtools.c
parent5fca5c8065fc611961d6507bc468494ba358a224 (diff)
Object Join: use 'selected_editable_objects'
Was using 'selected_editable_bases', which used to save a lookup. This is no longer the case and complicates access from Python which cant yet easily access Bases.
Diffstat (limited to 'source/blender/editors/mesh/meshtools.c')
-rw-r--r--source/blender/editors/mesh/meshtools.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index b4033af1523..84f209b5889 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -298,18 +298,18 @@ int join_mesh_exec(bContext *C, wmOperator *op)
Depsgraph *depsgraph = CTX_data_depsgraph(C);
/* count & check */
- CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
+ CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects)
{
- if (base->object->type == OB_MESH) {
- me = base->object->data;
+ if (ob_iter->type == OB_MESH) {
+ me = ob_iter->data;
totvert += me->totvert;
totedge += me->totedge;
totloop += me->totloop;
totpoly += me->totpoly;
- totmat += base->object->totcol;
+ totmat += ob_iter->totcol;
- if (base->object == ob)
+ if (ob_iter == ob)
ok = true;
/* check for shapekeys */
@@ -379,14 +379,14 @@ int join_mesh_exec(bContext *C, wmOperator *op)
}
/* first pass over objects - copying materials and vertexgroups across */
- CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
+ CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects)
{
/* only act if a mesh, and not the one we're joining to */
- if ((ob != base->object) && (base->object->type == OB_MESH)) {
- me = base->object->data;
+ if ((ob != ob_iter) && (ob_iter->type == OB_MESH)) {
+ me = ob_iter->data;
/* Join this object's vertex groups to the base one's */
- for (dg = base->object->defbase.first; dg; dg = dg->next) {
+ for (dg = ob_iter->defbase.first; dg; dg = dg->next) {
/* See if this group exists in the object (if it doesn't, add it to the end) */
if (!defgroup_find_name(ob, dg->name)) {
odg = MEM_callocN(sizeof(bDeformGroup), "join deformGroup");
@@ -401,8 +401,8 @@ int join_mesh_exec(bContext *C, wmOperator *op)
if (me->totvert) {
/* Add this object's materials to the base one's if they don't exist already (but only if limits not exceeded yet) */
if (totcol < MAXMAT) {
- for (a = 1; a <= base->object->totcol; a++) {
- ma = give_current_material(base->object, a);
+ for (a = 1; a <= ob_iter->totcol; a++) {
+ ma = give_current_material(ob_iter, a);
for (b = 0; b < totcol; b++) {
if (ma == matar[b]) {
@@ -500,16 +500,16 @@ int join_mesh_exec(bContext *C, wmOperator *op)
matar, matmap, totcol,
&vertofs, &edgeofs, &loopofs, &polyofs);
- CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
+ CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects)
{
- if (base->object == ob) {
+ if (ob_iter == ob) {
continue;
}
/* only join if this is a mesh */
- if (base->object->type == OB_MESH) {
+ if (ob_iter->type == OB_MESH) {
join_mesh_single(
depsgraph, bmain, scene,
- ob, base->object, imat,
+ ob, ob_iter, imat,
&mvert, &medge, &mloop, &mpoly,
&vdata, &edata, &ldata, &pdata,
totvert, totedge, totloop, totpoly,
@@ -518,8 +518,8 @@ int join_mesh_exec(bContext *C, wmOperator *op)
&vertofs, &edgeofs, &loopofs, &polyofs);
/* free base, now that data is merged */
- if (base->object != ob) {
- ED_object_base_free_and_unlink(bmain, scene, base->object);
+ if (ob_iter != ob) {
+ ED_object_base_free_and_unlink(bmain, scene, ob_iter);
}
}
}
@@ -609,21 +609,23 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- Object *ob = CTX_data_active_object(C);
+ Object *ob_active = CTX_data_active_object(C);
Depsgraph *depsgraph = CTX_data_depsgraph(C);
- Mesh *me = (Mesh *)ob->data;
+ Mesh *me = (Mesh *)ob_active->data;
Mesh *selme = NULL;
Mesh *me_deformed = NULL;
Key *key = me->key;
KeyBlock *kb;
bool ok = false, nonequal_verts = false;
- CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
+ CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects)
{
- if (base->object == ob) continue;
+ if (ob_iter == ob_active) {
+ continue;
+ }
- if (base->object->type == OB_MESH) {
- selme = (Mesh *)base->object->data;
+ if (ob_iter->type == OB_MESH) {
+ selme = (Mesh *)ob_iter->data;
if (selme->totvert == me->totvert)
ok = true;
@@ -651,21 +653,23 @@ int join_mesh_shapes_exec(bContext *C, wmOperator *op)
}
/* now ready to add new keys from selected meshes */
- CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases)
+ CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects)
{
- if (base->object == ob) continue;
+ if (ob_iter == ob_active) {
+ continue;
+ }
- if (base->object->type == OB_MESH) {
- selme = (Mesh *)base->object->data;
+ if (ob_iter->type == OB_MESH) {
+ selme = (Mesh *)ob_iter->data;
if (selme->totvert == me->totvert) {
- me_deformed = mesh_get_eval_deform(depsgraph, scene, base->object, CD_MASK_BAREMESH);
+ me_deformed = mesh_get_eval_deform(depsgraph, scene, ob_iter, CD_MASK_BAREMESH);
if (!me_deformed) {
continue;
}
- kb = BKE_keyblock_add(key, base->object->id.name + 2);
+ kb = BKE_keyblock_add(key, ob_iter->id.name + 2);
BKE_mesh_runtime_eval_to_meshkey(me_deformed, me, kb);
}