我發現自學一個東西往往都會遇到一個瓶頸,我現在就是,舉步維艱,回過頭來總結下學過的知識,也發現不少被遺漏的問題,才發現原來還是啥也不會,哎慢慢來吧。
今天來總結下圓和圓弧的創建,圓弧和直線是AutoCAD中經常用到的圖形,那么,全地球人都知道,一個圓有兩個參數:原點和半徑;圓弧有四個參數:原點、半徑、起始角度和終止角度。
在.NET中用Circle類來表示圓,用Arc類來表示圓弧,這個比較好理解。創建圓的方法歸根結底也就一種(我覺得),.NET中已經定義了圓和圓弧的構造函數,只不過是默認構造函數,沒有參數,需要自己給他參數,在這之前必須先實例化一個圓或圓弧對象。
創建圓的代碼如下:
Circle circle=new Circle();// 實例化一個圓對象
circle.Center=new point3d();//圓的圓心是原點,當然也可以不讓是原點括號里面添加參數(x,y,z)即可
circle.Radius=100;//設置圓的半徑
圓弧的創建采用構造函數的重載形式(.NET已經封裝了這些類),代碼可以這樣:
Arc arc=new Arc(point3d center,double radius,double startAngle,double endAngle);
完整的代碼:
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; [CommandMethod("AddCircle")] public static void AddCircle() { // 獲得當前文檔和數據庫 Document acDoc = Application.DocumentManager.MdiActiveDocument; Database acCurDb = acDoc.Database; // 啟動一個事務 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // 以只讀方式打開塊表 BlockTable acBlkTbl;//定義一個塊表 acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,OpenMode.ForRead) as BlockTable; // 以寫方式打開模型空間塊表記錄 BlockTableRecord acBlkTblReccircle;//定義一個存放圓的塊表記錄 BlockTableRecord acBlkTblRecarc;//定義一個存放圓弧的塊表記錄 acBlkTblReccircle = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord; acBlkTblRecarc = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord; // 創建一個中心點在 (2,3,0) ,半徑為4.25 的圓 Circle acCirc = new Circle();//實例化一個圓 acCirc.SetDatabaseDefaults();//我沒用着段代碼,也可以運行,不知道他是干嘛的,望大家多多指教 acCirc.Center = new Point3d(2, 3, 0);//指定圓心位置 acCirc.Radius = 4.25;//指定半徑 // 創建一個中心點在 (6.25,9.125,0),半徑為6,起始角度為1.117(64度),終點角度為3.5605(204度)的圓弧。 Arc acArc = new Arc(new Point3d(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(); // 保存新對象到數據庫中 } }