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"); } }
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"); } }
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); }
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; } }
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); }