Exemple #1
0
        /// <summary>
        /// Paints the active handle of the ROI object into the supplied window
        /// </summary>
        /// <param name="window">HALCON window</param>
        public override void displayActive(HalconDotNet.HWindow window)
        {
            window.SetDraw("margin");
            double num = 5.0;

            if (this.activeHandleIdx < this.row1.TupleLength())
            {
                window.DispRectangle2(this.row1[this.activeHandleIdx].D, this.col1[this.activeHandleIdx].D, 0.0, num, num);
            }
            else if (this.activeHandleIdx < this.row1.TupleLength() + this.row2.TupleLength())
            {
                window.DispCircle(this.row2[this.activeHandleIdx - this.row1.TupleLength()].D,
                                  this.col2[this.activeHandleIdx - this.row1.TupleLength()].D, num);
            }
            else if (this.activeHandleIdx == this.row1.TupleLength() + this.row2.TupleLength())
            {
                window.DispRectangle2(midR, midC, 0, num, num);
            }
            else
            {
                for (int i = 0; i < this.row1.TupleLength() - 1; i++)
                {
                    window.DispLine(this.row1[i].D, this.col1[i].D, this.row1[i + 1].D, this.col1[i + 1].D);
                }
                window.DispLine(this.row1[0].D, this.col1[0].D, this.row1[this.row1.TupleLength() - 1].D,
                                this.col1[this.row1.TupleLength() - 1].D);
            }
        }
        /// <summary>
        /// draw, 決定要畫什麼在 window 上
        /// </summary>
        /// <param name="window">Halcon Window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            double crossSize  = 12;
            double crossAngle = 0.785398;

            //寫字
            if (!String.IsNullOrEmpty(Name))
            {
                if (!this.IsActive)
                {
                    window.SetColor("red");
                }
                HOperatorSet.SetTposition(window, _model.RowBegin, _model.ColBegin);
                window.WriteString(Name);
            }

            //畫圓
            if (!this.IsActive)
            {
                window.SetColor("magenta");
            }

            window.SetLineWidth(2);
            var radius = _model.Distance / CircleDistanceSetting;

            window.DispCross(_model.RowBegin, _model.ColBegin, crossSize, crossAngle);
            window.DispCircle(_model.RowBegin, _model.ColBegin, radius);

            //畫圓內虛線
            /**/
            window.SetLineWidth(1);
            HTuple dotLineStyle = new HTuple(new int[4] {
                20, 7, 3, 7
            });

            window.SetLineStyle(dotLineStyle);
            var hLineRowBegin = _model.RowBegin;
            var hLineColBegin = _model.ColBegin - radius;
            var hLineRowEnd   = _model.RowBegin;
            var hLineColEnd   = _model.ColBegin + radius;

            var vLineRowBegin = _model.RowBegin - radius;
            var vLineColBegin = _model.ColBegin;
            var vLineRowEnd   = _model.RowBegin + radius;
            var vLineColEnd   = _model.ColBegin;

            window.DispLine(hLineRowBegin, hLineColBegin, hLineRowEnd, hLineColEnd);
            window.DispLine(vLineRowBegin, vLineColBegin, vLineRowEnd, vLineColEnd);

            //Reset line Style
            HOperatorSet.SetLineStyle(window, null);
        }
Exemple #3
0
 /// <summary>Paints the ROI into the supplied window.</summary>
 public override void draw(HalconDotNet.HWindow window)
 {
     window.DispLine(row1, col1, row2, col2);
     window.DispRectangle2(row1, col1, 0, 5, 5);
     window.DispObj(arrowHandleXLD);              //window.DispRectangle2( row2, col2, 0, 5, 5);
     window.DispRectangle2(midR, midC, 0, 5, 5);
 }
Exemple #4
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)

        {
            HSystem.SetSystem("flush_graphic", "false");
            window.ClearWindow();


            window.DispObj(ho_Image_Changed);

            if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
            {
                roiManager.paintData(window);
            }

            HSystem.SetSystem("flush_graphic", "true");

            window.SetColor("black");
            window.DispLine(-100.0, -100.0, -101.0, -101.0);

            if (ReDrawEvent != null)
            {
                ReDrawEvent();
            }
            mGC.stateOfSettings.Clear();
        }
