/// <summary>
        /// Original => updateEdges()
        /// <para>顯示測量結果</para>
        /// </summary>
        private void showMeasureResult()
        {
            HObject edges = mAssistant.getMeasureResults();

            if (edges.IsInitialized())
            {
                mView.changeGraphicSettings(GraphicsContext.GC_COLOR, _edgeColor);
                mView.changeGraphicSettings(GraphicsContext.GC_LINEWIDTH, _lineWidth);
                mView.addIconicVar(edges);
            }
        }
Example #2
0
        public EditHalconFormBase(bool showResult)
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;
            hWindow            = new HWindowControl();
            hWindow.Dock       = DockStyle.Fill;
            this.tabCurrent.Controls.Clear();
            this.tabCurrent.Controls.Add(hWindow);

            mView = new HWndCtrl(this.hWindow);
            mView.changeGraphicSettings(GraphicsContext.GC_LINESTYLE, new HTuple());

            createModelWindowMode = Color.RoyalBlue;
            trainModelWindowMode  = Color.Chartreuse;

            roiController              = new ROIController();
            roiController.ROISelected += RoiController_ROISelected;
            roiController.setROISign(ROIController.MODE_ROI_POS);

            mView.NotifyIconObserver       = new IconicDelegate(UpdateViewData);
            roiController.NotifyRCObserver = new IconicDelegate(UpdateViewData);

            mView.useROIController(roiController);
            mView.setViewState(HWndCtrl.MODE_VIEW_ZOOM_MOVE);

            halconEditable = this as IHalconEditable;

            this.nudSettlingTime.Maximum = 1000;

            this.btnStop.Visible     = showResult;
            this.btnIgnore.Visible   = showResult;
            this.chxFixedROI.Checked = showResult;
        }
Example #3
0
        public bool Run_Region(ExecuteBuffer _executeBuffer, out 字符串GVName_halcon outResult, HWndCtrl hWndCtrl)
        {
            //   outexecutebuffer = _executeBuffer;

            HObject outImage;

            outResult = new 字符串GVName_halcon();
            HOperatorSet.GenEmptyObj(out outImage);
            if (!_executeBuffer.imageBuffer.ContainsKey(this.cbb_image.SelectedItem.ToString() + ".img"))
            {
                MessageBox.Show("感兴趣区域:无法找到输入图像");
                return(false);
            }
            if (_executeBuffer.imageBuffer[this.cbb_image.SelectedItem.ToString() + ".img"] == null)
            {
                MessageBox.Show("感兴趣区域:无法找到输入图像");
                return(false);
            }
            HTuple  DataCodeHandle, DecodedDataStrings;
            HObject SymbolXLDs;

            HOperatorSet.GenEmptyObj(out SymbolXLDs);

            HOperatorSet.CreateBarCodeModel(new HTuple(), new HTuple(), out DataCodeHandle);
            HOperatorSet.FindBarCode(_executeBuffer.imageBuffer[this.cbb_image.SelectedItem.ToString() + ".img"], out SymbolXLDs, DataCodeHandle, this.comboBox_type.SelectedItem.ToString(), out DecodedDataStrings);
            outResult.字符串 = DecodedDataStrings;
            hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, "green");
            hWndCtrl.addIconicVar(SymbolXLDs);
            hWndCtrl.repaint();
            return(true);
        }
Example #4
0
 public void ResetView()
 {
     lock (globalLock){
         try{
             foreach (var item in hObjectList)
             {
                 if (item != null)
                 {
                     item.Dispose();
                 }
             }
             hObjectList.Clear();
             viewController.resetAll();
             viewController.clearList();
             viewController.changeGraphicSettings(GraphicsContext.GC_LINESTYLE, new HTuple());
         }
         catch
         { }
     }
 }
