Merge branch 'master' into blender2.8
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 27 Feb 2018 10:16:43 +0000 (11:16 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 27 Feb 2018 10:16:43 +0000 (11:16 +0100)
1  2 
source/blender/collada/AnimationExporter.cpp
source/blender/collada/collada_utils.h

index 3e57dafed19a31a5b7c24381d0677fa2dfc8a314,3eefe84b21460cff23239bf27d52f13b1b4402f6..4687af5a7711624ae010a252af9561e533dbc258
@@@ -34,11 -34,10 +34,11 @@@ void forEachObjectInExportSet(Scene *sc
        }
  }
  
 -bool AnimationExporter::exportAnimations(Scene *sce)
 +bool AnimationExporter::exportAnimations(EvaluationContext *eval_ctx, Scene *sce)
  {
        bool has_animations = hasAnimations(sce);
        if (has_animations) {
 +              this->eval_ctx = eval_ctx;
                this->scene = sce;
  
                openLibrary();
@@@ -156,7 -155,6 +156,6 @@@ void AnimationExporter::export_keyframe
        if (this->export_settings->export_transformation_type == BC_TRANSFORMATION_TYPE_MATRIX) {
  
                std::vector<float> ctimes;
-               std::vector<float[4][4]> values;
                find_keyframes(ob, ctimes);
                if (ctimes.size() > 0)
                        export_sampled_matrix_animation(ob, ctimes);
@@@ -217,7 -215,7 +216,7 @@@ void AnimationExporter::export_sampled_
                float fmat[4][4];
                float outmat[4][4];
  
 -              bc_update_scene(scene, *ctime);
 +              bc_update_scene(eval_ctx, scene, *ctime);
                BKE_object_matrix_local_get(ob, fmat);
  
                converter.mat4_to_dae(outmat, fmat);
@@@ -252,7 -250,7 +251,7 @@@ void AnimationExporter::export_sampled_
                float fsize[3];
                float feul[3];
  
 -              bc_update_scene(scene, *ctime);
 +              bc_update_scene(eval_ctx, scene, *ctime);
  
                BKE_object_matrix_local_get(ob, fmat);
                mat4_decompose(floc, fquat, fsize, fmat);
@@@ -409,7 -407,7 +408,7 @@@ void AnimationExporter::export_morph_an
  
  void AnimationExporter::make_anim_frames_from_targets(Object *ob, std::vector<float> &frames )
  {
 -      ListBase *conlist = get_active_constraints(ob);
 +      ListBase *conlist = get_active_constraints(this->eval_ctx, ob);
        if (conlist == NULL) return;
        bConstraint *con;
        for (con = (bConstraint *)conlist->first; con; con = con->next) {
@@@ -728,7 -726,7 +727,7 @@@ void AnimationExporter::sample_and_writ
  
        if (flag & ARM_RESTPOS) {
                arm->flag &= ~ARM_RESTPOS;
 -              BKE_pose_where_is(scene, ob_arm);
 +              BKE_pose_where_is(eval_ctx, scene, ob_arm);
        }
  
        if (fra.size()) {
  
        if (flag & ARM_RESTPOS) 
                arm->flag = flag;
 -      BKE_pose_where_is(scene, ob_arm);
 +      BKE_pose_where_is(eval_ctx, scene, ob_arm);
  }
  
  void AnimationExporter::dae_baked_animation(std::vector<float> &fra, Object *ob_arm, Bone *bone)
@@@ -1012,7 -1010,7 +1011,7 @@@ std::string AnimationExporter::create_s
  void AnimationExporter::evaluate_anim_with_constraints(Object *ob, float ctime)
  {
        BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
 -      ListBase *conlist = get_active_constraints(ob);
 +      ListBase *conlist = get_active_constraints(this->eval_ctx, ob);
        bConstraint *con;
        for (con = (bConstraint *)conlist->first; con; con = con->next) {
                ListBase targets = { NULL, NULL };
  
                                if (obtar) {
                                        BKE_animsys_evaluate_animdata(scene, &obtar->id, obtar->adt, ctime, ADT_RECALC_ANIM);
 -                                      BKE_object_where_is_calc_time(scene, obtar, ctime);
 +                                      BKE_object_where_is_calc_time(this->eval_ctx, scene, obtar, ctime);
                                }
                        }
  
                                cti->flush_constraint_targets(con, &targets, 1);
                }
        }
 -      BKE_object_where_is_calc_time(scene, ob, ctime);
 +      BKE_object_where_is_calc_time(this->eval_ctx, scene, ob, ctime);
  }
  
  /*
@@@ -1322,16 -1320,15 +1321,16 @@@ std::string AnimationExporter::create_4
                float frame = *it;
  
                float ctime = BKE_scene_frame_get_from_ctime(scene, frame);
 -              bc_update_scene(scene, ctime);
 +              bc_update_scene(eval_ctx, scene, ctime);
                if (is_bone_animation) {
 +
                        if (pchan->flag & POSE_CHAIN) {
                                enable_fcurves(ob->adt->action, NULL);
                                BKE_animsys_evaluate_animdata(scene, &ob->id, ob->adt, ctime, ADT_RECALC_ALL);
 -                              BKE_pose_where_is(scene, ob);
 +                              BKE_pose_where_is(eval_ctx, scene, ob);
                        }
                        else {
 -                              BKE_pose_where_is_bone(scene, ob, pchan, ctime, 1);
 +                              BKE_pose_where_is_bone(eval_ctx, scene, ob, pchan, ctime, 1);
                        }
                        
                        // compute bone local mat
@@@ -1849,7 -1846,7 +1848,7 @@@ void AnimationExporter::sample_and_writ
        // exit rest position
        if (flag & ARM_RESTPOS) {
                arm->flag &= ~ARM_RESTPOS;
 -              BKE_pose_where_is(scene, ob_arm);
 +              BKE_pose_where_is(eval_ctx, scene, ob_arm);
        }
        //v array will hold all values which will be exported. 
        if (fra.size()) {
        // restore restpos
        if (flag & ARM_RESTPOS) 
                arm->flag = flag;
 -      BKE_pose_where_is(scene, ob_arm);
 +      BKE_pose_where_is(eval_ctx, scene, ob_arm);
  }
  
  void AnimationExporter::sample_animation(float *v, std::vector<float> &frames, int type, Bone *bone, Object *ob_arm, bPoseChannel *pchan)
  
  
                BKE_animsys_evaluate_animdata(scene, &ob_arm->id, ob_arm->adt, ctime, ADT_RECALC_ANIM);
 -              BKE_pose_where_is_bone(scene, ob_arm, pchan, ctime, 1);
 +              BKE_pose_where_is_bone(eval_ctx, scene, ob_arm, pchan, ctime, 1);
  
                // compute bone local mat
                if (bone->parent) {
@@@ -1958,9 -1955,6 +1957,9 @@@ bool AnimationExporter::validateConstra
   */
  void AnimationExporter::calc_obmat_at_time(Object *ob, float ctime )
  {
 +<<<<<<< HEAD
 +      ListBase *conlist = get_active_constraints(this->eval_ctx, ob);
 +=======
        BKE_scene_frame_set(scene, ctime);
  
        Main *bmain = bc_get_main();
        BKE_scene_update_for_newframe(ev_context, bmain, scene, scene->lay);
  
        ListBase *conlist = get_active_constraints(ob);
 +>>>>>>> master
        bConstraint *con;
        for (con = (bConstraint *)conlist->first; con; con = con->next) {
                ListBase targets = {NULL, NULL};
  
                                if (obtar) {
                                        BKE_animsys_evaluate_animdata(scene, &obtar->id, obtar->adt, ctime, ADT_RECALC_ANIM);
 -                                      BKE_object_where_is_calc_time(scene, obtar, ctime);
 +                                      BKE_object_where_is_calc_time(eval_ctx, scene, obtar, ctime);
                                }
                        }
  
                                cti->flush_constraint_targets(con, &targets, 1);
                }
        }
 +<<<<<<< HEAD
 +      BKE_object_where_is_calc_time(eval_ctx, scene, ob, ctime);
 +      copy_m4_m4(mat, ob->obmat);
 +=======
        BKE_object_where_is_calc_time(scene, ob, ctime);
 +>>>>>>> master
  }
  #endif
  
index cdc7b99722d2c358cca291d14df43fe3797c81ca,0069b4d48711f4d6670c33325d19c0fa7b0d88ee..527675573978e7fee39d3e1ba254f7793ce8fab7
@@@ -34,6 -34,7 +34,6 @@@
  
  #include <vector>
  #include <map>
 -#include <set>
  #include <algorithm>
  
  extern "C" {
  #include "ExportSettings.h"
  #include "collada_internal.h"
  
 +struct EvaluationContext;
 +
  typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex *> > TexIndexTextureArrayMap;
  
 +extern Scene *bc_get_scene(bContext *C);
  extern Main *bc_get_main();
  extern EvaluationContext *bc_get_evaluation_context();
 -extern void bc_update_scene(Scene *scene, float ctime);
 +extern void bc_update_scene(EvaluationContext *eval_ctx, Scene *scene, float ctime);
  
  extern float bc_get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index);
  extern int bc_test_parent_loop(Object *par, Object *ob);
  extern int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space = true);
 -extern Object *bc_add_object(Scene *scene, int type, const char *name);
 -extern Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
 +extern Object *bc_add_object(Scene *scene, ViewLayer *view_layer, int type, const char *name);
 +extern Mesh *bc_get_mesh_copy(const struct EvaluationContext *eval_ctx, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
  
  extern Object *bc_get_assigned_armature(Object *ob);
  extern Object *bc_get_highest_selected_ancestor_or_self(LinkNode *export_set, Object *ob);
@@@ -107,7 -105,7 +107,7 @@@ extern int bc_set_layer(int bitfield, i
  extern int bc_set_layer(int bitfield, int layer);
  
  inline bool bc_in_range(float a, float b, float range) {
-       return abs(a - b) < range;
+       return fabsf(a - b) < range;
  }
  void bc_copy_m4_farray(float r[4][4], float *a);
  void bc_copy_farray_m4(float *r, float a[4][4]);
@@@ -125,6 -123,14 +125,6 @@@ extern bool bc_get_property_matrix(Bon
  
  extern void bc_create_restpose_mat(const ExportSettings *export_settings, Bone *bone, float to_mat[4][4], float world[4][4], bool use_local_space);
  
 -extern std::string bc_get_active_uvlayer_name(Object *ob);
 -extern std::string bc_get_active_uvlayer_name(Mesh *me);
 -extern std::string bc_get_uvlayer_name(Mesh *me, int layer);
 -
 -extern std::set<Image *> bc_getUVImages(Scene *sce, bool all_uv_layers);
 -extern std::set<Image *> bc_getUVImages(Object *ob, bool all_uv_layers);
 -extern std::set<Object *> bc_getUVTexturedObjects(Scene *sce, bool all_uv_layers);
 -
  class BCPolygonNormalsIndices
  {
        std::vector<unsigned int> normal_indices;