diff options
Diffstat (limited to 'source/blender/blenkernel/BKE_mesh.h')
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 65 |
1 files changed, 53 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index 900835940c7..054ce35b31c 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -36,12 +36,15 @@ struct BoundBox; struct DispList; struct ListBase; -struct EditMesh; -struct MDeformVert; +struct BMEditMesh; +struct BMesh; struct Mesh; +struct MPoly; +struct MLoop; struct MFace; struct MEdge; struct MVert; +struct MDeformVert; struct MCol; struct Object; struct MTFace; @@ -49,19 +52,41 @@ struct VecNor; struct CustomData; struct DerivedMesh; struct Scene; +struct MLoopUV; #ifdef __cplusplus extern "C" { #endif -struct EditMesh *BKE_mesh_get_editmesh(struct Mesh *me); -void BKE_mesh_end_editmesh(struct Mesh *me, struct EditMesh *em); +struct BMesh *BKE_mesh_to_bmesh(struct Mesh *me, struct Object *ob); + +/* + this function recreates a tesselation. + returns number of tesselation faces. + + use_poly_origindex sets whether or not the tesselation faces' origindex + layer should point to original poly indices or real poly indices. + + use_face_origindex sets the tesselation faces' origindex layer + to point to the tesselation 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 mesh_recalcTesselation(struct CustomData *fdata, struct CustomData *ldata, + struct CustomData *pdata, struct MVert *mvert, int totface, + int totloop, int totpoly); + +/*calculates a face normal.*/ +void mesh_calc_poly_normal(struct MPoly *mpoly, struct MLoop *loopstart, + struct MVert *mvarray, float *no); void unlink_mesh(struct Mesh *me); -void free_mesh(struct Mesh *me); +void free_mesh(struct Mesh *me, int unlink); struct Mesh *add_mesh(const char *name); struct Mesh *copy_mesh(struct Mesh *me); void mesh_update_customdata_pointers(struct Mesh *me); + void make_local_mesh(struct Mesh *me); void boundbox_mesh(struct Mesh *me, float *loc, float *size); void tex_space_mesh(struct Mesh *me); @@ -71,17 +96,26 @@ int test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, struct Mesh *get_mesh(struct Object *ob); void set_mesh(struct Object *ob, struct Mesh *me); void mball_to_mesh(struct ListBase *lb, struct Mesh *me); -int nurbs_to_mdata(struct Object *ob, struct MVert **allvert, int *_totvert, - struct MEdge **alledge, int *_totedge, struct MFace **allface, int *_totface); -int nurbs_to_mdata_customdb(struct Object *ob, struct ListBase *dispbase, - struct MVert **allvert, int *_totvert, struct MEdge **alledge, int *_totedge, - struct MFace **allface, int *_totface); +int nurbs_to_mdata(struct Object *ob, struct MVert **allvert, int *totvert, + struct MEdge **alledge, int *totedge, struct MFace **allface, struct MLoop **allloop, struct MPoly **allpoly, + int *totface, int *totloop, int *totpoly); +int nurbs_to_mdata_customdb(struct Object *ob, struct ListBase *dispbase, struct MVert **allvert, int *_totvert, + struct MEdge **alledge, int *_totedge, struct MFace **allface, struct MLoop **allloop, struct MPoly **allpoly, + int *_totface, int *_totloop, int *_totpoly); void nurbs_to_mesh(struct Object *ob); void mesh_to_curve(struct Scene *scene, struct Object *ob); void free_dverts(struct MDeformVert *dvert, int totvert); void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */ void mesh_delete_material_index(struct Mesh *me, short index); void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth); +void convert_mfaces_to_mpolys(struct Mesh *mesh); +void mesh_calc_tessface_normals(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 *mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh); struct BoundBox *mesh_get_bb(struct Object *ob); void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r); @@ -95,7 +129,9 @@ void mesh_strip_loose_edges(struct Mesh *me); /* Calculate vertex and face normals, face normals are returned in *faceNors_r if non-NULL * and vertex normals are stored in actual mverts. */ -void mesh_calc_normals(struct MVert *mverts, int numVerts, struct MFace *mfaces, int numFaces, float (*faceNors_r)[3]); +void mesh_calc_normals(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]); /* Return a newly MEM_malloc'd array of all the mesh vertex locations * (_numVerts_r_ may be NULL) */ @@ -118,7 +154,7 @@ typedef struct UvMapVert { unsigned char tfindex, separate, flag; } UvMapVert; -UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned int totface, unsigned int totvert, int selected, float *limit); +UvVertMap *make_uv_vert_map(struct MPoly *mpoly, struct MLoop *mloop, struct MLoopUV *mloopuv, unsigned int totpoly, unsigned int totvert, int selected, float *limit); UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v); void free_uv_vert_map(UvVertMap *vmap); @@ -159,6 +195,11 @@ void BKE_mesh_calc_edges(struct Mesh *mesh, int update); void BKE_mesh_ensure_navmesh(struct Mesh *me); +/*convert a triangle of loop facedata to mface facedata*/ +void mesh_loops_to_tri_corners(struct CustomData *fdata, struct CustomData *ldata, + struct CustomData *pdata, int lindex[3], int findex, + int polyindex); + #ifdef __cplusplus } #endif |