Example #5
0
        public bool Run_show(ExecuteBuffer _executeBuffer, 模板GVName_halcon Model_result, Dictionary <int, PointName> Pointlist, HWndCtrl hWndCtrl, out string out_info)
        {
            int number_source = this.cbb_Inputsource.SelectedIndex;

            out_info = "";
            if (number_source == 0)
            {
                if (Model_result == null)
                {
                    MessageBox.Show("点位显示:  输入为空,其中没有点位");
                    out_info = "点位显示:  输入为空,其中没有点位";
                    return(false);
                }
                HTuple size = 10;

                if (Model_result.点X.TupleLength() > 0)
                {
                    if (linecheck.Checked)
                    {
                        HObject line_match;
                        HOperatorSet.GenEmptyObj(out line_match);
                        // HOperatorSet.GenRegionLine(out line_match, (double)Model_result.点Y[0], (double)Model_result.点X[0], (double)Model_result.点Y[1], (double)Model_result.点X[1]);
                        HOperatorSet.GenContourPolygonXld(out line_match, Model_result.点X, Model_result.点Y);
                        hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                        hWndCtrl.addIconicVar(line_match);
                        hWndCtrl.repaint();
                        out_info = "点位显示:  完成";
                        return(true);
                    }
                    else
                    {
                        HObject cross;
                        HOperatorSet.GenEmptyObj(out cross);
                        HOperatorSet.GenCrossContourXld(out cross, Model_result.点Y, Model_result.点X, size, Model_result.角度Angle);

                        hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                        hWndCtrl.addIconicVar(cross);
                        hWndCtrl.repaint();
                        out_info = "点位显示:  完成";
                        return(true);
                    }
                }
                else
                {
                    out_info = "点位显示:  没有可以显示的点位";
                }
            }
            else
            {
                int number_check = Convert.ToInt32(this.textBox1.Text.ToString());
                if (!Pointlist.ContainsKey(number_check))
                {
                    MessageBox.Show("点位显示:  输入为空,其中没有点位");
                    out_info = "点位显示:  输入为空,其中没有点位";
                    return(false);
                }
                HTuple size1 = 20;

                if (Pointlist[number_check].点X.TupleLength() > 0)
                {
                    if (linecheck.Checked)
                    {
                        HObject line;
                        HOperatorSet.GenEmptyObj(out line);
                        // HOperatorSet.GenRegionLine(out line, (double)Pointlist[number_check].点Y[0], (double)Pointlist[number_check].点X[0], (double)Pointlist[number_check].点Y[1], (double)Pointlist[number_check].点X[1]);
                        HOperatorSet.GenContourPolygonXld(out line, Pointlist[number_check].点X, Pointlist[number_check].点Y);
                        hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                        hWndCtrl.addIconicVar(line);
                        hWndCtrl.repaint();
                        out_info = "点位显示:  完成";
                        return(true);
                    }
                    else
                    {
                        HObject cross;
                        HOperatorSet.GenEmptyObj(out cross);
                        HOperatorSet.GenCrossContourXld(out cross, Pointlist[number_check].点Y, Pointlist[number_check].点X, size1, 0);

                        hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                        hWndCtrl.addIconicVar(cross);
                        hWndCtrl.repaint();
                        out_info = "点位显示:  完成";
                        return(true);
                    }
                }
                else
                {
                    out_info = "点位显示:  没有可以显示的点位";
                }
            }



            return(false);
        }
Example #6
0
        /*************************************************************************
         * Change the graphical context regarding the color mode
         * /**************************************************************************/
        private void ColorComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            string val = (string)ColorComboBox.SelectedItem;

            if (!locked)
            {
                switch (val)
                {
                case "colored3":
                    viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 3);
                    break;

                case "colored6":
                    viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 6);
                    break;

                case "colored12":
                    viewControl.changeGraphicSettings(GraphicsContext.GC_COLORED, 12);
                    break;

                default:
                    viewControl.changeGraphicSettings(GraphicsContext.GC_COLOR, val);
                    break;
                }
            }
        }
 /// <summary>
 /// Changes the current graphical context by setting the specified mode
 /// (constant starting by GC_*) to the specified value.
 /// </summary>
 /// <param name="mode">
 /// Constant that is provided by the class GraphicsContext
 /// and describes the mode that has to be changed. Actually
 /// you can set up following properties of graphical context
 /// using this function:
 /// GraphicsContext.GC_COLOR    (see dev_set_color)
 /// GraphicsContext.GC_DRAWMODE (see set_draw)
 /// GraphicsContext.GC_SHAPE    (see set_shape)
 /// GraphicsContext.GC_LUT      (see set_lut)
 /// GraphicsContext.GC_PAINT    (see set_paint)
 /// </param>
 /// <param name="val">
 /// Value, provided as a string,
 /// the mode is to be changed to, e.g., "blue"
 /// </param>
 public void ChangeGraphicSettings(string mode, string val)
 {
     hWndControl.changeGraphicSettings(mode, val);
 }
