203 lines
6.9 KiB
C#
203 lines
6.9 KiB
C#
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<UnitPoint> points, float beginangle, float endangle, float angle);
|
||
void DrawLines(ICanvas canvas, Pen pen, List<UnitPoint> points);
|
||
void DrawRectangle(ICanvas canvas, Pen pen, RectangleF rect);
|
||
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<IDrawObject> objects, bool useEventMode = true);
|
||
void MoveObjects(UnitPoint offset, List<IDrawObject> objects, bool useEventMode = true);
|
||
void CopyObjects(UnitPoint offset, List<IDrawObject> objects, bool useEventMode = true);
|
||
void MoveNodes(UnitPoint position, List<INodePoint> nodes, bool useEventMode = true);
|
||
|
||
IEditTool GetEditTool(string id);
|
||
void AfterEditObjects(IEditTool edittool);
|
||
|
||
List<IDrawObject> GetHitObjects(ICanvas canvas, RectangleF selection, bool anyPoint);
|
||
List<IDrawObject> GetHitObjects(ICanvas canvas, UnitPoint point);
|
||
bool IsSelected(IDrawObject drawobject);
|
||
void AddSelectedObject(IDrawObject drawobject);
|
||
void RemoveSelectedObject(IDrawObject drawobject);
|
||
List<IDrawObject> SelectedObjects { get; }
|
||
int SelectedCount { get; }
|
||
void ClearSelectedObjects();
|
||
|
||
List<IDrawObject> SelectedCopyObject { get; set; }
|
||
void AddSelectedObjects(List<IDrawObject> 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<IDrawObject> otherobj);
|
||
List<IDrawObject> 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 <EFBFBD><EFBFBD>ŷ <EFBFBD>۾<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ӽ<EFBFBD>
|
||
bool Enabled { get; set; }
|
||
#endregion
|
||
|
||
#region drawing object<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ӽ<EFBFBD>
|
||
|
||
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<IDrawObject> GroupClass {get; set;}//<2F><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||
*/
|
||
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<IDrawObject> otherobj, Type[] runningsnaptypes, Type usersnaptype);
|
||
void Move(UnitPoint offset);
|
||
|
||
/// <summary>
|
||
/// Rotate<74>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><>ü<EFBFBD><C3BC> ȸ<><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŭ ȸ<><C8B8><EFBFBD><EFBFBD>.
|
||
/// </summary>
|
||
/// <param name="angle"></param>
|
||
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<IDrawObject> 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);
|
||
}
|
||
}
|