MBall cleanup: remove unused F_ERROR references, als fix/enhance BKE_mball_basis_find()
[blender.git] / source / blender / makesdna / DNA_gpencil_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) 2008, Blender Foundation.
19  * This is a new part of Blender
20  *
21  * Contributor(s): Joshua Leung
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file DNA_gpencil_types.h
27  *  \ingroup DNA
28  */
29
30 #ifndef __DNA_GPENCIL_TYPES_H__
31 #define __DNA_GPENCIL_TYPES_H__
32
33 #include "DNA_listBase.h"
34 #include "DNA_ID.h"
35
36 /* Grease-Pencil Annotations - 'Stroke Point'
37  *      -> Coordinates may either be 2d or 3d depending on settings at the time
38  *      -> Coordinates of point on stroke, in proportions of window size
39  *         This assumes that the bottom-left corner is (0,0)
40  */
41 typedef struct bGPDspoint {
42         float x, y, z;                  /* co-ordinates of point (usually 2d, but can be 3d as well) */
43         float pressure;                 /* pressure of input device (from 0 to 1) at this point */
44         float time;                             /* seconds since start of stroke */
45 } bGPDspoint;
46
47 /* Grease-Pencil Annotations - 'Stroke'
48  *      -> A stroke represents a (simplified version) of the curve
49  *         drawn by the user in one 'mousedown'->'mouseup' operation
50  */
51 typedef struct bGPDstroke {
52         struct bGPDstroke *next, *prev;
53         bGPDspoint *points;             /* array of data-points for stroke */
54         void *pad;                              /* keep 4 pointers at the beginning, padding for 'inittime' is tricky 64/32bit */
55         int totpoints;                  /* number of data-points in array */
56         
57         short thickness;                /* thickness of stroke (currently not used) */
58         short flag;                             /* various settings about this stroke */
59
60         double inittime;                /* Init time of stroke */
61 } bGPDstroke;
62
63 /* bGPDstroke->flag */
64         /* stroke is in 3d-space */
65 #define GP_STROKE_3DSPACE               (1<<0)
66         /* stroke is in 2d-space */
67 #define GP_STROKE_2DSPACE               (1<<1)
68         /* stroke is in 2d-space (but with special 'image' scaling) */
69 #define GP_STROKE_2DIMAGE               (1<<2)
70         /* only for use with stroke-buffer (while drawing eraser) */
71 #define GP_STROKE_ERASER                (1<<15)
72
73
74 /* Grease-Pencil Annotations - 'Frame'
75  *      -> Acts as storage for the 'image' formed by strokes
76  */
77 typedef struct bGPDframe {
78         struct bGPDframe *next, *prev;
79         
80         ListBase strokes;       /* list of the simplified 'strokes' that make up the frame's data */
81         
82         int framenum;           /* frame number of this frame */
83         int flag;                       /* temp settings */
84 } bGPDframe;
85
86 /* bGPDframe->flag */   
87         /* frame is being painted on */
88 #define GP_FRAME_PAINT          (1<<0)
89         /* for editing in Action Editor */
90 #define GP_FRAME_SELECT         (1<<1)
91
92
93 /* Grease-Pencil Annotations - 'Layer' */
94 typedef struct bGPDlayer {
95         struct bGPDlayer *next, *prev;
96         
97         ListBase frames;                /* list of annotations to display for frames (bGPDframe list) */
98         bGPDframe *actframe;    /* active frame (should be the frame that is currently being displayed) */
99         
100         int flag;                               /* settings for layer */
101         short thickness;                /* current thickness to apply to strokes */
102         short gstep;                    /* max number of frames between active and ghost to show (0=only those on either side) */
103         
104         float color[4];                 /* color that should be used to draw all the strokes in this layer */
105         
106         char info[128];                 /* optional reference info about this layer (i.e. "director's comments, 12/3")
107                                                          * this is used for the name of the layer  too and kept unique. */
108 } bGPDlayer;
109
110 /* bGPDlayer->flag */
111         /* don't display layer */
112 #define GP_LAYER_HIDE           (1<<0)
113         /* protected from further editing */
114 #define GP_LAYER_LOCKED         (1<<1)  
115         /* layer is 'active' layer being edited */
116 #define GP_LAYER_ACTIVE         (1<<2)
117         /* draw points of stroke for debugging purposes */
118 #define GP_LAYER_DRAWDEBUG      (1<<3)
119         /* do onionskinning */
120 #define GP_LAYER_ONIONSKIN      (1<<4)
121         /* for editing in Action Editor */
122 #define GP_LAYER_SELECT         (1<<5)
123         /* current frame for layer can't be changed */
124 #define GP_LAYER_FRAMELOCK      (1<<6)
125         /* don't render xray (which is default) */
126 #define GP_LAYER_NO_XRAY        (1<<7)
127
128
129 /* Grease-Pencil Annotations - 'DataBlock' */
130 typedef struct bGPdata {
131         ID id;                                  /* Grease Pencil data is */
132         
133         /* saved Grease-Pencil data */
134         ListBase layers;                /* bGPDlayers */
135         int flag;                               /* settings for this datablock */
136         
137         /* not-saved stroke buffer data (only used during paint-session) 
138          *      - buffer must be initialized before use, but freed after 
139          *        whole paint operation is over
140          */
141         short sbuffer_size;                     /* number of elements currently in cache */
142         short sbuffer_sflag;            /* flags for stroke that cache represents */
143         void *sbuffer;                          /* stroke buffer (can hold GP_STROKE_BUFFER_MAX) */
144 } bGPdata;
145
146 /* bGPdata->flag */
147 // XXX many of these flags should be deprecated for more general ideas in 2.5
148         /* don't allow painting to occur at all */
149         // XXX is deprecated - not well understood
150 // #define GP_DATA_LMBPLOCK     (1<<0)
151         /* show debugging info in viewport (i.e. status print) */
152 #define GP_DATA_DISPINFO        (1<<1)
153         /* in Action Editor, show as expanded channel */
154 #define GP_DATA_EXPAND          (1<<2)
155         /* is the block overriding all clicks? */
156         // XXX is deprecated - nasty old concept
157 // #define GP_DATA_EDITPAINT    (1<<3)
158         /* new strokes are added in viewport space */
159 #define GP_DATA_VIEWALIGN       (1<<4)
160         /* Project into the screens Z values */
161 #define GP_DATA_DEPTH_VIEW      (1<<5)
162 #define GP_DATA_DEPTH_STROKE (1<<6)
163
164 #define GP_DATA_DEPTH_STROKE_ENDPOINTS (1<<7)
165
166 #endif /*  __DNA_GPENCIL_TYPES_H__ */