C#實戰(zhàn)之CAD二次開發(fā)002:繪制直線和繪制圓 | 您所在的位置:網(wǎng)站首頁 › 屬龍的找對象應(yīng)該找屬什么的 › C#實戰(zhàn)之CAD二次開發(fā)002:繪制直線和繪制圓 |
前言 上期我們介紹了C#和CAD環(huán)境的配置,這次我們介紹一下CAD兩個基本的繪圖功能——直線和圓,這兩個在CAD繪圖中用的還是比較多的。 1.繪制直線首先我們新建一個類庫項目,名字myproject,在添加引用acmgd.dll和acdbmgd.dll,需要注意的一點就是,在添加完引用之后,需要將兩個引用dll的屬性進行一個設(shè)置,將屬性中“復(fù)制本地”的選項改為Fasle。 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; public static class Tools { //繪制直線 public static void FirstLine(Point3d startPoint, Point3d endPoint, string layer) { //獲取當前活動圖形數(shù)據(jù)庫 Database db = HostApplicationServices.WorkingDatabase; Line line = new Line(startPoint, endPoint);//新建一條直線對象 //定義一個指向當前數(shù)據(jù)庫的事務(wù)處里,以添加直線 using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//以讀方式打開塊表 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); line.Layer = layer; btr.AppendEntity(line);//以圖形對象的信息添加到塊表記錄中 trans.AddNewlyCreatedDBObject(line, true);//把對象添加到事務(wù)處理中 trans.Commit();//提交事務(wù)處理 } } }在.NET中,Autodesk.AutoCAD.Geometry命名空間的Point3d結(jié)構(gòu)表示點的三維坐標,Point2d結(jié)構(gòu)表示點的二維坐標。 其中mode參數(shù)表示打開對象的方式,它是一個OpenMode類型的枚舉,主要兩個值: (1)ForRead:對象以讀的方式被打開,只要它還沒有以寫的方式被打開; (2)ForWrite:對象以寫的方式被打開,只要它還沒有被打開,否則會打開失敗; 接著我們在新建一個類,用于建立CAD命令行指令,用于調(diào)用上面繪制直線的函數(shù)。其中三個參數(shù)所代表的意思分別是直線的起點,終點和它所在的圖層。 public class Command { //名字可以自定義,最好不要和CAD快捷鍵沖突 [CommandMethod("cad")] public static void cad() { Tools.FirstLine(new Point3d(0, 0, 0), new Point3d(100, 100, 0), "0"); } }接下來,編譯我們寫好的程序,當顯示生成成功之后,我們就可以去CAD進行測試了。
打開CAD,在命令行中輸入‘cad’命令,CAD就會幫我們畫出一條起點為(0,0,0),終點為(100,100,0)的直線了。效果如下圖所示:
如果學(xué)會繪制直線之后,相信讀者對C#作CAD畫圖會有一個基本的了解了,下面我們在來實現(xiàn)繪制圓。我們采用的是三點畫圓法,通過圓周上任意三點創(chuàng)建圓。 public static void CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3, string layer) { Database db = HostApplicationServices.WorkingDatabase; Circle circle = new Circle(); //創(chuàng)建一個幾何類的圓弧對象 CircularArc3d geArc = new CircularArc3d(pt1, pt2, pt3); //將圓弧對象的圓心和半徑賦值給圓 circle.Center = geArc.Center; circle.Radius = geArc.Radius; circle.Layer = layer; //定義一個指向當前數(shù)據(jù)庫的事務(wù)處里,以添加 using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//以讀方式打開塊表 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); btr.AppendEntity(circle);//以圖形對象的信息添加到塊表記錄中 trans.AddNewlyCreatedDBObject(circle, true);//把對象添加到事務(wù)處理中 trans.Commit();//提交事務(wù)處理 } }同樣的,我們在之前寫好的Command類中添加一行代碼: Tools.CreateCircle(new Point3d(50, 50, 0), new Point3d(0, 50, 0), new Point3d(50, 0, 0), "0");再次編譯寫好的程序,打開CAD,輸入‘cad’命令,效果如下圖所示:
|
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有 |