if (pointResult.Status == PromptStatus.Keyword)
else if (pointResult.Status == PromptStatus.OK)
{
// 用户直接指定了点,使用默认半径画圆
CreateCircle(db, ed, pointResult.Value, radius);
}
else
{
// 用户取消
return;
}
public static void DrawCircleWithDirectOption() { // 获取当前文档和编辑器 Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; try { double radius = 100.0; // 默认半径 bool radiusSpecified = false; // 第一步:提示用户指定圆心点或输入关键字R // 这里的关键是使用 PromptPointOptions,它允许用户直接点选或输入关键字 PromptPointOptions pointOptions = new PromptPointOptions("\n指定圆心点或 [半径(R)]: "); pointOptions.Keywords.Add("R"); pointOptions.AppendKeywordsToMessage = true; // 这里设置 AllowNone 为 true,允许用户直接按Enter键 // 但我们的需求是直接点选或输入R,所以不需要AllowNone PromptPointResult pointResult = ed.GetPoint(pointOptions); if (pointResult.Status == PromptStatus.Keyword) { // 用户输入了关键字 "R" if (pointResult.StringResult == "R") { // 提示用户输入半径值 PromptDoubleOptions radiusOptions = new PromptDoubleOptions("\n请输入半径值: "); radiusOptions.AllowZero = false; // 不允许零值 radiusOptions.AllowNegative = false; // 不允许负值 radiusOptions.DefaultValue = 100.0; // 默认值100 PromptDoubleResult radiusResult = ed.GetDouble(radiusOptions); if (radiusResult.Status != PromptStatus.OK) return; // 用户取消或输入错误 radius = radiusResult.Value; radiusSpecified = true; // 再次提示用户指定圆心点 PromptPointOptions centerOptions = new PromptPointOptions("\n指定圆心点: "); PromptPointResult centerResult = ed.GetPoint(centerOptions); if (centerResult.Status != PromptStatus.OK) return; CreateCircle(db, ed, centerResult.Value, radius); } } else if (pointResult.Status == PromptStatus.OK) { // 用户直接指定了点,使用默认半径画圆 CreateCircle(db, ed, pointResult.Value, radius); } else { // 用户取消 return; } } catch (System.Exception ex) { ed.WriteMessage($"\n错误: {ex.Message}"); } } /// <summary> /// 创建圆的辅助方法 /// </summary> private static void CreateCircle(Database db, Editor ed, Point3d center, double radius) { using (Transaction tr = db.TransactionManager.StartTransaction()) { // 获取块表记录 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // 创建圆 Circle circle = new Circle(center, Vector3d.ZAxis, radius); // 将圆添加到模型空间 btr.AppendEntity(circle); tr.AddNewlyCreatedDBObject(circle, true); // 提交事务 tr.Commit(); // 显示提示信息 ed.WriteMessage($"\n已创建圆:圆心({center.X:F2}, {center.Y:F2}),半径={radius:F2}"); } }