Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="window"></param>
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            //ROI矩形
            HalconDotNet.HObject rec;
            HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(_phi),
                                                    new HalconDotNet.HTuple(_length1),
                                                    new HalconDotNet.HTuple(_length2));
            HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);

            for (int i = 0; i < NumHandles; i++)
            {
                //ROI矩形的操作柄
                HalconDotNet.HObject rec2;
                HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                        new HalconDotNet.HTuple(rows[i].D),
                                                        new HalconDotNet.HTuple(cols[i].D),
                                                        new HalconDotNet.HTuple(_phi),
                                                        new HalconDotNet.HTuple(5),
                                                        new HalconDotNet.HTuple(5));
                HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);
            }

            //注:矩形右边的中点坐标(_locateRow-_length1*Sine(angle),_locateCol+_length2*Cosine(angle)),为使箭头超出一点,故而用系数1.3修正
            HalconDotNet.HOperatorSet.DispArrow(hwndHandle,
                                                new HalconDotNet.HTuple(_locateRow),
                                                new HalconDotNet.HTuple(_locateCol),
                                                new HalconDotNet.HTuple(_locateRow - (1.3 * _length1 * Math.Sin(_phi))),
                                                new HalconDotNet.HTuple(_locateCol + 1.3 * (_length1 * Math.Cos(_phi))),
                                                new HalconDotNet.HTuple(2));
        }
    private static void SetColorsInObjectModel3D(HalconDotNet.HTuple objectModel3D, HalconDotNet.HObject RGB, HalconDotNet.HObject zReduced)
    {
        var domain = new HalconDotNet.HObject();
        var rows   = new HalconDotNet.HTuple();
        var cols   = new HalconDotNet.HTuple();

        HalconDotNet.HOperatorSet.GetDomain(zReduced, out domain);
        HalconDotNet.HOperatorSet.GetRegionPoints(domain, out rows, out cols);

        var objectRed   = new HalconDotNet.HObject();
        var objectGreen = new HalconDotNet.HObject();
        var objectBlue  = new HalconDotNet.HObject();

        HalconDotNet.HOperatorSet.AccessChannel(RGB, out objectRed, 1);
        HalconDotNet.HOperatorSet.AccessChannel(RGB, out objectGreen, 1);
        HalconDotNet.HOperatorSet.AccessChannel(RGB, out objectBlue, 1);

        var tupleRed   = new HalconDotNet.HTuple();
        var tupleGreen = new HalconDotNet.HTuple();
        var tupleBlue  = new HalconDotNet.HTuple();

        HalconDotNet.HOperatorSet.GetGrayval(objectRed, rows, cols, out tupleRed);
        HalconDotNet.HOperatorSet.GetGrayval(objectGreen, rows, cols, out tupleGreen);
        HalconDotNet.HOperatorSet.GetGrayval(objectBlue, rows, cols, out tupleBlue);

        HalconDotNet.HOperatorSet.SetObjectModel3dAttribMod(objectModel3D, "red", "points", tupleRed);
        HalconDotNet.HOperatorSet.SetObjectModel3dAttribMod(objectModel3D, "green", "points", tupleGreen);
        HalconDotNet.HOperatorSet.SetObjectModel3dAttribMod(objectModel3D, "blue", "points", tupleBlue);
    }
        /// <summary>
        /// 方法:初始化相机资源
        /// </summary>
        private void InitCamera()
        {
            if (_cameraList != null &&
                _cameraList.Count > 0)
            {
                for (int i = 0; i < _cameraList.Count; i++)
                {
                    //设置采集模式:触发采集,软触发每次1帧-OK
                    if (!CamHandleList[_cameraList[i].ID].SetAcquisitionMode(ProCommon.Communal.AcquisitionMode.SoftTrigger, 1))
                    {
                        continue;
                    }

                    ////设置触发信号边缘:上升沿-OK,硬触发时启用
                    //if (!CamHandleList[_cameraList[i].ID].SetTriggerActivation(ProCommon.Communal.TriggerLogic.RaiseEdge))
                    //    continue;

                    //设置采集帧率:-OK
                    if (!CamHandleList[_cameraList[i].ID].SetFrameRate(_cameraList[i].FPS))
                    {
                        continue;
                    }
                    ////设置相机曝光时间:-OK
                    //if (!CamHandleList[_cameraList[i].ID].SetExposureTime(_cameraList[i].ExposureTime))
                    //    continue;
                    ////设置相机增益:-OK
                    //if (!CamHandleList[_cameraList[i].ID].SetGain(_cameraList[i].Gain))
                    //    continue;
                    //设置相机触发采集延时:
                    //if (!CamHandleListNew[_cameraList[i].ID].SetTriggerDelay(100.0f))
                    //    continue;

                    //注册相机图像采集到事件回调函数
                    if (!CamHandleList[_cameraList[i].ID].RegisterImageGrabbedCallBack())
                    {
                        continue;
                    }
                    //注意:HikVision相机提供断线重连功能,Baumer相机暂无.因此,HikVision相机不需要定时器重连相机
                    if (!CamHandleList[_cameraList[i].ID].RegisterExceptionCallBack())
                    {
                        continue;
                    }
                    //设置相机开始采集
                    if (!CamHandleList[_cameraList[i].ID].StartGrab())
                    {
                        continue;
                    }
                }
            }

            //更新相机的标定方案中的仿射变换矩阵
            if (_cameraForArmband != null)
            {
                if (_cameraForArmband.CalibrationSolution != null)
                {
                    double[] homMat2DArr = _cameraForArmband.CalibrationSolution.ResultOfCaliPoint.PC2WCHomMat2D;
                    _homMat2DForCameraArmband = new HalconDotNet.HTuple(homMat2DArr);
                }
            }
        }
