乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 46|回复: 2

选择集,实体,和符号表函数(二)选择集的处理(1)选择集过滤表

[复制链接]

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2014-2-28 15:42:00 | 显示全部楼层 |阅读模式
选择集过滤表    当acedSSGet()函数的entmask参数明确记录了实体的范围值列表时,acedSSGet()扫描被选择的实体,同时建立一个包含主实体名的选择集,这些实体与筛选条件相匹配.例如,使用这种方法,用户可以得到一个给定的选择集,这个选择集包括给定层、给定类型或给定颜色的所有实体.过滤表可以与任何选择项联合使用.如果选用"X"选择方式,意味着建立一个仅使用过滤表的选择集.在以前的版本中,如果使用"X"选项,acedSSGet()将扫描全部图形数据库.注意如果仅仅过滤表指定为 (“X”) 而参数entmask 为 NULL, acedSSGet() 选择所有在数据库中的实体.参数 entmask 必须是一个结果缓冲区表.每一个缓冲区指定一个检查参数和匹配的值;缓冲区的restype段是一个DXF组码,它指示要查询的参数种类,而缓冲区的resval域指定要匹配的值.下面是一些实例.struct resbuf eb1, eb2, eb3; char sbuf1[10], sbuf2[10];  ads_name ssname1, ssname2; eb1.restype = 0;       // 类型为实体名strcpy(sbuf1, "CIRCLE"); eb1.resval.rstring = sbuf1; eb1.rbnext = NULL; //无其他属性内容// Retrieve all circles.acedSSGet("X", NULL, NULL,&eb1, ssname1); eb2.restype = 8; // 层名strcpy(sbuf2, "FLOOR3"); eb2.resval.rstring = sbuf2; eb2.rbnext = NULL; // 没有其他属性内容// 检索在 FLOOR3上的所有实体.acedSSGetacedSSGet("X", NULL, NULL,&eb2, ssname2); 注意 在每个缓冲区中指定的resval必须属于合适的类型,比如:名字类型是字符串(resval.rstring);标高和厚度是双精度浮点型(resval.rreal);颜色、属性和标志值是短整型(resval.rint);拉伸向量是三维的点(resval.rpoint),等等.如果entmask指定了多个参数,那么只有匹配所有指定条件的实体才能被包含在选择集里.就像下面的例子:eb3.restype = 62; // 实体颜色eb3.resval.rint = 1; //红色.eb3.rbnext = NULL; eb1.rbnext = &eb2; // 增加另外两个条件eb2.rbnext = &eb3; // 建立链表//检索在FLOOR3层上所有红色圆实体.acedSSGet("X", NULL, NULL,&eb1, ssname1); 除非表中包含关系和条件操作符,否则实体的所有域都要被测试. 有关内容请参见和.如果在数据库中没有实体与指定的筛选条件相匹配,函数acedSSGet()将返回RTERROR. 前面关于acedSSGet()的例子用的是"X"选项,它扫描整个图形数据库;如果过滤表与其他选项(如用户选择、窗口选择,等等)联合使用,过滤条件只能在被选中的实体上起作用. 下面是一组筛选用户选择实体的例子.eb1.restype = 0; // 实体类型组strcpy(sbuf1, "TEXT");vaeb1.resval.rstring = sbuf1; // 类型为文本eb1.rbnext = NULL; //让用户生成选择集,但该集合中只能有TEXT实体.acedSSGet(NULL, NULL, NULL, &eb1,ssname1); 接下来的例子是筛选前一个选择集eb1.restype = 0; //实体类型组strcpy(sbuf1, "LINE"); eb1.resval.rstring = sbuf1; // 类型为直线.eb1.rbnext = NULL; // 选择在上一个选择集中符合条件的实体.acedSSGet("P", NULL, NULL,&eb1, ssname1); 下面是在选择窗口内过滤实体.eb1.restype = 8; // 层strcpy(sbuf1, "FLOOR9");treb1.resval.rstring = sbuf1; // 层名eb1.rbnext = NULL; // 选择在窗口内并在FLOOR9层上的所有实体.acedSSGet("W", pt1, pt2, &eb1,ssname1); 注意 某些组码在不同的实体里有不同的含义,并且不是所有的组码都存在于所有的实体内.如果在过滤程序中指定一个特定的组码,不包含该组码的实体将被排除在acedSSGet()所返回的选择集之外本节中包含的内容·        筛选表中的通配符·        筛选扩展数据·        关系检测·        条件筛选 筛选表中的通配符   筛选表中指定的符号名可以包括通配符.由函数acedSSGet()识别的通配符与函数acutWcMatch()识别的通配符完全一样.例如,下面的程序代码可以检索一个名叫U2的匿名块.eb2.restype = 2; // 块名strcpy(sbuf1,"'*U2"); // eb2.resval.rstring =sbuf1; // 匿名块名eb2.rbnext = NULL; // 选择匿名块*U2的块插入引用.acedSSGet("X",NULL, NULL, &eb2, ssname1);   
回复

使用道具 举报

2

主题

165

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
173
发表于 2014-2-28 17:22:00 | 显示全部楼层
给点有用的吧,这些东西没什么实用性
回复

使用道具 举报

31

主题

360

帖子

18

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
479
发表于 2014-3-1 10:40:00 | 显示全部楼层
让咱们了解下也好。只是看不懂。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 06:45 , Processed in 0.472036 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表