void Face::on_nodeinstanciation( BaseQuadtreeNode* p_node ) { if( NULL == m_rootpatch ) { QuadtreeNode<Patch>* root = static_cast<QuadtreeNode<Patch>*>( p_node ); Patch* patch = _DRAWSPACE_NEW_( Patch, Patch( m_planet_diameter / 2.0, m_orientation, ".0", NULL, -1, root ) ); root->SetContent( patch ); dsstring patch_name; patch->GetName( patch_name ); m_patches[patch_name] = p_node; for( size_t i = 0; i < m_inst_handlers.size(); i++ ) { (*( m_inst_handlers[i] ) )( m_orientation, patch ); } } else { QuadtreeNode<Patch>* node = static_cast<QuadtreeNode<Patch>*>( p_node ); QuadtreeNode<Patch>* parent = static_cast<QuadtreeNode<Patch>*>( node->GetParent() ); dsstring parent_name; parent->GetContent()->GetName( parent_name ); dsstring node_name = parent_name + dsstring( "." ); char dstbuf[32]; node_name += dsstring( itoa( node->GetId(), dstbuf, 10 ) ); Patch* patch = _DRAWSPACE_NEW_( Patch, Patch( m_planet_diameter / 2.0, m_orientation, node_name, parent->GetContent(), node->GetId(), node ) ); node->SetContent( patch ); dsstring patch_name; patch->GetName( patch_name ); m_patches[patch_name] = p_node; for( size_t i = 0; i < m_inst_handlers.size(); i++ ) { (*( m_inst_handlers[i] ) )( m_orientation, patch ); } } }
void Face::on_nodedeletion( DrawSpace::Utils::BaseQuadtreeNode* p_node ) { QuadtreeNode<Patch>* node = static_cast<QuadtreeNode<Patch>*>( p_node ); Patch* patch = node->GetContent(); for( size_t i = 0; i < m_del_handlers.size(); i++ ) { (*( m_del_handlers[i] ) )( m_orientation, patch ); } dsstring patch_name; patch->GetName( patch_name ); m_patches.erase( patch_name ); _DRAWSPACE_DELETE_( patch ); }