[英]AutoCAD Create And Extrude A Circle Using VB.NET
我正在嘗試創建一個圓圈,然后將其拉伸以創建一個實體。 我知道有一種方法可以創建一個圓柱體,但我更願意這樣做。
我下面的代碼可以很好地創建圓圈,但我無法找到正確的方法來擠壓它。
注意:我知道“acRegion1.extrude(Length)”這行是不正確的,但我把它放在那里是為了證明我想要什么。
希望有人可以幫助我解決這個問題。 提前致謝。
<CommandMethod("DRAW_EXTRUDE_CIRCLE")>
Public Shared Sub DRAW_EXTRUDE_CIRCLE()
Dim doc As Document = AutoCADApp.DocumentManager.MdiActiveDocument
Dim db As Database = doc.Database
Dim ed As Editor = doc.Editor
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim PositionX As Single = ed.GetString("X").StringResult
Dim PositionY As Single = ed.GetString("Y").StringResult
Dim PositionZ As Single = ed.GetString("Z").StringResult
Dim Radius As Single = ed.GetString("Radius").StringResult
Dim Length As Single = ed.GetString("Length").StringResult
Dim bt As BlockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead)
Dim btr As BlockTableRecord = tr.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
Dim Obj As Circle = New Circle()
With Obj
.SetDatabaseDefaults()
.Center = New Point3d(PositionX, PositionY, PositionZ)
.Radius = Radius
End With
'' Adds the circle to an object array
Dim acDBObjColl As DBObjectCollection = New DBObjectCollection()
acDBObjColl.Add(Obj)
'' Calculate the regions based on each closed loop
Dim myRegionColl As DBObjectCollection = New DBObjectCollection()
myRegionColl = Region.CreateFromCurves(acDBObjColl)
Dim acRegion1 As Region = myRegionColl(0)
acRegion1.extrude(Length)'this line is incorrect
btr.AppendEntity(Obj)
tr.AddNewlyCreatedDBObject(Obj, True)
tr.Commit()
End Using
End Sub
您應該使用 Editor.GetPoint 和 Editor.GetDistance 而不是 Editor.GetString,因為它們確保了結果類型(Point3d 和 Double)並提供了一些有趣的選項。 您應該檢查 promptResult 的 PromptStatus 值。 您必須明確處置未添加到數據庫中的新創建實體(圓和區域)。
[CommandMethod("DRAW_EXTRUDE_CIRCLE")]
public static void DrawExtrudeCircle()
{
var doc = AcAp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
var promptCenter = ed.GetPoint("\nCenter: ");
if (promptCenter.Status != PromptStatus.OK) return;
var promptRadius = ed.GetDistance("\nRadius: ");
if (promptRadius.Status != PromptStatus.OK) return;
var promptLength = ed.GetDistance("\nLength: ");
if (promptLength.Status != PromptStatus.OK) return;
using (var tr = db.TransactionManager.StartTransaction())
{
using (var circle = new Circle(promptCenter.Value, Vector3d.ZAxis, promptRadius.Value))
{
var curves = new DBObjectCollection();
curves.Add(circle);
var regions = Region.CreateFromCurves(curves);
using (var region = (Region)regions[0])
{
var solid = new Solid3d();
solid.Extrude(region, promptLength.Value, 0.0);
var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
curSpace.AppendEntity(solid);
tr.AddNewlyCreatedDBObject(solid, true);
}
}
tr.Commit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.