📄 myitem.cs
字号:
using System;
using System.Drawing;
namespace Painter.Common
{
/// <summary>
/// ItemBase 的摘要说明。
/// </summary>
[Serializable]
public abstract class MyItem
{
public MyItem()
{
}
private Color selectedcolor = Color.Red;
public Color SelectedColor
{
get
{
return selectedcolor;
}
set
{
selectedcolor = value;
}
}
private Color bordercolor;
public Color BorderColor
{
get
{
return bordercolor;
}
set
{
bordercolor = value;
}
}
private System.Drawing.Drawing2D.DashStyle borderstyle;
public System.Drawing.Drawing2D.DashStyle BorderStyle
{
get
{
return borderstyle;
}
set
{
borderstyle = value;
}
}
private float borderwidth;
public float BorderWidth
{
get
{
return borderwidth;
}
set
{
borderwidth = value;
}
}
public bool IsSelected = false;
public bool DrawDeSelect = false;
public abstract void Draw(Graphics g,Color bgColor);
public abstract void Erase(Graphics g,Color bgColor);
public abstract void Select(Graphics g,Color bgColor);
public abstract void DeSelect(Graphics g,Color bgColor);
public abstract bool Contains(float x,float y);
public abstract void Rotate(Graphics g, float cx,float cy,Color bgColor);
public abstract void Move(Graphics g, float ptx_offset,float pty_offset,Color bgColor);
public bool LineContains(float x1,float y1,float x2,float y2,float ptx,float pty,float error){
float space = 2;
if (x1==x2) {
if ((ptx>x1-error-space && ptx<x1+error+space)&&
((pty<y1&&pty>y2)||(pty>y1&&pty<y2)))
{
return true;
}
else
{
return false;
}
}
float slope = ((float)y2-(float)y1)/((float)x2-(float)x1);
float coordPt,coordX1,coordX2;
if (slope == 0)
{
if ((pty>y1-error-space && pty<y1+error+space)&&
((ptx<x1&&ptx>x2)||(ptx>x1&&ptx<x2))) {
return true;
}else{
return false;
}
}
else
{
coordX1 = x1-y1/slope-error-space;
coordX2 = x1-y1/slope+error+space;
coordPt = ptx-pty/slope;
}
if ((coordPt<coordX1 && coordPt>coordX2) ||
(coordPt>coordX1 && coordPt<coordX2)) {
slope = -1/slope;
coordX1 = x1-y1/slope;
coordX2 = x2-y2/slope;
coordPt = ptx-pty/slope;
if ((coordPt<coordX1 && coordPt>coordX2)||
(coordPt>coordX1 && coordPt<coordX2)) {
return true;
}
}
return false;
}
public PointF RotateLine(float x1,float y1,float cx,float cy,double length)
{
float x2,y2;
double angle = Math.Atan((cy-y1)/(cx-x1));
x2 = cx<x1?
x1-(float)(length*Math.Cos(angle))
:x1+(float)(length*Math.Cos(angle));
y2 = cx<x1?
y1-(float)(length*Math.Sin(angle))
:y1+(float)(length*Math.Sin(angle));
return new PointF(x2,y2);
}
}
public enum ItemType
{
Line,
RectAngle,
Circle
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -