CAD二次开发之选择集过滤

一、选择集过滤时的使用方式如下:

Object 指使用SelectionSet这个方法适用的对象

1) object.Select Mode[, Point1][, Point2][, FilterType][, FilterData]

2) object.SelectOnScreen [FilterType][, FilterData]

3) object.SelectAtPoint Point, FilterType, FilterData

FilterType:Variant[变体](整数数组); 仅用于输入;(可选项) 指定使用的过滤器类型的 DXF组码。

FilterData:Variant[变体](变体数组); 仅用于输入;(可选项) 过滤器的值。

二、DXF群组码共同群组码代码一览表

群码

说明

预设值

-4

过滤群组方式,例如 AND>OR>XOR>NOT>

单一条件时可省略

-1

图元名称(会随每一个图档开启而有所不同)

不可省略

0

图元类型,例如 "ARC" "LINE""CIRCLE"...

不可省略

5

处理码

不可省略

6

线型名称(如果线型不为"BYLAYER",此群码值会出现)

BYLAYER

8

图层名称

不可省略

48

线性比例(选择性)

1.0

60

物件可见性, 0=可见, 1=不可见

0

62

颜色编号 (如果线型不为"BYLAYER",此群群码会出現)当值为0,即指BYLAYER,如果是负值即指该图层是关闭的(选择性)

BYLAYER

67

值为空或0时即指图元在模型空间,如果为1指在图形空间

0

三、过滤群组方式

- FilterType (DXF 群组码) = -4

过滤群组方式

內含项目

描述

运算法则

""

1 或 多个

所有项目的交集

1+1=1, 1+0=0, 0+1=0, 0+0=0

""

1 或多个

所有项目的并集

1+1=1, 1+0=1, 0+1=1, 0+0=0

""

2

两个项目的异或运算

1+1=0, 1+0=1, 0+1=1, 0+0=0

""

1

不包含此项目的值

NOT(1)=0,NOT(0)=1

四、范例:

1、过滤条件为图元为MTEXT

图元是MTEXT

FilterData

MTEXT

FilterType

0

2、过滤条件为图元为CIRCLELINE

图元是CIRCLE OR 图元是LINE

FilterData

 

CIRCLE

LINE

OR>

FilterType

-4

0

0

-4

3、过滤条件为图元在DIM 图层(LAYER)中的CIRCLELINE

(图元是CIRCLE OR 图元是LINE) AND 图层位于DIM

FilterData

 

 

CIRCLE

LINE

OR>

DIM

AND>

FilterType

-4

-4

0

0

-4

8

-4

4、过滤的条件为图元为CIRCLELINE但图层(LAYER)不属于DIM

(图元是CIRCLE OR 图元是LINE) AND NOT(图层位于DIM)

FilterData

 

 

CIRCLE

LINE

OR>

 

DIM

NOT>

AND>

FilterType

-4

-4

0

0

-4

-4

8

-4

-4

 

 

 

让我们看一个实例:我们想要选择层0上的所有直线和所有直径大于10的圆,该如何组合条件呢?

Let's take a concrete example: let's say we want to select all lines on on layer 0 and all the circles with radii greater than 10.'s how we would compose the conditions, in pseudo-code:

·        

·        

·         Layer == "0"

·         Entity type == "LINE"

·         and>

·        

·         Entity type == "CIRCLE"

·         Radius >= 10.0

·         and>

·         or>

转换为c#如下代码:为清楚起见,此处我把指定的属性/值以硬编码的形式实现,另如果需要应该直接由用户从数据库中进行选择。

This translates into the following C# code - for clarity I've left the specific properties/values hard-coded, but clearly it would be straightforward to ask the user or pick them out of a database, as needed.


using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;

namespace EntitySelection
{
public class Commands
{
[CommandMethod(
"SEWP")]
public static void SelectEntitiesWithProperties()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;

// Build a conditional filter list so that only
// entities with the specified properties are
// selected
TypedValue[] tvs = new TypedValue[]
{
new TypedValue((int)DxfCode.Operator, "),
new TypedValue((int)DxfCode.Operator, "),
new TypedValue((int)DxfCode.LayerName, "0"),
new TypedValue((int)DxfCode.Start, "LINE"),
new TypedValue((int)DxfCode.Operator, "and>"),
new TypedValue((int)DxfCode.Operator, "),
new TypedValue((int)DxfCode.Start, "CIRCLE"),
new TypedValue((int)DxfCode.Operator, ">="),
new TypedValue((int)DxfCode.Real, 10.0),// Circle Radius
new TypedValue((int)DxfCode.Operator, "and>"),
new TypedValue((int)DxfCode.Operator, "or>")
};

SelectionFilter sf =
 new SelectionFilter(tvs);
PromptSelectionResult psr = ed.SelectAll(sf);
if (psr.Status == PromptStatus.OK)
{
SelectionSet SS = psr.Value;
ObjectId[] idArray = SS.GetObjectIds();
for (int i = 0; i < idArray.Length; i++)
{
Entity ent = (Entity)Tools.GetDBObject(idArray[i]);
ent.Highlight();
Tools.WriteMessage(i +
 ":" + ent.ObjectId.ToString() + "," + ent.GetType().Name);
}
}

}

}
//end class
}

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在C#中进行CAD二次开发,可以利用AutoCAD的API(应用程序接口)来实现CAD连接和操作。AutoCAD提供了一组强大的API,使我们能够与AutoCAD进行交互,并对CAD文件进行读取、编辑和创建等操作。 以下是连接CAD的一般步骤: 1. 安装AutoCAD软件:首先,您需要安装AutoCAD软件,以便使用其API进行开发。请确保您安装的是与您的开发环境相匹配的版本。 2. 引用AutoCAD的API:在C#项目中,您需要引用AutoCAD的API库。通常,可以在Visual Studio中通过右键单击项目,然后选择“添加引用”来添加对AutoCAD库的引用。 3. 创建连接:在C#代码中,您可以使用`AcadApplication`类创建与AutoCAD的连接。例如: ```csharp AcadApplication cadApp = new AcadApplication(); cadApp.Visible = true; // 可选,使AutoCAD窗口可见 ``` 4. 打开CAD文件:使用连接对象,您可以打开现有的CAD文件或创建新的文件。例如: ```csharp AcadDocument doc = cadApp.Documents.Open("C:\\path\\to\\your\\drawing.dwg"); ``` 5. 进行操作:通过连接对象,您可以执行各种CAD操作,例如读取实体、修改属性、添加图形等。具体的操作方法可以参考AutoCAD的API文档和示例代码。 6. 关闭连接:当您完成操作后,记得关闭连接并释放相关资源。例如: ```csharp doc.Close(); cadApp.Quit(); ``` 以上是连接CAD的基本步骤,您可以根据自己的需求进行进一步的开发和定制。希望对您有帮助!如果您有更多具体的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值