[Bf-blender-cvs] [1c053c6a12d] master: Collada: Exporter now only exports either 'Materials' or 'UV Textures as Materials'. This makes the user interface more streight

Gaia Clary noreply at git.blender.org
Sun Jun 25 22:07:02 CEST 2017


Commit: 1c053c6a12d53e7e445692daa981f7c9b92ce6ee
Author: Gaia Clary
Date:   Sun Jun 25 22:06:04 2017 +0200
Branches: master
https://developer.blender.org/rB1c053c6a12d53e7e445692daa981f7c9b92ce6ee

Collada: Exporter now only exports either 'Materials' or 'UV Textures as Materials'. This makes the user interface more streight

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

M	source/blender/collada/EffectExporter.cpp
M	source/blender/collada/GeometryExporter.cpp
M	source/blender/collada/ImageExporter.cpp
M	source/blender/collada/InstanceWriter.cpp
M	source/blender/collada/MaterialExporter.cpp
M	source/blender/collada/collada.h
M	source/blender/editors/io/io_collada.c

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

diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index e0c81cfc54b..55dc936939c 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -84,7 +84,7 @@ void EffectsExporter::exportEffects(Scene *sce)
 				closeLibrary();
 		}
 	}
-	else if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV) {
+	else {
 		std::set<Object *> uv_textured_obs = bc_getUVTexturedObjects(sce, !this->export_settings->active_uv_only);
 		std::set<Image *> uv_images = bc_getUVImages(sce, !this->export_settings->active_uv_only);
 		if (uv_images.size() > 0) {
@@ -212,8 +212,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
 {
 	// create a list of indices to textures of type TEX_IMAGE
 	std::vector<int> tex_indices;
-	if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT)
-		createTextureIndices(ma, tex_indices);
+	createTextureIndices(ma, tex_indices);
 
 	openEffect(translate_id(id_name(ma)) + "-effect");
 	
@@ -347,58 +346,6 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
 		}
 	}
 
-	int active_uv_layer = -1;
-	std::set<Image *> uv_textures;
-	if (ob->type == OB_MESH && ob->totcol && this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV) {
-		bool active_uv_only = this->export_settings->active_uv_only;
-		Mesh *me     = (Mesh *) ob->data;
-		active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
-
-		BKE_mesh_tessface_ensure(me);
-		for (int i = 0; i < me->pdata.totlayer; i++) {
-			if (!active_uv_only || active_uv_layer == i)
-			{
-				if (me->pdata.layers[i].type == CD_MTEXPOLY) {
-					MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
-					MPoly *mpoly = me->mpoly;
-					for (int j = 0; j < me->totpoly; j++, mpoly++, txface++) {
-
-						Material *mat = give_current_material(ob, mpoly->mat_nr + 1);
-						if (mat != ma) 
-							continue;
-
-						Image *ima = txface->tpage;
-						if (ima == NULL)
-							continue;
-
-
-						bool not_in_list = uv_textures.find(ima)==uv_textures.end();
-						if (not_in_list) {
-							std::string name = id_name(ima);
-							std::string key(name);
-							key = translate_id(key);
-
-							// create only one <sampler>/<surface> pair for each unique image
-							if (im_samp_map.find(key) == im_samp_map.end()) {
-								//<newparam> <sampler> <source>
-								COLLADASW::Sampler sampler(COLLADASW::Sampler::SAMPLER_TYPE_2D,
-														   key + COLLADASW::Sampler::SAMPLER_SID_SUFFIX,
-														   key + COLLADASW::Sampler::SURFACE_SID_SUFFIX);
-								sampler.setImageId(key);
-								samplers[a] = sampler;
-								samp_surf[b] = &samplers[a];
-								im_samp_map[key] = b;
-								b++;
-								a++;
-								uv_textures.insert(ima);
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-
 	// used as fallback when MTex->uvname is "" (this is pretty common)
 	// it is indeed the correct value to use in that case
 	std::string active_uv(bc_get_active_uvlayer_name(ob));
@@ -421,21 +368,6 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
 		writeTextures(ep, key, sampler, t, ima, uvname);
 	}
 
-	if (active_uv_layer > -1) {
-		// Export only UV textures assigned to active UV Layer (sounds reasonable, but is that correct?)
-		std::set<Image *>::iterator uv_t_iter;
-
-		for (uv_t_iter = uv_textures.begin(); uv_t_iter != uv_textures.end(); uv_t_iter++) {
-			Image *ima = *uv_t_iter;
-			std::string key(id_name(ima));
-			key = translate_id(key);
-			int i = im_samp_map[key];
-			COLLADASW::Sampler *sampler = (COLLADASW::Sampler *)samp_surf[i];
-			ep.setDiffuse(createTexture(ima, active_uv, sampler), false, "diffuse");
-			ep.setShaderType(COLLADASW::EffectProfile::PHONG);
-		}
-	}
-
 	// performs the actual writing
 	ep.addProfileElements();
 	bool twoSided = false;
diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp
index 3514f31b881..b8b1ff7fd95 100644
--- a/source/blender/collada/GeometryExporter.cpp
+++ b/source/blender/collada/GeometryExporter.cpp
@@ -135,23 +135,23 @@ void GeometryExporter::operator()(Object *ob)
 	// Only create Polylists if number of faces > 0
 	if (me->totface > 0) {
 		// XXX slow
-		if (ob->totcol && this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT) {
-			for (int a = 0; a < ob->totcol; a++) {
-				createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
-			}
-		}
-		else {
-			std::set<Image *> uv_images = bc_getUVImages(ob, !this->export_settings->active_uv_only);
-			if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV && uv_images.size() > 0) {
-				bool all_uv_layers = !this->export_settings->active_uv_only;
-				std::set<Image *> uv_images = bc_getUVImages(ob, all_uv_layers);
-				createPolylists(uv_images, has_uvs, has_color, ob, me, geom_id, norind);
+		std::set<Image *> uv_images = bc_getUVImages(ob, !this->export_settings->active_uv_only);
+		if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT || uv_images.size() == 0) {
+			if (ob->totcol) {
+				for (int a = 0; a < ob->totcol; a++) {
+					createPolylist(a, has_uvs, has_color, ob, me, geom_id, norind);
+				}
 			}
 			else {
 				int i = 0;
 				createPolylist(i, has_uvs, has_color, ob, me, geom_id, norind);
 			}
 		}
+		else {
+			bool all_uv_layers = !this->export_settings->active_uv_only;
+			std::set<Image *> uv_images = bc_getUVImages(ob, all_uv_layers);
+			createPolylists(uv_images, has_uvs, has_color, ob, me, geom_id, norind);
+		}
 	}
 	
 	closeMesh();
diff --git a/source/blender/collada/ImageExporter.cpp b/source/blender/collada/ImageExporter.cpp
index c982ca6e843..93be7de6236 100644
--- a/source/blender/collada/ImageExporter.cpp
+++ b/source/blender/collada/ImageExporter.cpp
@@ -242,7 +242,7 @@ void ImagesExporter::exportImages(Scene *sce)
 	if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_MAT) {
 		mf.forEachMaterialInExportSet<ImagesExporter>(sce, *this, this->export_settings->export_set);
 	}
-	else if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV) {
+	else {
 		export_UV_Images();
 	}
 
diff --git a/source/blender/collada/InstanceWriter.cpp b/source/blender/collada/InstanceWriter.cpp
index 776d9750175..de1a4075462 100644
--- a/source/blender/collada/InstanceWriter.cpp
+++ b/source/blender/collada/InstanceWriter.cpp
@@ -77,7 +77,7 @@ void InstanceWriter::add_material_bindings(COLLADASW::BindMaterial& bind_materia
 		}
 	}
 
-	else if (export_texture_type == BC_TEXTURE_TYPE_MAT) {
+	else {
 		for (int a = 0; a < ob->totcol; a++) {
 			Material *ma = give_current_material(ob, a + 1);
 			if (ma) {
diff --git a/source/blender/collada/MaterialExporter.cpp b/source/blender/collada/MaterialExporter.cpp
index 94e9b7661e4..6e6cc24be20 100644
--- a/source/blender/collada/MaterialExporter.cpp
+++ b/source/blender/collada/MaterialExporter.cpp
@@ -50,8 +50,7 @@ void MaterialsExporter::exportMaterials(Scene *sce)
 		}
 	}
 
-	else if (this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV)
-	{
+	else {
 		std::set<Image *> uv_images = bc_getUVImages(sce, !this->export_settings->active_uv_only);
 		if (uv_images.size() > 0) {
 			openLibrary();
diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h
index 99c749421a4..d31f5a8ba62 100644
--- a/source/blender/collada/collada.h
+++ b/source/blender/collada/collada.h
@@ -47,9 +47,8 @@ typedef enum BC_export_transformation_type {
 } BC_export_transformation_type;
 
 typedef enum BC_export_texture_type {
-	BC_TEXTURE_TYPE_NONE,
-	BC_TEXTURE_TYPE_UV,
-	BC_TEXTURE_TYPE_MAT
+	BC_TEXTURE_TYPE_MAT,
+	BC_TEXTURE_TYPE_UV
 } BC_export_texture_type;
 
 struct bContext;
diff --git a/source/blender/editors/io/io_collada.c b/source/blender/editors/io/io_collada.c
index c065c8d78c8..cead08afd61 100644
--- a/source/blender/editors/io/io_collada.c
+++ b/source/blender/editors/io/io_collada.c
@@ -321,9 +321,8 @@ void WM_OT_collada_export(wmOperatorType *ot)
 	};
 
 	static EnumPropertyItem prop_bc_export_texture_type[] = {
-		{ BC_TEXTURE_TYPE_NONE, "none", 0, "No Textures", "Do not export any image based Textures" },
-		{ BC_TEXTURE_TYPE_UV, "uv", 0, "UV Textures", "Export UV Textures (Face textures)" },
-		{ BC_TEXTURE_TYPE_MAT, "mat", 0, "Material Textures", "Export Material Textures" },
+		{ BC_TEXTURE_TYPE_MAT, "mat", 0, "Materials", "Export Materials" },
+		{ BC_TEXTURE_TYPE_UV, "uv", 0, "UV Textures", "Export UV Textures (Face textures) as materials" },
 		{ 0, NULL, 0, NULL, NULL }
 	};




More information about the Bf-blender-cvs mailing list