/// <summary>将ROI绘制到提供的窗口中</summary> /// <param name="window">HALCON window</param> public override void draw(HalconDotNet.HWindow window) { window.DispLine(midR + Math.Sin(phi) * length1, midC + Math.Cos(phi) * length1, midR + (Math.Sin(phi) * (length1 + 30)), midC + (Math.Cos(phi) * (length1 + 30))); for (int i = 0; i < PointNum; i++) { window.DispRectangle2(midR + (-length1 + length1 / PointNum + length1 * 2 / PointNum * i) * Math.Sin(phi), midC + (-length1 + length1 / PointNum + length1 * 2 / PointNum * i) * Math.Cos(phi), -phi, length1 / PointNum, length2); } window.SetDraw("fill"); for (int i = 0; i < NumHandles - 1; i++) { window.DispRectangle2(rows[i].D, cols[i].D, -phi, 10, 10); } window.DispCircle((midR + Math.Sin(phi) * (length1 + 36)), (midC + Math.Cos(phi) * (length1 + 36)), 12); window.SetLineWidth(5); window.DispArrow(midR - (Math.Sin(phi - Math.PI / 2) * (length2 - 10)), midC - (Math.Cos(phi - Math.PI / 2) * (length2 - 10)), midR - (Math.Sin(phi - Math.PI / 2) * length2), midC - (Math.Cos(phi - Math.PI / 2) * length2), 2.0); window.SetLineWidth(1); window.SetDraw("margin"); }
/// <summary> /// draw, 決定要畫什麼在 window 上 /// </summary> /// <param name="window">Halcon Window</param> public override void draw(HalconDotNet.HWindow window) { double crossSize = 12; double crossAngle = 0.785398; //寫字 if (!String.IsNullOrEmpty(Name)) { if (!this.IsActive) { window.SetColor("red"); } HOperatorSet.SetTposition(window, _model.RowBegin, _model.ColBegin); window.WriteString(Name); } //畫圓 if (!this.IsActive) { window.SetColor("magenta"); } window.SetLineWidth(2); var radius = _model.Distance / CircleDistanceSetting; window.DispCross(_model.RowBegin, _model.ColBegin, crossSize, crossAngle); window.DispCircle(_model.RowBegin, _model.ColBegin, radius); //畫圓內虛線 /**/ window.SetLineWidth(1); HTuple dotLineStyle = new HTuple(new int[4] { 20, 7, 3, 7 }); window.SetLineStyle(dotLineStyle); var hLineRowBegin = _model.RowBegin; var hLineColBegin = _model.ColBegin - radius; var hLineRowEnd = _model.RowBegin; var hLineColEnd = _model.ColBegin + radius; var vLineRowBegin = _model.RowBegin - radius; var vLineColBegin = _model.ColBegin; var vLineRowEnd = _model.RowBegin + radius; var vLineColEnd = _model.ColBegin; window.DispLine(hLineRowBegin, hLineColBegin, hLineRowEnd, hLineColEnd); window.DispLine(vLineRowBegin, vLineColBegin, vLineRowEnd, vLineColEnd); //Reset line Style HOperatorSet.SetLineStyle(window, null); }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintData(HalconDotNet.HWindow window) { window.SetDraw("margin"); window.SetLineWidth(1); if (ROIList.Count > 0) { window.SetColor(inactiveCol); window.SetDraw("margin"); for (int i = 0; i < ROIList.Count; i++) { window.SetLineStyle(((ROI)ROIList[i]).flagLineStyle); ((ROI)ROIList[i]).draw(window); } if (activeROIidx != -1) { window.SetColor(activeCol); window.SetLineStyle(((ROI)ROIList[activeROIidx]).flagLineStyle); ((ROI)ROIList[activeROIidx]).draw(window); window.SetColor(activeHdlCol); ((ROI)ROIList[activeROIidx]).displayActive(window); } } }
/// <summary> /// Paints specified region from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintSpecifiedROI(HalconDotNet.HWindow window, int RegionID) { window.SetDraw("margin"); window.SetLineWidth(1); if ((ROIList.Count > 0) && (ROIList.Count > RegionID)) { window.SetColor(inactiveCol); window.SetDraw("margin"); window.SetLineStyle(((ROI)ROIList[RegionID]).flagLineStyle); ((ROI)ROIList[RegionID]).draw(window); if ((activeROIidx != -1) && (activeROIidx == RegionID)) { window.SetColor(activeCol); window.SetLineStyle(((ROI)ROIList[activeROIidx]).flagLineStyle); ((ROI)ROIList[activeROIidx]).draw(window); window.SetColor(activeHdlCol); ((ROI)ROIList[activeROIidx]).displayActive(window); } } }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintData(HalconDotNet.HWindow window) { window.SetDraw("margin"); window.SetLineWidth(1); if (ROIList.Count > 0) { // //window.SetColor(inactiveCol); window.SetDraw("margin"); for (int i = 0; i < ROIList.Count; i++) { window.SetColor(((ROI)ROIList[i]).Color); window.SetLineStyle(((ROI)ROIList[i]).flagLineStyle); ((ROI)ROIList[i]).draw(window, Convert.ToInt32(viewController.ImgCol2 - viewController.ImgCol1), Convert.ToInt32(viewController.ImgRow2 - viewController.ImgRow1)); } if (activeROIidx != -1) { window.SetColor(activeCol); window.SetLineStyle(((ROI)ROIList[activeROIidx]).flagLineStyle); ((ROI)ROIList[activeROIidx]).draw(window, Convert.ToInt32(viewController.ImgCol2 - viewController.ImgCol1), Convert.ToInt32(viewController.ImgRow2 - viewController.ImgRow1)); window.SetColor(activeHdlCol); ((ROI)ROIList[activeROIidx]).displayActive(window, Convert.ToInt32(viewController.ImgCol2 - viewController.ImgCol1), Convert.ToInt32(viewController.ImgRow2 - viewController.ImgRow1)); } } }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintData(HalconDotNet.HWindow window) { if (isShowROI) { window.SetDraw("margin"); window.SetLineWidth(1); if (ROIList.Count > 0) { window.SetColor(inactiveCol); window.SetDraw("margin"); for (int i = 0; i < ROIList.Count; i++) { window.SetLineStyle(((ROI)ROIList[i]).flagLineStyle); ((ROI)ROIList[i]).draw(window, false); window.SetColor("orange");//可以控制显示ROI编号,与HDisplay内的显示重复 double[] p = ((ROI)ROIList[i]).GetPosition(); window.SetTposition((int)p[0], (int)p[1]); window.WriteString(i.ToString()); } if (activeROIidx != -1) { window.SetColor(activeCol); window.SetLineStyle(((ROI)ROIList[activeROIidx]).flagLineStyle); ((ROI)ROIList[activeROIidx]).draw(window, true); window.SetColor(activeHdlCol); ((ROI)ROIList[activeROIidx]).displayActive(window); } } } }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintData(HalconDotNet.HWindow window) { window.SetDraw("margin"); window.SetLineWidth(1); //畫還未完成的 ROI if (_waitForClickROI != null) { _waitForClickROI.draw(window); } if (ROIList.Count > 0) { window.SetColor(inactiveCol); window.SetDraw("margin"); //畫所有的 ROI for (int i = 0; i < ROIList.Count; i++) { if (i == activeROIidx) { continue; } var roi = (ROI)ROIList[i]; roi.IsActive = false; if (roi.Visiable) { window.SetLineStyle(roi.flagLineStyle); roi.SetZoomRatio(_zoomFactor); roi.draw(window); } } //畫 Active ROI if (activeROIidx != -1) { var activeROI = (ROI)ROIList[activeROIidx]; activeROI.IsActive = true; if (activeROI.Visiable) { window.SetColor(activeCol); window.SetLineStyle(activeROI.flagLineStyle); activeROI.draw(window); window.SetColor(activeHdlCol); activeROI.displayActive(window); } } } }
/// <summary> /// draw, 決定要畫什麼在 window 上 /// </summary> /// <param name="window">Halcon Window</param> public override void draw(HalconDotNet.HWindow window) { double crossSize = 12; double crossAngle = 0.785398; //寫字 if (!String.IsNullOrEmpty(Name)) { if (!this.IsActive) { window.SetColor("red"); } HOperatorSet.SetTposition(window, _model.RowBegin, _model.ColBegin); window.WriteString(Name); } //畫交點 if (!this.IsActive) { HOperatorSet.SetColor(window, "magenta"); } //HOperatorSet.SetDraw(window, "fill"); HOperatorSet.SetLineWidth(window, 2); HOperatorSet.DispCross(window, _model.RowBegin, _model.ColBegin, crossSize, crossAngle); //畫相依的線元素 (ROI) window.SetLineWidth(2); if (!this.IsActive) { HOperatorSet.SetColor(window, "magenta"); } for (var i = 0; i < _lines.Count; i++) { var line = _lines[i]; window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd); } }
/// <summary> /// draw, 決定要畫什麼在 window 上 /// </summary> /// <param name="window">Halcon Window</param> public override void draw(HalconDotNet.HWindow window) { //虛線 HTuple dotLineStyle = new HTuple(new int[4] { 20, 7, 3, 7 }); //寫字 if (!String.IsNullOrEmpty(Name)) { if (!this.IsActive) { window.SetColor("red"); } HOperatorSet.SetTposition(window, _rawCenterRow, _rawCenterCol); window.WriteString(Name); } //Draw 中線 window.SetLineStyle(dotLineStyle); window.DispLine(_model.RowBegin, _model.ColBegin, _model.RowEnd, _model.ColEnd); //Reset line Style HOperatorSet.SetLineStyle(window, null); //畫相依的線元素 (ROI) window.SetLineWidth(2); if (!this.IsActive) { HOperatorSet.SetColor(window, "magenta"); } for (var i = 0; i < _lines.Count; i++) { var line = _lines[i]; window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd); } }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void PaintData(HalconDotNet.HWindow window, int imageWidth, double txtScale) { window.SetDraw("margin"); window.SetLineWidth(1); if (ROIList.Count > 0) { window.SetColor(inactiveCol); window.SetDraw("margin"); for (int i = 0; i < ROIList.Count; i++) { window.SetLineStyle(ROIList[i].FlagLineStyle); ROIList[i].ImageWidth = imageWidth; ROIList[i].TxtScale = txtScale; if (ROIList[i].OperatorFlag == ROIOperation.None) { window.SetColor(serachRegionCol); } else { window.SetColor(inactiveCol); } ROIList[i].Draw(window); } if (activeROIidx != -1) { window.SetColor(activeCol); window.SetLineStyle(ROIList[activeROIidx].FlagLineStyle); ROIList[activeROIidx].Draw(window); window.SetColor(activeHdlCol); ROIList[activeROIidx].DisplayActive(window); } } }
/// <summary> /// Paints all objects from the ROIList into the HALCON window /// </summary> /// <param name="window">HALCON window</param> public void paintData(HalconDotNet.HWindow window) { window.SetDraw("margin"); window.SetLineWidth(1); if (ROIList.Count > 0) { window.SetDraw("fill"); window.SetLineStyle(new HTuple()); window.SetColor("blue"); defineModelROI(); if (ModelROI != null) { window.DispRegion(ModelROI); } window.SetColor(inactiveCol); window.SetDraw("margin"); for (int i = 0; i < ROIList.Count; i++) { window.SetLineStyle(((ROI)ROIList[i]).flagLineStyle); ((ROI)ROIList[i]).draw(window); } if (activeROIidx != -1) { window.SetColor(activeCol); window.SetLineStyle(((ROI)ROIList[activeROIidx]).flagLineStyle); ((ROI)ROIList[activeROIidx]).draw(window); window.SetColor(activeHdlCol); ((ROI)ROIList[activeROIidx]).displayActive(window); } } }
/// <summary> /// Repaints the HALCON window 'window' /// </summary> public void repaint(HalconDotNet.HWindow window) { lock (lockershow) { int count = HObjList.Count; //HObjectEntry entry; HSystem.SetSystem("flush_graphic", "false"); window.ClearWindow(); mGC.stateOfSettings.Clear(); //for (int i = 0; i < count; i++) //{ // entry = ((HObjectEntry)HObjList[i]); // mGC.applyContext(window, entry.gContext); // window.DispObj(entry.HObj); //} if (entry != null) { try { mGC.applyContext(window, entry.gContext); window.DispObj(entry.HObj); } catch (Exception ex) { } } addInfoDelegate(); if (roiManager != null && (dispROI == MODE_INCLUDE_ROI)) { roiManager.paintData(window); } HSystem.SetSystem("flush_graphic", "true"); if (myRect.Count != 0) { window.SetColor("green"); window.SetLineWidth(2); HObject ho_Rect = new HObject(); for (int i = 0; i < myRect.Count; i++) { if (myRect[i].isCircle) { window.SetColor("green"); window.SetLineWidth(2); if (myRect[i].Found) { HOperatorSet.GenCircleContourXld(out ho_Rect, myRect[i].Y, myRect[i].X, myRect[i].Radius, 0, 6.28318, "positive", 1.0); window.DispObj(ho_Rect); } //window.DispCircle(myRect[i].Y, myRect[i].X, myRect[i].Radius); window.DispCross(myRect[i].Y, myRect[i].X, 50, 0); disp_message(window, "X:" + myRect[i].X.ToString("F1") + ", Y:" + myRect[i].Y.ToString("F1") + ", Means:" + myRect[i].Means.ToString("F1"), "image", 100, 50, "green", "false"); disp_message(window, "Radius:" + myRect[i].Radius.ToString("F1") + ",Angle:" + Helper.GetDegreeFromRadian((float)myRect[i].Angle).ToString("F1"), "image", 300, 50, "green", "false"); } else { window.SetColor("green"); window.SetLineWidth(2); if (myRect[i].Found) { HOperatorSet.GenRectangle2ContourXld(out ho_Rect, myRect[i].Y, myRect[i].X, myRect[i].Angle, myRect[i].Width / 2, myRect[i].Height / 2); window.DispObj(ho_Rect); } //if (myRect[i].Found) //{ //window.SetColor("cyan"); //window.DispObj(myRect[i].rect_border); //} window.DispCross(myRect[i].Y, myRect[i].X, 50, 0); disp_message(window, "X:" + myRect[i].X.ToString("F1") + ", Y:" + myRect[i].Y.ToString("F1") + ", Means:" + myRect[i].Means.ToString("F1"), "image", 100, 50, "green", "false"); disp_message(window, "Width:" + myRect[i].Width.ToString("F1") + ", Height:" + myRect[i].Height.ToString("F1"), "image", 300, 50, "green", "false"); //disp_message(window, "Means:" + myRect[i].Means.ToString("F1"), "image", 500, 50, "green", "false"); } } //for (int i = 0; i < myRect.Count; i++) // window.DispRectangle2(myRect[i].Y, myRect[i].X, myRect[i].Angle, myRect[i].Width / 2, myRect[i].Length / 2); } if (bShowCrossHair) { window.SetColor("red"); window.SetLineWidth(2); int winrow, winclom, winwidth, winHeight; window.GetPart(out winrow, out winclom, out winwidth, out winHeight); window.DispLine(winrow + (winwidth - winrow) / 2, (double)winclom, winrow + (winwidth - winrow) / 2, winHeight); window.DispLine((double)winrow, winclom + (winHeight - winclom) / 2, winwidth, winclom + (winHeight - winclom) / 2); } if (IsDrawCross1) { window.DispCross(200.0, 200.0, 40, 0); //window.WriteString("标定1"); } if (IsDrawCross2) { //window.DispCross(200.0, 200.0, 2, 0); window.DispCross(600.0, 600.0, 40, 0); // window.WriteString("标定2"); } } }
/// <summary> /// draw, 決定要畫什麼在 window 上 /// </summary> /// <param name="window">Halcon Window</param> public override void draw(HalconDotNet.HWindow window) { double arrowSize = 2; double crossSize = 12; double crossAngle = 0.785398; HTuple dotLineStyle = new HTuple(new int[4] { 7, 7, 7, 7 }); //Reset line Style HOperatorSet.SetLineStyle(window, null); //寫字 if (!String.IsNullOrEmpty(Name)) { HOperatorSet.SetTposition(window, this.NewCenterRow, this.NewCenterCol); if (!this.IsActive) { HOperatorSet.SetColor(window, "red"); } window.WriteString(Name); } // 畫箭頭, 由線段的中心點向兩端畫箭頭 window.SetLineWidth(1); //計算兩箭頭端點位置 var arrowPointRowBegin = _arrowLineRowBegin = this.NewCenterRow + (Math.Sin(_phiStart) * _halfDistance); var arrowPointColBegin = _arrowLineColBegin = this.NewCenterCol + (Math.Cos(_phiStart) * _halfDistance); var arrowPointRowEnd = _arrowLineRowEnd = this.NewCenterRow + (Math.Sin(_phiEnd) * _halfDistance); var arrowPointColEnd = _arrowLineColEnd = this.NewCenterCol + (Math.Cos(_phiEnd) * _halfDistance); window.DispArrow(this.NewCenterRow, this.NewCenterCol, arrowPointRowBegin, arrowPointColBegin, arrowSize); window.DispArrow(this.NewCenterRow, this.NewCenterCol, arrowPointRowEnd, arrowPointColEnd, arrowSize); //畫虛線,如果使用者改變了原始中心點的位置 //由兩箭頭端點連結原始的起始兩端點 if (_rawCenterRow != this.NewCenterRow || _rawCenterCol != this.NewCenterCol) { HOperatorSet.SetLineStyle(window, dotLineStyle); //決定兩個端點的連結,將座標點 以左上排序 var arrowPoints = new List <PositionModel>() { new PositionModel() { RowBegin = arrowPointRowBegin, ColBegin = arrowPointColBegin }, new PositionModel() { RowBegin = arrowPointRowEnd, ColBegin = arrowPointColEnd }, }; arrowPoints = arrowPoints.OrderBy(x => x.ColBegin).OrderBy(y => y.RowBegin).ToList(); for (int i = 0; i < _ROIModelPoints.Count; i++) { window.DispLine(arrowPoints[i].RowBegin, arrowPoints[i].ColBegin, _ROIModelPoints[i].RowBegin, _ROIModelPoints[i].ColBegin); } } //reset Style HOperatorSet.SetLineStyle(window, null); //畫ROI window.SetLineWidth(1); if (!this.IsActive) { HOperatorSet.SetColor(window, "magenta"); } for (var i = 0; i < _dependROIModels.Count; i++) { var line = _dependROIModels[i]; if (isLine(line)) { //draw line,ROI 的線 window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd); } else { //draw point,ROI 的點 HXLDCont crossPoint = new HXLDCont(); crossPoint.GenEmptyObj(); crossPoint.GenCrossContourXld(line.RowBegin, line.ColBegin, crossSize, crossAngle); crossPoint.DispObj(window); //window.DispCross(line.RowBegin, line.ColBegin, crossSize, crossAngle); } } }
/// <summary> /// draw, 決定要畫什麼在 window 上 /// </summary> /// <param name="window">Halcon Window</param> public override void draw(HalconDotNet.HWindow window) { double arrowSize = 2; //double crossSize = 12; //double crossAngle = 0.785398; HTuple dotLineStyle = new HTuple(new int[4] { 7, 7, 7, 7 }); //Reset line Style HOperatorSet.SetLineStyle(window, null); //寫字 if (!String.IsNullOrEmpty(Name)) { if (!this.IsActive) { HOperatorSet.SetColor(window, "red"); } HOperatorSet.SetTposition(window, this.NewCenterRow, this.NewCenterCol); window.WriteString(Name); } //畫線段,水平 + 30 度角 var lineLength = 50; var angle = Math.PI / 6.0; var hLineRow = this.NewCenterRow + Math.Sin(Math.PI) * lineLength; var hLineCol = this.NewCenterCol - Math.Cos(Math.PI) * lineLength; var degLineRow = this.NewCenterRow - Math.Sin(angle) * lineLength; var degLineCol = this.NewCenterCol + Math.Cos(angle) * lineLength; HOperatorSet.DispLine(window, this.NewCenterRow, this.NewCenterCol, hLineRow, hLineCol); HOperatorSet.DispLine(window, this.NewCenterRow, this.NewCenterCol, degLineRow, degLineCol); //畫 arc // angle 為正時,會順時針畫, // angle 為負時,會逆時針畫, // 因此要注意兩線段夾角的開口方向來選擇 var arcBeginRow = this.NewCenterRow - Math.Sin(angle) * (lineLength / 2.0); var arcBeginCol = this.NewCenterCol + Math.Cos(angle) * (lineLength / 2.0); window.DispArc(this.NewCenterRow, this.NewCenterCol, angle, arcBeginRow, arcBeginCol); // 畫箭頭, window.SetLineWidth(1); HOperatorSet.SetLineStyle(window, dotLineStyle); window.DispArrow(this.NewCenterRow, this.NewCenterCol, _lineACenterRow, _lineACenterCol, arrowSize); window.DispArrow(this.NewCenterRow, this.NewCenterCol, _lineBCenterRow, _lineBCenterCol, arrowSize); //Reset line Style HOperatorSet.SetLineStyle(window, null); //畫ROI window.SetLineWidth(2); if (!this.IsActive) { HOperatorSet.SetColor(window, "magenta"); } for (var i = 0; i < _lines.Count; i++) { var line = _lines[i]; if (isLine(line)) { //draw line,ROI 的線 window.DispLine(line.RowBegin, line.ColBegin, line.RowEnd, line.ColEnd); } } }