void SceneGraphTreeModel::removeNode(NodeUnrecPtr nodeToBeRemoved)
{

    NodeRefPtr parent = nodeToBeRemoved->getParent();

    TreePath pathOfNode = createPath(nodeToBeRemoved);
    if(parent!=NULL)
    {
        UInt32 ChildIndex(parent->findChild(nodeToBeRemoved));


        produceTreeNodesWillBeRemoved(pathOfNode.getParentPath(),std::vector<UInt32>(1, ChildIndex),std::vector<boost::any>(1, nodeToBeRemoved));
        parent->subChild(nodeToBeRemoved);
        produceTreeNodesRemoved(pathOfNode.getParentPath(),std::vector<UInt32>(1, ChildIndex),std::vector<boost::any>(1, nodeToBeRemoved));

        if(parent->getNChildren() == 0)
        {
            if(parent->getParent() != NULL)
            {
                std::vector<UInt32> childIndices;
                childIndices.push_back(parent->getParent()->findChild(parent));
                std::vector<boost::any> ChildUserObjects;
                for(UInt32 i(0) ; i< childIndices.size() ; ++i)
                {
                    ChildUserObjects.push_back(boost::any(NodeUnrecPtr(parent->getParent()->getChild(childIndices[i]))));
                }
                produceTreeNodesChanged(createPath(parent->getParent()), childIndices, ChildUserObjects);
            }
        }
    }
}
void DefaultTreeModel::removeNodeFromParent(MutableTreeNodeRefPtr node)
{
    ModelTreeNodeRefPtr Parent = node->getParent();

    std::vector<UInt32> ChildIndicies;
    ChildIndicies.push_back(Parent->getIndex(node));

    std::vector<boost::any> Children;
    Children.push_back(dynamic_pointer_cast<ModelTreeNode>(node));

    produceTreeNodesWillBeRemoved(getPath(boost::any(Parent)), ChildIndicies, Children);
    node->removeFromParent();
    produceTreeNodesRemoved(getPath(boost::any(Parent)), ChildIndicies, Children);
    if(Parent->getChildCount() == 0)
    {
        nodeChanged(Parent);
    }
}