Exemplo n.º 1
0
        /// <summary>
        /// 绘制ROI图形
        /// </summary>
        internal void PaintData(HalconDotNet.HWindow hwnd)
        {
            hwnd.SetDraw("margin");
            hwnd.SetLineWidth(1);

            if (ROIList.Count > 0)
            {
                hwnd.SetColor(_inactiveColor);
                for (int i = 0; i < ROIList.Count; i++)
                {
                    hwnd.SetLineStyle(((ROI)ROIList[i]).LineStyle);
                    ((ROI)ROIList[i]).Draw(hwnd);
                }

                if (ActiveROIIndex != -1)
                {
                    hwnd.SetColor(_activeColor);
                    hwnd.SetLineStyle(((ROI)ROIList[ActiveROIIndex]).LineStyle);
                    ((ROI)ROIList[ActiveROIIndex]).Draw(hwnd);

                    hwnd.SetColor(_activeHandleColor);
                    ((ROI)ROIList[ActiveROIIndex]).DisplayActiveHandle(hwnd);
                }
            }
        }
Exemplo n.º 2
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            switch (_activeHandleIdx)
            {
            //定位圆心
            case 0:
                window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
                break;

            //缩放边点
            case 1:
                window.DispRectangle2(_sizeRow, _sizeCol, 0, 5, 5);
                break;

            //弧段起始角点
            case 2:
                window.DispRectangle2(_startRow, _startCol, _startPhi, 5, 5);
                break;

            //弧段终止角点(箭头)
            case 3:
                window.DispObj(_arrowHandle);
                break;

            default:
                break;
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Repaints the HALCON window 'hwnd'
        /// </summary>
        /// <param name="hwnd"></param>
        public void Repaint(HalconDotNet.HWindow hwnd)
        {
            int count = this._hObjList.Count;

            InteractiveROI.HObjectEntry hobjentry;

            HalconDotNet.HSystem.SetSystem("flush_graphic", "false"); //不更新图形变量
            hwnd.ClearWindow();
            this._GC.LastGCSettings.Clear();

            //显示图像,应用图形上下文
            for (int i = 0; i < count; i++)
            {
                hobjentry = (InteractiveROI.HObjectEntry) this._hObjList[i];
                this._GC.ApplyGraphicSettings(hwnd, hobjentry.GCSettings);
                hwnd.DispObj(hobjentry.HObj);
            }

            this.NotifyInfo("加载图像并应用图形上下文完成");

            if ((this._ROICtrller != null) && (this._ROIDispMode == MODE_INCLUDE_ROI))
            {
                this._ROICtrller.PaintData(hwnd);
            }

            HalconDotNet.HSystem.SetSystem("flush_graphic", "true"); //更新图形变量
            hwnd.SetColor("black");
            hwnd.DispLine(-100.0, -100.0, -101.0, -101.0);           //不知何用
        }
Exemplo n.º 4
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            switch (_activeHandleIdx)
            {
            //齐轴矩形定位中心
            case 0:
                window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
                break;

            //齐轴矩形右上角点
            case 1:
                window.DispRectangle2(_upLeftRow, _botRightCol, 0, 5, 5);
                break;

            //齐轴矩形左上角点
            case 2:
                window.DispRectangle2(_upLeftRow, _upLeftCol, 0, 5, 5);
                break;

            //齐轴矩形左下角点
            case 3:
                window.DispRectangle2(_botRightRow, _upLeftCol, 0, 5, 5);
                break;

            //齐轴矩形右下角点
            case 4:
                window.DispRectangle2(_botRightRow, _botRightCol, 0, 5, 5);
                break;

            default:
                break;
            }
        }
Exemplo n.º 5
0
 public override void Draw(HalconDotNet.HWindow window)
 {
     window.DispLine(_startRow, _startCol, _extentRow, _extentCol);
     window.DispRectangle2(_startRow, _startCol, 0, 4, 4);
     window.DispObj(_arrowHandle);
     window.DispRectangle2(_locateRow, _locateCol, 0, 4, 4);
 }
