/// <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); } } }
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; } }
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); }
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); } }
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; }
/// <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; }
/// <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); }
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; } }
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) { } }
/// <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; } }
/// <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 { } } }
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); } }
/// <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); } }
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); } }
/// <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]); }
/// <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; } }
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); }
/// <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; } }
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); } }
/// <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; } }
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(); }
/// <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; } }
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) { } }
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(); }
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); }