Exemple #1
0
        //加载
        public void LoadXML(string xmlPath)
        {
            /*
             * await Task.Run(() =>
             * {
             *  while (htWindow.HTWindow.HalconWindow.Handle == (IntPtr)0xffffffffffffffff)
             *  {
             *      Thread.Sleep(500);
             *  }
             * });
             */
            try
            {
                XElement root = XElement.Load(xmlPath);
                XElement bond2ModelParameterNode = root.Element("Bond2ModelParameter");
                if (bond2ModelParameterNode == null)
                {
                    return;
                }
                XElement bond2ModelNode = root.Element("Bond2Models");
                if (bond2ModelNode == null)
                {
                    return;
                }
                XMLHelper.ReadParameters(bond2ModelParameterNode, bond2ModelParameter);
                (createBond2Model as CreateBond2Model).LoadReferenceData();

                bond2Models.Clear();
                bondWireRegionGroups.Clear();
                Groups.Clear();
                XElement bondWireParameterNode = root.Element("BondWireParameter");
                XMLHelper.ReadParameters(bondWireParameterNode, bondWireParameter);

                XElement bondAutoRegionsParameterNode = root.Element("BondAutoRegionsParameter"); //自动
                XMLHelper.ReadParameters(bondAutoRegionsParameterNode, bondAutoRegionsParameter); //自动

                //bond2Models.Clear();放前面
                foreach (var modelNode in bond2ModelNode.Elements("Model"))
                {
                    Bond2Model model = new Bond2Model();
                    model.ModelIdPath          = modelNode.Attribute("ModelIDPath")?.Value;
                    model.Index                = (int.Parse)(modelNode.Attribute("Index")?.Value);
                    model.RotatedImagePath     = modelNode.Element("RotatedImagePath")?.Value;
                    model.Bond2UserRegion      = UserRegion.FromXElement(modelNode.Element("Bond2ModelRegion"));
                    model.RotateLineUserRegion = UserRegion.FromXElement(modelNode.Element("RotateLineRegion"));
                    model.Bond2UserRegionDiff  = UserRegion.FromXElement(modelNode.Element("Bond2ModelRegionDiff"));//
                    XMLHelper.ReadRegion(modelNode, model.RefineUserRegions, "RefineRegions");
                    bond2Models.Add(model);
                    model.Index = bond2Models.Count;
                }
                (createBond2Model as CreateBond2Model).ModelsCount = bond2Models.Count;

                // 自动焊点区域部分
                XElement GenGroupsNode = root.Element("GenGroups");
                if (GenGroupsNode != null)
                {
                    foreach (var groupNode in GenGroupsNode.Elements("GenGroup"))
                    {
                        BondMatchAutoRegionGroup group = new BondMatchAutoRegionGroup();
                        group.Bond2UserRegion = UserRegion.FromXElement(groupNode.Element("Bond2Region"), false, bond2ModelParameter.DieImageRowOffset, bond2ModelParameter.DieImageColumnOffset);
                        group.WireUserRegion  = UserRegion.FromXElement(groupNode.Element("WireRegion"), false, bond2ModelParameter.DieImageRowOffset, bond2ModelParameter.DieImageColumnOffset);
                        //XMLHelper.ReadParameters(groupNode, group.Parameter);
                        Groups.Add(group);
                        group.Index          = Groups.Count;
                        group.Bond2_BallNums = int.Parse(groupNode.Attribute("Bond2Numbers")?.Value);
                    }
                }

                XElement bondWireGroupNode = root.Element("BondWireGroups");
                if (bondWireGroupNode == null)
                {
                    return;
                }

                foreach (var groupNode in bondWireGroupNode.Elements("BondWireGroup"))
                {
                    BondWireRegionGroup group = new BondWireRegionGroup();
                    group.Bond2UserRegion = UserRegion.FromXElement(groupNode.Element("Bond2Region"), false, bond2ModelParameter.DieImageRowOffset, bond2ModelParameter.DieImageColumnOffset);
                    group.WireUserRegion  = UserRegion.FromXElement(groupNode.Element("WireRegion"), false, bond2ModelParameter.DieImageRowOffset, bond2ModelParameter.DieImageColumnOffset);                                                                                                                                                                                         //XMLHelper.ReadParameters(groupNode, group.Parameter);
                    bondWireRegionGroups.Add(group);
                    group.Index          = bondWireRegionGroups.Count;
                    group.Bond2_BallNums = int.Parse(groupNode.Attribute("Bond2Numbers")?.Value);
                }

                (bondMatchAutoRegions as BondMatchAutoRegions).GroupsCount = Groups.Count;
                (addBondMatchRegions as AddBondMatchRegions).GroupsCount   = bondWireRegionGroups.Count;

                (createBond2Model as CreateBond2Model).Initial();

                //加载焊点检测区域及其参数
                XMLHelper.ReadRegion(root, BondVerifyUserRegions, "BondVerifyUserRegions", bond2ModelParameter.DieImageRowOffset, bond2ModelParameter.DieImageColumnOffset, false, false, false, false, true);
                //
                XElement BondVerifyModelParaNode = root.Element("BondVerifyModelPara");
                XMLHelper.ReadParameters(BondVerifyModelParaNode, BondVerifyModelPara);
                // 兼容老产品打开参数不保留 2021-0105 by wj
                if (BondVerifyUserRegions.Count() != 0)
                {
                    //更新PadUserRegions
                    for (int i = 0; i < BondVerifyUserRegions.Count; i++)
                    {
                        //检测区域内通道值设置
                        if (BondVerifyUserRegions.ElementAt(i).ChannelNames.Count() == 0)
                        {
                            BondVerifyUserRegions.ElementAt(i).ChannelNames = bond2ModelParameter.ChannelNames;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        //加载
        public void LoadXML(string xmlPath)
        {
            /*
             * await Task.Run(() =>
             * {
             *  while (htWindow.HTWindow.HalconWindow.Handle == (IntPtr)0xffffffffffffffff)
             *  {
             *      Thread.Sleep(500);
             *  }
             * });
             */
            try
            {
                XElement root = XElement.Load(xmlPath);
                XElement bondMeasureParameterNode      = root.Element("BondMeasureParameter");
                XElement bond1AutoRegionsParameterNode = root.Element("Bond1AutoRegionsParameter");//自动
                if (bondMeasureParameterNode == null)
                {
                    return;
                }
                XMLHelper.ReadParameters(bondMeasureParameterNode, bondMeasureParameter);
                XMLHelper.ReadParameters(bond1AutoRegionsParameterNode, bond1AutoRegionsParameter);//自动
                (createBondMeasureModel as CreateBondMeasureModel).LoadReferenceData();
                XMLHelper.ReadRegion(root, bondModelUserRegions, "BondModelUserRegions", 0, 0, true);

                //XMLHelper.ReadRegion(root, BondVerifyUserRegions, "BondVerifyUserRegions", bondMeasureParameter.DieImageRowOffset, bondMeasureParameter.DieImageColumnOffset);

                XMLHelper.ReadRegion(root, PadUserRegions, "PadUserRegions", bondMeasureParameter.DieImageRowOffset, bondMeasureParameter.DieImageColumnOffset, false, false, false, false, true);
                //
                XElement BondVerifyModelParaNode = root.Element("BondVerifyModelPara");
                XMLHelper.ReadParameters(BondVerifyModelParaNode, bondVerifyModelPara);
                // 兼容老产品打开参数不保留 2021-0105 by wj
                if (PadUserRegions.Count() != 0)
                {
                    //add by wj 2021-01-05
                    string regionPathName;
                    string regionName = "Pad_Regions";
                    regionPathName = $"\\{regionName}.reg";

                    HOperatorSet.ReadRegion(out HObject freeRegion, $"{ModelsBondDirectory}\\{ regionPathName}");

                    //更新PadUserRegions
                    for (int i = 0; i < PadUserRegions.Count; i++)
                    {
                        //检测区域内通道值设置
                        if (PadUserRegions.ElementAt(i).ChannelNames.Count() == 0)
                        {
                            PadUserRegions.ElementAt(i).ChannelNames = bondMeasureParameter.ChannelNames;
                        }
                        if (PadUserRegions[i].RegionType == RegionType.Region)
                        {
                            HOperatorSet.SelectObj(freeRegion, out HObject padFreeRegion, i + 1);
                            PadUserRegions[i].CalculateRegion = padFreeRegion;
                            HOperatorSet.MoveRegion(padFreeRegion, out HObject _padFreeRegion, -bondMeasureParameter.DieImageRowOffset, -bondMeasureParameter.DieImageColumnOffset);
                            PadUserRegions[i].DisplayRegion = _padFreeRegion;
                        }
                    }
                }

                XMLHelper.ReadRegion(root, Bond2UserRegion, "Bond2UserRegion", 0, 0, true);
                XMLHelper.ReadRegion(root, Bond2UserRegionDiff, "Bond2UserRegionDiff", 0, 0, true);
                XMLHelper.ReadRegion(root, RotateLineUserRegion, "RotateLineUserRegion", 0, 0, true);

                XElement BondMeasureVerifyParameterNode = root.Element("BondMeasureVerifyParameter");
                XMLHelper.ReadParameters(BondMeasureVerifyParameterNode, bondMeasureVerifyParameter);
                (createBondMeasureModel as CreateBondMeasureModel).Initial();

                bondWireRegionGroups.Clear();
                XElement bondWireGroupNode = root.Element("BondWireGroups");
                if (bondWireGroupNode == null)
                {
                    return;
                }
                //自动生成焊点区域部分
                foreach (var groupNode in bondWireGroupNode.Elements("BondWireGroup"))
                {
                    BondWireRegionGroup group = new BondWireRegionGroup();
                    group.Bond2UserRegion = UserRegion.FromXElement(groupNode.Element("Bond2Region"), false);
                    group.WireUserRegion  = UserRegion.FromXElement(groupNode.Element("WireRegion"), false);                                                                                                                                                                                         //XMLHelper.ReadParameters(groupNode, group.Parameter);
                    bondWireRegionGroups.Add(group);
                    group.Index          = bondWireRegionGroups.Count;
                    group.Bond2_BallNums = int.Parse(groupNode.Attribute("Bond2Numbers")?.Value);
                }
                (createAutoBondMeasureModel as CreateAutoBondMeasureModel).GroupsCount = bondWireRegionGroups.Count;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return;
            }
        }