Exemplo n.º 6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="y">行坐标</param>
        /// <param name="x">列坐标</param>
        private void CreateZoomWindow(double y, double x)
        {
            double posY, posX;
            int    zoomZone;

            int iY = (int)y;
            int iX = (int)x;

            if (this._zoomWindow != null)
            {
                this._zoomWindow.Dispose();
            }

            HalconDotNet.HOperatorSet.SetSystem("border_width", 10);
            this._zoomWindow = new HalconDotNet.HWindow();
            posY             = ((iY - _imgRow1) / (_imgRow2 - _imgRow1)) * _hWndCtrl.Height;
            posX             = ((iX - _imgCol1) / (_imgCol2 - _imgCol1)) * _hWndCtrl.Width;

            zoomZone = (int)((_zoomWndSize / 2) * ZoomWndFactor * ZoomAddOn);

            _zoomWindow.OpenWindow((int)posY - (_zoomWndSize / 2), (int)posX - (_zoomWndSize / 2),
                                   _zoomWndSize, _zoomWndSize, _hWndCtrl.HalconID, "visible", "");
            _zoomWindow.SetPart(iY - zoomZone, iX - zoomZone, iY + zoomZone, iX + zoomZone);

            Repaint(_zoomWindow);
            _zoomWindow.SetColor("black");
        }
        private void ShowHImage2HWin(HalconDotNet.HObject HObj)
        {
            HalconDotNet.HTuple W, H;
            HalconDotNet.HOperatorSet.GetImageSize(HObj, out W, out H);

            _HWin = this.hWin.HalconWindow;
            _HWin.SetPart(new HalconDotNet.HTuple(0), new HalconDotNet.HTuple(0), W, H);
            HalconDotNet.HOperatorSet.DispObj(HObj, _HWin);
        }
Exemplo n.º 8
0
        public override void Draw(HalconDotNet.HWindow window)
        {
            window.DispCircle(_locateRow, _locateCol, _radiusInternal);
            window.DispCircle(_locateRow, _locateCol, _radiusExternal);

            window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
            window.DispRectangle2(_sizeRowInternal, _sizeColInternal, 0, 5, 5);
            window.DispRectangle2(_sizeRowExternal, _sizeColExternal, 0, 5, 5);
        }
Exemplo n.º 9
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;
            _radius    = 60;

            _sizeRow = _locateRow;
            _sizeCol = _locateCol + _radius;
        }
Exemplo n.º 10
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;

            _upLeftRow   = _locateRow - 50;
            _upLeftCol   = _locateCol - 50;
            _botRightRow = _locateRow + 50;
            _botRightCol = _locateCol + 50;
        }
Exemplo n.º 11
0
 public override void Draw(HalconDotNet.HWindow window)
 {
     _circularArc.Dispose();
     _circularArc.GenCircleContourXld(_locateRow, _locateCol, _radius, _startPhi, (_startPhi + _extentPhi), _circularArcDir, 1.0);
     window.DispObj(_circularArc);
     window.DispRectangle2(_sizeRow, _sizeCol, 0, 5, 5);
     window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
     window.DispRectangle2(_startRow, _startCol, _startPhi, 5, 5);
     window.DispObj(_arrowHandle);
 }
Exemplo n.º 12
0
        public override void Draw(HalconDotNet.HWindow window)
        {
            window.DispRectangle1(_upLeftRow, _upLeftCol, _botRightRow, _botRightCol);

            window.DispRectangle2(_upLeftRow, _botRightCol, 0, 5, 5);
            window.DispRectangle2(_upLeftRow, _upLeftCol, 0, 5, 5);
            window.DispRectangle2(_botRightRow, _upLeftCol, 0, 5, 5);
            window.DispRectangle2(_botRightRow, _botRightCol, 0, 5, 5);

            window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
        }
Exemplo n.º 13
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            //显示矩形
            window.DispRectangle2(rows[_activeHandleIdx], cols[_activeHandleIdx], _phi, 5, 5);

            //显示箭头
            if (_activeHandleIdx == 5)
            {
                window.DispArrow(_locateRow, _locateCol, _locateRow - (1.3 * _length1 * Math.Sin(_phi)), _locateCol + 1.3 * (_length1 * Math.Cos(_phi)), 2);
            }
        }
