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>2015-07-10 21:39:27 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-07-10 21:39:27 +0300
commitf3d5af41725989506474fec32d093d8ecf06403a (patch)
tree0a03bc1030d0898427bb2c1fbad21a32804904d1 /source/blender/blenkernel/intern
parent0875cb07cce53610bdfce3ed486ac5b2ced5bc5c (diff)
Cleanup: use const for mesh functions
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/mesh.c66
-rw-r--r--source/blender/blenkernel/intern/mesh_evaluate.c252
-rw-r--r--source/blender/blenkernel/intern/pbvh.c21
-rw-r--r--source/blender/blenkernel/intern/pbvh_intern.h2
4 files changed, 186 insertions, 155 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 37a98eae58b..f7bedc3c9f9 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -1175,9 +1175,10 @@ static void make_edges_mdata_extend(MEdge **r_alledge, int *r_totedge,
/* Initialize mverts, medges and, faces for converting nurbs to mesh and derived mesh */
/* return non-zero on error */
-int BKE_mesh_nurbs_to_mdata(Object *ob, MVert **allvert, int *totvert,
- MEdge **alledge, int *totedge, MLoop **allloop, MPoly **allpoly,
- int *totloop, int *totpoly)
+int BKE_mesh_nurbs_to_mdata(
+ Object *ob, MVert **r_allvert, int *r_totvert,
+ MEdge **r_alledge, int *r_totedge, MLoop **r_allloop, MPoly **r_allpoly,
+ int *r_totloop, int *r_totpoly)
{
ListBase disp = {NULL, NULL};
@@ -1185,11 +1186,12 @@ int BKE_mesh_nurbs_to_mdata(Object *ob, MVert **allvert, int *totvert,
disp = ob->curve_cache->disp;
}
- return BKE_mesh_nurbs_displist_to_mdata(ob, &disp,
- allvert, totvert,
- alledge, totedge,
- allloop, allpoly, NULL,
- totloop, totpoly);
+ return BKE_mesh_nurbs_displist_to_mdata(
+ ob, &disp,
+ r_allvert, r_totvert,
+ r_alledge, r_totedge,
+ r_allloop, r_allpoly, NULL,
+ r_totloop, r_totpoly);
}
/* BMESH: this doesn't calculate all edges from polygons,
@@ -1197,12 +1199,13 @@ int BKE_mesh_nurbs_to_mdata(Object *ob, MVert **allvert, int *totvert,
/* Initialize mverts, medges and, faces for converting nurbs to mesh and derived mesh */
/* use specified dispbase */
-int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
- MVert **allvert, int *_totvert,
- MEdge **alledge, int *_totedge,
- MLoop **allloop, MPoly **allpoly,
- MLoopUV **alluv,
- int *_totloop, int *_totpoly)
+int BKE_mesh_nurbs_displist_to_mdata(
+ Object *ob, const ListBase *dispbase,
+ MVert **r_allvert, int *r_totvert,
+ MEdge **r_alledge, int *r_totedge,
+ MLoop **r_allloop, MPoly **r_allpoly,
+ MLoopUV **r_alluv,
+ int *r_totloop, int *r_totpoly)
{
Curve *cu = ob->data;
DispList *dl;
@@ -1253,13 +1256,13 @@ int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
return -1;
}
- *allvert = mvert = MEM_callocN(sizeof(MVert) * totvert, "nurbs_init mvert");
- *alledge = medge = MEM_callocN(sizeof(MEdge) * totedge, "nurbs_init medge");
- *allloop = mloop = MEM_callocN(sizeof(MLoop) * totvlak * 4, "nurbs_init mloop"); // totloop
- *allpoly = mpoly = MEM_callocN(sizeof(MPoly) * totvlak, "nurbs_init mloop");
+ *r_allvert = mvert = MEM_callocN(sizeof(MVert) * totvert, "nurbs_init mvert");
+ *r_alledge = medge = MEM_callocN(sizeof(MEdge) * totedge, "nurbs_init medge");
+ *r_allloop = mloop = MEM_callocN(sizeof(MLoop) * totvlak * 4, "nurbs_init mloop"); // totloop
+ *r_allpoly = mpoly = MEM_callocN(sizeof(MPoly) * totvlak, "nurbs_init mloop");
- if (alluv)
- *alluv = mloopuv = MEM_callocN(sizeof(MLoopUV) * totvlak * 4, "nurbs_init mloopuv");
+ if (r_alluv)
+ *r_alluv = mloopuv = MEM_callocN(sizeof(MLoopUV) * totvlak * 4, "nurbs_init mloopuv");
/* verts and faces */
vertcount = 0;
@@ -1332,7 +1335,7 @@ int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
mloop[0].v = startvert + index[0];
mloop[1].v = startvert + index[2];
mloop[2].v = startvert + index[1];
- mpoly->loopstart = (int)(mloop - (*allloop));
+ mpoly->loopstart = (int)(mloop - (*r_allloop));
mpoly->totloop = 3;
mpoly->mat_nr = dl->col;
@@ -1390,7 +1393,7 @@ int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
mloop[1].v = p3;
mloop[2].v = p4;
mloop[3].v = p2;
- mpoly->loopstart = (int)(mloop - (*allloop));
+ mpoly->loopstart = (int)(mloop - (*r_allloop));
mpoly->totloop = 4;
mpoly->mat_nr = dl->col;
@@ -1440,14 +1443,14 @@ int BKE_mesh_nurbs_displist_to_mdata(Object *ob, ListBase *dispbase,
}
if (totvlak) {
- make_edges_mdata_extend(alledge, &totedge,
- *allpoly, *allloop, totvlak);
+ make_edges_mdata_extend(r_alledge, &totedge,
+ *r_allpoly, *r_allloop, totvlak);
}
- *_totpoly = totvlak;
- *_totloop = totloop;
- *_totedge = totedge;
- *_totvert = totvert;
+ *r_totpoly = totvlak;
+ *r_totloop = totloop;
+ *r_totedge = totedge;
+ *r_totvert = totvert;
return 0;
}
@@ -1871,8 +1874,9 @@ int poly_find_loop_from_vert(
* vertex is not in \a poly
*/
int poly_get_adj_loops_from_vert(
- unsigned r_adj[2], const MPoly *poly,
- const MLoop *mloop, unsigned vert)
+ const MPoly *poly,
+ const MLoop *mloop, unsigned int vert,
+ unsigned int r_adj[2])
{
int corner = poly_find_loop_from_vert(poly,
&mloop[poly->loopstart],
@@ -1906,7 +1910,7 @@ int BKE_mesh_edge_other_vert(const MEdge *e, int v)
}
/* basic vertex data functions */
-bool BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3])
+bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
{
int i = me->totvert;
MVert *mvert;
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c
index 5ba72ccac82..00a82727e59 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -89,26 +89,28 @@ static void mesh_calc_normals_vert_fallback(MVert *mverts, int numVerts)
/* Calculate vertex and face normals, face normals are returned in *r_faceNors if non-NULL
* and vertex normals are stored in actual mverts.
*/
-void BKE_mesh_calc_normals_mapping(MVert *mverts, int numVerts,
- MLoop *mloop, MPoly *mpolys, int numLoops, int numPolys, float (*r_polyNors)[3],
- MFace *mfaces, int numFaces, const int *origIndexFace, float (*r_faceNors)[3])
+void BKE_mesh_calc_normals_mapping(
+ MVert *mverts, int numVerts,
+ const MLoop *mloop, const MPoly *mpolys, int numLoops, int numPolys, float (*r_polyNors)[3],
+ const MFace *mfaces, int numFaces, const int *origIndexFace, float (*r_faceNors)[3])
{
- BKE_mesh_calc_normals_mapping_ex(mverts, numVerts, mloop, mpolys,
- numLoops, numPolys, r_polyNors, mfaces, numFaces,
- origIndexFace, r_faceNors, false);
+ BKE_mesh_calc_normals_mapping_ex(
+ mverts, numVerts, mloop, mpolys,
+ numLoops, numPolys, r_polyNors, mfaces, numFaces,
+ origIndexFace, r_faceNors, false);
}
/* extended version of 'BKE_mesh_calc_normals_poly' with option not to calc vertex normals */
void BKE_mesh_calc_normals_mapping_ex(
MVert *mverts, int numVerts,
- MLoop *mloop, MPoly *mpolys,
+ const MLoop *mloop, const MPoly *mpolys,
int numLoops, int numPolys, float (*r_polyNors)[3],
- MFace *mfaces, int numFaces, const int *origIndexFace, float (*r_faceNors)[3],
+ const MFace *mfaces, int numFaces, const int *origIndexFace, float (*r_faceNors)[3],
const bool only_face_normals)
{
float (*pnors)[3] = r_polyNors, (*fnors)[3] = r_faceNors;
int i;
- MFace *mf;
- MPoly *mp;
+ const MFace *mf;
+ const MPoly *mp;
if (numPolys == 0) {
if (only_face_normals == false) {
@@ -164,8 +166,10 @@ void BKE_mesh_calc_normals_mapping_ex(
}
-static void mesh_calc_normals_poly_accum(MPoly *mp, MLoop *ml,
- MVert *mvert, float polyno[3], float (*tnorms)[3])
+static void mesh_calc_normals_poly_accum(
+ const MPoly *mp, const MLoop *ml,
+ const MVert *mvert,
+ float r_polyno[3], float (*r_tnorms)[3])
{
const int nverts = mp->totloop;
float (*edgevecbuf)[3] = BLI_array_alloca(edgevecbuf, (size_t)nverts);
@@ -178,11 +182,11 @@ static void mesh_calc_normals_poly_accum(MPoly *mp, MLoop *ml,
const float *v_prev = mvert[ml[i_prev].v].co;
const float *v_curr;
- zero_v3(polyno);
+ zero_v3(r_polyno);
/* Newell's Method */
for (i = 0; i < nverts; i++) {
v_curr = mvert[ml[i].v].co;
- add_newell_cross_v3_v3v3(polyno, v_prev, v_curr);
+ add_newell_cross_v3_v3v3(r_polyno, v_prev, v_curr);
/* Unrelated to normalize, calculate edge-vector */
sub_v3_v3v3(edgevecbuf[i_prev], v_prev, v_curr);
@@ -191,8 +195,8 @@ static void mesh_calc_normals_poly_accum(MPoly *mp, MLoop *ml,
v_prev = v_curr;
}
- if (UNLIKELY(normalize_v3(polyno) == 0.0f)) {
- polyno[2] = 1.0f; /* other axis set to 0.0 */
+ if (UNLIKELY(normalize_v3(r_polyno) == 0.0f)) {
+ r_polyno[2] = 1.0f; /* other axis set to 0.0 */
}
}
@@ -209,21 +213,23 @@ static void mesh_calc_normals_poly_accum(MPoly *mp, MLoop *ml,
const float fac = saacos(-dot_v3v3(cur_edge, prev_edge));
/* accumulate */
- madd_v3_v3fl(tnorms[ml[i].v], polyno, fac);
+ madd_v3_v3fl(r_tnorms[ml[i].v], r_polyno, fac);
prev_edge = cur_edge;
}
}
}
-void BKE_mesh_calc_normals_poly(MVert *mverts, int numVerts, MLoop *mloop, MPoly *mpolys,
- int UNUSED(numLoops), int numPolys, float (*r_polynors)[3],
- const bool only_face_normals)
+void BKE_mesh_calc_normals_poly(
+ MVert *mverts, int numVerts,
+ const MLoop *mloop, const MPoly *mpolys,
+ int UNUSED(numLoops), int numPolys, float (*r_polynors)[3],
+ const bool only_face_normals)
{
float (*pnors)[3] = r_polynors;
float (*tnorms)[3];
int i;
- MPoly *mp;
+ const MPoly *mp;
if (only_face_normals) {
BLI_assert((pnors != NULL) || (numPolys == 0));
@@ -280,14 +286,17 @@ void BKE_mesh_calc_normals(Mesh *mesh)
#endif
}
-void BKE_mesh_calc_normals_tessface(MVert *mverts, int numVerts, MFace *mfaces, int numFaces, float (*r_faceNors)[3])
+void BKE_mesh_calc_normals_tessface(
+ MVert *mverts, int numVerts,
+ const MFace *mfaces, int numFaces,
+ float (*r_faceNors)[3])
{
float (*tnorms)[3] = MEM_callocN(sizeof(*tnorms) * (size_t)numVerts, "tnorms");
float (*fnors)[3] = (r_faceNors) ? r_faceNors : MEM_callocN(sizeof(*fnors) * (size_t)numFaces, "meshnormals");
int i;
for (i = 0; i < numFaces; i++) {
- MFace *mf = &mfaces[i];
+ const MFace *mf = &mfaces[i];
float *f_no = fnors[i];
float *n4 = (mf->v4) ? tnorms[mf->v4] : NULL;
const float *c4 = (mf->v4) ? mverts[mf->v4].co : NULL;
@@ -1061,7 +1070,7 @@ static void loop_split_generator(TaskPool *UNUSED(pool), void *taskdata, int UNU
* Useful to materialize sharp edges (or non-smooth faces) without actually modifying the geometry (splitting edges).
*/
void BKE_mesh_normals_loop_split(
- MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
+ const MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
MLoop *mloops, float (*r_loopnors)[3], const int numLoops,
MPoly *mpolys, const float (*polynors)[3], const int numPolys,
const bool use_split_normals, float split_angle,
@@ -1287,7 +1296,7 @@ void BKE_mesh_normals_loop_split(
* (this allows to set whole vert's normals at once, useful in some cases).
*/
static void mesh_normals_loop_custom_set(
- MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
+ const MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
MLoop *mloops, float (*custom_loopnors)[3], const int numLoops,
MPoly *mpolys, const float (*polynors)[3], const int numPolys,
short (*r_clnors_data)[2], const bool use_vertices)
@@ -1453,7 +1462,7 @@ static void mesh_normals_loop_custom_set(
}
void BKE_mesh_normals_loop_custom_set(
- MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
+ const MVert *mverts, const int numVerts, MEdge *medges, const int numEdges,
MLoop *mloops, float (*custom_loopnors)[3], const int numLoops,
MPoly *mpolys, const float (*polynors)[3], const int numPolys,
short (*r_clnors_data)[2])
@@ -1463,7 +1472,7 @@ void BKE_mesh_normals_loop_custom_set(
}
void BKE_mesh_normals_loop_custom_from_vertices_set(
- MVert *mverts, float (*custom_vertnors)[3], const int numVerts,
+ const MVert *mverts, float (*custom_vertnors)[3], const int numVerts,
MEdge *medges, const int numEdges, MLoop *mloops, const int numLoops,
MPoly *mpolys, const float (*polynors)[3], const int numPolys,
short (*r_clnors_data)[2])
@@ -1486,10 +1495,10 @@ void BKE_mesh_normals_loop_custom_from_vertices_set(
/* User data. */
typedef struct {
- MPoly *mpolys; /* faces */
- MLoop *mloops; /* faces's vertices */
- MVert *mverts; /* vertices */
- MLoopUV *luvs; /* texture coordinates */
+ const MPoly *mpolys; /* faces */
+ const MLoop *mloops; /* faces's vertices */
+ const MVert *mverts; /* vertices */
+ const MLoopUV *luvs; /* texture coordinates */
float (*lnors)[3]; /* loops' normals */
float (*tangents)[4]; /* output tangents */
int num_polys; /* number of polygons */
@@ -1542,15 +1551,17 @@ static void set_tspace(const SMikkTSpaceContext *pContext, const float fv_tangen
* split normals can be used to recreate the full tangent space.
* Note: * The mesh should be made of only tris and quads!
*/
-void BKE_mesh_loop_tangents_ex(MVert *mverts, const int UNUSED(numVerts), MLoop *mloops,
- float (*r_looptangent)[4], float (*loopnors)[3], MLoopUV *loopuvs,
- const int UNUSED(numLoops), MPoly *mpolys, const int numPolys, ReportList *reports)
+void BKE_mesh_loop_tangents_ex(
+ const MVert *mverts, const int UNUSED(numVerts), const MLoop *mloops,
+ float (*r_looptangent)[4], float (*loopnors)[3], const MLoopUV *loopuvs,
+ const int UNUSED(numLoops), const MPoly *mpolys, const int numPolys,
+ ReportList *reports)
{
BKEMeshToTangent mesh_to_tangent = {NULL};
SMikkTSpaceContext s_context = {NULL};
SMikkTSpaceInterface s_interface = {NULL};
- MPoly *mp;
+ const MPoly *mp;
int mp_index;
/* First check we do have a tris/quads only mesh. */
@@ -1587,8 +1598,9 @@ void BKE_mesh_loop_tangents_ex(MVert *mverts, const int UNUSED(numVerts), MLoop
/**
* Wrapper around BKE_mesh_loop_tangents_ex, which takes care of most boiling code.
- * Note: * There must be a valid loop's CD_NORMALS available.
- * * The mesh should be made of only tris and quads!
+ * \note
+ * - There must be a valid loop's CD_NORMALS available.
+ * - The mesh should be made of only tris and quads!
*/
void BKE_mesh_loop_tangents(Mesh *mesh, const char *uvmap, float (*r_looptangents)[4], ReportList *reports)
{
@@ -1633,8 +1645,9 @@ void BKE_mesh_loop_tangents(Mesh *mesh, const char *uvmap, float (*r_looptangent
* computing newell normal.
*
*/
-static void mesh_calc_ngon_normal(MPoly *mpoly, MLoop *loopstart,
- MVert *mvert, float normal[3])
+static void mesh_calc_ngon_normal(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvert, float normal[3])
{
const int nverts = mpoly->totloop;
const float *v_prev = mvert[loopstart[nverts - 1].v].co;
@@ -1655,21 +1668,22 @@ static void mesh_calc_ngon_normal(MPoly *mpoly, MLoop *loopstart,
}
}
-void BKE_mesh_calc_poly_normal(MPoly *mpoly, MLoop *loopstart,
- MVert *mvarray, float no[3])
+void BKE_mesh_calc_poly_normal(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvarray, float r_no[3])
{
if (mpoly->totloop > 4) {
- mesh_calc_ngon_normal(mpoly, loopstart, mvarray, no);
+ mesh_calc_ngon_normal(mpoly, loopstart, mvarray, r_no);
}
else if (mpoly->totloop == 3) {
- normal_tri_v3(no,
+ normal_tri_v3(r_no,
mvarray[loopstart[0].v].co,
mvarray[loopstart[1].v].co,
mvarray[loopstart[2].v].co
);
}
else if (mpoly->totloop == 4) {
- normal_quad_v3(no,
+ normal_quad_v3(r_no,
mvarray[loopstart[0].v].co,
mvarray[loopstart[1].v].co,
mvarray[loopstart[2].v].co,
@@ -1677,49 +1691,51 @@ void BKE_mesh_calc_poly_normal(MPoly *mpoly, MLoop *loopstart,
);
}
else { /* horrible, two sided face! */
- no[0] = 0.0;
- no[1] = 0.0;
- no[2] = 1.0;
+ r_no[0] = 0.0;
+ r_no[1] = 0.0;
+ r_no[2] = 1.0;
}
}
/* duplicate of function above _but_ takes coords rather then mverts */
-static void mesh_calc_ngon_normal_coords(MPoly *mpoly, MLoop *loopstart,
- const float (*vertex_coords)[3], float normal[3])
+static void mesh_calc_ngon_normal_coords(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const float (*vertex_coords)[3], float r_normal[3])
{
const int nverts = mpoly->totloop;
const float *v_prev = vertex_coords[loopstart[nverts - 1].v];
const float *v_curr;
int i;
- zero_v3(normal);
+ zero_v3(r_normal);
/* Newell's Method */
for (i = 0; i < nverts; i++) {
v_curr = vertex_coords[loopstart[i].v];
- add_newell_cross_v3_v3v3(normal, v_prev, v_curr);
+ add_newell_cross_v3_v3v3(r_normal, v_prev, v_curr);
v_prev = v_curr;
}
- if (UNLIKELY(normalize_v3(normal) == 0.0f)) {
- normal[2] = 1.0f; /* other axis set to 0.0 */
+ if (UNLIKELY(normalize_v3(r_normal) == 0.0f)) {
+ r_normal[2] = 1.0f; /* other axis set to 0.0 */
}
}
-void BKE_mesh_calc_poly_normal_coords(MPoly *mpoly, MLoop *loopstart,
- const float (*vertex_coords)[3], float no[3])
+void BKE_mesh_calc_poly_normal_coords(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const float (*vertex_coords)[3], float r_no[3])
{
if (mpoly->totloop > 4) {
- mesh_calc_ngon_normal_coords(mpoly, loopstart, vertex_coords, no);
+ mesh_calc_ngon_normal_coords(mpoly, loopstart, vertex_coords, r_no);
}
else if (mpoly->totloop == 3) {
- normal_tri_v3(no,
+ normal_tri_v3(r_no,
vertex_coords[loopstart[0].v],
vertex_coords[loopstart[1].v],
vertex_coords[loopstart[2].v]
);
}
else if (mpoly->totloop == 4) {
- normal_quad_v3(no,
+ normal_quad_v3(r_no,
vertex_coords[loopstart[0].v],
vertex_coords[loopstart[1].v],
vertex_coords[loopstart[2].v],
@@ -1727,14 +1743,15 @@ void BKE_mesh_calc_poly_normal_coords(MPoly *mpoly, MLoop *loopstart,
);
}
else { /* horrible, two sided face! */
- no[0] = 0.0;
- no[1] = 0.0;
- no[2] = 1.0;
+ r_no[0] = 0.0;
+ r_no[1] = 0.0;
+ r_no[2] = 1.0;
}
}
-static void mesh_calc_ngon_center(MPoly *mpoly, MLoop *loopstart,
- MVert *mvert, float cent[3])
+static void mesh_calc_ngon_center(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvert, float cent[3])
{
const float w = 1.0f / (float)mpoly->totloop;
int i;
@@ -1746,18 +1763,19 @@ static void mesh_calc_ngon_center(MPoly *mpoly, MLoop *loopstart,
}
}
-void BKE_mesh_calc_poly_center(MPoly *mpoly, MLoop *loopstart,
- MVert *mvarray, float cent[3])
+void BKE_mesh_calc_poly_center(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvarray, float r_cent[3])
{
if (mpoly->totloop == 3) {
- cent_tri_v3(cent,
+ cent_tri_v3(r_cent,
mvarray[loopstart[0].v].co,
mvarray[loopstart[1].v].co,
mvarray[loopstart[2].v].co
);
}
else if (mpoly->totloop == 4) {
- cent_quad_v3(cent,
+ cent_quad_v3(r_cent,
mvarray[loopstart[0].v].co,
mvarray[loopstart[1].v].co,
mvarray[loopstart[2].v].co,
@@ -1765,13 +1783,14 @@ void BKE_mesh_calc_poly_center(MPoly *mpoly, MLoop *loopstart,
);
}
else {
- mesh_calc_ngon_center(mpoly, loopstart, mvarray, cent);
+ mesh_calc_ngon_center(mpoly, loopstart, mvarray, r_cent);
}
}
/* note, passing polynormal is only a speedup so we can skip calculating it */
-float BKE_mesh_calc_poly_area(MPoly *mpoly, MLoop *loopstart,
- MVert *mvarray)
+float BKE_mesh_calc_poly_area(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvarray)
{
if (mpoly->totloop == 3) {
return area_tri_v3(mvarray[loopstart[0].v].co,
@@ -1781,7 +1800,7 @@ float BKE_mesh_calc_poly_area(MPoly *mpoly, MLoop *loopstart,
}
else {
int i;
- MLoop *l_iter = loopstart;
+ const MLoop *l_iter = loopstart;
float area;
float (*vertexcos)[3] = BLI_array_alloca(vertexcos, (size_t)mpoly->totloop);
@@ -1798,7 +1817,9 @@ float BKE_mesh_calc_poly_area(MPoly *mpoly, MLoop *loopstart,
}
/* note, results won't be correct if polygon is non-planar */
-static float mesh_calc_poly_planar_area_centroid(MPoly *mpoly, MLoop *loopstart, MVert *mvarray, float cent[3])
+static float mesh_calc_poly_planar_area_centroid(
+ const MPoly *mpoly, const MLoop *loopstart, const MVert *mvarray,
+ float r_cent[3])
{
int i;
float tri_area;
@@ -1808,7 +1829,7 @@ static float mesh_calc_poly_planar_area_centroid(MPoly *mpoly, MLoop *loopstart,
BKE_mesh_calc_poly_normal(mpoly, loopstart, mvarray, normal);
copy_v3_v3(v1, mvarray[loopstart[0].v].co);
copy_v3_v3(v2, mvarray[loopstart[1].v].co);
- zero_v3(cent);
+ zero_v3(r_cent);
for (i = 2; i < mpoly->totloop; i++) {
copy_v3_v3(v3, mvarray[loopstart[i].v].co);
@@ -1817,12 +1838,12 @@ static float mesh_calc_poly_planar_area_centroid(MPoly *mpoly, MLoop *loopstart,
total_area += tri_area;
cent_tri_v3(tri_cent, v1, v2, v3);
- madd_v3_v3fl(cent, tri_cent, tri_area);
+ madd_v3_v3fl(r_cent, tri_cent, tri_area);
copy_v3_v3(v2, v3);
}
- mul_v3_fl(cent, 1.0f / total_area);
+ mul_v3_fl(r_cent, 1.0f / total_area);
return total_area;
}
@@ -1850,8 +1871,9 @@ void BKE_mesh_calc_poly_angles(MPoly *mpoly, MLoop *loopstart,
#else /* equivalent the function above but avoid multiple subtractions + normalize */
-void BKE_mesh_calc_poly_angles(MPoly *mpoly, MLoop *loopstart,
- MVert *mvarray, float angles[])
+void BKE_mesh_calc_poly_angles(
+ const MPoly *mpoly, const MLoop *loopstart,
+ const MVert *mvarray, float angles[])
{
float nor_prev[3];
float nor_next[3];
@@ -1912,35 +1934,35 @@ void BKE_mesh_poly_edgebitmap_insert(unsigned int *edge_bitmap, const MPoly *mp,
/** \name Mesh Center Calculation
* \{ */
-bool BKE_mesh_center_median(Mesh *me, float cent[3])
+bool BKE_mesh_center_median(const Mesh *me, float r_cent[3])
{
int i = me->totvert;
- MVert *mvert;
- zero_v3(cent);
+ const MVert *mvert;
+ zero_v3(r_cent);
for (mvert = me->mvert; i--; mvert++) {
- add_v3_v3(cent, mvert->co);
+ add_v3_v3(r_cent, mvert->co);
}
/* otherwise we get NAN for 0 verts */
if (me->totvert) {
- mul_v3_fl(cent, 1.0f / (float)me->totvert);
+ mul_v3_fl(r_cent, 1.0f / (float)me->totvert);
}
return (me->totvert != 0);
}
-bool BKE_mesh_center_bounds(Mesh *me, float cent[3])
+bool BKE_mesh_center_bounds(const Mesh *me, float r_cent[3])
{
float min[3], max[3];
INIT_MINMAX(min, max);
if (BKE_mesh_minmax(me, min, max)) {
- mid_v3_v3v3(cent, min, max);
+ mid_v3_v3v3(r_cent, min, max);
return true;
}
return false;
}
-bool BKE_mesh_center_centroid(Mesh *me, float cent[3])
+bool BKE_mesh_center_centroid(const Mesh *me, float r_cent[3])
{
int i = me->totpoly;
MPoly *mpoly;
@@ -1948,23 +1970,23 @@ bool BKE_mesh_center_centroid(Mesh *me, float cent[3])
float total_area = 0.0f;
float poly_cent[3];
- zero_v3(cent);
+ zero_v3(r_cent);
/* calculate a weighted average of polygon centroids */
for (mpoly = me->mpoly; i--; mpoly++) {
poly_area = mesh_calc_poly_planar_area_centroid(mpoly, me->mloop + mpoly->loopstart, me->mvert, poly_cent);
- madd_v3_v3fl(cent, poly_cent, poly_area);
+ madd_v3_v3fl(r_cent, poly_cent, poly_area);
total_area += poly_area;
}
/* otherwise we get NAN for 0 polys */
if (me->totpoly) {
- mul_v3_fl(cent, 1.0f / total_area);
+ mul_v3_fl(r_cent, 1.0f / total_area);
}
/* zero area faces cause this, fallback to median */
- if (UNLIKELY(!is_finite_v3(cent))) {
- return BKE_mesh_center_median(me, cent);
+ if (UNLIKELY(!is_finite_v3(r_cent))) {
+ return BKE_mesh_center_median(me, r_cent);
}
return (me->totpoly != 0);
@@ -1977,52 +1999,54 @@ bool BKE_mesh_center_centroid(Mesh *me, float cent[3])
/** \name Mesh Volume Calculation
* \{ */
-static bool mesh_calc_center_centroid_ex(MVert *mverts, int UNUSED(numVerts),
- MFace *mfaces, int numFaces,
- float center[3])
+static bool mesh_calc_center_centroid_ex(
+ const MVert *mverts, int UNUSED(numVerts),
+ const MFace *mfaces, int numFaces,
+ float r_center[3])
{
float totweight;
int f;
- zero_v3(center);
+ zero_v3(r_center);
if (numFaces == 0)
return false;
totweight = 0.0f;
for (f = 0; f < numFaces; ++f) {
- MFace *face = &mfaces[f];
- MVert *v1 = &mverts[face->v1];
- MVert *v2 = &mverts[face->v2];
- MVert *v3 = &mverts[face->v3];
- MVert *v4 = &mverts[face->v4];
+ const MFace *face = &mfaces[f];
+ const MVert *v1 = &mverts[face->v1];
+ const MVert *v2 = &mverts[face->v2];
+ const MVert *v3 = &mverts[face->v3];
+ const MVert *v4 = &mverts[face->v4];
float area;
area = area_tri_v3(v1->co, v2->co, v3->co);
- madd_v3_v3fl(center, v1->co, area);
- madd_v3_v3fl(center, v2->co, area);
- madd_v3_v3fl(center, v3->co, area);
+ madd_v3_v3fl(r_center, v1->co, area);
+ madd_v3_v3fl(r_center, v2->co, area);
+ madd_v3_v3fl(r_center, v3->co, area);
totweight += area;
if (face->v4) {
area = area_tri_v3(v3->co, v4->co, v1->co);
- madd_v3_v3fl(center, v3->co, area);
- madd_v3_v3fl(center, v4->co, area);
- madd_v3_v3fl(center, v1->co, area);
+ madd_v3_v3fl(r_center, v3->co, area);
+ madd_v3_v3fl(r_center, v4->co, area);
+ madd_v3_v3fl(r_center, v1->co, area);
totweight += area;
}
}
if (totweight == 0.0f)
return false;
- mul_v3_fl(center, 1.0f / (3.0f * totweight));
+ mul_v3_fl(r_center, 1.0f / (3.0f * totweight));
return true;
}
-void BKE_mesh_calc_volume(MVert *mverts, int numVerts,
- MFace *mfaces, int numFaces,
- float *r_vol, float *r_com)
+void BKE_mesh_calc_volume(
+ const MVert *mverts, const int numVerts,
+ const MFace *mfaces, const int numFaces,
+ float *r_vol, float *r_com)
{
float center[3];
float totvol;
@@ -2039,11 +2063,11 @@ void BKE_mesh_calc_volume(MVert *mverts, int numVerts,
totvol = 0.0f;
for (f = 0; f < numFaces; ++f) {
- MFace *face = &mfaces[f];
- MVert *v1 = &mverts[face->v1];
- MVert *v2 = &mverts[face->v2];
- MVert *v3 = &mverts[face->v3];
- MVert *v4 = &mverts[face->v4];
+ const MFace *face = &mfaces[f];
+ const MVert *v1 = &mverts[face->v1];
+ const MVert *v2 = &mverts[face->v2];
+ const MVert *v3 = &mverts[face->v3];
+ const MVert *v4 = &mverts[face->v4];
float vol;
vol = volume_tetrahedron_signed_v3(center, v1->co, v2->co, v3->co);
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 95d8e37d1c7..a015e8427c2 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -291,7 +291,7 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
"bvh node face vert indices");
for (i = 0; i < totface; ++i) {
- MFace *f = bvh->faces + node->prim_indices[i];
+ const MFace *f = &bvh->faces[node->prim_indices[i]];
int sides = f->v4 ? 4 : 3;
for (j = 0; j < sides; ++j) {
@@ -321,7 +321,7 @@ static void build_mesh_leaf_node(PBVH *bvh, PBVHNode *node)
}
for (i = 0; i < totface; ++i) {
- MFace *f = bvh->faces + node->prim_indices[i];
+ const MFace *f = &bvh->faces[node->prim_indices[i]];
int sides = f->v4 ? 4 : 3;
for (j = 0; j < sides; ++j) {
@@ -528,7 +528,9 @@ static void pbvh_build(PBVH *bvh, BB *cb, BBC *prim_bbc, int totprim)
}
/* Do a full rebuild with on Mesh data structure */
-void BKE_pbvh_build_mesh(PBVH *bvh, MFace *faces, MVert *verts, int totface, int totvert, struct CustomData *vdata)
+void BKE_pbvh_build_mesh(
+ PBVH *bvh, const MFace *faces, MVert *verts,
+ int totface, int totvert, struct CustomData *vdata)
{
BBC *prim_bbc = NULL;
BB cb;
@@ -548,7 +550,7 @@ void BKE_pbvh_build_mesh(PBVH *bvh, MFace *faces, MVert *verts, int totface, int
prim_bbc = MEM_mallocN(sizeof(BBC) * totface, "prim_bbc");
for (i = 0; i < totface; ++i) {
- MFace *f = faces + i;
+ const MFace *f = &faces[i];
const int sides = f->v4 ? 4 : 3;
BBC *bbc = prim_bbc + i;
@@ -649,9 +651,10 @@ void BKE_pbvh_free(PBVH *bvh)
if (bvh->verts) {
/* if pbvh was deformed, new memory was allocated for verts/faces -- free it */
- MEM_freeN(bvh->verts);
- if (bvh->faces)
- MEM_freeN(bvh->faces);
+ MEM_freeN((void *)bvh->verts);
+ if (bvh->faces) {
+ MEM_freeN((void *)bvh->faces);
+ }
}
}
@@ -975,9 +978,9 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes,
totface = node->totprim;
for (i = 0; i < totface; ++i) {
- MFace *f = bvh->faces + faces[i];
+ const MFace *f = &bvh->faces[faces[i]];
float fn[3];
- unsigned int *fv = &f->v1;
+ const unsigned int *fv = &f->v1;
int sides = (f->v4) ? 4 : 3;
if (f->v4)
diff --git a/source/blender/blenkernel/intern/pbvh_intern.h b/source/blender/blenkernel/intern/pbvh_intern.h
index 7daccb47c92..5bb90af889e 100644
--- a/source/blender/blenkernel/intern/pbvh_intern.h
+++ b/source/blender/blenkernel/intern/pbvh_intern.h
@@ -133,7 +133,7 @@ struct PBVH {
/* Mesh data */
MVert *verts;
- MFace *faces;
+ const MFace *faces;
CustomData *vdata;
/* Grid Data */