All data layers, including MVert/MEdge/MFace, are now managed as custom data layers. The pointers like Mesh.mvert, Mesh.dvert or Mesh.mcol are still used of course, but allocating, copying or freeing these arrays should be done through the CustomData API. Work in progress documentation on this is here: http://mediawiki.blender.org/index.php/BlenderDev/BlenderArchitecture/CustomData Replaced TFace by MTFace: This is the same struct, except that it does not contain color, that now always stays separated in MCol. This was not a good design decision to begin with, and it is needed for adding multiple color layers later. Note that this does mean older Blender versions will not be able to read UV coordinates from the next release, due to an SDNA limitation. Removed DispListMesh: This now fully replaced by DerivedMesh. To provide access to arrays of vertices, edges and faces, like DispListMesh does. The semantics of the DerivedMesh.getVertArray() and similar functions were changed to return a pointer to an array if one exists, or otherwise allocate a temporary one. On releasing the DerivedMesh, this temporary array will be removed automatically. Removed ssDM and meshDM DerivedMesh backends: The ssDM backend was for DispListMesh, so that became obsolete automatically. The meshDM backend was replaced by the custom data backend, that now figures out which layers need to be modified, and only duplicates those. This changes code in many places, and overall removes 2514 lines of code. So, there's a good chance this might break some stuff, although I've been testing it for a few days now. The good news is, adding multiple color and uv layers should now become easy.
115 lines
3.7 KiB
C++
115 lines
3.7 KiB
C++
/**
|
|
* blenlib/BKE_mesh.h (mar-2001 nzc)
|
|
*
|
|
* $Id$
|
|
*
|
|
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version. The Blender
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
* about this.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): none yet.
|
|
*
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
|
*/
|
|
#ifndef BKE_MESH_H
|
|
#define BKE_MESH_H
|
|
|
|
/***/
|
|
|
|
struct BoundBox;
|
|
struct DispList;
|
|
struct ListBase;
|
|
struct MDeformVert;
|
|
struct Mesh;
|
|
struct MFace;
|
|
struct MVert;
|
|
struct MCol;
|
|
struct Object;
|
|
struct MTFace;
|
|
struct VecNor;
|
|
struct CustomData;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void unlink_mesh(struct Mesh *me);
|
|
void free_mesh(struct Mesh *me);
|
|
struct Mesh *add_mesh(void);
|
|
struct Mesh *copy_mesh(struct Mesh *me);
|
|
void mesh_update_customdata_pointers(struct Mesh *me);
|
|
void make_local_tface(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);
|
|
float *mesh_create_orco_render(struct Object *ob);
|
|
float *mesh_create_orco(struct Object *ob);
|
|
void test_index_face(struct MFace *mface, struct CustomData *mfdata, int mfindex, int nr);
|
|
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);
|
|
void nurbs_to_mesh(struct Object *ob);
|
|
void free_dverts(struct MDeformVert *dvert, int totvert);
|
|
void copy_dverts(struct MDeformVert *dst, struct MDeformVert *src, int totvert); /* __NLA */
|
|
int update_realtime_texture(struct MTFace *tface, double time);
|
|
void mesh_delete_material_index(struct Mesh *me, int index);
|
|
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
|
|
|
|
struct BoundBox *mesh_get_bb(struct Mesh *me);
|
|
void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
|
|
|
|
/* if old, it converts mface->edcode to edge drawflags */
|
|
void make_edges(struct Mesh *me, int old);
|
|
void mesh_strip_loose_faces(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);
|
|
|
|
/* Return a newly MEM_malloc'd array of all the mesh vertex locations
|
|
* (_numVerts_r_ may be NULL) */
|
|
float (*mesh_getVertexCos(struct Mesh *me, int *numVerts_r))[3];
|
|
|
|
/* map from uv vertex to face (for select linked, stitch, uv suburf) */
|
|
|
|
struct UvVertMap;
|
|
typedef struct UvVertMap UvVertMap;
|
|
|
|
typedef struct UvMapVert {
|
|
struct UvMapVert *next;
|
|
unsigned int f;
|
|
unsigned char tfindex, separate;
|
|
} UvMapVert;
|
|
|
|
UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned int totface, unsigned int totvert, int selected, float *limit);
|
|
UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v);
|
|
void free_uv_vert_map(UvVertMap *vmap);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
|