Browse Source

More compatibility fixes

rdb 12 years ago
parent
commit
7ac7adcce4

+ 10 - 1
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);

+ 20 - 30
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;
-
-  // Add ourselves to our parent.
-  if (_parent != (MaxNodeDesc *)NULL) {
-    _parent->_children.push_back(this);
+MaxNodeDesc(MaxNodeDesc *parent, INode *max_node) :
+  _parent(parent) {
+
+  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) {

+ 2 - 3
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();

+ 19 - 22
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;
 }

+ 1 - 1
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);

+ 6 - 5
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);
 

+ 1 - 1
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,