当前位置: 首页 > news >正文

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

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}"); } }
http://www.jsqmd.com/news/245107/

相关文章:

  • 内存短缺意外带来好处:AI PC炒作降温
  • CAD倒圆角——CAD自带倒圆角 VS c#重写的倒圆角
  • 急刹事件作为道路风险评估新指标研究
  • AI自适应降噪耳机改变听觉体验
  • RS485 双串口通信 + LCD 实时显示(DMA版)
  • 板凳----------(枯藤 )vs2026+win10(第六章-6)
  • “AI 电影,你敢买票吗?”——《团圆令》与《红孩儿》开启国产动画新赛道
  • 2026年计算机领域重点支持方向(参考)
  • 新年氛围营造:新疆/西藏/甘肃/青海购物中心美陈设计公司盘点
  • 压测 把自己 压进去了
  • 全网最全9个AI论文网站,专科生毕业论文轻松搞定!
  • 《创业之路》-852- 价值投资者的七步法:如何系统地看懂一个企业
  • 《创业之路》-855- 商业模式案例分析 - 中兴通讯
  • Vue3:泛型类型声明 vs 运行时选项声明 语法对比
  • 《创业之路》-857- 商业模式案例分析:阿里、百度、腾讯、字节、滴滴、美团、京东、拼多多 全面对比
  • 洛谷 T478345:循环数组 ← 单调队列 + 破环成链
  • 交通仿真软件:SUMO_(15).高级仿真技术:微观与宏观仿真结合
  • 基于小程序的篮球场馆预订系统-计算机毕业设计源码+LW文档
  • C#上位机源代码,采集西门子200smart温度数据并显示波形曲线,温度到达上限值或下限值进行...
  • 探索光伏发电三相并网技术:从原理到实现
  • 永磁同步电机(PMSM)匝间短路故障Simulink仿真探索
  • 【码力全开特辑直播预告】1月15日晚7点,AscendNPU IR架构开源解读
  • 交通仿真软件:SUMO_(23).交通仿真中的行人与自行车模型
  • Tailwind CSS vs Bootstrap vs ElementUI(ElementPlus) 全面对比表
  • 西门子PLC实现冷热水恒压供水系统开发之旅
  • 下一代CMO的核心课题:通过GEO优化,管理AI口中的“品牌第二身份”
  • 【毕业设计】基于深度学习的是否有污渍识别基于python-cnn深度学习的是否有污渍识别
  • 全阶滑模无位置传感器控制仿真模型,有基本的反正切的,有锁相环的,有基本的开关函数,有饱和函数...
  • 信创超融合怎么选?透过IDC 2025报告看主流国产超融合解决方案
  • 53、UART 串口通信