使用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();
            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 listNei = CAD2D.YuanJiaoJuXing(startPoint, a, b, c);//此处调用CAD2D类中定义的圆角矩形的算法
            //AddRange()添加一个集合(Add()添加对象)将矩形的边框集合添加到entitys中
            entitys.AddRange(listNei.ConvertAll(s => (Entity)s));//在添加集合时这样写
            DB.AddToModelSpace(entitys.ToArray());//将entitys绘制到视图中
        }

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

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

       ///


        /// 创建圆角矩形
        /// :返回从左侧垂直边开始顺时针旋转的8个对象
        ///

        /// 矩形开始位置:左下角
        /// 矩形宽度
        /// 矩形高度
        /// 矩形倒角半径
        ///
        public static List YuanJiaoJuXing(Point3d star, double width, double height, double r)

        {

            List list = new List();
            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中选取任意一点即图形绘出;

                     使用C#代码在AutoCAD2010中绘制图形_第1张图片



         
     

                         

你可能感兴趣的:(使用C#代码在AutoCAD2010中绘制图形)