AutoCAD2016二次開發&建立Polyline包圍面Polygon
阿新 • • 發佈:2018-12-19
今天我們來學習一下高版本的AutoCAD開發,使用的2016版,因此開發的環境需要.net4.5支援,這裡使用Visual Studio2012。其實現的功能是利用高版本提供的api介面選擇多段線,然後建立一個包圍線,這其中涉及到距離偏移的選擇。然後使用polygon來建立面,這和其他的地理資訊資料中polygon有點類似,但地理資訊中的polygon,如在arcgis中是具有拓撲計算能力的,好了,這裡說得有點遠了。我們來看一下開發的效果。
當然在開發的時候遇到如下的問題。
在程式碼中加入相應的設定即可,具體實現程式碼如下。
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DrawPolygonAroundPolyline2 { public class Class1 { [CommandMethod("dpap")] public void demo() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; PromptEntityOptions peo = new PromptEntityOptions("\n選擇一條多段線: "); peo.SetRejectMessage("\n必須為多段線!"); peo.AddAllowedClass(typeof(Polyline), true); PromptEntityResult per = ed.GetEntity(peo); if (per.Status != PromptStatus.OK) return; using (Transaction tr = db.TransactionManager.StartTransaction()) { Polyline pline = (Polyline)tr.GetObject(per.ObjectId, OpenMode.ForRead); if (pline.Closed) { ed.WriteMessage("多段線閉合了."); return; } var pdr = ed.GetDistance("\n指定偏移距離: "); if (pdr.Status != PromptStatus.OK) return; var offsetCurves = pline.GetOffsetCurves(pdr.Value); if (offsetCurves.Count != 1) { ed.WriteMessage("\n曲線建立偏移出現錯誤"); foreach (DBObject obj in offsetCurves) obj.Dispose(); return; } using (var polygon = (Polyline)offsetCurves[0]) { offsetCurves = pline.GetOffsetCurves(-pdr.Value); if (offsetCurves.Count != 1) { ed.WriteMessage("\n曲線建立偏移出現錯誤"); foreach (DBObject obj in offsetCurves) obj.Dispose(); return; } using (var curve = (Polyline)offsetCurves[0]) using (var line = new Line(polygon.EndPoint, curve.EndPoint)) { polygon.JoinEntities(new Entity[] { new Line(polygon.EndPoint, curve.EndPoint), curve }); polygon.Closed = true; var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); curSpace.AppendEntity(polygon); tr.AddNewlyCreatedDBObject(polygon, true); } } tr.Commit(); } } } }
更多內容,請關注公眾號