Ignore:
Timestamp:
07/12/06 01:30:05 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/VspOspTree.cpp

    r1121 r1122  
    28262826        SplitObjects(splitPlane, leaf->mObjects, front->mObjects, back->mObjects); 
    28272827 
    2828         ProcessLeafObjects(back, leaf); 
    2829     ProcessLeafObjects(front, leaf); 
    2830    
     2828        ProcessLeafObjects(leaf, front, back); 
     2829     
    28312830        backData.mNode = back; 
    28322831        frontData.mNode = front; 
     
    34083407 
    34093408 
    3410 void OspTree::ProcessLeafObjects(KdLeaf *leaf, KdLeaf *parent) const 
    3411 { 
    3412         ObjectContainer::const_iterator oit, oit_end = leaf->mObjects.end(); 
    3413  
    3414         for (oit = leaf->mObjects.begin(); oit != oit_end; ++ oit) 
    3415         { 
    3416                 Intersectable *object = *oit; 
    3417  
    3418                 if (parent) 
    3419                 { 
     3409void OspTree::ProcessLeafObjects(KdLeaf *parent, KdLeaf *front, KdLeaf *back) const 
     3410{ 
     3411        if (parent) 
     3412        { 
     3413                // remove the parents from the set 
     3414                ObjectContainer::const_iterator oit, oit_end = parent->mObjects.end(); 
     3415 
     3416                for (oit = parent->mObjects.begin(); oit != oit_end; ++ oit) 
     3417                { 
     3418                        Intersectable *object = *oit; 
     3419 
    34203420                        set<KdLeaf *>::iterator kdit = object->mKdLeaves.find(parent); 
    34213421 
     
    34243424                                object->mKdLeaves.erase(kdit); 
    34253425                } 
    3426  
    3427                 object->mKdLeaves.insert(leaf); 
    3428  
    3429                 if (object->mKdLeaves.size() > 1) 
    3430                         leaf->mMultipleObjects.push_back(object); 
    3431         } 
     3426        } 
     3427 
     3428        //Intersectable::NewMail(); 
     3429 
     3430        if (front) 
     3431        { 
     3432                // Add front to leaf kd cells 
     3433                ObjectContainer::const_iterator oit, oit_end = front->mObjects.end(); 
     3434 
     3435                for (oit = front->mObjects.begin(); oit != oit_end; ++ oit) 
     3436                { 
     3437                        Intersectable *object = *oit; 
     3438                        object->mKdLeaves.insert(front); 
     3439                } 
     3440        } 
     3441 
     3442        if (back) 
     3443        { 
     3444                // Add back to leaf kd cells 
     3445                ObjectContainer::const_iterator oit, oit_end = back->mObjects.end(); 
     3446 
     3447                for (oit = back->mObjects.begin(); oit != oit_end; ++ oit) 
     3448                { 
     3449                        Intersectable *object = *oit; 
     3450                        object->mKdLeaves.insert(back);  
     3451                } 
     3452        } 
     3453 
     3454        // note: can find out about multiple objects only now after adding and deleting 
     3455        // finished  
     3456        if (front) 
     3457        { 
     3458                // find objects from multiple kd-leaves 
     3459                ObjectContainer::const_iterator oit, oit_end = front->mObjects.end(); 
     3460 
     3461                for (oit = front->mObjects.begin(); oit != oit_end; ++ oit) 
     3462                { 
     3463                        Intersectable *object = *oit; 
     3464 
     3465                        if (object->mKdLeaves.size() > 1) 
     3466                                front->mMultipleObjects.push_back(object); 
     3467                } 
     3468        } 
     3469 
     3470        if (back)  
     3471        { 
     3472                // find objects from multiple kd-leaves 
     3473                ObjectContainer::const_iterator oit, oit_end = back->mObjects.end(); 
     3474 
     3475                for (oit = back->mObjects.begin(); oit != oit_end; ++ oit) 
     3476                { 
     3477                        Intersectable *object = *oit; 
     3478 
     3479                        if (object->mKdLeaves.size() > 1) 
     3480                                back->mMultipleObjects.push_back(object); 
     3481                } 
     3482        } 
     3483         
    34323484} 
    34333485 
     
    37023754 
    37033755                 
    3704         mOspTree.ProcessLeafObjects(kdleaf, NULL); 
     3756        mOspTree.ProcessLeafObjects(NULL, kdleaf, NULL); 
    37053757 
    37063758        // compute first split candidate 
Note: See TracChangeset for help on using the changeset viewer.