Exemple #5
0
        /// <summary>
        /// 显示ROI
        /// </summary>
        /// <param name="hwin"></param>
        public override void displayROI(HalconDotNet.HWindow hwin)
        {
            hwin.DispLine(this._row_y1, this._cols_x1, this._row_y2, this._cols_x2);

            if (this._operationing == -1)
            {
                hwin.DispRectangle2(_row_y1, _cols_x1, 0, 5, 5);
                hwin.DispRectangle2(_row_y2, _cols_x2, 0, 5, 5);
                hwin.DispRectangle2(this._mid_row_y, this._mid_col_x, 0, 5, 5);
            }
            else
            {
                for (int i = 0; i < _operation_piont_number; i++)
                {
                    if (i == _operationing)
                    {
                        displayOperation(i, hwin);
                    }
                    else
                    {
                        no_chice_point(i, hwin);
                    }
                }
            }
        }
 /// <summary>
 /// 显示ROI
 /// </summary>
 /// <param name="hwin"></param>
 public override void displayROI(HalconDotNet.HWindow hwin)
 {
     hwin.DispRectangle2(this._mid_row_y, this._mid_col_x, -this._phi, this._len1, this._len2);
     hwin.DispLine(this._mid_row_y, this._mid_col_x, this._rows_y[5], this._cols_x[5]);
     if (this._operationing == -1)
     {
         //hwin.DispRectangle2(this.in
         for (int i = 0; i < this._operation_piont_number; i++)
         {
             hwin.DispRectangle2(this._rows_y[i].D, this._cols_x[i].D, -this._phi, 5, 5);
         }
     }
     else
     {
         for (int i = 0; i < this._operation_piont_number; i++)
         {
             if (i == this._operationing)
             {
                 displayOperation(i, hwin);
             }
             else
             {
                 no_chice_point(i, hwin);
             }
         }
     }
 }
Exemple #7
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)
        {
            int          count = HObjList.Count;
            HObjectEntry entry;

            HSystem.SetSystem("flush_graphic", "false");
            window.ClearWindow();
            mGC.stateOfSettings.Clear();

            for (int i = 0; i < count; i++)
            {
                entry = ((HObjectEntry)HObjList[i]);
                mGC.applyContext(window, entry.gContext);
                window.DispObj(entry.HObj);
            }

            addInfoDelegate();

            if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
            {
                roiManager.paintData(window);
            }

            HSystem.SetSystem("flush_graphic", "true");

            window.SetColor("black");
            window.DispLine(-100.0, -100.0, -101.0, -101.0);
        }
        /// <summary>将ROI绘制到提供的窗口中</summary>
        /// <param name="window">HALCON window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            window.DispLine(midR + Math.Sin(phi) * length1,
                            midC + Math.Cos(phi) * length1,
                            midR + (Math.Sin(phi) * (length1 + 30)),
                            midC + (Math.Cos(phi) * (length1 + 30)));

            for (int i = 0; i < PointNum; i++)
            {
                window.DispRectangle2(midR + (-length1 + length1 / PointNum + length1 * 2 / PointNum * i) * Math.Sin(phi),
                                      midC + (-length1 + length1 / PointNum + length1 * 2 / PointNum * i) * Math.Cos(phi), -phi, length1 / PointNum, length2);
            }
            window.SetDraw("fill");
            for (int i = 0; i < NumHandles - 1; i++)
            {
                window.DispRectangle2(rows[i].D, cols[i].D, -phi, 10, 10);
            }
            window.DispCircle((midR + Math.Sin(phi) * (length1 + 36)), (midC + Math.Cos(phi) * (length1 + 36)), 12);
            window.SetLineWidth(5);
            window.DispArrow(midR - (Math.Sin(phi - Math.PI / 2) * (length2 - 10)),
                             midC - (Math.Cos(phi - Math.PI / 2) * (length2 - 10)),
                             midR - (Math.Sin(phi - Math.PI / 2) * length2),
                             midC - (Math.Cos(phi - Math.PI / 2) * length2), 2.0);
            window.SetLineWidth(1);
            window.SetDraw("margin");
        }
Exemple #9
0
        /// <summary>Paints the ROI into the supplied window.</summary>
        public override void draw(HalconDotNet.HWindow window, int imageWidth, int imageHeight)
        {
            window.DispLine(row1, col1, row2, col2);

            window.DispRectangle2(row1, col1, 0, 8, 8);
            window.DispObj(arrowHandleXLD);              //window.DispRectangle2( row2, col2, 0, 25, 25);
            window.DispRectangle2(midR, midC, 0, 8, 8);
        }
Exemple #10
0
 /// <summary>Paints the ROI into the supplied window.</summary>
 public override void draw(HalconDotNet.HWindow window)
 {
     window.SetLineStyle(new HTuple(10, 30));
     window.DispLine(row1, col1, row2, col2);
     window.SetLineStyle(new HTuple());
     window.DispRectangle2(row1, col1, 0, 5, 5);
     /*window.DispObj(arrowHandleXLD);*/ window.DispRectangle2(row2, col2, 0, 5, 5);
     window.DispRectangle2(midR, midC, 0, 5, 5);
 }
Exemple #11
0
        /// <summary>Paints the ROI into the supplied window.</summary>
        public override void draw(HalconDotNet.HWindow window)
        {
            window.DispLine(_StartRow, _StartColumn, _EndRow, _EndCol);

            //window.DispRectangle2(_StartRow, _StartColumn, 0, 5, 5);//開始
            //window.DispObj(_AuxLineHandleXLD);  //window.DispRectangle2( row2, col2, 0, 5, 5); //箭頭

            //window.DispRectangle2(_MidRow, _MidCol, 0, 5, 5);//中間
        }
