From 7ac7adcce49bbcbf28c319e73d0f93e474ad879f Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 27 Oct 2013 11:19:26 +0000 Subject: [PATCH] More compatibility fixes --- pandatool/src/maxegg/maxEggLoader.cxx | 11 ++++- pandatool/src/maxegg/maxNodeDesc.cxx | 48 +++++++++------------- pandatool/src/maxegg/maxNodeDesc.h | 5 +-- pandatool/src/maxegg/maxNodeTree.cxx | 41 +++++++++--------- pandatool/src/maxegg/maxOptionsDialog.cxx | 2 +- pandatool/src/maxegg/maxToEggConverter.cxx | 11 ++--- pandatool/src/maxegg/maxToEggConverter.h | 2 +- 7 files changed, 58 insertions(+), 62 deletions(-) diff --git a/pandatool/src/maxegg/maxEggLoader.cxx b/pandatool/src/maxegg/maxEggLoader.cxx index 03184b2b88..2c54ca7090 100755 --- a/pandatool/src/maxegg/maxEggLoader.cxx +++ b/pandatool/src/maxegg/maxEggLoader.cxx @@ -289,7 +289,16 @@ void MaxEggJoint::CreateMaxBone(void) _node->SetWireColor(RGB(int(boneColor.x*255.0f), int(boneColor.y*255.0f), int(boneColor.z*255.0f) )); _node->SetBoneNodeOnOff(TRUE, 0); _node->SetRenderable(FALSE); - _node->SetName(TSTR(_egg_joint->get_name().c_str())); + +#ifdef _UNICODE + TCHAR *wname [1024]; + wname[1023] = 0; + mbstowcs(wname, _egg_joint->get_name().c_str(), 1023); + _node->SetName(wname); +#else + _node->SetName(_egg_joint->get_name().c_str()); +#endif + _node->SetObjOffsetRot(ooquat); if (_parent) { _node->Detach(0, 1); diff --git a/pandatool/src/maxegg/maxNodeDesc.cxx b/pandatool/src/maxegg/maxNodeDesc.cxx index 4b82e2cbae..8ce50776b4 100755 --- a/pandatool/src/maxegg/maxNodeDesc.cxx +++ b/pandatool/src/maxegg/maxNodeDesc.cxx @@ -20,36 +20,26 @@ TypeHandle MaxNodeDesc::_type_handle; //////////////////////////////////////////////////////////////////// // Function: MaxNodeDesc::Constructor // Access: Public -// Description: +// Description: Creates a MaxNodeDesc. The name is copied from +// the given max node. Use from_INode to actually +// associate the desc with a given max node. //////////////////////////////////////////////////////////////////// MaxNodeDesc:: -MaxNodeDesc(MaxNodeDesc *parent, const string &name) : - Namable(name), - _parent(parent) -{ - _max_node = (INode *)NULL; - _egg_group = (EggGroup *)NULL; - _egg_table = (EggTable *)NULL; - _anim = (EggXfmSAnim *)NULL; - _joint_type = JT_none; - _joint_entry = NULL; +MaxNodeDesc(MaxNodeDesc *parent, INode *max_node) : + _parent(parent) { - // Add ourselves to our parent. - if (_parent != (MaxNodeDesc *)NULL) { - _parent->_children.push_back(this); + if (max_node != NULL) { + const TCHAR *max_name = max_node->GetName(); +#ifdef _UNICODE + char name_mb [1024]; + name_mb[1023] = 0; + wcstombs(name_mb, max_name, 1023); + set_name(name_mb); +#else + set_name(max_name); +#endif } -} -//////////////////////////////////////////////////////////////////// -// Function: MaxNodeDesc::Constructor -// Access: Public -// Description: This convenience constructor takes a wstring. -//////////////////////////////////////////////////////////////////// -MaxNodeDesc:: -MaxNodeDesc(MaxNodeDesc *parent, const wstring &name) : - Namable(string(name.begin(), name.end())), - _parent(parent) -{ _max_node = (INode *)NULL; _egg_group = (EggGroup *)NULL; _egg_table = (EggTable *)NULL; @@ -66,7 +56,7 @@ MaxNodeDesc(MaxNodeDesc *parent, const wstring &name) : //////////////////////////////////////////////////////////////////// // Function: MaxNodeDesc::Destructor // Access: Public -// Description: +// Description: //////////////////////////////////////////////////////////////////// MaxNodeDesc:: ~MaxNodeDesc() {} @@ -82,8 +72,8 @@ from_INode(INode *max_node) { if (_max_node == (INode *)NULL) { _max_node = max_node; - // This is how I decided to check to see if this max node is a - // joint. It works in all instances I've seen so far, but this + // This is how I decided to check to see if this max node is a + // joint. It works in all instances I've seen so far, but this // may be a good starting place to look if joints are not being // picked up correctly in the future. @@ -96,7 +86,7 @@ from_INode(INode *max_node) { ((c->ClassID() == BIPSLAVE_CONTROL_CLASS_ID) || (c->ClassID() == BIPBODY_CONTROL_CLASS_ID) || (c->ClassID() == FOOTPRINT_CLASS_ID)))) { - + // This node is a joint. _joint_type = JT_node_joint; if (_parent != (MaxNodeDesc *)NULL) { diff --git a/pandatool/src/maxegg/maxNodeDesc.h b/pandatool/src/maxegg/maxNodeDesc.h index 92cc277d35..23ec218a9b 100755 --- a/pandatool/src/maxegg/maxNodeDesc.h +++ b/pandatool/src/maxegg/maxNodeDesc.h @@ -25,8 +25,7 @@ //////////////////////////////////////////////////////////////////// class MaxNodeDesc : public ReferenceCount, public Namable { public: - MaxNodeDesc(MaxNodeDesc *parent = NULL, const string &name = string()); - MaxNodeDesc(MaxNodeDesc *parent = NULL, const wstring &name = wstring()); + MaxNodeDesc(MaxNodeDesc *parent = NULL, INode *max_node = NULL); ~MaxNodeDesc(); void from_INode(INode *max_node); @@ -42,7 +41,7 @@ class MaxNodeDesc : public ReferenceCount, public Namable { MaxNodeDesc *_joint_entry; typedef pvector< MaxNodeDesc* > Children; Children _children; - + private: void clear_egg(); void mark_joint_parent(); diff --git a/pandatool/src/maxegg/maxNodeTree.cxx b/pandatool/src/maxegg/maxNodeTree.cxx index 5dc88d05a4..825ccf9816 100755 --- a/pandatool/src/maxegg/maxNodeTree.cxx +++ b/pandatool/src/maxegg/maxNodeTree.cxx @@ -18,7 +18,7 @@ //////////////////////////////////////////////////////////////////// // Function: MaxNodeTree::Constructor // Access: Public -// Description: +// Description: //////////////////////////////////////////////////////////////////// MaxNodeTree:: MaxNodeTree() { @@ -41,13 +41,15 @@ MaxNodeDesc *MaxNodeTree:: build_node(INode *max_node) { MaxNodeDesc *node_desc = r_build_node(max_node); node_desc->from_INode(max_node); - if (node_desc->is_node_joint()) + + if (node_desc->is_node_joint()) { node_desc->_joint_entry = build_joint(max_node, node_desc); + } return node_desc; } //////////////////////////////////////////////////////////////////// -// Function: MaxNodeTree::build_node +// Function: MaxNodeTree::build_joint // Access: Public // Description: Returns a pointer to the node corresponding to the // indicated INode object, creating it first if @@ -57,7 +59,7 @@ MaxNodeDesc *MaxNodeTree:: build_joint(INode *max_node, MaxNodeDesc *node_joint) { MaxNodeDesc *node_desc = r_build_joint(node_joint, max_node); node_desc->from_INode(max_node); - node_desc->set_joint(true); + node_desc->set_joint(true); return node_desc; } @@ -102,7 +104,7 @@ build_complete_hierarchy(INode *root, ULONG *selection_list, int len) { // *** Log an error return false; } - + bool all_ok = true; r_build_hierarchy(root, selection_list, len); @@ -218,7 +220,7 @@ get_egg_table(MaxNodeDesc *node_desc) { nassertr(node_desc->_parent != (MaxNodeDesc *)NULL, NULL); EggTable *egg_table = new EggTable(node_desc->get_name()); - node_desc->_anim = new EggXfmSAnim("xform", + node_desc->_anim = new EggXfmSAnim("xform", _egg_data->get_coordinate_system()); node_desc->_anim->set_fps(_fps); egg_table->add_child(node_desc->_anim); @@ -247,21 +249,18 @@ get_egg_table(MaxNodeDesc *node_desc) { // has not already been created. //////////////////////////////////////////////////////////////////// EggXfmSAnim *MaxNodeTree:: -get_egg_anim(MaxNodeDesc *node_desc) -{ +get_egg_anim(MaxNodeDesc *node_desc) { get_egg_table(node_desc); return node_desc->_anim; } - //////////////////////////////////////////////////////////////////// // Function: MaxNodeTree::r_build_node // Access: Private // Description: The recursive implementation of build_node(). //////////////////////////////////////////////////////////////////// MaxNodeDesc *MaxNodeTree:: -r_build_node(INode* max_node) -{ +r_build_node(INode* max_node) { // If we have already encountered this pathname, return the // corresponding MaxNodeDesc immediately. @@ -286,7 +285,6 @@ r_build_node(INode* max_node) } else { INode *parent_node; - TSTR local_name = max_node->GetName(); if (max_node->IsRootNode()) { parent_node = NULL; @@ -295,7 +293,7 @@ r_build_node(INode* max_node) } MaxNodeDesc *parent_node_desc = r_build_node(parent_node); - node_desc = new MaxNodeDesc(parent_node_desc, local_name); + node_desc = new MaxNodeDesc(parent_node_desc, max_node); _nodes.push_back(node_desc); } @@ -309,15 +307,15 @@ r_build_node(INode* max_node) // Description: The recursive implementation of build_joint(). //////////////////////////////////////////////////////////////////// MaxNodeDesc *MaxNodeTree:: -r_build_joint(MaxNodeDesc *node_desc, INode *max_node) +r_build_joint(MaxNodeDesc *node_desc, INode *max_node) { MaxNodeDesc *node_joint; if (node_desc == _root) { - node_joint = new MaxNodeDesc(_root, max_node->GetName()); + node_joint = new MaxNodeDesc(_root, max_node); _nodes.push_back(node_joint); return node_joint; } else if (node_desc->is_node_joint() && node_desc->_joint_entry) { - node_joint = new MaxNodeDesc(node_desc->_joint_entry, max_node->GetName()); + node_joint = new MaxNodeDesc(node_desc->_joint_entry, max_node); _nodes.push_back(node_joint); return node_joint; } else { @@ -331,21 +329,20 @@ r_build_joint(MaxNodeDesc *node_desc, INode *max_node) // Description: The recursive implementation of build_node(). //////////////////////////////////////////////////////////////////// MaxNodeDesc *MaxNodeTree:: -find_node(INode* max_node) -{ +find_node(INode* max_node) { // If we have already encountered this pathname, return the // corresponding MaxNodeDesc immediately. - + ULONG node_handle = 0; - + if (max_node) { node_handle = max_node->GetHandle(); - } + } NodesByPath::const_iterator ni = _nodes_by_path.find(node_handle); if (ni != _nodes_by_path.end()) { return (*ni).second; - } + } return NULL; } diff --git a/pandatool/src/maxegg/maxOptionsDialog.cxx b/pandatool/src/maxegg/maxOptionsDialog.cxx index 81f2481a53..c343bcda52 100644 --- a/pandatool/src/maxegg/maxOptionsDialog.cxx +++ b/pandatool/src/maxegg/maxOptionsDialog.cxx @@ -15,7 +15,7 @@ //Disable the forcing int to true or false performance warning #pragma warning(disable: 4800) -void SetICustEdit(HWND wnd, int nIDDlgItem, const TCHAR *text) +void SetICustEdit(HWND wnd, int nIDDlgItem, TCHAR *text) { ICustEdit *edit = GetICustEdit(GetDlgItem(wnd, nIDDlgItem)); edit->SetText(text); diff --git a/pandatool/src/maxegg/maxToEggConverter.cxx b/pandatool/src/maxegg/maxToEggConverter.cxx index 6f010cda45..bcc32aeff3 100755 --- a/pandatool/src/maxegg/maxToEggConverter.cxx +++ b/pandatool/src/maxegg/maxToEggConverter.cxx @@ -370,8 +370,7 @@ process_model_node(MaxNodeDesc *node_desc) { //It's a CV Curve, process it egg_group = _tree.get_egg_group(node_desc); get_transform(max_node, egg_group); - CStr node_name = CStr::FromMSTR(max_node->GetName()); - make_nurbs_curve((NURBSCVCurve *)nObj, node_name, + make_nurbs_curve(max_node, (NURBSCVCurve *)nObj, time, egg_group); } } @@ -578,7 +577,7 @@ get_joint_transform(INode *max_node, INode *parent_node, EggGroup *egg_group) { // structure and attaches it to the indicated egg group. //////////////////////////////////////////////////////////////////// bool MaxToEggConverter:: -make_nurbs_curve(NURBSCVCurve *curve, const string &name, +make_nurbs_curve(INode *max_node, NURBSCVCurve *curve, TimeValue time, EggGroup *egg_group) { int degree = curve->GetOrder(); @@ -590,6 +589,8 @@ make_nurbs_curve(NURBSCVCurve *curve, const string &name, return false; } + string name = max_node->GetName(); + string vpool_name = name + ".cvs"; EggVertexPool *vpool = new EggVertexPool(vpool_name); egg_group->add_child(vpool); @@ -651,8 +652,8 @@ make_polyset(INode *max_node, Mesh *mesh, // all the vertices up front, we'll start with an empty vpool, and // add vertices to it on the fly. - CStr node_name = CStr::FromMSTR(max_node->GetName()); - string vpool_name = string(node_name) + ".verts"; + string node_name = max_node->GetName(); + string vpool_name = node_name + ".verts"; EggVertexPool *vpool = new EggVertexPool(vpool_name); egg_group->add_child(vpool); diff --git a/pandatool/src/maxegg/maxToEggConverter.h b/pandatool/src/maxegg/maxToEggConverter.h index 42af2ab14c..6ecde0c86c 100755 --- a/pandatool/src/maxegg/maxToEggConverter.h +++ b/pandatool/src/maxegg/maxToEggConverter.h @@ -78,7 +78,7 @@ class MaxToEggConverter { void get_joint_transform(INode *max_node, INode *parent_node, EggGroup *egg_group); - bool make_nurbs_curve(NURBSCVCurve *curve, const string &name, + bool make_nurbs_curve(INode *max_node, NURBSCVCurve *curve, TimeValue time, EggGroup *egg_group); void make_polyset(INode *max_node, Mesh *mesh,