df1906a2c702c01a0a8d27c30cbec370106b0ea2
[blender.git] / source / blender / blenkernel / BKE_booleanops.h
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. The Blender
10  * Foundation also sells licenses for use in proprietary software under
11  * the Blender License.  See http://www.blender.org/BL/ for information
12  * about this.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22  *
23  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
24  * All rights reserved.
25  *
26  * The Original Code is: all of this file.
27  *
28  * Contributor(s): none yet.
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32 #ifndef BKE_BOOLEANOPS_H
33 #define BKE_BOOLEANOPS_H
34
35
36 struct Mesh;
37 struct Object;
38 struct Base;
39 struct CSG_FaceIteratorDescriptor;
40 struct CSG_VertexIteratorDescriptor;
41 struct CSG_MeshPropertyDescriptor;
42
43 /**
44  * Perform a boolean operation between 2 mesh objects and
45  * add the result as a new mesh into blender data structures.
46  * Assumes you have checked that the 2 objects are infact mesh
47  * objects. Returns 1 on success and zero when it encountered
48  * a problem. In the latter case no object is added and you should
49  * report an appropriate error.
50  */
51 extern
52         int
53 NewBooleanMesh(
54         struct Base * base,
55         struct Base * base_select,
56         int op_type
57 );
58
59         
60 /**
61  * Functions exposed for use by BKE_booleanops_mesh
62  */
63
64 /**
65  * Returns pointers to new mesh descriptors for 
66  * the given mesh. Make sure you call FreeMeshDescriptors
67  * after calling this function.
68  */ 
69
70 extern 
71         void
72 BuildMeshDescriptors(
73         struct Object * ob,
74         struct CSG_FaceIteratorDescriptor * face_it,
75         struct CSG_VertexIteratorDescriptor * vertex_it
76 );
77
78 extern
79         void
80 FreeMeshDescriptors(
81         struct CSG_FaceIteratorDescriptor * face_it,
82         struct CSG_VertexIteratorDescriptor * vertex_it
83 );
84
85 extern
86         int
87 ConvertCSGDescriptorsToMeshObject(
88         struct Object *ob,
89         struct CSG_MeshPropertyDescriptor * props,
90         struct CSG_FaceIteratorDescriptor * face_it,
91         struct CSG_VertexIteratorDescriptor * vertex_it,
92         float parinv[][4]
93 );
94
95 /**
96  * This little function adds a new mesh object 
97  * to the blender object list. It uses ob to duplicate
98  * data as this seems to be easier than cerating a new one.
99  * This new oject contains no faces nor vertices.
100  */
101
102 extern
103         struct Object *
104 AddNewBlenderMesh(
105         struct Base *base
106 );
107
108 extern
109         int
110 InterpNoUserData(
111         void *d1,
112         void *d2,
113         void *dnew,
114         float epsilon
115 );
116
117 extern
118         int
119 InterpFaceVertexData(
120         void *d1,
121         void *d2,
122         void *dnew,
123         float epsilon
124 );
125
126 typedef struct {
127         float uv[2];
128         float color[4];
129 } FaceVertexData;
130
131 typedef struct {
132         struct Material *material;
133         
134                 /* assorted tface flags */
135         void *tpage;
136         char flag, transp;
137         short mode, tile;
138 } FaceData;
139
140
141
142
143 #endif