diff --git a/pandatool/src/softegg/softNodeDesc.cxx b/pandatool/src/softegg/softNodeDesc.cxx index 4ce747235b..9c57db5044 100755 --- a/pandatool/src/softegg/softNodeDesc.cxx +++ b/pandatool/src/softegg/softNodeDesc.cxx @@ -83,6 +83,27 @@ set_model(SAA_Elem *model) { _model = model; } +//////////////////////////////////////////////////////////////////// +// Function: SoftNodeDesc::set_parent +// Access: Public +// Description: Sometimes, parent is not known at node creation +// As soon as it is known, set the parent +//////////////////////////////////////////////////////////////////// +void SoftNodeDesc:: +set_parent(SoftNodeDesc *parent) { + if (_parent) { + cout << "expected _parent to be null!?\n"; + if (_parent == parent) + cout << "parent already set\n"; + else { + cout << "current parent " << _parent->get_name() << " new parent " + << parent << endl; + } + return; + } + _parent = parent; +} + //////////////////////////////////////////////////////////////////// // Function: SoftNodeDesc::has_model // Access: Public diff --git a/pandatool/src/softegg/softNodeDesc.h b/pandatool/src/softegg/softNodeDesc.h index 8523b13eb1..ff8f1377ad 100755 --- a/pandatool/src/softegg/softNodeDesc.h +++ b/pandatool/src/softegg/softNodeDesc.h @@ -50,6 +50,7 @@ public: SoftNodeDesc(SoftNodeDesc *parent=NULL, const string &name = string()); ~SoftNodeDesc(); + void set_parent(SoftNodeDesc *parent); void set_model(SAA_Elem *model); bool has_model() const; SAA_Elem *get_model() const; diff --git a/pandatool/src/softegg/softNodeTree.cxx b/pandatool/src/softegg/softNodeTree.cxx index 4dd3049f59..f1d91a87d5 100755 --- a/pandatool/src/softegg/softNodeTree.cxx +++ b/pandatool/src/softegg/softNodeTree.cxx @@ -322,6 +322,8 @@ EggGroup *SoftNodeTree:: get_egg_group(SoftNodeDesc *node_desc) { nassertr(_egg_root != (EggGroupNode *)NULL, NULL); + cout << node_desc->_egg_group << endl; + cout << node_desc->_parent << endl; if (node_desc->_egg_group == (EggGroup *)NULL) { // We need to make a new group node. EggGroup *egg_group; @@ -330,8 +332,15 @@ get_egg_group(SoftNodeDesc *node_desc) { if (node_desc->is_joint()) { egg_group->set_group_type(EggGroup::GT_joint); } - // For now lets add this group to egg_root. - _egg_root->add_child(egg_group); + + if (!node_desc->_parent || node_desc->_parent == _root) { + // The parent is the root. + _egg_root->add_child(egg_group); + } else { + // The parent is another node. + EggGroup *parent_egg_group = get_egg_group(node_desc->_parent); + parent_egg_group->add_child(egg_group); + } #if 0 SoftEggGroupUserData *parent_user_data = NULL; @@ -562,23 +571,30 @@ build_node(SAA_Scene *scene, SAA_Elem *model) { //////////////////////////////////////////////////////////////////// SoftNodeDesc *SoftNodeTree:: r_build_node(SoftNodeDesc *parent_node, const string &name) { + SoftNodeDesc *node_desc; + // If we have already encountered this pathname, return the // corresponding MayaNodeDesc immediately. NodesByName::const_iterator ni = _nodes_by_name.find(name); if (ni != _nodes_by_name.end()) { cout << (*ni).first << endl; - return (*ni).second; + node_desc = (*ni).second; + node_desc->set_parent(parent_node); + return node_desc; } // Otherwise, we have to create it. Do this recursively, so we // create each node along the path. - SoftNodeDesc *node_desc; + /* if (!parent_node) { node_desc = _root; } else { + */ node_desc = new SoftNodeDesc(parent_node, name); + /* } + */ cout << " node name : " << name << endl; _nodes.push_back(node_desc);