private List <TruckSolution> GenerateSolutions(TruckAnalysis truckAnalysis) { List <TruckSolution> solutions = new List <TruckSolution>(); HalfAxis.HAxis[] axis = { HalfAxis.HAxis.AXIS_Z_N, HalfAxis.HAxis.AXIS_Z_P }; // build layer using truck length / width foreach (LayerPattern pattern in LayerPattern.All) { for (int swapPos = 0; swapPos < (pattern.CanBeSwapped ? 2 : 1); ++swapPos) { for (int orientation = 0; orientation < 2; ++orientation) { try { Layer2D layer = BuildLayer(truckAnalysis.ParentSolution, truckAnalysis.TruckProperties, truckAnalysis.ConstraintSet , axis[orientation], swapPos == 1); double actualLength = 0.0, actualWidth = 0.0; if (!pattern.GetLayerDimensionsChecked(layer, out actualLength, out actualWidth)) { continue; } pattern.GenerateLayer(layer, actualLength, actualWidth); TruckSolution sol = new TruckSolution("sol", truckAnalysis); BoxLayer boxLayer = new BoxLayer(0.0, 0); foreach (LayerPosition layerPos in layer) { boxLayer.AddPosition(layerPos.Position, layerPos.LengthAxis, layerPos.WidthAxis); } sol.Layer = boxLayer; // insert solution if (sol.PalletCount > 0) { solutions.Add(sol); } } catch (Exception ex) { _log.Error(string.Format("Exception caught: {0}", ex.ToString())); } } } } // sort solutions solutions.Sort(); return(solutions); }
private List<TruckSolution> GenerateSolutions(TruckAnalysis truckAnalysis) { List<TruckSolution> solutions = new List<TruckSolution>(); HalfAxis.HAxis[] axis = { HalfAxis.HAxis.AXIS_Z_N, HalfAxis.HAxis.AXIS_Z_P}; // build layer using truck length / width foreach (LayerPattern pattern in LayerPattern.All) { for (int swapPos = 0; swapPos < (pattern.CanBeSwapped ? 2 : 1); ++swapPos) { for (int orientation = 0; orientation < 2; ++orientation) { try { Layer2D layer = BuildLayer(truckAnalysis.ParentSolution, truckAnalysis.TruckProperties, truckAnalysis.ConstraintSet , axis[orientation], swapPos == 1); double actualLength = 0.0, actualWidth = 0.0; if (!pattern.GetLayerDimensionsChecked(layer, out actualLength, out actualWidth)) continue; pattern.GenerateLayer(layer, actualLength, actualWidth); TruckSolution sol = new TruckSolution("sol", truckAnalysis); BoxLayer boxLayer = new BoxLayer(0.0, 0); foreach (LayerPosition layerPos in layer) boxLayer.AddPosition(layerPos.Position, layerPos.LengthAxis, layerPos.WidthAxis); sol.Layer = boxLayer; // insert solution if (sol.PalletCount > 0) solutions.Add(sol); } catch (Exception ex) { _log.Error(string.Format("Exception caught: {0}", ex.ToString())); } } } } // sort solutions solutions.Sort(); return solutions; }
private ILayer LoadLayer(XmlElement eltLayer) { ILayer layer = null; double zLow = UnitsManager.ConvertLengthFrom( Convert.ToDouble(eltLayer.Attributes["ZLow"].Value, System.Globalization.CultureInfo.InvariantCulture) , _unitSystem); double maxSpace = 0.0; if (eltLayer.HasAttribute("MaximumSpace")) maxSpace = UnitsManager.ConvertLengthFrom( Convert.ToDouble(eltLayer.Attributes["MaximumSpace"].Value, System.Globalization.CultureInfo.InvariantCulture) , _unitSystem); string patternName = string.Empty; if (eltLayer.HasAttribute("PatternName")) patternName = eltLayer.Attributes["PatternName"].Value; if (string.Equals(eltLayer.Name, "BoxLayer", StringComparison.CurrentCultureIgnoreCase)) { BoxLayer boxLayer = new BoxLayer(UnitsManager.ConvertLengthFrom(zLow, _unitSystem), patternName); boxLayer.MaximumSpace = maxSpace; foreach (XmlNode nodeBoxPosition in eltLayer.ChildNodes) { XmlElement eltBoxPosition = nodeBoxPosition as XmlElement; string sPosition = eltBoxPosition.Attributes["Position"].Value; string sAxisLength = eltBoxPosition.Attributes["AxisLength"].Value; string sAxisWidth = eltBoxPosition.Attributes["AxisWidth"].Value; try { boxLayer.AddPosition(UnitsManager.ConvertLengthFrom(Vector3D.Parse(sPosition), _unitSystem), HalfAxis.Parse(sAxisLength), HalfAxis.Parse(sAxisWidth)); } catch (Exception /*ex*/) { _log.Error(string.Format("Exception thrown: Position = {0} | AxisLength = {1} | AxisWidth = {2}", sPosition, sAxisLength, sAxisWidth )); } } layer = boxLayer; } else if (string.Equals(eltLayer.Name, "CylLayer", StringComparison.CurrentCultureIgnoreCase)) { CylinderLayer cylLayer = new CylinderLayer(UnitsManager.ConvertLengthFrom(zLow, _unitSystem)); foreach (XmlNode nodePosition in eltLayer.ChildNodes) { XmlElement eltBoxPosition = nodePosition as XmlElement; string sPosition = eltBoxPosition.Attributes["Position"].Value; cylLayer.Add(UnitsManager.ConvertLengthFrom(Vector3D.Parse(sPosition), _unitSystem)); layer = cylLayer; } } else if (string.Equals(eltLayer.Name, "InterLayer", StringComparison.CurrentCultureIgnoreCase)) { int typeId = 0; if (eltLayer.HasAttribute("TypeId")) typeId = Convert.ToInt32(eltLayer.Attributes["TypeId"].Value); layer = new InterlayerPos(UnitsManager.ConvertLengthFrom(zLow, _unitSystem), typeId); } return layer; }