/* ================ idAASCluster::Build ================ */ bool idAASCluster::Build( idAASFileLocal *file ) { common->Printf( "[Clustering]\n" ); this->file = file; this->noFaceFlood = true; RemoveInvalidPortals(); while( 1 ) { // delete all existing clusters file->DeleteClusters(); // create the portals from the portal areas CreatePortals(); common->Printf( "\r%6d", file->portals.Num() ); // find the clusters if( !FindClusters() ) { continue; } // test the portals if( !TestPortals() ) { continue; } break; } common->Printf( "\r%6d portals\n", file->portals.Num() ); common->Printf( "%6d clusters\n", file->clusters.Num() ); for( int i = 0; i < file->clusters.Num(); i++ ) { common->Printf( "%6d reachable areas in cluster %d\n", file->clusters[i].numReachableAreas, i ); } file->ReportRoutingEfficiency(); return true; }
ClusterData* ClusterHelper::Update(){ std::vector<Point*>* reducedPoints = ReducePoints(localcpy); if (AreEnoughPointsForClustering((int)reducedPoints->size())) { FindClusters(reducedPoints); AssignAllPoints(localcpy); } else { if (value) { delete value; } value = new ClusterData(); } return value; }