public void BuildClusters(List <GameObject> gos, ProgressUpdateDelegate progFunc) { if (gos.Count == 0) { Debug.LogWarning("No objects to cluster"); return; } if (cluster == null) { cluster = new MB3_AgglomerativeClustering(); } List <MB3_AgglomerativeClustering.item_s> its = new List <MB3_AgglomerativeClustering.item_s>(); for (int i = 0; i < gos.Count; i++) { if (gos[i] != null && its.Find(x => x.go == gos[i]) == null) { MB3_AgglomerativeClustering.item_s ii = new MB3_AgglomerativeClustering.item_s(); ii.go = gos[i]; ii.coord = gos[i].transform.position; its.Add(ii); } } cluster.items = its; //yield return cluster.agglomerate(); cluster.agglomerate(progFunc); _BuildListOfClustersToDraw(); }
public void BuildClusters(List <GameObject> gos, ProgressUpdateCancelableDelegate progFunc) { if (gos.Count == 0) { Debug.LogWarning("No objects to cluster. Add some objects to the list of Objects To Combine."); return; } if (cluster == null) { cluster = new MB3_AgglomerativeClustering(); } List <MB3_AgglomerativeClustering.item_s> its = new List <MB3_AgglomerativeClustering.item_s>(); for (int i = 0; i < gos.Count; i++) { if (gos[i] != null && its.Find(x => x.go == gos[i]) == null) { Renderer mr = gos[i].GetComponent <Renderer>(); if (mr != null && (mr is MeshRenderer || mr is SkinnedMeshRenderer)) { MB3_AgglomerativeClustering.item_s ii = new MB3_AgglomerativeClustering.item_s(); ii.go = gos[i]; ii.coord = mr.bounds.center; its.Add(ii); } } } cluster.items = its; //yield return cluster.agglomerate(); cluster.agglomerate(progFunc); if (!cluster.wasCanceled) { float smallest, largest; _BuildListOfClustersToDraw(progFunc, out smallest, out largest); d.maxDistBetweenClusters = Mathf.Lerp(smallest, largest, .9f); } }