Exemple #4
0
        public override void DisplayActiveHandle(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject rec = new HalconDotNet.HObject();
            rec.Dispose();
            switch (ActiveHandleIdx)
            {
            case 0:
            {
                HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                        new HalconDotNet.HTuple(_locateRow),
                                                        new HalconDotNet.HTuple(_locateCol),
                                                        new HalconDotNet.HTuple(0),
                                                        new HalconDotNet.HTuple(5),
                                                        new HalconDotNet.HTuple(5));
                HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
            }
            break;

            case 1:
            {
                HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                        new HalconDotNet.HTuple(_sizeRow),
                                                        new HalconDotNet.HTuple(_sizeCol),
                                                        new HalconDotNet.HTuple(0),
                                                        new HalconDotNet.HTuple(5),
                                                        new HalconDotNet.HTuple(5));
                HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
            }
            break;

            default:
                break;
            }
        }
Exemple #5
0
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject rgCircle = new HalconDotNet.HObject();
            rgCircle.Dispose();
            HalconDotNet.HOperatorSet.GenCircle(out rgCircle, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radius));
            HalconDotNet.HOperatorSet.DispObj(rgCircle, hwndHandle);

            HalconDotNet.HObject rec1 = new HalconDotNet.HObject(), rec2 = new HalconDotNet.HObject();
            rec1.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);

            rec2.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                    new HalconDotNet.HTuple(_sizeRow),
                                                    new HalconDotNet.HTuple(_sizeCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);
        }
Exemple #6
0
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject line = new HalconDotNet.HObject(), rec1 = new HalconDotNet.HObject(), rec2 = new HalconDotNet.HObject();
            line.Dispose();
            HalconDotNet.HOperatorSet.GenRegionLine(out line,
                                                    new HalconDotNet.HTuple(_startRow),
                                                    new HalconDotNet.HTuple(_startCol),
                                                    new HalconDotNet.HTuple(_extentRow),
                                                    new HalconDotNet.HTuple(_extentCol));
            HalconDotNet.HOperatorSet.DispObj(line, hwndHandle);

            rec1.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_startRow),
                                                    new HalconDotNet.HTuple(_startCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);

            rec2.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);
            if (_arrowHandle != null &&
                _arrowHandle.IsInitialized())
            {
                HalconDotNet.HOperatorSet.DispObj(_arrowHandle, hwndHandle);
            }
        }
