using CoreUnit.Control.UserControl.Canvas; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace CoreUnit.Scanner.UserControl.ScannerCanvas { public partial class ScannerCanvasUserCtrl : System.Windows.Forms.UserControl, ICanvasOwner, IEditToolOwner { public ScannerCanvasUserCtrl(bool isReadMode = false) { InitializeComponent(); m_isReadMode = isReadMode; } #region 사용자 정의 함수 및 변수 const int CANVAS_SIZE_MARGIN = 0; CanvasCtrl m_canvas = null; DataModel m_data = null; string m_toolHint = string.Empty; string m_snapHint = string.Empty; SizeF m_workSize; //캔버스의 라인 정보값을 표시하는 label 선언 ToolStripLabel m_mousePosStatusLabel = null; ToolStripLabel m_drawInfoStatusLabel = null; ToolStripLabel m_snapInfoStatusLabel = null; public List Objects { get { return Model.ActiveLayer.Objects; } } bool m_isReadMode; public CanvasCtrl Canvas { get { return m_canvas; } } public DataModel Model { get { return m_data; } } public SizeF WorkSize { get { lock (this) { return m_workSize; } } set { lock (this) { m_workSize = value; } } } #region 3.레이저 마킹시 스캐너 조건 변수값 //전역변수 선언 이유는 ScnnerParamDlg에서 참조를 할 수 있어야 함. static List m_scannerParams = new List(); public static List ScannerParams { get { return m_scannerParams; } set { m_scannerParams = value; } } #endregion public void Initialize(SizeF workSize, int realHeight , ToolStripLabel mousePosStatusLabel , ToolStripLabel drawInfoStatusLabel , ToolStripLabel snapInfoStatusLabel , CanvasCtrl.eCanvasType canvasType , Color BackgroundColor, Color FieldColor, Color GridColor , float backgroundSize , bool scoutImageEnabled = false) { m_mousePosStatusLabel = mousePosStatusLabel; m_drawInfoStatusLabel = drawInfoStatusLabel; m_snapInfoStatusLabel = snapInfoStatusLabel; m_workSize = workSize; #region 1.사이즈에 대한 초기화 작업 double sizeRatio = (WorkSize.Width > WorkSize.Height) ? workSize.Height / workSize.Width : workSize.Width / workSize.Height; //this.Height = realHeight - CANVAS_SIZE_MARGIN; //this.Width = (int)(this.Height * sizeRatio); //상태 스트립 사이즈를 제외한 영역을 작업 영역으로 설정하기 위함. //OMACS hochul.kim 20210517 - 전체 Window에서 Zooming 또는 Panning해서 Canvas 확대하더라도, 중앙의 정사각형 영역만 사용 중. 수정 필요 this.Height = Parent.ClientSize.Height; this.Width = Parent.ClientSize.Width; this.Location = new Point(this.Parent.ClientSize.Width / 2 - this.Size.Width / 2, this.Parent.ClientSize.Height / 2 - this.Size.Height / 2); this.Anchor = Parent.Anchor; this.Dock = DockStyle.Fill; this.BackColor = Parent.BackColor; #endregion #region 2.CanvasCoreUnit 객체 초기화 m_data = new DataModel(); m_canvas = new CanvasCtrl(this, m_data, canvasType); m_canvas.BackgroundSize = backgroundSize; m_canvas.Dock = DockStyle.Fill; m_canvas.Width = this.Width; m_canvas.Height = this.Height; this.Controls.Add(m_canvas); ((DataModel)Canvas.Model).CanvasImageEnable = scoutImageEnabled; Model.ScaleToFit = m_data.Zoom = m_canvas.ScreenHeight() / m_workSize.Height; m_canvas.SetCenter(new UnitPoint(0, 0)); SetupDrawTool(); #endregion #region 3. CanvasLayer 초기화 m_canvas.Model.BackgroundLayer.BackgroundColor = BackgroundColor; m_canvas.Model.BackgroundLayer.FieldColor = FieldColor; m_canvas.Model.GridLayer.BackgroundColor = GridColor; #endregion } public void SetupDrawTool() //객체 tool 타입에 작업하는 tool를 포함 { m_data.AddDrawTool("Line", new LineEdit(true)); m_data.AddDrawTool("PolyLine", new LineEdit(false)); m_data.AddDrawTool("Dot", new Dot()); m_data.AddDrawTool("Spline", new Spline()); m_data.AddDrawTool("SnowMan", new SnowManEdit(true)); m_data.AddDrawTool("Group", new Group()); m_data.AddDrawTool("Ellipse", new EllipseTool()); m_data.AddDrawTool("Rectangle", new RectangleTool()); m_data.AddDrawTool("Arc3P123", new Arc3Point(Arc3Point.eArcType.kArc3P123)); m_data.AddDrawTool("Arc3P132", new Arc3Point(Arc3Point.eArcType.kArc3P132)); m_data.AddDrawTool("Arc2P", new Arc(Arc.eArcType.type2point)); m_data.AddDrawTool("ArcCR", new Arc(Arc.eArcType.typeCenterRadius)); m_data.AddDrawTool("ZigZag", new ZigZag()); } #region 사용자가 canvas 외부에서 작업요청시 진행하는 함수 string mPreObjectType = string.Empty; bool shouldGroup = false; public void FinalizeGrouping() { if (shouldGroup) { m_canvas.CommandGroup(); shouldGroup = false; mPreObjectType = string.Empty; } } public IDrawObject AddObject(AddObjectParam param) { if (!mPreObjectType.Contains("PolyLine") && param.ObjectType.Contains("PolyLine")) { mPreObjectType = param.ObjectType; m_canvas.CommandDeselectAll(); shouldGroup = true; } if (mPreObjectType.Contains("PolyLine") && !param.ObjectType.Contains("PolyLine") && shouldGroup) { mPreObjectType = param.ObjectType; m_canvas.CommandGroup(); shouldGroup = false; } return m_data.AddObject(param); } public IDrawObject AddSingleLine(PointF pt1, PointF pt2, Color color) { IDrawObject drawObj = m_data.AddObject("Line", new UnitPoint(pt1.X, pt1.Y), new UnitPoint(pt2.X, pt2.Y), color); return drawObj; } public void DeleteAllSingleLines() { m_data.DeleteAllObjects(); m_canvas.DoInvalidate(true); } public IDrawObject AddGroup(PointF pt1, PointF pt2, Color color) { IDrawObject drawObj = m_data.AddObject("Group", new UnitPoint(pt1.X, pt1.Y), new UnitPoint(pt2.X, pt2.Y), color); return drawObj; } #endregion #region ICanvasOwner Members public void SetPositionInfo(UnitPoint unitpos) { m_mousePosStatusLabel.Text = unitpos.PosAsString(); string s = string.Empty; if (m_canvas.NewObject != null) { IDrawObject obj = m_canvas.NewObject; if (obj != null) s = obj.GetInfoAsString(); } else { IDrawObject obj = m_data.GetLastSelected(); if (obj != null) s = obj.GetInfoAsString(); } if (m_toolHint.Length > 0) { s = m_toolHint; } if (s != m_drawInfoStatusLabel.Text) { m_drawInfoStatusLabel.Text = s; } } public void SetSnapInfo(ISnapPoint snap) { m_snapHint = string.Empty; if (snap != null) m_snapHint = string.Format("Snap@{0}, {1}", snap.SnapPoint.PosAsString(), snap.GetType()); m_snapInfoStatusLabel.Text = m_snapHint; } #endregion #region IEditToolOwner public void SetHint(string text) { m_toolHint = text; m_drawInfoStatusLabel.Text = m_toolHint; } #endregion #endregion protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (m_data != null) { m_canvas.SetCenter(m_data.CenterPoint); } } #region 사용자 정의 함수 #endregion } }