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

窗选和叉选

Window(窗口选择)实现

 

调用  Editor.SelectWindow()  方法,传入矩形的两个对角点(如起点和终点),仅选中完全位于矩形内的对象。

 

csharp

/// <summary>

/// 窗口选择(Window):选中完全位于矩形内的对象

/// </summary>

public void WindowSelection()

{

    // 提示用户输入矩形的两个对角点

    PromptPointResult p1Res = ed.GetPoint("\n指定窗口选择第一角点: ");

    if (p1Res.Status != PromptStatus.OK) return;

    Point3d p1 = p1Res.Value;

 

    PromptPointResult p2Res = ed.GetPoint(p1, "\n指定窗口选择对角点: ");

    if (p2Res.Status != PromptStatus.OK) return;

    Point3d p2 = p2Res.Value;

 

    // 执行窗口选择(完全包含在矩形内的对象)

    PromptSelectionResult selRes = ed.SelectWindow(p1, p2);

    if (selRes.Status == PromptStatus.OK)

    {

        ed.WriteMessage($"\n窗口选择成功,共选中 {selRes.Value.Count} 个对象");

    }

    else

    {

        ed.WriteMessage("\n未选中任何对象");

    }

}

 

 

3. Crossing(交叉选择)实现

 

调用  Editor.SelectCrossingWindow()  方法,传入同样的对角点,选中部分位于矩形内或与矩形边界相交的对象。

 

csharp

/// <summary>

/// 交叉选择(Crossing):选中部分位于矩形内或与矩形相交的对象

/// </summary>

public void CrossingSelection()

{

    // 提示用户输入矩形的两个对角点(与窗口选择操作相同)

    PromptPointResult p1Res = ed.GetPoint("\n指定交叉选择第一角点: ");

    if (p1Res.Status != PromptStatus.OK) return;

    Point3d p1 = p1Res.Value;

 

    PromptPointResult p2Res = ed.GetPoint(p1, "\n指定交叉选择对角点: ");

    if (p2Res.Status != PromptStatus.OK) return;

    Point3d p2 = p2Res.Value;

 

    // 执行交叉选择(部分在矩形内或相交的对象)

    PromptSelectionResult selRes = ed.SelectCrossingWindow(p1, p2);

    if (selRes.Status == PromptStatus.OK)

    {

        ed.WriteMessage($"\n交叉选择成功,共选中 {selRes.Value.Count} 个对象");

    }

    else

    {

        ed.WriteMessage("\n未选中任何对象");

    }

}

 

 

关键说明

 

1. 选择模式的核心区别:

 

-  SelectWindow(p1, p2) :内部自动按“完全包含”规则筛选对象(对应 Window 模式)。

 

-  SelectCrossingWindow(p1, p2) :内部按“部分包含或相交”规则筛选(对应 Crossing 模式)。

 

2. 坐标与区域:

传入的  p1  和  p2  是矩形的任意两个对角点(无需区分左右/上下),CAD 会自动计算矩形范围。

 

3. 扩展:结合选择过滤

可通过  SelectionFilter  进一步限制选择对象类型(如只选直线、圆),例如:

csharp

// 只选择直线(过滤其他对象)

SelectionFilter filter = new SelectionFilter(new TypedValue[] {

    new TypedValue((int)DxfCode.Start, "LINE")

});

// 在选择时传入过滤器

PromptSelectionResult selRes = ed.SelectWindow(p1, p2, filter);

 

 

通过以上代码,即可在程序中主动触发 Window 或 Crossing 选择,实现与手动框选相同的效果

 

http://www.dtcms.com/a/296552.html

相关文章:

  • Linux C 网络基础编程
  • 财务数字化——解读集团企业财务共享业务蓝图规划方案【附全文阅读】
  • OpenHarmony中.cfg引导启动配置文件中不同jobs配置项启动顺序
  • MBPO 算法:让智能体像人一样 “先模拟后实操”—强化学习(17)
  • 构建企业级Docker日志驱动:将容器日志无缝发送到腾讯云CLS
  • 《AI流程编排中的Graph观测:设计原理与集成实践》
  • 网卡配置网卡ip和经过网关的ip
  • PAT 甲级题目讲解:1003《Emergency》
  • JavaSE:对一门面向对象语言有一个初步认识
  • Java 大视界 -- Java 大数据在智能教育自适应学习路径规划与学习效果强化中的应用(362)
  • LeetCode 10:正则表达式匹配
  • MyBatis-Plus--PageHelper 与 MyBatis-Plus 分页插件
  • SAP全自动化工具开发:Excel自动上传与邮件通知系统
  • Flutter之Widget体系与布局原理
  • 汉字转拼音
  • Kiro AI是如何帮我实现发布 harpoon 项目
  • 如何使用 php-vulnerability-hunter
  • 中国网专访百胜软件董事长兼CEO黄飞:中台助力新时代下零售行业的探索
  • go下载包
  • go语言基础教程:【1】基础语法:变量
  • Verilog 提取信号的上升沿或者下降沿
  • Python中常用标准库(时间库、随机库、正则表达式)
  • shell 正则表达式
  • Golang 语言中的指针介绍
  • 高版本Android跨应用广播通信实例
  • 40、鸿蒙Harmony Next开发:UI场景化-组件截图(ComponentSnapshot)
  • C++第一节课入门
  • Qt 元对象系统(Meta-Object System)解析
  • 前端安全问题怎么解决
  • 企业资产管理智能化:IT运维如何借力数字化管理提效避坑?