NodeTransitPtr deepCloneTree(const OSG::Node                *rootNode,
                             const std::vector<std::string> &shareTypeNames,
                             const std::vector<std::string> &ignoreTypeNames,
                             const std::vector<std::string> &shareGroupNames,
                             const std::vector<std::string> &ignoreGroupNames)
{
    std::vector<const ReflexiveContainerType *> shareTypes;
    std::vector<const ReflexiveContainerType *> ignoreTypes;
    std::vector<UInt16>                         shareGroupIds;
    std::vector<UInt16>                         ignoreGroupIds;

    appendTypesVector (shareTypeNames,   shareTypes    );
    appendTypesVector (ignoreTypeNames,  ignoreTypes   );
    appendGroupsVector(shareGroupNames,  shareGroupIds );
    appendGroupsVector(ignoreGroupNames, ignoreGroupIds);

    return deepCloneTree(rootNode, shareTypes,    ignoreTypes,
                                   shareGroupIds, ignoreGroupIds);
}
FieldContainerTransitPtr deepClone(
          FieldContainer const      *src,
    const std::vector<std::string>  &shareTypeNames,
    const std::vector<std::string>  &ignoreTypeNames,
    const std::vector<std::string>  &shareGroupNames,
    const std::vector<std::string>  &ignoreGroupNames)
{
    std::vector<const ReflexiveContainerType *> shareTypes;
    std::vector<const ReflexiveContainerType *> ignoreTypes;
    std::vector<UInt16>                         shareGroupIds;
    std::vector<UInt16>                         ignoreGroupIds;

    appendTypesVector (shareTypeNames,   shareTypes    );
    appendTypesVector (ignoreTypeNames,  ignoreTypes   );
    appendGroupsVector(shareGroupNames,  shareGroupIds );
    appendGroupsVector(ignoreGroupNames, ignoreGroupIds);

    return deepClone(src, shareTypes,    ignoreTypes,
                          shareGroupIds, ignoreGroupIds);
}
void deepCloneAttachments(
          OSG::AttachmentContainer const  *src,
          OSG::AttachmentContainer        *dst,
    const std::vector<std::string>        &shareTypeNames,
    const std::vector<std::string>        &ignoreTypeNames,
    const std::vector<std::string>        &shareGroupNames,
    const std::vector<std::string>        &ignoreGroupNames)
{
    std::vector<const ReflexiveContainerType *> shareTypes;
    std::vector<const ReflexiveContainerType *> ignoreTypes;
    std::vector<UInt16>                         shareGroupIds;
    std::vector<UInt16>                         ignoreGroupIds;

    appendTypesVector (shareTypeNames,   shareTypes    );
    appendTypesVector (ignoreTypeNames,  ignoreTypes   );
    appendGroupsVector(shareGroupNames,  shareGroupIds );
    appendGroupsVector(ignoreGroupNames, ignoreGroupIds);

    deepCloneAttachments(src, dst, shareTypes,    ignoreTypes,
                                   shareGroupIds, ignoreGroupIds);
}