Exemple #7
0
        protected internal virtual void InitFieldAndProperty()
        {
            _isCtrlKeyPressed      = false;
            _isAltKeyPressed       = false;
            this.rdbtnNone.Checked = false;
            this.rdbtnNone.Checked = true;

            _ROIManager  = new ProVision.InteractiveROI.ROIManager();
            _HwndCtrller = new ProVision.InteractiveROI.HWndCtrller(this.hWndcDisplay);
            _HwndCtrller.RegisterHwndCtrlMouseEvents();
            _HwndCtrller.SetViewMode(ProVision.InteractiveROI.HWndCtrller.VIEW_MODE_NONE);
            _HwndCtrller.RegisterROICtroller(_ROIManager);
            _ROIManager.SetActiveROISign(ProVision.InteractiveROI.ROIManager.ROI_MODE_POS);

            //引用变量复位
            _hoRawRegion         = null;
            _hoBrushRegion       = null;
            _hoResultRegion      = null;
            _imgWidth            = null;
            _imgHeight           = null;
            _brushColor          = "white";
            _resultRegionColor   = "yellow";
            _selectedRegionColor = "green";

            _isErasingRegion        = false;
            _isErasedRegion         = false;
            _isObtainedResultRegion = false;
            _brushZoomFactor        = 15.0d;
        }
Exemple #8
0
        /// <summary>
        /// Initializes the image dimension, mouse delegation,
        /// and the graphical context setup of the instance.
        /// </summary>
        /// <param name="hwndctrl"></param>
        public HWndCtrller(HalconDotNet.HWindowControl hwndctrl)
        {
            _hWndCtrl     = hwndctrl;
            _viewMode     = HWndCtrller.VIEW_MODE_NONE;
            _windowWidth  = _hWndCtrl.Size.Width;
            _windowHeight = _hWndCtrl.Size.Height;

            ZoomWndFactor = (double)_imageWidth / _hWndCtrl.Width;
            ZoomAddOn     = System.Math.Pow(0.9, 5);
            _zoomWndSize  = 150;

            _ROIPaintMode = HWndCtrller.PAINT_MODE_INCLUDE_ROI;

            NotifyInfoObserver = new InformationUpdatedDelegate(DummyS);
            IconicUpdatedEvt   = new IconicUpdatedDelegate(OnIconicUpdated);

            /* Graphical Stack */
            _hObjEntityList = new System.Collections.ArrayList(20);
            _grpCntx        = new GraphicContext();
            _grpCntx.NotifyGraphicContext = new GraphicContextDelegate(ExceptionGC);

            _msgLineList     = new System.Collections.Generic.List <Communal.MessageLine>();
            _defaultRowlEdge = 10;
            _rowlEdge        = new HalconDotNet.HTuple();

            /*GUI绘制窗口用参数的初始值*/
            _compRangeX = new int[] { 0, 100 };
            _compRangeY = new int[] { 0, 100 };
            _prevCompX  = _prevCompY = 0;
        }
Exemple #9
0
        /// <summary>
        /// 关闭设备
        /// </summary>
        /// <returns></returns>
        protected override bool DoClose()
        {
            bool rt = false;

            try
            {
                if (!AcqHandle.TupleEqual(new HalconDotNet.HTuple()))
                {
                    HalconDotNet.HOperatorSet.CloseFramegrabber(AcqHandle);
                    AcqHandle = null;
                    rt        = true;
                }
            }
            catch (HalconDotNet.HalconException hex)
            {
                if (DriverExceptionDel != null)
                {
                    DriverExceptionDel(string.Format("错误:Halcon模拟相机关闭设备失败!\n错误代码:{0}", hex.GetErrorCode()));
                }
            }
            finally
            {
            }
            return(rt);
        }
