Fix for bug: cross platform strand render differences with kink/branch.
[blender.git] / source / blender / blenkernel / BKE_booleanops_mesh.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_PyBooleanOps_h
33 #define BKE_PyBooleanOps_h
34
35 #include "CSG_BooleanOps.h"
36
37 /**
38  * Internal mesh structure.
39  * Safe to copy by value... hopefully.
40  */
41
42 struct Base;
43 struct Object;
44 struct CSG_MeshDescriptor;
45
46 typedef void (*CSG_DestroyMeshFunc)(struct CSG_MeshDescriptor *);
47
48 typedef struct CSG_MeshDescriptor {
49         struct Base *base; // Ptr to base of original blender object - used in creating a new object
50         CSG_MeshPropertyDescriptor m_descriptor;
51         CSG_FaceIteratorDescriptor m_face_iterator;
52         CSG_VertexIteratorDescriptor m_vertex_iterator;
53         CSG_DestroyMeshFunc m_destroy_func;
54 } CSG_MeshDescriptor;
55
56
57 extern
58         int
59 CSG_LoadBlenderMesh(
60         struct Object * obj,
61         CSG_MeshDescriptor *output
62 );
63
64 /**
65  * Destroy the contents of a mesh descriptor.
66  * If the internal descriptor refers to a blender
67  * mesh, no action is performed apart from freeing
68  * internal memory in the desriptor.
69  */
70
71 extern
72         void
73 CSG_DestroyMeshDescriptor(
74         CSG_MeshDescriptor *mesh
75 );
76
77 /**
78  * Perform a boolean operation between 2 meshes and return the 
79  * result as a new mesh descriptor.
80  * op_type is an integer code of the boolean operation type.
81  * 1 = intersection,
82  * 2 = union,
83  * 3 = difference.
84  */
85
86 extern
87         int 
88 CSG_PerformOp(
89         CSG_MeshDescriptor *mesh1,
90         CSG_MeshDescriptor *mesh2,
91         int op_type,
92         CSG_MeshDescriptor *output
93 );
94
95
96
97 /**
98  * Add a mesh to blender as a new object.
99  */
100
101 extern
102         int
103 CSG_AddMeshToBlender(
104         CSG_MeshDescriptor *mesh
105 );
106
107 /**
108  * Test functionality.
109  */
110
111 extern
112         int
113 NewBooleanMeshTest(
114         struct Base * base,
115         struct Base * base_select,
116         int op_type
117 );
118
119 #endif
120