Fix #31258: collada now selects newly added objects after import.
[blender-staging.git] / source / blender / collada / MeshImporter.h
index 8c468b01fb65b0caafaa7a672c109fcefe5757c5..97ae4d99ad7de2c2acd26ce2253b02dcc1354bee 100644 (file)
@@ -1,6 +1,4 @@
-/**
- * $Id: DocumentImporter.cpp 32235 2010-10-01 19:46:42Z jesterking $
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef __BC__MESHIMPORTER_H__
-#define __BC__MESHIMPORTER_H__
+/** \file MeshImporter.h
+ *  \ingroup collada
+ */
+
+#ifndef __MESHIMPORTER_H__
+#define __MESHIMPORTER_H__
 
 #include <map>
 #include <vector>
@@ -65,13 +67,15 @@ public:
        void print();
 #endif
 
-       void getUV(int uv_index[2], float *uv);
+       void getUV(int uv_index, float *uv);
 };
 
 class MeshImporter : public MeshImporterBase
 {
 private:
 
+       UnitConverter *unitconverter;
+
        Scene *scene;
        ArmatureImporter *armature_importer;
 
@@ -85,6 +89,7 @@ private:
        };
        typedef std::map<COLLADAFW::MaterialId, std::vector<Primitive> > MaterialIdPrimitiveArrayMap;
        std::map<COLLADAFW::UniqueId, MaterialIdPrimitiveArrayMap> geom_uid_mat_mapping_map; // crazy name!
+       std::multimap<COLLADAFW::UniqueId, COLLADAFW::UniqueId> materials_mapped_to_geom; //< materials that have already been mapped to a geometry. A pair of geom uid and mat uid, one geometry can have several materials
        
 
        void set_face_indices(MFace *mface, unsigned int *indices, bool quad);
@@ -116,13 +121,15 @@ private:
        // TODO: import uv set names
        void read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris);
 
-       void get_vector(float v[3], COLLADAFW::MeshVertexData& arr, int i);
+       void get_vector(float v[3], COLLADAFW::MeshVertexData& arr, int i, int stride);
 
        bool flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, int count);
-
+       
 public:
 
-       MeshImporter(ArmatureImporter *arm, Scene *sce);
+       MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
+
+       void bmeshConversion();
 
        virtual Object *get_object_by_geom_uid(const COLLADAFW::UniqueId& geom_uid);
        
@@ -134,7 +141,7 @@ public:
                                                                        std::map<COLLADAFW::UniqueId, Material*>& uid_material_map,
                                                                        Object *ob, const COLLADAFW::UniqueId *geom_uid, 
                                                                        MTex **color_texture, char *layername, MTFace *texture_face,
-                                                                       std::map<Material*, TexIndexTextureArrayMap>& material_texture_mapping_map, int mat_index);
+                                                                       std::map<Material*, TexIndexTextureArrayMap>& material_texture_mapping_map, short mat_index);
        
        
        Object *create_mesh_object(COLLADAFW::Node *node, COLLADAFW::InstanceGeometry *geom,