Exemple #10
0
        public override void DisplayActiveHandle(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject rec = new HalconDotNet.HObject();
            rec.Dispose();
            switch (ActiveHandleIdx)
            {
            //定位圆心
            case 0:
            {
                HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                        new HalconDotNet.HTuple(_locateRow),
                                                        new HalconDotNet.HTuple(_locateCol),
                                                        new HalconDotNet.HTuple(0),
                                                        new HalconDotNet.HTuple(5),
                                                        new HalconDotNet.HTuple(5));
                HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
            }
            break;

            //缩放边点
            case 1:
            {
                HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                        new HalconDotNet.HTuple(_sizeRow),
                                                        new HalconDotNet.HTuple(_sizeCol),
                                                        new HalconDotNet.HTuple(0),
                                                        new HalconDotNet.HTuple(5),
                                                        new HalconDotNet.HTuple(5));
                HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
            }
            break;

            //弧段起始角点
            case 2:
            {
                HalconDotNet.HOperatorSet.GenRectangle2(out rec,
                                                        new HalconDotNet.HTuple(_startRow),
                                                        new HalconDotNet.HTuple(_startCol),
                                                        new HalconDotNet.HTuple(_startPhi),
                                                        new HalconDotNet.HTuple(10),
                                                        new HalconDotNet.HTuple(2));
                HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
            }
            break;

            //弧段终止角点(箭头)
            case 3:
                if (_arrowHandle != null &&
                    _arrowHandle.IsInitialized())
                {
                    HalconDotNet.HOperatorSet.DispObj(_arrowHandle, hwndHandle);
                }
                break;

            default:
                break;
            }
        }
Exemple #11
0
        public void Repaint(HalconDotNet.HTuple hwndHandle)
        {
            try
            {
                int count = _hObjEntityList.Count;
                InteractiveROI.HObjectEntity hobjentry;

                HalconDotNet.HSystem.SetSystem("flush_graphic", "false"); //不更新图形变量
                HalconDotNet.HOperatorSet.ClearWindow(hwndHandle);

                _grpCntx.LastGCSettings.Clear();
                //显示对应图形上下文的图形对象(图像)
                for (int i = 0; i < count; i++)
                {
                    hobjentry = (InteractiveROI.HObjectEntity)_hObjEntityList[i];
                    if (hobjentry.HObj != null &&
                        hobjentry.HObj.IsInitialized())
                    {
                        _grpCntx.ApplyGraphicSettings(hwndHandle, hobjentry.GCSettings);

                        HalconDotNet.HOperatorSet.DispObj(hobjentry.HObj, hwndHandle);
                    }
                }

                NotifyInfoObserver();

                //显示ROI
                if ((_ROICtrller != null) &&
                    (_ROIPaintMode == HWndCtrller.PAINT_MODE_INCLUDE_ROI))
                {
                    _ROICtrller.PaintData(hwndHandle);
                }

                //显示信息条
                if (_msgLineList != null)
                {
                    count = _msgLineList.Count;
                    ProVision.Communal.MessageLine msgLine;
                    for (int i = 0; i < count; i++)
                    {
                        msgLine = _msgLineList[i];

                        //设置显示文本:
                        ProVision.Communal.Functions.SetDisplayFont(hwndHandle, msgLine.CtxSize, msgLine.CtxFont, msgLine.CtxBold, msgLine.CtxSlant);

                        //显示文本
                        ProVision.Communal.Functions.DispMessage(hwndHandle, msgLine.Context,
                                                                 msgLine.CtxCoordinateSystem, msgLine.Row + RowlEdge * i, msgLine.Col, msgLine.CtxColor, new HalconDotNet.HTuple("false"));
                    }
                }

                HalconDotNet.HSystem.SetSystem("flush_graphic", "true");                        //更新图形变量
                HalconDotNet.HOperatorSet.SetColor(hwndHandle, new HalconDotNet.HTuple("black"));
                HalconDotNet.HOperatorSet.DispLine(hwndHandle, -100.0, -100.0, -101.0, -101.0); //不知何用
            }
            catch (HalconDotNet.HalconException hex) { }
        }
Exemple #12
0
 /// <summary>
 /// 设置图形上下文
 /// [HTuple型参数]
 /// </summary>
 /// <param name="mode"></param>
 /// <param name="val"></param>
 public void ChangeGraphicSettings(string mode, HalconDotNet.HTuple val)
 {
     switch (mode)
     {
     case GraphicContext.GC_LINESTYLE:
         _grpCntx.SetLineStyleAttribute(val);
         break;
     }
 }
