private void btn_TuYa_Click(object sender, EventArgs e) { double radius; ROI Tuya = RoiController.ROIList.Find(x => x.OperatorFlag == ROIOperation.Tuya); if (Tuya != null) { RoiController.ActiveRoiIdx = RoiController.ROIList.FindIndex(x => x.OperatorFlag == ROIOperation.Tuya); if (!double.TryParse(cMB_TuYa_radius.Text, out radius)) { MessageBox.Show("请输入数值或选择指定涂鸦半径半径", "转换错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Tuya.SetTuYaRadius(radius); } else { if (!double.TryParse(cMB_TuYa_radius.Text, out radius)) { MessageBox.Show("请输入数值或选择指定涂鸦半径半径", "转换错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } RoiController.SetROISign(ROIOperation.Tuya); RoiController.SetROIShape(new TuYa(radius)); } }
/// <summary> /// Clears all variables managing ROI objects /// </summary> public void Reset() { ROIList.Clear(); activeROIidx = -1; modelROI = null; roiSeed = null; TiggerROINotifyEvent(new ViewEventArgs(ViewMessage.DelectedAllROIs)); }
/// <summary> /// 鼠标按下后对应的roi行为,判断是否在roi区域并记录 /// </summary> /// <param name="imgX">鼠标坐标x</param> /// <param name="imgY">鼠标坐标y</param> /// <returns>激活的roi序号</returns> public int MouseDownAction(double imgX, double imgY) { int idxROI = -1; double max = 10000, dist = 0; double epsilon = 0; //判断是否是新建roi if (roiSeed != null) //either a new ROI object is created { roiSeed.ImageWidth = viewController.ImageWidth; roiSeed.CreateROI(imgX, imgY); ROIList.Add(roiSeed); roiSeed = null; activeROIidx = ROIList.Count - 1; if (viewController != null) { viewController.Repaint(); } TiggerROINotifyEvent(new ViewEventArgs(ViewMessage.CreatedROI)); } else if (ROIList.Count > 0) // ... or an existing one is manipulated { for (int i = 0; i < ROIList.Count; i++) { dist = ROIList[i].DistToClosestHandle(imgX, imgY); epsilon = ROIList[i].GetHandleWidth() + 2.0; if ((dist < max) && (dist < epsilon)) { max = dist; idxROI = i; } }//end of for if (max > 9999 || max > epsilon) { activeROIidx = -1; } if (idxROI >= 0) { activeROIidx = idxROI; TiggerROINotifyEvent(new ViewEventArgs(ViewMessage.ActivatedROI)); } if (viewController != null) { viewController.Repaint(); } } return(activeROIidx); }
public void SetROIShapeNoOperator(ROI r) { roiSeed = r; roiSeed.OperatorFlag = ROIOperation.None; //只能有一个无标志的roi作为搜索框 for (int i = 0; i < ROIList.Count; i++) { if (ROIList[i].OperatorFlag == ROIOperation.None) { ROIList.RemoveAt(i); } } }
private void cMB_TuYa_radius_TextChanged(object sender, EventArgs e) { ROI Tuya = RoiController.ROIList.Find(x => x.OperatorFlag == ROIOperation.Tuya); if (Tuya == null) { return; } double radius; if (!double.TryParse(cMB_TuYa_radius.Text, out radius)) { MessageBox.Show("请输入数值或选择指定涂鸦半径半径", "转换错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Tuya.SetTuYaRadius(radius); }
/// <summary> /// Deletes this ROI instance if a 'seed' ROI object has been passed /// to the ROIController by the application class. /// /// </summary> public void resetROI() { activeROIidx = -1; roiSeed = null; }
/// <summary> /// 为了创建一个新的ROI对象,应用程序类初始化一个“种子”ROI实例并将其传递给ROIController。 /// ROIController现在通过操纵这个新的ROI实例进行响应。 /// </summary> /// <param name="r"> /// 'Seed' ROI object forwarded by the application forms class. /// </param> public void SetROIShape(ROI r) { roiSeed = r; roiSeed.OperatorFlag = stateROIOperation; }