2.50: svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r17434...
[blender-staging.git] / source / blender / makesdna / DNA_scene_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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
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 #ifndef DNA_SCENE_TYPES_H
30 #define DNA_SCENE_TYPES_H
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #include "DNA_vec_types.h"
37 #include "DNA_listBase.h"
38 #include "DNA_scriptlink_types.h"
39 #include "DNA_ID.h"
40
41 struct Radio;
42 struct Object;
43 struct World;
44 struct Scene;
45 struct Image;
46 struct Group;
47 struct bNodeTree;
48
49 typedef struct Base {
50         struct Base *next, *prev;
51         unsigned int lay, selcol;
52         int flag;
53         short sx, sy;
54         struct Object *object;
55 } Base;
56
57 typedef struct AviCodecData {
58         void                    *lpFormat;  /* save format */
59         void                    *lpParms;   /* compressor options */
60         unsigned int    cbFormat;           /* size of lpFormat buffer */
61         unsigned int    cbParms;            /* size of lpParms buffer */
62
63         unsigned int    fccType;            /* stream type, for consistency */
64         unsigned int    fccHandler;         /* compressor */
65         unsigned int    dwKeyFrameEvery;    /* keyframe rate */
66         unsigned int    dwQuality;          /* compress quality 0-10,000 */
67         unsigned int    dwBytesPerSecond;   /* bytes per second */
68         unsigned int    dwFlags;            /* flags... see below */
69         unsigned int    dwInterleaveEvery;  /* for non-video streams only */
70         unsigned int    pad;
71
72         char                    avicodecname[128];
73 } AviCodecData;
74
75 typedef struct QuicktimeCodecData {
76
77         void                    *cdParms;   /* codec/compressor options */
78         void                    *pad;       /* padding */
79
80         unsigned int    cdSize;             /* size of cdParms buffer */
81         unsigned int    pad2;               /* padding */
82
83         char                    qtcodecname[128];
84 } QuicktimeCodecData;
85
86 typedef struct FFMpegCodecData {
87         int type;
88         int codec;
89         int audio_codec;
90         int video_bitrate;
91         int audio_bitrate;
92         int gop_size;
93         int flags;
94
95         int rc_min_rate;
96         int rc_max_rate;
97         int rc_buffer_size;
98         int mux_packet_size;
99         int mux_rate;
100         IDProperty *properties;
101 } FFMpegCodecData;
102
103
104 typedef struct AudioData {
105         int mixrate;
106         float main;             /* Main mix in dB */
107         short flag;
108         short pad[3];
109 } AudioData;
110
111 typedef struct SceneRenderLayer {
112         struct SceneRenderLayer *next, *prev;
113         
114         char name[32];
115         
116         struct Material *mat_override;
117         struct Group *light_override;
118         
119         unsigned int lay;               /* scene->lay itself has priority over this */
120         unsigned int lay_zmask; /* has to be after lay, this is for Z-masking */
121         int layflag;
122         
123         int pad;
124         
125         int passflag;                   /* pass_xor has to be after passflag */
126         int pass_xor;
127 } SceneRenderLayer;
128
129 /* srl->layflag */
130 #define SCE_LAY_SOLID   1
131 #define SCE_LAY_ZTRA    2
132 #define SCE_LAY_HALO    4
133 #define SCE_LAY_EDGE    8
134 #define SCE_LAY_SKY             16
135 #define SCE_LAY_STRAND  32
136         /* flags between 32 and 0x8000 are set to 1 already, for future options */
137
138 #define SCE_LAY_ALL_Z           0x8000
139 #define SCE_LAY_XOR                     0x10000
140 #define SCE_LAY_DISABLE         0x20000
141 #define SCE_LAY_ZMASK           0x40000
142 #define SCE_LAY_NEG_ZMASK       0x80000
143
144 /* srl->passflag */
145 #define SCE_PASS_COMBINED       1
146 #define SCE_PASS_Z                      2
147 #define SCE_PASS_RGBA           4
148 #define SCE_PASS_DIFFUSE        8
149 #define SCE_PASS_SPEC           16
150 #define SCE_PASS_SHADOW         32
151 #define SCE_PASS_AO                     64
152 #define SCE_PASS_REFLECT        128
153 #define SCE_PASS_NORMAL         256
154 #define SCE_PASS_VECTOR         512
155 #define SCE_PASS_REFRACT        1024
156 #define SCE_PASS_INDEXOB        2048
157 #define SCE_PASS_UV                     4096
158 #define SCE_PASS_RADIO          8192
159 #define SCE_PASS_MIST           16384
160
161 /* note, srl->passflag is treestore element 'nr' in outliner, short still... */
162
163
164 typedef struct RenderData {
165         
166         struct AviCodecData *avicodecdata;
167         struct QuicktimeCodecData *qtcodecdata;
168         struct FFMpegCodecData ffcodecdata;
169
170         int cfra, sfra, efra;   /* frames as in 'images' */
171         int psfra, pefra;               /* start+end frames of preview range */
172
173         int images, framapto;
174         short flag, threads;
175
176         float ctime;                    /* use for calcutions */
177         float framelen, blurfac;
178
179         /** For UR edge rendering: give the edges this color */
180         float edgeR, edgeG, edgeB;
181         
182         short fullscreen, xplay, yplay, freqplay;       /* standalone player */
183         short depth, attrib, rt1, rt2;                  /* standalone player */
184
185         short stereomode;       /* standalone player stereo settings */
186         
187         short dimensionspreset;         /* for the dimensions presets menu */
188         
189         short filtertype;       /* filter is box, tent, gauss, mitch, etc */
190
191         short size, maximsize;  /* size in %, max in Kb */
192         /* from buttons: */
193         /**
194          * The desired number of pixels in the x direction
195          */
196         short xsch;
197         /**
198          * The desired number of pixels in the y direction
199          */
200         short ysch;
201         /**
202          * The number of part to use in the x direction
203          */
204         short xparts;
205         /**
206          * The number of part to use in the y direction
207          */
208         short yparts;
209         
210         short winpos, planes, imtype, subimtype;
211         
212         /** Mode bits:                                                           */
213         /* 0: Enable backbuffering for images                                    */
214         short bufflag;
215         short quality;
216         
217         short rpad, rpad1, rpad2;
218
219         /**
220          * Flags for render settings. Use bit-masking to access the settings.
221          */
222         int scemode;
223
224         /**
225          * Flags for render settings. Use bit-masking to access the settings.
226          */
227         int mode;
228
229         /* render engine, octree resolution */
230         short renderer, ocres;
231
232         /**
233          * What to do with the sky/background. Picks sky/premul/key
234          * blending for the background
235          */
236         short alphamode;
237
238         /**
239          * The number of samples to use per pixel.
240          */
241         short osa;
242
243         short frs_sec, edgeint;
244         
245         /* safety, border and display rect */
246         rctf safety, border;
247         rcti disprect;
248         
249         /* information on different layers to be rendered */
250         ListBase layers;
251         short actlay, pad;
252         
253         /**
254          * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
255          */
256         float xasp;
257         /**
258          * Adjustment factors for the aspect ratio in the x direction, was a short in 2.45
259          */
260         float yasp;
261
262         float frs_sec_base;
263         
264         /**
265          * Value used to define filter size for all filter options  */
266         float gauss;
267         
268         /** post-production settings. Depricated, but here for upwards compat (initialized to 1) */      
269         float postmul, postgamma, posthue, postsat;      
270         
271         /* Dither noise intensity */
272         float dither_intensity;
273         
274         /* Bake Render options */
275         short bake_osa, bake_filter, bake_mode, bake_flag;
276         short bake_normal_space, bake_quad_split;
277         float bake_maxdist, bake_biasdist, bake_pad;
278         
279         /* yafray: global panel params. TODO: move elsewhere */
280         short GIquality, GIcache, GImethod, GIphotons, GIdirect;
281         short YF_AA, YFexportxml, YF_nobump, YF_clamprgb, yfpad1;
282         int GIdepth, GIcausdepth, GIpixelspersample;
283         int GIphotoncount, GImixphotons;
284         float GIphotonradius;
285         int YF_raydepth, YF_AApasses, YF_AAsamples, yfpad2;
286         float GIshadowquality, GIrefinement, GIpower, GIindirpower;
287         float YF_gamma, YF_exposure, YF_raybias, YF_AApixelsize, YF_AAthreshold;
288
289         /* paths to backbufffer, output, ftype */
290         char backbuf[160], pic[160];
291
292         /* stamps flags. */
293         int stamp;
294         short stamp_font_id, pad3; /* select one of blenders bitmap fonts */
295
296         /* stamp info user data. */
297         char stamp_udata[160];
298
299         /* foreground/background color. */
300         float fg_stamp[4];
301         float bg_stamp[4];
302
303         /* render simplify */
304         int simplify_subsurf;
305         int simplify_shadowsamples;
306         float simplify_particles;
307         float simplify_aosss;
308
309         /* cineon */
310         short cineonwhite, cineonblack;
311         float cineongamma;
312 } RenderData;
313
314 /* control render convert and shading engine */
315 typedef struct RenderProfile {
316         struct RenderProfile *next, *prev;
317         char name[32];
318         
319         short particle_perc;
320         short subsurf_max;
321         short shadbufsample_max;
322         short pad1;
323         
324         float ao_error, pad2;
325         
326 } RenderProfile;
327
328 typedef struct GameFraming {
329         float col[3];
330         char type, pad1, pad2, pad3;
331 } GameFraming;
332
333 #define SCE_GAMEFRAMING_BARS   0
334 #define SCE_GAMEFRAMING_EXTEND 1
335 #define SCE_GAMEFRAMING_SCALE  2
336
337 typedef struct TimeMarker {
338         struct TimeMarker *next, *prev;
339         int frame;
340         char name[64];
341         unsigned int flag;
342 } TimeMarker;
343
344 typedef struct ImagePaintSettings {
345         struct Brush *brush;
346         short flag, tool;
347         
348         /* for projection painting only */
349         short seam_bleed,normal_angle;
350 } ImagePaintSettings;
351
352 typedef struct ParticleBrushData {
353         short size, strength;   /* common settings */
354         short step, invert;             /* for specific brushes only */
355 } ParticleBrushData;
356
357 typedef struct ParticleEditSettings {
358         short flag;
359         short totrekey;
360         short totaddkey;
361         short brushtype;
362
363         ParticleBrushData brush[7]; /* 7 = PE_TOT_BRUSH */
364
365         float emitterdist;
366         int draw_timed;
367 } ParticleEditSettings;
368
369 typedef struct TransformOrientation {
370         struct TransformOrientation *next, *prev;
371         char name[36];
372         float mat[3][3];
373 } TransformOrientation;
374
375 typedef struct ToolSettings {
376         /* Subdivide Settings */
377         short cornertype;
378         short editbutflag;
379         /*Triangle to Quad conversion threshold*/
380         float jointrilimit;
381         /* Extrude Tools */
382         float degr; 
383         short step;
384         short turn; 
385         
386         float extr_offs; 
387         float doublimit;
388         
389         /* Primitive Settings */
390         /* UV Sphere */
391         short segments;
392         short rings;
393         
394         /* Cylinder - Tube - Circle */
395         short vertices;
396
397         /* UV Calculation */
398         short unwrapper;
399         float uvcalc_radius;
400         float uvcalc_cubesize;
401         short uvcalc_mapdir;
402         short uvcalc_mapalign;
403         short uvcalc_flag;
404
405         /* Auto-IK */
406         short autoik_chainlen;
407
408         /* Image Paint (8 byttse aligned please!) */
409         struct ImagePaintSettings imapaint;
410
411         /* Particle Editing */
412         struct ParticleEditSettings particle;
413         
414         /* Select Group Threshold */
415         float select_thresh;
416         
417         /* IPO-Editor */
418         float clean_thresh;
419         
420         /* Retopo */
421         char retopo_mode;
422         char retopo_paint_tool;
423         char line_div, ellipse_div, retopo_hotspot;
424
425         /* Multires */
426         char multires_subdiv_type;
427         
428         /* Skeleton generation */
429         short skgen_resolution;
430         float skgen_threshold_internal;
431         float skgen_threshold_external;
432         float skgen_length_ratio;
433         float skgen_length_limit;
434         float skgen_angle_limit;
435         float skgen_correlation_limit;
436         float skgen_symmetry_limit;
437         float skgen_retarget_angle_weight;
438         float skgen_retarget_length_weight;
439         float skgen_retarget_distance_weight;
440         short skgen_options;
441         char  skgen_postpro;
442         char  skgen_postpro_passes;
443         char  skgen_subdivisions[3];
444         char  skgen_multi_level;
445         char  skgen_optimisation_method;
446         
447         char tpad[6];
448         
449         /* Alt+RMB option */
450         char edge_mode;
451 } ToolSettings;
452
453 /* Used by all brushes to store their properties, which can be directly set
454    by the interface code. Note that not all properties are actually used by
455    all the brushes. */
456 typedef struct BrushData
457 {
458         short size;
459         char strength, dir; /* Not used for smooth brush */
460         char view;
461         char flag;
462         char pad[2];
463 } BrushData;
464
465 struct SculptSession;
466 typedef struct SculptData
467 {
468         /* Note! all pointers in this struct must be duplicated header_info.c's copy_scene function */
469         
470         /* Data stored only from entering sculptmode until exiting sculptmode */
471         struct SculptSession *session;
472
473         /* Pointers to all of sculptmodes's textures */
474         struct MTex *mtex[18];
475
476         /* Editable brush shape */
477         struct CurveMapping *cumap;
478
479         /* Settings for each brush */
480         BrushData drawbrush, smoothbrush, pinchbrush, inflatebrush, grabbrush, layerbrush, flattenbrush;
481
482         /* For rotating around a pivot point */
483         float pivot[3];
484
485         short brush_type;
486
487         /* For the Brush Shape */
488         short texact, texnr;
489         short spacing;
490         char texrept;
491         char texfade;
492         char texsep;
493
494         char averaging;
495         char flags;
496         
497         /* Control tablet input */
498         char tablet_size, tablet_strength;
499         
500         /* Symmetry is separate from the other BrushData because the same
501            settings are always used for all brush types */
502         char symm;
503
504         /* Added to store if the 'Rake' setting has been set */
505         char rake;
506         char axislock;
507         char pad[2];
508 } SculptData;
509
510 typedef struct Scene {
511         ID id;
512         struct Object *camera;
513         struct World *world;
514         
515         struct Scene *set;
516         struct Image *ima;
517         
518         ListBase base;
519         struct Base *basact;
520         
521         float cursor[3];
522         float twcent[3];                        /* center for transform widget */
523         float twmin[3], twmax[3];       /* boundbox of selection for transform widget */
524         unsigned int lay;
525         
526         /* editmode stuff */
527         float editbutsize;                      /* size of normals */
528         short selectmode;                                               /* for mesh only! */
529         short proportional, prop_mode;
530         short automerge, pad5, pad6;
531         
532         short autokey_mode;                                     /* mode for autokeying (defines in DNA_userdef_types.h */
533         
534         short use_nodes;
535         
536         struct bNodeTree *nodetree;     
537         
538         void *ed;                                                               /* sequence editor data is allocated here */
539         struct Radio *radio;
540         
541         struct GameFraming framing;
542
543         struct ToolSettings *toolsettings;
544
545         /* migrate or replace? depends on some internal things... */
546         /* no, is on the right place (ton) */
547         struct RenderData r;
548         struct AudioData audio; 
549         
550         ScriptLink scriptlink;
551         
552         ListBase markers;
553         ListBase transform_spaces;
554         
555         short jumpframe;
556         short snap_mode, snap_flag, snap_target;
557         
558         /* none of the dependancy graph  vars is mean to be saved */
559         struct  DagForest *theDag;
560         short dagisvalid, dagflags;
561         short pad4, recalc;                             /* recalc = counterpart of ob->recalc */
562
563         /* Sculptmode data */
564         struct SculptData sculptdata;
565
566         /* frame step. */
567         int frame_step;
568         int pad;
569 } Scene;
570
571
572 /* **************** RENDERDATA ********************* */
573
574 /* bufflag */
575 #define R_BACKBUF               1
576 #define R_BACKBUFANIM   2
577 #define R_FRONTBUF              4
578 #define R_FRONTBUFANIM  8
579
580 /* mode (int now) */
581 #define R_OSA                   0x0001
582 #define R_SHADOW                0x0002
583 #define R_GAMMA                 0x0004
584 #define R_ORTHO                 0x0008
585 #define R_ENVMAP                0x0010
586 #define R_EDGE                  0x0020
587 #define R_FIELDS                0x0040
588 #define R_FIELDSTILL    0x0080
589 #define R_RADIO                 0x0100
590 #define R_BORDER                0x0200
591 #define R_PANORAMA              0x0400
592 #define R_CROP                  0x0800
593 #define R_COSMO                 0x1000
594 #define R_ODDFIELD              0x2000
595 #define R_MBLUR                 0x4000
596                 /* unified was here */
597 #define R_RAYTRACE      0x10000
598                 /* R_GAUSS is obsolete, but used to retrieve setting from old files */
599 #define R_GAUSS         0x20000
600                 /* fbuf obsolete... */
601 #define R_FBUF                  0x40000
602                 /* threads obsolete... is there for old files, now use for autodetect threads */
603 #define R_THREADS               0x80000
604                 /* Use the same flag for autothreads */
605 #define R_FIXED_THREADS         0x80000 
606
607 #define R_SPEED                 0x100000
608 #define R_SSS                   0x200000
609 #define R_NO_OVERWRITE  0x400000 /* skip existing files */
610 #define R_TOUCH                 0x800000 /* touch files before rendering */
611 #define R_SIMPLIFY              0x1000000
612
613
614 /* filtertype */
615 #define R_FILTER_BOX    0
616 #define R_FILTER_TENT   1
617 #define R_FILTER_QUAD   2
618 #define R_FILTER_CUBIC  3
619 #define R_FILTER_CATROM 4
620 #define R_FILTER_GAUSS  5
621 #define R_FILTER_MITCH  6
622 #define R_FILTER_FAST_GAUSS     7 /* note, this is only used for nodes at the moment */
623
624 /* yafray: renderer flag (not only exclusive to yafray) */
625 #define R_INTERN        0
626 #define R_YAFRAY        1
627
628 /* scemode (int now) */
629 #define R_DOSEQ                         0x0001
630 #define R_BG_RENDER                     0x0002
631                 /* passepartout is camera option now, keep this for backward compatibility */
632 #define R_PASSEPARTOUT          0x0004
633 #define R_PREVIEWBUTS           0x0008
634 #define R_EXTENSION                     0x0010
635 #define R_NODE_PREVIEW          0x0020
636 #define R_DOCOMP                        0x0040
637 #define R_COMP_CROP                     0x0080
638 #define R_FREE_IMAGE            0x0100
639 #define R_SINGLE_LAYER          0x0200
640 #define R_EXR_TILE_FILE         0x0400
641 #define R_COMP_FREE                     0x0800
642 #define R_NO_IMAGE_LOAD         0x1000
643 #define R_NO_TEX                        0x2000
644 #define R_STAMP_INFO            0x4000
645 #define R_FULL_SAMPLE           0x8000
646 #define R_COMP_RERENDER         0x10000
647
648 /* r->stamp */
649 #define R_STAMP_TIME    0x0001
650 #define R_STAMP_FRAME   0x0002
651 #define R_STAMP_DATE    0x0004
652 #define R_STAMP_CAMERA  0x0008
653 #define R_STAMP_SCENE   0x0010
654 #define R_STAMP_NOTE    0x0020
655 #define R_STAMP_DRAW    0x0040 /* draw in the image */
656 #define R_STAMP_MARKER  0x0080
657 #define R_STAMP_FILENAME        0x0100
658 #define R_STAMP_SEQSTRIP        0x0200
659
660 /* alphamode */
661 #define R_ADDSKY                0
662 #define R_ALPHAPREMUL   1
663 #define R_ALPHAKEY              2
664
665 /* planes */
666 #define R_PLANES24              24
667 #define R_PLANES32              32
668 #define R_PLANESBW              8
669
670 /* imtype */
671 #define R_TARGA         0
672 #define R_IRIS          1
673 #define R_HAMX          2
674 #define R_FTYPE         3 /* ftype is nomore */
675 #define R_JPEG90        4
676 #define R_MOVIE         5
677 #define R_IRIZ          7
678 #define R_RAWTGA        14
679 #define R_AVIRAW        15
680 #define R_AVIJPEG       16
681 #define R_PNG           17
682 #define R_AVICODEC      18
683 #define R_QUICKTIME 19
684 #define R_BMP           20
685 #define R_RADHDR        21
686 #define R_TIFF          22
687 #define R_OPENEXR       23
688 #define R_FFMPEG        24
689 #define R_FRAMESERVER   25
690 #define R_CINEON                26
691 #define R_DPX                   27
692 #define R_MULTILAYER    28
693 #define R_DDS                   29
694
695 /* subimtype, flag options for imtype */
696 #define R_OPENEXR_HALF  1
697 #define R_OPENEXR_ZBUF  2
698 #define R_PREVIEW_JPG   4
699 #define R_CINEON_LOG    8
700 #define R_TIFF_16BIT    16
701
702 /* bake_mode: same as RE_BAKE_xxx defines */
703 /* bake_flag: */
704 #define R_BAKE_CLEAR            1
705 #define R_BAKE_OSA                      2
706 #define R_BAKE_TO_ACTIVE        4
707 #define R_BAKE_NORMALIZE        8
708
709 /* bake_normal_space */
710 #define R_BAKE_SPACE_CAMERA      0
711 #define R_BAKE_SPACE_WORLD       1
712 #define R_BAKE_SPACE_OBJECT      2
713 #define R_BAKE_SPACE_TANGENT 3
714
715 /* **************** SCENE ********************* */
716
717 /* for general use */
718 #define MAXFRAME        300000
719 #define MAXFRAMEF       300000.0f
720
721 #define MINFRAME        1
722 #define MINFRAMEF       1.0
723
724 #define TESTBASE(base)  ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0) )
725 #define TESTBASELIB(base)       ( ((base)->flag & SELECT) && ((base)->lay & G.vd->lay) && ((base)->object->id.lib==0) && (((base)->object->restrictflag & OB_RESTRICT_VIEW)==0))
726 #define BASE_SELECTABLE(base)    ((base->lay & G.vd->lay) && (base->object->restrictflag & (OB_RESTRICT_SELECT|OB_RESTRICT_VIEW))==0)
727 #define FIRSTBASE               G.scene->base.first
728 #define LASTBASE                G.scene->base.last
729 #define BASACT                  (G.scene->basact)
730 #define OBACT                   (BASACT? BASACT->object: 0)
731 #define ID_NEW(a)               if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
732 #define ID_NEW_US(a)    if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
733 #define ID_NEW_US2(a)   if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
734 #define CFRA                    (G.scene->r.cfra)
735 #define F_CFRA                  ((float)(G.scene->r.cfra))
736 #define SFRA                    (G.scene->r.sfra)
737 #define EFRA                    (G.scene->r.efra)
738 #define PSFRA                   ((G.scene->r.psfra != 0)? (G.scene->r.psfra): (G.scene->r.sfra))
739 #define PEFRA                   ((G.scene->r.psfra != 0)? (G.scene->r.pefra): (G.scene->r.efra))
740 #define FRA2TIME(a)           ((((double) G.scene->r.frs_sec_base) * (a)) / G.scene->r.frs_sec)
741 #define TIME2FRA(a)           ((((double) G.scene->r.frs_sec) * (a)) / G.scene->r.frs_sec_base)
742 #define FPS                     (((double) G.scene->r.frs_sec) / G.scene->r.frs_sec_base)
743
744 #define RAD_PHASE_PATCHES       1
745 #define RAD_PHASE_FACES         2
746
747 /* base->flag is in DNA_object_types.h */
748
749 /* scene->snap_flag */
750 #define SCE_SNAP                                1
751 #define SCE_SNAP_ROTATE                 2
752 /* scene->snap_target */
753 #define SCE_SNAP_TARGET_CLOSEST 0
754 #define SCE_SNAP_TARGET_CENTER  1
755 #define SCE_SNAP_TARGET_MEDIAN  2
756 #define SCE_SNAP_TARGET_ACTIVE  3
757 /* scene->snap_mode */
758 #define SCE_SNAP_MODE_VERTEX    0
759 #define SCE_SNAP_MODE_EDGE              1
760 #define SCE_SNAP_MODE_FACE              2
761
762 /* sce->selectmode */
763 #define SCE_SELECT_VERTEX       1 /* for mesh */
764 #define SCE_SELECT_EDGE         2
765 #define SCE_SELECT_FACE         4
766
767 /* sce->selectmode for particles */
768 #define SCE_SELECT_PATH         1
769 #define SCE_SELECT_POINT        2
770 #define SCE_SELECT_END          4
771
772 /* sce->recalc (now in use by previewrender) */
773 #define SCE_PRV_CHANGED         1
774
775 /* sce->prop_mode (proportional falloff) */
776 #define PROP_SMOOTH            0
777 #define PROP_SPHERE            1
778 #define PROP_ROOT              2
779 #define PROP_SHARP             3
780 #define PROP_LIN               4
781 #define PROP_CONST             5
782 #define PROP_RANDOM             6
783
784         /* return flag next_object function */
785 #define F_START                 0
786 #define F_SCENE                 1
787 #define F_SET                   2
788 #define F_DUPLI                 3
789
790 /* audio->flag */
791 #define AUDIO_MUTE              1
792 #define AUDIO_SYNC              2
793 #define AUDIO_SCRUB             4
794
795 #define FFMPEG_MULTIPLEX_AUDIO  1
796 #define FFMPEG_AUTOSPLIT_OUTPUT 2
797
798 /* Sculpt brush flags */
799 #define SCULPT_BRUSH_AIRBRUSH 1
800 #define SCULPT_BRUSH_ANCHORED 2
801 /* SculptData.flags */
802 #define SCULPT_INPUT_SMOOTH 1
803 #define SCULPT_DRAW_FAST    2
804 #define SCULPT_DRAW_BRUSH   4
805 /* SculptData.brushtype */
806 #define DRAW_BRUSH    1
807 #define SMOOTH_BRUSH  2
808 #define PINCH_BRUSH   3
809 #define INFLATE_BRUSH 4
810 #define GRAB_BRUSH    5
811 #define LAYER_BRUSH   6
812 #define FLATTEN_BRUSH 7
813 /* SculptData.texrept */
814 #define SCULPTREPT_DRAG 1
815 #define SCULPTREPT_TILE 2
816 #define SCULPTREPT_3D   3
817
818 #define SYMM_X 1
819 #define SYMM_Y 2
820 #define SYMM_Z 4
821
822 #define AXISLOCK_X 1
823 #define AXISLOCK_Y 2
824 #define AXISLOCK_Z 4
825
826 /* toolsettings->imagepaint_flag */
827 #define IMAGEPAINT_DRAWING                              1
828 #define IMAGEPAINT_DRAW_TOOL                    2
829 #define IMAGEPAINT_DRAW_TOOL_DRAWING    4
830
831 /* projection painting only */
832 #define IMAGEPAINT_PROJECT_DISABLE              8       /* Non projection 3D painting */
833 #define IMAGEPAINT_PROJECT_XRAY                 16
834 #define IMAGEPAINT_PROJECT_BACKFACE             32
835 #define IMAGEPAINT_PROJECT_FLAT                 64
836 #define IMAGEPAINT_PROJECT_LAYER_CLONE  128
837 #define IMAGEPAINT_PROJECT_LAYER_MASK   256
838 #define IMAGEPAINT_PROJECT_LAYER_MASK_INV       512
839
840 /* toolsettings->uvcalc_flag */
841 #define UVCALC_FILLHOLES                        1
842 #define UVCALC_NO_ASPECT_CORRECT        2       /* would call this UVCALC_ASPECT_CORRECT, except it should be default with old file */
843 #define UVCALC_TRANSFORM_CORRECT        4       /* adjust UV's while transforming to avoid distortion */
844
845 /* toolsettings->edge_mode */
846 #define EDGE_MODE_SELECT                                0
847 #define EDGE_MODE_TAG_SEAM                              1
848 #define EDGE_MODE_TAG_SHARP                             2
849 #define EDGE_MODE_TAG_CREASE                    3
850 #define EDGE_MODE_TAG_BEVEL                             4
851
852 /* toolsettings->particle flag */
853 #define PE_KEEP_LENGTHS                 1
854 #define PE_LOCK_FIRST                   2
855 #define PE_DEFLECT_EMITTER              4
856 #define PE_INTERPOLATE_ADDED    8
857 #define PE_SHOW_CHILD                   16
858 #define PE_SHOW_TIME                    32
859 #define PE_X_MIRROR                             64
860
861 /* toolsetting->particle brushtype */
862 #define PE_BRUSH_NONE           -1
863 #define PE_BRUSH_COMB           0
864 #define PE_BRUSH_CUT            1
865 #define PE_BRUSH_LENGTH         2
866 #define PE_BRUSH_PUFF           3
867 #define PE_BRUSH_ADD            4
868 #define PE_BRUSH_WEIGHT         5
869 #define PE_BRUSH_SMOOTH         6
870
871 /* this must equal ParticleEditSettings.brush array size */
872 #define PE_TOT_BRUSH            7  
873
874 /* toolsettings->retopo_mode */
875 #define RETOPO 1
876 #define RETOPO_PAINT 2
877
878 /* toolsettings->retopo_paint_tool */
879 #define RETOPO_PEN 1
880 #define RETOPO_LINE 2
881 #define RETOPO_ELLIPSE 4
882
883 /* toolsettings->skgen_options */
884 #define SKGEN_FILTER_INTERNAL   (1 << 0)
885 #define SKGEN_FILTER_EXTERNAL   (1 << 1)
886 #define SKGEN_SYMMETRY                  (1 << 2)
887 #define SKGEN_CUT_LENGTH                (1 << 3)
888 #define SKGEN_CUT_ANGLE                 (1 << 4)
889 #define SKGEN_CUT_CORRELATION   (1 << 5)
890 #define SKGEN_HARMONIC                  (1 << 6)
891 #define SKGEN_STICK_TO_EMBEDDING        (1 << 7)
892 #define SKGEN_ADAPTIVE_DISTANCE         (1 << 8)
893 #define SKGEN_FILTER_SMART              (1 << 9)
894 #define SKGEN_DISP_LENGTH               (1 << 10)
895 #define SKGEN_DISP_WEIGHT               (1 << 11)
896 #define SKGEN_DISP_ORIG                 (1 << 12)
897 #define SKGEN_DISP_EMBED                (1 << 13)
898 #define SKGEN_DISP_INDEX                (1 << 14)
899
900 #define SKGEN_SUB_LENGTH                0
901 #define SKGEN_SUB_ANGLE                 1
902 #define SKGEN_SUB_CORRELATION   2
903 #define SKGEN_SUB_TOTAL                 3
904
905 /* toolsettings->skgen_postpro */
906 #define SKGEN_SMOOTH                    0
907 #define SKGEN_AVERAGE                   1
908 #define SKGEN_SHARPEN                   2
909
910 #ifdef __cplusplus
911 }
912 #endif
913
914 #endif