Circle
[CommandMethod("CircleDemo")]
public void CircleDemo()
{
Database db = HostApplicationServices.WorkingDatabase;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Point3d center = new Point3d();
//double radius = 0;
PromptPointResult ppr = ed.GetPoint("\n 请指定圆心:");
if (ppr.Status == PromptStatus.OK)
{
center = ppr.Value;
}
#region
//PromptDistanceOptions pdo = new PromptDistanceOptions("\n 请指定圆上的一点:");
//pdo.BasePoint = center;
//pdo.UseBasePoint = true;
//pdo.UseDashedLine = true;
//PromptDoubleResult pdr = ed.GetDistance(pdo);
//if (pdr.Status == PromptStatus.OK)
//{
// radius = pdr.Value;
//}
//db.AddCircleToModelSpace(center,radius);
#endregion
CircleJig jCircle = new CircleJig(center);
//方法1:
//PromptPointResult pr = (PromptPointResult)ed.Drag(jCircle); //进入sampler
//if (pr.Status == PromptStatus.OK)
//{
// Point3d pt = pr.Value;
// db.AddCircleToModelSpace(center, pt.GetDistanceBetweenTwoPoint(center));
//}
//方法2:
PromptResult pr = ed.Drag(jCircle);
if (pr.Status == PromptStatus.OK)
{
db.AddEntityToModelSpace(jCircle.GetEntity());
}
}
CircleJig
public class CircleJig : EntityJig
{
private Point3d jCenter;
private double jRadius;
public CircleJig(Point3d center)
:base(new Circle()) //这里的实体对象是Circle
{
((Circle)Entity).Center = center;
}
//这个函数的作用是当鼠标在屏幕上移动时,就会被调用,实现这个函数时,一般是用他改变我们的图形的属性(我们在这个类里定义的属性)
protected override SamplerStatus Sampler(JigPrompts prompts) //先调用
{
//声明Jig提示信息
JigPromptPointOptions jppo = new JigPromptPointOptions("\n 请指定圆上的一个点:");
char space = (char)32; //空格的ascii码
jppo.Keywords.Add("U");
jppo.Keywords.Add(space.ToString()); //空格不能加到第一个
jppo.UserInputControls = UserInputControls.Accept3dCoordinates;
jppo.Cursor = CursorType.RubberBand; //画圆的时候选第二个点移动鼠标的时候显示第二个在原上的点到圆心的虚线
jppo.BasePoint = ((Circle)Entity).Center;
jppo.UseBasePoint = true;
//获取拖拽时鼠标的位置状态
PromptPointResult ppr = prompts.AcquirePoint(jppo);
jRadius = ppr.Value.GetDistanceBetweenTwoPoint(((Circle)Entity).Center);
return SamplerStatus.NoChange;
}
//用于更新图形对象,这个更新属性时不需要事务处理
protected override bool Update()
{
//动态更新圆的半径
if (jRadius > 0)
{
((Circle)Entity).Radius = jRadius;
}
return true;
}
public Entity GetEntity()
{
return Entity;
}
}