Exemple #12
0
 /// <summary>Paints the ROI into the supplied window.</summary>
 public override void draw(HalconDotNet.HWindow window, bool include)
 {
     window.SetColor(regionColor);
     window.DispLine(row1, col1, row2, col2);
     if (include)
     {
         window.DispRectangle2(row1, col1, 0, 5, 5);
         window.DispRectangle2(midR, midC, 0, 5, 5);
     }
     window.DispObj(arrowHandleXLD);              //window.DispRectangle2( row2, col2, 0, 5, 5);
 }
Exemple #13
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window, HObject obj)
        {
            HSystem.SetSystem("flush_graphic", "false");
            window.ClearWindow();

            window.DispObj(obj);

            HSystem.SetSystem("flush_graphic", "true");

            window.SetColor("black");
            window.DispLine(-100.0, -100.0, -101.0, -101.0);
        }
Exemple #14
0
        /// <summary>
        /// draw, 決定要畫什麼在 window 上
        /// </summary>
        /// <param name="window">Halcon Window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            //虛線
            HTuple dotLineStyle = new HTuple(new int[4] {
                20, 7, 3, 7
            });

            //寫字
            if (!String.IsNullOrEmpty(Name))
            {
                if (!this.IsActive)
                {
                    window.SetColor("red");
                }

                HOperatorSet.SetTposition(window, _rawCenterRow, _rawCenterCol);
                window.WriteString(Name);
            }

            //Draw 中線
            window.SetLineStyle(dotLineStyle);
            window.DispLine(_model.RowBegin, _model.ColBegin, _model.RowEnd, _model.ColEnd);

            //Reset line Style
            HOperatorSet.SetLineStyle(window, null);

            //畫相依的線元素 (ROI)
            window.SetLineWidth(2);
            if (!this.IsActive)
            {
                HOperatorSet.SetColor(window, "magenta");
            }
            for (var i = 0; i < _lines.Count; i++)
            {
                var line = _lines[i];
                window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd);
            }
        }
Exemple #15
0
        /// <summary>Paints the ROI into the supplied window</summary>
        /// <param name="window">HALCON window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            window.SetDraw("margin");
            double num = 5.0;

            for (int i = 0; i < this.row1.TupleLength(); i++)
            {
                if (i < this.row1.TupleLength() - 1)
                {
                    window.DispLine(this.row1[i].D, this.col1[i].D, this.row1[i + 1].D, this.col1[i + 1].D);
                }
                else
                {
                    window.DispLine(this.row1[i].D, this.col1[i].D, this.row1[0].D, this.col1[0].D);
                }
                window.DispRectangle2(this.row1[i].D, this.col1[i].D, 0.0, num, num);
            }
            for (int j = 0; j < this.row2.TupleLength(); j++)
            {
                window.DispCircle(this.row2[j].D, this.col2[j].D, num);
            }
            window.DispRectangle2(midR, midC, 0, 5, 5);
        }
Exemple #16
0
        /// <summary>
        ///将ROI对象的活动句柄绘制到提供的窗口中
        /// </summary>
        /// <param name="window">HALCON window</param>
        public override void displayActive(HalconDotNet.HWindow window)
        {
            if (activeHandleIdx != 5)
            {
                window.DispRectangle2(rows[activeHandleIdx].D, cols[activeHandleIdx].D, -phi, 13, 13);
            }

            if (activeHandleIdx == 5)
            {
                window.DispLine(midR + Math.Sin(phi) * length1,
                                midC + Math.Cos(phi) * length1,
                                midR + (Math.Sin(phi) * (length1 + 30)),
                                midC + (Math.Cos(phi) * (length1 + 30)));
                window.DispCircle((midR + Math.Sin(phi) * (length1 + 36)), (midC + Math.Cos(phi) * (length1 + 36)), 15);
            }
        }
Exemple #17
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)
        {
            int h = imageHeight;

            if (window.IsInitialized() == false || viewPort.HalconID.ToInt32() == -1 || viewPort.ImagePart.Width <= 1 || viewPort.ImagePart.Height <= 1)
            {
                return;
            }
            int          count = HObjList.Count;
            HObjectEntry entry;

            HSystem.SetSystem("flush_graphic", "false");
            window.ClearWindow();
            mGC.stateOfSettings.Clear();

            for (int i = 0; i < count; i++)
            {
                entry = ((HObjectEntry)HObjList[i]);
                mGC.applyContext(window, entry.gContext);
                window.DispObj(entry.HObj);
            }

            addInfoDelegate();

            if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
            {
                roiManager.paintData(window);
            }

            HSystem.SetSystem("flush_graphic", "true");

            window.SetColor("black");
            window.DispLine(-100.0, -100.0, -101.0, -101.0);

            for (int i = 0; i < HMsgList.Count; i++)
            {
                if (HMsgList[i].Size != 0)
                {
                    set_display_font(viewPort.HalconID, HMsgList[i].Size, HMsgList[i].Font, HMsgList[i].Bold, HMsgList[i].Slant);
                }
                window.DispText(HMsgList[i].HMsg, HMsgList[i].coordSystem, HMsgList[i].row, HMsgList[i].column, HMsgList[i].color, HMsgList[i].genParamName, HMsgList[i].genParamValue);
            }
        }