Example #8
0
        public bool Find_halcon_line(ExecuteBuffer _executeBuffer, HWndCtrl hWndCtrl, 模板GVName_halcon Model_result, Dictionary <int, PointName> Point_temp_result, out string result_info, out HTuple Row1, out HTuple Column1, out HTuple Row2, out HTuple Column2, bool show_info)
        {
            HTuple MetrologyHandle;
            HTuple pic_wid, pic_height;

            Row1        = new HTuple();
            Column1     = new HTuple();
            Row2        = new HTuple();
            Column2     = new HTuple();
            result_info = "";
            HOperatorSet.CreateMetrologyModel(out MetrologyHandle);
            if (!_executeBuffer.imageBuffer.ContainsKey(this.Threshold_image.SelectedItem.ToString() + ".img"))
            {
                //     MessageBox.Show("查找直线: 输入图像已经不存在,请重置设置输入图像");
                result_info = " 查找直线: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }
            if (_executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"] == null)
            {
                //     MessageBox.Show("查找直线: image参数为空或者未赋值");
                result_info = " 查找直线: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }
            HObject imagein = _executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"];

            HOperatorSet.GetImageSize(imagein, out pic_wid, out pic_height);
            HOperatorSet.SetMetrologyModelImageSize(MetrologyHandle, pic_wid, pic_height);
            HTuple Index;
            HTuple trow1, trow2, tcol1, tcol2;

            if (checkBox_line.Checked)
            {
                if (xrow1 == null || xrow2 == null || xcol1 == null || xcol2 == null)
                {
                    //    MessageBox.Show("查找直线:未确认线位置");
                    result_info = " 查找直线: 未确认线位置";
                    return(false);
                }
                else
                {
                    trow1 = xrow1;
                    tcol1 = xcol1;
                    trow2 = xrow2;
                    tcol2 = xcol2;
                }
            }
            else
            {
                if (this.cbb_source1.SelectedIndex == 0)
                {
                    if (Model_result == null)
                    {
                        //      MessageBox.Show("查找直线:匹配列表为空,请设置");
                        result_info = " 查找直线: 匹配列表为空,请设置";
                        return(false);
                    }
                    if (Model_result.点X.TupleLength() < 1)
                    {
                        //    MessageBox.Show("查找直线:匹配列表为空,请设置");
                        result_info = " 查找直线: 匹配列表为空,请设置";
                        return(false);
                    }
                    trow1 = Model_result.点Y[0];
                    tcol1 = Model_result.点X[0];
                }
                else
                {
                    int number1 = Convert.ToInt32(this.tb_value1.Text);
                    if (!Point_temp_result.ContainsKey(number1))
                    {
                        //           MessageBox.Show("查找直线:全局列表点无此点,请设置");
                        result_info = " 查找直线: 全局列表无此点,请设置";
                        return(false);
                    }
                    else
                    {
                        trow1 = Point_temp_result[number1].点Y;
                        tcol1 = Point_temp_result[number1].点X;
                    }
                }
                int number2 = Convert.ToInt32(this.tb_value2.Text);
                if (!Point_temp_result.ContainsKey(number2))
                {
                    //      MessageBox.Show("查找直线:全局列表点无此点,请设置");
                    result_info = " 查找直线: 全局列表无此点,请设置";
                    return(false);
                }
                else
                {
                    trow2 = Point_temp_result[number2].点Y;
                    tcol2 = Point_temp_result[number2].点X;
                }
            }

            HOperatorSet.AddMetrologyObjectLineMeasure(MetrologyHandle, trow1, tcol1, trow2, tcol2, Convert.ToInt32(this.measure_length1.Text.ToString()), Convert.ToInt32(this.measure_length2.Text.ToString()),
                                                       1, Convert.ToInt32(this.measure_threshold.Text.ToString()), new HTuple(), new HTuple(), out Index);
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_transition", this.cbb_transition.SelectedItem.ToString());
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_measures", Convert.ToInt32(this.num_measure.Text.ToString()));
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_instances", 40);
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_sigma", 1);

            //HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_threshold",50);
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_interpolation", "bicubic");
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_select", this.cbb_measure_select.SelectedItem.ToString());
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "min_score", Convert.ToDouble(this.min_score.Text));
            HOperatorSet.ApplyMetrologyModel(imagein, MetrologyHandle);
            HObject Contours, Cross;
            HTuple  Rowx, Columnx;

            HOperatorSet.GetMetrologyObjectMeasures(out Contours, MetrologyHandle, "all", "all", out Rowx, out Columnx);
            HOperatorSet.GenCrossContourXld(out Cross, Rowx, Columnx, 6, 0.785398);
            HTuple hv_Parameter = null;

            //得到线的起点和终点坐标并显示出来
            HOperatorSet.GetMetrologyObjectResult(MetrologyHandle, "all", "all", "result_type",
                                                  "all_param", out hv_Parameter);
            if (hv_Parameter.TupleLength() == 0)
            {
                result_info = " 查找直线: 在指定位置,找直线失败";
                //      MessageBox.Show("未找到直线");
                return(false);
            }
            int line_count = hv_Parameter.TupleLength() / 4;

            double[] Row_1    = new double[line_count];
            double[] Column_1 = new double[line_count];
            double[] Row_2    = new double[line_count];
            double[] Column_2 = new double[line_count];

            for (int imx = 0; imx < line_count; imx++)
            {
                Row_1[imx]    = hv_Parameter[imx * 4 + 1].D;
                Column_1[imx] = hv_Parameter[imx * 4].D;
                Row_2[imx]    = hv_Parameter[imx * 4 + 3].D;
                Column_2[imx] = hv_Parameter[imx * 4 + 2].D;
            }
            Row1    = (HTuple)Row_1;
            Column1 = (HTuple)Column_1;
            Row2    = (HTuple)Row_2;
            Column2 = (HTuple)Column_2;

            HObject ho_Contour;

            HOperatorSet.GenEmptyObj(out ho_Contour);
            ho_Contour.Dispose();
            HOperatorSet.GetMetrologyObjectResultContour(out ho_Contour, MetrologyHandle,
                                                         "all", "all", 1.5);


            HOperatorSet.ClearMetrologyModel(MetrologyHandle);
            if (show_info)
            {
                hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                hWndCtrl.addIconicVar(Cross);
                hWndCtrl.addIconicVar(Contours);
            }
            hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
            hWndCtrl.addIconicVar(ho_Contour);
            hWndCtrl.repaint();
            return(true);
        }
Example #9
0
        public bool Find_halcon_circle(ExecuteBuffer _executeBuffer, HWndCtrl hWndCtrl, 模板GVName_halcon Model_result, Dictionary <int, PointName> Point_temp_result, out string result_info, out HTuple Row, out HTuple Column, out HTuple Radius, bool show_info)
        {
            HTuple MetrologyHandle;
            HTuple pic_wid, pic_height;

            Row         = new HTuple();
            Column      = new HTuple();
            Radius      = new HTuple();
            result_info = "";
            HOperatorSet.CreateMetrologyModel(out MetrologyHandle);
            if (!_executeBuffer.imageBuffer.ContainsKey(this.Threshold_image.SelectedItem.ToString() + ".img"))
            {
                MessageBox.Show("查找圆: 输入图像已经不存在,请重置设置输入图像");
                result_info = " 查找圆: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }
            if (_executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"] == null)
            {
                MessageBox.Show("查找圆: image参数为空或者未赋值");
                result_info = " 查找圆: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }

            /*
             * if (xrow == null || xcol == null || xradius == null)
             * {
             *  MessageBox.Show("查找圆: 未确定圆位置");
             *  result_info = " 查找圆: 未确定圆位置";
             *  return false;
             * }*/
            HObject imagein = _executeBuffer.imageBuffer[this.Threshold_image.SelectedItem.ToString() + ".img"];

            HOperatorSet.GetImageSize(imagein, out pic_wid, out pic_height);
            HOperatorSet.SetMetrologyModelImageSize(MetrologyHandle, pic_wid, pic_height);
            HTuple Index;

            HTuple trow, tcol, tradius;

            if (this.checkBox_circle.Checked)
            {
                if (xrow == null || xcol == null || xradius == null)
                {
                    MessageBox.Show("查找直线:未确认线位置");
                    result_info = " 查找直线: 未确认线位置";
                    return(false);
                }
                else if (xrow.D == 0 && xcol.D == 0 && xradius.D == 0)
                {
                    MessageBox.Show("查找直线:未确认线位置");
                    result_info = " 查找直线: 未确认线位置";
                    return(false);
                }
                else
                {
                    trow    = xrow;
                    tcol    = xcol;
                    tradius = xradius;
                }
            }
            else
            {
                tradius = Convert.ToDouble(this.textBox_radius.Text);
                if (this.cbb_source1.SelectedIndex == 0)
                {
                    if (Model_result == null)
                    {
                        MessageBox.Show("查找圆:匹配列表为空,请设置");
                        result_info = " 查找圆: 匹配列表为空,请设置";
                        return(false);
                    }
                    if (Model_result.点X.TupleLength() < 1)
                    {
                        MessageBox.Show("查找圆:匹配列表为空,请设置");
                        result_info = " 查找圆: 匹配列表为空,请设置";
                        return(false);
                    }
                    trow = Model_result.点Y[0];
                    tcol = Model_result.点X[0];
                }
                else
                {
                    int number1 = Convert.ToInt32(this.tb_value1.Text);
                    if (!Point_temp_result.ContainsKey(number1))
                    {
                        MessageBox.Show("查找圆:全局列表点无此点,请设置");
                        result_info = " 查找圆: 全局列表无此点,请设置";
                        return(false);
                    }
                    else
                    {
                        trow = Point_temp_result[number1].点Y;
                        tcol = Point_temp_result[number1].点X;
                    }
                }
            }



            HOperatorSet.AddMetrologyObjectCircleMeasure(MetrologyHandle, trow, tcol, tradius, Convert.ToInt32(this.measure_length1.Text.ToString()), Convert.ToInt32(this.measure_length2.Text.ToString()), 1, Convert.ToInt32(this.measure_threshold.Text.ToString()), new HTuple(), new HTuple(), out Index);
            //    HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_transition","negative");
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_transition", this.cbb_transition.SelectedItem.ToString());
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_select", this.cbb_measure_select.SelectedItem.ToString());
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_measures", Convert.ToInt32(this.num_measure.Text.ToString()));
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "num_instances", 40);
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_sigma", 1);
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "measure_interpolation", "bicubic");
            //HOperatorSet.SetMetrologyObjectParam(MetrologyHandle,"all","measure_select","all");
            HOperatorSet.SetMetrologyObjectParam(MetrologyHandle, "all", "min_score", 0.4);
            HOperatorSet.ApplyMetrologyModel(imagein, MetrologyHandle);
            HObject Contours, Cross;

            HOperatorSet.GetMetrologyObjectMeasures(out Contours, MetrologyHandle, "all", "all", out Row, out Column);
            HOperatorSet.GenCrossContourXld(out Cross, Row, Column, 6, 0.785398);
            HTuple hv_Parameter = null;

            //得到线的起点和终点坐标并显示出来
            HOperatorSet.GetMetrologyObjectResult(MetrologyHandle, "all", "all", "result_type",
                                                  "all_param", out hv_Parameter);
            if (hv_Parameter.TupleLength() == 0)
            {
                result_info = " 查找圆: 在指定位置,找圆失败";
                MessageBox.Show("未找到圆");
                return(false);
            }
            int Circle_number = hv_Parameter.TupleLength() / 3;

            double[] Row_out    = new double[Circle_number];
            double[] Column_out = new double[Circle_number];
            double[] Radius_out = new double[Circle_number];
            for (int i = 0; i < Circle_number; i++)
            {
                Row_out[i]    = hv_Parameter[i * 3 + 1].D;
                Column_out[i] = hv_Parameter[i * 3].D;
                Radius_out[i] = hv_Parameter[i * 3 + 2].D;
            }
            Row    = (HTuple)Row_out;
            Column = (HTuple)Column_out;
            Radius = (HTuple)Radius_out;

            HObject ho_Contour;

            HOperatorSet.GenEmptyObj(out ho_Contour);
            ho_Contour.Dispose();
            HOperatorSet.GetMetrologyObjectResultContour(out ho_Contour, MetrologyHandle,
                                                         "all", "all", 1.5);


            HOperatorSet.ClearMetrologyModel(MetrologyHandle);
            if (show_info)
            {
                hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
                hWndCtrl.addIconicVar(Cross);
                hWndCtrl.addIconicVar(Contours);
            }
            hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, this.comboBox1.SelectedItem.ToString());
            hWndCtrl.addIconicVar(ho_Contour);
            hWndCtrl.repaint();
            return(true);
        }
Example #10
0
        public bool CalibrationMake(SourceBuffer _sourceBuffer, ExecuteBuffer _executeBuffer, out SourceBuffer outsourcebuffer, out ExecuteBuffer outexecutebuffer, HWndCtrl hWndCtrl, out string result_info)
        {
            outsourcebuffer  = _sourceBuffer;
            outexecutebuffer = _executeBuffer;
            result_info      = "";
            HTuple  hv_PixelSize = 0.00001;
            HTuple  hv_Message = new HTuple(), hv_Row = new HTuple();
            HTuple  hv_Column = new HTuple(), hv_Index = new HTuple();
            HTuple  hv_Error = null;
            HObject ho_Contours = null, ho_Cross = null, hv_outimage = null;
            HTuple  hv_HomMat3DIdentity = null;
            HTuple  hv_cp1Hur1 = null, hv_cam2Hcp2 = null, hv_cam2Hul2 = null;
            HTuple  hv_PoseNewOrigin2 = null, hv_ULX = null, hv_ULY = null, hv_PoseNewOrigin = null;

            double[] Get_actual_pixel = new double[7];
            HTuple   WorldPixelx, WorldPixely;
            HTuple   Heightx = new HTuple(), Widthx = new HTuple();

            Heightx.Append(Height / 2);
            Heightx.Append(Height / 2);
            Heightx.Append(Height / 2 + 1);
            Widthx.Append(Width / 2);
            Widthx.Append(Width / 2 + 1);
            Widthx.Append(Width / 2);
            HTuple WorldLength1, WorldLength2;
            HTuple ScaleForSimilarPixelSize = 0;

            HOperatorSet.GenEmptyObj(out ho_Contours);
            HOperatorSet.GenEmptyObj(out ho_Cross);
            HOperatorSet.GenEmptyObj(out hv_outimage);

            if (!_executeBuffer.imageBuffer.ContainsKey(this.Input_image.SelectedItem.ToString() + ".img"))
            {
                MessageBox.Show("二值化处理: 输入图像已经不存在,请重置设置输入图像");
                result_info = " 二值化处理: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }
            if (_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"] == null)
            {
                MessageBox.Show("二值化处理: image参数为空或者未赋值");
                result_info = " 二值化处理: 输入图像已经不存在,请重置设置输入图像";
                return(false);
            }
            string comboBox_imageoutname = this.Output_image.Text.ToString() + ".img";

            if (_executeBuffer.imageBuffer[comboBox_imageoutname] != null)
            {
                if (_executeBuffer.imageBuffer[comboBox_imageoutname].IsInitialized())
                {
                    _executeBuffer.imageBuffer[comboBox_imageoutname].Dispose();
                }
            }
            HTuple width, height;
            int    m = _executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"].CountObj();

            HOperatorSet.GetImageSize(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], out width, out height);
            int number = Convert.ToInt32(this.textBox1.Text.ToString());

            if (!this.checkBox1.Checked)
            {
                if (Get_Cal_pixel)
                {
                    Get_Cal_pixel = false;
                }
                if (number == 0)
                {
                    hv_StartCamPar = new HTuple();
                    if (this.checkBox_focalize.Checked)
                    {
                        hv_StartCamPar.Append(0);
                    }
                    else
                    {
                        hv_StartCamPar.Append(Convert.ToDouble(this.textbox_lens.Text.ToString()) / 100);
                    }
                    hv_StartCamPar.Append(0);
                    hv_StartCamPar.Append(Convert.ToDouble(this.textBox_width.Text.ToString()) / 10000000);
                    hv_StartCamPar.Append(Convert.ToDouble(this.textBox_height.Text.ToString()) / 10000000);
                    hv_StartCamPar.Append(width / 2);
                    hv_StartCamPar.Append(height / 2);
                    hv_StartCamPar.Append(width);
                    hv_StartCamPar.Append(height);
                    hv_CalTabDescrFile = this.textBox_file.Text;
                    HOperatorSet.CreateCalibData("calibration_object", 1, 1, out CalibDataID);
                    if (this.checkBox_focalize.Checked)
                    {
                        HOperatorSet.SetCalibDataCamParam(CalibDataID, 0, "area_scan_telecentric_division", hv_StartCamPar);
                    }
                    else
                    {
                        HOperatorSet.SetCalibDataCamParam(CalibDataID, 0, "area_scan_division", hv_StartCamPar);
                    }
                    HOperatorSet.SetCalibDataCalibObject(CalibDataID, 0, hv_CalTabDescrFile);
                }
                try
                {
                    HOperatorSet.FindCalibObject(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], CalibDataID, 0, 0, number, new HTuple(), new HTuple());
                    HOperatorSet.GetCalibData(CalibDataID, "camera", 0, "init_params", out hv_StartCamPar);
                    HOperatorSet.GetCalibDataObservPoints(CalibDataID, 0, 0, number, out hv_Row, out hv_Column, out hv_Index, out hv_Pose);
                    HOperatorSet.GetCalibDataObservContours(out ho_Contours, CalibDataID, "caltab", 0, 0, number);
                    HOperatorSet.GenCrossContourXld(out ho_Cross, hv_Row, hv_Column, 6, 0.785398);
                    hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, "orange");
                    hWndCtrl.addIconicVar(ho_Cross);
                    hWndCtrl.addIconicVar(ho_Contours);
                    hWndCtrl.repaint();
                }
                catch
                {
                    MessageBox.Show("找不到标定板");
                    ho_Contours.Dispose();
                    ho_Cross.Dispose();

                    return(false);
                }

                if (number == hv_NumImages - 1)
                {
                    Read_file = false;
                    HOperatorSet.CalibrateCameras(CalibDataID, out hv_Error);
                    HOperatorSet.GetCalibData(CalibDataID, "camera", 0, "params", out hv_CamParam);
                    HOperatorSet.GetCalibData(CalibDataID, "calib_obj_pose", (new HTuple(0)).TupleConcat(6), "pose", out hv_Pose);
                    HOperatorSet.HomMat3dIdentity(out hv_HomMat3DIdentity);
                    HOperatorSet.HomMat3dRotateLocal(hv_HomMat3DIdentity, ((-(hv_Pose.TupleSelect(5)))).TupleRad(), "z", out hv_cp1Hur1);
                    HOperatorSet.PoseToHomMat3d(hv_Pose, out hv_cam2Hcp2);
                    HOperatorSet.HomMat3dCompose(hv_cam2Hcp2, hv_cp1Hur1, out hv_cam2Hul2);
                    HOperatorSet.HomMat3dToPose(hv_cam2Hul2, out hv_PoseNewOrigin2);
                    HOperatorSet.ImagePointsToWorldPlane(hv_CamParam, hv_PoseNewOrigin2, 0, 0, "m", out hv_ULX, out hv_ULY);
                    HOperatorSet.SetOriginPose(hv_PoseNewOrigin2, hv_ULX, hv_ULY, 0, out hv_PoseNewOrigin);

                    HOperatorSet.ImagePointsToWorldPlane(hv_CamParam, hv_Pose, Heightx, Widthx, 1, out WorldPixelx, out WorldPixely);
                    HOperatorSet.DistancePp(WorldPixely[0], WorldPixelx[0], WorldPixely[1], WorldPixelx[1], out WorldLength1);
                    HOperatorSet.DistancePp(WorldPixely[0], WorldPixelx[0], WorldPixely[2], WorldPixelx[2], out WorldLength2);
                    ScaleForSimilarPixelSize = (WorldLength1 + WorldLength2) / 2;
                    HOperatorSet.GenImageToWorldPlaneMap(out ho_MapSingle1, hv_CamParam,
                                                         hv_PoseNewOrigin, width, height, width, height, ScaleForSimilarPixelSize, "bilinear");
                    HOperatorSet.WriteObject(ho_MapSingle1, this.textBox2.Text.ToString());
                    Read_file              = true;
                    Get_Calibration        = true;
                    this.checkBox1.Checked = true;
                    result_info            = " 校正参数: 设置完成";
                }

                this.textBox1.Text = (number + 1).ToString();
            }

            if (this.checkBox1.Checked)
            {
                if (Read_file)
                {
                    if (File.Exists(this.textBox2.Text))
                    {
                        HOperatorSet.ReadObject(out ho_MapSingle1, this.textBox2.Text);
                    }
                    else
                    {
                        MessageBox.Show("校正文件不存在 ,请检查");
                        return(false);
                    }
                }

                HOperatorSet.MapImage(_executeBuffer.imageBuffer[this.Input_image.SelectedItem.ToString() + ".img"], ho_MapSingle1, out hv_outimage);
                _executeBuffer.imageBuffer[comboBox_imageoutname] = hv_outimage;
                outexecutebuffer = _executeBuffer;
                result_info      = " 校正: 完成";
                HTuple Distance;
                if (!Get_Cal_pixel)
                {
                    try
                    {
                        double all_number = 0;
                        HOperatorSet.FindCalibObject(hv_outimage, CalibDataID, 0, 0, 0, new HTuple(), new HTuple());
                        HOperatorSet.GetCalibDataObservPoints(CalibDataID, 0, 0, 0, out hv_Row, out hv_Column, out hv_Index, out hv_Pose);
                        for (int i = 0; i < 7; i++)
                        {
                            HOperatorSet.DistancePp(hv_Row[i * 7], hv_Column[i * 7], hv_Row[i * 7 + 6], hv_Column[i * 7 + 6], out Distance);
                            Get_actual_pixel[i] = Distance.D;
                            all_number          = all_number + Get_actual_pixel[i];
                        }
                        Pixel_number          = (Convert.ToDouble(this.textBox_pixel.Text)) / (all_number / 7);
                        Get_Cal_pixel         = true;
                        this.label_pixel.Text = Pixel_number.ToString();
                        Pixel_Trans           = Convert.ToDouble(Pixel_number.ToString());
                    }
                    catch
                    {
                        MessageBox.Show("请再次添加图像寻找计算像素比");
                    }
                }
                if (Read_file)
                {
                    ho_MapSingle1.Dispose();
                }
            }



            return(true);
        }
Example #11
0
        public bool Run_show(string color_set, 圆GVName_halcon Circle_result, 圆弧GVName_halcon Circlearc_result, 直线GVName_halcon Line_result, HWndCtrl hWndCtrl, out string out_info)
        {
            out_info = "";
            if (color_set == "")
            {
                color_set = "red";
            }
            HObject Circle1;
            HObject CircleArc1;
            HObject Line1;

            if (Circle_result == null)
            {
                MessageBox.Show("轮廓显示:  显示圆列表为空");
                out_info = "轮廓显示:  圆为空";
            }
            else
            {
                int Circle_result_number = Circle_result.圆心X.TupleLength();
                for (int j = 0; j < Circle_result_number; j++)
                {
                    //HOperatorSet.GenCircle(out Circle1, Circle_result.圆心X[j], Circle_result.圆心Y[j], Circle_result.半径R[j]);
                    HOperatorSet.GenCircleContourXld(out Circle1, Circle_result.圆心X[j], Circle_result.圆心Y[j], Circle_result.半径R[j], 0, 2 * Math.PI, "positive", 1);
                    hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set);
                    hWndCtrl.addIconicVar(Circle1);
                }
            }

            if (Circlearc_result == null)
            {
                MessageBox.Show("轮廓显示:  圆弧为空");
                out_info = out_info + " 圆弧为空";
            }
            else
            {
                int Circlearc_result_number = Circlearc_result.半径R.TupleLength();
                for (int m = 0; m < Circlearc_result_number; m++)
                {
                    //HOperatorSet.GenCircleSector(out CircleArc1, Circlearc_result.圆心X[m], Circlearc_result.圆心Y[m], Circlearc_result.半径R[m], Circlearc_result.圆弧Start[m], Circlearc_result.圆弧End[m]);
                    HOperatorSet.GenCircleContourXld(out CircleArc1, Circlearc_result.圆心X[m], Circlearc_result.圆心Y[m], Circlearc_result.半径R[m], Circlearc_result.圆弧Start[m], Circlearc_result.圆弧End[m], "positive", 1);
                    hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set);
                    hWndCtrl.addIconicVar(CircleArc1);
                }
            }

            if (Line_result == null)
            {
                MessageBox.Show("轮廓显示:  直线为空");
                out_info = out_info + "直线为空";
            }
            else
            {
                int line_result_number = Line_result.点1X.TupleLength();
                for (int l = 0; l < line_result_number; l++)
                {
                    HOperatorSet.GenContourPolygonXld(out Line1, ((HTuple)Line_result.点1X[l]).TupleConcat(
                                                          (HTuple)Line_result.点2X[l]), ((HTuple)Line_result.点1Y[l]).TupleConcat((HTuple)Line_result.点2Y[l]));

                    hWndCtrl.changeGraphicSettings(GraphicsContext.GC_COLOR, color_set);
                    hWndCtrl.addIconicVar(Line1);
                }
            }
            hWndCtrl.repaint();

            return(true);
        }