[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49924] trunk/blender/source/blender/ collada: Collada: fixed export when 'active UV Layer only' was selected
Gaia Clary
gaia.clary at machinimatrix.org
Thu Aug 16 00:08:22 CEST 2012
Revision: 49924
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49924
Author: gaiaclary
Date: 2012-08-15 22:08:22 +0000 (Wed, 15 Aug 2012)
Log Message:
-----------
Collada: fixed export when 'active UV Layer only' was selected
Modified Paths:
--------------
trunk/blender/source/blender/collada/EffectExporter.cpp
trunk/blender/source/blender/collada/GeometryExporter.cpp
trunk/blender/source/blender/collada/ImageExporter.cpp
trunk/blender/source/blender/collada/InstanceWriter.cpp
Modified: trunk/blender/source/blender/collada/EffectExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/EffectExporter.cpp 2012-08-15 21:58:20 UTC (rev 49923)
+++ trunk/blender/source/blender/collada/EffectExporter.cpp 2012-08-15 22:08:22 UTC (rev 49924)
@@ -313,42 +313,48 @@
std::set<Image *> uv_textures;
if (ob->type == OB_MESH && ob->totcol && this->export_settings->include_uv_textures) {
+ bool active_uv_only = this->export_settings->active_uv_only;
Mesh *me = (Mesh *) ob->data;
+ int 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 (me->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- MFace *mface = me->mface;
- for (int j = 0; j < me->totpoly; j++, mface++, txface++) {
+ if (!active_uv_only || active_uv_layer == i)
+ {
+ if (me->pdata.layers[i].type == CD_MTEXPOLY) {
+ MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
+ MFace *mface = me->mface;
+ for (int j = 0; j < me->totpoly; j++, mface++, txface++) {
- Material *mat = give_current_material(ob, mface->mat_nr + 1);
- if (mat != ma)
- continue;
+ Material *mat = give_current_material(ob, mface->mat_nr + 1);
+ if (mat != ma)
+ continue;
- Image *ima = txface->tpage;
- if (ima == NULL)
- 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);
+ 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][0] = &samplers[a];
- im_samp_map[key] = b;
- b++;
- a++;
- uv_textures.insert(ima);
+ // 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][0] = &samplers[a];
+ im_samp_map[key] = b;
+ b++;
+ a++;
+ uv_textures.insert(ima);
+ }
}
}
}
Modified: trunk/blender/source/blender/collada/GeometryExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/GeometryExporter.cpp 2012-08-15 21:58:20 UTC (rev 49923)
+++ trunk/blender/source/blender/collada/GeometryExporter.cpp 2012-08-15 22:08:22 UTC (rev 49924)
@@ -279,15 +279,18 @@
// if mesh has uv coords writes <input> for TEXCOORD
int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
+ int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE)-1;
+ for (i = 0; i < num_layers; i++) {
+ if (!this->export_settings->active_uv_only || i == active_uv_index) {
- for (i = 0; i < num_layers; i++) {
- // char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
- COLLADASW::Input input3(COLLADASW::InputSemantic::TEXCOORD,
- makeUrl(makeTexcoordSourceId(geom_id, i)),
- 2, // offset always 2, this is only until we have optimized UV sets
- i // set number equals UV map index
- );
- til.push_back(input3);
+ // char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
+ COLLADASW::Input input3(COLLADASW::InputSemantic::TEXCOORD,
+ makeUrl(makeTexcoordSourceId(geom_id, i)),
+ 2, // offset always 2, this is only until we have optimized UV sets
+ i // set number equals UV map index
+ );
+ til.push_back(input3);
+ }
}
if (has_color) {
Modified: trunk/blender/source/blender/collada/ImageExporter.cpp
===================================================================
--- trunk/blender/source/blender/collada/ImageExporter.cpp 2012-08-15 21:58:20 UTC (rev 49923)
+++ trunk/blender/source/blender/collada/ImageExporter.cpp 2012-08-15 22:08:22 UTC (rev 49924)
@@ -151,25 +151,31 @@
{
std::set<Image *> uv_textures;
LinkNode *node;
- bool use_copies = this->export_settings->use_texture_copies;
+ bool use_texture_copies = this->export_settings->use_texture_copies;
+ bool active_uv_only = this->export_settings->active_uv_only;
+
for (node = this->export_settings->export_set; node; node = node->next) {
Object *ob = (Object *)node->link;
if (ob->type == OB_MESH && ob->totcol) {
Mesh *me = (Mesh *) ob->data;
BKE_mesh_tessface_ensure(me);
+ int active_uv_layer = CustomData_get_active_layer_index(&me->pdata, CD_MTEXPOLY);
for (int i = 0; i < me->pdata.totlayer; i++) {
if (me->pdata.layers[i].type == CD_MTEXPOLY) {
- MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
- for (int j = 0; j < me->totpoly; j++, txface++) {
+ if (!active_uv_only || active_uv_layer == i)
+ {
+ MTexPoly *txface = (MTexPoly *)me->pdata.layers[i].data;
+ for (int j = 0; j < me->totpoly; j++, txface++) {
- Image *ima = txface->tpage;
- if (ima == NULL)
- continue;
+ Image *ima = txface->tpage;
+ if (ima == NULL)
+ continue;
- bool not_in_list = uv_textures.find(ima) == uv_textures.end();
- if (not_in_list) {
- uv_textures.insert(ima);
- export_UV_Image(ima, use_copies);
+ bool not_in_list = uv_textures.find(ima) == uv_textures.end();
+ if (not_in_list) {
+ uv_textures.insert(ima);
+ export_UV_Image(ima, use_texture_copies);
+ }
}
}
}
Modified: trunk/blender/source/blender/collada/InstanceWriter.cpp
===================================================================
--- trunk/blender/source/blender/collada/InstanceWriter.cpp 2012-08-15 21:58:20 UTC (rev 49923)
+++ trunk/blender/source/blender/collada/InstanceWriter.cpp 2012-08-15 22:08:22 UTC (rev 49924)
@@ -63,7 +63,7 @@
int active_uv_index = CustomData_get_active_layer_index(&me->fdata, CD_MTFACE) -1;
for (int b = 0; b < totlayer; b++) {
if (!active_uv_only || b == active_uv_index) {
- char *name = bc_CustomData_get_layer_name(&me->fdata, CD_MTFACE, map_index);
+ char *name = bc_CustomData_get_layer_name(&me->fdata, CD_MTFACE, b);
im.push_back(COLLADASW::BindVertexInput(name, "TEXCOORD", map_index++));
}
}
More information about the Bf-blender-cvs
mailing list