UI: show label in tool-tips
[blender.git] / source / blender / makesdna / DNA_object_force_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
17  * All rights reserved.
18  */
19
20 /** \file
21  * \ingroup DNA
22  */
23
24 #ifndef __DNA_OBJECT_FORCE_TYPES_H__
25 #define __DNA_OBJECT_FORCE_TYPES_H__
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #include "DNA_listBase.h"
32 #include "DNA_defs.h"
33
34 /* pd->forcefield:  Effector Fields types */
35 typedef enum ePFieldType {
36   /** (this is used for general effector weight). */
37   PFIELD_NULL = 0,
38   /** Force away/towards a point depending on force strength. */
39   PFIELD_FORCE = 1,
40   /** Force around the effector normal. */
41   PFIELD_VORTEX = 2,
42   /** Force from the cross product of effector normal and point velocity. */
43   PFIELD_MAGNET = 3,
44   /** Force away and towards a point depending which side of the effector normal the point is. */
45   PFIELD_WIND = 4,
46   /** Force along curve for dynamics, a shaping curve for hair paths. */
47   PFIELD_GUIDE = 5,
48   /** Force based on texture values calculated at point coordinates. */
49   PFIELD_TEXTURE = 6,
50   /** Force of a harmonic (damped) oscillator. */
51   PFIELD_HARMONIC = 7,
52   /** Force away/towards a point depending on point charge. */
53   PFIELD_CHARGE = 8,
54   /** Force due to a Lennard-Jones potential. */
55   PFIELD_LENNARDJ = 9,
56   /** Defines predator / goal for boids. */
57   PFIELD_BOID = 10,
58   /** Force defined by BLI_gTurbulence. */
59   PFIELD_TURBULENCE = 11,
60   /** Linear & quadratic drag. */
61   PFIELD_DRAG = 12,
62   /** Force based on smoke simulation air flow. */
63   PFIELD_SMOKEFLOW = 13,
64
65   NUM_PFIELD_TYPES,
66 } ePFieldType;
67
68 typedef struct PartDeflect {
69   /** General settings flag. */
70   int flag;
71   /** Deflection flag - does mesh deflect particles. */
72   short deflect;
73   /** Force field type, do the vertices attract / repel particles? */
74   short forcefield;
75   /** Fall-off type. */
76   short falloff;
77   /** Point, plane or surface. */
78   short shape;
79   /** Texture effector. */
80   short tex_mode;
81   /** For curve guide. */
82   short kink, kink_axis;
83   short zdir;
84
85   /* Main effector values */
86   /** The strength of the force (+ or - ). */
87   float f_strength;
88   /** Damping ratio of the harmonic effector. */
89   float f_damp;
90   /**
91    * How much force is converted into "air flow", i.e.
92    * force used as the velocity of surrounding medium. */
93   float f_flow;
94
95   /** Noise size for noise effector, restlength for harmonic effector. */
96   float f_size;
97
98   /* fall-off */
99   /** The power law - real gravitation is 2 (square). */
100   float f_power;
101   /** If indicated, use this maximum. */
102   float maxdist;
103   /** If indicated, use this minimum. */
104   float mindist;
105   /** Radial fall-off power. */
106   float f_power_r;
107   /** Radial versions of above. */
108   float maxrad;
109   float minrad;
110
111   /* particle collisions */
112   /** Damping factor for particle deflection. */
113   float pdef_damp;
114   /** Random element of damping for deflection. */
115   float pdef_rdamp;
116   /** Chance of particle passing through mesh. */
117   float pdef_perm;
118   /** Friction factor for particle deflection. */
119   float pdef_frict;
120   /** Random element of friction for deflection. */
121   float pdef_rfrict;
122   /** Surface particle stickiness. */
123   float pdef_stickness;
124
125   /** Used for forces. */
126   float absorption;
127
128   /* softbody collisions */
129   /** Damping factor for softbody deflection. */
130   float pdef_sbdamp;
131   /** Inner face thickness for softbody deflection. */
132   float pdef_sbift;
133   /** Outer face thickness for softbody deflection. */
134   float pdef_sboft;
135
136   /* guide curve, same as for particle child effects */
137   float clump_fac, clump_pow;
138   float kink_freq, kink_shape, kink_amp, free_end;
139
140   /* texture effector */
141   /** Used for calculating partial derivatives. */
142   float tex_nabla;
143   /** Texture of the texture effector. */
144   struct Tex *tex;
145
146   /* effector noise */
147   /** Random noise generator for e.g. wind. */
148   struct RNG *rng;
149   /** Noise of force. */
150   float f_noise;
151   /** Noise random seed. */
152   int seed;
153
154   /* Display Size */
155   /** Runtime only : start of the curve or draw scale. */
156   float drawvec1[4];
157   /** Runtime only : end of the curve. */
158   float drawvec2[4];
159   /** Runtime only. */
160   float drawvec_falloff_min[3];
161   char _pad1[4];
162   /** Runtime only. */
163   float drawvec_falloff_max[3];
164   char _pad2[4];
165
166   /** Force source object. */
167   struct Object *f_source;
168
169   /** Friction of cloth collisions. */
170   float pdef_cfrict;
171   char _pad[4];
172 } PartDeflect;
173
174 typedef struct EffectorWeights {
175   /** Only use effectors from this group of objects. */
176   struct Collection *group;
177
178   /** Effector type specific weights. */
179   float weight[14];
180   float global_gravity;
181   short flag, rt[3];
182   char _pad[4];
183 } EffectorWeights;
184
185 /* EffectorWeights->flag */
186 #define EFF_WEIGHT_DO_HAIR 1
187
188 /**
189  * Point cache file data types:
190  * - Used as `(1 << flag)` so poke jahka if you reach the limit of 15.
191  * - To add new data types update:
192  *   - #BKE_ptcache_data_size()
193  *   - #ptcache_file_pointers_init()
194  */
195 #define BPHYS_DATA_INDEX 0
196 #define BPHYS_DATA_LOCATION 1
197 #define BPHYS_DATA_SMOKE_LOW 1
198 #define BPHYS_DATA_VELOCITY 2
199 #define BPHYS_DATA_SMOKE_HIGH 2
200 #define BPHYS_DATA_ROTATION 3
201 #define BPHYS_DATA_DYNAMICPAINT 3
202 #define BPHYS_DATA_AVELOCITY 4 /* used for particles */
203 #define BPHYS_DATA_XCONST 4    /* used for cloth */
204 #define BPHYS_DATA_SIZE 5
205 #define BPHYS_DATA_TIMES 6
206 #define BPHYS_DATA_BOIDS 7
207
208 #define BPHYS_TOT_DATA 8
209
210 #define BPHYS_EXTRA_FLUID_SPRINGS 1
211
212 typedef struct PTCacheExtra {
213   struct PTCacheExtra *next, *prev;
214   unsigned int type, totdata;
215   void *data;
216 } PTCacheExtra;
217
218 typedef struct PTCacheMem {
219   struct PTCacheMem *next, *prev;
220   unsigned int frame, totpoint;
221   unsigned int data_types, flag;
222
223   /** BPHYS_TOT_DATA. */
224   void *data[8];
225   /** BPHYS_TOT_DATA. */
226   void *cur[8];
227
228   struct ListBase extradata;
229 } PTCacheMem;
230
231 typedef struct PointCache {
232   struct PointCache *next, *prev;
233   /** Generic flag. */
234   int flag;
235
236   /**
237    * The number of frames between cached frames.
238    * This should probably be an upper bound for a per point adaptive step in the future,
239    * buf for now it's the same for all points. Without adaptivity this can effect the perceived
240    * simulation quite a bit though. If for example particles are colliding with a horizontal
241    * plane (with high damping) they quickly come to a stop on the plane, however there are still
242    * forces acting on the particle (gravity and collisions), so the particle velocity isn't
243    * necessarily zero for the whole duration of the frame even if the particle seems stationary.
244    * If all simulation frames aren't cached (step > 1) these velocities are interpolated into
245    * movement for the non-cached frames.
246    * The result will look like the point is oscillating around the collision location.
247    * So for now cache step should be set to 1 for accurate reproduction of collisions.
248    */
249   int step;
250
251   /** Current frame of simulation (only if SIMULATION_VALID). */
252   int simframe;
253   /** Simulation start frame. */
254   int startframe;
255   /** Simulation end frame. */
256   int endframe;
257   /** Frame being edited (runtime only). */
258   int editframe;
259   /** Last exact frame that's cached. */
260   int last_exact;
261   /** Used for editing cache - what is the last baked frame. */
262   int last_valid;
263   char _pad[4];
264
265   /* for external cache files */
266   /** Number of cached points. */
267   int totpoint;
268   /** Modifier stack index. */
269   int index;
270   short compression, rt;
271
272   char name[64];
273   char prev_name[64];
274   char info[64];
275   /** File path, 1024 = FILE_MAX. */
276   char path[1024];
277
278   /**
279    * Array of length `endframe - startframe + 1` with flags to indicate cached frames.
280    * Can be later used for other per frame flags too if needed.
281    */
282   char *cached_frames;
283   int cached_frames_len;
284   char _pad1[4];
285
286   struct ListBase mem_cache;
287
288   struct PTCacheEdit *edit;
289   /** Free callback. */
290   void (*free_edit)(struct PTCacheEdit *edit);
291 } PointCache;
292
293 typedef struct SBVertex {
294   float vec[4];
295 } SBVertex;
296
297 /* Container for data that is shared among CoW copies.
298  *
299  * This is placed in a separate struct so that values can be changed
300  * without having to update all CoW copies. */
301 typedef struct SoftBody_Shared {
302   struct PointCache *pointcache;
303   struct ListBase ptcaches;
304 } SoftBody_Shared;
305
306 typedef struct SoftBody {
307   /* dynamic data */
308   int totpoint, totspring;
309   /** Not saved in file. */
310   struct BodyPoint *bpoint;
311   /** Not saved in file. */
312   struct BodySpring *bspring;
313   char _pad;
314   char msg_lock;
315   short msg_value;
316
317   /* part of UI: */
318
319   /* general options */
320   /** Softbody mass of *vertex*. */
321   float nodemass;
322   /**
323    * Along with it introduce mass painting
324    * starting to fix old bug .. nastiness that VG are indexes
325    * rather find them by name tag to find it -> jow20090613.
326    * MAX_VGROUP_NAME */
327   char namedVG_Mass[64];
328   /** Softbody amount of gravitaion to apply. */
329   float grav;
330   /** Friction to env. */
331   float mediafrict;
332   /** Error limit for ODE solver. */
333   float rklimit;
334   /** User control over simulation speed. */
335   float physics_speed;
336
337   /* goal */
338   /** Softbody goal springs. */
339   float goalspring;
340   /** Softbody goal springs friction. */
341   float goalfrict;
342   /** Quick limits for goal. */
343   float mingoal;
344   float maxgoal;
345   /** Default goal for vertices without vgroup. */
346   float defgoal;
347   /** Index starting at 1. */
348   short vertgroup;
349   /**
350    * Starting to fix old bug .. nastiness that VG are indexes
351    * rather find them by name tag to find it -> jow20090613.
352    * MAX_VGROUP_NAME */
353   char namedVG_Softgoal[64];
354
355   short fuzzyness;
356
357   /* springs */
358   /** Softbody inner springs. */
359   float inspring;
360   /** Softbody inner springs friction. */
361   float infrict;
362   /**
363    * Along with it introduce Spring_K painting
364    * starting to fix old bug .. nastiness that VG are indexes
365    * rather find them by name tag to find it -> jow20090613.
366    * MAX_VGROUP_NAME
367    */
368   char namedVG_Spring_K[64];
369
370   /* baking */
371   int sfra, efra;
372   int interval;
373   /** Local==1: use local coords for baking. */
374   short local, solverflags;
375
376   /* -- these must be kept for backwards compatibility -- */
377   /** Array of size totpointkey. */
378   SBVertex **keys;
379   /** If totpointkey != totpoint or totkey!- (efra-sfra)/interval -> free keys. */
380   int totpointkey, totkey;
381   /* ---------------------------------------------------- */
382   float secondspring;
383
384   /* self collision*/
385   /** Fixed collision ball size if > 0. */
386   float colball;
387   /** Cooling down collision response. */
388   float balldamp;
389   /** Pressure the ball is loaded with. */
390   float ballstiff;
391   short sbc_mode;
392   short aeroedge;
393   short minloops;
394   short maxloops;
395   short choke;
396   short solver_ID;
397   short plastic;
398   short springpreload;
399
400   /** Scratchpad/cache on live time not saved in file. */
401   struct SBScratch *scratch;
402   float shearstiff;
403   float inpush;
404
405   struct SoftBody_Shared *shared;
406   /** Moved to SoftBody_Shared. */
407   struct PointCache *pointcache DNA_DEPRECATED;
408   /** Moved to SoftBody_Shared. */
409   struct ListBase ptcaches DNA_DEPRECATED;
410
411   struct Collection *collision_group;
412
413   struct EffectorWeights *effector_weights;
414   /* reverse esimated obmatrix .. no need to store in blend file .. how ever who cares */
415   float lcom[3];
416   float lrot[3][3];
417   float lscale[3][3];
418
419   int last_frame;
420 } SoftBody;
421
422 /* pd->flag: various settings */
423 #define PFIELD_USEMAX (1 << 0)
424 /*#define PDEFLE_DEFORM         (1 << 1)*/ /*UNUSED*/
425 /** TODO: do_versions for below */
426 #define PFIELD_GUIDE_PATH_ADD (1 << 2)
427 /** used for do_versions */
428 #define PFIELD_PLANAR (1 << 3)
429 #define PDEFLE_KILL_PART (1 << 4)
430 /** used for do_versions */
431 #define PFIELD_POSZ (1 << 5)
432 #define PFIELD_TEX_OBJECT (1 << 6)
433 /** used for turbulence */
434 #define PFIELD_GLOBAL_CO (1 << 6)
435 #define PFIELD_TEX_2D (1 << 7)
436 /** used for harmonic force */
437 #define PFIELD_MULTIPLE_SPRINGS (1 << 7)
438 #define PFIELD_USEMIN (1 << 8)
439 #define PFIELD_USEMAXR (1 << 9)
440 #define PFIELD_USEMINR (1 << 10)
441 #define PFIELD_TEX_ROOTCO (1 << 11)
442 /** used for do_versions */
443 #define PFIELD_SURFACE (1 << 12)
444 #define PFIELD_VISIBILITY (1 << 13)
445 #define PFIELD_DO_LOCATION (1 << 14)
446 #define PFIELD_DO_ROTATION (1 << 15)
447 /** apply curve weights */
448 #define PFIELD_GUIDE_PATH_WEIGHT (1 << 16)
449 /** multiply smoke force by density */
450 #define PFIELD_SMOKE_DENSITY (1 << 17)
451 /** used for (simple) force */
452 #define PFIELD_GRAVITATION (1 << 18)
453 /** Enable cloth collision side detection based on normal. */
454 #define PFIELD_CLOTH_USE_CULLING (1 << 19)
455 /** Replace collision direction with collider normal. */
456 #define PFIELD_CLOTH_USE_NORMAL (1 << 20)
457
458 /* pd->falloff */
459 #define PFIELD_FALL_SPHERE 0
460 #define PFIELD_FALL_TUBE 1
461 #define PFIELD_FALL_CONE 2
462
463 /* pd->shape */
464 #define PFIELD_SHAPE_POINT 0
465 #define PFIELD_SHAPE_PLANE 1
466 #define PFIELD_SHAPE_SURFACE 2
467 #define PFIELD_SHAPE_POINTS 3
468 #define PFIELD_SHAPE_LINE 4
469
470 /* pd->tex_mode */
471 #define PFIELD_TEX_RGB 0
472 #define PFIELD_TEX_GRAD 1
473 #define PFIELD_TEX_CURL 2
474
475 /* pd->zdir */
476 #define PFIELD_Z_BOTH 0
477 #define PFIELD_Z_POS 1
478 #define PFIELD_Z_NEG 2
479
480 /* pointcache->flag */
481 #define PTCACHE_BAKED (1 << 0)
482 #define PTCACHE_OUTDATED (1 << 1)
483 #define PTCACHE_SIMULATION_VALID (1 << 2)
484 #define PTCACHE_BAKING (1 << 3)
485 //#define PTCACHE_BAKE_EDIT         (1 << 4)
486 //#define PTCACHE_BAKE_EDIT_ACTIVE  (1 << 5)
487 #define PTCACHE_DISK_CACHE (1 << 6)
488 ///* removed since 2.64 - [#30974], could be added back in a more useful way */
489 //#define PTCACHE_QUICK_CACHE       (1 << 7)
490 #define PTCACHE_FRAMES_SKIPPED (1 << 8)
491 #define PTCACHE_EXTERNAL (1 << 9)
492 #define PTCACHE_READ_INFO (1 << 10)
493 /** don't use the filename of the blendfile the data is linked from (write a local cache) */
494 #define PTCACHE_IGNORE_LIBPATH (1 << 11)
495 /** high resolution cache is saved for smoke for backwards compatibility,
496  * so set this flag to know it's a "fake" cache */
497 #define PTCACHE_FAKE_SMOKE (1 << 12)
498 #define PTCACHE_IGNORE_CLEAR (1 << 13)
499
500 /* PTCACHE_OUTDATED + PTCACHE_FRAMES_SKIPPED */
501 #define PTCACHE_REDO_NEEDED 258
502
503 #define PTCACHE_COMPRESS_NO 0
504 #define PTCACHE_COMPRESS_LZO 1
505 #define PTCACHE_COMPRESS_LZMA 2
506
507 /* ob->softflag */
508 #define OB_SB_ENABLE 1 /* deprecated, use modifier */
509 #define OB_SB_GOAL 2
510 #define OB_SB_EDGES 4
511 #define OB_SB_QUADS 8
512 #define OB_SB_POSTDEF 16
513 // #define OB_SB_REDO       32
514 // #define OB_SB_BAKESET    64
515 // #define OB_SB_BAKEDO 128
516 // #define OB_SB_RESET      256
517 #define OB_SB_SELF 512
518 #define OB_SB_FACECOLL 1024
519 #define OB_SB_EDGECOLL 2048
520 /* #define OB_SB_COLLFINAL 4096 */ /* deprecated */
521 /* #define OB_SB_BIG_UI 8192 */    /* deprecated */
522 #define OB_SB_AERO_ANGLE 16384
523
524 /* sb->solverflags */
525 #define SBSO_MONITOR 1
526 #define SBSO_OLDERR 2
527 #define SBSO_ESTIMATEIPO 4
528
529 /* sb->sbc_mode */
530 #define SBC_MODE_MANUAL 0
531 #define SBC_MODE_AVG 1
532 #define SBC_MODE_MIN 2
533 #define SBC_MODE_MAX 3
534 #define SBC_MODE_AVGMINMAX 4
535
536 #ifdef __cplusplus
537 }
538 #endif
539
540 #endif /* __DNA_OBJECT_FORCE_TYPES_H__ */