MBall cleanup: remove unused F_ERROR references, als fix/enhance BKE_mball_basis_find()
[blender.git] / source / blender / makesdna / DNA_brush_types.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  * The Original Code is Copyright (C) 2005 Blender Foundation.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27
28 /** \file DNA_brush_types.h
29  *  \ingroup DNA
30  */
31
32 #ifndef __DNA_BRUSH_TYPES_H__
33 #define __DNA_BRUSH_TYPES_H__
34
35
36 #include "DNA_ID.h"
37 #include "DNA_texture_types.h" /* for MTex */
38
39 //#ifndef MAX_MTEX // XXX Not used?
40 //#define MAX_MTEX      18
41 //#endif
42
43 struct CurveMapping;
44 struct MTex;
45 struct Image;
46
47 typedef struct BrushClone {
48         struct Image *image;    /* image for clone tool */
49         float offset[2];        /* offset of clone image from canvas */
50         float alpha, pad;       /* transparency for drawing of clone image */
51 } BrushClone;
52
53 typedef struct Brush {
54         ID id;
55
56         struct BrushClone clone;
57         struct CurveMapping *curve; /* falloff curve */
58         struct MTex mtex;
59         struct MTex mask_mtex;
60
61         struct Brush *toggle_brush;
62
63         struct ImBuf *icon_imbuf;
64         PreviewImage *preview;
65         char icon_filepath[1024]; /* 1024 = FILE_MAX */
66
67         float normal_weight;
68
69         short blend;        /* blend mode */
70         short ob_mode;      /* & with ob->mode to see if the brush is compatible, use for display only. */
71         float weight;       /* brush weight */
72         int size;           /* brush diameter */
73         int flag;           /* general purpose flag */
74         float jitter;       /* jitter the position of the brush */
75         int jitter_absolute;    /* absolute jitter in pixels */
76         int overlay_flags;
77         int spacing;        /* spacing of paint operations */
78         int smooth_stroke_radius;   /* turning radius (in pixels) for smooth stroke */
79         float smooth_stroke_factor; /* higher values limit fast changes in the stroke direction */
80         float rate;         /* paint operations / second (airbrush) */
81
82         float rgb[3];           /* color */
83         float alpha;            /* opacity */
84
85         int sculpt_plane;       /* the direction of movement for sculpt vertices */
86
87         float plane_offset;     /* offset for plane brushes (clay, flatten, fill, scrape) */
88
89         char sculpt_tool;       /* active sculpt tool */
90         char vertexpaint_tool;  /* active vertex/weight paint blend mode (poorly named) */
91         char imagepaint_tool;   /* active image paint tool */
92         char mask_tool;         /* enum BrushMaskTool, only used if sculpt_tool is SCULPT_TOOL_MASK */
93
94         float autosmooth_factor;
95
96         float crease_pinch_factor;
97
98         float plane_trim;
99         float height;           /* affectable height of brush (layer height for layer tool, i.e.) */
100
101         float texture_sample_bias;
102
103         int texture_overlay_alpha;
104         int mask_overlay_alpha;
105         int cursor_overlay_alpha;
106
107         float unprojected_radius;
108
109         float add_col[3];
110         float sub_col[3];
111
112         float stencil_pos[2];
113         float stencil_dimension[2];
114
115         float mask_stencil_pos[2];
116         float mask_stencil_dimension[2];
117 } Brush;
118
119 /* Brush.flag */
120 typedef enum BrushFlags {
121         BRUSH_AIRBRUSH = (1 << 0),
122         BRUSH_TORUS = (1 << 1),
123         BRUSH_ALPHA_PRESSURE = (1 << 2),
124         BRUSH_SIZE_PRESSURE = (1 << 3),
125         BRUSH_JITTER_PRESSURE = (1 << 4),
126         BRUSH_SPACING_PRESSURE = (1 << 5),
127         // BRUSH_FIXED_TEX = (1 << 6), /* obsolete, use mtex->brush_map_mode = MTEX_MAP_MODE_TILED instead */
128         BRUSH_RAKE = (1 << 7),
129         BRUSH_ANCHORED = (1 << 8),
130         BRUSH_DIR_IN = (1 << 9),
131         BRUSH_SPACE = (1 << 10),
132         BRUSH_SMOOTH_STROKE = (1 << 11),
133         BRUSH_PERSISTENT = (1 << 12),
134         BRUSH_ACCUMULATE = (1 << 13),
135         BRUSH_LOCK_ALPHA = (1 << 14),
136         BRUSH_ORIGINAL_NORMAL = (1 << 15),
137         BRUSH_OFFSET_PRESSURE = (1 << 16),
138         BRUSH_SPACE_ATTEN = (1 << 18),
139         BRUSH_ADAPTIVE_SPACE = (1 << 19),
140         BRUSH_LOCK_SIZE = (1 << 20),
141 //      BRUSH_TEXTURE_OVERLAY = (1 << 21), /* obsolete, use overlay_flags |= BRUSH_OVERLAY_PRIMARY instead */
142         BRUSH_EDGE_TO_EDGE = (1 << 22),
143         BRUSH_DRAG_DOT = (1 << 23),
144         BRUSH_INVERSE_SMOOTH_PRESSURE = (1 << 24),
145         BRUSH_RANDOM_ROTATION = (1 << 25),
146         BRUSH_PLANE_TRIM = (1 << 26),
147         BRUSH_FRONTFACE = (1 << 27),
148         BRUSH_CUSTOM_ICON = (1 << 28),
149
150         /* temporary flag which sets up automatically for correct brush
151          * drawing when inverted modal operator is running */
152         BRUSH_INVERTED = (1 << 29),
153         BRUSH_ABSOLUTE_JITTER = (1 << 30)
154 } BrushFlags;
155
156 /* Brush.overlay_flags */
157 typedef enum OverlayFlags {
158         BRUSH_OVERLAY_CURSOR = (1),
159         BRUSH_OVERLAY_PRIMARY = (1 << 1),
160         BRUSH_OVERLAY_SECONDARY = (1 << 2),
161         BRUSH_OVERLAY_CURSOR_OVERRIDE_ON_STROKE = (1 << 3),
162         BRUSH_OVERLAY_PRIMARY_OVERRIDE_ON_STROKE = (1 << 4),
163         BRUSH_OVERLAY_SECONDARY_OVERRIDE_ON_STROKE = (1 << 5)
164 } OverlayFlags;
165
166 #define BRUSH_OVERLAY_OVERRIDE_MASK (BRUSH_OVERLAY_CURSOR_OVERRIDE_ON_STROKE | \
167                                                                          BRUSH_OVERLAY_PRIMARY_OVERRIDE_ON_STROKE | \
168                                                                          BRUSH_OVERLAY_SECONDARY_OVERRIDE_ON_STROKE)
169
170 /* Brush.sculpt_tool */
171 typedef enum BrushSculptTool {
172         SCULPT_TOOL_DRAW = 1,
173         SCULPT_TOOL_SMOOTH = 2,
174         SCULPT_TOOL_PINCH = 3,
175         SCULPT_TOOL_INFLATE = 4,
176         SCULPT_TOOL_GRAB = 5,
177         SCULPT_TOOL_LAYER = 6,
178         SCULPT_TOOL_FLATTEN = 7,
179         SCULPT_TOOL_CLAY = 8,
180         SCULPT_TOOL_FILL = 9,
181         SCULPT_TOOL_SCRAPE = 10,
182         SCULPT_TOOL_NUDGE = 11,
183         SCULPT_TOOL_THUMB = 12,
184         SCULPT_TOOL_SNAKE_HOOK = 13,
185         SCULPT_TOOL_ROTATE = 14,
186         SCULPT_TOOL_SIMPLIFY = 15,
187         SCULPT_TOOL_CREASE = 16,
188         SCULPT_TOOL_BLOB = 17,
189         SCULPT_TOOL_CLAY_STRIPS = 18,
190         SCULPT_TOOL_MASK = 19
191 } BrushSculptTool;
192
193 /* ImagePaintSettings.tool */
194 typedef enum BrushImagePaintTool {
195         PAINT_TOOL_DRAW = 0,
196         PAINT_TOOL_SOFTEN = 1,
197         PAINT_TOOL_SMEAR = 2,
198         PAINT_TOOL_CLONE = 3
199 } BrushImagePaintTool;
200
201 /* direction that the brush displaces along */
202 enum {
203         SCULPT_DISP_DIR_AREA = 0,
204         SCULPT_DISP_DIR_VIEW = 1,
205         SCULPT_DISP_DIR_X = 2,
206         SCULPT_DISP_DIR_Y = 3,
207         SCULPT_DISP_DIR_Z = 4
208 };
209
210 enum {
211         PAINT_BLEND_MIX = 0,
212         PAINT_BLEND_ADD = 1,
213         PAINT_BLEND_SUB = 2,
214         PAINT_BLEND_MUL = 3,
215         PAINT_BLEND_BLUR = 4,
216         PAINT_BLEND_LIGHTEN = 5,
217         PAINT_BLEND_DARKEN = 6
218 };
219
220 typedef enum {
221         BRUSH_MASK_DRAW = 0,
222         BRUSH_MASK_SMOOTH = 1
223 } BrushMaskTool;
224
225 #define MAX_BRUSH_PIXEL_RADIUS 200
226
227 #endif
228