本文使用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
//AddRange()添加一个集合(Add()添加对象)将矩形的边框集合添加到entitys中
entitys.AddRange(listNei.ConvertAll(s => (Entity)s));//在添加集合时这样写
DB.AddToModelSpace(entitys.ToArray());//将entitys绘制到视图中
}
CAD2D类,定义各个图形的画法便于绘制时调用
下面为此处圆角矩形的算法:
///
/// 创建圆角矩形
/// :返回从左侧垂直边开始顺时针旋转的8个对象
///
/// 矩形开始位置:左下角
/// 矩形宽度
/// 矩形高度
/// 矩形倒角半径
///
public static List
{
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中选取任意一点即图形绘出;