找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2869|回复: 0

[分享] CAD中的选择集过滤----有条件选择AutoCAD实体

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-6-9 01:17:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
CAD中的选择集过滤----有条件选择AutoCAD实体 (二)
作者:jdmei520  来源:博客园  发布时间:2008-11-04 14:11  阅读:1140 次  原文链接   [收藏]  

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

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 、AND>、<OR、OR>、<XOR、XOR>、<NOT、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

过滤群组方式
內含项目
描述
运算法则
"<AND" ... "AND>"
1 或 多个
所有项目的交集
1+1=1, 1+0=0, 0+1=0, 0+0=0
"<OR" ... "OR>"
1 或多个
所有项目的并集
1+1=1, 1+0=1, 0+1=1, 0+0=0
"<XOR" ... "XOR>"
2个
两个项目的异或运算
1+1=0, 1+0=1, 0+1=1, 0+0=0
"<NOT" ... "NOT>"
1个
不包含此项目的值
NOT(1)=0,NOT(0)=1

四、范例:

1、过滤条件为图元为MTEXT

图元是MTEXT

FilterData
MTEXT
FilterType
0

2、过滤条件为图元为CIRCLE或LINE

图元是CIRCLE OR 图元是LINE

FilterData
<OR
CIRCLE
LINE
OR>
FilterType
-4
0
0
-4

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

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

FilterData
<AND
<OR
CIRCLE
LINE
OR>
DIM
AND>
FilterType
-4
-4
0
0
-4
8
-4

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

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

FilterData
<AND
<OR
CIRCLE
LINE
OR>
<NOT
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:

    <or

      <and

        Layer == "0"
      • Entity type == "LINE"
      and> <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.

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:44 , Processed in 0.220703 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表