Exemple #13
0
        /// <summary>
        /// 计算基于特征点的标定转换矩阵
        /// </summary>
        public void CalculateCaliPointHomMatrix()
        {
            if (CaliSolution != null &&
                CaliSolution.CalibrationPointPairBList.Count > 3)
            {
                HalconDotNet.HTuple row, col, axis1, axis2;
                HalconDotNet.HTuple sx, sy, phi, theta, tx, ty;
                HalconDotNet.HTuple tmp1, tmp2, pixelError, physicalError;
                CaliSolution.IsEffective = false;

                try
                {
                    row   = new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[0].PC.Row);
                    col   = new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[0].PC.Col);
                    axis1 = new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[0].WC.X);
                    axis2 = new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[0].WC.Y);

                    int count = CaliSolution.CalibrationPointPairBList.Count;
                    for (int i = 1; i < count; i++)
                    {
                        row = row.TupleConcat(new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[i].PC.Row));
                        col = col.TupleConcat(new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[i].PC.Col));

                        axis1 = axis1.TupleConcat(new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[i].WC.X));
                        axis2 = axis2.TupleConcat(new HalconDotNet.HTuple(CaliSolution.CalibrationPointPairBList[i].WC.Y));
                    }

                    HalconDotNet.HOperatorSet.VectorToHomMat2d(row, col, axis1, axis2, out _p2whomMat2D);
                    HalconDotNet.HOperatorSet.VectorToHomMat2d(axis1, axis2, row, col, out _w2phomMat2D);

                    //1-根据转换关系,物理坐标系点转换为像素点
                    HalconDotNet.HOperatorSet.AffineTransPoint2d(_w2phomMat2D, axis1, axis2, out tmp1, out tmp2);
                    pixelError = ((row - tmp1) * (row - tmp1) + (col - tmp2) * (col - tmp2)).TupleMean();

                    //2-根据转换关系,像素坐标系点转换为物理点
                    HalconDotNet.HOperatorSet.AffineTransPoint2d(_p2whomMat2D, row, col, out tmp1, out tmp2);
                    physicalError = ((axis1 - tmp1) * (axis1 - tmp1) + (axis2 - tmp2) * (axis2 - tmp2)).TupleMean();

                    HalconDotNet.HOperatorSet.HomMat2dToAffinePar(_p2whomMat2D, out sx, out sy, out phi, out theta, out tx, out ty);

                    CaliSolution.ResultOfCaliPoint = new Communal.ResultOfCalibrationPoint();
                    CaliSolution.ResultOfCaliPoint.PC2WCHomMat2D            = _p2whomMat2D.ToDArr();
                    CaliSolution.ResultOfCaliPoint.WC2PCHomMat2D            = _w2phomMat2D.ToDArr();
                    CaliSolution.ResultOfCaliPoint.Sx                       = sx.D;
                    CaliSolution.ResultOfCaliPoint.Sy                       = sy.D;
                    CaliSolution.ResultOfCaliPoint.Phi                      = phi.D;
                    CaliSolution.ResultOfCaliPoint.Theta                    = theta.D;
                    CaliSolution.ResultOfCaliPoint.Tx                       = tx.D;
                    CaliSolution.ResultOfCaliPoint.Ty                       = ty.D;
                    CaliSolution.ResultOfCaliPoint.CalibrationPhysicalError = physicalError;
                    CaliSolution.ResultOfCaliPoint.CalibrationPixelError    = pixelError;
                    CaliSolution.IsEffective = true;
                }
                catch { }
            }
        }
Exemple #14
0
 protected void GetImageSize(HalconDotNet.HObject img, out HalconDotNet.HTuple wdth, out HalconDotNet.HTuple hgh)
 {
     wdth = null;
     hgh  = null;
     if (img != null &&
         img.IsInitialized())
     {
         HalconDotNet.HOperatorSet.GetImageSize(img, out wdth, out hgh);
     }
 }
Exemple #15
0
 /// <summary>
 /// Adds a value to the hashlist 'GraphicalSettings' for the
 /// graphical mode, described by the parameter 'key'
 /// </summary>
 /// <param name="key">A graphical mode defined by the constant GC_*
 /// </param>
 /// <param name="val">
 /// Defines the value as a HTuple for this
 /// graphical mode 'key'
 /// </param>
 private void SetGraphicAttribute(string key, HalconDotNet.HTuple val)
 {
     if (_GCSettings.ContainsKey(key))
     {
         _GCSettings[key] = val;
     }
     else
     {
         _GCSettings.Add(key, val);
     }
 }
Exemple #16
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);
            }
        }
