Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesdna/DNA_particle_types.h')
-rw-r--r--source/blender/makesdna/DNA_particle_types.h432
1 files changed, 432 insertions, 0 deletions
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
new file mode 100644
index 00000000000..f41a0d63142
--- /dev/null
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -0,0 +1,432 @@
+/* DNA_particle_types.h
+ *
+ *
+ * $Id: DNA_particle_types.h $
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License. See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2007 by Janne Karhu.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ */
+
+#ifndef DNA_PARTICLE_TYPES_H
+#define DNA_PARTICLE_TYPES_H
+
+#include "DNA_ID.h"
+
+typedef struct HairKey {
+ float co[3]; /* location of hair vertex */
+ float time; /* time along hair, default 0-100 */
+ float weight; /* softbody weight */
+ short editflag; /* saved particled edit mode flags */
+ short pad;
+} HairKey;
+
+typedef struct ParticleKey { /* when changed update size of struct to copy_particleKey()!! */
+ float co[3]; /* location */
+ float vel[3]; /* velocity */
+ float rot[4]; /* rotation quaternion */
+ float ave[3]; /* angular velocity */
+ float time; /* when this key happens */
+} ParticleKey;
+
+/* Child particles are created around or between parent particles */
+typedef struct ChildParticle {
+ int num, parent; /* num is face index on the final derived mesh */
+ int pa[4]; /* nearest particles to the child, used for the interpolation */
+ float w[4]; /* interpolation weights for the above particles */
+ float fuv[4], foffset; /* face vertex weights and offset */
+ float rand[3];
+} ChildParticle;
+
+/* Everything that's non dynamic for a particle: */
+typedef struct ParticleData {
+ struct Object *stick_ob;/* object that particle sticks to when dead */
+
+ ParticleKey state; /* normally current global coordinates or */
+ /* in sticky object space if dead & sticky */
+
+ HairKey *hair; /* hair vertices */
+
+ ParticleKey *keys; /* keyed states */
+
+ float i_rot[4],r_rot[4];/* initial & random values (i_rot should be removed as it's not used anymore)*/
+ float r_ave[3],r_ve[3];
+
+ float fuv[4], foffset; /* coordinates on face/edge number "num" and depth along*/
+ /* face normal for volume emission */
+
+ float time, lifetime; /* dietime is not nescessarily time+lifetime as */
+ float dietime; /* particles can die unnaturally (collision) */
+
+ float bank; /* banking angle for boids */
+
+ float size, sizemul; /* size and multiplier so that we can update size when ever */
+
+ int num; /* index to vert/edge/face */
+ int num_dmcache; /* index to derived mesh data (face) to avoid slow lookups */
+ int pad;
+
+ int totkey;
+ int bpi; /* softbody body point start index */
+
+ short flag;
+ short alive; /* the life state of a particle */
+ short loop; /* how many times particle life has looped */
+ short rt2;
+} ParticleData;
+
+typedef struct ParticleSettings {
+ ID id;
+
+ int flag;
+ short type, from, distr;
+ /* physics modes */
+ short phystype, rotmode, avemode, reactevent;
+ short draw, draw_as, draw_size, childtype;
+ /* number of path segments, power of 2 except */
+ short draw_step, ren_step;
+ short hair_step, keys_step;
+
+ /* adaptive path rendering */
+ short adapt_angle, adapt_pix;
+
+ short disp, omat, interpolation, rotfrom, integrator;
+ short kink, kink_axis, nbetween, boidneighbours;
+
+ /* billboards */
+ short bb_align, bb_uv_split, bb_anim, bb_split_offset;
+ float bb_tilt, bb_rand_tilt, bb_offset[2];
+
+ /* general values */
+ float sta, end, lifetime, randlife;
+ float timetweak, jitfac, keyed_time;
+ int totpart, userjit, grid_res;
+
+ /* initial velocity factors */
+ float normfac, obfac, randfac, partfac, tanfac, tanphase, reactfac;
+ float rotfac, avefac, phasefac;
+ /* physical properties */
+ float mass, size, randsize, reactshape;
+ /* global physical properties */
+ float acc[3], dragfac, brownfac, dampfac;
+ /* length */
+ float length, abslength, randlength;
+ /* children */
+ int child_nbr;
+ float parents, childsize, childrandsize;
+ float childrad, childflat, childspread;
+ /* clumping */
+ float clumpfac, clumppow;
+ /* kink */
+ float kink_amp, kink_freq, kink_shape;
+ /* rough */
+ float rough1, rough1_size;
+ float rough2, rough2_size, rough2_thres;
+ float rough_end, rough_end_shape;
+ /* branching */
+ float branch_thres;
+ /* drawing stuff */
+ float draw_line[2];
+
+ /* boids */
+ float max_vel, max_lat_acc, max_tan_acc;
+ float average_vel, banking, max_bank, groundz;
+ float boidfac[8];
+ char boidrule[8];
+
+ struct Group *dup_group;
+ struct Group *eff_group;
+ struct Object *dup_ob;
+ struct Object *bb_ob;
+ struct Ipo *ipo;
+ struct PartDeflect *pd;
+} ParticleSettings;
+
+typedef struct ParticleSystem{
+ struct ParticleSystem *next, *prev;
+
+ ParticleSettings *part;
+
+ ParticleData *particles;
+
+ ChildParticle *child;
+
+ struct ParticleEdit *edit;
+
+ struct ParticleCacheKey **pathcache;
+ struct ParticleCacheKey **childcache;
+
+ struct SoftBody *soft;
+
+ struct Object *target_ob;
+ struct Object *keyed_ob;
+ struct Object *lattice;
+
+ struct ListBase effectors, reactevents;
+
+ float imat[4][4]; /* used for duplicators */
+ float cfra;
+ int seed;
+ int flag, totpart, totchild, totcached, totchildcache, rt;
+ short recalc, target_psys, keyed_psys, totkeyed, softflag, bakespace;
+
+ char bb_uvname[3][32];
+
+ /* if you change these remember to update array lengths to PSYS_TOT_VG! */
+ short vgroup[11], vg_neg, rt3[2];
+}ParticleSystem;
+
+/* general particle maximums */
+/* no special why's, just seem reasonable */
+/* changing these (atleast upwards) should not cause any major problems */
+#define MAX_PARTS 100000 /* real particles/system */
+#define MAX_PART_CHILDREN 1000 /* child particles/real particles */
+#define MAX_BOIDNEIGHBOURS 10 /* neigbours considered/boid */
+
+/* part->type */
+/* hair is allways baked static in object/geometry space */
+/* other types (normal particles) are in global space and not static baked */
+#define PART_EMITTER 0
+#define PART_REACTOR 1
+#define PART_HAIR 2
+
+/* part->flag */
+#define PART_REACT_STA_END 1
+#define PART_REACT_MULTIPLE 2
+
+#define PART_LOOP 4
+#define PART_LOOP_INSTANT 8
+
+#define PART_HAIR_GEOMETRY 16
+
+#define PART_UNBORN 32 /*show unborn particles*/
+#define PART_DIED 64 /*show died particles*/
+
+#define PART_TRAND 128
+#define PART_EDISTR 256 /* particle/face from face areas */
+
+#define PART_STICKY 512 /*collided particles can stick to collider*/
+#define PART_DIE_ON_COL (1<<12)
+#define PART_SIZE_DEFL (1<<13) /* swept sphere deflections */
+#define PART_ROT_DYN (1<<14) /* dynamic rotation */
+#define PART_SIZEMASS (1<<16)
+
+#define PART_ABS_LENGTH (1<<15)
+
+#define PART_ABS_TIME (1<<17)
+#define PART_GLOB_TIME (1<<18)
+
+#define PART_BOIDS_2D (1<<19)
+
+#define PART_BRANCHING (1<<20)
+#define PART_ANIM_BRANCHING (1<<21)
+#define PART_SYMM_BRANCHING (1<<24)
+
+#define PART_HAIR_BSPLINE 1024
+
+#define PART_GRID_INVERT (1<<26)
+
+#define PART_CHILD_SEAMS (1<<28)
+#define PART_CHILD_RENDER (1<<29)
+#define PART_CHILD_GUIDE (1<<30)
+
+/* part->rotfrom */
+#define PART_ROT_KEYS 0 /* interpolate directly from keys */
+#define PART_ROT_ZINCR 1 /* same as zdir but done incrementally from previous position */
+#define PART_ROT_IINCR 2 /* same as idir but done incrementally from previous position */
+
+/* part->from */
+#define PART_FROM_VERT 0
+#define PART_FROM_FACE 1
+#define PART_FROM_VOLUME 2
+#define PART_FROM_PARTICLE 3
+#define PART_FROM_CHILD 4
+
+/* part->distr */
+#define PART_DISTR_JIT 0
+#define PART_DISTR_RAND 1
+#define PART_DISTR_GRID 2
+
+/* part->phystype */
+#define PART_PHYS_NO 0
+#define PART_PHYS_NEWTON 1
+#define PART_PHYS_KEYED 2
+#define PART_PHYS_BOIDS 3
+
+/* part->kink */
+#define PART_KINK_NO 0
+#define PART_KINK_CURL 1
+#define PART_KINK_RADIAL 2
+#define PART_KINK_WAVE 3
+#define PART_KINK_BRAID 4
+#define PART_KINK_ROT 5
+#define PART_KINK_ROLL 6
+
+/* part->draw */
+#define PART_DRAW_VEL 1
+#define PART_DRAW_ANG 2
+#define PART_DRAW_SIZE 4
+#define PART_DRAW_EMITTER 8 /* render emitter also */
+#define PART_DRAW_KEYS 16
+#define PART_DRAW_ADAPT 32
+#define PART_DRAW_COS 64
+#define PART_DRAW_BB_LOCK 128
+#define PART_DRAW_PARENT 256
+#define PART_DRAW_NUM 512
+#define PART_DRAW_RAND_GR 1024
+#define PART_DRAW_REN_ADAPT 2048
+#define PART_DRAW_VEL_LENGTH (1<<12)
+#define PART_DRAW_MAT_COL (1<<13)
+#define PART_DRAW_WHOLE_GR (1<<14)
+
+/* part->bb_align */
+#define PART_BB_X 0
+#define PART_BB_Y 1
+#define PART_BB_Z 2
+#define PART_BB_VIEW 3
+#define PART_BB_VEL 4
+
+/* part->bb_anim */
+#define PART_BB_ANIM_NONE 0
+#define PART_BB_ANIM_TIME 1
+#define PART_BB_ANIM_ANGLE 2
+#define PART_BB_ANIM_OFF_TIME 3
+#define PART_BB_ANIM_OFF_ANGLE 4
+
+/* part->bb_split_offset */
+#define PART_BB_OFF_NONE 0
+#define PART_BB_OFF_LINEAR 1
+#define PART_BB_OFF_RANDOM 2
+
+/* part->draw as */
+#define PART_DRAW_NOT 0
+#define PART_DRAW_DOT 1
+#define PART_DRAW_CIRC 2
+#define PART_DRAW_CROSS 3
+#define PART_DRAW_AXIS 4
+#define PART_DRAW_LINE 5
+#define PART_DRAW_PATH 6
+#define PART_DRAW_OB 7
+#define PART_DRAW_GR 8
+#define PART_DRAW_BB 9
+
+/* part->integrator */
+#define PART_INT_EULER 0
+#define PART_INT_MIDPOINT 1
+#define PART_INT_RK4 2
+
+/* part->rotmode */
+#define PART_ROT_NOR 1
+#define PART_ROT_VEL 2
+#define PART_ROT_RAND 3
+
+/* part->avemode */
+#define PART_AVE_SPIN 1
+#define PART_AVE_RAND 2
+#define PART_AVE_VEL 3
+
+/* part->reactevent */
+#define PART_EVENT_DEATH 0
+#define PART_EVENT_COLLIDE 1
+#define PART_EVENT_NEAR 2
+
+/* part->childtype */
+#define PART_CHILD_PARTICLES 1
+#define PART_CHILD_FACES 2
+
+/* psys->recalc */
+#define PSYS_INIT 1
+#define PSYS_DISTR 2
+#define PSYS_ALLOC 4
+#define PSYS_TYPE 8
+#define PSYS_RECALC_HAIR 16
+
+/* psys->flag */
+#define PSYS_CURRENT 1
+//#define PSYS_BAKING 2
+//#define PSYS_BAKE_UI 4
+#define PSYS_KEYED_TIME 8
+#define PSYS_ENABLED 16
+#define PSYS_FIRST_KEYED 32
+#define PSYS_DRAWING 64
+//#define PSYS_SOFT_BAKE 128
+#define PSYS_DELETE 256 /* remove particlesystem as soon as possible */
+#define PSYS_HAIR_DONE 512
+#define PSYS_KEYED 1024
+#define PSYS_EDITED 2048
+#define PSYS_PROTECT_CACHE 4096
+
+/* pars->flag */
+#define PARS_UNEXIST 1
+#define PARS_NO_DISP 2
+#define PARS_STICKY 4
+#define PARS_TRANSFORM 8
+#define PARS_HIDE 16
+#define PARS_TAG 32
+#define PARS_REKEY 64
+#define PARS_EDIT_RECALC 128
+
+/* pars->alive */
+#define PARS_KILLED 0
+#define PARS_DEAD 1
+#define PARS_UNBORN 2
+#define PARS_ALIVE 3
+
+/* psys->vg */
+#define PSYS_TOT_VG 11
+
+#define PSYS_VG_DENSITY 0
+#define PSYS_VG_VEL 1
+#define PSYS_VG_LENGTH 2
+#define PSYS_VG_CLUMP 3
+#define PSYS_VG_KINK 4
+#define PSYS_VG_ROUGH1 5
+#define PSYS_VG_ROUGH2 6
+#define PSYS_VG_ROUGHE 7
+#define PSYS_VG_SIZE 8
+#define PSYS_VG_TAN 9
+#define PSYS_VG_ROT 10
+
+/* part->boidrules */
+#define BOID_TOT_RULES 8
+
+#define BOID_COLLIDE 0
+#define BOID_AVOID 1
+#define BOID_CROWD 2
+#define BOID_CENTER 3
+#define BOID_AV_VEL 4
+#define BOID_VEL_MATCH 5
+#define BOID_GOAL 6
+#define BOID_LEVEL 7
+
+
+//#define PSYS_INTER_CUBIC 0
+//#define PSYS_INTER_LINEAR 1
+//#define PSYS_INTER_CARDINAL 2
+//#define PSYS_INTER_BSPLINE 3
+
+#endif