public void Display(HWindow windowHandle)
        {
            windowHandle.SetColor("magenta");
            LineRegions?.DispObj(windowHandle);


            windowHandle.SetColor("green");
            CrossedUsed?.DispObj(windowHandle);

            windowHandle.SetDraw("margin");
            windowHandle.SetColor("orange");
            FindLineRects?.DispObj(windowHandle);

            windowHandle.SetColor("green");
            windowHandle.SetDraw("fill");
            windowHandle.SetLineWidth(3);
            Edges?.DispObj(windowHandle);
            windowHandle.SetLineWidth(1);
            windowHandle.SetDraw("margin");

            windowHandle.SetColor("red");
            Line.DisplayGraphics(windowHandle);

            windowHandle.SetColor("firebrick");
            DisplayPointMarkers(windowHandle);
        }
Example #2
0
 public FindLineManager(ISnackbarMessageQueue messageQueue = null)
 {
     CrossesIgnored.GenEmptyObj();
     LineRegions.GenEmptyObj();
     FindLineRects.GenEmptyObj();
     Edges.GenEmptyObj();
     MessageQueue = messageQueue;
 }
Example #3
0
 public FindLineManager(Dictionary <string, FindLineFeeding> findLineFeedings,
                        ISnackbarMessageQueue messageQueue = null)
 {
     FindLineFeedings = findLineFeedings;
     CrossesIgnored.GenEmptyObj();
     LineRegions.GenEmptyObj();
     FindLineRects.GenEmptyObj();
     Edges.GenEmptyObj();
     MessageQueue = messageQueue;
 }
Example #4
0
        private void DisplayCrosses(HWindow windowHandle)
        {
            windowHandle.SetDraw("margin");
            windowHandle.SetLineWidth(1);



            windowHandle.SetColor("red");
            CrossesIgnored?.DispObj(windowHandle);

            windowHandle.SetColor("magenta");
            windowHandle.SetLineWidth(3);
            FindLineRects?.DispObj(windowHandle);


            windowHandle.SetColor("blue");
            LineRegions?.DispObj(windowHandle);
        }
