Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Thu, 14 Jun 2018 13:55:51 +0000 (15:55 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Thu, 14 Jun 2018 13:55:51 +0000 (15:55 +0200)
Conflicts:
source/blender/collada/AnimationExporter.cpp
source/blender/collada/AnimationExporter.h
source/blender/collada/ArmatureImporter.cpp
source/blender/collada/ArmatureImporter.h
source/blender/collada/ControllerExporter.cpp
source/blender/collada/ControllerExporter.h
source/blender/collada/DocumentExporter.cpp
source/blender/collada/DocumentImporter.cpp
source/blender/collada/GeometryExporter.cpp
source/blender/collada/GeometryExporter.h
source/blender/collada/MeshImporter.cpp
source/blender/collada/MeshImporter.h
source/blender/collada/SkinInfo.cpp
source/blender/collada/SkinInfo.h
source/blender/collada/collada_utils.cpp
source/blender/collada/collada_utils.h

16 files changed:
source/blender/collada/AnimationExporter.cpp
source/blender/collada/AnimationExporter.h
source/blender/collada/ArmatureImporter.cpp
source/blender/collada/ArmatureImporter.h
source/blender/collada/ControllerExporter.cpp
source/blender/collada/ControllerExporter.h
source/blender/collada/DocumentExporter.cpp
source/blender/collada/DocumentImporter.cpp
source/blender/collada/GeometryExporter.cpp
source/blender/collada/GeometryExporter.h
source/blender/collada/MeshImporter.cpp
source/blender/collada/MeshImporter.h
source/blender/collada/SkinInfo.cpp
source/blender/collada/SkinInfo.h
source/blender/collada/collada_utils.cpp
source/blender/collada/collada_utils.h

index 95298986f5a24a86e024cece419e9c73d305d58d..ab53e28247606e8bb97390b4b0f09f1f9f068780 100644 (file)
@@ -34,9 +34,10 @@ void forEachObjectInExportSet(Scene *sce, Functor &f, LinkNode *export_set)
        }
 }
 
-bool AnimationExporter::exportAnimations(Scene *sce)
+bool AnimationExporter::exportAnimations(Main *bmain, Scene *sce)
 {
        bool has_animations = hasAnimations(sce);
+       m_bmain = bmain;
        if (has_animations) {
                this->scene = sce;
 
@@ -214,7 +215,7 @@ void AnimationExporter::export_sampled_matrix_animation(Object *ob, std::vector<
        for (std::vector<float>::iterator ctime = ctimes.begin(); ctime != ctimes.end(); ++ctime) {
                float fmat[4][4];
 
-               bc_update_scene(depsgraph, scene, *ctime);
+               bc_update_scene(m_bmain, depsgraph, scene, *ctime);
                BKE_object_matrix_local_get(ob, fmat);
                if (this->export_settings->limit_precision)
                        bc_sanitize_mat(fmat, 6);
@@ -246,7 +247,7 @@ void AnimationExporter::export_sampled_transrotloc_animation(Object *ob, std::ve
                float fsize[3];
                float feul[3];
 
-               bc_update_scene(depsgraph, scene, *ctime);
+               bc_update_scene(m_bmain, depsgraph, scene, *ctime);
                BKE_object_matrix_local_get(ob, fmat);
                mat4_decompose(floc, fquat, fsize, fmat);
                quat_to_eul(feul, fquat);
@@ -1315,7 +1316,7 @@ std::string AnimationExporter::create_4x4_source(std::vector<float> &frames, Obj
                float frame = *it;
 
                float ctime = BKE_scene_frame_get_from_ctime(scene, frame);
-               bc_update_scene(depsgraph, scene, ctime);
+               bc_update_scene(m_bmain, depsgraph, scene, ctime);
                if (is_bone_animation) {
 
                        if (pchan->flag & POSE_CHAIN) {
index a50bcaf0ef498709b4592a5ca98f76bd620a2c58..67468458f819f8bc6b9421f4dd35287da94d606b 100644 (file)
@@ -84,6 +84,7 @@ struct Depsgraph;
 class AnimationExporter: COLLADASW::LibraryAnimations
 {
 private:
+       Main *m_bmain;
        Scene *scene;
        Depsgraph *depsgraph;
        COLLADASW::StreamWriter *sw;
@@ -98,7 +99,8 @@ public:
                this->sw = sw;
        }
 
-       bool exportAnimations(Scene *sce);
+       bool exportAnimations(Main *bmain, Scene *sce);
+
        // called for each exported object
        void operator() (Object *ob);
 
index 0e71149fba63433568b3f22bc157b0e759c0b563..2f5c3237bf6433188d6e005e8b3cf66abaf30201 100644 (file)
@@ -55,8 +55,10 @@ static const char *bc_get_joint_name(T *node)
 }
 
 
-ArmatureImporter::ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings) :
+ArmatureImporter::ArmatureImporter(
+        UnitConverter *conv, MeshImporterBase *mesh, Main *bmain, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings) :
        TransformReader(conv),
+       m_bmain(bmain),
        scene(sce),
        view_layer(view_layer),
        unit_converter(conv),
@@ -411,7 +413,7 @@ Object *ArmatureImporter::get_empty_for_leaves()
 {
        if (empty) return empty;
 
-       empty = bc_add_object(scene, view_layer, OB_EMPTY, NULL);
+       empty = bc_add_object(m_bmain, scene, view_layer, OB_EMPTY, NULL);
        empty->empty_drawtype = OB_EMPTY_SPHERE;
 
        return empty;
@@ -586,7 +588,7 @@ Object *ArmatureImporter::create_armature_bones(Main *bmain, SkinInfo& skin)
                ob_arm = skin.set_armature(shared);
        }
        else {
-               ob_arm = skin.create_armature(scene, view_layer);  //once for every armature
+               ob_arm = skin.create_armature(m_bmain, scene, view_layer);  //once for every armature
        }
 
        // enter armature edit mode
index 58121a090fae48cde425e84fed24cb26213d679b..419861554f4af829b6f63a64a98347f3b703e651 100644 (file)
@@ -62,6 +62,7 @@ extern "C" {
 class ArmatureImporter : private TransformReader
 {
 private:
+       Main *m_bmain;
        Scene *scene;
        ViewLayer *view_layer;
        UnitConverter *unit_converter;
@@ -138,7 +139,8 @@ private:
        TagsMap uid_tags_map;
 public:
 
-       ArmatureImporter(UnitConverter *conv, MeshImporterBase *mesh, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings);
+       ArmatureImporter(
+               UnitConverter *conv, MeshImporterBase *mesh, Main *bmain, Scene *sce, ViewLayer *view_layer, const ImportSettings *import_settings);
        ~ArmatureImporter();
 
        void add_root_joint(COLLADAFW::Node *node, Object *parent);
index 122094e33a6739c05c5754dd6aee1cbb040068c8..6cb1e58db6ed70beaae9eacd2583b418e09f10bb 100644 (file)
@@ -104,9 +104,10 @@ bool ControllerExporter::add_instance_controller(Object *ob)
        return true;
 }
 
-void ControllerExporter::export_controllers(struct Depsgraph *depsgraph, Scene *sce)
+void ControllerExporter::export_controllers(Main *bmain, Depsgraph *depsgraph, Scene *sce)
 {
        this->depsgraph = depsgraph;
+       m_bmain = bmain;
        scene = sce;
 
        openLibrary();
@@ -198,7 +199,10 @@ void ControllerExporter::export_skin_controller(Object *ob, Object *ob_arm)
        bool use_instantiation = this->export_settings->use_object_instantiation;
        Mesh *me;
 
-       me = bc_get_mesh_copy(depsgraph, scene,
+       me = bc_get_mesh_copy(
+                               m_bmain,
+                               depsgraph,
+                               scene,
                                ob,
                                this->export_settings->export_mesh_type,
                                this->export_settings->apply_modifiers,
@@ -289,7 +293,7 @@ void ControllerExporter::export_skin_controller(Object *ob, Object *ob_arm)
        add_joints_element(&ob->defbase, joints_source_id, inv_bind_mat_source_id);
        add_vertex_weights_element(weights_source_id, joints_source_id, vcounts, joints);
 
-       BKE_libblock_free_us(G.main, me);
+       BKE_libblock_free_us(m_bmain, me);
 
        closeSkin();
        closeController();
@@ -300,7 +304,10 @@ void ControllerExporter::export_morph_controller(Object *ob, Key *key)
        bool use_instantiation = this->export_settings->use_object_instantiation;
        Mesh *me;
 
-       me = bc_get_mesh_copy(depsgraph, scene,
+       me = bc_get_mesh_copy(
+                               m_bmain,
+                               depsgraph,
+                               scene,
                                ob,
                                this->export_settings->export_mesh_type,
                                this->export_settings->apply_modifiers,
@@ -325,7 +332,7 @@ void ControllerExporter::export_morph_controller(Object *ob, Key *key)
                                         COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, morph_weights_id)));
        targets.add();
 
-       BKE_libblock_free_us(G.main, me);
+       BKE_libblock_free_us(m_bmain, me);
 
 
        //support for animations
index e13d7c7ebea0fe1e8377f85b9da7fc354e7b506b..2b6853901be8aa31fd2a25d3d2a2b0ecb9204cbc 100644 (file)
@@ -66,12 +66,13 @@ public:
 
        bool add_instance_controller(Object *ob);
 
-       void export_controllers(struct Depsgraph *depsgraph, Scene *sce);
+       void export_controllers(Main *bmain, Depsgraph *depsgraph, Scene *sce);
 
        void operator()(Object *ob);
 
 private:
-       struct Depsgraph *depsgraph;
+       Depsgraph *depsgraph;
+       Main *m_bmain;
        Scene *scene;
        UnitConverter converter;
        const ExportSettings *export_settings;
index 9e78c164dadab082b21c51c8bd012f6aba3f9367..04d39f4f568657110ff21cb26835c7f59bfe9ce3 100644 (file)
@@ -182,6 +182,7 @@ static COLLADABU::NativeString make_temp_filepath(const char *name, const char *
 
 int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
 {
+       Main *bmain = CTX_data_main(C);
        PointerRNA sceneptr, unit_settings;
        PropertyRNA *system; /* unused , *scale; */
 
@@ -286,7 +287,7 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
        // <library_geometries>
        if (bc_has_object_type(export_set, OB_MESH)) {
                GeometryExporter ge(writer, this->export_settings);
-               ge.exportGeom(depsgraph, sce);
+               ge.exportGeom(bmain, depsgraph, sce);
        }
 
        // <library_controllers>
@@ -294,7 +295,7 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
        ControllerExporter controller_exporter(writer, this->export_settings);
        if (bc_has_object_type(export_set, OB_ARMATURE) || this->export_settings->include_shapekeys)
        {
-               controller_exporter.export_controllers(depsgraph, sce);
+               controller_exporter.export_controllers(bmain, depsgraph, sce);
        }
 
        // <library_visual_scenes>
@@ -304,7 +305,7 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
        if (this->export_settings->include_animations) {
                // <library_animations>
                AnimationExporter ae(depsgraph, writer, this->export_settings);
-               ae.exportAnimations(sce);
+               ae.exportAnimations(bmain, sce);
        }
        se.exportScene(C, depsgraph, sce);
 
index d80f7c20139b8168ff45719e2089a413ec11b016..7aeed15ee87883d12da66deb7a79a2a941eea12f 100644 (file)
@@ -108,8 +108,8 @@ DocumentImporter::DocumentImporter(bContext *C, const ImportSettings *import_set
        mImportStage(General),
        mContext(C),
        view_layer(CTX_data_view_layer(mContext)),
-       armature_importer(&unit_converter, &mesh_importer, CTX_data_scene(C), view_layer, import_settings),
-       mesh_importer(&unit_converter, &armature_importer, CTX_data_scene(C), view_layer),
+       armature_importer(&unit_converter, &mesh_importer, CTX_data_main(C), CTX_data_scene(C), view_layer, import_settings),
+       mesh_importer(&unit_converter, &armature_importer, CTX_data_main(C), CTX_data_scene(C), view_layer),
        anim_importer(&unit_converter, &armature_importer, CTX_data_scene(C))
 {
 }
@@ -266,7 +266,7 @@ void DocumentImporter::finish()
                std::vector<Object *>::iterator it;
                for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) {
                        Object *ob = *it;
-                       BKE_scene_collections_object_remove(G.main, sce, ob, true);
+                       BKE_scene_collections_object_remove(bmain, sce, ob, true);
                }
                libnode_ob.clear();
 
@@ -379,11 +379,12 @@ Object *DocumentImporter::create_camera_object(COLLADAFW::InstanceCamera *camera
                return NULL;
        }
 
-       Object *ob = bc_add_object(sce, view_layer, OB_CAMERA, NULL);
+       Main *bmain = CTX_data_main(mContext);
+       Object *ob = bc_add_object(bmain, sce, view_layer, OB_CAMERA, NULL);
        Camera *cam = uid_camera_map[cam_uid];
        Camera *old_cam = (Camera *)ob->data;
        ob->data = cam;
-       BKE_libblock_free_us(G.main, old_cam);
+       BKE_libblock_free_us(bmain, old_cam);
        return ob;
 }
 
@@ -395,11 +396,12 @@ Object *DocumentImporter::create_lamp_object(COLLADAFW::InstanceLight *lamp, Sce
                return NULL;
        }
 
-       Object *ob = bc_add_object(sce, view_layer, OB_LAMP, NULL);
+       Main *bmain = CTX_data_main(mContext);
+       Object *ob = bc_add_object(bmain, sce, view_layer, OB_LAMP, NULL);
        Lamp *la = uid_lamp_map[lamp_uid];
        Lamp *old_lamp = (Lamp *)ob->data;
        ob->data = la;
-       BKE_libblock_free_us(G.main, old_lamp);
+       BKE_libblock_free_us(bmain, old_lamp);
        return ob;
 }
 
@@ -407,7 +409,8 @@ Object *DocumentImporter::create_instance_node(Object *source_ob, COLLADAFW::Nod
 {
        fprintf(stderr, "create <instance_node> under node id=%s from node id=%s\n", instance_node ? instance_node->getOriginalId().c_str() : NULL, source_node ? source_node->getOriginalId().c_str() : NULL);
 
-       Object *obn = BKE_object_copy(G.main, source_ob);
+       Main *bmain = CTX_data_main(mContext);
+       Object *obn = BKE_object_copy(bmain, source_ob);
        DEG_id_tag_update(&obn->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
        BKE_collection_object_add_from(G.main, sce, source_ob, obn);
 
@@ -490,6 +493,7 @@ void DocumentImporter::report_unknown_reference(const COLLADAFW::Node &node, con
 
 std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLADAFW::Node *parent_node, Scene *sce, Object *par, bool is_library_node)
 {
+       Main *bmain = CTX_data_main(mContext);
        Object *ob = NULL;
        bool is_joint = node->getType() == COLLADAFW::Node::JOINT;
        bool read_transform = true;
@@ -511,7 +515,7 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
                if (parent_node == NULL && !is_library_node) {
                        // A Joint on root level is a skeleton without root node.
                        // Here we add the armature "on the fly":
-                       par = bc_add_object(sce, view_layer, OB_ARMATURE, std::string("Armature").c_str());
+                       par = bc_add_object(bmain, sce, view_layer, OB_ARMATURE, std::string("Armature").c_str());
                        objects_done->push_back(par);
                        root_objects->push_back(par);
                        object_map.insert(std::pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), par));
@@ -624,10 +628,10 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
                if ( (geom_done + camera_done + lamp_done + controller_done + inst_done) < 1) {
                        //Check if Object is armature, by checking if immediate child is a JOINT node.
                        if (is_armature(node)) {
-                               ob = bc_add_object(sce, view_layer, OB_ARMATURE, name.c_str());
+                               ob = bc_add_object(bmain, sce, view_layer, OB_ARMATURE, name.c_str());
                        }
                        else {
-                               ob = bc_add_object(sce, view_layer, OB_EMPTY, NULL);
+                               ob = bc_add_object(bmain, sce, view_layer, OB_EMPTY, NULL);
                        }
                        objects_done->push_back(ob);
                        if (parent_node == NULL) {
@@ -644,7 +648,7 @@ std::vector<Object *> *DocumentImporter::write_node(COLLADAFW::Node *node, COLLA
                for (std::vector<Object *>::iterator it = objects_done->begin(); it != objects_done->end(); ++it) {
                        ob = *it;
                        std::string nodename = node->getName().size() ? node->getName() : node->getOriginalId();
-                       BKE_libblock_rename(G.main, &ob->id, (char *)nodename.c_str());
+                       BKE_libblock_rename(bmain, &ob->id, (char *)nodename.c_str());
                        object_map.insert(std::pair<COLLADAFW::UniqueId, Object *>(node->getUniqueId(), ob));
                        node_map[node->getUniqueId()] = node;
 
@@ -754,8 +758,9 @@ bool DocumentImporter::writeMaterial(const COLLADAFW::Material *cmat)
        if (mImportStage != General)
                return true;
 
+       Main *bmain = CTX_data_main(mContext);
        const std::string& str_mat_id = cmat->getName().size() ? cmat->getName() : cmat->getOriginalId();
-       Material *ma = BKE_material_add(G.main, (char *)str_mat_id.c_str());
+       Material *ma = BKE_material_add(bmain, (char *)str_mat_id.c_str());
 
        this->uid_effect_map[cmat->getInstantiatedEffect()] = ma;
        this->uid_material_map[cmat->getUniqueId()] = ma;
@@ -940,14 +945,15 @@ bool DocumentImporter::writeCamera(const COLLADAFW::Camera *camera)
        if (mImportStage != General)
                return true;
 
+       Main *bmain = CTX_data_main(mContext);
        Camera *cam = NULL;
        std::string cam_id, cam_name;
 
        ExtraTags *et=getExtraTags(camera->getUniqueId());
        cam_id = camera->getOriginalId();
        cam_name = camera->getName();
-       if (cam_name.size()) cam = (Camera *)BKE_camera_add(G.main, (char *)cam_name.c_str());
-       else cam = (Camera *)BKE_camera_add(G.main, (char *)cam_id.c_str());
+       if (cam_name.size()) cam = (Camera *)BKE_camera_add(bmain, (char *)cam_name.c_str());
+       else cam = (Camera *)BKE_camera_add(bmain, (char *)cam_id.c_str());
 
        if (!cam) {
                fprintf(stderr, "Cannot create camera.\n");
@@ -1102,6 +1108,7 @@ bool DocumentImporter::writeLight(const COLLADAFW::Light *light)
        if (mImportStage != General)
                return true;
 
+       Main *bmain = CTX_data_main(mContext);
        Lamp *lamp = NULL;
        std::string la_id, la_name;
 
@@ -1114,8 +1121,8 @@ bool DocumentImporter::writeLight(const COLLADAFW::Light *light)
 
        la_id = light->getOriginalId();
        la_name = light->getName();
-       if (la_name.size()) lamp = (Lamp *)BKE_lamp_add(G.main, (char *)la_name.c_str());
-       else lamp = (Lamp *)BKE_lamp_add(G.main, (char *)la_id.c_str());
+       if (la_name.size()) lamp = (Lamp *)BKE_lamp_add(bmain, (char *)la_name.c_str());
+       else lamp = (Lamp *)BKE_lamp_add(bmain, (char *)la_id.c_str());
 
        if (!lamp) {
                fprintf(stderr, "Cannot create lamp.\n");
index 65e844cbe506baa5dc0dadb832c67ebd98fab621..f59be97b5454e363604b1341680ad99c86c85dd8 100644 (file)
@@ -57,11 +57,12 @@ GeometryExporter::GeometryExporter(COLLADASW::StreamWriter *sw, const ExportSett
 {
 }
 
-void GeometryExporter::exportGeom(struct Depsgraph *depsgraph, Scene *sce)
+void GeometryExporter::exportGeom(Main *bmain, struct Depsgraph *depsgraph, Scene *sce)
 {
        openLibrary();
 
        mDepsgraph = depsgraph;
+       m_bmain = bmain;
        mScene = sce;
        GeometryFunctor gf;
        gf.forEachMeshObjectInExportSet<GeometryExporter>(sce, *this, this->export_settings->export_set);
@@ -77,7 +78,10 @@ void GeometryExporter::operator()(Object *ob)
 #endif
 
        bool use_instantiation = this->export_settings->use_object_instantiation;
-       Mesh *me = bc_get_mesh_copy(mDepsgraph, mScene,
+       Mesh *me = bc_get_mesh_copy(
+                                       m_bmain,
+                                       mDepsgraph,
+                                       mScene,
                                        ob,
                                        this->export_settings->export_mesh_type,
                                        this->export_settings->apply_modifiers,
@@ -166,7 +170,7 @@ void GeometryExporter::operator()(Object *ob)
                }
        }
 
-       BKE_libblock_free_us(G.main, me);
+       BKE_libblock_free_us(m_bmain, me);
 
 }
 
index b0cd650adcd90e2abb726372d589035fe4d66b34..5d74124b07a82aa2bf7adab2a7ecd90015a8dff5 100644 (file)
@@ -75,12 +75,13 @@ class GeometryExporter : COLLADASW::LibraryGeometries
        Normal n;
 
        struct Depsgraph *mDepsgraph;
+       Main *m_bmain;
        Scene *mScene;
 
 public:
        GeometryExporter(COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
 
-       void exportGeom(struct Depsgraph *depsgraph, Scene *sce);
+       void exportGeom(Main *bmain, Depsgraph *depsgraph, Scene *sce);
 
        void operator()(Object *ob);
 
index e95f8ed08882ddb9507b0b63027e8fe9f7f3a2a8..4a8fca6d3cd95a276329b4481e9965b2ef810740 100644 (file)
@@ -207,8 +207,9 @@ void VCOLDataWrapper::get_vcol(int v_index, MLoopCol *mloopcol)
 
 }
 
-MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce, ViewLayer *view_layer):
+MeshImporter::MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Main *bmain, Scene *sce, ViewLayer *view_layer):
        unitconverter(unitconv),
+       m_bmain(bmain),
        scene(sce),
        view_layer(view_layer),
        armature_importer(arm) {
@@ -1035,7 +1036,7 @@ void MeshImporter::assign_material_to_geom(
        // Attention! This temporaly assigns material to object on purpose!
        // See note above.
        ob->actcol=0;
-       assign_material(G.main, ob, ma, mat_index + 1, BKE_MAT_ASSIGN_OBJECT);
+       assign_material(m_bmain, ob, ma, mat_index + 1, BKE_MAT_ASSIGN_OBJECT);
 
        MaterialIdPrimitiveArrayMap& mat_prim_map = geom_uid_mat_mapping_map[*geom_uid];
        COLLADAFW::MaterialId mat_id = cmaterial.getMaterialId();
@@ -1090,7 +1091,7 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
        const char *name = (id.length()) ? id.c_str() : NULL;
 
        // add object
-       Object *ob = bc_add_object(scene, view_layer, OB_MESH, name);
+       Object *ob = bc_add_object(m_bmain, scene, view_layer, OB_MESH, name);
        bc_set_mark(ob); // used later for material assignement optimization
 
 
@@ -1102,11 +1103,11 @@ Object *MeshImporter::create_mesh_object(COLLADAFW::Node *node, COLLADAFW::Insta
        Mesh *old_mesh = (Mesh *)ob->data;
        Mesh *new_mesh = uid_mesh_map[*geom_uid];
 
-       BKE_mesh_assign_object(G.main, ob, new_mesh);
+       BKE_mesh_assign_object(m_bmain, ob, new_mesh);
        BKE_mesh_calc_normals(new_mesh);
 
        id_us_plus(&old_mesh->id);  /* Because BKE_mesh_assign_object would have already decreased it... */
-       BKE_libblock_free_us(G.main, old_mesh);
+       BKE_libblock_free_us(m_bmain, old_mesh);
 
        COLLADAFW::MaterialBindingArray& mat_array =
            geom->getMaterialBindings();
@@ -1145,7 +1146,7 @@ bool MeshImporter::write_geometry(const COLLADAFW::Geometry *geom)
        }
 
        const std::string& str_geom_id = mesh->getName().size() ? mesh->getName() : mesh->getOriginalId();
-       Mesh *me = BKE_mesh_add(G.main, (char *)str_geom_id.c_str());
+       Mesh *me = BKE_mesh_add(m_bmain, (char *)str_geom_id.c_str());
        id_us_min(&me->id); // is already 1 here, but will be set later in BKE_mesh_assign_object
 
        // store the Mesh pointer to link it later with an Object
index c98126916d7f374f9e63ce48811f6120080fb3cd..4583242808b925138c36e237567b3777cd2d4ba6 100644 (file)
@@ -90,6 +90,7 @@ private:
 
        UnitConverter *unitconverter;
 
+       Main *m_bmain;
        Scene *scene;
        ViewLayer *view_layer;
 
@@ -160,7 +161,7 @@ private:
 
 public:
 
-       MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce, ViewLayer *view_layer);
+       MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Main *bmain, Scene *sce, ViewLayer *view_layer);
 
        virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
 
index 7ec3f04aabfa0056443af2a3471e30305490024b..b07c6518050be2ee8f831cbf06b7778c82222458 100644 (file)
@@ -159,9 +159,9 @@ void SkinInfo::set_controller(const COLLADAFW::SkinController *co)
 }
 
 // called from write_controller
-Object *SkinInfo::create_armature(Scene *scene, ViewLayer *view_layer)
+Object *SkinInfo::create_armature(Main *bmain, Scene *scene, ViewLayer *view_layer)
 {
-       ob_arm = bc_add_object(scene, view_layer, OB_ARMATURE, NULL);
+       ob_arm = bc_add_object(bmain, scene, view_layer, OB_ARMATURE, NULL);
        return ob_arm;
 }
 
index fdfee0a943a3ecacf91e2754cc1b7389f197ca4f..39808c546b1cad21386b78e2eea27aa6bb8134a5 100644 (file)
@@ -99,7 +99,7 @@ public:
        void set_controller(const COLLADAFW::SkinController* co);
 
        // called from write_controller
-       Object *create_armature(Scene *scene, ViewLayer *view_layer);
+       Object *create_armature(Main *bmain, Scene *scene, ViewLayer *view_layer);
 
        Object* set_armature(Object *ob_arm);
 
index cb4ee62f636f680f6ea164732eff0d19a70d618b..61a97a45a6eb90918b57159335692b6949bdd4d6 100644 (file)
@@ -142,24 +142,17 @@ Scene *bc_get_scene(bContext *C)
        return CTX_data_scene(C);
 }
 
-Main *bc_get_main()
-{
-       return G.main;
-}
-
-
-void bc_update_scene(Depsgraph *depsgraph, Scene *scene, float ctime)
+void bc_update_scene(Main *bmain, Depsgraph *depsgraph, Scene *scene, float ctime)
 {
        BKE_scene_frame_set(scene, ctime);
-       Main *bmain = bc_get_main();
        BKE_scene_graph_update_for_newframe(depsgraph, bmain);
 }
 
-Object *bc_add_object(Scene *scene, ViewLayer *view_layer, int type, const char *name)
+Object *bc_add_object(Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name)
 {
-       Object *ob = BKE_object_add_only_object(G.main, type, name);
+       Object *ob = BKE_object_add_only_object(bmain, type, name);
 
-       ob->data = BKE_object_obdata_add_from_type(G.main, type, name);
+       ob->data = BKE_object_obdata_add_from_type(bmain, type, name);
        ob->lay = scene->lay;
        DEG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA | OB_RECALC_TIME);
 
@@ -172,7 +165,8 @@ Object *bc_add_object(Scene *scene, ViewLayer *view_layer, int type, const char
        return ob;
 }
 
-Mesh *bc_get_mesh_copy(struct Depsgraph *depsgraph, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate)
+Mesh *bc_get_mesh_copy(
+        Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate)
 {
        Mesh *tmpmesh;
        CustomDataMask mask = CD_MASK_MESH;
@@ -196,7 +190,7 @@ Mesh *bc_get_mesh_copy(struct Depsgraph *depsgraph, Scene *scene, Object *ob, BC
                dm = mesh_create_derived((Mesh *)ob->data, NULL);
        }
 
-       tmpmesh = BKE_mesh_add(G.main, "ColladaMesh"); // name is not important here
+       tmpmesh = BKE_mesh_add(bmain, "ColladaMesh"); // name is not important here
        DM_to_mesh(dm, tmpmesh, ob, CD_MASK_MESH, true);
        tmpmesh->flag = mesh->flag;
 
index 20c569834d8711d079210ee273e0e6de1509dd2c..de9167efb07e8621cdaffbaec136d263bfbbec98 100644 (file)
@@ -65,15 +65,15 @@ struct Depsgraph;
 typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex *> > TexIndexTextureArrayMap;
 
 extern Scene *bc_get_scene(bContext *C);
-extern Main *bc_get_main();
 extern Depsgraph *bc_get_depsgraph();
-extern void bc_update_scene(Depsgraph *depsgraph, Scene *scene, float ctime);
+extern void bc_update_scene(Main *bmain, Depsgraph *depsgraph, 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, ViewLayer *view_layer, int type, const char *name);
-extern Mesh *bc_get_mesh_copy(struct Depsgraph *depsgraph, Scene *scene, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate);
+extern Object *bc_add_object(Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name);
+extern Mesh *bc_get_mesh_copy(
+        Main *bmain, Depsgraph *depsgraph, 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);