/// <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(); }
/// <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); }
/// <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; }
/// <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); }
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; }
/// <summary> /// Removes a truck analysis /// </summary> /// <param name="truckAnalysis">Removed truck analysis</param> public void RemoveTruckAnalysis(TruckAnalysis truckAnalysis) { ParentDocument.RemoveItem(truckAnalysis); _truckAnalyses.Remove(truckAnalysis); }
public TruckSolution(string title, TruckAnalysis truckAnalysis) { _title = title; _parentTruckAnalysis = truckAnalysis; }
public void OnTruckAnalysisRemoved(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selectedSolution, TruckAnalysis truckAnalysis) { }
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"); }
internal void NotifyOnTruckAnalysisRemoved(SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis) { foreach (IDocumentListener listener in _listeners) listener.OnTruckAnalysisRemoved(this, selSolution.Analysis, selSolution, truckAnalysis); }
public NodeTag(NodeType type, Document document, HCylinderPalletAnalysis analysis, SelHCylinderPalletSolution selSolution, TruckAnalysis truckAnalysis) { _type = type; _document = document; _itemProperties = null; _hCylinderPalletAnalysis = analysis; _selHCylinderPalletSolution = selSolution; _truckAnalysis = truckAnalysis; }
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; } }
public void OnNewTruckAnalysisCreated(Document doc, CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis) { CreateOrActivateViewTruckAnalysis(truckAnalysis); }
/// <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; }
/// <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); }
/// <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); }
/// <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(); }
public void ProcessAnalysis(TruckAnalysis truckAnalysis) { truckAnalysis.Solutions = GenerateSolutions(truckAnalysis); }
internal void NotifyOnNewTruckAnalysisCreated(CasePalletAnalysis analysis, SelCasePalletSolution selSolution, TruckAnalysis truckAnalysis) { foreach (IDocumentListener listener in _listeners) listener.OnNewTruckAnalysisCreated(this, analysis, selSolution, truckAnalysis); }
/// <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); }