Exemplo n.º 14
0
        public override void Draw(HalconDotNet.HWindow window)
        {
            HalconDotNet.HTuple tmpRows = new HalconDotNet.HTuple(_sizeRows.ToArray <double>());
            HalconDotNet.HTuple tmpCols = new HalconDotNet.HTuple(_sizeCols.ToArray <double>());
            window.DispPolygon(tmpRows, tmpCols);

            window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5); //几何中心
            for (int i = 0; i < this._numHandles; i++)
            {
                window.DispRectangle2(_sizeRows[i], _sizeCols[i], 0, 2, 2);
            }
        }
Exemplo n.º 15
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            switch (_activeHandleIdx)
            {
            case 0:
                window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
                break;

            default:
                window.DispRectangle2(_sizeRows[_activeHandleIdx], _sizeCols[_activeHandleIdx], 0, 5, 5);
                break;
            }
        }
Exemplo n.º 16
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;

            _startRow = _locateRow;
            _startCol = _locateCol - 20;

            _extentRow = _locateRow;
            _extentCol = _locateCol + 20;

            this.UpdateArrowHandle();
        }
Exemplo n.º 17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="window"></param>
        public override void Draw(HalconDotNet.HWindow window)
        {
            //ROI矩形
            window.DispRectangle2(_locateRow, _locateCol, _phi, _length1, _length2);

            for (int i = 0; i < _numHandles; i++)
            {
                //ROI矩形的操作柄
                window.DispRectangle2(rows[i].D, cols[i].D, _phi, 5, 5);
            }

            //注:矩形右边的中点坐标(_locateRow-_length1*Sine(angle),_locateCol+_length2*Cosine(angle)),为使箭头超出一点,故而用系数1.3修正
            window.DispArrow(_locateRow, _locateCol, _locateRow - (1.3 * _length1 * Math.Sin(_phi)), _locateCol + 1.3 * (_length1 * Math.Cos(_phi)), 2);
        }
Exemplo n.º 18
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;

            _radiusInternal = 40;
            _radiusExternal = 80;

            _sizeRowInternal = row;
            _sizeColInternal = col + _radiusInternal;

            _sizeRowExternal = row;
            _sizeColExternal = col + _radiusExternal;
        }
Exemplo n.º 19
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            switch (_activeHandleIdx)
            {
            case 0:
                window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5);
                break;

            case 1:
                window.DispRectangle2(_sizeRowInternal, _sizeColInternal, 0, 5, 5);
                break;

            case 2:
                window.DispRectangle2(_sizeRowExternal, _sizeColExternal, 0, 5, 5);
                break;
            }
        }
Exemplo n.º 20
0
        /// <summary>
        /// 鼠标按下时的处理函数
        /// </summary>
        /// <param name="y"></param>
        /// <param name="x"></param>
        /// <returns></returns>
        internal int MouseDownAction(HalconDotNet.HWindow window, double y, double x)
        {
            double epsilon      = 35; //maximal shortest distance to one of the handles,距离最近操作柄最大距离值,超出该值表示未选中
            int    candidateidx = -1;

            if (_ROIMode != null)                         //either a new ROI object is created,创建新的ROI
            {
                _ROIMode.CreateROI(window, y, x);
                ROIList.Add(_ROIMode);
                _ROIMode       = null;
                ActiveROIIndex = ROIList.Count - 1;
                HWndCtrller.Repaint();
                this.NotifyIconic(EVENT_CREATED_ROI);
            }
            else if (ROIList.Count > 0)                  //an existing ROI object is manipulated,已有ROI
            {
                ActiveROIIndex = -1;

                double[] distArr  = new double[ROIList.Count];
                double   minvalue = 0;
                int      tmpIdx   = -1;

                for (int i = 0; i < ROIList.Count; i++)
                {
                    distArr[i] = ((ROI)ROIList[i]).DistanceToClosestHandle(y, x);
                }

                MinValueAndIndex(distArr, out minvalue, out tmpIdx);

                if (minvalue < epsilon)
                {
                    candidateidx = tmpIdx;
                }

                if (candidateidx >= 0)
                {
                    ActiveROIIndex = candidateidx;
                    this.NotifyIconic(EVENT_ACTIVATED_ROI);
                }

                this.HWndCtrller.Repaint();
            }                                         //没有ROI,也未创建ROI,则什么都不做

            return(ActiveROIIndex);
        }
