news 2026/2/5 23:19:19

直接画圆或输入半径(关键字和选择状态并列)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直接画圆或输入半径(关键字和选择状态并列)

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}"); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 21:53:52

无线网络仿真:6G网络仿真_(9).应用层仿真

应用层仿真 在6G网络仿真中&#xff0c;应用层仿真是一个非常重要的环节。应用层仿真关注的是网络上层协议和应用程序的行为&#xff0c;这些行为直接影响用户对网络的体验。本节将详细介绍应用层仿真的原理和内容&#xff0c;并提供具体的代码示例和数据样例。 1. 应用层仿真的…

作者头像 李华
网站建设 2026/2/4 23:53:56

交通仿真软件:SUMO_(23).交通仿真中的行人与自行车模型

交通仿真中的行人与自行车模型 在交通仿真软件 SUMO 中&#xff0c;行人和自行车模型是重要的组成部分&#xff0c;用于模拟城市交通中非机动交通参与者的行为。这些模型可以帮助研究人员和工程师更准确地评估交通流量、安全性和城市规划的有效性。本节将详细介绍如何在 SUMO 中…

作者头像 李华