void OnImgDataOut() { if (HoImage != null && HoImage.IsInitialized()) { HoImage.Dispose(); } HoImage = _imgData.Clone(); if (HoImage != null && HoImage.IsInitialized()) { System.Threading.Thread.Sleep(10); if (CameraImageGrabbedEvt != null) { CameraImageGrabbedEvt(CameraProperty, HoImage); } } }
private void Bbi_Click(object sender, ItemClickEventArgs e) { switch (e.Item.Tag.ToString()) { case "BBI_LOADIMAGE": LoadImage(); break; case "BBI_LINE": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROILine()); //定义区域时,矢量线段不响应;主要用在定义测量 } } break; case "BBI_RECTANGLE1": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIRectangle1()); } } break; case "BBI_RECTANGLE2": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIRectangle2()); } } break; case "BBI_CIRCULARARC": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROICircularArc()); //定义区域时,有向圆弧不响应;主要用在定义测量 } } break; case "BBI_CIRCLE": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROICircle()); } } break; case "BBI_ANNULUS": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.SetROIShape(new ProVision.InteractiveROI.ROIAnnulus()); } } break; case "BBI_DELETEACTIVEROI": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _ROIManager.RemoveActiveROI(); } } break; case "BBI_DELETEALLROI": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetAll(); _HwndCtrller.Repaint(); } } break; case "BBI_RESETWINDOW": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetWindow(); _HwndCtrller.Repaint(); } } break; case "BBI_CLEARICONIC": if (_hoImage != null && _hoImage.IsInitialized()) { if (_ROIManager != null) { _HwndCtrller.ResetAll(); if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } if (_hoSelectedRegion != null && _hoSelectedRegion.IsInitialized()) { _hoSelectedRegion.Dispose(); } this.bchkiModifyRegion.Checked = false; this.lstbRegion.Items.Clear(); _isUpdated = false; } } break; case "BBI_UPDATEREGION": _isUpdated = false; if (_hoImage != null && _hoImage.IsInitialized()) { //若非传入区域 if (!_isTransmitted) { if (_ROIManager != null) { if (_hoRawRegion != null && _hoRawRegion.IsInitialized()) { _hoRawRegion.Dispose(); } HalconDotNet.HOperatorSet.GenEmptyObj(out _hoRawRegion); _roiList = _ROIManager.ROIList; if (_roiList != null && _roiList.Count > 0) { this.lstbRegion.Items.Clear(); string roiType = ""; for (int i = 0; i < _roiList.Count; i++) { HalconDotNet.HOperatorSet.ConcatObj(_hoRawRegion, ((ProVision.InteractiveROI.ROI)_roiList[i]).GetModelRegion(), out _hoRawRegion); roiType = ((ProVision.InteractiveROI.ROI)_roiList[i]).ROIShape.ToString(); this.lstbRegion.Items.Add(i.ToString("00") + "[" + roiType + "]"); } if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } _hoModifiedRegion = _hoRawRegion.Clone(); this.lstbRegion.SelectedIndex = 0; HalconDotNet.HOperatorSet.SelectObj(_hoModifiedRegion, out _hoSelectedRegion, 1); _isUpdated = true; } } } else { //传入区域--作为单一区域 this.lstbRegion.Items.Clear(); this.lstbRegion.Items.Add("00" + "[Arbitrary]"); if (_hoModifiedRegion != null && _hoModifiedRegion.IsInitialized()) { _hoModifiedRegion.Dispose(); } //修改区域与选择区域为同一指向 HalconDotNet.HOperatorSet.SelectObj(_hoRawRegion, out _hoModifiedRegion, 1); _hoSelectedRegion = _hoModifiedRegion; } } break; default: break; } }
/// <summary> /// 更新结果图形变量 /// [原始图像,搜索区域或跟随区域] /// </summary> /// <param name="resultData"></param> public void UpdateIconicResult(ProLaminator.Data.LaminatorProcessData resultData) { try { if (_hwndCtrller != null) { if (resultData != null) { this.Invoke( new System.Windows.Forms.MethodInvoker( () => { _hwndCtrller.ClearEntities(); _hoImage = resultData.RawImage; if (_tstImage != null && _tstImage.IsInitialized()) { _tstImage.Dispose(); } _tstImage = _hoImage.Clone(); _hwndCtrller.AddHobjEntity(_tstImage); _hwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, "red"); _hwndCtrller.AddHobjEntity(resultData.InspetcArea); _hwndCtrller.ChangeGraphicSettings(ProVision.InteractiveROI.GraphicContext.GC_COLOR, "green"); _hwndCtrller.AddHobjEntity(resultData.ResultRegion); _hwndCtrller.Repaint(); this.btneProOK.EditValue = resultData.ProductOKNumber; this.btneProNG.EditValue = resultData.ProductNGNumber; this.btneProTotal.EditValue = resultData.ProductTotalNumber; this.btneProYieldRatio.EditValue = resultData.ProductYieldRatio * 100; this.btneElapse.Text = System.Math.Round(resultData.ElapseTime, 2).ToString(); this.lblRunState.Text = resultData.RunState; this.lblInspectResult.Text = resultData.ImgResultOK ? "OK" : "NG"; this.lblInspectResult.ForeColor = resultData.ImgResultOK ? System.Drawing.Color.Green : System.Drawing.Color.Red; string r = System.Math.Round(resultData.Row.D, 2).ToString(); string c = System.Math.Round(resultData.Col.D, 2).ToString(); string a = System.Math.Round(resultData.DeltaAglRad.D, 2).ToString(); string x = resultData.DeltaX.ToString(); string y = resultData.DeltaY.ToString(); string da = resultData.DeltaAglDegree.ToString(); string flg = resultData.ResultFlag.ToString("00"); if (_displayResultList == null) { _displayResultList = new List <DisplayResult>(); } if (_displayResultList.Count > 0) { _displayResultList.Insert(0, new DisplayResult() { Row = r, COl = c, Angle = a, DeltaX = x, DeltaY = y, DeltaA = da, Flag = flg }); if (_displayResultList.Count > 3) { _displayResultList.RemoveAt(3); } } else { _displayResultList.Add(new DisplayResult() { Row = r, COl = c, Angle = a, DeltaX = x, DeltaY = y, DeltaA = da, Flag = flg }); } for (int i = 0; i < _displayResultList.Count; i++) { if (i == 0) { this.meLog.Text = ">>>"; this.meLog.Text += "定位坐标R:" + _displayResultList[i].Row + ",坐标C:" + _displayResultList[i].COl + ",弧角A:" + _displayResultList[i].Angle + "\r\n"; this.meLog.Text += "相对偏移X:" + _displayResultList[i].DeltaX + ",Y:" + _displayResultList[i].DeltaY + "角D:" + _displayResultList[i].DeltaA + "\r\n"; this.meLog.Text += "结果标记:" + _displayResultList[i].Flag; } else { this.meLog.Text += "\r\n>>>"; this.meLog.Text += "定位坐标R:" + _displayResultList[i].Row + ",坐标C:" + _displayResultList[i].COl + ",弧角A:" + _displayResultList[i].Angle + "\r\n"; this.meLog.Text += "相对偏移X:" + _displayResultList[i].DeltaX + ",Y:" + _displayResultList[i].DeltaY + "角D:" + _displayResultList[i].DeltaA + "\r\n"; this.meLog.Text += "结果标记:" + _displayResultList[i].Flag; } } })); } } } catch (HalconDotNet.HalconException hex) { } catch (System.Exception ex) { } }