You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

295 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HalconDotNet;
namespace ViewWindow
{
public class ViewWindow : Model.IViewWindow
{
private Model.HWndCtrl _hWndControl;
private Model.ROIController _roiController;
public ViewWindow(HWindowControl window)
{
this._hWndControl = new Model.HWndCtrl(window);
this._roiController = new Model.ROIController();
this._hWndControl.setROIController(this._roiController);
this._hWndControl.setViewState(Model.HWndCtrl.MODE_VIEW_NONE);
}
//清空所有显示内容
public void ClearWindow()
{
//清空显示image
_hWndControl.clearList();
//清空hobjectList
_hWndControl.clearHObjectList();
}
public void displayImage(HObject img)
{
//添加背景图片
this._hWndControl.addImageShow(img);
//清空roi容器,不让roi显示
this._roiController.reset();
//显示图片
this._roiController.resetWindowImage();
//this._hWndControl.resetWindow();
// this._hWndControl.resetAll();
//this._hWndControl.repaint();
}
public void notDisplayRoi()
{
this._roiController.reset();
//显示图片
this._roiController.resetWindowImage();
}
//获取当前窗口显示的roi数量
public int getRoiCount()
{
return _roiController.ROIList.Count;
}
//是否开启缩放事件
public void setDrawModel(bool flag)
{
_hWndControl.drawModel = flag;
}
public void resetWindowImage()
{
this._hWndControl.resetWindow();
this._roiController.resetWindowImage();
}
public void mouseleave()
{
_hWndControl.raiseMouseup();
}
public void zoomWindowImage()
{
this._roiController.zoomWindowImage();
}
public void moveWindowImage()
{
this._roiController.moveWindowImage();
}
public void noneWindowImage()
{
this._roiController.noneWindowImage();
}
public void genRect1(double row1, double col1, double row2, double col2, ref List<Model.ROI> rois)
{
this._roiController.genRect1(row1, col1, row2, col2, ref rois);
}
public void genRect2(double row, double col, double phi, double length1, double length2, ref List<Model.ROI> rois)
{
this._roiController.genRect2(row, col, phi, length1, length2, ref rois);
}
public void genCircle(double row, double col, double radius, ref List<Model.ROI> rois)
{
this._roiController.genCircle(row, col, radius, ref rois);
}
public void genLine(double beginRow, double beginCol, double endRow, double endCol, ref List<Model.ROI> rois)
{
this._roiController.genLine(beginRow, beginCol, endRow, endCol, ref rois);
}
public List<double> smallestActiveROI(out string name, out int index)
{
List<double> resual = this._roiController.smallestActiveROI(out name,out index);
return resual;
}
public Model.ROI smallestActiveROI(out List<double> data, out int index)
{
Model.ROI roi = this._roiController.smallestActiveROI(out data, out index);
return roi;
}
public void selectROI(int index)
{
this._roiController.selectROI(index);
}
public void selectROI( List<Model.ROI> rois, int index)
{
//this._roiController.selectROI(index);
if ((rois.Count > index)&&(index>=0))
{
this._hWndControl.resetAll();
this._hWndControl.repaint();
HTuple m_roiData = null;
m_roiData = rois[index].getModelData();
switch (rois[index].Type)
{
case "ROIRectangle1":
if (m_roiData != null)
{
this._roiController.displayRect1(rois[index].Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D);
}
break;
case "ROIRectangle2":
if (m_roiData != null)
{
this._roiController.displayRect2(rois[index].Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D, m_roiData[4].D);
}
break;
case "ROICircle":
if (m_roiData != null)
{
this._roiController.displayCircle(rois[index].Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D);
}
break;
case "ROILine":
if (m_roiData != null)
{
this._roiController.displayLine(rois[index].Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D);
}
break;
default:
break;
}
}
}
public void displayROI(List<Model.ROI> rois)
{
if (rois == null)
{
return;
}
//this._hWndControl.resetAll();
//this._hWndControl.repaint();
foreach (var roi in rois)
{
HTuple m_roiData = null;
m_roiData = roi.getModelData();
switch (roi.Type)
{
case "ROIRectangle1":
if (m_roiData != null)
{
this._roiController.displayRect1(roi.Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D);
}
break;
case "ROIRectangle2":
if (m_roiData != null)
{
this._roiController.displayRect2(roi.Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D, m_roiData[4].D);
}
break;
case "ROICircle":
if (m_roiData != null)
{
this._roiController.displayCircle(roi.Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D);
}
break;
case "ROILine":
if (m_roiData != null)
{
this._roiController.displayLine(roi.Color, m_roiData[0].D, m_roiData[1].D, m_roiData[2].D, m_roiData[3].D);
}
break;
default:
break;
}
}
}
public void removeActiveROI(ref List<Model.ROI> rois)
{
this._roiController.removeActiveROI(ref rois);
}
public void setActiveRoi(int index)
{
this._roiController.activeROIidx = index;
}
public void saveROI(List<Model.ROI> rois, string fileNmae)
{
List<Model.RoiData> m_RoiData = new List<Model.RoiData>();
for (int i = 0; i < rois.Count; i++)
{
m_RoiData.Add(new Model.RoiData(i, rois[i]));
}
Config.SerializeHelper.Save(m_RoiData, fileNmae);
}
public void loadROI(string fileName, out List<Model.ROI> rois)
{
rois = new List<Model.ROI>();
List<Model.RoiData> m_RoiData = new List<Model.RoiData>();
m_RoiData = (List<Model.RoiData>)Config.SerializeHelper.Load(m_RoiData.GetType(), fileName);
for (int i = 0; i < m_RoiData.Count; i++)
{
switch (m_RoiData[i].Name)
{
case "Rectangle1":
this._roiController.genRect1(m_RoiData[i].Rectangle1.Row1, m_RoiData[i].Rectangle1.Column1,
m_RoiData[i].Rectangle1.Row2, m_RoiData[i].Rectangle1.Column2, ref rois);
rois.Last().Color = m_RoiData[i].Rectangle1.Color;
break;
case "Rectangle2":
this._roiController.genRect2(m_RoiData[i].Rectangle2.Row, m_RoiData[i].Rectangle2.Column,
m_RoiData[i].Rectangle2.Phi, m_RoiData[i].Rectangle2.Lenth1, m_RoiData[i].Rectangle2.Lenth2, ref rois);
rois.Last().Color = m_RoiData[i].Rectangle2.Color;
break;
case "Circle":
this._roiController.genCircle(m_RoiData[i].Circle.Row, m_RoiData[i].Circle.Column, m_RoiData[i].Circle.Radius, ref rois);
rois.Last().Color = m_RoiData[i].Circle.Color;
break;
case "Line":
this._roiController.genLine(m_RoiData[i].Line.RowBegin, m_RoiData[i].Line.ColumnBegin,
m_RoiData[i].Line.RowEnd, m_RoiData[i].Line.ColumnEnd, ref rois);
rois.Last().Color = m_RoiData[i].Line.Color;
break;
default:
break;
}
}
this._hWndControl.resetAll();
this._hWndControl.repaint();
}
#region 专门用于 显示region 和xld的方法
public void displayHobject(HObject obj,string color)
{
_hWndControl.DispObj(obj, color);
}
public void displayHobject(HObject obj)
{
_hWndControl.DispObj(obj, null);
}
#endregion
}
}