Exemple #18
0
        public int windowsmallregionwidth = 5;//4边小矩形的大小
        /// <summary>Paints the ROI into the supplied window.</summary>
        public override void draw(HalconDotNet.HWindow window)
        {
            window.DispLine(row1, col1, row2, col2);

            if (SizeEnable && ShowRect)
            {
                int hrow, hcol, hw, hh;
                window.GetPart(out hrow, out hcol, out hh, out hw);
                int wrow, wcol, ww, wh;
                window.GetWindowExtents(out wrow, out wcol, out ww, out wh);

                double smallregionwidth  = (hw - hcol) * windowsmallregionwidth / ww;
                double smallregionheight = (hh - hrow) * windowsmallregionwidth / wh;

                window.DispRectangle2(row1, col1, 0, smallregionheight, smallregionwidth);
                window.DispObj(arrowHandleXLD);  //window.DispRectangle2( row2, col2, 0, 5, 5);
                window.DispRectangle2(midR, midC, 0, smallregionheight, smallregionwidth);
            }
        }
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaintUsingFlushGraphic(HalconDotNet.HWindow window)
        {
            int          count = HObjList.Count;
            HObjectEntry entry;

            if (window != null)
            {
                HSystem.SetSystem("flush_graphic", "false");
                window.ClearWindow();
                // check the boundatries of the image part
                if ((ImgRow2 > ImgRow1) && (ImgCol2 > ImgCol1))
                {
                    window.SetPart((int)ImgRow1, (int)ImgCol1, (int)ImgRow2, (int)ImgCol2);
                }
                // set the image part to window size
                else
                {
                    window.SetPart(0, 0, windowHeight - 1, windowWidth - 1);
                }
                mGC.stateOfSettings.Clear();

                for (int i = 0; i < count; i++)
                {
                    entry = ((HObjectEntry)HObjList[i]);
                    if (entry != null)
                    {
                        mGC.applyContext(window, entry.gContext);
                        window.DispObj(entry.HObj);
                    }
                }

                addInfoDelegate();

                if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
                {
                    roiManager.paintData(window);
                }

                HSystem.SetSystem("flush_graphic", "true");

                window.DispLine(-1000.0, -1000.0, -1001.0, -1001.0);
            }
        }
Exemple #20
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)
        {
            try
            {
                int          count = HObjImageList.Count;
                HObjectEntry entry;

                HSystem.SetSystem("flush_graphic", "false");
                window.ClearWindow();
                mGC.stateOfSettings.Clear();

                //显示图片
                for (int i = 0; i < count; i++)
                {
                    entry = ((HObjectEntry)HObjImageList[i]);
                    mGC.applyContext(window, entry.gContext);
                    window.DispObj(entry.HObj);
                }

                //显示region
                showHObjectList();


                addInfoDelegate();

                if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
                {
                    roiManager.paintData(window);
                }


                HSystem.SetSystem("flush_graphic", "true");

                //注释了下面语句,会导致窗口无法实现缩放和拖动
                window.SetColor("black");
                window.DispLine(-100.0, -100.0, -101.0, -101.0);
            }
            catch (Exception)
            {
            }
        }
Exemple #21
0
        /// <summary>绘制图形在窗口中</summary>
        public override void Draw(HalconDotNet.HWindow window)
        {
            //直线绘制
            window.DispLine(startRow, startCol, endRow, endCol);

            int width = GetHandleWidth();

            //直线起点的框
            window.DispRectangle2(startRow, startCol, 0, width, width);
            //直线终点的箭头
            window.DispObj(arrowHandleXLD);  //window.DispRectangle2( row2, col2, 0, 5, 5);
            //直线中点的框
            window.DispRectangle2(midRow, midCol, 0, width, width);

            //int r1, c1, r2, c2;
            //window.GetPart(out r1, out c1, out r2, out c2);
            //int width = r2 - r1;
            ////直线起点的框
            //window.DispRectangle2(startRow, startCol, 0, width / 50.0, width / 50.0);
            ////System.Diagnostics.Debug.WriteLine("{0}-{1}-{2}-{3}", r1, c1, r2, c2);
        }
Exemple #22
0
        /// <summary>
        /// draw, 決定要畫什麼在 window 上
        /// </summary>
        /// <param name="window">Halcon Window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            double crossSize  = 12;
            double crossAngle = 0.785398;

            //寫字
            if (!String.IsNullOrEmpty(Name))
            {
                if (!this.IsActive)
                {
                    window.SetColor("red");
                }
                HOperatorSet.SetTposition(window, _model.RowBegin, _model.ColBegin);
                window.WriteString(Name);
            }


            //畫交點
            if (!this.IsActive)
            {
                HOperatorSet.SetColor(window, "magenta");
            }

            //HOperatorSet.SetDraw(window, "fill");
            HOperatorSet.SetLineWidth(window, 2);
            HOperatorSet.DispCross(window, _model.RowBegin, _model.ColBegin, crossSize, crossAngle);

            //畫相依的線元素 (ROI)
            window.SetLineWidth(2);
            if (!this.IsActive)
            {
                HOperatorSet.SetColor(window, "magenta");
            }
            for (var i = 0; i < _lines.Count; i++)
            {
                var line = _lines[i];
                window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd);
            }
        }
