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>2013-09-09 06:11:44 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-09-09 06:11:44 +0400
commit2646bbdccbea62d451391d3512b5a50457a95974 (patch)
treee9fce30f4f646c7067a34ca834d2878fcf906605 /source/blender/blenkernel/BKE_mesh.h
parent9707bdfe7569bddb641409422ec14f3b0e21508a (diff)
move mesh evaluation functions (normal, mapping, smooth group... etc, calculations) into mesh_evaluate.c.
mesh.c was over 4k lines and complex functions mixed in with general library management.
Diffstat (limited to 'source/blender/blenkernel/BKE_mesh.h')
-rw-r--r--source/blender/blenkernel/BKE_mesh.h326
1 files changed, 155 insertions, 171 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 3d443cbe38c..43e425b5ce1 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -31,8 +31,6 @@
* \ingroup bke
*/
-/***/
-
struct ID;
struct BoundBox;
struct DispList;
@@ -60,108 +58,25 @@ struct UvVertMap;
struct UvMapVert;
struct UvElementMap;
struct UvElement;
+
#ifdef __cplusplus
extern "C" {
#endif
-struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me, struct Object *ob);
-
-/*
- * this function recreates a tessellation.
- * returns number of tessellation faces.
- *
- * use_poly_origindex sets whether or not the tessellation faces' origindex
- * layer should point to original poly indices or real poly indices.
- *
- * use_face_origindex sets the tessellation faces' origindex layer
- * to point to the tessellation faces themselves, not the polys.
- *
- * if both of the above are 0, it'll use the indices of the mpolys of the MPoly
- * data in pdata, and ignore the origindex layer altogether.
- */
-int BKE_mesh_recalc_tessellation(struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata,
- struct MVert *mvert,
- int totface, int totloop, int totpoly,
- const bool do_face_normals);
-
-/* for forwards compat only quad->tri polys to mface, skip ngons.
- */
-int BKE_mesh_mpoly_to_mface(struct CustomData *fdata, struct CustomData *ldata,
- struct CustomData *pdata, int totface, int totloop, int totpoly);
-
-/*calculates a face normal.*/
-void BKE_mesh_calc_poly_normal(struct MPoly *mpoly, struct MLoop *loopstart,
- struct MVert *mvarray, float no[3]);
-
-void BKE_mesh_calc_poly_normal_coords(struct MPoly *mpoly, struct MLoop *loopstart,
- const float (*vertex_coords)[3], float no[3]);
-
-void BKE_mesh_calc_poly_center(struct MPoly *mpoly, struct MLoop *loopstart,
- struct MVert *mvarray, float cent[3]);
-
-float BKE_mesh_calc_poly_area(struct MPoly *mpoly, struct MLoop *loopstart,
- struct MVert *mvarray, const float polynormal[3]);
-
-void BKE_mesh_calc_poly_angles(struct MPoly *mpoly, struct MLoop *loopstart,
- struct MVert *mvarray, float angles[]);
-int *BKE_mesh_calc_smoothgroups(const struct MEdge *medge, const int totedge,
- const struct MPoly *mpoly, const int totpoly,
- const struct MLoop *mloop, const int totloop,
- int *r_totgroup, const bool use_bitflags);
+/* *** mesh.c *** */
-void BKE_mesh_calc_relative_deform(
- const struct MPoly *mpoly, const int totpoly,
- const struct MLoop *mloop, const int totvert,
-
- const float (*vert_cos_src)[3],
- const float (*vert_cos_dst)[3],
-
- const float (*vert_cos_org)[3],
- float (*vert_cos_new)[3]);
+struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me, struct Object *ob);
-/* Find the index of the loop in 'poly' which references vertex,
- * returns -1 if not found */
int poly_find_loop_from_vert(const struct MPoly *poly,
const struct MLoop *loopstart,
unsigned vert);
-/* Fill 'adj_r' with the loop indices in 'poly' adjacent to the
- * vertex. Returns the index of the loop matching vertex, or -1 if the
- * vertex is not in 'poly' */
int poly_get_adj_loops_from_vert(unsigned adj_r[3], const struct MPoly *poly,
const struct MLoop *mloop, unsigned vert);
-/* Return the index of the edge vert that is not equal to 'v'. If
- * neither edge vertex is equal to 'v', returns -1. */
int BKE_mesh_edge_other_vert(const struct MEdge *e, int v);
-/* update the hide flag for edges and polys from the corresponding
- * flag in verts */
-void BKE_mesh_flush_hidden_from_verts_ex(const struct MVert *mvert,
- const struct MLoop *mloop,
- struct MEdge *medge, const int totedge,
- struct MPoly *mpoly, const int totpoly);
-void BKE_mesh_flush_hidden_from_verts(struct Mesh *me);
-
-void BKE_mesh_flush_hidden_from_polys_ex(struct MVert *mvert,
- const struct MLoop *mloop,
- struct MEdge *medge, const int totedge,
- const struct MPoly *mpoly, const int totpoly);
-void BKE_mesh_flush_hidden_from_polys(struct Mesh *me);
-
-
-void BKE_mesh_flush_select_from_polys_ex(struct MVert *mvert, const int totvert,
- const struct MLoop *mloop,
- struct MEdge *medge, const int totedge,
- const struct MPoly *mpoly, const int totpoly);
-void BKE_mesh_flush_select_from_polys(struct Mesh *me);
-void BKE_mesh_flush_select_from_verts_ex(const struct MVert *mvert, const int totvert,
- const struct MLoop *mloop,
- struct MEdge *medge, const int totedge,
- struct MPoly *mpoly, const int totpoly);
-void BKE_mesh_flush_select_from_verts(struct Mesh *me);
-
void BKE_mesh_unlink(struct Mesh *me);
void BKE_mesh_free(struct Mesh *me, int unlink);
struct Mesh *BKE_mesh_add(struct Main *bmain, const char *name);
@@ -191,64 +106,92 @@ void BKE_mesh_to_curve(struct Scene *scene, struct Object *ob);
void BKE_mesh_material_index_remove(struct Mesh *me, short index);
void BKE_mesh_material_index_clear(struct Mesh *me);
void BKE_mesh_smooth_flag_set(struct Object *meshOb, int enableSmooth);
-void BKE_mesh_convert_mfaces_to_mpolys(struct Mesh *mesh);
-void BKE_mesh_do_versions_convert_mfaces_to_mpolys(struct Mesh *mesh);
-void BKE_mesh_convert_mfaces_to_mpolys_ex(struct ID *id,
- struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata,
- int totedge_i, int totface_i, int totloop_i, int totpoly_i,
- struct MEdge *medge, struct MFace *mface,
- int *totloop_r, int *totpoly_r,
- struct MLoop **mloop_r, struct MPoly **mpoly_r);
-
-void BKE_mesh_calc_normals_tessface(struct MVert *mverts, int numVerts, struct MFace *mfaces, int numFaces, float (*faceNors_r)[3]);
-
-/* used for unit testing; compares two meshes, checking only
- * differences we care about. should be usable with leaf's
- * testing framework I get RNA work done, will use hackish
- * testing code for now.*/
+
const char *BKE_mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
struct BoundBox *BKE_mesh_boundbox_get(struct Object *ob);
void BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]);
void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob);
-/* if old, it converts mface->edcode to edge drawflags */
-void BKE_mesh_make_edges(struct Mesh *me, const bool use_old);
+float (*BKE_mesh_vertexCos_get(struct Mesh *me, int *r_numVerts))[3];
-void BKE_mesh_strip_loose_faces(struct Mesh *me); /* Needed for compatibility (some old read code). */
-void BKE_mesh_strip_loose_polysloops(struct Mesh *me);
-void BKE_mesh_strip_loose_edges(struct Mesh *me);
+/* vertex level transformations & checks (no derived mesh) */
+
+bool BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);
+void BKE_mesh_translate(struct Mesh *me, const float offset[3], const bool do_keys);
+
+void BKE_mesh_ensure_navmesh(struct Mesh *me);
+
+void BKE_mesh_tessface_calc(struct Mesh *mesh);
+void BKE_mesh_tessface_ensure(struct Mesh *mesh);
+void BKE_mesh_tessface_clear(struct Mesh *mesh);
+
+void BKE_mesh_do_versions_cd_flag_init(struct Mesh *mesh);
+
+
+void BKE_mesh_mselect_clear(struct Mesh *me);
+void BKE_mesh_mselect_validate(struct Mesh *me);
+int BKE_mesh_mselect_find(struct Mesh *me, int index, int type);
+int BKE_mesh_mselect_active_get(struct Mesh *me, int type);
+void BKE_mesh_mselect_active_set(struct Mesh *me, int index, int type);
+
+
+
+/* *** mesh_evaluate.c *** */
-/* Calculate vertex and face normals, face normals are returned in *faceNors_r if non-NULL
- * and vertex normals are stored in actual mverts.
- */
void BKE_mesh_calc_normals_mapping(
struct MVert *mverts, int numVerts,
struct MLoop *mloop, struct MPoly *mpolys, int numLoops, int numPolys, float (*polyNors_r)[3],
struct MFace *mfaces, int numFaces, int *origIndexFace, float (*faceNors_r)[3]);
-/* extended version of 'BKE_mesh_calc_normals_poly' with option not to calc vertex normals */
void BKE_mesh_calc_normals_mapping_ex(
struct MVert *mverts, int numVerts,
struct MLoop *mloop, struct MPoly *mpolys, int numLoops, int numPolys, float (*polyNors_r)[3],
struct MFace *mfaces, int numFaces, int *origIndexFace, float (*faceNors_r)[3],
const bool only_face_normals);
-
void BKE_mesh_calc_normals_poly(
struct MVert *mverts, int numVerts,
struct MLoop *mloop, struct MPoly *mpolys,
int numLoops, int numPolys, float (*polyNors_r)[3],
const bool only_face_normals);
-
void BKE_mesh_calc_normals(struct Mesh *me);
+void BKE_mesh_calc_normals_tessface(
+ struct MVert *mverts, int numVerts,
+ struct MFace *mfaces, int numFaces,
+ float (*faceNors_r)[3]);
+
+
+void BKE_mesh_calc_poly_normal(
+ struct MPoly *mpoly, struct MLoop *loopstart,
+ struct MVert *mvarray, float no[3]);
+void BKE_mesh_calc_poly_normal_coords(
+ struct MPoly *mpoly, struct MLoop *loopstart,
+ const float (*vertex_coords)[3], float no[3]);
+void BKE_mesh_calc_poly_center(
+ struct MPoly *mpoly, struct MLoop *loopstart,
+ struct MVert *mvarray, float cent[3]);
+float BKE_mesh_calc_poly_area(
+ struct MPoly *mpoly, struct MLoop *loopstart,
+ struct MVert *mvarray, const float polynormal[3]);
+void BKE_mesh_calc_poly_angles(
+ struct MPoly *mpoly, struct MLoop *loopstart,
+ struct MVert *mvarray, float angles[]);
+
+void BKE_mesh_poly_edgehash_insert(
+ struct EdgeHash *ehash,
+ const struct MPoly *mp, const struct MLoop *mloop);
+void BKE_mesh_poly_edgebitmap_insert(
+ unsigned int *edge_bitmap,
+ const struct MPoly *mp, const struct MLoop *mloop);
+
+
+bool BKE_mesh_center_median(struct Mesh *me, float cent[3]);
+bool BKE_mesh_center_bounds(struct Mesh *me, float cent[3]);
+bool BKE_mesh_center_centroid(struct Mesh *me, float cent[3]);
-/* Return a newly MEM_malloc'd array of all the mesh vertex locations
- * (_numVerts_r_ may be NULL) */
-float (*BKE_mesh_vertexCos_get(struct Mesh *me, int *r_numVerts))[3];
/* map from uv vertex to face (for select linked, stitch, uv suburf) */
/* UvVertMap */
-
#define STD_UV_CONNECT_LIMIT 0.0001f
typedef struct UvVertMap {
@@ -302,45 +245,107 @@ typedef struct UvElementMap {
* to make that many islands, he can bite me :p */
#define INVALID_ISLAND 0xFFFF
-UvVertMap *BKE_mesh_uv_vert_map_create(struct MPoly *mpoly, struct MLoop *mloop, struct MLoopUV *mloopuv,
- unsigned int totpoly, unsigned int totvert, int selected, float *limit);
-UvMapVert *BKE_mesh_uv_vert_map_get_vert(UvVertMap *vmap, unsigned int v);
-void BKE_mesh_uv_vert_map_free(UvVertMap *vmap);
-
/* Connectivity data */
typedef struct MeshElemMap {
int *indices;
int count;
} MeshElemMap;
-
-typedef struct IndexNode {
- struct IndexNode *next, *prev;
- int index;
-} IndexNode;
-void BKE_mesh_vert_poly_map_create(MeshElemMap **r_map, int **r_mem,
- const struct MPoly *mface, const struct MLoop *mloop,
- int totvert, int totface, int totloop);
+/* mapping */
+UvVertMap *BKE_mesh_uv_vert_map_create(
+ struct MPoly *mpoly, struct MLoop *mloop, struct MLoopUV *mloopuv,
+ unsigned int totpoly, unsigned int totvert, int selected, float *limit);
+UvMapVert *BKE_mesh_uv_vert_map_get_vert(UvVertMap *vmap, unsigned int v);
+void BKE_mesh_uv_vert_map_free(UvVertMap *vmap);
-void BKE_mesh_vert_edge_map_create(MeshElemMap **r_map, int **r_mem,
- const struct MEdge *medge, int totvert, int totedge);
+void BKE_mesh_vert_poly_map_create(
+ MeshElemMap **r_map, int **r_mem,
+ const struct MPoly *mface, const struct MLoop *mloop,
+ int totvert, int totface, int totloop);
+void BKE_mesh_vert_edge_map_create(
+ MeshElemMap **r_map, int **r_mem,
+ const struct MEdge *medge, int totvert, int totedge);
+void BKE_mesh_edge_poly_map_create(
+ MeshElemMap **r_map, int **r_mem,
+ const struct MEdge *medge, const int totedge,
+ const struct MPoly *mpoly, const int totpoly,
+ const struct MLoop *mloop, const int totloop);
+
+/* tessface */
+void BKE_mesh_loops_to_mface_corners(
+ struct CustomData *fdata, struct CustomData *ldata,
+ struct CustomData *pdata, int lindex[4], int findex,
+ const int polyindex, const int mf_len,
+ const int numTex, const int numCol,
+ const bool hasPCol, const bool hasOrigSpace);
+int BKE_mesh_recalc_tessellation(
+ struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata,
+ struct MVert *mvert,
+ int totface, int totloop, int totpoly,
+ const bool do_face_normals);
+int BKE_mesh_mpoly_to_mface(
+ struct CustomData *fdata, struct CustomData *ldata,
+ struct CustomData *pdata, int totface, int totloop, int totpoly);
+void BKE_mesh_convert_mfaces_to_mpolys(struct Mesh *mesh);
+void BKE_mesh_do_versions_convert_mfaces_to_mpolys(struct Mesh *mesh);
+void BKE_mesh_convert_mfaces_to_mpolys_ex(
+ struct ID *id,
+ struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata,
+ int totedge_i, int totface_i, int totloop_i, int totpoly_i,
+ struct MEdge *medge, struct MFace *mface,
+ int *totloop_r, int *totpoly_r,
+ struct MLoop **mloop_r, struct MPoly **mpoly_r);
+
+/* flush flags */
+void BKE_mesh_flush_hidden_from_verts_ex(
+ const struct MVert *mvert,
+ const struct MLoop *mloop,
+ struct MEdge *medge, const int totedge,
+ struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_hidden_from_verts(struct Mesh *me);
+void BKE_mesh_flush_hidden_from_polys_ex(
+ struct MVert *mvert,
+ const struct MLoop *mloop,
+ struct MEdge *medge, const int totedge,
+ const struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_hidden_from_polys(struct Mesh *me);
+void BKE_mesh_flush_select_from_polys_ex(
+ struct MVert *mvert, const int totvert,
+ const struct MLoop *mloop,
+ struct MEdge *medge, const int totedge,
+ const struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_select_from_polys(struct Mesh *me);
+void BKE_mesh_flush_select_from_verts_ex(
+ const struct MVert *mvert, const int totvert,
+ const struct MLoop *mloop,
+ struct MEdge *medge, const int totedge,
+ struct MPoly *mpoly, const int totpoly);
+void BKE_mesh_flush_select_from_verts(struct Mesh *me);
-void BKE_mesh_edge_poly_map_create(MeshElemMap **r_map, int **r_mem,
- const struct MEdge *medge, const int totedge,
- const struct MPoly *mpoly, const int totpoly,
- const struct MLoop *mloop, const int totloop);
+/* smoothgroups */
+int *BKE_mesh_calc_smoothgroups(
+ const struct MEdge *medge, const int totedge,
+ const struct MPoly *mpoly, const int totpoly,
+ const struct MLoop *mloop, const int totloop,
+ int *r_totgroup, const bool use_bitflags);
+
+/* spatial evaluation */
+void BKE_mesh_calc_relative_deform(
+ const struct MPoly *mpoly, const int totpoly,
+ const struct MLoop *mloop, const int totvert,
+
+ const float (*vert_cos_src)[3],
+ const float (*vert_cos_dst)[3],
+
+ const float (*vert_cos_org)[3],
+ float (*vert_cos_new)[3]);
-/* vertex level transformations & checks (no derived mesh) */
-bool BKE_mesh_minmax(struct Mesh *me, float r_min[3], float r_max[3]);
-bool BKE_mesh_center_median(struct Mesh *me, float cent[3]);
-bool BKE_mesh_center_bounds(struct Mesh *me, float cent[3]);
-bool BKE_mesh_center_centroid(struct Mesh *me, float cent[3]);
-void BKE_mesh_translate(struct Mesh *me, const float offset[3], const bool do_keys);
-/* mesh_validate.c */
-/* XXX Loop v/e are unsigned, so using max uint_32 value as invalid marker... */
-#define INVALID_LOOP_EDGE_MARKER 4294967295u
+/* *** mesh_validate.c *** */
+
+int BKE_mesh_validate(struct Mesh *me, const int do_verbose);
+
bool BKE_mesh_validate_arrays(
struct Mesh *me,
struct MVert *mverts, unsigned int totvert,
@@ -359,34 +364,13 @@ bool BKE_mesh_validate_all_customdata(
const bool do_verbose, const bool do_fixes,
bool *r_change);
-int BKE_mesh_validate(struct Mesh *me, const int do_verbose);
+void BKE_mesh_strip_loose_faces(struct Mesh *me);
+void BKE_mesh_strip_loose_polysloops(struct Mesh *me);
+void BKE_mesh_strip_loose_edges(struct Mesh *me);
+void BKE_mesh_calc_edges_legacy(struct Mesh *me, const bool use_old);
void BKE_mesh_calc_edges(struct Mesh *mesh, bool update, const bool select);
-void BKE_mesh_ensure_navmesh(struct Mesh *me);
-
-void BKE_mesh_tessface_calc(struct Mesh *mesh);
-void BKE_mesh_tessface_ensure(struct Mesh *mesh);
-void BKE_mesh_tessface_clear(struct Mesh *mesh);
-
-/* Convert a triangle or quadrangle of loop/poly data to tessface data */
-void BKE_mesh_loops_to_mface_corners(struct CustomData *fdata, struct CustomData *ldata,
- struct CustomData *pdata, int lindex[4], int findex,
- const int polyindex, const int mf_len,
- const int numTex, const int numCol, const int hasPCol, const int hasOrigSpace);
-
-void BKE_mesh_poly_edgehash_insert(struct EdgeHash *ehash, const struct MPoly *mp, const struct MLoop *mloop);
-void BKE_mesh_poly_edgebitmap_insert(unsigned int *edge_bitmap, const struct MPoly *mp, const struct MLoop *mloop);
-
-void BKE_mesh_do_versions_cd_flag_init(struct Mesh *mesh);
-
-
-void BKE_mesh_mselect_clear(struct Mesh *me);
-void BKE_mesh_mselect_validate(struct Mesh *me);
-int BKE_mesh_mselect_find(struct Mesh *me, int index, int type);
-int BKE_mesh_mselect_active_get(struct Mesh *me, int type);
-void BKE_mesh_mselect_active_set(struct Mesh *me, int index, int type);
-
#ifdef __cplusplus
}
#endif