窗选和叉选

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 选择,实现与手动框选相同的效果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值