// -------------------------------------------------------- // -------------------------------------------------------- void SMAHeat::Draw(sf::RenderWindow& app) const { sf::Vector2f clusterSize(100.0f, 100.0f); for (auto & cluster : FReachabilityClusters) { sf::RectangleShape rect(clusterSize); rect.setPosition(sf::Vector2f(cluster->MinX() * 10.0f, cluster->MinY() * 10.0f)); rect.setFillColor(sf::Color::Transparent); rect.setOutlineColor(sf::Color::Red); rect.setOutlineThickness(-1.0f); app.draw(rect); cluster->Draw(app); } }
void remove_empty_clusters_l1(CtrlType *ctrl, GraphType *graph, int nparts, idxtype *w, float *tpwgts, float ubfactor){ int *clustersize=imalloc(nparts, "remove_empty_clusters: clusterSize"); int number_of_empty_cluster=0, i, s; for(i=0; i<nparts; i++) clustersize[i] =0; clusterSize(graph, clustersize); for(i=0; i<nparts; i++) if(clustersize[i] ==0) number_of_empty_cluster ++; if(number_of_empty_cluster>0) local_search(ctrl, graph, nparts, 1, w, tpwgts, ubfactor); free(clustersize); }
void remove_empty_clusters_l2(CtrlType *ctrl, GraphType *graph, int nparts, idxtype *w, float *tpwgts, float ubfactor){ int *clustersize=imalloc(nparts, "remove_empty_clusters: clusterSize"); int number_of_empty_cluster=0, i, s, loopend; for(i=0; i<nparts; i++) clustersize[i] =0; clusterSize(graph, clustersize); for(i=0; i<nparts; i++) if(clustersize[i] ==0) number_of_empty_cluster ++; //printf("%d empty clusters; ", number_of_empty_cluster); if(number_of_empty_cluster>0){ int nvtxs, me, j, k, ii; idxtype *sum, *squared_sum, *xadj, *adjncy, *adjwgt, *where, *bndptr, *bndind, *self_sim, nbnd; int **linearTerm; nvtxs = graph->nvtxs; xadj = graph->xadj; adjncy = graph->adjncy; adjwgt = graph->adjwgt; where = graph->where; nbnd = graph->nbnd; bndind = graph->bndind; bndptr = graph->bndptr; if(boundary_points == 1) loopend = nbnd; else loopend = nvtxs; sum = idxsmalloc(nparts,0, "Local_search: weight sum"); squared_sum = idxsmalloc(nparts,0,"Local_search: weight squared sum"); self_sim = idxsmalloc(loopend, 0, "Local_search: self similarity"); linearTerm = i2malloc(loopend, nparts, "Local_search: linear term"); for (i=0; i<nvtxs; i++) sum[where[i]] += w[i]; for (i=0; i<nvtxs; i++){ me = where[i]; for (j=xadj[i]; j<xadj[i+1]; j++) if (where[adjncy[j]] == me) squared_sum[me] += adjwgt[j]; } for (ii = 0; ii<loopend; ii++) for (j = 0; j<nparts; j++) linearTerm[ii][j] = 0; for (ii =0; ii<loopend; ii++){ if (boundary_points == 1) s = bndind[ii]; else s = ii; for (j=xadj[s]; j<xadj[s+1]; j++){ linearTerm[ii][where[adjncy[j]]] += adjwgt[j]; if (adjncy[j] == s) self_sim[ii] = adjwgt[j]; } } for(k=0; k<nparts; k++) if(clustersize[k] ==0){ move1Point2EmptyCluster(graph, nparts, sum, squared_sum, w, self_sim, linearTerm, k); } free(sum); free(squared_sum); free(self_sim); //for (i= 0; i<nvtxs; i++) for (i= 0; i<loopend; i++) free(linearTerm[i]); free(linearTerm); } /* for(i=0; i<nparts; i++) clustersize[i] =0; number_of_empty_cluster=0; clusterSize(graph, clustersize); for(i=0; i<nparts; i++) if(clustersize[i] ==0) number_of_empty_cluster ++; printf("%d empty clusters\n", number_of_empty_cluster); */ free(clustersize); }
void MixerBoard::UpdateTrackClusters() { if (mImageMuteUp == NULL) this->CreateMuteSoloImages(); const int nClusterHeight = mScrolledWindow->GetClientSize().GetHeight() - kDoubleInset; const size_t nClusterCount = mMixerTrackClusters.GetCount(); unsigned int nClusterIndex = 0; TrackListIterator iterTracks(mTracks); MixerTrackCluster* pMixerTrackCluster = NULL; Track* pLeftTrack; Track* pRightTrack; pLeftTrack = iterTracks.First(); while (pLeftTrack) { pRightTrack = pLeftTrack->GetLinked() ? iterTracks.Next() : NULL; if (pLeftTrack->GetKind() == Track::Wave) { if (nClusterIndex < nClusterCount) { // Already showing it. // Track clusters are maintained in the same order as the WaveTracks. // Track pointers can change for the "same" track for different states // on the undo stack, so update the pointers and display name. mMixerTrackClusters[nClusterIndex]->mLeftTrack = (WaveTrack*)pLeftTrack; mMixerTrackClusters[nClusterIndex]->mRightTrack = (WaveTrack*)pRightTrack; mMixerTrackClusters[nClusterIndex]->UpdateForStateChange(); } else { // Not already showing it. Add a new MixerTrackCluster. wxPoint clusterPos( (kInset + // extra inset to left for first one. (nClusterIndex * (kInset + kMixerTrackClusterWidth)) + // left margin and width for each to its left kInset), // plus left margin for new cluster kInset); wxSize clusterSize(kMixerTrackClusterWidth, nClusterHeight); pMixerTrackCluster = new MixerTrackCluster(mScrolledWindow, this, mProject, (WaveTrack*)pLeftTrack, (WaveTrack*)pRightTrack, clusterPos, clusterSize); if (pMixerTrackCluster) { mMixerTrackClusters.Add(pMixerTrackCluster); this->IncrementSoloCount((int)(pLeftTrack->GetSolo())); } } nClusterIndex++; } pLeftTrack = iterTracks.Next(); } if (pMixerTrackCluster) { // Added at least one MixerTrackCluster. this->UpdateWidth(); for (nClusterIndex = 0; nClusterIndex < mMixerTrackClusters.GetCount(); nClusterIndex++) mMixerTrackClusters[nClusterIndex]->HandleResize(); } else if (nClusterIndex < nClusterCount) { // We've got too many clusters. // This can only on things like Undo New Audio Track or Undo Import // that don't call RemoveTrackCluster explicitly. // We've already updated the track pointers for the clusters to the left, so just remove these. for (; nClusterIndex < nClusterCount; nClusterIndex++) this->RemoveTrackCluster(mMixerTrackClusters[nClusterIndex]->mLeftTrack); } }