Exemple #17
0
 /// <summary>
 /// 加载数据
 /// </summary>
 /// <param name="path"></param>
 public static void ReadVisionPara(string path)
 {
     HalconDotNet.HTuple exist = null;
     HalconDotNet.HOperatorSet.FileExists(path + "\\VisionPara.config", out exist);
     if ((int)exist != 0)
     {
         ParameterSetting.Parameter.attri = global::Vision.Tool.Serialization.LoadFromXml(typeof(Attribute), path + "\\VisionPara.config") as Attribute;
         if (ParameterSetting.Parameter.attri == null)
         {
             ParameterSetting.Parameter.attri = new Attribute();
         }
     }
 }
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject rec1, rec2, rec3, rec4, rec5, rec;

            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_upLeftRow),
                                                    new HalconDotNet.HTuple(_botRightCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                    new HalconDotNet.HTuple(_upLeftRow),
                                                    new HalconDotNet.HTuple(_upLeftCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec3,
                                                    new HalconDotNet.HTuple(_botRightRow),
                                                    new HalconDotNet.HTuple(_upLeftCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec3, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec4,
                                                    new HalconDotNet.HTuple(_botRightRow),
                                                    new HalconDotNet.HTuple(_botRightCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec4, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec5,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec5, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle1(out rec,
                                                    new HalconDotNet.HTuple(_upLeftRow),
                                                    new HalconDotNet.HTuple(_upLeftCol),
                                                    new HalconDotNet.HTuple(_botRightRow),
                                                    new HalconDotNet.HTuple(_botRightCol));
            HalconDotNet.HOperatorSet.DispObj(rec, hwndHandle);
        }
        public bool AddRoi(RoiType type)
        {
            bool isSuccess = false;

            try
            {
                switch (type)
                {
                case RoiType.Rectangle:
                    mHDrawRegions.Add(new HalconDotNet.HDrawingObject());
                    mHDrawRegions.Last().CreateDrawingObjectRectangle1(100, 100, 500, 500);
                    break;

                case RoiType.Circle:
                    mHDrawRegions.Add(new HalconDotNet.HDrawingObject());
                    mHDrawRegions.Last().CreateDrawingObjectCircle(100, 100, 250);
                    break;

                case RoiType.Polygon:     // 先不要用,目前還不知道怎麼定形
                    mHDrawRegions.Add(new HalconDotNet.HDrawingObject());
                    mHDrawRegions.Last().CreateDrawingObjectXld(new HalconDotNet.HTuple(new int[] { 100, 150 }), new HalconDotNet.HTuple(new int[] { 100, 150 }));
                    break;
                }

                HalconDotNet.HDrawingObject.HDrawingObjectCallback test = Callback;
                IntPtr callback = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(test);
                HalconDotNet.HTuple listenTo = new HalconDotNet.HTuple("on_select", "on_attach", "on_detach", "on_drag", "on_resize"); // in order to try order events
                //HalconDotNet.HTuple listenTo = new HalconDotNet.HTuple("on_select");

                if (mHWindow != null)
                {
                    mHWindow.AttachDrawingObjectToWindow(mHDrawRegions.Last());
                }

                mHDrawRegions.Last().SetDrawingObjectCallback(listenTo, new HalconDotNet.HTuple(callback));
                mCurrentRoiId = mHDrawRegions.Last().ID;

                isSuccess = true;
            }
            catch (HalconDotNet.HalconException ex)
            {
                Console.WriteLine($"{ex.StackTrace}");
            }
            catch (System.Exception ex)
            {
                Console.WriteLine($"{ex.StackTrace}");
            }

            return(isSuccess);
        }
    private static HalconDotNet.HTuple GetFirstAvailableZividDevice()
    {
        var devices     = new HalconDotNet.HTuple();
        var information = new HalconDotNet.HTuple();

        HalconDotNet.HOperatorSet.InfoFramegrabber("GenICamTL", "device", out information, out devices);

        var zividDevices = devices.TupleRegexpSelect("Zivid");

        if (zividDevices.Length == 0)
        {
            throw new System.InvalidOperationException("No Zivid devices found. Please check your setup.");
        }
        return(zividDevices[0]);
    }
Exemple #21
0
 /// <summary>
 /// 物理坐标转换为像素坐标
 /// </summary>
 /// <param name="physicalP"></param>
 /// <param name="pixelP"></param>
 public void TransferPhysicalToPixel(ProVision.Communal.WorldCoordinate physicalP, out ProVision.Communal.PixelCoordinate pixelP)
 {
     pixelP = new Communal.PixelCoordinate()
     {
         Row = 0, Col = 0
     };
     if (CaliSolution != null &&
         CaliSolution.IsEffective)
     {
         HalconDotNet.HTuple row, col, x, y;
         x = new HalconDotNet.HTuple(physicalP.X);
         y = new HalconDotNet.HTuple(physicalP.Y);
         HalconDotNet.HOperatorSet.AffineTransPoint2d(_w2phomMat2D, x, y, out row, out col);
         pixelP.Row = row.D;
         pixelP.Col = col.D;
     }
 }
Exemple #22
0
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject xldCross = new HalconDotNet.HObject();
            xldCross.Dispose();
            HalconDotNet.HOperatorSet.GenCrossContourXld(out xldCross, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), 9999, 0);
            HalconDotNet.HOperatorSet.DispObj(xldCross, hwndHandle);

            HalconDotNet.HObject rec1 = new HalconDotNet.HObject();
            rec1.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);
        }
