Commit: f4341309788347026b17fa6c2029052a195a64b3
Author: Lukas Tönne
Date:   Wed Jul 30 12:11:34 2014 +0200
Branches: hair_system
https://developer.blender.org/rBf4341309788347026b17fa6c2029052a195a64b3

Also handle the applying of solver data to the scene DNA in the
SceneConverter class.

===================================================================

M       source/blender/hair/HAIR_capi.cpp
M       source/blender/hair/HAIR_capi.h
M       source/blender/hair/intern/HAIR_scene.cpp
M       source/blender/hair/intern/HAIR_scene.h
M       source/blender/modifiers/intern/MOD_hair.c

===================================================================

diff --git a/source/blender/hair/HAIR_capi.cpp 
b/source/blender/hair/HAIR_capi.cpp
index 56a7ca8..440bccf 100644
--- a/source/blender/hair/HAIR_capi.cpp
+++ b/source/blender/hair/HAIR_capi.cpp
@@ -60,8 +60,6 @@ void HAIR_solver_free(struct HAIR_Solver *csolver)
 void HAIR_solver_init(struct HAIR_Solver *csolver, Scene *scene, Object *ob, 
HairSystem *hsys)
 {
        Solver *solver = (Solver *)csolver;
-       HairCurve *hair;
-       int i;
        
        solver->forces().gravity = float3(scene->physics_settings.gravity);
        
@@ -76,29 +74,11 @@ void HAIR_solver_step(struct HAIR_Solver *csolver, float 
timestep)
        solver->step(timestep);
 }
 
-void HAIR_solver_apply(struct HAIR_Solver *csolver, Object *ob, HairSystem 
*hsys)
+void HAIR_solver_apply(struct HAIR_Solver *csolver, Scene *scene, Object *ob, 
HairSystem *hsys)
 {
        Solver *solver = (Solver *)csolver;
-       int i;
        
-       Transform imat = transform_inverse(Transform(ob->obmat));
-       
-       Curve *solver_curves = solver->data()->curves;
-       int totcurves = solver->data()->totcurves;
-       
-       /* copy solver data to DNA */
-       for (i = 0; i < totcurves && i < hsys->totcurves; ++i) {
-               Curve *curve = solver_curves + i;
-               HairCurve *hcurve = hsys->curves + i;
-               
-               for (int k = 0; k < curve->totpoints && k < hcurve->totpoints; 
++k) {
-                       Point *point = curve->points + k;
-                       HairPoint *hpoint = hcurve->points + k;
-                       
-                       copy_v3_v3(hpoint->co, transform_point(imat, 
point->cur.co).data());
-                       copy_v3_v3(hpoint->vel, transform_direction(imat, 
point->cur.vel).data());
-               }
-       }
+       SceneConverter::apply_solver_data(solver->data(), scene, ob, hsys);
 }
 
 
diff --git a/source/blender/hair/HAIR_capi.h b/source/blender/hair/HAIR_capi.h
index 59062f3..dc70add 100644
--- a/source/blender/hair/HAIR_capi.h
+++ b/source/blender/hair/HAIR_capi.h
@@ -41,7 +41,7 @@ struct HAIR_Solver *HAIR_solver_new(const struct HairParams 
*params);
 void HAIR_solver_free(struct HAIR_Solver *solver);
 void HAIR_solver_init(struct HAIR_Solver *solver, struct Scene *scene, struct 
Object *ob, struct HairSystem *hsys);
 void HAIR_solver_step(struct HAIR_Solver *solver, float timestep);
-void HAIR_solver_apply(struct HAIR_Solver *solver, struct Object *ob, struct 
HairSystem *hsys);
+void HAIR_solver_apply(struct HAIR_Solver *solver, struct Scene *scene, struct 
Object *ob, struct HairSystem *hsys);
 
 struct HAIR_SmoothingIteratorFloat3 *HAIR_smoothing_iter_new(struct HairCurve 
*curve, float rest_length, float amount, float cval[3]);
 void HAIR_smoothing_iter_free(struct HAIR_SmoothingIteratorFloat3 *iter);
diff --git a/source/blender/hair/intern/HAIR_scene.cpp 
b/source/blender/hair/intern/HAIR_scene.cpp
index 76cae2d..63f156b 100644
--- a/source/blender/hair/intern/HAIR_scene.cpp
+++ b/source/blender/hair/intern/HAIR_scene.cpp
@@ -25,6 +25,8 @@
  */
 
 extern "C" {
+#include "BLI_math.h"
+
 #include "DNA_hair_types.h"
 #include "DNA_object_types.h"
 }
@@ -75,4 +77,28 @@ SolverData *SceneConverter::build_solver_data(Scene *scene, 
Object *ob, HairSyst
        return data;
 }
 
+void SceneConverter::apply_solver_data(SolverData *data, Scene *scene, Object 
*ob, HairSystem *hsys)
+{
+       int i;
+       
+       Transform imat = transform_inverse(Transform(ob->obmat));
+       
+       Curve *solver_curves = data->curves;
+       int totcurves = data->totcurves;
+       
+       /* copy solver data to DNA */
+       for (i = 0; i < totcurves && i < hsys->totcurves; ++i) {
+               Curve *curve = solver_curves + i;
+               HairCurve *hcurve = hsys->curves + i;
+               
+               for (int k = 0; k < curve->totpoints && k < hcurve->totpoints; 
++k) {
+                       Point *point = curve->points + k;
+                       HairPoint *hpoint = hcurve->points + k;
+                       
+                       copy_v3_v3(hpoint->co, transform_point(imat, 
point->cur.co).data());
+                       copy_v3_v3(hpoint->vel, transform_direction(imat, 
point->cur.vel).data());
+               }
+       }
+}
+
 HAIR_NAMESPACE_END
diff --git a/source/blender/hair/intern/HAIR_scene.h 
b/source/blender/hair/intern/HAIR_scene.h
index e8548a0..4b3548e 100644
--- a/source/blender/hair/intern/HAIR_scene.h
+++ b/source/blender/hair/intern/HAIR_scene.h
@@ -37,6 +37,7 @@ struct SolverData;
 
 struct SceneConverter {
        static SolverData *build_solver_data(Scene *scene, Object *ob, 
HairSystem *hsys);
+       static void apply_solver_data(SolverData *data, Scene *scene, Object 
*ob, HairSystem *hsys);
 };
 
 HAIR_NAMESPACE_END
diff --git a/source/blender/modifiers/intern/MOD_hair.c 
b/source/blender/modifiers/intern/MOD_hair.c
index 85afa16..7fbc0fe 100644
--- a/source/blender/modifiers/intern/MOD_hair.c
+++ b/source/blender/modifiers/intern/MOD_hair.c
@@ -100,7 +100,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object 
*ob,
                                HAIR_solver_step(solver, dt);
                        }
                }
-               HAIR_solver_apply(solver, ob, hsys);
+               HAIR_solver_apply(solver, scene, ob, hsys);
                
                HAIR_solver_free(solver);
        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to