Cad二次开发圆

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;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周杰伦fans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值