/// <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); } } }
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; } }
/// <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); //不知何用 }
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; } }
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); }
/// <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); }
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); }
public override void CreateROI(HalconDotNet.HWindow window, double row, double col) { _locateRow = row; _locateCol = col; _radius = 60; _sizeRow = _locateRow; _sizeCol = _locateCol + _radius; }
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; }
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); }
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); }
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); } }
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); } }
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; } }
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(); }
/// <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); }
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; }
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; } }
/// <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); }
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(); }
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(); }
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 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; } }
/// <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) { }
/// <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) { }
/// <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; }
/// <summary>Paints the ROI into the supplied window. /// 在提供的窗口画ROI /// </summary> /// <param name="window">HALCON window</param> public virtual void Draw(HalconDotNet.HWindow window) { }