📄 ccircle.cs
字号:
using System;
using System.Drawing;
namespace VCSharp
{
/// <summary>
/// CCircle 的摘要说明。
/// </summary>
///
[Serializable()]public class CCircle:CGElement
{
protected PointF m_Center;
protected PointF m_pCircle;
Module m=new Module();
public PointF Center
{
get{return m_Center;}
set{m_Center=value;}
}
public PointF PCircle
{
get{return m_pCircle;}
set{m_pCircle=value;}
}
public float Radius
{
get
{
float r=m.DistPtoP(m_Center,m_pCircle);
return r;
}
}
public CCircle()
{
Init();
}
public CCircle(PointF pCenter,PointF pCircle)
{
Init();
m_Center=pCenter;
m_pCircle=pCircle;
}
public CCircle(CCircle aCircle)
{
m_Center=aCircle.Center;
m_pCircle=aCircle.PCircle;
}
private new void Init()
{
base.Init();
m_Center=new PointF(0,0);
m_pCircle=new PointF(0,0);
}
//绘圆
override public void Draw(Graphics g,DrawMode aDrawMode)
{
long aPen,oldP;
//将控制点的坐标由世界坐标转换为页面坐标
PointF ec=m.WorldtoPage(m_Center);
//获得当前绘图环境的句柄
IntPtr hdc=g.GetHdc();
//设置画笔参数
int[] penPara=DrawSettings(hdc,aDrawMode);
//创建画笔
aPen=Win32API.CreatePen(penPara[0],penPara[1],penPara[2]);
//把画笔选入绘图环境,并返回原来的画笔
oldP=Win32API.SelectObject(hdc,aPen);
//把空刷子选入绘图环境
Win32API.SelectObject(hdc, Win32API.GetStockObject(5));
//绘圆
Win32API.Ellipse(hdc, (int)(ec.X - Radius),
(int)(ec.Y + Radius),
(int)(ec.X + Radius),
(int)(ec.Y - Radius));
//把原来的画笔选入绘图环境
Win32API.SelectObject(hdc, oldP);
//删除新创建的画笔
Win32API.DeleteObject(aPen);
//释放绘图环境句柄
g.ReleaseHdc(hdc);
}
//计算圆的包围矩形
override public CBox GetBox()
{
CBox aBox=new CBox();
aBox .minX=m_Center.X-Radius;
aBox .minY=m_Center.Y-Radius;
aBox .maxX=m_Center.X+Radius;
aBox .maxY=m_Center.Y+Radius;
return aBox;
}
//拾取圆
override public bool Pick(PointF aPos)
{
float dist;
if (!(m.InBox(GetBox(),aPos)))
{
return false;
}
else
{
dist=m.DistPtoP(aPos,m_Center);
if ((dist>Radius-Const.PickRadius) && (dist<Radius+Const.PickRadius))
{
return true;
}
else
{
return false;
}
}
}
//平移变换
override public void Move(Graphics g,PointF basePos,PointF desPos)
{
float xx,yy;
//计算在X和Y两个方向上的位移量
xx = desPos.X - basePos.X;
yy = desPos.Y - basePos.Y;
m_Center.X += xx;
m_Center.Y += yy;
m_pCircle.X += xx;
m_pCircle.Y += yy;
}
//旋转变换
override public void Rotate(Graphics g,PointF basePos, float aAngle)
{
m_Center = m.pRotate(basePos, m_Center, aAngle);
m_pCircle = m.pRotate(basePos, m_pCircle, aAngle);
}
//镜像变换
override public void Mirror(Graphics g,PointF pPos1,PointF pPos2)
{
m_Center =m.pMirror(pPos1, pPos2, m_Center);
m_pCircle = m.pMirror(pPos1, pPos2, m_pCircle);
}
//比例变换
override public void Scale(Graphics g, float sx,float sy)
{
m_Center.X *= sx;
m_Center.Y *= sy;
m_pCircle.X *=sx;
m_pCircle.Y *= sy;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -