Updated the 'library linked data' code to use the render object table as

suggested by Ton.
This commit is contained in:
Alfredo de Greef 2006-06-06 16:56:47 +00:00
parent 8741e7d06d
commit f82ffb2e1e
3 changed files with 33 additions and 8 deletions

@ -1177,10 +1177,24 @@ void yafrayFileRender_t::writeObject(Object* obj, const vector<VlakRen*> &VLR_li
xmlfile << ostr.str();
ostr.str("");
// if objects are externally linked from a library, they could have a name that is already
// defined locally, so to prevent name clashes, prefix name with 'lib'
// using the ObjectRen database, contruct a new name if object has a parent.
// This is done to prevent name clashes (group/library link related)
string obname(obj->id.name);
if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
// previous implementation, keep around, in case this is still useful
//if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
ObjectRen *obren;
for (obren = static_cast<ObjectRen*>(re->objecttable.first);
obren; obren=static_cast<ObjectRen*>(obren->next))
{
Object *db_ob = obren->ob, *db_par = obren->par;
if (db_ob==obj)
if ((db_ob!=NULL) && (db_par!=NULL)) {
obname += "_" + string(db_par->id.name);
break;
}
}
ostr << "<object name=\"" << obname << "\"";
// Yafray still needs default shader name in object def.,
// since we write a shader with every face, simply use the material of the first face.

@ -1352,10 +1352,23 @@ void yafrayPluginRender_t::writeObject(Object* obj, const vector<VlakRen*> &VLR_
genCompleFace(faces, faceshader, uvcoords, vcol, vert_idx, vlr, has_orco, has_uv);
}
// if objects are externally linked from a library, they could have a name that is already
// defined locally, so to prevent name clashes, prefix name with 'lib'
// using the ObjectRen database, contruct a new name if object has a parent.
// This is done to prevent name clashes (group/library link related)
string obname(obj->id.name);
if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
// previous implementation, keep around, in case this is still useful
//if (obj->id.flag & (LIB_EXTERN|LIB_INDIRECT))obname = "lib_" + obname;
ObjectRen *obren;
for (obren = static_cast<ObjectRen*>(re->objecttable.first);
obren; obren=static_cast<ObjectRen*>(obren->next))
{
Object *db_ob = obren->ob, *db_par = obren->par;
if (db_ob==obj)
if ((db_ob!=NULL) && (db_par!=NULL)) {
obname += "_" + string(db_par->id.name);
break;
}
}
yafrayGate->addObject_trimesh(obname, verts, faces, uvcoords, vcol,
shaders, faceshader, sm_angle, castShadows, true, true, caus, has_orco,
caus_rcolor, caus_tcolor, caus_IOR);

@ -68,13 +68,11 @@ bool yafrayRender_t::exportScene(Render* re)
else return true;
}
// gets all unique face materials & textures,
// and sorts the facelist rejecting anything that is not a quad or tri,
// as well as associating them again with the original Object.
bool yafrayRender_t::getAllMatTexObs()
{
VlakRen* vlr;
// Blender does not include object which have total 0 alpha materials,