Exemple #23
0
 /// <summary>
 /// 像素坐标转换为物理坐标
 /// </summary>
 /// <param name="pixelP"></param>
 /// <param name="physicalP"></param>
 public void TransferPixelToPhysical(ProVision.Communal.PixelCoordinate pixelP, out ProVision.Communal.WorldCoordinate physicalP)
 {
     physicalP = new Communal.WorldCoordinate()
     {
         X = pixelP.Row, Y = pixelP.Col, Z = 0
     };
     if (CaliSolution != null &&
         CaliSolution.IsEffective)
     {
         HalconDotNet.HTuple row, col, x, y;
         row = new HalconDotNet.HTuple(pixelP.Row);
         col = new HalconDotNet.HTuple(pixelP.Col);
         HalconDotNet.HOperatorSet.AffineTransPoint2d(_p2whomMat2D, row, col, out x, out y);
         physicalP.X = x.D;
         physicalP.Y = y.D;
     }
 }
Exemple #24
0
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            _circularArc.Dispose();
            HalconDotNet.HOperatorSet.GenCircleContourXld(out _circularArc,
                                                          new HalconDotNet.HTuple(_locateRow),
                                                          new HalconDotNet.HTuple(_locateCol),
                                                          new HalconDotNet.HTuple(_radius),
                                                          new HalconDotNet.HTuple(_startPhi),
                                                          new HalconDotNet.HTuple(_startPhi + _extentPhi),
                                                          new HalconDotNet.HTuple(_circularArcDir),
                                                          new HalconDotNet.HTuple(1.0));
            HalconDotNet.HOperatorSet.DispObj(_circularArc, hwndHandle);

            HalconDotNet.HObject rec1, rec2, rec3;

            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_sizeRow),
                                                    new HalconDotNet.HTuple(_sizeCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);

            HalconDotNet.HOperatorSet.GenRectangle2(out rec3,
                                                    new HalconDotNet.HTuple(_startRow),
                                                    new HalconDotNet.HTuple(_startCol),
                                                    new HalconDotNet.HTuple(_startPhi),
                                                    new HalconDotNet.HTuple(10),
                                                    new HalconDotNet.HTuple(2));
            HalconDotNet.HOperatorSet.DispObj(rec3, hwndHandle);

            if (_arrowHandle != null &&
                _arrowHandle.IsInitialized())
            {
                HalconDotNet.HOperatorSet.DispObj(_arrowHandle, hwndHandle);
            }
        }
Exemple #25
0
        /// <summary>
        /// Sets the sign of a ROI object to be positive or negative.
        /// The sign is used when creating a model region for matching
        /// applications by summing up all positive and negative ROI models
        /// created so far.
        /// 设置ROI标记
        /// </summary>
        /// <param name="flag">Sign of ROI object</param>
        public void SetOperationFlag(int flag)
        {
            OperationFlag = flag;
            switch (OperationFlag)
            {
            case ROI.MODE_POSITIVE:
                LineStyle = PosOperation;
                break;

            case ROI.MODE_NEGATIVE:
                LineStyle = NegOperation;
                break;

            default:
                LineStyle = PosOperation;
                break;
            }
        }
