コード例 #1
0
        private static ObjectSet Sort2DSet(ObjectSet inputObjectSet, ObjectOrdering ordering)
        {
            switch (ordering)
            {
            case (ObjectOrdering.ByWidth):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Width).ToObjectList());

            case (ObjectOrdering.ByHeight):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Height).ToObjectList());

            case (ObjectOrdering.ByArea):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Area).ToObjectList());

            case (ObjectOrdering.ByPerimeter):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Perimeter).ToObjectList());

            case (ObjectOrdering.BySideDifference):
                return(inputObjectSet.OrderByDescending(x => Math.Abs((x as Object2D).Width - (x as Object2D).Height)).ToObjectList());

            case (ObjectOrdering.BySideRatio):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Width > (x as Object2D).Height ? (x as Object2D).Width / (x as Object2D).Height : (x as Object2D).Height / (x as Object2D).Width).ToObjectList());

            case (ObjectOrdering.ByLongest):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Width > (x as Object2D).Height ? (x as Object2D).Width : (x as Object2D).Height).ToObjectList());

            case (ObjectOrdering.ByShortest):
                return(inputObjectSet.OrderByDescending(x => (x as Object2D).Width > (x as Object2D).Height ? (x as Object2D).Height : (x as Object2D).Width).ToObjectList());

            default:
                throw new CannotSortObjectsException("Cannot sort 2d objects with given: " + ordering + " ordering strategy");
            }
        }
コード例 #2
0
        private static ObjectSet Sort3DSet(ObjectSet inputObjectSet, ObjectOrdering ordering)
        {
            switch (ordering)
            {
            case (ObjectOrdering.ByWidth):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Width).ToObjectList());

            case (ObjectOrdering.ByHeight):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Height).ToObjectList());

            case (ObjectOrdering.ByDepth):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Depth).ToObjectList());

            case (ObjectOrdering.ByVolume):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Volume).ToObjectList());

            case (ObjectOrdering.BySurfaceArea):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).SurfaceArea).ToObjectList());

            case (ObjectOrdering.ByWidthHeightDifference):
                return(inputObjectSet.OrderByDescending(x => Math.Abs((x as Object3D).Width - (x as Object3D).Height)).ToObjectList());

            case (ObjectOrdering.ByWidthHeightRatio):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Width > (x as Object3D).Height ? (x as Object3D).Width / (x as Object3D).Height : (x as Object3D).Height / (x as Object3D).Width).ToObjectList());

            case (ObjectOrdering.ByWidthDepthDifference):
                return(inputObjectSet.OrderByDescending(x => Math.Abs((x as Object3D).Width - (x as Object3D).Depth)).ToObjectList());

            case (ObjectOrdering.ByWidthDepthRatio):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Width > (x as Object3D).Depth ? (x as Object3D).Width / (x as Object3D).Depth : (x as Object3D).Depth / (x as Object3D).Width).ToObjectList());

            case (ObjectOrdering.ByHeightDepthDifference):
                return(inputObjectSet.OrderByDescending(x => Math.Abs((x as Object3D).Height - (x as Object3D).Depth)).ToObjectList());

            case (ObjectOrdering.ByHeightDepthRatio):
                return(inputObjectSet.OrderByDescending(x => (x as Object3D).Height > (x as Object3D).Depth ? (x as Object3D).Height / (x as Object3D).Depth : (x as Object3D).Depth / (x as Object3D).Height).ToObjectList());

            case (ObjectOrdering.ByLongest):
                return(inputObjectSet.OrderByDescending(x => Math.Max((x as Object3D).Width, Math.Max((x as Object3D).Height, (x as Object3D).Depth))).ToObjectList());

            case (ObjectOrdering.ByShortest):
                return(inputObjectSet.OrderByDescending(x => Math.Min((x as Object3D).Width, Math.Min((x as Object3D).Height, (x as Object3D).Depth))).ToObjectList());

            default:
                throw new CannotSortObjectsException("Cannot sort 3d objects with given: " + ordering + " ordering strategy");
            }
        }
コード例 #3
0
 public static ObjectSet Sort(ObjectSet inputObjectSet, ObjectOrdering ordering)
 {
     if (inputObjectSet != null && inputObjectSet.Count != 0)
     {
         if (ordering.Equals(ObjectOrdering.None))
         {
             return(inputObjectSet);
         }
         if (inputObjectSet.First() is Object2D)
         {
             return(Sort2DSet(inputObjectSet, ordering));
         }
         else
         {
             return(Sort3DSet(inputObjectSet, ordering));
         }
     }
     return(inputObjectSet);
 }
コード例 #4
0
        private static void RecognizePair(string argumentType, string argumentValue)
        {
            switch (argumentType)
            {
            case ("-d"):
                Properties.Dimensionality = SetDimensionality(argumentValue);
                break;

            case ("-t"):
                Properties.Family        = SetFamily(argumentValue);
                Properties.AlgorithmType = SetObjectFittingStrategy(argumentValue);
                break;

            case ("-o"):
                Ordering = SetOrdering(argumentValue);
                break;

            case ("-s"):
                Properties.SplittingStrategy = SetSplittingStrategy(argumentValue);
                break;
            }
        }
コード例 #5
0
        public static void Write(AlgorithmExecutionResults endResults, AlgorithmProperties properties, ObjectOrdering ordering, IFigure initialContainer, string filePath, string inputSetName)
        {
            if (!CheckDestinationCSV(filePath))
            {
                FileHelper.CreateNewFile(filePath);
            }
            //throw new InvalidArgumentException($"Cannot access target file at given path {filePath}");

            WriteHeaders(filePath);

            string containerSize = properties.Dimensionality.Equals(AlgorithmDimensionality.TwoDimensional) ? $"{(initialContainer as Container2D).Width}x{(initialContainer as Container2D).Height}" :
                                   $"{(initialContainer as Container3D).Width}x{(initialContainer as Container3D).Height}x{(initialContainer as Container3D).Depth}";

            File.AppendAllText(filePath,
                               $"{inputSetName};{properties.Dimensionality};{properties.Family};{properties.AlgorithmType};{properties.SplittingStrategy};{ordering};{containerSize};{endResults.AverageFulfillmentRatio};{endResults.Quality};{endResults.ExecutionTime};{endResults.ContainersUsed};{endResults.ObjectCount}" + Environment.NewLine);
        }