3693f43b69e2c903d5862c46c0b384db5f4e003b
[blender.git] / source / blender / makesdna / DNA_brush_types.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL 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. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2005 Blender Foundation.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29
30 #ifndef DNA_BRUSH_TYPES_H
31 #define DNA_BRUSH_TYPES_H
32
33 /** \file DNA_brush_types.h
34  *  \ingroup DNA
35  */
36
37
38 #include "DNA_ID.h"
39 #include "DNA_texture_types.h" /* for MTex */
40
41 //#ifndef MAX_MTEX // XXX Not used?
42 //#define MAX_MTEX      18
43 //#endif
44
45 struct CurveMapping;
46 struct MTex;
47 struct Image;
48
49 typedef struct BrushClone {
50         struct Image *image;            /* image for clone tool */
51         float offset[2];                /* offset of clone image from canvas */
52         float alpha, pad;               /* transparency for drawing of clone image */
53 } BrushClone;
54
55 typedef struct Brush {
56         ID id;
57
58         struct BrushClone clone;
59         struct CurveMapping *curve;     /* falloff curve */
60         struct MTex mtex;
61
62         struct ImBuf *icon_imbuf;
63         PreviewImage *preview;
64         char icon_filepath[240];
65
66         float normal_weight;
67
68         short blend;            /* blend mode */
69         short ob_mode;          /* & with ob->mode to see if the brush is compatible, use for display only. */
70         int size;                       /* brush diameter */
71         int flag;                       /* general purpose flag */      
72         float jitter;                   /* jitter the position of the brush */
73         int spacing;                    /* spacing of paint operations */
74         int smooth_stroke_radius;       /* turning radius (in pixels) for smooth stroke */
75         float smooth_stroke_factor;     /* higher values limit fast changes in the stroke direction */
76         float rate;                     /* paint operations / second (airbrush) */
77
78         float rgb[3];                   /* color */
79         float alpha;                    /* opacity */
80
81         int sculpt_plane;               /* the direction of movement for sculpt vertices */
82
83         float plane_offset;             /* offset for plane brushes (clay, flatten, fill, scrape) */
84
85         char sculpt_tool;               /* active sculpt tool */
86         char vertexpaint_tool;          /* active vertex/weight paint tool/blend mode */
87         char imagepaint_tool;           /* active image paint tool */
88         char pad3;
89
90         float autosmooth_factor;
91
92         float crease_pinch_factor;
93
94         float plane_trim;
95
96         float texture_sample_bias;
97         int   texture_overlay_alpha;
98
99         float unprojected_radius;
100
101         float add_col[3];
102         float sub_col[3];
103 } Brush;
104
105 /* Brush.flag */
106 #define BRUSH_AIRBRUSH          (1<<0)
107 #define BRUSH_TORUS             (1<<1)
108 #define BRUSH_ALPHA_PRESSURE    (1<<2)
109 #define BRUSH_SIZE_PRESSURE     (1<<3)
110 #define BRUSH_JITTER_PRESSURE   (1<<4) /* was BRUSH_RAD_PRESSURE */
111 #define BRUSH_SPACING_PRESSURE  (1<<5)
112 #define BRUSH_FIXED_TEX         (1<<6)
113 #define BRUSH_RAKE              (1<<7)
114 #define BRUSH_ANCHORED          (1<<8)
115 #define BRUSH_DIR_IN            (1<<9)
116 #define BRUSH_SPACE             (1<<10)
117 #define BRUSH_SMOOTH_STROKE     (1<<11)
118 #define BRUSH_PERSISTENT        (1<<12)
119 #define BRUSH_ACCUMULATE        (1<<13)
120 #define BRUSH_LOCK_ALPHA        (1<<14)
121 #define BRUSH_ORIGINAL_NORMAL   (1<<15)
122 #define BRUSH_OFFSET_PRESSURE   (1<<16)
123 #define BRUSH_SPACE_ATTEN       (1<<18)
124 #define BRUSH_ADAPTIVE_SPACE    (1<<19)
125 #define BRUSH_LOCK_SIZE         (1<<20)
126 #define BRUSH_TEXTURE_OVERLAY   (1<<21)
127 #define BRUSH_EDGE_TO_EDGE      (1<<22)
128 #define BRUSH_RESTORE_MESH      (1<<23)
129 #define BRUSH_INVERSE_SMOOTH_PRESSURE (1<<24)
130 #define BRUSH_RANDOM_ROTATION (1<<25)
131 #define BRUSH_PLANE_TRIM (1<<26)
132 #define BRUSH_FRONTFACE (1<<27)
133 #define BRUSH_CUSTOM_ICON (1<<28)
134
135 /* temporary flag which sets up autmatically for correct
136    brush drawing when inverted modal operator is running */
137 #define BRUSH_INVERTED (1<<29)
138
139 /* Brush.sculpt_tool */
140 #define SCULPT_TOOL_DRAW        1
141 #define SCULPT_TOOL_SMOOTH      2
142 #define SCULPT_TOOL_PINCH       3
143 #define SCULPT_TOOL_INFLATE     4
144 #define SCULPT_TOOL_GRAB        5
145 #define SCULPT_TOOL_LAYER       6
146 #define SCULPT_TOOL_FLATTEN     7
147 #define SCULPT_TOOL_CLAY        8
148 #define SCULPT_TOOL_FILL        9
149 #define SCULPT_TOOL_SCRAPE     10
150 #define SCULPT_TOOL_NUDGE      11
151 #define SCULPT_TOOL_THUMB      12
152 #define SCULPT_TOOL_SNAKE_HOOK 13
153 #define SCULPT_TOOL_ROTATE     14
154 //#define SCULPT_TOOL_WAX        15 // XXX: reuse this slot later
155 #define SCULPT_TOOL_CREASE     16
156 #define SCULPT_TOOL_BLOB       17
157 #define SCULPT_TOOL_CLAY_TUBES 18
158
159 /* ImagePaintSettings.tool */
160 #define PAINT_TOOL_DRAW         0
161 #define PAINT_TOOL_SOFTEN       1
162 #define PAINT_TOOL_SMEAR        2
163 #define PAINT_TOOL_CLONE        3
164
165 /* direction that the brush displaces along */
166 enum {
167         SCULPT_DISP_DIR_AREA,
168         SCULPT_DISP_DIR_VIEW,
169         SCULPT_DISP_DIR_X,
170         SCULPT_DISP_DIR_Y,
171         SCULPT_DISP_DIR_Z,
172 };
173
174 #define MAX_BRUSH_PIXEL_RADIUS 200
175
176 #endif
177