public ReportData(
     CasePalletAnalysis palletAnalysis, SelCasePalletSolution selSolution
     , CylinderPalletAnalysis cylinderPalletAnalysis, SelCylinderPalletSolution selCylinderPalletSolution
     , HCylinderPalletAnalysis hCylinderPalletAnalysis, SelHCylinderPalletSolution selHCylinderPalletSolution
     , BoxCaseAnalysis boxCaseAnalysis, SelBoxCaseSolution selBoxCaseSolution
     , BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selCaseSolution
     , PackPalletAnalysis packPalletAnalysis, SelPackPalletSolution selPackPalletSolution
     )
 {
     // case/pallet analysis
     _palletAnalysis = palletAnalysis;
     _selSolution = selSolution;
     // box/case/pallet analysis
     _caseAnalysis = caseAnalysis;
     _selCaseSolution = selCaseSolution;
     // Cylinder analysis
     _cylinderPalletAnalysis = cylinderPalletAnalysis;
     _selCylinderPalletSolution = selCylinderPalletSolution;
     // HCylinder analysis
     _hCylinderPalletAnalysis = hCylinderPalletAnalysis;
     _selHCylinderPalletSolution = selHCylinderPalletSolution;
     // Box case analysis
     _boxCaseAnalysis = boxCaseAnalysis;
     _selBoxCaseSolution = selBoxCaseSolution;
     // Pack pallet analysis
     _packPalletAnalysis = packPalletAnalysis;
     _selPackPalletSolution = selPackPalletSolution;
 }
 public SelBoxCasePalletSolution(Document document, BoxCasePalletAnalysis analysis, BoxCasePalletSolution sol)
     : base(document)
 {
     _analysis = analysis;
     _solution = sol;
     Name      = sol.Title;
 }
