autocad.net 画多段线_cad.net 判断点在多段线内-射线法

这段代码演示了如何在Autocad.Net中利用WhileEntsel方法进行用户交互式选择,通过射线法判断点是否位于多段线内部。通过设置过滤类型和图元类型,确保选取的图元符合要求,然后转换为实体并检查其类型,以实现特定类型的图元选择和操作。
摘要由CSDN通过智能技术生成

///

///点选直到满足条件///

/// 图形数据库

/// 过滤类型,数组

/// 块外

/// 块内

/// 点选到的图元的ObjectId

public static object WhileEntsel(thisEditor ed, Transaction tr,

PromptEntityOptions peo= null, PromptNestedEntityOptions opt = null, IEnumerable entType = null)

{

ed.SetImpliedSelection(new ObjectId[0]); //清空当前选择集

object idOrKeyword = null;

ObjectId idget=ObjectId.Null;bool flag = true;

PromptEntityResult res;

PromptNestedEntityResult pnes;while(flag)

{if (peo != null)

{

res=ed.GetEntity(peo);switch(res.Status)

{casePromptStatus.Keyword:

idOrKeyword=res.StringResult;

flag= false;break;casePromptStatus.Cancel:casePromptStatus.None:casePromptStatus.Error:

flag= false;break;casePromptStatus.OK:

idget=res.ObjectId;break;

}

}else if (opt != null)

{

pnes=ed.GetNestedEntity(opt);switch(pnes.Status)

{casePromptStatus.Cancel:

flag= false;break;casePromptStatus.None:

flag= false;break;casePromptStatus.Error:

flag= false;break;casePromptStatus.OK:

idget=pnes.ObjectId;break;

}

}var listtype = new List();//类型要求为空,代表任何类型都接受,否则加入表内判断.

if (entType != null)

{foreach (var item inentType)

{

listtype.Add(item.ToString());

}

}if(idget.IsOk())

{//图元类型匹配

Entity ent =idget.ToEntity(tr);if (entType == null || entType.Count == 0)

{

flag= false;

idOrKeyword=idget;

}else if(listtype.Contains(ent.GetType().Name))

{

flag= false;

idOrKeyword=idget;

}

}else{break;

}

}

CadSystem.Setvar("errno", "0");//空格结束产生的错误系统变量,会影响到下一次使用错误系统变量的判断.

returnidOrKeyword;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值