예제 #1
0
        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);
        }
예제 #2
0
        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;
        }
예제 #3
0
        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;
        }