From d4f5097fbd0b46591dd265042edd0095c2b39f6d Mon Sep 17 00:00:00 2001 From: "Asad M. Zaman" Date: Mon, 12 Dec 2005 19:39:09 +0000 Subject: [PATCH] fixed a crash bug regarding uvLink --- pandatool/src/mayaegg/mayaToEggConverter.cxx | 128 +++++++++++-------- pandatool/src/mayaegg/mayaToEggConverter.h | 2 + 2 files changed, 76 insertions(+), 54 deletions(-) diff --git a/pandatool/src/mayaegg/mayaToEggConverter.cxx b/pandatool/src/mayaegg/mayaToEggConverter.cxx index b90a40361e..be5b60278c 100644 --- a/pandatool/src/mayaegg/mayaToEggConverter.cxx +++ b/pandatool/src/mayaegg/mayaToEggConverter.cxx @@ -1576,6 +1576,78 @@ make_nurbs_curve(const MDagPath &, const MFnNurbsCurve &curve, } } +//////////////////////////////////////////////////////////////////// +// Function: MayaShader::find_uv_link +// Access: Private +// Description: given the texture name, find corresponding uvLink +//////////////////////////////////////////////////////////////////// +string MayaToEggConverter:: +find_uv_link(string match) { + // find the index of this string in the _tex_names + int idx = 0; + vector_string::iterator vi; + mayaegg_cat.spam() << "ful: looking for " << match << endl; + for (vi = _tex_names.begin(); vi != _tex_names.end(); ++vi, ++idx) { + mayaegg_cat.spam() << "ful:" << idx << ":stored_name is " << vi->c_str() << endl; + if (vi->find(match) != string::npos) { + return _uvset_names[idx]; + } + } + mayaegg_cat.spam() << "ful: did not find " << match << endl; + return "not found"; +} + +//////////////////////////////////////////////////////////////////// +// Function: MayaToEggConverter::store_tex_names +// Access: Private +// Description: check the uvsets and see what texture these are +// connected to. set_shader_attribute will use this +// information to write eggTexture +//////////////////////////////////////////////////////////////////// +void MayaToEggConverter:: +make_tex_names(const MFnMesh &mesh, const MObject &mesh_object) { + + // test the connection editor to gather the uvLink to the texture name + MFnDependencyNode dn(mesh_object); + MStringArray mresult; + MPlugArray pla; + + _tex_names.clear(); + dn.getConnections(pla); + mayaegg_cat.spam() << "number of connections: " << pla.length() << endl; + string uv1("uvLink -query -uvSet "); + uv1.append(mesh.name().asChar()); + uv1.append(".uvSet[0].uvSetName"); + MGlobal::executeCommand(MString(uv1.c_str()), mresult); + string tcat; + for (size_t k=0; kfind(match) != string::npos) { - return _uvset_names[idx]; - } - } - return "error"; -} - //////////////////////////////////////////////////////////////////// // Function: MayaShader::set_shader_attributes // Access: Private diff --git a/pandatool/src/mayaegg/mayaToEggConverter.h b/pandatool/src/mayaegg/mayaToEggConverter.h index c37a1c9a54..2afd0424c4 100644 --- a/pandatool/src/mayaegg/mayaToEggConverter.h +++ b/pandatool/src/mayaegg/mayaToEggConverter.h @@ -117,6 +117,8 @@ private: // I ran into core dumps trying to pass around a MFnMesh object by // value. From now on, all MFn* objects will be passed around by // reference. + void make_tex_names(const MFnMesh &mesh, const MObject &mesh_object); + void make_nurbs_surface(MayaNodeDesc *node_desc, const MDagPath &dag_path, MFnNurbsSurface &surface,