簡體   English   中英

AutoCAD 使用 VB.NET 創建和拉伸圓

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM