//加载 public void LoadXML(string xmlPath) { // 1216 lw 此处保存产品会出错 /*await Task.Run(() => * { * while (htWindow.HTWindow.HalconWindow.Handle == (IntPtr)0xffffffffffffffff) * { * Thread.Sleep(500); * } * });*/ IsLoadXML = true; try { XElement root = XElement.Load(xmlPath); XElement wireParameterNode = root.Element("WireParameter"); if (wireParameterNode == null) { return; } XMLHelper.ReadParameters(wireParameterNode, wireParameter); //从金线自动生成区域加载参考信息 (wireAddAutoRegion as WireAddAutoRegion).LoadReferenceData(); //----------------------------------------------------------------------------------------------------------------------------- XElement wireRegionsGroupNode = root.Element("WireRegionsGroup"); if (wireRegionsGroupNode == null) { return; } wireRegionsGroup.Clear(); foreach (var groupNode in wireRegionsGroupNode.Elements("Group")) { WireRegionsGroup group = new WireRegionsGroup(); group.BondOnICUserRegions = UserRegion.FromXElement(groupNode.Element("BondOnICUserRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false); group.BondOnFrameUserRegions = UserRegion.FromXElement(groupNode.Element("BondOnFrameUserRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false); //group.RefLineUserRegions = UserRegion.FromXElement(groupNode.Element("RefLineUserRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset); XMLHelper.ReadRegion(groupNode, group.LineUserRegions, "LineUserRegions", wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, true, false, false); //1212 金线检测区域的通道值设置-生成线 for (int i = 0; i < group.LineUserRegions.Count(); i++) { if (group.LineUserRegions.ElementAt(i).ChannelNames.Count() == 0) { group.LineUserRegions.ElementAt(i).ChannelNames = wireParameter.ChannelNames; // currentChannelName int tmp_ind; tmp_ind = group.LineUserRegions.ElementAt(i).ImageIndex; } } wireRegionsGroup.Add(group); group.Index = wireRegionsGroup.Count; } (wireAddRegion as WireAddRegion).GroupsCount = wireRegionsGroup.Count; //-----加载自动生成金线界面 //加载起始焊点区域归属 startBondOnRecipes.Clear(); XMLHelper.ReadOnRecipes(root, startBondOnRecipes, "StartBondOnRecipes"); XMLHelper.ReadRegion(root, startBallAutoUserRegion, "StartBallAutoUserRegion", wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false, false); // add lw HTuple hv__filePath = new HTuple(), hv_FileExists = new HTuple(); HTuple Startreg_index_after_sort = new HTuple(); hv__filePath = ModelsDirectory + "Startreg_index_after_sort.tup"; HOperatorSet.FileExists(hv__filePath, out hv_FileExists); if ((int)(hv_FileExists) != 0) { HOperatorSet.ReadTuple(hv__filePath, out Startreg_index_after_sort); } else { Startreg_index_after_sort = HTuple.TupleGenSequence(1, startBallAutoUserRegion.Count, 1); } for (int i = 0; i < Startreg_index_after_sort.Length; i++) { startBallAutoUserRegion[i].Index_ini = Startreg_index_after_sort[i]; } if (startBondOnRecipes.Count == 0) { IsLoadXML = false; if (wireParameter.IsEnableStartVirtualBond == true) { wireParameter.IsEnableStartVirtualBond = false; wireParameter.IsEnableStartVirtualBond = true; } if (wireParameter.IsEnableStartVirtualBond == false) { wireParameter.IsEnableStartVirtualBond = true; wireParameter.IsEnableStartVirtualBond = false; } } //加载结束焊点归属 endBondOnRecipes.Clear(); XMLHelper.ReadOnRecipes(root, endBondOnRecipes, "EndBondOnRecipes"); XMLHelper.ReadRegion(root, stopBallAutoUserRegion, "StopBallAutoUserRegion", wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false, false); // add lw HTuple Stopreg_index_after_sort = new HTuple(); hv__filePath = ModelsDirectory + "Stopreg_index_after_sort.tup"; HOperatorSet.FileExists(hv__filePath, out hv_FileExists); if ((int)(hv_FileExists) != 0) { HOperatorSet.ReadTuple(hv__filePath, out Stopreg_index_after_sort); } else { Stopreg_index_after_sort = HTuple.TupleGenSequence(1, stopBallAutoUserRegion.Count, 1); } for (int i = 0; i < Stopreg_index_after_sort.Length; i++) { stopBallAutoUserRegion[i].Index_ini = Stopreg_index_after_sort[i]; } if (endBondOnRecipes.Count == 0) { IsLoadXML = false; if (wireParameter.IsEnableEndVirtualBond == true) { wireParameter.IsEnableEndVirtualBond = false; wireParameter.IsEnableEndVirtualBond = true; } if (wireParameter.IsEnableEndVirtualBond == false) { wireParameter.IsEnableEndVirtualBond = true; wireParameter.IsEnableEndVirtualBond = false; } } //---------------生成界面中金线 (wireAddAutoRegion as WireAddAutoRegion).UpdateStartandStopLineRegions(true); //金线模板Model XElement wireRegionsModelGroupNode = root.Element("WireRegionsModelGroup"); if (wireRegionsModelGroupNode == null) { return; } wireRegionsModelGroup.Clear(); foreach (var modelGroupNode in wireRegionsModelGroupNode.Elements("ModelGroup")) { WireAutoRegionGroup modelGroup = new WireAutoRegionGroup(); modelGroup.ModelStartUserRegions = UserRegion.FromXElement(modelGroupNode.Element("ModelStartUserRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false); modelGroup.ModelStopUserRegions = UserRegion.FromXElement(modelGroupNode.Element("ModelStopUserRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false); modelGroup.RefLineModelRegions = UserRegion.FromXElement(modelGroupNode.Element("RefLineModelRegions"), false, wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, false); XMLHelper.ReadRegion(modelGroupNode, modelGroup.LineModelRegions, "LineModelRegions", wireParameter.DieImageRowOffset, wireParameter.DieImageColumnOffset, false, false, true, false); //1212 金线检测区域的通道值设置-模板线 for (int i = 0; i < modelGroup.LineModelRegions.Count(); i++) { if (modelGroup.LineModelRegions.ElementAt(i).ChannelNames.Count() == 0) { modelGroup.LineModelRegions.ElementAt(i).ChannelNames = wireParameter.ChannelNames; int tmp_ind; tmp_ind = modelGroup.LineModelRegions.ElementAt(i).ImageIndex; } } wireRegionsModelGroup.Add(modelGroup); modelGroup.Index = wireRegionsModelGroup.Count; modelGroup.SelectModelNumber = (int)modelGroupNode.FirstAttribute.NextAttribute; } (wireAddAutoRegion as WireAddAutoRegion).ModelGroupsCount = wireRegionsModelGroup.Count; //恢复自动生成金线起始区域金线ModelType add by wj for (int i = 0; i < wireParameter.WireRegModelType.Length; i++) { startBallAutoUserRegion[i].ModelGroups = wireRegionsModelGroup; startBallAutoUserRegion[i].CurrentModelGroup = wireRegionsModelGroup.ElementAt(wireParameter.WireRegModelType[i] - 1); } //1109 赋值初始排序 if (wireParameter.WireAutoIndex_sorted_start.Length == startBallAutoUserRegion.Count) { for (int i = 0; i < wireParameter.WireAutoIndex_sorted_start.Length; i++) { startBallAutoUserRegion[i].Index_ini = wireParameter.WireAutoIndex_sorted_start[i]; } } if (wireParameter.WireAutoIndex_sorted_stop.Length == stopBallAutoUserRegion.Count) { for (int i = 0; i < wireParameter.WireAutoIndex_sorted_stop.Length; i++) { stopBallAutoUserRegion[i].Index_ini = wireParameter.WireAutoIndex_sorted_stop[i]; } } //1029 default model setting if (wireRegionsModelGroup.Count > 0) { (wireAddAutoRegion as WireAddAutoRegion).CurrentModelGroup = (wireAddAutoRegion as WireAddAutoRegion).ModelGroups.ElementAt(0); } if ((wireAddAutoRegion as WireAddAutoRegion).StartBallAutoUserRegion.Count > 0) { (wireAddAutoRegion as WireAddAutoRegion).WireParameter.IsStartPickUp = true; } if ((wireAddAutoRegion as WireAddAutoRegion).StopBallAutoUserRegion.Count > 0) { (wireAddAutoRegion as WireAddAutoRegion).WireParameter.IsStopPickUp = true; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }