⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myitem.cs

📁 这是一个用C#编写的画图板程序
💻 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 + -