Exemple #26
0
        public override void CreateROI(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 });

            homMat2D = new HalconDotNet.HTuple();
            tmp2D    = new HalconDotNet.HTuple();

            DetermineHandlePos();
        }
Exemple #27
0
        /// <summary>
        /// Sets the sign of a ROI object to be positive or negative.
        /// The sign is used when creating a model region for matching
        /// applications by summing up all positive and negative ROI models
        /// created so far.
        /// 设置ROI标记
        /// </summary>
        /// <param name="sign">Sign of ROI object</param>
        public void SetROISign(int sign)
        {
            _sgin = sign;

            switch (_sgin)
            {
            case ROI.SIGN_POSITIVE:
                LineStyle = _posLineStyle;
                break;

            case ROI.SIGN_NEGATIVE:
                LineStyle = _negLineStyle;
                break;

            default:
                LineStyle = _posLineStyle;
                break;
            }
        }
Exemple #28
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)
            {
            }
        }
Exemple #29
0
        public override void MoveByHandle(double row, double col)
        {
            double vX, vY, x = 0, y = 0;

            switch (_activeHandleIdx)
            {
            //定位点(平移)
            case 0:
                _locateRow = row;
                _locateCol = col;
                break;

            //四个角点(缩放)
            case 1:
            case 2:
            case 3:
            case 4:
                tmp      = hom2D.HomMat2dInvert();
                y        = tmp.AffineTransPoint2d(row, col, out x);
                _length1 = Math.Abs(x);
                _length2 = Math.Abs(y);

                //计算并判断
                CheckeForRange(y, x);
                break;

            //箭头
            case 5:
                //旋角向量
                vY = row - rows[0];
                vX = col - cols[0];
                //角度参考:角度是以水平方向为零,逆时针为正,反之为负,角度范围[-Π,Π]
                HalconDotNet.HTuple rad = new HalconDotNet.HTuple();
                HalconDotNet.HOperatorSet.AngleLx((HalconDotNet.HTuple) 0, (HalconDotNet.HTuple) 0, (HalconDotNet.HTuple)vY, (HalconDotNet.HTuple)vX, out rad);
                //_phi = Math.Atan2(vX, vY);
                _phi = rad[0].D;
                break;
            }

            UpdateHandlePos();
        }
Exemple #30
0
        public override void Draw(HalconDotNet.HTuple hwndHandle)
        {
            HalconDotNet.HObject rgInternal = new HalconDotNet.HObject();
            rgInternal.Dispose();
            HalconDotNet.HOperatorSet.GenCircle(out rgInternal, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radiusInternal));
            HalconDotNet.HOperatorSet.DispObj(rgInternal, hwndHandle);

            HalconDotNet.HObject rgExternal = new HalconDotNet.HObject();
            rgExternal.Dispose();
            HalconDotNet.HOperatorSet.GenCircle(out rgExternal, new HalconDotNet.HTuple(_locateRow), new HalconDotNet.HTuple(_locateCol), new HalconDotNet.HTuple(_radiusExternal));
            HalconDotNet.HOperatorSet.DispObj(rgExternal, hwndHandle);

            HalconDotNet.HObject rec1 = new HalconDotNet.HObject(), rec2 = new HalconDotNet.HObject(), rec3 = new HalconDotNet.HObject();
            rec1.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec1,
                                                    new HalconDotNet.HTuple(_locateRow),
                                                    new HalconDotNet.HTuple(_locateCol),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec1, hwndHandle);

            rec2.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec2,
                                                    new HalconDotNet.HTuple(_sizeRowInternal),
                                                    new HalconDotNet.HTuple(_sizeColInternal),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec2, hwndHandle);

            rec3.Dispose();
            HalconDotNet.HOperatorSet.GenRectangle2(out rec3,
                                                    new HalconDotNet.HTuple(_sizeRowExternal),
                                                    new HalconDotNet.HTuple(_sizeColExternal),
                                                    new HalconDotNet.HTuple(0),
                                                    new HalconDotNet.HTuple(5),
                                                    new HalconDotNet.HTuple(5));
            HalconDotNet.HOperatorSet.DispObj(rec3, hwndHandle);
        }