Exemple #1
0
      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 );
      }
Exemple #2
0
      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);
      }