Changeset 1211 for applications/robust

Show
Ignore:
Timestamp:
10/04/10 15:09:42 (14 years ago)
Author:
sindj
Message:

Dodelavky splitting - nedokonceno. JS

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/robust/robustlib.h

    r1208 r1211  
    5858        vector<polyhedron*> neutralchildren; 
    5959 
     60        vector<polyhedron*> totallyneutralgrandchildren; 
     61 
     62        vector<polyhedron*> totallyneutralchildren; 
     63 
    6064        bool totally_neutral; 
    6165 
     
    261265 
    262266        void send_state_message(polyhedron* sender, bool shouldsplit, bool shouldmerge, int level) 
    263         { 
     267        {                        
     268 
    264269                if(shouldsplit||shouldmerge) 
    265270                { 
     
    332337                                if(shouldsplit) 
    333338                                        { 
     339                                                current_parent->totallyneutralgrandchildren.insert(current_parent->totallyneutralgrandchildren.end(),sender->totallyneutralchildren.begin(),sender->totallyneutralchildren.end()); 
     340 
    334341                                                switch(sender->get_state(SPLIT)) 
    335342                                                { 
     
    348355                                                                current_parent->totally_neutral = current_parent->totally_neutral && sender->totally_neutral; 
    349356                                                        } 
     357 
     358                                                        if(sender->totally_neutral) 
     359                                                        { 
     360                                                                current_parent->totallyneutralchildren.push_back(sender); 
     361                                                        } 
    350362                                                         
    351363                                                break; 
     
    357369                                                if(is_last) 
    358370                                                { 
     371                                                        unique(current_parent->totallyneutralgrandchildren.begin(),current_parent->totallyneutralgrandchildren.end()); 
     372 
    359373                                                        if((current_parent->negativechildren.size()>0&&current_parent->positivechildren.size()>0)|| 
    360374                                                                                                                (current_parent->neutralchildren.size()>0&&current_parent->totally_neutral==false)) 
     
    365379                                                                        current_parent->set_state(0, SPLIT); 
    366380                                                        } 
    367                                                         else if(current_parent->negativechildren.size()>0) 
     381                                                        else 
    368382                                                        { 
    369                                                                 current_parent->set_state(-1, SPLIT); 
    370  
     383                                                                if(current_parent->negativechildren.size()>0) 
     384                                                                { 
     385                                                                        current_parent->set_state(-1, SPLIT); 
     386                                                                } 
     387                                                                else if(current_parent->positivechildren.size()>0) 
     388                                                                { 
     389                                                                current_parent->set_state(1, SPLIT); 
     390                                                                } 
     391                                                                else 
     392                                                                { 
     393                                                                        current_parent->raise_multiplicity();                                                            
     394                                                                } 
     395 
     396                                                                current_parent->positivechildren.clear(); 
    371397                                                                current_parent->negativechildren.clear(); 
    372398                                                                current_parent->neutralchildren.clear(); 
    373                                                                  
    374                                                         } 
    375                                                         else if(current_parent->positivechildren.size()>0) 
    376                                                         { 
    377                                                                 current_parent->set_state(1, SPLIT); 
    378  
    379                                                                 current_parent->positivechildren.clear(); 
    380                                                                 current_parent->neutralchildren.clear(); 
    381                                                         } 
    382                                                         else 
    383                                                         { 
    384                                                                 current_parent->raise_multiplicity(); 
    385  
    386                                                                 current_parent->neutralchildren.clear(); 
     399                                                                current_parent->totallyneutralchildren.clear(); 
     400                                                                current_parent->totallyneutralgrandchildren.clear(); 
     401                                                                current_parent->totally_neutral = NULL;  
    387402                                                        } 
    388403                                                } 
     
    508523                                if(should_add) 
    509524                                { 
    510                                         current_vertex->set_state(toadd*appended_vec,SPLIT); 
     525                                        double local_condition = toadd*appended_vec; 
     526 
     527                                        current_vertex->set_state(local_condition,SPLIT); 
     528 
     529                                        if(local_condition == 0) 
     530                                        { 
     531                                                current_vertex->totally_neutral = true; 
     532 
     533                                                current_vertex->multiplicity++; 
     534                                        }                                        
    511535                                } 
    512536                         
    513537                                if(should_remove) 
    514538                                { 
    515                                         current_vertex->set_state(toremove*current_vertex->get_coordinates(),MERGE); 
    516                                 } 
    517  
    518                                 if(current_vertex->get_state(MERGE) == 0) 
    519                                 { 
    520                                         for_merging[0].push_back(current_vertex); 
    521                                 } 
     539                                        double local_condition = toremove*appended_vec; 
     540 
     541                                        current_vertex->set_state(local_condition,MERGE); 
     542 
     543                                        if(local_condition == 0) 
     544                                        { 
     545                                                for_merging[0].push_back(current_vertex); 
     546                                        } 
     547                                }                                
    522548                        } 
    523549 
     
    533559                                polyhedron* current_polyhedron = (*vert_ref)[original_size-1-split_counter]; 
    534560 
    535  
     561                                 
    536562                        } 
    537563                }