Exemplo n.º 1
0
 /// <summary>
 /// Constructor used when editing an existing analysis
 /// </summary>
 /// <param name="document">Parent document</param>
 /// <param name="truckAnalysis">Truck analysis</param>
 public FormNewTruckAnalysis(Document document, TruckAnalysis truckAnalysis)
 {
     InitializeComponent();
     // set unit labels
     UnitsManager.AdaptUnitLabels(this);
     // set truck analysis ref
     _truckAnalysis = truckAnalysis;
 }
        public DockContentTruckAnalysis(IDocument document, TruckAnalysis truckAnalysis)
        {
            _document = document;
            _truckAnalysis = truckAnalysis;
            _truckAnalysis.AddListener(this);

            InitializeComponent();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates new truck analysis based on solution
        /// This method used when loading truck analysis from file
        /// </summary>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="truckProperties"></param>
        /// <param name="constraintSet"></param>
        /// <param name="solutions"></param>
        /// <returns></returns>
        public TruckAnalysis CreateNewTruckAnalysis(string name, string description, TruckProperties truckProperties, TruckConstraintSet constraintSet, List <TruckSolution> solutions)
        {
            TruckAnalysis truckAnalysis = new TruckAnalysis(this.ParentDocument, _analysis, this, truckProperties, constraintSet);

            truckAnalysis.ID.SetNameDesc(name, description);
            truckAnalysis.Solutions = solutions;
            _truckAnalyses.Add(truckAnalysis);
            AddDependancy(truckAnalysis);
            ParentDocument.Modify();

            return(truckAnalysis);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates new truck analysis based on solution
        /// This method used when loading truck analysis from file
        /// </summary>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="truckProperties"></param>
        /// <param name="constraintSet"></param>
        /// <param name="solutions"></param>
        /// <returns></returns>
        public TruckAnalysis CreateNewTruckAnalysis(string name, string description, TruckProperties truckProperties, TruckConstraintSet constraintSet, List<TruckSolution> solutions)
        {
            TruckAnalysis truckAnalysis = new TruckAnalysis(this.ParentDocument, _analysis, this, truckProperties, constraintSet);
            truckAnalysis.Name = name;
            truckAnalysis.Description = description;
            truckAnalysis.Solutions = solutions;
            _truckAnalyses.Add(truckAnalysis);
            AddDependancy(truckAnalysis);
            ParentDocument.NotifyOnNewTruckAnalysisCreated(_analysis, this, truckAnalysis);
            ParentDocument.Modify();

            return truckAnalysis;
        }
Exemplo n.º 5
0
        /// <summary>
        /// Creates a new truck analysis based on solution
        /// </summary>
        /// <param name="name">Analysis name</param>
        /// <param name="description">Description</param>
        /// <param name="truckProperties">Truck</param>
        /// <param name="constraintSet">ConstraintSet</param>
        /// <param name="solver">Solver to use to generate solutions</param>
        /// <returns></returns>
        public TruckAnalysis CreateNewTruckAnalysis(string name, string description, TruckProperties truckProperties, TruckConstraintSet constraintSet, ITruckSolver solver)
        {
            TruckAnalysis truckAnalysis = new TruckAnalysis(this.ParentDocument, _analysis, this, truckProperties, constraintSet);

            truckAnalysis.Name        = name;
            truckAnalysis.Description = description;
            _truckAnalyses.Add(truckAnalysis);
            AddDependancy(truckAnalysis);
            solver.ProcessAnalysis(truckAnalysis);
            ParentDocument.NotifyOnNewTruckAnalysisCreated(_analysis, this, truckAnalysis);
            ParentDocument.Modify();

            return(truckAnalysis);
        }
Exemplo n.º 6
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;
        }
Exemplo n.º 7
0
 /// <summary>
 /// Removes a truck analysis
 /// </summary>
 /// <param name="truckAnalysis">Removed truck analysis</param>
 public void RemoveTruckAnalysis(TruckAnalysis truckAnalysis)
 {
     ParentDocument.RemoveItem(truckAnalysis);
     _truckAnalyses.Remove(truckAnalysis);
 }
Exemplo n.º 8
0
 public TruckSolution(string title, TruckAnalysis truckAnalysis)
 {
     _title = title;
     _parentTruckAnalysis = truckAnalysis;
 }
Exemplo n.º 9
0
 public TruckSolution(string title, TruckAnalysis truckAnalysis)
 {
     _title = title;
     _parentTruckAnalysis = truckAnalysis;
 }
Exemplo n.º 10
0
 public void OnTruckAnalysisRemoved(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selectedSolution, TruckAnalysis truckAnalysis)
 { 
 }
Exemplo n.º 11
0
        private void AppendTruckElement(TruckAnalysis truckAnalysis, XmlElement elemTruckAnalysis, XmlDocument xmlDoc)
        {
            string ns = xmlDoc.DocumentElement.NamespaceURI;
            // get PalletProperties
            TruckProperties truckProp = truckAnalysis.TruckProperties;
            if (null == truckProp) return;
            // create "truck" element
            XmlElement elemTruck = xmlDoc.CreateElement("truck", ns);
            elemTruckAnalysis.AppendChild(elemTruck);
            // name
            XmlElement elemName = xmlDoc.CreateElement("name", ns);
            elemName.InnerText = truckProp.Name;
            elemTruck.AppendChild(elemName);
            // description
            XmlElement elemDescription = xmlDoc.CreateElement("description", ns);
            elemDescription.InnerText = truckProp.Description;
            elemTruck.AppendChild(elemDescription);

            AppendElementValue(xmlDoc, elemTruck, "length", UnitsManager.UnitType.UT_LENGTH, truckProp.Length);
            AppendElementValue(xmlDoc, elemTruck, "width", UnitsManager.UnitType.UT_LENGTH, truckProp.Width);
            AppendElementValue(xmlDoc, elemTruck, "height", UnitsManager.UnitType.UT_LENGTH, truckProp.Height);
            AppendElementValue(xmlDoc, elemTruck, "admissibleLoad", UnitsManager.UnitType.UT_MASS, truckProp.AdmissibleLoadWeight);

            // --- build image
            Graphics3DImage graphics = new Graphics3DImage(new Size(ImageSizeDetail, ImageSizeDetail));
            graphics.CameraPosition = Graphics3D.Corner_0;
            Truck truck = new Truck(truckProp);
            truck.DrawBegin(graphics);
            truck.DrawEnd(graphics);
            DimensionCube dc = new DimensionCube(truckProp.Length, truckProp.Width, truckProp.Height);      dc.FontSize = 6.0f;
            graphics.AddDimensions(dc);
            graphics.Flush();
            // ---
            // view_truck_iso
            XmlElement elemImage = xmlDoc.CreateElement("view_truck_iso", ns);
            TypeConverter converter = TypeDescriptor.GetConverter(typeof(Bitmap));
            elemImage.InnerText = Convert.ToBase64String((byte[])converter.ConvertTo(graphics.Bitmap, typeof(byte[])));
            XmlAttribute styleAttribute = xmlDoc.CreateAttribute("style");
            styleAttribute.Value = string.Format("width:{0}pt;height:{1}pt", graphics.Bitmap.Width / 4, graphics.Bitmap.Height / 4);
            elemImage.Attributes.Append(styleAttribute);
            elemTruck.AppendChild(elemImage);
            // Save image ?
            SaveImageAs(graphics.Bitmap, "view_truck_iso.png");
        }
Exemplo n.º 12
0
 internal void NotifyOnTruckAnalysisRemoved(SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis)
 {
     foreach (IDocumentListener listener in _listeners)
         listener.OnTruckAnalysisRemoved(this, selSolution.Analysis, selSolution, truckAnalysis);
 }
Exemplo n.º 13
0
 public NodeTag(NodeType type, Document document, HCylinderPalletAnalysis analysis, SelHCylinderPalletSolution selSolution, TruckAnalysis truckAnalysis)
 {
     _type = type;
     _document = document;
     _itemProperties = null;
     _hCylinderPalletAnalysis = analysis;
     _selHCylinderPalletSolution = selSolution;
     _truckAnalysis = truckAnalysis;
 }
Exemplo n.º 14
0
 public void Save(TruckAnalysis truckAnalysis, bool unique, XmlElement truckAnalysesElt, XmlDocument xmlDoc)
 {
     XmlElement truckAnalysisElt = xmlDoc.CreateElement("TruckAnalysis");
     truckAnalysesElt.AppendChild(truckAnalysisElt);
     // name
     XmlAttribute nameAttribute = xmlDoc.CreateAttribute("Name");
     nameAttribute.Value = truckAnalysis.Name;
     truckAnalysisElt.Attributes.Append(nameAttribute);
     // description
     XmlAttribute descriptionAttribute = xmlDoc.CreateAttribute("Description");
     descriptionAttribute.Value = truckAnalysis.Description;
     truckAnalysisElt.Attributes.Append(descriptionAttribute);
     // truckId
     XmlAttribute truckIdAttribute = xmlDoc.CreateAttribute("TruckId");
     truckIdAttribute.Value = string.Format("{0}", truckAnalysis.TruckProperties.Guid);
     truckAnalysisElt.Attributes.Append(truckIdAttribute);
     // constraint set
     XmlElement contraintSetElt = xmlDoc.CreateElement("ConstraintSet");
     truckAnalysesElt.AppendChild(contraintSetElt);            
     // multilayer allowed
     XmlAttribute multilayerAllowedAttribute = xmlDoc.CreateAttribute("MultilayerAllowed");
     multilayerAllowedAttribute.Value = truckAnalysis.ConstraintSet.MultilayerAllowed ? "True" : "False";
     contraintSetElt.Attributes.Append(multilayerAllowedAttribute);
     // allowed pallet orientation
     XmlAttribute palletOrientationsAttribute = xmlDoc.CreateAttribute("AllowedPalletOrientations");
     string sAllowedPalletOrientations = string.Empty;
     if (truckAnalysis.ConstraintSet.AllowPalletOrientationX)
         sAllowedPalletOrientations += "X";
     if (truckAnalysis.ConstraintSet.AllowPalletOrientationY)
     {
         if (!string.IsNullOrEmpty(sAllowedPalletOrientations))
             sAllowedPalletOrientations += ",";
         sAllowedPalletOrientations += "Y";
     }
     palletOrientationsAttribute.Value = sAllowedPalletOrientations;
     contraintSetElt.Attributes.Append(palletOrientationsAttribute);
     // min distance pallet / truck wall
     XmlAttribute minDistancePalletWallAttribute = xmlDoc.CreateAttribute("MinDistancePalletWall");
     minDistancePalletWallAttribute.Value = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", truckAnalysis.ConstraintSet.MinDistancePalletTruckWall);
     contraintSetElt.Attributes.Append(minDistancePalletWallAttribute);
     // min distance pallet / truck roof
     XmlAttribute minDistancePalletRoofAttribute = xmlDoc.CreateAttribute("MinDistancePalletRoof");
     minDistancePalletRoofAttribute.Value = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", truckAnalysis.ConstraintSet.MinDistancePalletTruckWall);
     contraintSetElt.Attributes.Append(minDistancePalletRoofAttribute);
     // solutions
     XmlElement truckSolutionsElt = xmlDoc.CreateElement("Solutions");
     truckAnalysisElt.AppendChild(truckSolutionsElt);
     int solutionIndex = 0;
     foreach (TruckSolution truckSolution in truckAnalysis.Solutions)
     {
         if (!unique || truckAnalysis.HasSolutionSelected(solutionIndex))
         {
             XmlElement truckSolutionElt = xmlDoc.CreateElement("Solution");
             truckSolutionsElt.AppendChild(truckSolutionElt);
             // title
             XmlAttribute titleAttribute = xmlDoc.CreateAttribute("Title");
             titleAttribute.Value = truckSolution.Title;
             truckSolutionsElt.Attributes.Append(titleAttribute);
             // selected
             XmlAttribute selectedAttribute = xmlDoc.CreateAttribute("Selected");
             selectedAttribute.Value = truckAnalysis.HasSolutionSelected(solutionIndex) ? "True" : "False";
             truckSolutionElt.Attributes.Append(selectedAttribute);
             // layer
             XmlElement layersElt = xmlDoc.CreateElement("Layers");
             truckSolutionElt.AppendChild(layersElt);
             Save(truckSolution.Layer, layersElt, xmlDoc);
         }
         // increment index
         ++solutionIndex;
     }
 }
Exemplo n.º 15
0
 /// <summary>
 /// Removes a truck analysis
 /// </summary>
 /// <param name="truckAnalysis">Removed truck analysis</param>
 public void RemoveTruckAnalysis(TruckAnalysis truckAnalysis)
 {
     ParentDocument.RemoveItem(truckAnalysis);
     _truckAnalyses.Remove(truckAnalysis);
 }
Exemplo n.º 16
0
 public void OnNewTruckAnalysisCreated(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis) { CreateOrActivateViewTruckAnalysis(truckAnalysis); }
Exemplo n.º 17
0
 /// <summary>
 /// Creates a new DockContentTruckAnalysis view
 /// </summary>
 /// <param name="analysis"></param>
 /// <returns></returns>
 public DockContentTruckAnalysis CreateTruckAnalysisView(TruckAnalysis analysis)
 {
     DockContentTruckAnalysis form = new DockContentTruckAnalysis(this, analysis);
     AddView(form);
     return form;
 }
Exemplo n.º 18
0
        /// <summary>
        /// Edit given truck analysis
        /// </summary>
        /// <param name="truckAnalysis"></param>
        public void EditTruckAnalysis(TruckAnalysis truckAnalysis)
        {
            // instantiate form
            FormNewTruckAnalysis form = new FormNewTruckAnalysis(truckAnalysis.ParentDocument, truckAnalysis);
            form.Trucks = Trucks.ToArray();

            // show form
            bool recomputeRequired = false;
            if (recomputeRequired = (DialogResult.OK == form.ShowDialog()))
            {
                truckAnalysis.TruckProperties = form.SelectedTruck;
            }
            if (recomputeRequired)
                truckAnalysis.OnEndUpdate(null);
        }
Exemplo n.º 19
0
 /// <summary>
 /// handles truck analysis removal : removed truck analysis node from 
 /// </summary>
 public void OnTruckAnalysisRemoved(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis)
 {
     // get node
     TreeNode truckAnalysisNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_TRUCKANALYSIS, doc, analysis, selSolution, truckAnalysis));
     // test
     if (null == truckAnalysisNode)
     {
         _log.Warn(string.Format("Failed to find a valid tree node for truck analysis {0}", truckAnalysis.Name));
         return;
     }
     // remove node
     Nodes.Remove(truckAnalysisNode);
 }
