244 lines
9.0 KiB
C#
244 lines
9.0 KiB
C#
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;
|
|
|
|
ToolStripLabel m_WeldingTImeLabel = null;
|
|
ToolStripLabel m_UploadTImeLabel = null;
|
|
|
|
public List<IDrawObject> 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<ScannerParam> m_scannerParams = new List<ScannerParam>();
|
|
public static List<ScannerParam> ScannerParams {
|
|
get { return m_scannerParams; }
|
|
set { m_scannerParams = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
public void Initialize(SizeF workSize, int realHeight
|
|
, ToolStripLabel mousePosStatusLabel
|
|
, ToolStripLabel drawInfoStatusLabel
|
|
, ToolStripLabel snapInfoStatusLabel
|
|
, ToolStripLabel weldingTimeLabel
|
|
, ToolStripLabel uploadingTimeLabel
|
|
, CanvasCtrl.eCanvasType canvasType
|
|
, Color BackgroundColor, Color FieldColor, Color GridColor
|
|
, float backgroundSize
|
|
, bool scoutImageEnabled = false)
|
|
{
|
|
m_mousePosStatusLabel = mousePosStatusLabel;
|
|
m_drawInfoStatusLabel = drawInfoStatusLabel;
|
|
m_snapInfoStatusLabel = snapInfoStatusLabel;
|
|
m_WeldingTImeLabel = weldingTimeLabel;
|
|
m_UploadTImeLabel = uploadingTimeLabel;
|
|
|
|
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 TimeLabelUpdate(double Weldingtime, double Uploadtime)
|
|
{
|
|
m_WeldingTImeLabel.Text = Weldingtime.ToString();
|
|
m_UploadTImeLabel.Text = Uploadtime.ToString();
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|