Exemplo n.º 21
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;

            _length1 = 100;
            _length2 = 50;
            _phi     = 0.0;

            //角点order :midpoint,upperright,upperleft,lowerleft,lowerright,arrowmidpoint
            rowsInit = new HalconDotNet.HTuple(new double[] { 0.0, -1.0, -1.0, 1.0, 1.0, 0.0 });
            colsInit = new HalconDotNet.HTuple(new double[] { 0.0, 1.0, -1.0, -1.0, 1.0, 0.8 });

            hom2D = new HalconDotNet.HHomMat2D();
            tmp   = new HalconDotNet.HHomMat2D();

            UpdateHandlePos();
        }
Exemplo n.º 22
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            _locateRow = row;
            _locateCol = col;
            _radius    = 60;

            _sizeRow = _locateRow;
            _sizeCol = _locateCol - _radius;

            _startPhi       = PI * 0.25;
            _extentPhi      = PI * 1.5;
            _circularArcDir = "positive";

            //计算起点与终点的坐标
            UpdateArcHandles();

            //计算表示弧段方向的箭头
            UpdateArrowHandle();
        }
Exemplo n.º 23
0
        public override void CreateROI(HalconDotNet.HWindow window, double row, double col)
        {
            HalconDotNet.HObject polygonXLD = new HalconDotNet.HObject();
            HalconDotNet.HTuple  tmpRows    = new HalconDotNet.HTuple();
            HalconDotNet.HTuple  tmpCols    = new HalconDotNet.HTuple();
            HalconDotNet.HTuple  tmpWights  = new HalconDotNet.HTuple();

            HalconDotNet.HTuple area    = new HalconDotNet.HTuple();
            HalconDotNet.HTuple r       = new HalconDotNet.HTuple();
            HalconDotNet.HTuple c       = new HalconDotNet.HTuple();
            HalconDotNet.HTuple pointer = new HalconDotNet.HTuple();

            try
            {
                polygonXLD.Dispose();
                HalconDotNet.HOperatorSet.DrawNurbs(out polygonXLD, window, "true", "true", "true", "true", 3,
                                                    out tmpRows, out tmpCols, out tmpWights);
                if (tmpRows.TupleLength() > 0)
                {
                    polygonXLD.Dispose();
                    HalconDotNet.HOperatorSet.GenContourPolygonXld(out polygonXLD, tmpRows, tmpCols);
                    HalconDotNet.HOperatorSet.AreaCenterXld(polygonXLD, out area, out r, out c, out pointer);

                    _locateRow = r[0].D;
                    _locateCol = c[0].D;

                    window.DispPolygon(tmpRows, tmpCols);
                    window.DispRectangle2(_locateRow, _locateCol, 0, 5, 5); //几何中心
                    this._numHandles = tmpRows.TupleLength() + 1;           //几何中心+边点

                    for (int i = 0; i < tmpRows.TupleLength(); i++)
                    {
                        _sizeRows.Add(tmpRows[i].D);
                        _sizeCols.Add(tmpCols[i].D);
                        window.DispRectangle2(tmpRows[i].D, tmpCols[i].D, 0, 2, 2);
                    }
                }
            }
            catch (HalconDotNet.HalconException hex)
            {
            }
        }
Exemplo n.º 24
0
        public override void DisplayActiveHandle(HalconDotNet.HWindow window)
        {
            switch (_activeHandleIdx)
            {
            //定位中心
            case 0:
                window.DispRectangle2(_locateRow, _locateCol, 0, 4, 4);
                break;

            //线段起点
            case 1:
                window.DispRectangle2(_startRow, _startCol, 0, 4, 4);
                break;

            //线段终点箭头
            case 2:
                window.DispObj(_arrowHandle);
                break;

            default:
                break;
            }
        }
Exemplo n.º 25
0
 /// <summary>
 /// Paints the active handle of the ROI object into the supplied window.
 /// 在提供的窗口显示ROI的活动操作柄
 /// </summary>
 /// <param name="window">HALCON window</param>
 public virtual void DisplayActiveHandle(HalconDotNet.HWindow window)
 {
 }
Exemplo n.º 26
0
 /// <summary>Creates a new ROI instance at the mouse position.
 /// 在指定的位置创建ROI实例
 /// </summary>
 /// <param name="row">row coordinate for ROI</param>
 /// <param name="col">column coordinate for ROI</param>
 public virtual void CreateROI(HalconDotNet.HWindow window, double row, double col)
 {
 }
Exemplo n.º 27
0
        /// <summary>
        /// Applies graphical context to the HALCON window
        /// 应用图形变量的上下文到HALCON窗口
        /// </summary>
        /// <param name="hwindow">HALCON窗口</param>
        /// <param name="settings">哈希表存储的图形变量上下文</param>
        public void ApplyGraphicSettings(HalconDotNet.HWindow hwindow, System.Collections.Hashtable settings)
        {
            string key  = "";
            string valS = "";
            int    valI = -1;

            HalconDotNet.HTuple valH = null;

            this._ienumerator = settings.Keys.GetEnumerator(); //获取枚举器

            try
            {
                while (this._ienumerator.MoveNext())
                {
                    key = (string)this._ienumerator.Current;

                    //应用图形变量上下文与上次设置一致,则忽略
                    if (LastGCSettings.Contains(key) &&
                        LastGCSettings[key] == settings[key])
                    {
                        continue;
                    }

                    switch (key)
                    {
                    case GC_COLOR:      //设置指定颜色(非多颜色)
                        valS = (string)settings[key];
                        hwindow.SetColor(valS);
                        if (LastGCSettings.Contains(GC_COLORED))
                        {
                            LastGCSettings.Remove(GC_COLORED);
                        }
                        break;

                    case GC_COLORED:     //设置指定颜色数量(非指定颜色)
                        valI = (int)settings[key];
                        hwindow.SetColored(valI);
                        if (LastGCSettings.Contains(GC_COLOR))
                        {
                            LastGCSettings.Remove(GC_COLOR);
                        }
                        break;

                    case GC_DRAWMODE:     //设置指定画模式(填充/边缘)
                        valS = (string)settings[key];
                        hwindow.SetDraw(valS);
                        break;

                    case GC_LINEWIDTH:     //设置指定线宽
                        valI = (int)settings[key];
                        hwindow.SetLineWidth(valI);
                        break;

                    case GC_LUT:     //设置指定查询表配置
                        valS = (string)settings[key];
                        hwindow.SetLut(valS);
                        break;

                    case GC_PAINT:     //设置指定渲染配置
                        valS = (string)settings[key];
                        hwindow.SetPaint(valS);
                        break;

                    case GC_SHAPE:     //设置区域显示指定形状
                        valS = (string)settings[key];
                        hwindow.SetShape(valS);
                        break;

                    case GC_LINESTYLE:     //设置指定线型
                        valH = (HalconDotNet.HTuple)settings[key];
                        hwindow.SetLineStyle(valH);
                        break;

                    default:
                        break;
                    }

                    if (valI != -1)
                    {
                        if (LastGCSettings.Contains(key))
                        {
                            LastGCSettings[key] = valI;
                        }
                        else
                        {
                            LastGCSettings.Add(key, valI);
                        }
                        valI = -1;
                    }
                    else if (valS != "")
                    {
                        if (LastGCSettings.Contains(key))
                        {
                            LastGCSettings[key] = valS;
                        }
                        else
                        {
                            LastGCSettings.Add(key, valS);
                        }
                        valS = "";
                    }
                    else if (valH != null)
                    {
                        if (LastGCSettings.Contains(key))
                        {
                            LastGCSettings[key] = valI;
                        }
                        else
                        {
                            LastGCSettings.Add(key, valI);
                        }
                        valH = null;
                    }
                }
            }
            catch (HalconDotNet.HOperatorException hex)
            {
                this.NotifyGraphicContext(hex.Message);
            }
        }
 public HDrawingObjectController(HalconDotNet.HWindow hWindow)
 {
     mHDrawRegions = new List <HalconDotNet.HDrawingObject>();
     mHWindow      = hWindow;
     Callback      = DrawingObjectCallbackHandler;
 }
Exemplo n.º 29
0
 /// <summary>Paints the ROI into the supplied window.
 /// 在提供的窗口画ROI
 /// </summary>
 /// <param name="window">HALCON window</param>
 public virtual void Draw(HalconDotNet.HWindow window)
 {
 }