Exemple #3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="title"></param>
 /// <param name="caseAnalysis">Parent case analysis reference</param>
 public BoxCasePalletSolution(BoxCasePalletAnalysis caseAnalysis, string title, PalletSolutionDesc palletSolutionDesc, bool hasHomogeneousLayers)
 {
     _title = title;
     _parentCaseAnalysis   = caseAnalysis;
     _palletSolutionDesc   = palletSolutionDesc;
     _hasHomogeneousLayers = hasHomogeneousLayers;
 }
 public SelBoxCasePalletSolution(Document document, BoxCasePalletAnalysis analysis, BoxCasePalletSolution sol)
     : base(document)
 {
     _analysis = analysis;
     _solution = sol;
     Name = sol.Title;
 }
 public void ProcessAnalysis(BoxCasePalletAnalysis analysis)
 {
     _boxProperties = analysis.BoxProperties;
     _interlayerProperties = analysis.InterlayerProperties;
     _palletSolutionList = analysis.PalletSolutionsList;
     _constraintSet = analysis.ConstraintSet;
     analysis.Solutions = GenerateSolutions();
 }
 /// <summary>
 /// Constructor used while browsing/editing case analysis
 /// </summary>
 /// <param name="document">Document</param>
 /// <param name="caseAnalysis">Case analysis</param>
 public FormNewCaseAnalysis(Document document, BoxCasePalletAnalysis caseAnalysis)
 {
     InitializeComponent();
     // set unit labels
     UnitsManager.AdaptUnitLabels(this);
     // save document reference
     _document = document;
     _caseAnalysis = caseAnalysis;
 }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="document">Document to which the case analysis begins</param>
        /// <param name="caseAnalysis">Case analysis browsed</param>
        public DockContentBoxCasePalletAnalysis(IDocument document, BoxCasePalletAnalysis caseAnalysis)
        {
            _document = document;
            _caseAnalysis = caseAnalysis;
            _caseAnalysis.AddListener(this);

            _caseAnalysis.SolutionSelected += new Basics.BoxCasePalletAnalysis.SelectSolution(SolutionSelectionChanged);
            _caseAnalysis.SolutionSelectionRemoved += new Basics.BoxCasePalletAnalysis.SelectSolution(SolutionSelectionChanged);

            InitializeComponent();
        }
 /// <summary>
 /// handles case solution unselected : actually removed selected solution node from case analysis node
 /// </summary>
 public void OnCaseAnalysisSolutionRemoved(Document doc, BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selSolution)
 {
     // get node
     TreeNode selSolutionNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_CASESOLUTION, doc, caseAnalysis, selSolution));
     // test
     if (null == selSolutionNode)
     {
         _log.Error(string.Format("Failed to find a valid tree node for selSolution {0}", selSolution.Name));
         return;
     }
     // remove node
     Nodes.Remove(selSolutionNode);
 }
 private void onCaseAnalysisSolutionSelectionRemoved(BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selSolution)
 {
     // retrieve parent document
     Document doc = caseAnalysis.ParentDocument;
     // get node
     TreeNode caseAnalysisNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_BOXCASEPALLETANALYSIS, doc, caseAnalysis));
     // test
     if (null == caseAnalysisNode)
     {
         _log.Warn(string.Format("Failed to find a valid tree node for caseAnalysis {0}", caseAnalysis.Name));
         return;
     }
     // remove node
     Nodes.Remove(caseAnalysisNode);
 }
 void SolutionSelectionChanged(BoxCasePalletAnalysis analysis, SelBoxCasePalletSolution selSolution)
 {
     UpdateSelectButtonText();
     UpdateGridCheckBoxes();
 }
        /// <summary>
        /// handles new analysis created
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="caseAnalysis"></param>
        public void OnNewBoxCasePalletAnalysisCreated(Document doc, BoxCasePalletAnalysis caseAnalysis)
        {
            // get parent node
            TreeNode parentNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_LISTANALYSIS, doc));
            // insert case analysis node
            TreeNode nodeAnalysis = new TreeNode(caseAnalysis.Name, 17, 17);
            nodeAnalysis.Tag = new NodeTag(NodeTag.NodeType.NT_BOXCASEPALLETANALYSIS, doc, caseAnalysis);
            parentNode.Nodes.Add(nodeAnalysis);
            parentNode.Expand();
            // insert sub box node
            TreeNode subBoxNode = new TreeNode(caseAnalysis.BoxProperties.Name, 3, 3);
            subBoxNode.Tag = new NodeTag(NodeTag.NodeType.NT_ANALYSISBOX, doc, caseAnalysis, caseAnalysis.BoxProperties);
            nodeAnalysis.Nodes.Add(subBoxNode);
            nodeAnalysis.Expand();

            caseAnalysis.SolutionSelected += new Basics.BoxCasePalletAnalysis.SelectSolution(onCaseAnalysisSolutionSelected);
            caseAnalysis.SolutionSelectionRemoved += new Basics.BoxCasePalletAnalysis.SelectSolution(onCaseAnalysisSolutionSelectionRemoved);
        }
 private void onCaseAnalysisSolutionSelected(BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selSolution)
 {
     // retrieve document
     Document doc = caseAnalysis.ParentDocument;
     // get parent node
     TreeNode parentNode = FindNode(null, new NodeTag(NodeTag.NodeType.NT_BOXCASEPALLETANALYSIS, doc, caseAnalysis));
     if (null == parentNode) throw new Exception("Failed to locate Analysis (NT_BOXCASEPALLETANALYSIS) node...");
     // insert selected solution node
     TreeNode nodeSelSolution = new TreeNode(selSolution.Name, 15, 15);
     nodeSelSolution.Tag = new NodeTag(NodeTag.NodeType.NT_CASESOLUTION, doc, caseAnalysis, selSolution);
     parentNode.Nodes.Add(nodeSelSolution);
     // expand tree node
     parentNode.Expand();
 }
 public BoxCasePalletAnalysis CreateNewBoxCasePalletOptimization(
     string name, string description
     , BoxProperties bProperties
     , BoxCasePalletConstraintSet constraintSet
     , List<PalletSolutionDesc> palletSolutionList
     , IBoxCasePalletAnalysisSolver solver)
 {
     BoxCasePalletAnalysis analysis = new BoxCasePalletAnalysis(bProperties, palletSolutionList, constraintSet);
     analysis.Name = name;
     analysis.Description = description;
     // insert in list
     _boxCasePalletOptimizations.Add(analysis);
     // compute analysis
     if (null != solver)
     {
         solver.ProcessAnalysis(analysis);
         if (analysis.Solutions.Count < 1)
         {	// remove analysis from list if it has no valid solution
             _boxCasePalletOptimizations.Remove(analysis);
             _log.InfoFormat("Failed to find any solution {0}", analysis.Name);
             return null;
         }
     }
     // notify listeners
     NotifyOnNewCaseAnalysisCreated(analysis);
     Modify();
     return analysis;
 }
 public void OnNewBoxCasePalletAnalysisCreated(Document doc, BoxCasePalletAnalysis caseAnalysis)
 {
     CreateOrActivateViewCaseAnalysis(caseAnalysis);
 }
 private void NotifyOnNewCaseAnalysisCreated(BoxCasePalletAnalysis caseAnalysis)
 {
     foreach (IDocumentListener listener in _listeners)
         listener.OnNewBoxCasePalletAnalysisCreated(this, caseAnalysis);
 }
 /// <summary>
 /// creates new case analysis view
 /// </summary>
 /// <param name="analysis"></param>
 /// <returns></returns>
 public DockContentBoxCasePalletAnalysis CreateCaseAnalysisView(BoxCasePalletAnalysis analysis)
 {
     // check if analysis has valid solutions
     if (!analysis.HasValidSolutions)
     {
         MessageBox.Show(string.Format(Properties.Resources.ID_ANALYSISHASNOVALIDSOLUTION, analysis.Name));
         return null;
     }
     // show Box/Case/Pallet analysis view
     DockContentBoxCasePalletAnalysis form = new DockContentBoxCasePalletAnalysis(this, analysis);
     AddView(form);
     return form;
 }
 private void AppendCaseConstraintSet(BoxCasePalletAnalysis caseAnalysis, XmlElement elemCaseAnalysis, XmlDocument xmlDoc)
 {
     string ns = xmlDoc.DocumentElement.NamespaceURI;
     BoxCasePalletConstraintSet cs = caseAnalysis.ConstraintSet;
     // caseConstraintSet element
     XmlElement elemCaseConstraintSet = CreateElement("caseConstraintSet", null, elemCaseAnalysis, xmlDoc, ns);
     // allowedPatterns
     CreateElement("allowedPatterns", cs.AllowedPatternString, elemCaseConstraintSet, xmlDoc, ns);
     // allowedOrthoAxis
     CreateElement("allowedOrthoAxis", cs.AllowOrthoAxisString, elemCaseConstraintSet, xmlDoc, ns);
     // allowAlignedLayers
     CreateElement("allowAlignedLayers", cs.AllowAlignedLayers ? "Y" : "N", elemCaseConstraintSet, xmlDoc, ns);
     // allowAlternateLayers
     CreateElement("allowAlternateLayers", cs.AllowAlternateLayers ? "Y" : "N", elemCaseConstraintSet, xmlDoc, ns);
     // maximumCaseWeightGroup
     if (cs.UseMaximumCaseWeight)
     {
         XmlElement maximumCaseWeightGroup = CreateElement("maximumCaseWeightGroup", null, elemCaseConstraintSet, xmlDoc, ns);
         AppendElementValue(xmlDoc, maximumCaseWeightGroup, "maximumCaseWeight", UnitsManager.UnitType.UT_MASS, cs.MaximumCaseWeight);
     }
     // minimumBoxPerCaseGroup
     if (cs.UseMinimumNumberOfItems)
     {
         XmlElement minimumBoxPerCaseGroup = CreateElement("minimumBoxPerCaseGroup", null, elemCaseConstraintSet, xmlDoc, ns);
         CreateElement("minimumBoxPerCase", cs.MinimumNumberOfItems, minimumBoxPerCaseGroup, xmlDoc, ns);
     }
     // maximumBoxPerCaseGroup
     if (cs.UseMaximumNumberOfItems)
     {
         XmlElement maximumBoxPerCaseGroup = CreateElement("minimumBoxPerCaseGroup", null, elemCaseConstraintSet, xmlDoc, ns);
         CreateElement("maximumBoxPerCase", cs.MinimumNumberOfItems, maximumBoxPerCaseGroup, xmlDoc, ns);
     }
 }
 /// <summary>
 /// Edit given box/case/pallet analysis
 /// </summary>
 /// <param name="caseAnalysis"></param>
 public void EditCaseAnalysis(BoxCasePalletAnalysis caseAnalysis)
 {
     // do we need to recompute analysis
     bool recomputeRequired = false;
     FormNewCaseAnalysis form = new FormNewCaseAnalysis(caseAnalysis.ParentDocument, caseAnalysis);
     form.Boxes = Boxes.ToArray();
     if (recomputeRequired = (DialogResult.OK == form.ShowDialog()))
     {
         // analysis name / description
         caseAnalysis.Name = form.CaseAnalysisName;
         caseAnalysis.Description = form.CaseAnalysisDescription;
         // selected box
         caseAnalysis.BoxProperties = form.SelectedBox;
         // pallet solutions
         caseAnalysis.PalletSolutionsList = form.PalletSolutionList;
         // constraint set
         BoxCasePalletConstraintSet constraintSet = caseAnalysis.ConstraintSet;
         // aligned / alternate layers
         constraintSet.AllowAlignedLayers = form.AllowAlignedLayers;
         constraintSet.AllowAlternateLayers = form.AllowAlternateLayers;
         // patterns
         constraintSet.AllowedPatternString = form.AllowedPatternsString;
         // allowed axes
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_N, form.AllowVerticalX);
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_X_P, form.AllowVerticalX);
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_N, form.AllowVerticalY);
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Y_P, form.AllowVerticalY);
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_N, form.AllowVerticalZ);
         constraintSet.SetAllowedOrthoAxis(HalfAxis.HAxis.AXIS_Z_P, form.AllowVerticalZ);
         // use maximum case weight
         constraintSet.UseMaximumCaseWeight = form.UseMaximumCaseWeight;
         constraintSet.MaximumCaseWeight = form.MaximumCaseWeight;
         // use maximum number of boxes
         constraintSet.UseMaximumNumberOfItems = form.UseMaximumNumberOfItems;
         constraintSet.MaximumNumberOfItems = form.MaximumNumberOfItems;
         // minimum number of items
         constraintSet.MinimumNumberOfItems = form.MinimumNumberOfItems;
         constraintSet.UseMinimumNumberOfItems = form.UseMinimumNumberOfItems;
         // number of solutions kept
         constraintSet.NumberOfSolutionsKept = form.NumberOfSolutionsKept;
     }
     if (recomputeRequired)
         caseAnalysis.OnEndUpdate(null);
 }