Exemplo n.º 20
0
 /// <summary>
 /// handles new truck analysis created
 /// </summary>
 public void OnNewTruckAnalysisCreated(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis)
 {
     // get parent node
     TreeNode parentNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_CASEPALLETANALYSISSOLUTION, doc, analysis, selSolution));
     // insert truckAnalysis node
     TreeNode nodeTruckAnalysis = new TreeNode(truckAnalysis.Name, 16, 16);
     nodeTruckAnalysis.Tag = new NodeTag(NodeTag.NodeType.NT_TRUCKANALYSIS, doc, analysis, selSolution, truckAnalysis);
     parentNode.Nodes.Add(nodeTruckAnalysis);
     // expand parent tree node
     parentNode.Expand();
 }
Exemplo n.º 21
0
 public void ProcessAnalysis(TruckAnalysis truckAnalysis)
 {
     truckAnalysis.Solutions = GenerateSolutions(truckAnalysis);
 }
Exemplo n.º 22
0
 internal void NotifyOnNewTruckAnalysisCreated(CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis)
 {
     foreach (IDocumentListener listener in _listeners)
         listener.OnNewTruckAnalysisCreated(this, analysis, selSolution, truckAnalysis);
 }
Exemplo n.º 23
0
 /// <summary>
 /// Creates or activate a truck analysis view
 /// </summary>
 public void CreateOrActivateViewTruckAnalysis(TruckAnalysis analysis)
 {
     // search among existing views
     foreach (IDocument doc in Documents)
         foreach (IView view in doc.Views)
         {
             DockContentTruckAnalysis form = view as DockContentTruckAnalysis;
             if (null == form) continue;
             if (analysis == form.TruckAnalysis)
             {
                 form.Activate();
                 return;
             }
         }
     // ---> not found
     // ---> create new form
     // get document
     DocumentSB parentDocument = analysis.ParentDocument as DocumentSB;
     // instantiate form
     DockContentTruckAnalysis formTruckAnalysis = parentDocument.CreateTruckAnalysisView(analysis);
     // show docked
     formTruckAnalysis.Show(dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.Document);
 }