Example #5
0
        public void SaveXML()
        {
            try
            {
                Directory.GetFiles(ModelsDirectory).ToList().ForEach(File.Delete);
                XElement root = new XElement("Recipe");
                XMLHelper.AddIdentifier(root, IdentifyString);
                //
                XElement wireParameterNode = new XElement("WireParameter");
                XMLHelper.AddParameters(wireParameterNode, wireParameter, IdentifyString);

                //保存起始焊点归属
                XMLHelper.AddOnRecipes(root, startBondOnRecipes, "StartBondOnRecipes");
                XMLHelper.AddRegion(root, startBallAutoUserRegion, "StartBallAutoUserRegion", false, false, false, false);

                //保存结束焊点归属
                XMLHelper.AddOnRecipes(root, endBondOnRecipes, "EndBondOnRecipes");
                XMLHelper.AddRegion(root, stopBallAutoUserRegion, "StopBallAutoUserRegion", false, false, false, false);

                //金线模板组合
                XElement wireRegionsModelGroupNode = new XElement("WireRegionsModelGroup");
                foreach (var modelGroup in wireRegionsModelGroup)
                {
                    XElement modelGroupNode = new XElement("ModelGroup");
                    //组号索引
                    modelGroupNode.Add(new XAttribute("Index", modelGroup.Index.ToString()));
                    //金线模板序号选择
                    modelGroupNode.Add(new XAttribute("SelectModelNumber", modelGroup.SelectModelNumber.ToString()));
                    //模板起始焊点,结束焊点,焊点点金线,金线检测区域带参数
                    modelGroupNode.Add(modelGroup.ModelStartUserRegions?.ToXElement("ModelStartUserRegions"));
                    modelGroupNode.Add(modelGroup.ModelStopUserRegions?.ToXElement("ModelStopUserRegions"));
                    modelGroupNode.Add(modelGroup.RefLineModelRegions?.ToXElement("RefLineModelRegions"));
                    XMLHelper.AddRegion(modelGroupNode, modelGroup.LineModelRegions, "LineModelRegions", false, false, true, false);
                    wireRegionsModelGroupNode.Add(modelGroupNode);
                }

                //-----金线检测区域精修及保存区域
                XElement wireRegionsGroupNode = new XElement("WireRegionsGroup");
                foreach (var group in wireRegionsGroup)
                {
                    XElement groupNode = new XElement("Group");
                    groupNode.Add(new XAttribute("Index", group.Index.ToString()));
                    groupNode.Add(group.BondOnICUserRegions?.ToXElement("BondOnICUserRegions"));
                    groupNode.Add(group.BondOnFrameUserRegions?.ToXElement("BondOnFrameUserRegions"));
                    //groupNode.Add(group.RefLineUserRegions?.ToXElement("RefLineUserRegions"));
                    XMLHelper.AddRegion(groupNode, group.LineUserRegions, "LineUserRegions", false, true, false, false);
                    wireRegionsGroupNode.Add(groupNode);
                }


                root.Add(wireParameterNode);
                root.Add(wireRegionsModelGroupNode);
                root.Add(wireRegionsGroupNode);
                root.Save(XmlPath);

                HOperatorSet.GenEmptyObj(out HObject LineRegions);
                HTuple LineRegionsNumbers = new HTuple();
                HOperatorSet.WriteRegion(Algorithm.Region.ConcatRegion(wireRegionsGroup.Select(r => r.BondOnFrameUserRegions).Where(r => r.IsEnable).Select(r => r.CalculateRegion)), ModelsDirectory + "Start_Regions.reg");
                HOperatorSet.WriteRegion(Algorithm.Region.ConcatRegion(wireRegionsGroup.Select(r => r.BondOnICUserRegions).Where(r => r.IsEnable).Select(r => r.CalculateRegion)), ModelsDirectory + "Stop_Regions.reg");
                foreach (var group in wireRegionsGroup)
                {
                    LineRegions        = LineRegions.ConcatObj(Algorithm.Region.ConcatRegion((group.LineUserRegions).Where(r => r.IsEnable).Select(r => r.CalculateRegion)));
                    LineRegionsNumbers = LineRegionsNumbers.TupleConcat(group.LineUserRegions.Count);
                }

                if (wireParameter.ImageCountChannels == 1)
                {
                    HOperatorSet.WriteTuple(new HTuple(1), ModelsDirectory + "Image_Index.tup");
                }
                else if (wireParameter.ImageCountChannels > 1)
                {
                    HOperatorSet.WriteTuple(wireParameter.ImageIndex + 1, ModelsDirectory + "Image_Index.tup");
                }

                HOperatorSet.WriteRegion(LineRegions, ModelsDirectory + "Inspect_Regions.reg");
                HOperatorSet.WriteTuple(LineRegionsNumbers, RecipeDirectory + "InspectRegNum.tup");
                HOperatorSet.WriteTuple(LineRegionsNumbers, ModelsDirectory + "InspectRegNum.tup");//Recipe下
                HOperatorSet.WriteTuple(wireParameter.IsTailInspect == false ? 0 : 1, ModelsDirectory + "IsInspectTail.tup");

                //保存起始焊点区域归属
                HTuple StartRegBelongToWhat = new HTuple();
                foreach (var StartonRecipe in startBondOnRecipes)
                {
                    if (StartonRecipe.IsSelected)
                    {
                        HOperatorSet.TupleConcat(StartRegBelongToWhat, new HTuple(StartonRecipe.Name), out StartRegBelongToWhat);
                    }
                }
                HOperatorSet.WriteTuple(StartRegBelongToWhat, ModelsDirectory + "StartRegBelongToWhat.tup");
                //1104 改成存带拾取顺序的组合焊点
                HOperatorSet.WriteTuple(new HTuple(wireParameter.StartBondonRecipesIndexs), ModelsDirectory + "StartRegBelongToWhat.tup");

                //保存结束焊点区域归属
                HTuple StopRegBelongToWhat = new HTuple();
                foreach (var StoponRecipe in endBondOnRecipes)
                {
                    if (StoponRecipe.IsSelected)
                    {
                        HOperatorSet.TupleConcat(StopRegBelongToWhat, new HTuple(StoponRecipe.Name), out StopRegBelongToWhat);
                    }
                }
                HOperatorSet.WriteTuple(StopRegBelongToWhat, ModelsDirectory + "StopRegBelongToWhat.tup");
                //1104 改成存带拾取顺序的组合焊点
                HOperatorSet.WriteTuple(new HTuple(wireParameter.StopBondonRecipesIndexs), ModelsDirectory + "StopRegBelongToWhat.tup");

                //1104 存储焊点组合后的重新排序信息
                HTuple Startreg_index_after_sort = new HTuple();
                HTuple ni;
                ni = 0;
                bool start_group_sort = false;
                foreach (var start_reg in startBallAutoUserRegion)
                {
                    //HOperatorSet.TupleConcat(Startreg_index_after_sort, new HTuple(start_reg.Index), out Startreg_index_after_sort);
                    Startreg_index_after_sort[ni] = start_reg.Index_ini;
                    ni++;
                    if (ni != start_reg.Index_ini)
                    {
                        start_group_sort = true;
                    }
                }
                HOperatorSet.WriteTuple(Startreg_index_after_sort, ModelsDirectory + "Startreg_index_after_sort.tup");
                HOperatorSet.WriteTuple(start_group_sort == false ? 0 : 1, ModelsDirectory + "Startreg_need_sort.tup");

                HTuple Stopreg_index_after_sort = new HTuple();
                ni = 0;
                bool stop_group_sort = false;
                foreach (var stop_reg in stopBallAutoUserRegion)
                {
                    //HOperatorSet.TupleConcat(Stopreg_index_after_sort, new HTuple(stop_reg.Index), out Stopreg_index_after_sort);
                    Stopreg_index_after_sort[ni] = stop_reg.Index_ini;
                    ni++;
                    if (ni != stop_reg.Index_ini)
                    {
                        stop_group_sort = true;
                    }
                }
                HOperatorSet.WriteTuple(Stopreg_index_after_sort, ModelsDirectory + "Stopreg_index_after_sort.tup");
                HOperatorSet.WriteTuple(stop_group_sort == false ? 0 : 1, ModelsDirectory + "Stopreg_need_sort.tup");

                HOperatorSet.WriteTuple(new HTuple(wireParameter.IsEnableStartVirtualBond).TupleConcat(new HTuple(wireParameter.IsEnableEndVirtualBond)), ModelsDirectory + "IsEnableVirtualBond.tup");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }