[Bf-blender-cvs] [d7a8cb0a35c] soc-2017-normal-tools: Cleanup: make static utility functions, try to find some better names.
Bastien Montagne
noreply at git.blender.org
Wed Feb 28 21:37:09 CET 2018
Commit: d7a8cb0a35c18294432af7194f29a28697585cdc
Author: Bastien Montagne
Date: Wed Feb 28 20:33:06 2018 +0100
Branches: soc-2017-normal-tools
https://developer.blender.org/rBd7a8cb0a35c18294432af7194f29a28697585cdc
Cleanup: make static utility functions, try to find some better names.
Naming is always complicated, trying to get something a bit more
coherent, also with already existing clnor struct...
===================================================================
M source/blender/bmesh/bmesh_class.h
M source/blender/bmesh/intern/bmesh_mesh.c
M source/blender/bmesh/intern/bmesh_mesh.h
M source/blender/editors/mesh/editmesh_tools.c
M source/blender/editors/transform/transform.c
===================================================================
diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h
index 3d3ddf1cb46..faba8e2b954 100644
--- a/source/blender/bmesh/bmesh_class.h
+++ b/source/blender/bmesh/bmesh_class.h
@@ -268,7 +268,7 @@ enum {
BM_FACE = 8
};
-typedef struct TransDataLoopNormal {
+typedef struct BMLoopNorEditData {
int loop_index;
BMLoop *loop;
float mtx[3][3];
@@ -277,17 +277,17 @@ typedef struct TransDataLoopNormal {
float nloc[3];
float *loc;
short *clnors_data;
-} TransDataLoopNormal;
+} BMLoopNorEditData;
-typedef struct LoopNormalData {
- TransDataLoopNormal *normal;
- /* This one has full amount of loops, used to map loop index to actual TransDataLoopNormal struct. */
- TransDataLoopNormal **loop_idx_to_transdata_lnors;
+typedef struct BMLoopNorEditDataArray {
+ BMLoopNorEditData *lnor_editdata;
+ /* This one has full amount of loops, used to map loop index to actual BMLoopNorEditData struct. */
+ BMLoopNorEditData **lidx_to_lnor_editdata;
- int offset;
+ int cd_custom_normal_offset;
int totloop;
void *funcdata;
-} LoopNormalData;
+} BMLoopNorEditDataArray;
#define BM_ALL (BM_VERT | BM_EDGE | BM_LOOP | BM_FACE)
#define BM_ALL_NOLOOP (BM_VERT | BM_EDGE | BM_FACE)
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index 8e5881bf181..ab6ac9edef4 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -1330,7 +1330,33 @@ static int bm_loop_normal_mark_indiv(BMesh *bm, BLI_bitmap *loops)
return totloopsel;
}
-LoopNormalData *BM_loop_normal_init(BMesh *bm)
+static void InitTransDataNormal(BMesh *bm, BMLoopNorEditData *tld, BMVert *v, BMLoop *l, const int offset)
+{
+ BLI_assert(bm->lnor_spacearr != NULL);
+ BLI_assert(bm->lnor_spacearr->lspacearr != NULL);
+
+ const int l_index = BM_elem_index_get(l);
+ short *clnors_data = BM_ELEM_CD_GET_VOID_P(l, offset);
+
+ tld->loop_index = l_index;
+ tld->loop = l;
+
+ float custom_normal[3];
+ BKE_lnor_space_custom_data_to_normal(bm->lnor_spacearr->lspacearr[l_index], clnors_data, custom_normal);
+
+ tld->clnors_data = clnors_data;
+ copy_v3_v3(tld->nloc, custom_normal);
+ copy_v3_v3(tld->niloc, custom_normal);
+
+ if (v) {
+ tld->loc = v->co;
+ }
+ else {
+ tld->loc = NULL;
+ }
+}
+
+BMLoopNorEditDataArray *BM_loop_normal_editdata_init(BMesh *bm)
{
BMLoop *l;
BMVert *v;
@@ -1343,30 +1369,30 @@ LoopNormalData *BM_loop_normal_init(BMesh *bm)
BLI_assert(bm->spacearr_dirty == 0);
- LoopNormalData *ld = MEM_mallocN(sizeof(*ld), __func__);
- ld->loop_idx_to_transdata_lnors = MEM_callocN(sizeof(*ld->loop_idx_to_transdata_lnors) * bm->totloop, __func__);
+ BMLoopNorEditDataArray *ld = MEM_mallocN(sizeof(*ld), __func__);
+ ld->lidx_to_lnor_editdata = MEM_callocN(sizeof(*ld->lidx_to_lnor_editdata) * bm->totloop, __func__);
if (!CustomData_has_layer(&bm->ldata, CD_CUSTOMLOOPNORMAL)) {
BM_data_layer_add(bm, &bm->ldata, CD_CUSTOMLOOPNORMAL);
}
- int cd_custom_normal_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
+ const int cd_custom_normal_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
BM_mesh_elem_index_ensure(bm, BM_LOOP);
BLI_bitmap *loops = BLI_BITMAP_NEW(bm->totloop, __func__);
- if (verts + edges + faces > 1) {
- /* More than one selection mode, check if only individual normals to edit. */
+ if (faces && (verts || edges)) {
+ /* More than one selection mode, check for individual normals to edit. */
totloopsel = bm_loop_normal_mark_indiv(bm, loops);
}
if (totloopsel) {
- TransDataLoopNormal *tld = ld->normal = MEM_mallocN(sizeof(*tld) * totloopsel, __func__);
+ BMLoopNorEditData *tld = ld->lnor_editdata = MEM_mallocN(sizeof(*tld) * totloopsel, __func__);
BM_ITER_MESH(v, &viter, bm, BM_VERTS_OF_MESH) {
BM_ITER_ELEM(l, &liter, v, BM_LOOPS_OF_VERT) {
if (BLI_BITMAP_TEST(loops, BM_elem_index_get(l))) {
InitTransDataNormal(bm, tld, v, l, cd_custom_normal_offset);
- ld->loop_idx_to_transdata_lnors[BM_elem_index_get(l)] = tld;
+ ld->lidx_to_lnor_editdata[BM_elem_index_get(l)] = tld;
tld++;
}
}
@@ -1375,13 +1401,13 @@ LoopNormalData *BM_loop_normal_init(BMesh *bm)
}
else { /* If multiple selection modes are inactive OR no such loop is found, fall back to editing all loops. */
totloopsel = BM_total_loop_select(bm);
- TransDataLoopNormal *tld = ld->normal = MEM_mallocN(sizeof(*tld) * totloopsel, __func__);
+ BMLoopNorEditData *tld = ld->lnor_editdata = MEM_mallocN(sizeof(*tld) * totloopsel, __func__);
BM_ITER_MESH(v, &viter, bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(v, BM_ELEM_SELECT)) {
BM_ITER_ELEM(l, &liter, v, BM_LOOPS_OF_VERT) {
InitTransDataNormal(bm, tld, v, l, cd_custom_normal_offset);
- ld->loop_idx_to_transdata_lnors[BM_elem_index_get(l)] = tld;
+ ld->lidx_to_lnor_editdata[BM_elem_index_get(l)] = tld;
tld++;
}
}
@@ -1390,14 +1416,14 @@ LoopNormalData *BM_loop_normal_init(BMesh *bm)
}
MEM_freeN(loops);
- ld->offset = cd_custom_normal_offset;
+ ld->cd_custom_normal_offset = cd_custom_normal_offset;
return ld;
}
-void BM_loop_normal_free(LoopNormalData *ld)
+void BM_loop_normal_editdata_free(BMLoopNorEditDataArray *ld)
{
- MEM_SAFE_FREE(ld->normal);
- MEM_SAFE_FREE(ld->loop_idx_to_transdata_lnors);
+ MEM_SAFE_FREE(ld->lnor_editdata);
+ MEM_SAFE_FREE(ld->lidx_to_lnor_editdata);
MEM_freeN(ld);
}
@@ -1415,32 +1441,6 @@ int BM_total_loop_select(BMesh *bm)
return r_sel;
}
-void InitTransDataNormal(BMesh *bm, TransDataLoopNormal *tld, BMVert *v, BMLoop *l, int offset)
-{
- BLI_assert(bm->lnor_spacearr != NULL);
- BLI_assert(bm->lnor_spacearr->lspacearr != NULL);
-
- const int l_index = BM_elem_index_get(l);
- short *clnors_data = BM_ELEM_CD_GET_VOID_P(l, offset);
-
- tld->loop_index = l_index;
- tld->loop = l;
-
- float custom_normal[3];
- BKE_lnor_space_custom_data_to_normal(bm->lnor_spacearr->lspacearr[l_index], clnors_data, custom_normal);
-
- tld->clnors_data = clnors_data;
- copy_v3_v3(tld->nloc, custom_normal);
- copy_v3_v3(tld->niloc, custom_normal);
-
- if (v) {
- tld->loc = v->co;
- }
- else {
- tld->loc = NULL;
- }
-}
-
static void UNUSED_FUNCTION(bm_mdisps_space_set)(Object *ob, BMesh *bm, int from, int to)
{
/* switch multires data out of tangent space */
diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h
index 487453815a4..2b2f9058954 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.h
+++ b/source/blender/bmesh/intern/bmesh_mesh.h
@@ -29,6 +29,7 @@
struct BMAllocTemplate;
struct MLoopNorSpaceArray;
+struct BMLoopNorEditDataArray;
void BM_mesh_elem_toolflags_ensure(BMesh *bm);
void BM_mesh_elem_toolflags_clear(BMesh *bm);
@@ -63,10 +64,9 @@ void BM_lnorspace_err(BMesh *bm);
#endif
/* Loop Generics */
-LoopNormalData *BM_loop_normal_init(BMesh *bm);
-void BM_loop_normal_free(LoopNormalData *ld);
+struct BMLoopNorEditDataArray *BM_loop_normal_editdata_init(BMesh *bm);
+void BM_loop_normal_editdata_free(struct BMLoopNorEditDataArray *ld);
int BM_total_loop_select(BMesh *bm);
-void InitTransDataNormal(BMesh *bm, TransDataLoopNormal *tld, BMVert *v, BMLoop *l, int offset);
void BM_edges_sharp_from_angle_set(BMesh *bm, const float split_angle);
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 6e3c2317049..9fc89ba7f42 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -6002,7 +6002,7 @@ static int init_point_normals(bContext *C, wmOperator *op, const wmEvent *UNUSED
BMesh *bm = em->bm;
BKE_editmesh_lnorspace_update(em);
- LoopNormalData *ld = BM_loop_normal_init(bm);
+ BMLoopNorEditDataArray *ld = BM_loop_normal_editdata_init(bm);
ld->funcdata = NULL;
op->customdata = ld;
@@ -6014,8 +6014,8 @@ static void apply_point_normals(bContext *C, wmOperator *op, const wmEvent *UNUS
{
Object *obedit = CTX_data_edit_object(C);
BMesh *bm = BKE_editmesh_from_object(obedit)->bm;
- LoopNormalData *ld = op->customdata;
- TransDataLoopNormal *tld = ld->normal;
+ BMLoopNorEditDataArray *ld = op->customdata;
+ BMLoopNorEditData *tld = ld->lnor_editdata;
const bool point_away = RNA_boolean_get(op->ptr, "point_away");
const bool spherize = RNA_boolean_get(op->ptr, "spherize");
@@ -6068,8 +6068,8 @@ static void apply_point_normals(bContext *C, wmOperator *op, const wmEvent *UNUS
static void point_normals_free(bContext *C, wmOperator *op)
{
- LoopNormalData *ld = op->customdata;
- BM_loop_normal_free(ld);
+ BMLoopNorEditDataArray *ld = op->customdata;
+ BM_loop_normal_editdata_free(ld);
op->customdata = NULL;
ED_area_headerprint(CTX_wm_area(C), NULL);
}
@@ -6110,8 +6110,8 @@ static int point_normals_mouse(bContext *C, wmOperator *op, const wmEvent *event
return OPERATOR_FINISHED;
}
else if ((ISKEYBOARD(event->type) || event->type == RIGHTMOUSE) && event->type != MKEY) {
- LoopNormalData *ld = op->customdata;
- TransDataLoopNormal *tld = ld->normal;
+ BMLoopNorEditDataArray *ld = op->customdata;
+ BMLoopNorEditData *tld = ld->lnor_editdata;
for (i = 0; i < ld->totloop; i++, tld++) { /* Reset custom normal data. */
BKE_lnor_space_custom_normal_to_data(bm->lnor_spacearr->lspacearr[tld->loop_index], tld->niloc, tld->clnors_data);
@@ -6133,7 +6133,7 @@ static int edbm_point_normals_modal(bContext *C, wmOperator *op, const wmEvent *
bool handled = false;
PropertyRNA *prop = RNA_struct_find_property(op->ptr, "target_location");
- LoopNormalData *ld = op->customdata;
+ BMLoopNorEditDataArray *ld = op->customdata;
if (ld->funcdata) { /* Executes and transfers control to point_normals_mouse. */
int(*apply)(bContext *, wmOperator *, const wmEvent *);
@@ -6396,13 +6396,13 @@ static void custom_loops_tag(BMesh *bm, const bool do_edges)
bm->elem_index_dirty &= ~(BM_FACE | BM_LOOP);
}
-static void merge_loop(bContext *C, LoopNormalData *ld)
+static void merge_loop(bContext *C, BMLoopNorEditDataArray *ld)
{
Object *obedit = CTX_data_edit_object(C);
BMEditMesh *em = BKE_editmesh_from_object(obedit);
BMesh *bm = em->bm;
- TransDataLoopNormal *tld = ld
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list