2D and 3D polylines, rectangles, polygons, donuts, and 3D polygon meshes are all polyline variants and are edited in the same way.
AutoCAD recognizes both fit polylines and spline-fit polylines. A spline-fit polyline uses a curve fit, similar to a B-spline. There are two kinds of spline-fit polylines: quadratic and cubic. Both polylines are controlled by the SPLINETYPE system variable. A fit polyline uses standard curves for curve fit and utilizes any tangent directions set on any given vertex.
To edit a polyline, use the properties and methods of the Polyline, Polyline2d, or Polyline3d object. Use the following properties and methods to open or close a polyline, change the coordinates of a polyline vertex, or add a vertex:
Opens or closes the polyline.
Sets the constant width for a lightweight and 2D polyline.
Adds a vertex to a 2D or 3D polyline.
Adds a vertex to a lightweight polyline.
Reverses the direction of the polyline.
Use the following methods to update the bulge or width of a polyline:
Sets the bulge of a light polyline, given the segment index.
Sets the start width of a lightweight polyline, given the segment index.
Straightens a 2D or 3D polyline.
This example creates a lightweight polyline. It then adds a bulge to the third segment of the polyline, appends a vertex to the polyline, changes the width of the last segment, and finally closes the polyline.
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
[CommandMethod("EditPolyline")]
public static void EditPolyline()
{
// Get the current document and database
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the Block table for read
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Create a lightweight polyline
using (Polyline acPoly = new Polyline())
{
acPoly.AddVertexAt(0, new Point2d(1, 1), 0, 0, 0);
acPoly.AddVertexAt(1, new Point2d(1, 2), 0, 0, 0);
acPoly.AddVertexAt(2, new Point2d(2, 2), 0, 0, 0);
acPoly.AddVertexAt(3, new Point2d(3, 2), 0, 0, 0);
acPoly.AddVertexAt(4, new Point2d(4, 4), 0, 0, 0);
// Add the new object to the block table record and the transaction
acBlkTblRec.AppendEntity(acPoly);
acTrans.AddNewlyCreatedDBObject(acPoly, true);
// Sets the bulge at index 3
acPoly.SetBulgeAt(3, -0.5);
// Add a new vertex
acPoly.AddVertexAt(5, new Point2d(4, 1), 0, 0, 0);
// Sets the start and end width at index 4
acPoly.SetStartWidthAt(4, 0.1);
acPoly.SetEndWidthAt(4, 0.5);
// Close the polyline
acPoly.Closed = true;
}
// Save the new objects to the database
acTrans.Commit();
}
}