diff options
Diffstat (limited to 'source/blender/blenkernel/BKE_mesh.h')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 139 |
1 files changed, 110 insertions, 29 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 3d69358960f..76205da9565 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -31,28 +31,39 @@ * \ingroup bke */ +/* defines BLI_INLINE */ +#include "BLI_utildefines.h" + +/* defines CustomDataMask */ +#include "BKE_customdata.h" + struct ID; struct BMeshCreateParams; +struct BMeshFromMeshParams; +struct BMeshToMeshParams; struct BoundBox; +struct Depsgraph; struct EdgeHash; struct ListBase; struct LinkNode; struct BLI_Stack; struct MemArena; struct BMesh; +struct KeyBlock; struct MLoopTri; struct Main; struct Mesh; +struct ModifierData; struct MPoly; struct MLoop; struct MFace; struct MEdge; struct MVert; +struct MVertTri; struct MDeformVert; struct MDisps; struct Object; struct CustomData; -struct DerivedMesh; struct Scene; struct MLoopUV; struct ReportList; @@ -70,10 +81,16 @@ extern "C" { /* *** mesh.c *** */ +struct BMesh *BKE_mesh_to_bmesh_ex( + struct Mesh *me, + const struct BMeshCreateParams *create_params, + const struct BMeshFromMeshParams *convert_params); struct BMesh *BKE_mesh_to_bmesh( struct Mesh *me, struct Object *ob, const bool add_key_index, const struct BMeshCreateParams *params); +struct Mesh *BKE_bmesh_to_mesh_nomain(struct BMesh *bm, const struct BMeshToMeshParams *params); + int poly_find_loop_from_vert( const struct MPoly *poly, const struct MLoop *loopstart, unsigned vert); @@ -92,6 +109,21 @@ struct Mesh *BKE_mesh_copy(struct Main *bmain, const struct Mesh *me); void BKE_mesh_update_customdata_pointers(struct Mesh *me, const bool do_ensure_tess_cd); void BKE_mesh_ensure_skin_customdata(struct Mesh *me); +struct Mesh *BKE_mesh_new_nomain( + int verts_len, int edges_len, int tessface_len, + int loops_len, int polys_len); +struct Mesh *BKE_mesh_new_nomain_from_template( + const struct Mesh *me_src, + int verts_len, int edges_len, int tessface_len, + int loops_len, int polys_len); + +/* These functions construct a new Mesh, contrary to BKE_mesh_from_nurbs which modifies ob itself. */ +struct Mesh *BKE_mesh_new_nomain_from_curve(struct Object *ob); +struct Mesh *BKE_mesh_new_nomain_from_curve_displist(struct Object *ob, struct ListBase *dispbase); + +bool BKE_mesh_ensure_facemap_customdata(struct Mesh *me); +bool BKE_mesh_clear_facemap_customdata(struct Mesh *me); + void BKE_mesh_make_local(struct Main *bmain, struct Mesh *me, const bool lib_local); void BKE_mesh_boundbox_calc(struct Mesh *me, float r_loc[3], float r_size[3]); void BKE_mesh_texspace_calc(struct Mesh *me); @@ -100,6 +132,22 @@ void BKE_mesh_orco_verts_transform(struct Mesh *me, float (*orco)[3], int totv int test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr); struct Mesh *BKE_mesh_from_object(struct Object *ob); void BKE_mesh_assign_object(struct Main *bmain, struct Object *ob, struct Mesh *me); +void BKE_mesh_from_metaball(struct ListBase *lb, struct Mesh *me); +int BKE_mesh_nurbs_to_mdata( + struct Object *ob, struct MVert **r_allvert, int *r_totvert, + struct MEdge **r_alledge, int *r_totedge, struct MLoop **r_allloop, struct MPoly **r_allpoly, + int *r_totloop, int *r_totpoly); +int BKE_mesh_nurbs_displist_to_mdata( + struct Object *ob, const struct ListBase *dispbase, + struct MVert **r_allvert, int *r_totvert, + struct MEdge **r_alledge, int *r_totedge, + struct MLoop **r_allloop, struct MPoly **r_allpoly, + struct MLoopUV **r_alluv, int *r_totloop, int *r_totpoly); +void BKE_mesh_from_nurbs_displist( + struct Main *bmain, struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv, const char *obdata_name, bool temporary); +void BKE_mesh_from_nurbs(struct Main *bmain, struct Object *ob); +void BKE_mesh_to_curve_nurblist(const struct Mesh *me, struct ListBase *nurblist, const int edge_users_test); +void BKE_mesh_to_curve(struct Main *bmain, struct Depsgraph *depsgraph, 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_material_remap(struct Mesh *me, const unsigned int *remap, unsigned int remap_len); @@ -109,16 +157,31 @@ 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_get_reference(struct Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size); void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob); -bool BKE_mesh_uv_cdlayer_rename_index(struct Mesh *me, const int poly_index, const int loop_index, const int face_index, - const char *new_name, const bool do_tessface); +bool BKE_mesh_uv_cdlayer_rename_index( + struct Mesh *me, const int loop_index, const int face_index, + const char *new_name, const bool do_tessface); bool BKE_mesh_uv_cdlayer_rename(struct Mesh *me, const char *old_name, const char *new_name, bool do_tessface); float (*BKE_mesh_vertexCos_get(const struct Mesh *me, int *r_numVerts))[3]; void BKE_mesh_split_faces(struct Mesh *mesh, bool free_loop_normals); +struct Mesh *BKE_mesh_new_from_object( + struct Depsgraph *depsgraph, struct Main *bmain, struct Scene *sce, struct Object *ob, + const bool apply_modifiers, const bool calc_tessface, const bool calc_undeformed); +struct Mesh *BKE_mesh_create_derived_for_modifier( + struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, + struct ModifierData *md, int build_shapekey_layers); + +/* Copies a nomain-Mesh into an existing Mesh. */ +void BKE_mesh_nomain_to_mesh(struct Mesh *mesh_src, struct Mesh *mesh_dst, struct Object *ob, + CustomDataMask mask, bool take_ownership); +void BKE_mesh_nomain_to_meshkey(struct Mesh *mesh_src, struct Mesh *mesh_dst, struct KeyBlock *kb); + + /* vertex level transformations & checks (no derived mesh) */ bool BKE_mesh_minmax(const struct Mesh *me, float r_min[3], float r_max[3]); @@ -140,31 +203,12 @@ 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_convert.c *** */ - -void BKE_mesh_from_metaball(struct ListBase *lb, struct Mesh *me); -int BKE_mesh_nurbs_to_mdata( - struct Object *ob, struct MVert **r_allvert, int *r_totvert, - struct MEdge **r_alledge, int *r_totedge, struct MLoop **r_allloop, struct MPoly **r_allpoly, - int *r_totloop, int *r_totpoly); -int BKE_mesh_nurbs_displist_to_mdata( - struct Object *ob, const struct ListBase *dispbase, - struct MVert **r_allvert, int *r_totvert, - struct MEdge **r_alledge, int *r_totedge, - struct MLoop **r_allloop, struct MPoly **r_allpoly, - struct MLoopUV **r_alluv, int *r_totloop, int *r_totpoly); -void BKE_mesh_from_nurbs_displist( - struct Main *bmain, struct Object *ob, struct ListBase *dispbase, const bool use_orco_uv, const char *obdata_name); -void BKE_mesh_from_nurbs(struct Main *bmain, struct Object *ob); -void BKE_mesh_to_curve_nurblist(struct DerivedMesh *dm, struct ListBase *nurblist, const int edge_users_test); -void BKE_mesh_to_curve(struct Main *bmain, struct Scene *scene, struct Object *ob); +void BKE_mesh_apply_vert_coords(struct Mesh *mesh, float (*vertCoords)[3]); -struct Mesh *BKE_mesh_new_from_object( - struct Main *bmain, struct Scene *sce, struct Object *ob, - int apply_modifiers, int settings, int calc_tessface, int calc_undeformed); /* *** mesh_evaluate.c *** */ +void BKE_mesh_calc_normals_mapping_simple(struct Mesh *me); void BKE_mesh_calc_normals_mapping( struct MVert *mverts, int numVerts, const struct MLoop *mloop, const struct MPoly *mpolys, int numLoops, int numPolys, float (*r_polyNors)[3], @@ -181,6 +225,7 @@ void BKE_mesh_calc_normals_poly( int numLoops, int numPolys, float (*r_polyNors)[3], const bool only_face_normals); void BKE_mesh_calc_normals(struct Mesh *me); +void BKE_mesh_ensure_normals(struct Mesh *me); void BKE_mesh_calc_normals_tessface( struct MVert *mverts, int numVerts, const struct MFace *mfaces, int numFaces, @@ -332,7 +377,7 @@ void BKE_mesh_loops_to_mface_corners( const int numTex, const int numCol, const bool hasPCol, const bool hasOrigSpace, const bool hasLNor); void BKE_mesh_loops_to_tessdata( - struct CustomData *fdata, struct CustomData *ldata, struct CustomData *pdata, struct MFace *mface, + struct CustomData *fdata, struct CustomData *ldata, struct MFace *mface, int *polyindices, unsigned int (*loopindices)[4], const int num_faces); void BKE_mesh_tangent_loops_to_tessdata( struct CustomData *fdata, struct CustomData *ldata, struct MFace *mface, @@ -368,6 +413,19 @@ void BKE_mesh_polygon_flip_ex( void BKE_mesh_polygon_flip(struct MPoly *mpoly, struct MLoop *mloop, struct CustomData *ldata); void BKE_mesh_polygons_flip(struct MPoly *mpoly, struct MLoop *mloop, struct CustomData *ldata, int totpoly); +/* merge verts */ +/* Enum for merge_mode of CDDM_merge_verts. + * Refer to mesh.c for details. */ +enum { + MESH_MERGE_VERTS_DUMP_IF_MAPPED, + MESH_MERGE_VERTS_DUMP_IF_EQUAL, +}; +struct Mesh *BKE_mesh_merge_verts( + struct Mesh *mesh, + const int *vtargetmap, const int tot_vtargetmap, + const int merge_mode); + + /* flush flags */ void BKE_mesh_flush_hidden_from_verts_ex( const struct MVert *mvert, @@ -410,7 +468,7 @@ void BKE_mesh_calc_relative_deform( /* *** mesh_validate.c *** */ int BKE_mesh_validate(struct Mesh *me, const int do_verbose, const int cddata_check_mask); -void BKE_mesh_cd_validate(struct Mesh *me); +bool BKE_mesh_is_valid(struct Mesh *me); int BKE_mesh_validate_material_indices(struct Mesh *me); bool BKE_mesh_validate_arrays( @@ -440,11 +498,34 @@ void BKE_mesh_calc_edges(struct Mesh *mesh, bool update, const bool select); /* **** Depsgraph evaluation **** */ -struct EvaluationContext; - -void BKE_mesh_eval_geometry(struct EvaluationContext *eval_ctx, +void BKE_mesh_eval_geometry(struct Depsgraph *depsgraph, struct Mesh *mesh); +/* Draw Cache */ +enum { + BKE_MESH_BATCH_DIRTY_ALL = 0, + BKE_MESH_BATCH_DIRTY_MAYBE_ALL, + BKE_MESH_BATCH_DIRTY_SELECT, + BKE_MESH_BATCH_DIRTY_SHADING, + BKE_MESH_BATCH_DIRTY_SCULPT_COORDS, +}; +void BKE_mesh_batch_cache_dirty(struct Mesh *me, int mode); +void BKE_mesh_batch_cache_free(struct Mesh *me); + + +/* Inlines */ + +/* This is a copy of DM_origindex_mface_mpoly(). + * Instead of -1 that function uses ORIGINDEX_NONE as defined in BKE_customdata.h, + * but I don't want to force every user of BKE_mesh.h to also include that file. + * ~~ Sybren */ +BLI_INLINE int BKE_mesh_origindex_mface_mpoly( + const int *index_mf_to_mpoly, const int *index_mp_to_orig, const int i) +{ + const int j = index_mf_to_mpoly[i]; + return (j != -1) ? (index_mp_to_orig ? index_mp_to_orig[j] : j) : -1; +} + #ifdef __cplusplus } #endif |