void SceneTree::replaceSubTree( const NodeWeakPtr &node, ObjectTreeIndex objectIndex ) { ObjectTreeIndex objectParent = m_objectTree[objectIndex].m_parentIndex; DP_ASSERT( objectParent != ~0 ); // search left ObjectTree sibling TransformTreeIndex leftSiblingTransformIndex = ~0; TransformTreeIndex parentTransformIndex = m_objectTree[objectParent].m_transformIndex; ObjectTreeIndex objectLeftSibling = ~0; ObjectTreeIndex currentIndex = m_objectTree[objectParent].m_firstChild; while ( currentIndex != objectIndex ) { if( m_objectTree[currentIndex].m_transformIndex != parentTransformIndex ) { leftSiblingTransformIndex = m_objectTree[currentIndex].m_transformIndex; } objectLeftSibling = currentIndex; currentIndex = m_objectTree[currentIndex].m_nextSibling; } // remove group in both trees removeObjectTreeIndex( objectIndex ); // add group back to tree addSubTree( node, objectParent, objectLeftSibling, parentTransformIndex, leftSiblingTransformIndex ); }
void SceneTree::replaceSubTree( NodeSharedPtr const& node, ObjectTreeIndex objectIndex ) { ObjectTreeIndex objectParent = m_objectTree[objectIndex].m_parentIndex; DP_ASSERT( objectParent != ~0 ); // search left ObjectTree sibling ObjectTreeIndex objectLeftSibling = ~0; ObjectTreeIndex currentIndex = m_objectTree[objectParent].m_firstChild; while ( currentIndex != objectIndex ) { objectLeftSibling = currentIndex; currentIndex = m_objectTree[currentIndex].m_nextSibling; } // remove group in both trees removeObjectTreeIndex( objectIndex ); // add group back to tree addSubTree( node, objectParent, objectLeftSibling); }