GetPoint Method
 
 
 

The GetPoint method prompts the user to specify a point at the Command prompt. The PromptPointOptions object allows you to control the input entered and how the prompt message appears. The UseBasePoint and BasePoint properties of the PromptPointOptions object controls if a rubber-band line is drawn from a base point. The Keywords property of the PromptPointOptions object allows you to define keywords that can be entered at the Command prompt in addition to specifying a point.

Get a point selected by the user

The following example prompts the user for two points, then draws a line using those points as the start point and endpoint.

VB.NET

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("GetPointsFromUser")> _
Public Sub GetPointsFromUser()
  '' Get the current database and start the Transaction Manager
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  Dim pPtRes As PromptPointResult
  Dim pPtOpts As PromptPointOptions = New PromptPointOptions("")
 
  '' Prompt for the start point
  pPtOpts.Message = vbLf & "Enter the start point of the line: "
  pPtRes = acDoc.Editor.GetPoint(pPtOpts)
  Dim ptStart As Point3d = pPtRes.Value
 
  '' Exit if the user presses ESC or cancels the command
  If pPtRes.Status = PromptStatus.Cancel Then Exit Sub
 
  '' Prompt for the end point
  pPtOpts.Message = vbLf & "Enter the end point of the line: "
  pPtOpts.UseBasePoint = True
  pPtOpts.BasePoint = ptStart
  pPtRes = acDoc.Editor.GetPoint(pPtOpts)
  Dim ptEnd As Point3d = pPtRes.Value
 
  If pPtRes.Status = PromptStatus.Cancel Then Exit Sub
 
  '' Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      Dim acBlkTbl As BlockTable
      Dim acBlkTblRec As BlockTableRecord
 
      '' Open Model space for write
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                   OpenMode.ForRead)
 
      acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                      OpenMode.ForWrite)
 
      '' Define the new line
      Dim acLine As Line = New Line(ptStart, ptEnd)
 
      '' Add the line to the drawing
      acBlkTblRec.AppendEntity(acLine)
      acTrans.AddNewlyCreatedDBObject(acLine, True)
 
      '' Zoom to the extents or limits of the drawing
      acDoc.SendStringToExecute("._zoom _all ", True, False, False)
 
      '' Commit the changes and dispose of the transaction
      acTrans.Commit()
  End Using
End Sub

C#

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
 
[CommandMethod("GetPointsFromUser")]
public static void GetPointsFromUser()
{
  // Get the current database and start the Transaction Manager
  Document acDoc = Application.DocumentManager.MdiActiveDocument;
  Database acCurDb = acDoc.Database;
 
  PromptPointResult pPtRes;
  PromptPointOptions pPtOpts = new PromptPointOptions("");
 
  // Prompt for the start point
  pPtOpts.Message = "\nEnter the start point of the line: ";
  pPtRes = acDoc.Editor.GetPoint(pPtOpts);
  Point3d ptStart = pPtRes.Value;
 
  // Exit if the user presses ESC or cancels the command
  if (pPtRes.Status == PromptStatus.Cancel) return;
 
  // Prompt for the end point
  pPtOpts.Message = "\nEnter the end point of the line: ";
  pPtOpts.UseBasePoint = true;
  pPtOpts.BasePoint = ptStart;
  pPtRes = acDoc.Editor.GetPoint(pPtOpts);
  Point3d ptEnd = pPtRes.Value;
 
  if (pPtRes.Status == PromptStatus.Cancel) return;
 
  // Start a transaction
  using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  {
      BlockTable acBlkTbl;
      BlockTableRecord acBlkTblRec;
 
      // Open Model space for write
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                   OpenMode.ForRead) as BlockTable;
 
      acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                      OpenMode.ForWrite) as BlockTableRecord;
 
      // Define the new line
      Line acLine = new Line(ptStart, ptEnd);
 
      // Add the line to the drawing
      acBlkTblRec.AppendEntity(acLine);
      acTrans.AddNewlyCreatedDBObject(acLine, true);
 
      // Zoom to the extents or limits of the drawing
      acDoc.SendStringToExecute("._zoom _all ", true, false, false);
 
      // Commit the changes and dispose of the transaction
      acTrans.Commit();
  }
}
VBA/ActiveX Code Reference