Fix [#26213] Collada exporter id's not unique

Reported by Kevin Yoon

<material> could get same id as <node>, prevent that by suffixing -material.
This commit is contained in:
Nathan Letwory 2011-02-28 14:24:52 +00:00
parent 9234cb6e30
commit 82b21ba166
4 changed files with 10 additions and 2 deletions

@ -50,7 +50,7 @@ void InstanceWriter::add_material_bindings(COLLADASW::BindMaterial& bind_materia
COLLADASW::InstanceMaterialList& iml = bind_material.getInstanceMaterialList();
if (ma) {
std::string matid(id_name(ma));
std::string matid(get_material_id(ma));
matid = translate_id(matid);
COLLADASW::InstanceMaterial im(matid, COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, matid));

@ -49,7 +49,7 @@ void MaterialsExporter::operator()(Material *ma, Object *ob)
{
std::string name(id_name(ma));
openMaterial(translate_id(name), name);
openMaterial(get_material_id(ma), name);
std::string efid = translate_id(name) + "-effect";
addInstanceEffect(COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, efid));

@ -272,3 +272,8 @@ std::string get_camera_id(Object *ob)
{
return translate_id(id_name(ob)) + "-camera";
}
std::string get_material_id(Material *mat)
{
return translate_id(id_name(mat)) + "-material";
}

@ -37,6 +37,7 @@
#include "Math/COLLADABUMathMatrix4.h"
#include "DNA_armature_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "BLI_math.h"
@ -94,4 +95,6 @@ extern std::string get_joint_id(Bone *bone, Object *ob_arm);
extern std::string get_camera_id(Object *ob);
extern std::string get_material_id(Material *mat);
#endif /* COLLADA_INTERNAL_H */