recent changes to particle normal orientation change behavior in a way you might...
authorCampbell Barton <ideasman42@gmail.com>
Sun, 14 Jul 2013 10:57:43 +0000 (10:57 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 14 Jul 2013 10:57:43 +0000 (10:57 +0000)
split this into 2 options, added 'Normal-Tangent' orientation that makes the mesh orient towards the tangent, otherwise it uses Z-Up as before.

source/blender/blenkernel/intern/particle_system.c
source/blender/makesdna/DNA_particle_types.h
source/blender/makesrna/intern/rna_particle.c

index 59c2c1d93ff9687ee7d6fd162e76f18dee650713..16ea71204ccbe53eb45ee92e99d6f6b68572a02d 100644 (file)
@@ -1670,7 +1670,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
        const bool use_boids = ((part->phystype == PART_PHYS_BOIDS) &&
                                (pa->boid != NULL));
        const bool use_tangents = ((use_boids == false) &&
-                                  ((part->tanfac != 0.0f) || (part->rotmode == PART_ROT_NOR)));
+                                  ((part->tanfac != 0.0f) || (part->rotmode == PART_ROT_NOR_TAN)));
 
        int p = pa - psys->particles;
 
@@ -1833,6 +1833,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
                        /* create vector into which rotation is aligned */
                        switch (part->rotmode) {
                                case PART_ROT_NOR:
+                               case PART_ROT_NOR_TAN:
                                        copy_v3_v3(rot_vec, nor);
                                        use_global_space = false;
                                        break;
@@ -1881,7 +1882,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
                                invert_qt_qt(q_imat, q_obmat);
 
 
-                               if (part->rotmode != PART_ROT_NOR) {
+                               if (part->rotmode != PART_ROT_NOR_TAN) {
                                        float rot_vec_local[3];
 
                                        /* rot_vec */
@@ -1893,7 +1894,7 @@ void psys_get_birth_coordinates(ParticleSimulationData *sim, ParticleData *pa, P
                                        vec_to_quat(q2, rot_vec_local, OB_POSX, OB_POSZ);
                                }
                                else {
-                                       /* (part->rotmode == PART_ROT_NOR) */
+                                       /* (part->rotmode == PART_ROT_NOR_TAN) */
                                        float tmat[3][3];
 
                                        /* note: utan_local is not taken from 'utan', we calculate from rot_vec/vtan */
index 84442201df82906681a6eb9487d31f3e6f99b96a..29fcaf3bf735a434c3df2fed137ec9b892e3f0cc 100644 (file)
@@ -473,6 +473,7 @@ typedef struct ParticleSystem {
 #define PART_ROT_OB_X          6
 #define PART_ROT_OB_Y          7
 #define PART_ROT_OB_Z          8
+#define PART_ROT_NOR_TAN       9
 
 /* part->avemode */
 #define PART_AVE_VELOCITY      1
index f120a0cab4a9b099e27212fe6c8f808c418679a4..b966a7d7f2c60c659fe5b9ce1af4d7b304a53fcf 100644 (file)
@@ -1887,6 +1887,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
        static EnumPropertyItem rot_mode_items[] = {
                {0, "NONE", 0, "None", ""},
                {PART_ROT_NOR, "NOR", 0, "Normal", ""},
+               {PART_ROT_NOR_TAN, "NOR_TAN", 0, "Normal-Tangent", ""},
                {PART_ROT_VEL, "VEL", 0, "Velocity / Hair", ""},
                {PART_ROT_GLOB_X, "GLOB_X", 0, "Global X", ""},
                {PART_ROT_GLOB_Y, "GLOB_Y", 0, "Global Y", ""},