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/editmesh_utils.c')
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index a90c8dea87b..d7ed3dca1b1 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -38,6 +38,7 @@
#include "BKE_editmesh.h"
#include "BKE_editmesh_bvh.h"
#include "BKE_global.h"
+#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
@@ -1458,7 +1459,7 @@ void EDBM_update_generic(Mesh *mesh, const bool do_tessellation, const bool is_d
BM_lnorspace_invalidate(em->bm, false);
em->bm->spacearr_dirty &= ~BM_SPACEARR_BMO_SET;
}
- /* don't keep stale derivedMesh data around, see: [#38872] */
+ /* don't keep stale derivedMesh data around, see: T38872. */
BKE_editmesh_free_derivedmesh(em);
#ifdef DEBUG
@@ -1557,6 +1558,48 @@ BMElem *EDBM_elem_from_index_any(BMEditMesh *em, int index)
return NULL;
}
+int EDBM_elem_to_index_any_multi(ViewLayer *view_layer,
+ BMEditMesh *em,
+ BMElem *ele,
+ int *r_object_index)
+{
+ uint bases_len;
+ int elem_index = -1;
+ *r_object_index = -1;
+ Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(view_layer, NULL, &bases_len);
+ for (uint base_index = 0; base_index < bases_len; base_index++) {
+ Base *base_iter = bases[base_index];
+ if (BKE_editmesh_from_object(base_iter->object) == em) {
+ *r_object_index = base_index;
+ elem_index = EDBM_elem_to_index_any(em, ele);
+ break;
+ }
+ }
+ MEM_freeN(bases);
+ return elem_index;
+}
+
+BMElem *EDBM_elem_from_index_any_multi(ViewLayer *view_layer,
+ int object_index,
+ int elem_index,
+ Object **r_obedit)
+{
+ uint bases_len;
+ Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(view_layer, NULL, &bases_len);
+ *r_obedit = NULL;
+ Object *obedit = ((uint)object_index < bases_len) ? bases[object_index]->object : NULL;
+ MEM_freeN(bases);
+ if (obedit != NULL) {
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMElem *ele = EDBM_elem_from_index_any(em, elem_index);
+ if (ele != NULL) {
+ *r_obedit = obedit;
+ return ele;
+ }
+ }
+ return NULL;
+}
+
/** \} */
/* -------------------------------------------------------------------- */