Exemple #23
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        private void repaint(HalconDotNet.HWindow window)
        {
            int count = HObjList.Count;

            if (count > 0)
            {
                HObjectEntry entry;
                HSystem.SetSystem("flush_graphic", "false");
                window.ClearWindow();
                mGC.stateOfSettings.Clear();
                for (int i = 0; i < count; i++)
                {
                    entry = ((HObjectEntry)HObjList[i]);
                    if (entry.colorShow.Length > 0)
                    {
                        window.SetColor(entry.colorShow);
                    }
                    mGC.applyContext(window, entry.gContext);
                    window.DispObj(entry.HObj);
                }
                if (roiManager != null)
                {
                    roiManager.paintData(window);
                }
                HSystem.SetSystem("flush_graphic", "true");
                window.DispLine(-100.0, -100.0, -101.0, -101.0);
            }
            count = StrList.Count;
            if (count > 0)
            {
                foreach (StringX strX in StrList)
                {
                    window.SetFont("-Consolas-" + strX.size.ToString() + "-*-" + (strX.bold ? "1" : "0") + "-*-*-" + (strX.slant ? "1" : "0") + "-");
                    window.SetColor(strX.color.Name.ToLower());
                    window.SetTposition(strX.row, strX.column);
                    window.WriteString(strX.str);
                }
            }
        }
        /// <summary>
        /// draw, 決定要畫什麼在 window 上
        /// </summary>
        /// <param name="window">Halcon Window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            double arrowSize = 2;
            //double crossSize = 12;
            //double crossAngle = 0.785398;

            HTuple dotLineStyle = new HTuple(new int[4] {
                7, 7, 7, 7
            });

            //Reset line Style
            HOperatorSet.SetLineStyle(window, null);

            //寫字
            if (!String.IsNullOrEmpty(Name))
            {
                if (!this.IsActive)
                {
                    HOperatorSet.SetColor(window, "red");
                }

                HOperatorSet.SetTposition(window, this.NewCenterRow, this.NewCenterCol);
                window.WriteString(Name);
            }


            //畫線段,水平 + 30 度角
            var lineLength = 50;
            var angle      = Math.PI / 6.0;
            var hLineRow   = this.NewCenterRow + Math.Sin(Math.PI) * lineLength;
            var hLineCol   = this.NewCenterCol - Math.Cos(Math.PI) * lineLength;
            var degLineRow = this.NewCenterRow - Math.Sin(angle) * lineLength;
            var degLineCol = this.NewCenterCol + Math.Cos(angle) * lineLength;

            HOperatorSet.DispLine(window, this.NewCenterRow, this.NewCenterCol, hLineRow, hLineCol);
            HOperatorSet.DispLine(window, this.NewCenterRow, this.NewCenterCol, degLineRow, degLineCol);

            //畫 arc
            // angle 為正時,會順時針畫,
            // angle 為負時,會逆時針畫,
            // 因此要注意兩線段夾角的開口方向來選擇
            var arcBeginRow = this.NewCenterRow - Math.Sin(angle) * (lineLength / 2.0);
            var arcBeginCol = this.NewCenterCol + Math.Cos(angle) * (lineLength / 2.0);

            window.DispArc(this.NewCenterRow, this.NewCenterCol, angle, arcBeginRow, arcBeginCol);

            // 畫箭頭,
            window.SetLineWidth(1);
            HOperatorSet.SetLineStyle(window, dotLineStyle);

            window.DispArrow(this.NewCenterRow, this.NewCenterCol, _lineACenterRow, _lineACenterCol, arrowSize);
            window.DispArrow(this.NewCenterRow, this.NewCenterCol, _lineBCenterRow, _lineBCenterCol, arrowSize);

            //Reset line Style
            HOperatorSet.SetLineStyle(window, null);

            //畫ROI
            window.SetLineWidth(2);
            if (!this.IsActive)
            {
                HOperatorSet.SetColor(window, "magenta");
            }

            for (var i = 0; i < _lines.Count; i++)
            {
                var line = _lines[i];
                if (isLine(line))
                {
                    //draw line,ROI 的線
                    window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd);
                }
            }
        }
