Welcome to mirror list, hosted at ThFree Co, Russian Federation.

BKE_cdderivedmesh.h « blenkernel « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: b83134405514bde4df01f04e9e92cdc821f76378 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
* $Id$
*
* ***** BEGIN GPL 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.
*
* 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) 2006 Blender Foundation.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): Ben Batt <benbatt@gmail.com>
*
* ***** END GPL LICENSE BLOCK *****
*/ 

/* CDDerivedMesh interface.
 * CDDerivedMesh (CD = Custom Data) is a DerivedMesh backend which stores
 * mesh elements (vertices, edges and faces) as layers of custom element data.
 */

#ifndef BKE_CDDERIVEDMESH_H
#define BKE_CDDERIVEDMESH_H

#include "BKE_DerivedMesh.h"

struct DerivedMesh;
struct EditMesh;
struct Mesh;

/* creates a new CDDerivedMesh */
struct DerivedMesh *CDDM_new(int numVerts, int numEdges, int numFaces);

/* creates a CDDerivedMesh from the given Mesh */
struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh);

/* creates a CDDerivedMesh from the given EditMesh */
struct DerivedMesh *CDDM_from_editmesh(struct EditMesh *em, struct Mesh *me);

/* Copies the given DerivedMesh with verts, faces & edges stored as
 * custom element data.
 */
struct DerivedMesh *CDDM_copy(struct DerivedMesh *dm);

/* creates a CDDerivedMesh with the same layer stack configuration as the
 * given DerivedMesh and containing the requested numbers of elements.
 * elements are initialised to all zeros
 */
struct DerivedMesh *CDDM_from_template(struct DerivedMesh *source,
                                  int numVerts, int numEdges, int numFaces);

/* applies vertex coordinates to a CDDerivedMesh
 */
void CDDM_apply_vert_coords(struct DerivedMesh *cddm, float (*vertCoords)[3]);

/* recalculates normals for a CDDerivedMesh
 */
void CDDM_calc_normals(struct DerivedMesh *dm);

/* calculates edges for a CDDerivedMesh (from face data)
 * this completely replaces the current edge data in the DerivedMesh
 */
void CDDM_calc_edges(struct DerivedMesh *dm);

/* sets the number of vertices/edges/faces in a CDDerivedMesh
 * if the value given is more than the maximum, the maximum is used
 */
void CDDM_set_num_verts(struct DerivedMesh *dm, int numVerts);
void CDDM_set_num_edges(struct DerivedMesh *dm, int numEdges);
void CDDM_set_num_faces(struct DerivedMesh *dm, int numFaces);

/* vertex/edge/face access functions
 * should always succeed if index is within bounds
 * note these return pointers - any change modifies the internals of the mesh
 */
struct MVert *CDDM_get_vert(struct DerivedMesh *dm, int index);
struct MEdge *CDDM_get_edge(struct DerivedMesh *dm, int index);
struct MFace *CDDM_get_face(struct DerivedMesh *dm, int index);

/* vertex/edge/face array access functions - return the array holding the
 * desired data
 * should always succeed
 * note these return pointers - any change modifies the internals of the mesh
 */
struct MVert *CDDM_get_verts(struct DerivedMesh *dm);
struct MEdge *CDDM_get_edges(struct DerivedMesh *dm);
struct MFace *CDDM_get_faces(struct DerivedMesh *dm);
#endif