Try this one
Imports System
Imports System.Collections
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports AcadRT = Autodesk.AutoCAD.Runtime
Imports AcadED = Autodesk.AutoCAD.EditorInput
Imports AcDB = Autodesk.AutoCAD.DatabaseServices
Imports AcadApp = Autodesk.AutoCAD.ApplicationServices.Application
Imports Autodesk.AutoCAD.Windows
............................................................
Shared Function getreal(ByVal msg As String, ByRef d As Double) As Boolean
Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor
Dim res As PromptDoubleResult = ed.GetDouble(msg)
If res.Status PromptStatus.OK Then
Return False
End If
d = res.Value
Return True
End Function
Shared Function getpoint(ByVal msg As String, ByRef P As Point3d) As Boolean
Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor
Dim res As PromptPointResult = ed.GetPoint(msg)
If res.Status PromptStatus.OK Then
Return False
End If
P = res.Value
Return True
End Function
Public Shared Sub CreateDonut()
Dim ed As Editor = AcadApp.DocumentManager.MdiActiveDocument.Editor
Dim db As AcDB.Database = HostApplicationServices.WorkingDatabase
Dim ptArr As Point3dCollection = New Point3dCollection
Dim eRad As Double
Dim iRad As Double
Dim p As Point3d = New Point3d
Try
Using tr As AcDB.Transaction = db.TransactionManager.StartTransaction()
Using bt As BlockTable = CType(tr.GetObject(db.BlockTableId, OpenMode.ForRead, False), BlockTable)
Using btr As BlockTableRecord = CType(tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
If Not getreal(ControlChars.CrLf & "Enter outer radius: ", eRad) Then
Return
End If
If Not getreal(ControlChars.CrLf & "Enter inner radius: ", iRad) Then
Return
End If
If Not getpoint(ControlChars.CrLf & "Pick point: ", p) Then
Return
End If
Dim spt As Point2d = New Point2d(p.X - eRad + (eRad - iRad) / 2, p.Y)
Dim ept As Point2d = New Point2d(p.X + eRad - (eRad - iRad) / 2, p.Y)
ptArr.Add(New Point3d(spt.X, spt.Y, p.Z))
ptArr.Add(New Point3d(ept.X, ept.Y, p.Z))
Dim blgArr As DoubleCollection = New DoubleCollection()
blgArr.Add(1.0)
blgArr.Add(1.0)
Dim oPline As Polyline2d = New Polyline2d(Poly2dType.SimplePoly, ptArr, 0.0, True, eRad - iRad, eRad - iRad, blgArr)
oPline.Closed = True
btr.AppendEntity(oPline)
tr.AddNewlyCreatedDBObject(oPline, True)
tr.Commit()
End Using
End Using
End Using
Catch ex As Exception
MsgBox(ex.Message & ControlChars.CrLf & ex.StackTrace, MsgBoxStyle.Critical, "Exception")
End Try
End Sub
~'J'~