Exemple #25
0
        /// <summary>
        /// draw, 決定要畫什麼在 window 上
        /// </summary>
        /// <param name="window">Halcon Window</param>
        public override void draw(HalconDotNet.HWindow window)
        {
            double arrowSize  = 2;
            double crossSize  = 12;
            double crossAngle = 0.785398;

            HTuple dotLineStyle = new HTuple(new int[4] {
                7, 7, 7, 7
            });

            //Reset line Style
            HOperatorSet.SetLineStyle(window, null);

            //寫字
            if (!String.IsNullOrEmpty(Name))
            {
                HOperatorSet.SetTposition(window, this.NewCenterRow, this.NewCenterCol);
                if (!this.IsActive)
                {
                    HOperatorSet.SetColor(window, "red");
                }
                window.WriteString(Name);
            }

            // 畫箭頭, 由線段的中心點向兩端畫箭頭
            window.SetLineWidth(1);

            //計算兩箭頭端點位置
            var arrowPointRowBegin = _arrowLineRowBegin = this.NewCenterRow + (Math.Sin(_phiStart) * _halfDistance);
            var arrowPointColBegin = _arrowLineColBegin = this.NewCenterCol + (Math.Cos(_phiStart) * _halfDistance);

            var arrowPointRowEnd = _arrowLineRowEnd = this.NewCenterRow + (Math.Sin(_phiEnd) * _halfDistance);
            var arrowPointColEnd = _arrowLineColEnd = this.NewCenterCol + (Math.Cos(_phiEnd) * _halfDistance);

            window.DispArrow(this.NewCenterRow, this.NewCenterCol, arrowPointRowBegin, arrowPointColBegin, arrowSize);
            window.DispArrow(this.NewCenterRow, this.NewCenterCol, arrowPointRowEnd, arrowPointColEnd, arrowSize);

            //畫虛線,如果使用者改變了原始中心點的位置
            //由兩箭頭端點連結原始的起始兩端點
            if (_rawCenterRow != this.NewCenterRow || _rawCenterCol != this.NewCenterCol)
            {
                HOperatorSet.SetLineStyle(window, dotLineStyle);
                //決定兩個端點的連結,將座標點 以左上排序
                var arrowPoints = new List <PositionModel>()
                {
                    new PositionModel()
                    {
                        RowBegin = arrowPointRowBegin, ColBegin = arrowPointColBegin
                    },
                    new PositionModel()
                    {
                        RowBegin = arrowPointRowEnd, ColBegin = arrowPointColEnd
                    },
                };

                arrowPoints = arrowPoints.OrderBy(x => x.ColBegin).OrderBy(y => y.RowBegin).ToList();

                for (int i = 0; i < _ROIModelPoints.Count; i++)
                {
                    window.DispLine(arrowPoints[i].RowBegin, arrowPoints[i].ColBegin, _ROIModelPoints[i].RowBegin, _ROIModelPoints[i].ColBegin);
                }
            }

            //reset Style
            HOperatorSet.SetLineStyle(window, null);

            //畫ROI
            window.SetLineWidth(1);
            if (!this.IsActive)
            {
                HOperatorSet.SetColor(window, "magenta");
            }
            for (var i = 0; i < _dependROIModels.Count; i++)
            {
                var line = _dependROIModels[i];
                if (isLine(line))
                {
                    //draw line,ROI 的線
                    window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd);
                }
                else
                {
                    //draw point,ROI 的點
                    HXLDCont crossPoint = new HXLDCont();
                    crossPoint.GenEmptyObj();
                    crossPoint.GenCrossContourXld(line.RowBegin, line.ColBegin, crossSize, crossAngle);
                    crossPoint.DispObj(window);
                    //window.DispCross(line.RowBegin, line.ColBegin, crossSize, crossAngle);
                }
            }
        }
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)
        {
            try
            {
                int          count = HObjList.Count;
                HObjectEntry entry;

                HSystem.SetSystem("flush_graphic", "false");
                window.ClearWindow();
                mGC.stateOfSettings.Clear();

                for (int i = 0; i < count; i++)
                {
                    entry = ((HObjectEntry)HObjList[i]);
                    mGC.applyContext(window, entry.gContext);
                    window.DispObj(entry.HObj);
                }

                addInfoDelegate();

                if (_roiManager != null && (_dispROI == MODE_INCLUDE_ROI))
                {
                    _roiManager.paintData(window);
                }


                var prevScaleC = (double)((ImgCol2 - ImgCol1) / imageWidth);
                foreach (var wViewModel in WriteStringList)
                {
                    window.SetColor("red");
                    HOperatorSet.SetTposition(window, wViewModel.Row, wViewModel.Col);
                    HOperatorSet.WriteString(window, wViewModel.Text);
                }
                //Display Arrow
                var arrowSize = 5 * prevScaleC;
                arrowSize = (arrowSize < 2) ? 2 : arrowSize;
                foreach (var arrowModel in ArrowList)
                {
                    HOperatorSet.DispArrow(window, arrowModel.CenterY, arrowModel.CenterX, arrowModel.FirstArrowY, arrowModel.FirstArrowX, arrowSize);
                    HOperatorSet.DispArrow(window, arrowModel.CenterY, arrowModel.CenterX, arrowModel.SecArrowY, arrowModel.SecArrowX, arrowSize);
                }

                //畫格線
                if (ShowGrid)
                {
                    drawGridLines(window);
                }
                HSystem.SetSystem("flush_graphic", "true");

                window.SetColor(this.RepaintWindowColor);
                window.DispLine(-100.0, -100.0, -101.0, -101.0);
            }
            catch (HOperatorException ex)
            {
                var errorNumber = ex.GetErrorNumber();

                /*
                 * 5106 發生情境為
                 * 1。開啟擷取影像後,未斷線就關閉 MDI 視窗
                 */
                if (errorNumber != 5106 && errorNumber != 5100)
                {
                    Hanbo.Log.LogManager.Error(ex);
                }
            }
        }
Exemple #27
0
        /// <summary>Creates a new ROI instance at the mouse position</summary>
        /// <param name="midX">
        /// x (=column) coordinate for interactive ROI
        /// </param>
        /// <param name="midY">
        /// y (=row) coordinate for interactive ROI
        /// </param>
        ////public override void createROI(List<double> rows, List<double> cols)
        ////{
        ////    //////midR = midY;
        ////    //////midC = midX;

        ////    //////row1 = midR - 25;
        ////    //////col1 = midC - 25;
        ////    //////row2 = midR + 25;
        ////    //////col2 = midC + 25;
        ////}

        /// <summary>Paints the ROI into the supplied window</summary>
        /// <param name="window">HALCON window</param>
        public override void draw(HalconDotNet.HWindow window, int imageWidth, int imageHeight)
        {
            double littleRecSize = 0;

            if (imageHeight < 300)
            {
                littleRecSize = 1;
            }
            else if (imageHeight < 600)
            {
                littleRecSize = 2;
            }
            else if (imageHeight < 900)
            {
                littleRecSize = 3;
            }
            else if (imageHeight < 1200)
            {
                littleRecSize = 4;
            }
            else if (imageHeight < 1500)
            {
                littleRecSize = 5;
            }
            else if (imageHeight < 1800)
            {
                littleRecSize = 6;
            }
            else if (imageHeight < 2100)
            {
                littleRecSize = 7;
            }
            else if (imageHeight < 2400)
            {
                littleRecSize = 8;
            }
            else if (imageHeight < 2700)
            {
                littleRecSize = 9;
            }
            else if (imageHeight < 3000)
            {
                littleRecSize = 10;
            }
            else if (imageHeight < 3300)
            {
                littleRecSize = 11;
            }
            else if (imageHeight < 3600)
            {
                littleRecSize = 12;
            }
            else if (imageHeight < 3900)
            {
                littleRecSize = 13;
            }
            else if (imageHeight < 4200)
            {
                littleRecSize = 14;
            }
            else if (imageHeight < 4500)
            {
                littleRecSize = 15;
            }
            else if (imageHeight < 4800)
            {
                littleRecSize = 16;
            }
            else if (imageHeight < 5100)
            {
                littleRecSize = 17;
            }
            else
            {
                littleRecSize = 18;
            }

            ////// window.DispObj (row1, col1, row2, col2);

            if (littleRecSize % 2 != 0)
            {
                littleRecSize++;
            }

            HOperatorSet.SetDraw(window, "fill");

            for (int i = 0; i < rows.Length; i++)
            {
                window.DispRectangle2(rows[i], cols[i], 0, littleRecSize, littleRecSize);
                if (i < rows.Length - 1)
                {
                    window.DispLine((HTuple)rows[i], (HTuple)cols[i], (HTuple)rows[i + 1], (HTuple)cols[i + 1]);
                }
                else
                {
                    window.DispLine((HTuple)rows[i], (HTuple)cols[i], (HTuple)rows[0], (HTuple)cols[0]);
                }
            }
        }
Exemple #28
0
        /// <summary>Paints the ROI into the supplied window</summary>
        /// <param name="window">HALCON window</param>
        public override void draw(HalconDotNet.HWindow window, int imageWidth, int imageHeight)
        {
            contour.Dispose();
            contour.GenCircleContourXld(midR, midC, radius, startPhi,
                                        (startPhi + extentPhi), circDir, 1.0);
            double littleRecSize = 0;

            if (imageHeight < 300)
            {
                littleRecSize = 1;
            }
            else if (imageHeight < 600)
            {
                littleRecSize = 2;
            }
            else if (imageHeight < 900)
            {
                littleRecSize = 3;
            }
            else if (imageHeight < 1200)
            {
                littleRecSize = 4;
            }
            else if (imageHeight < 1500)
            {
                littleRecSize = 5;
            }
            else if (imageHeight < 1800)
            {
                littleRecSize = 6;
            }
            else if (imageHeight < 2100)
            {
                littleRecSize = 7;
            }
            else if (imageHeight < 2400)
            {
                littleRecSize = 8;
            }
            else if (imageHeight < 2700)
            {
                littleRecSize = 9;
            }
            else if (imageHeight < 3000)
            {
                littleRecSize = 10;
            }
            else if (imageHeight < 3300)
            {
                littleRecSize = 11;
            }
            else if (imageHeight < 3600)
            {
                littleRecSize = 12;
            }
            else if (imageHeight < 3900)
            {
                littleRecSize = 13;
            }
            else if (imageHeight < 4200)
            {
                littleRecSize = 14;
            }
            else if (imageHeight < 4500)
            {
                littleRecSize = 15;
            }
            else if (imageHeight < 4800)
            {
                littleRecSize = 16;
            }
            else if (imageHeight < 5100)
            {
                littleRecSize = 17;
            }
            else
            {
                littleRecSize = 18;
            }

            window.DispObj(contour);
            window.DispRectangle2(sizeR, sizeC, 0, littleRecSize, littleRecSize);
            window.DispRectangle2(midR, midC, 0, littleRecSize, littleRecSize);
            window.DispRectangle2(startR, startC, startPhi, littleRecSize, littleRecSize);
            window.DispRectangle2(extentR, extentC, 0, littleRecSize, littleRecSize);
            window.DispLine(startR, startC, midR, midC);
            window.DispLine(extentR, extentC, midR, midC);
        }