Exemple #19
0
 public void OnNewBoxCasePalletAnalysisCreated(Document doc, BoxCasePalletAnalysis caseAnalysis)
 {
     _log.Info(string.Format("Loaded box/case/pallet analysis {0}", caseAnalysis.Name));
 }
 public ReportData(BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selCaseSolution)
 {
     _caseAnalysis = caseAnalysis;
     _selCaseSolution = selCaseSolution;
 }
 public NodeTag(NodeType type, Document document, ItemBase itemProperties)
 {
     _type = type;
     _document = document;
     _itemProperties = itemProperties;
     if (_type == NodeType.NT_CASEPALLETANALYSIS && itemProperties is CasePalletAnalysis)
     {
         _casePalletAnalysis = itemProperties as CasePalletAnalysis;
         _itemProperties = null;
     }
     else if (_type == NodeType.NT_PACKPALLETANALYSIS && itemProperties is PackPalletAnalysis)
     {
         _packPalletAnalysis = itemProperties as PackPalletAnalysis;
         _itemProperties = null;
     }
     else if (_type == NodeType.NT_BOXCASEANALYSIS && itemProperties is BoxCaseAnalysis)
     {
         _boxCaseAnalysis = itemProperties as BoxCaseAnalysis;
         _itemProperties = null;
     }
     else if (_type == NodeType.NT_BOXCASEPALLETANALYSIS && itemProperties is BoxCasePalletAnalysis)
     {
         _boxCasePalletAnalysis = itemProperties as BoxCasePalletAnalysis;
         _itemProperties = null;
     }
     else if (_type == NodeType.NT_CYLINDERPALLETANALYSIS && itemProperties is CylinderPalletAnalysis)
     {
         _cylinderPalletAnalysis = itemProperties as CylinderPalletAnalysis;
         _itemProperties = null;
     }
     else if (_type == NodeType.NT_HCYLINDERPALLETANALYSIS && itemProperties is HCylinderPalletAnalysis)
     {
         _hCylinderPalletAnalysis = itemProperties as HCylinderPalletAnalysis;
         _itemProperties = null;
     }
 }
 private BoxCasePalletSolution LoadBoxCasePalletSolution(XmlElement eltSolution, BoxCasePalletAnalysis analysis)
 {
     // title
     string stitle = eltSolution.Attributes["Title"].Value;
     // guid
     Guid guid = new Guid(eltSolution.Attributes["PalletSolutionId"].Value);
     // homogeneousLayers
     bool homogeneousLayers = string.Equals(eltSolution.Attributes["HomogeneousLayers"].Value, "true", StringComparison.CurrentCultureIgnoreCase);
     // instantiation
     BoxCasePalletSolution sol = new BoxCasePalletSolution(analysis, stitle, analysis.GetPalletSolutionDescByGuid(guid), homogeneousLayers);
     // layers
     XmlElement eltLayers = eltSolution.ChildNodes[0] as XmlElement;
     foreach (XmlNode nodeLayer in eltLayers.ChildNodes)
         sol.Add(LoadLayer(nodeLayer as XmlElement));
     return sol;
 }
 public NodeTag(NodeType type, Document doc, BoxCasePalletAnalysis caseAnalysis)
 {
     _type = type;
     _document = doc;
     _boxCasePalletAnalysis = caseAnalysis;
 }
        private void SaveCaseAnalysis(BoxCasePalletAnalysis analysis, XmlElement parentElement, XmlDocument xmlDoc)
        {
            // create analysis element
            XmlElement xmlAnalysisElt = xmlDoc.CreateElement("AnalysisCase");
            parentElement.AppendChild(xmlAnalysisElt);
            // Name
            XmlAttribute analysisNameAttribute = xmlDoc.CreateAttribute("Name");
            analysisNameAttribute.Value = analysis.Name;
            xmlAnalysisElt.Attributes.Append(analysisNameAttribute);
            // Description
            XmlAttribute analysisDescriptionAttribute = xmlDoc.CreateAttribute("Description");
            analysisDescriptionAttribute.Value = analysis.Description;
            xmlAnalysisElt.Attributes.Append(analysisDescriptionAttribute);
            // BoxId
            XmlAttribute boxIdAttribute = xmlDoc.CreateAttribute("BoxId");
            boxIdAttribute.Value = string.Format("{0}", analysis.BoxProperties.Guid);
            xmlAnalysisElt.Attributes.Append(boxIdAttribute);
            // ConstraintSet : beg
            XmlElement constraintSetElement = xmlDoc.CreateElement("ConstraintSetCase");
            xmlAnalysisElt.AppendChild(constraintSetElement);
            XmlAttribute alignedLayersAttribute = xmlDoc.CreateAttribute("AlignedLayersAllowed");
            alignedLayersAttribute.Value = string.Format("{0}", analysis.ConstraintSet.AllowAlignedLayers);
            constraintSetElement.Attributes.Append(alignedLayersAttribute);
            XmlAttribute alternateLayersAttribute = xmlDoc.CreateAttribute("AlternateLayersAllowed");
            alternateLayersAttribute.Value = string.Format("{0}", analysis.ConstraintSet.AllowAlternateLayers);
            constraintSetElement.Attributes.Append(alternateLayersAttribute);
            // allowed box positions
            XmlAttribute allowedAxisAttribute = xmlDoc.CreateAttribute("AllowedBoxPositions");
            allowedAxisAttribute.Value = analysis.ConstraintSet.AllowOrthoAxisString;
            constraintSetElement.Attributes.Append(allowedAxisAttribute);
            // allowed layer patterns
            XmlAttribute allowedPatternAttribute = xmlDoc.CreateAttribute("AllowedPatterns");
            allowedPatternAttribute.Value = analysis.ConstraintSet.AllowedPatternString;
            constraintSetElement.Attributes.Append(allowedPatternAttribute);
            // stop criterions
            if (analysis.ConstraintSet.UseMaximumCaseWeight)
            {
                XmlAttribute maximumWeightAttribute = xmlDoc.CreateAttribute("MaximumCaseWeight");
                maximumWeightAttribute.Value = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}", analysis.ConstraintSet.MaximumCaseWeight);
                constraintSetElement.Attributes.Append(maximumWeightAttribute);
            }
            if (analysis.ConstraintSet.UseMaximumNumberOfItems)
            {
                XmlAttribute maximumNumberOfItems = xmlDoc.CreateAttribute("ManimumNumberOfItems");
                maximumNumberOfItems.Value = string.Format("{0}", analysis.ConstraintSet.MaximumNumberOfItems);
                constraintSetElement.Attributes.Append(maximumNumberOfItems);
            }
            // solution filtering
            if (analysis.ConstraintSet.UseMinimumNumberOfItems)
            {
                XmlAttribute minimumNumberOfItems = xmlDoc.CreateAttribute("MinimumNumberOfItems");
                minimumNumberOfItems.Value = string.Format("{0}", analysis.ConstraintSet.MinimumNumberOfItems);
                constraintSetElement.Attributes.Append(minimumNumberOfItems);
            }
            // number of solutions to keep
            if (analysis.ConstraintSet.UseNumberOfSolutionsKept)
            {
                XmlAttribute numberOfSolutionsKept = xmlDoc.CreateAttribute("NumberOfSolutions");
                numberOfSolutionsKept.Value = string.Format("{0}", analysis.ConstraintSet.NumberOfSolutionsKept);
                constraintSetElement.Attributes.Append(numberOfSolutionsKept);
            }
            // ConstraintSet : end

            // Pallet solution descriptors
            XmlElement palletSolutionsElement = xmlDoc.CreateElement("PalletSolutionDescriptors");
            xmlAnalysisElt.AppendChild(palletSolutionsElement);
            foreach (PalletSolutionDesc desc in analysis.PalletSolutionsList)
                SavePalletSolutionDescriptor(desc, palletSolutionsElement, xmlDoc);
            // Solutions
            XmlElement solutionsElt = xmlDoc.CreateElement("CaseSolutions");
            xmlAnalysisElt.AppendChild(solutionsElt);
            int solIndex = 0;
            foreach (BoxCasePalletSolution caseSolution in analysis.Solutions)
                SaveCaseSolution(caseSolution, analysis.GetSelCaseSolutionBySolutionIndex(solIndex++), solutionsElt, xmlDoc);
        }
 public NodeTag(NodeType type, Document doc, BoxCasePalletAnalysis caseAnalysis, ItemBase itemProperties)
 {
     _type = type;
     _document = doc;
     _boxCasePalletAnalysis = caseAnalysis;
     _itemProperties = itemProperties;
     _selSolution = null;
 }
 public NodeTag(NodeType type, Document document, BoxCasePalletAnalysis caseAnalysis, SelBoxCasePalletSolution selBoxCasePalletSolution)
 {
     _type = type;
     _document = document;
     _boxCasePalletAnalysis = caseAnalysis;
     _selBoxCasePalletSolution = selBoxCasePalletSolution;
 }
 /// <summary>
 /// Creates or activate a case analysis view
 /// </summary>
 public void CreateOrActivateViewCaseAnalysis(BoxCasePalletAnalysis caseAnalysis)
 {
     // search ammong existing views
     foreach (IDocument doc in Documents)
         foreach (IView view in doc.Views)
         {
             DockContentBoxCasePalletAnalysis form = view as DockContentBoxCasePalletAnalysis;
             if (null == form) continue;
             if (caseAnalysis == form.CaseAnalysis)
             {
                 form.Activate();
                 return;
             }
         }
     // ---> not found
     // ---> create new form
     DocumentSB parentDocument = (DocumentSB)caseAnalysis.ParentDocument;
     DockContentBoxCasePalletAnalysis formCaseAnalysis = parentDocument.CreateCaseAnalysisView(caseAnalysis);
     formCaseAnalysis.Show(dockPanel, WeifenLuo.WinFormsUI.Docking.DockState.Document);
 }