使用C#代码在AutoCAD2010中绘制图形

  本文使用C#及AutoCAD来绘制图形,在这里我们来绘制一个简单的圆角矩形:

  注:此处主要记录画法跟算法,在类里边的定义属性和方法之类的只举一个例子

  第一步:创建文件夹如:BoxText

  第二步:(1)创建Forms如:FormBox.cs--->继承FormBase类,重写ToForm()【赋值到界面】和ToProperty()两【赋值  给参数】个方法

                     创建Box的param类对象即: ParamBox p = base.Parm as ParamBox;

                      如:ToForm()方法中赋值到界面: this.textA.Value = p.A.ToString();

                     反之ToProperty()方法中赋值给参数: p.A = Convert.ToDouble(this.textA.Value.Trim());

             (2)创建Params如:ParamBox.cs--->继承ParamBase类,在类里定义属性字段赋初值,并重写比例缩放GetScaleObj()的方法。

                       首先 定义属性如:private double _a = 300;  public double A{get { return _a; }set { _a = value; } }

                       如:GetScaleObj()方法里比例缩放: ParamBox obj = new ParamBox(); obj.B1 = this.B1;obj.B2 = this.B2;

 double s = this.Scale;//比例因子obj._a = this._a * s;最后要返回定义的obj对象。

             (3)绘制类如Box.cs--->继承DrawBase类,重写SetParam()和Draw()方法。

                    首先在该类中给方法定义commad名称如: [CommandMethod("DrawBox")]

                  第一步重写SetParam()用于设定参数

                   public override void SetParam(){  base.SetParam();  }

                 第二步重写Draw()即开始绘图;

                public override void Draw(Point3d startPoint, ParamBase param)
           {
            //必须清空(即修改之后清空上一次)
            entitys = new List<Entity>();
            Params.ParamBox _param = param as Params.ParamBox;
            Point3d star = new Point3d(startPoint.X, startPoint.Y, startPoint.Z);
            //矩形宽度
            double a = _param.A;
            //矩形高度
            double b = _param.B;
            //倒角半径
            double c = _param.C;
            List<Curve> listNei = CAD2D.YuanJiaoJuXing(startPoint, a, b, c);//此处调用CAD2D类中定义的圆角矩形的算法
            //AddRange()添加一个集合(Add()添加对象)将矩形的边框集合添加到entitys中
            entitys.AddRange(listNei.ConvertAll(s => (Entity)s));//在添加集合时这样写
            DB.AddToModelSpace(entitys.ToArray());//将entitys绘制到视图中
        }

       CAD2D类,定义各个图形的画法便于绘制时调用

       下面为此处圆角矩形的算法:

       /// <summary>
        /// 创建圆角矩形
        /// :返回从左侧垂直边开始顺时针旋转的8个对象
        /// </summary>
        /// <param name="pStar">矩形开始位置:左下角</param>
        /// <param name="width">矩形宽度</param>
        /// <param name="height">矩形高度</param>
        /// <param name="r">矩形倒角半径</param>
        /// <returns></returns>
        public static List<Curve> YuanJiaoJuXing(Point3d star, double width, double height, double r)

        {

            List<Curve> list = new List<Curve>();
            double arcR = r;
            Line lWai1 = Line(new Point3d(star.X, star.Y + arcR, 0), new Point3d(star.X, star.Y + height - r, 0));
            Arc aWai2 = Arc(new Point3d(star.X + arcR, lWai1.EndPoint.Y, 0), arcR, MyMath.AngToRad(90), MyMath.AngToRad(180));
            Line lWai3 = Line(aWai2.StartPoint, new Point3d(aWai2.Center.X + width - r * 2, aWai2.StartPoint.Y, 0));
            Arc aWai4 = Arc(new Point3d(lWai3.EndPoint.X, aWai2.Center.Y, 0), arcR, MyMath.AngToRad(0), MyMath.AngToRad(90));
            Line lWai5 = Line(aWai4.StartPoint, new Point3d(aWai4.StartPoint.X, lWai1.StartPoint.Y, 0));
            Arc aWai6 = Arc(new Point3d(aWai4.Center.X, lWai5.EndPoint.Y, 0), arcR, MyMath.AngToRad(270), MyMath.AngToRad(0));
            Line lWai7 = Line(aWai6.StartPoint, new Point3d(lWai3.StartPoint.X, aWai6.StartPoint.Y, 0));
            Arc aWai8 = Arc(new Point3d(aWai2.Center.X, lWai1.StartPoint.Y, 0), arcR, MyMath.AngToRad(180), MyMath.AngToRad(270));

            list.Add(lWai1);
            list.Add(aWai2);
            list.Add(lWai3);
            list.Add(aWai4);
            list.Add(lWai5);
            list.Add(aWai6);
            list.Add(lWai7);
            list.Add(aWai8);
            return list;
        }

    最后点击调试打开AcutoACD2010输入netload命令添加这个程序的dll后回车再输入上边在绘制类Box.cs中定义的CommandMethod的名称DrawBox就会弹出Form,有初始值,也可手动输入之后在点击确定,之后在AutoCAD中选取任意一点即图形绘出;

                    



         
     

                         

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值