Exemple #29
0
        /// <summary>
        /// Repaints the HALCON window 'window'
        /// </summary>
        public void repaint(HalconDotNet.HWindow window)
        {
            lock (lockershow)
            {
                int count = HObjList.Count;
                //HObjectEntry entry;

                HSystem.SetSystem("flush_graphic", "false");
                window.ClearWindow();
                mGC.stateOfSettings.Clear();

                //for (int i = 0; i < count; i++)
                //{
                //    entry = ((HObjectEntry)HObjList[i]);
                //    mGC.applyContext(window, entry.gContext);
                //    window.DispObj(entry.HObj);
                //}
                if (entry != null)
                {
                    try
                    {
                        mGC.applyContext(window, entry.gContext);
                        window.DispObj(entry.HObj);
                    }
                    catch (Exception ex)
                    { }
                }
                addInfoDelegate();

                if (roiManager != null && (dispROI == MODE_INCLUDE_ROI))
                {
                    roiManager.paintData(window);
                }

                HSystem.SetSystem("flush_graphic", "true");

                if (myRect.Count != 0)
                {
                    window.SetColor("green");
                    window.SetLineWidth(2);
                    HObject ho_Rect = new HObject();

                    for (int i = 0; i < myRect.Count; i++)
                    {
                        if (myRect[i].isCircle)
                        {
                            window.SetColor("green");
                            window.SetLineWidth(2);
                            if (myRect[i].Found)
                            {
                                HOperatorSet.GenCircleContourXld(out ho_Rect, myRect[i].Y, myRect[i].X, myRect[i].Radius, 0, 6.28318, "positive", 1.0);
                                window.DispObj(ho_Rect);
                            }
                            //window.DispCircle(myRect[i].Y, myRect[i].X, myRect[i].Radius);
                            window.DispCross(myRect[i].Y, myRect[i].X, 50, 0);

                            disp_message(window, "X:" + myRect[i].X.ToString("F1") + ", Y:" + myRect[i].Y.ToString("F1") + ", Means:" + myRect[i].Means.ToString("F1"), "image", 100, 50, "green", "false");
                            disp_message(window, "Radius:" + myRect[i].Radius.ToString("F1") + ",Angle:" + Helper.GetDegreeFromRadian((float)myRect[i].Angle).ToString("F1"), "image", 300, 50, "green", "false");
                        }
                        else
                        {
                            window.SetColor("green");
                            window.SetLineWidth(2);
                            if (myRect[i].Found)
                            {
                                HOperatorSet.GenRectangle2ContourXld(out ho_Rect, myRect[i].Y, myRect[i].X, myRect[i].Angle, myRect[i].Width / 2, myRect[i].Height / 2);
                                window.DispObj(ho_Rect);
                            }
                            //if (myRect[i].Found)
                            //{
                            //window.SetColor("cyan");
                            //window.DispObj(myRect[i].rect_border);
                            //}
                            window.DispCross(myRect[i].Y, myRect[i].X, 50, 0);

                            disp_message(window, "X:" + myRect[i].X.ToString("F1") + ", Y:" + myRect[i].Y.ToString("F1") + ", Means:" + myRect[i].Means.ToString("F1"), "image", 100, 50, "green", "false");
                            disp_message(window, "Width:" + myRect[i].Width.ToString("F1") + ", Height:" + myRect[i].Height.ToString("F1"), "image", 300, 50, "green", "false");
                            //disp_message(window, "Means:" + myRect[i].Means.ToString("F1"), "image", 500, 50, "green", "false");
                        }
                    }

                    //for (int i = 0; i < myRect.Count; i++)
                    //    window.DispRectangle2(myRect[i].Y, myRect[i].X, myRect[i].Angle, myRect[i].Width / 2, myRect[i].Length / 2);
                }

                if (bShowCrossHair)
                {
                    window.SetColor("red");
                    window.SetLineWidth(2);
                    int winrow, winclom, winwidth, winHeight;
                    window.GetPart(out winrow, out winclom, out winwidth, out winHeight);
                    window.DispLine(winrow + (winwidth - winrow) / 2, (double)winclom, winrow + (winwidth - winrow) / 2, winHeight);
                    window.DispLine((double)winrow, winclom + (winHeight - winclom) / 2, winwidth, winclom + (winHeight - winclom) / 2);
                }

                if (IsDrawCross1)
                {
                    window.DispCross(200.0, 200.0, 40, 0);
                    //window.WriteString("标定1");
                }
                if (IsDrawCross2)
                {
                    //window.DispCross(200.0, 200.0, 2, 0);
                    window.DispCross(600.0, 600.0, 40, 0);
                    // window.WriteString("标定2");
                }
            }
        }