Fix T58113 Multiple problems with bevel harden normals.
[blender.git] / source / blender / bmesh / intern / bmesh_operators.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Joseph Eagar.
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 #ifndef __BMESH_OPERATORS_H__
24 #define __BMESH_OPERATORS_H__
25
26 /** \file blender/bmesh/intern/bmesh_operators.h
27  *  \ingroup bmesh
28  */
29
30 /*see comments in intern/bmesh_opdefines.c for documentation of specific operators*/
31
32 /*--------defines/enumerations for specific operators-------*/
33
34 /*quad innervert values*/
35 enum {
36         SUBD_CORNER_INNERVERT,
37         SUBD_CORNER_PATH,
38         SUBD_CORNER_FAN,
39         SUBD_CORNER_STRAIGHT_CUT
40 };
41
42 /* aligned with PROP_SMOOTH and friends */
43 enum {
44         SUBD_FALLOFF_SMOOTH = 0,
45         SUBD_FALLOFF_SPHERE,
46         SUBD_FALLOFF_ROOT,
47         SUBD_FALLOFF_SHARP,
48         SUBD_FALLOFF_LIN,
49         SUBD_FALLOFF_INVSQUARE = 7,  /* matching PROP_INVSQUARE */
50 };
51
52 enum {
53         SUBDIV_SELECT_NONE,
54         SUBDIV_SELECT_ORIG,
55         SUBDIV_SELECT_INNER,
56         SUBDIV_SELECT_LOOPCUT
57 };
58
59 /* subdivide_edgering */
60 enum {
61         /* just subdiv */
62         SUBD_RING_INTERP_LINEAR,
63
64         /* single bezier spline - curve follows bezier rotation */
65         SUBD_RING_INTERP_PATH,
66
67         /* beziers based on adjacent faces (fallback to tangent) */
68         SUBD_RING_INTERP_SURF,
69 };
70
71 /* similar face selection slot values */
72 enum {
73         SIMFACE_MATERIAL = 201,
74         SIMFACE_AREA,
75         SIMFACE_SIDES,
76         SIMFACE_PERIMETER,
77         SIMFACE_NORMAL,
78         SIMFACE_COPLANAR,
79         SIMFACE_SMOOTH,
80         SIMFACE_FACEMAP,
81         SIMFACE_FREESTYLE
82 };
83
84 /* similar edge selection slot values */
85 enum {
86         SIMEDGE_LENGTH = 101,
87         SIMEDGE_DIR,
88         SIMEDGE_FACE,
89         SIMEDGE_FACE_ANGLE,
90         SIMEDGE_CREASE,
91         SIMEDGE_BEVEL,
92         SIMEDGE_SEAM,
93         SIMEDGE_SHARP,
94         SIMEDGE_FREESTYLE
95 };
96
97 /* similar vertex selection slot values */
98 enum {
99         SIMVERT_NORMAL = 0,
100         SIMVERT_FACE,
101         SIMVERT_VGROUP,
102         SIMVERT_EDGE
103 };
104
105 /* Poke face center calculation */
106 enum {
107         BMOP_POKE_MEDIAN_WEIGHTED = 0,
108         BMOP_POKE_MEDIAN,
109         BMOP_POKE_BOUNDS
110 };
111
112 /* Bevel offset_type slot values */
113 enum {
114         BEVEL_AMT_OFFSET,
115         BEVEL_AMT_WIDTH,
116         BEVEL_AMT_DEPTH,
117         BEVEL_AMT_PERCENT
118 };
119
120 /* Bevel face_strength_mode values: should match face_str mode enum in DNA_modifer_types.h */
121 enum {
122         BEVEL_FACE_STRENGTH_NONE,
123         BEVEL_FACE_STRENGTH_NEW,
124         BEVEL_FACE_STRENGTH_AFFECTED,
125         BEVEL_FACE_STRENGTH_ALL,
126 };
127
128 extern const BMOpDefine *bmo_opdefines[];
129 extern const int         bmo_opdefines_total;
130
131 /*------specific operator helper functions-------*/
132 void BM_mesh_esubdivide(
133         BMesh *bm, const char edge_hflag,
134         const float smooth, const short smooth_falloff, const bool use_smooth_even,
135         const float fractal, const float along_normal,
136         const int numcuts,
137         const int seltype, const int cornertype,
138         const short use_single_edge, const short use_grid_fill,
139         const short use_only_quads,
140         const int seed);
141
142 void BM_mesh_calc_uvs_grid(
143         BMesh *bm, const uint x_segments, const uint y_segments,
144         const short oflag, const int cd_loop_uv_offset);
145 void BM_mesh_calc_uvs_sphere(
146         BMesh *bm,
147         const short oflag, const int cd_loop_uv_offset);
148 void BM_mesh_calc_uvs_circle(
149         BMesh *bm, float mat[4][4], const float radius,
150         const short oflag, const int cd_loop_uv_offset);
151 void BM_mesh_calc_uvs_cone(
152         BMesh *bm, float mat[4][4],
153         const float radius_top, const float radius_bottom, const int segments, const bool cap_ends,
154         const short oflag, const int cd_loop_uv_offset);
155 void BM_mesh_calc_uvs_cube(BMesh *bm, const short oflag);
156
157 #include "intern/bmesh_operator_api_inline.h"
158
159 #endif /* __BMESH_OPERATORS_H__ */