Here is what worked for me (plus some stuff I tried).
Edit: Now it is not working. Back to the drawing board.
[CommandMethod("MyTestPline")]
public void MyTestPline() {
Document Doc = AcadApp.DocumentManager.MdiActiveDocument;
Database Db = Doc.Database;
Editor Ed = Doc.Editor;
PromptPointResult ppr01 = Ed.GetPoint("\nSelect first point: ");
PromptPointOptions ppo02 = new PromptPointOptions("\nSelect second point: ");
ppo02.UseBasePoint = true;
ppo02.BasePoint = ppr01.Value;
PromptPointResult ppr02 = Ed.GetPoint(ppo02);
PromptPointOptions ppo03 = new PromptPointOptions("\nSelect last point: ");
ppo03.UseBasePoint = true;
ppo03.BasePoint = ppr02.Value;
PromptPointResult ppr03 = Ed.GetPoint(ppo03);
Ed.WriteMessage("\n1 = {0}\n2 = {1}\n3 = {2}", ppr01.Value, ppr02.Value, ppr03.Value);
Vector3d vec = new Vector3d(0,0,1).TransformBy(Ed.CurrentUserCoordinateSystem);
Plane plane = new Plane(Db.Ucsorg,vec);
Ed.WriteMessage("\n{0}", vec);
//Point2d p01 = ppr01.Value.Convert2d(plane);
//Point2d p02 = ppr02.Value.Convert2d(plane);
//Point2d p03 = ppr03.Value.Convert2d(plane);
//Point3d p01 = ppr01.Value.TransformBy(Ed.CurrentUserCoordinateSystem);
//Point3d p02 = ppr02.Value.TransformBy(Ed.CurrentUserCoordinateSystem);
//Point3d p03 = ppr03.Value.TransformBy(Ed.CurrentUserCoordinateSystem);
//Ed.WriteMessage("\n1 = {0}\n2 = {1}\n3 = {2}", p01, p02, p03);
Polyline Pline = new Polyline(3);
//Pline.AddVertexAt(0, new Point2d(p01.X, p01.Y), 0.0, 0.0, 0.0);
//Pline.AddVertexAt(0, new Point2d(p02.X, p02.Y), 0.0, 0.0, 0.0);
//Pline.AddVertexAt(0, new Point2d(p03.X, p03.Y), 0.0, 0.0, 0.0);
//Pline.AddVertexAt(0, p01, 0.0, 0.0, 0.0);
//Pline.AddVertexAt(0, p02, 0.0, 0.0, 0.0);
//Pline.AddVertexAt(0, p03, 0.0, 0.0, 0.0);
Pline.AddVertexAt(0, new Point2d(ppr01.Value.X, ppr01.Value.Y), 0.0, 0.0, 0.0);
Pline.AddVertexAt(0, new Point2d(ppr02.Value.X, ppr02.Value.Y), 0.0, 0.0, 0.0);
Pline.AddVertexAt(0, new Point2d(ppr03.Value.X, ppr03.Value.Y), 0.0, 0.0, 0.0);
Pline.Normal = vec;
using (Transaction Trans = Db.TransactionManager.StartTransaction()) {
BlockTableRecord btr = (BlockTableRecord)Trans.GetObject(Db.CurrentSpaceId, OpenMode.ForWrite);
btr.AppendEntity(Pline);
Trans.AddNewlyCreatedDBObject(Pline, true);
Trans.Commit();
}
}