using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Xml; namespace CoreUnit.Control.UserControl.Canvas { public interface ISerialize { void GetObjectData(XmlWriter wr); string GetObjectData(); void AfterSerializedIn(); } public interface ICanvasOwner { void SetPositionInfo(UnitPoint unitpos); void SetSnapInfo(ISnapPoint snap); SizeF WorkSize { get; set; } } public interface ICanvas { IModel DataModel { get; } UnitPoint ScreenTopLeftToUnitPoint(); UnitPoint ScreenBottomRightToUnitPoint(); PointF ToScreen(UnitPoint unitpoint); float ToScreen(double unitvalue); double ToUnit(float screenvalue); UnitPoint ToUnit(PointF screenpoint); void Invalidate(bool dostatic); IDrawObject CurrentObject { get; } Rectangle ClientRectangle { get; } Graphics Graphics { get; } Pen CreatePen(Color color, float unitWidth); void DrawLine(ICanvas canvas, Pen pen, UnitPoint p1, UnitPoint p2); void DrawArc(ICanvas canvas, Pen pen, UnitPoint center, float radius, float beginangle, float angle); void DrawArc(ICanvas canvas, Pen pen, UnitPoint center, UnitPoint start, UnitPoint end, bool clockwise); void DrawEllipse(ICanvas canvas, Pen pen, UnitPoint center, List points, float beginangle, float endangle, float angle); void DrawLines(ICanvas canvas, Pen pen, List points); float BackgroundSize { get; } } public interface IModel { float Zoom { get; set; } ICanvasLayer BackgroundLayer { get; } ICanvasLayer GridLayer { get; } ICanvasLayer[] Layers { get; } ICanvasLayer ActiveLayer { get; set; } ICanvasLayer GetLayer(int no); IDrawObject CreateObject(string type, UnitPoint point, ISnapPoint snappoint); void AddObject(ICanvasLayer layer, IDrawObject drawobject, bool useEventMode = true); void DeleteObjects(List objects, bool useEventMode = true); void MoveObjects(UnitPoint offset, List objects, bool useEventMode = true); void CopyObjects(UnitPoint offset, List objects, bool useEventMode = true); void MoveNodes(UnitPoint position, List nodes, bool useEventMode = true); IEditTool GetEditTool(string id); void AfterEditObjects(IEditTool edittool); List GetHitObjects(ICanvas canvas, RectangleF selection, bool anyPoint); List GetHitObjects(ICanvas canvas, UnitPoint point); bool IsSelected(IDrawObject drawobject); void AddSelectedObject(IDrawObject drawobject); void RemoveSelectedObject(IDrawObject drawobject); List SelectedObjects { get; } int SelectedCount { get; } void ClearSelectedObjects(); List SelectedCopyObject { get; set; } void AddSelectedObjects(List objects); bool IsArrayCopying { get; set; } int CopyCnt { get; set; } ISnapPoint SnapPoint(ICanvas canvas, UnitPoint point, Type[] runningsnaptypes, Type usersnaptype); bool CanUndo(); bool DoUndo(); bool CanRedo(); bool DoRedo(); } public interface ICanvasLayer { int No { get; set; } void Draw(ICanvas canvas, RectangleF unitrect); ISnapPoint SnapPoint(ICanvas canvas, UnitPoint point, List otherobj); List Objects { get; } bool Enabled { get; set; } bool Visible { get; } SizeF Spacing { get; set; } Color BackgroundColor { get; set; } Color FieldColor { get; set; } } public interface ISnapPoint { IDrawObject Owner { get; } UnitPoint SnapPoint { get; } RectangleF BoundingRect { get; } void Draw(ICanvas canvas); } public enum eDrawObjectMouseDown { Done, // this draw object is complete DoneRepeat, // this object is complete, but create new object of same type Continue, // this object requires additional mouse inputs } public interface INodePoint { IDrawObject GetClone(); IDrawObject GetOriginal(); void Cancel(); void Finish(); void SetPosition(UnitPoint pos); void Undo(); void Redo(); void OnKeyDown(ICanvas canvas, KeyEventArgs e); } public interface IDrawObject { #region 마킹 작업에 대한 속성 bool Enabled { get; set; } #endregion #region drawing object에 대한 속성 bool Selected { get; set; } Color Color { get; set; } PointF PF1 { get; set; } PointF PF2 { get; set; } RectangleF ClientRect { get; } float Angle { get; set; } string Type { get; } int No { get; set; } PointF MiddlePoint { get; set; } int ScannerParamID { get; set; } /* List GroupClass {get; set;}//그룹의 계층에 대한 속성을 가짐. */ IDrawObject Clone(); bool PointInObject(ICanvas canvas, UnitPoint point); bool ObjectInRectangle(ICanvas canvas, RectangleF rect, bool anyPoint); void Draw(ICanvas canvas, RectangleF unitrect); RectangleF GetBoundingRect(ICanvas canvas); void OnMouseMove(ICanvas canvas, UnitPoint point); eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint); void OnMouseUp(ICanvas canvas, UnitPoint point, ISnapPoint snappoint); void OnKeyDown(ICanvas canvas, KeyEventArgs e); UnitPoint RepeatStartingPoint { get; } INodePoint NodePoint(ICanvas canvas, UnitPoint point); ISnapPoint SnapPoint(ICanvas canvas, UnitPoint point, List otherobj, Type[] runningsnaptypes, Type usersnaptype); void Move(UnitPoint offset); /// /// Rotate함수는 각 객체의 회전각도값만큼 회전함. /// /// void Rotate(float angle, UnitPoint center); void MakeLength(float distance); string GetInfoAsString(); #endregion } public interface IEditTool { IEditTool Clone(); bool SupportSelection { get; } void SetHitObjects(UnitPoint mousepoint, List list); void OnMouseMove(ICanvas canvas, UnitPoint point); eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint); void OnMouseUp(ICanvas canvas, UnitPoint point, ISnapPoint snappoint); void OnKeyDown(ICanvas canvas, KeyEventArgs e); void Finished(); void Undo(); void Redo(); } public interface IEditToolOwner { void SetHint(string text); } }