Esempio n. 1
0
    /// <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;
    }
Esempio n. 2
0
    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);
    }