/// <summary> /// Sorts the boundary voxels clockwise /// </summary> /// <returns></returns> public void CalculateSortedBoundary() { //var bv = Voxels.Where(v => //v.GetFaceNeighbours() //.Any(n => !Voxels.Contains(n)) //|| v.GetFaceNeighbours().ToList().Count < 4).ToArray(); var boundaryIndexes = BoundaryVoxels.Select(v => v.Index).ToList(); //Vector3 origin = new Vector3( //boundaryIndexes.Average(i => (float)i.x), //0, //boundaryIndexes.Average(i => (float)i.z)); //Array.Sort(boundaryIndexes, new ClockwiseComparer(origin)); //SortedBoundary = boundaryIndexes; Vector3Int[] sortedResult = new Vector3Int[boundaryIndexes.Count]; int i = 0; var current = boundaryIndexes[0]; sortedResult[0] = current; boundaryIndexes.RemoveAt(0); while (boundaryIndexes.Count > 0) { i++; var next = boundaryIndexes.MinBy(v => Vector3Int.Distance(current, v)); sortedResult[i] = next; current = next; boundaryIndexes.Remove(next); //sortedResult. } SortedBoundaryIndexes = sortedResult; }
public string GetSpaceInfo() { string output = ""; string tab = " "; string breakLine = "\n"; string nameHeader = $"[{Name}]"; string sizeHeader = $"[Size Parameters]"; string area = $"Area: {Area} voxels"; string averageX = $"Average X Width: {AverageXWidth} voxels"; string averageZ = $"Average Z Width: {AverageZWidth} voxels"; string connectivityHeader = $"[Connectivity Parameters]"; string connections = $"Connections: {NumberOfConnections} voxels"; string boundary = $"Boundary Length: {BoundaryVoxels.Count()} voxels"; string connectivityRatio = $"Connectivity Ratio: {ConnectionRatio}"; string neighboursHeader = "[Neighbours]"; string neighbours = ""; foreach (var neighbour in NeighbourSpaces) { string name = neighbour.Name; string length = ConnectionLenghts[neighbour].ToString(); neighbours += tab + tab + name + ": " + length + "voxels" + breakLine; } string usageHeader = "[Usage Data]"; string timesUsed = $"Times used: {TimesUsed.ToString()}"; string areaCurrentRating = $" Current Area Rating: {_areaRating.ToString()}"; string areaScore = $"Area Score: {AreaScore.ToString()}"; string areaReconfigText; string connectivityCurrentRating = $" Current Conect. Rating: {_connectivityRating.ToString()}"; string connectivityScore = $"Connect. Score: {ConnectivityScore.ToString()}"; string connectivityReconfigText; if (Reconfigure_Area) { if (_areaDecrease > _areaIncrease) { areaReconfigText = $"Reconfiguration for Area reduction requested"; } else { areaReconfigText = $"Reconfiguration for Area increment requested"; } } else { areaReconfigText = "No reconfiguration required for Area"; } if (Reconfigure_Connectivity) { if (_connectivityDecrease > _connectivityIncrease) { connectivityReconfigText = $"Reconfiguration for Connectivity reduction requested"; } else { connectivityReconfigText = $"Reconfiguration for Connectivity increase requested"; } } else { connectivityReconfigText = "No reconfiguration required for Connectivity"; } output = nameHeader + breakLine + sizeHeader + breakLine + tab + area + breakLine + tab + averageX + breakLine + tab + averageZ + breakLine + breakLine + connectivityHeader + breakLine + tab + connections + breakLine + tab + boundary + breakLine + tab + connectivityRatio + breakLine + tab + neighboursHeader + breakLine + neighbours + breakLine + usageHeader + breakLine + tab + timesUsed + breakLine + tab + areaCurrentRating + breakLine + tab + areaScore + breakLine + tab + areaReconfigText + breakLine + tab + connectivityCurrentRating + breakLine + tab + connectivityScore + breakLine + tab + connectivityReconfigText ; return(output); }