Merge branch 'master' into blender2.8
[blender.git] / source / blender / bmesh / intern / bmesh_mesh.h
index 9d7866c280a3558e4d00e1198dfaf92be4605c2d..dfd76c6b89ff5a978117eed141dceac89ea70d7b 100644 (file)
@@ -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);
@@ -48,11 +49,25 @@ void   BM_mesh_clear(BMesh *bm);
 void BM_mesh_normals_update(BMesh *bm);
 void BM_verts_calc_normal_vcos(BMesh *bm, const float (*fnos)[3], const float (*vcos)[3], float (*vnos)[3]);
 void BM_loops_calc_normal_vcos(
-        BMesh *bm, const float (*vcos)[3], const float (*vnos)[3], const float (*pnos)[3],
-        const bool use_split_normals, const float split_angle, float (*r_lnos)[3],
-        struct MLoopNorSpaceArray *r_lnors_spacearr, short (*clnors_data)[2], const int cd_loop_clnors_offset);
+        BMesh *bm, const float(*vcos)[3], const float(*vnos)[3], const float(*pnos)[3],
+        const bool use_split_normals, const float split_angle, float(*r_lnos)[3],
+        struct MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2],
+        const int cd_loop_clnors_offset, const bool do_rebuild);
 
 bool BM_loop_check_cyclic_smooth_fan(BMLoop *l_curr);
+void BM_lnorspacearr_store(BMesh *bm, float(*r_lnors)[3]);
+void BM_lnorspace_invalidate(BMesh *bm, const bool do_invalidate_all);
+void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor);
+void BM_lnorspace_update(BMesh *bm);
+void BM_normals_loops_edges_tag(BMesh *bm, const bool do_edges);
+#ifndef NDEBUG
+void BM_lnorspace_err(BMesh *bm);
+#endif
+
+/* Loop Generics */
+struct BMLoopNorEditDataArray *BM_loop_normal_editdata_array_init(BMesh *bm);
+void BM_loop_normal_editdata_array_free(struct BMLoopNorEditDataArray *lnors_ed_arr);
+int BM_total_loop_select(BMesh *bm);
 
 
 void BM_edges_sharp_from_angle_set(BMesh *bm, const float split_angle);
@@ -60,6 +75,7 @@ void BM_edges_sharp_from_angle_set(BMesh *bm, const float split_angle);
 void bmesh_edit_begin(BMesh *bm, const BMOpTypeFlag type_flag);
 void bmesh_edit_end(BMesh *bm, const BMOpTypeFlag type_flag);
 
+void BM_mesh_elem_index_ensure_ex(BMesh *bm, const char htype, int elem_offset[4]);
 void BM_mesh_elem_index_ensure(BMesh *bm, const char hflag);
 void BM_mesh_elem_index_validate(
         BMesh *bm, const char *location, const char *func,
@@ -125,25 +141,22 @@ extern const BMAllocTemplate bm_mesh_chunksize_default;
 
 #define BMALLOC_TEMPLATE_FROM_BM(bm) { (CHECK_TYPE_INLINE(bm, BMesh *), \
        (bm)->totvert), (bm)->totedge, (bm)->totloop, (bm)->totface}
-#define BMALLOC_TEMPLATE_FROM_ME(me) { (CHECK_TYPE_INLINE(me, Mesh *), \
-       (me)->totvert), (me)->totedge, (me)->totloop, (me)->totpoly}
-
-#define _VA_BMALLOC_TEMPLATE_FROM_DM_1(dm) { \
-       (CHECK_TYPE_INLINE(dm, DerivedMesh *), \
-       (dm)->getNumVerts(dm)),         \
-       (dm)->getNumEdges(dm),          \
-       (dm)->getNumLoops(dm),          \
-       (dm)->getNumPolys(dm),          \
+
+#define _VA_BMALLOC_TEMPLATE_FROM_ME_1(me) { \
+       (CHECK_TYPE_INLINE(me, Mesh *), \
+       (me)->totvert), \
+       (me)->totedge,  \
+       (me)->totloop,  \
+       (me)->totpoly,  \
 }
-#define _VA_BMALLOC_TEMPLATE_FROM_DM_2(dm_a, dm_b) { \
-       (CHECK_TYPE_INLINE(dm_a, DerivedMesh *), \
-        CHECK_TYPE_INLINE(dm_b, DerivedMesh *), \
-       (dm_a)->getNumVerts(dm_a)) + (dm_b)->getNumVerts(dm_b), \
-       (dm_a)->getNumEdges(dm_a)  + (dm_b)->getNumEdges(dm_b), \
-       (dm_a)->getNumLoops(dm_a)  + (dm_b)->getNumLoops(dm_b), \
-       (dm_a)->getNumPolys(dm_a)  + (dm_b)->getNumPolys(dm_b), \
+#define _VA_BMALLOC_TEMPLATE_FROM_ME_2(me_a, me_b) { \
+       (CHECK_TYPE_INLINE(me_a, Mesh *), \
+        CHECK_TYPE_INLINE(me_b, Mesh *), \
+       (me_a)->totvert + (me_b)->totvert),     \
+       (me_a)->totedge + (me_b)->totedge,      \
+       (me_a)->totloop + (me_b)->totloop,      \
+       (me_a)->totpoly + (me_b)->totpoly,      \
 }
-
-#define BMALLOC_TEMPLATE_FROM_DM(...) VA_NARGS_CALL_OVERLOAD(_VA_BMALLOC_TEMPLATE_FROM_DM_, __VA_ARGS__)
+#define BMALLOC_TEMPLATE_FROM_ME(...) VA_NARGS_CALL_OVERLOAD(_VA_BMALLOC_TEMPLATE_FROM_ME_, __VA_ARGS__)
 
 #endif /* __BMESH_MESH_H__ */