爱T帮
我们的信心,源于客户的信赖
帮助企业构建数字化管理体系、统一规范企业管理结构,更以专业、周到的服务在业界有口皆碑!

AutoCAD二次开发之路

日期:2022-10-29
已查看:0
点赞:

我发现自学一个东西往往都会遇到一个瓶颈,我现在就是,举步维艰,回过头来总结下学过的知识,也发现不少被遗漏的问题,才发现原来还是啥也不会,哎慢慢来吧。

今天来总结下圆和圆弧的创建,圆弧和直线是AutoCAD中经常用到的图形,那么,全地球人都知道,一个圆有两个参数:原点和半径;圆弧有四个参数:原点、半径、起始角度和终止角度。

在.NET中用Circle类来表示圆,用Arc类来表示圆弧,这个比较好理解。创建圆的方法归根结底也就一种(我觉得),.NET中已经定义了圆和圆弧的构造函数,只不过是默认构造函数,没有参数,需要自己给他参数,在这之前需要先实例化一个圆或圆弧对象。

CAD开发之路
创建圆的代码如下:

Circlecircle=newCircle();//实例化一个圆对象

circle.Center=newpoint3d();//圆的圆心是原点,当然也可以不让是原点括号里面添加参数(x,y,z)即可

circle.Radius=100;//设置圆的半径

圆弧的创建采用构造函数的重载形式(.NET已经封装了这些类),代码可以这样:

Arcarc=newArc(point3dcenter,doubleradius,doublestartAngle,doubleendAngle);

完整的代码:

usingAutodesk.AutoCAD.Runtime; usingAutodesk.AutoCAD.ApplicationServices; usingAutodesk.AutoCAD.DatabaseServices; usingAutodesk.AutoCAD.Geometry; [CommandMethod("AddCircle")] publicstaticvoidAddCircle() { //获得当前文档和数据库 DocumentacDoc=Application.DocumentManager.MdiActiveDocument; DatabaseacCurDb=acDoc.Database; //启动一个事务 using(TransactionacTrans=acCurDb.TransactionManager.StartTransaction()) { //以只读方式打开块表 BlockTableacBlkTbl;//定义一个块表 acBlkTbl=acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead)asBlockTable; //以写方式打开模型空间块表记录 BlockTableRecordacBlkTblReccircle;//定义一个存放圆的块表记录 BlockTableRecordacBlkTblRecarc;//定义一个存放圆弧的块表记录 acBlkTblReccircle=acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite)asBlockTableRecord; acBlkTblRecarc=acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite)asBlockTableRecord; //创建一个中心点在(2,3,0),半径为4.25的圆 CircleacCirc=newCircle();//实例化一个圆 acCirc.SetDatabaseDefaults();//我没用着段代码,也可以运行,不知道他是干嘛的,望大家多多指教 acCirc.Center=newPoint3d(2,3,0);//指定圆心位置 acCirc.Radius=4.25;//指定半径 //创建一个中心点在(6.25,9.125,0),半径为6,起始角度为1.117(64度),终点角度为3.5605(204度)的圆弧。 ArcacArc=newArc(newPoint3d(6.25,9.125,0),6,1.117,3.5605); //添加新对象到块表记录和事务中 acBlkTblReccircle.AppendEntity(acCirc);//将圆添加到块表记录中 acBlkTblRecarc.AppendEntity(acArc);//将圆弧添加到块表记录中 acTrans.AddNewlyCreatedDBObject(acCirc,true);//添加到事物处理管理器中 acTrans.AddNewlyCreatedDBObject(acArc,true);//添加到事物处理管理器中 acTrans.Commit();//保存新对象到数据库中}}

专业的数字化顾问服务,确保每一个案例切实落地

咨询热线:400-165-0388