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/blenkernel/intern/object_facemap.c')
-rw-r--r--source/blender/blenkernel/intern/object_facemap.c280
1 files changed, 143 insertions, 137 deletions
diff --git a/source/blender/blenkernel/intern/object_facemap.c b/source/blender/blenkernel/intern/object_facemap.c
index 19f0b77342a..4548a6d6bd1 100644
--- a/source/blender/blenkernel/intern/object_facemap.c
+++ b/source/blender/blenkernel/intern/object_facemap.c
@@ -34,7 +34,7 @@
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_object.h"
-#include "BKE_object_facemap.h" /* own include */
+#include "BKE_object_facemap.h" /* own include */
#include "BKE_object_deform.h"
#include "BLT_translation.h"
@@ -46,202 +46,208 @@
static bool fmap_unique_check(void *arg, const char *name)
{
- struct {Object *ob; void *fm; } *data = arg;
-
- bFaceMap *fmap;
-
- for (fmap = data->ob->fmaps.first; fmap; fmap = fmap->next) {
- if (data->fm != fmap) {
- if (!strcmp(fmap->name, name)) {
- return true;
- }
- }
- }
-
- return false;
+ struct {
+ Object *ob;
+ void *fm;
+ } *data = arg;
+
+ bFaceMap *fmap;
+
+ for (fmap = data->ob->fmaps.first; fmap; fmap = fmap->next) {
+ if (data->fm != fmap) {
+ if (!strcmp(fmap->name, name)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
}
static bFaceMap *fmap_duplicate(bFaceMap *infmap)
{
- bFaceMap *outfmap;
+ bFaceMap *outfmap;
- if (!infmap)
- return NULL;
+ if (!infmap)
+ return NULL;
- outfmap = MEM_callocN(sizeof(bFaceMap), "copy facemap");
+ outfmap = MEM_callocN(sizeof(bFaceMap), "copy facemap");
- /* For now, just copy everything over. */
- memcpy(outfmap, infmap, sizeof(bFaceMap));
+ /* For now, just copy everything over. */
+ memcpy(outfmap, infmap, sizeof(bFaceMap));
- outfmap->next = outfmap->prev = NULL;
+ outfmap->next = outfmap->prev = NULL;
- return outfmap;
+ return outfmap;
}
void BKE_object_facemap_copy_list(ListBase *outbase, const ListBase *inbase)
{
- bFaceMap *fmap, *fmapn;
+ bFaceMap *fmap, *fmapn;
- BLI_listbase_clear(outbase);
+ BLI_listbase_clear(outbase);
- for (fmap = inbase->first; fmap; fmap = fmap->next) {
- fmapn = fmap_duplicate(fmap);
- BLI_addtail(outbase, fmapn);
- }
+ for (fmap = inbase->first; fmap; fmap = fmap->next) {
+ fmapn = fmap_duplicate(fmap);
+ BLI_addtail(outbase, fmapn);
+ }
}
void BKE_object_facemap_unique_name(Object *ob, bFaceMap *fmap)
{
- struct {Object *ob; void *fmap; } data;
- data.ob = ob;
- data.fmap = fmap;
-
- BLI_uniquename_cb(fmap_unique_check, &data, DATA_("Group"), '.', fmap->name, sizeof(fmap->name));
+ struct {
+ Object *ob;
+ void *fmap;
+ } data;
+ data.ob = ob;
+ data.fmap = fmap;
+
+ BLI_uniquename_cb(fmap_unique_check, &data, DATA_("Group"), '.', fmap->name, sizeof(fmap->name));
}
bFaceMap *BKE_object_facemap_add_name(Object *ob, const char *name)
{
- bFaceMap *fmap;
+ bFaceMap *fmap;
- if (!ob || ob->type != OB_MESH)
- return NULL;
+ if (!ob || ob->type != OB_MESH)
+ return NULL;
- fmap = MEM_callocN(sizeof(bFaceMap), __func__);
+ fmap = MEM_callocN(sizeof(bFaceMap), __func__);
- BLI_strncpy(fmap->name, name, sizeof(fmap->name));
+ BLI_strncpy(fmap->name, name, sizeof(fmap->name));
- BLI_addtail(&ob->fmaps, fmap);
+ BLI_addtail(&ob->fmaps, fmap);
- ob->actfmap = BLI_listbase_count(&ob->fmaps);
+ ob->actfmap = BLI_listbase_count(&ob->fmaps);
- BKE_object_facemap_unique_name(ob, fmap);
+ BKE_object_facemap_unique_name(ob, fmap);
- return fmap;
+ return fmap;
}
bFaceMap *BKE_object_facemap_add(Object *ob)
{
- return BKE_object_facemap_add_name(ob, DATA_("FaceMap"));
+ return BKE_object_facemap_add_name(ob, DATA_("FaceMap"));
}
-
static void object_fmap_remove_edit_mode(Object *ob, bFaceMap *fmap, bool do_selected, bool purge)
{
- const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
-
- if (ob->type == OB_MESH) {
- Mesh *me = ob->data;
-
- if (me->edit_mesh) {
- BMEditMesh *em = me->edit_mesh;
- const int cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
-
- if (cd_fmap_offset != -1) {
- BMFace *efa;
- BMIter iter;
- int *map;
-
- if (purge) {
- BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
-
- if (map) {
- if (*map == fmap_nr)
- *map = -1;
- else if (*map > fmap_nr)
- *map -= 1;
- }
- }
- }
- else {
- BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
- map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
-
- if (map && *map == fmap_nr && (!do_selected || BM_elem_flag_test(efa, BM_ELEM_SELECT))) {
- *map = -1;
- }
- }
- }
- }
-
- if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
- ob->actfmap--;
-
- BLI_remlink(&ob->fmaps, fmap);
- MEM_freeN(fmap);
- }
- }
+ const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (me->edit_mesh) {
+ BMEditMesh *em = me->edit_mesh;
+ const int cd_fmap_offset = CustomData_get_offset(&em->bm->pdata, CD_FACEMAP);
+
+ if (cd_fmap_offset != -1) {
+ BMFace *efa;
+ BMIter iter;
+ int *map;
+
+ if (purge) {
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (map) {
+ if (*map == fmap_nr)
+ *map = -1;
+ else if (*map > fmap_nr)
+ *map -= 1;
+ }
+ }
+ }
+ else {
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ map = BM_ELEM_CD_GET_VOID_P(efa, cd_fmap_offset);
+
+ if (map && *map == fmap_nr &&
+ (!do_selected || BM_elem_flag_test(efa, BM_ELEM_SELECT))) {
+ *map = -1;
+ }
+ }
+ }
+ }
+
+ if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
+ ob->actfmap--;
+
+ BLI_remlink(&ob->fmaps, fmap);
+ MEM_freeN(fmap);
+ }
+ }
}
static void object_fmap_remove_object_mode(Object *ob, bFaceMap *fmap, bool purge)
{
- const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
-
- if (ob->type == OB_MESH) {
- Mesh *me = ob->data;
-
- if (CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
- int *map = CustomData_get_layer(&me->pdata, CD_FACEMAP);
- int i;
-
- if (map) {
- for (i = 0; i < me->totpoly; i++) {
- if (map[i] == fmap_nr)
- map[i] = -1;
- else if (purge && map[i] > fmap_nr)
- map[i]--;
- }
- }
- }
-
- if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
- ob->actfmap--;
-
- BLI_remlink(&ob->fmaps, fmap);
- MEM_freeN(fmap);
- }
+ const int fmap_nr = BLI_findindex(&ob->fmaps, fmap);
+
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+
+ if (CustomData_has_layer(&me->pdata, CD_FACEMAP)) {
+ int *map = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ int i;
+
+ if (map) {
+ for (i = 0; i < me->totpoly; i++) {
+ if (map[i] == fmap_nr)
+ map[i] = -1;
+ else if (purge && map[i] > fmap_nr)
+ map[i]--;
+ }
+ }
+ }
+
+ if (ob->actfmap == BLI_listbase_count(&ob->fmaps))
+ ob->actfmap--;
+
+ BLI_remlink(&ob->fmaps, fmap);
+ MEM_freeN(fmap);
+ }
}
static void fmap_remove_exec(Object *ob, bFaceMap *fmap, const bool is_edit_mode, const bool purge)
{
- if (is_edit_mode)
- object_fmap_remove_edit_mode(ob, fmap, false, purge);
- else
- object_fmap_remove_object_mode(ob, fmap, purge);
+ if (is_edit_mode)
+ object_fmap_remove_edit_mode(ob, fmap, false, purge);
+ else
+ object_fmap_remove_object_mode(ob, fmap, purge);
}
void BKE_object_facemap_remove(Object *ob, bFaceMap *fmap)
{
- fmap_remove_exec(ob, fmap, BKE_object_is_in_editmode(ob), true);
+ fmap_remove_exec(ob, fmap, BKE_object_is_in_editmode(ob), true);
}
void BKE_object_facemap_clear(Object *ob)
{
- bFaceMap *fmap = (bFaceMap *)ob->fmaps.first;
-
- if (fmap) {
- const bool edit_mode = BKE_object_is_in_editmode_vgroup(ob);
-
- while (fmap) {
- bFaceMap *next_fmap = fmap->next;
- fmap_remove_exec(ob, fmap, edit_mode, false);
- fmap = next_fmap;
- }
- }
- /* remove all face-maps */
- if (ob->type == OB_MESH) {
- Mesh *me = ob->data;
- CustomData_free_layer(&me->pdata, CD_FACEMAP, me->totpoly, 0);
- }
- ob->actfmap = 0;
+ bFaceMap *fmap = (bFaceMap *)ob->fmaps.first;
+
+ if (fmap) {
+ const bool edit_mode = BKE_object_is_in_editmode_vgroup(ob);
+
+ while (fmap) {
+ bFaceMap *next_fmap = fmap->next;
+ fmap_remove_exec(ob, fmap, edit_mode, false);
+ fmap = next_fmap;
+ }
+ }
+ /* remove all face-maps */
+ if (ob->type == OB_MESH) {
+ Mesh *me = ob->data;
+ CustomData_free_layer(&me->pdata, CD_FACEMAP, me->totpoly, 0);
+ }
+ ob->actfmap = 0;
}
int BKE_object_facemap_name_index(Object *ob, const char *name)
{
- return (name) ? BLI_findstringindex(&ob->fmaps, name, offsetof(bFaceMap, name)) : -1;
+ return (name) ? BLI_findstringindex(&ob->fmaps, name, offsetof(bFaceMap, name)) : -1;
}
bFaceMap *BKE_object_facemap_find_name(Object *ob, const char *name)
{
- return BLI_findstring(&ob->fmaps, name, offsetof(bFaceMap, name));
+ return BLI_findstring(&ob->fmaps, name, offsetof(bFaceMap, name));
}