CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2018 开发者帮助

选择集筛选器列表

2024-5-18 16:58| 发布者: admin| 查看: 63| 评论: 0|原作者: admin|来自: AutoCAD

选择集筛选器列表

当参数指定实体字段值列表时,将扫描所选实体并创建一个选择集,其中包含与指定条件匹配的所有主要实体的名称。例如,使用此机制,可以获取包含给定类型、给定图层或给定颜色的所有图元的选择集。entmaskacedSSGet()

您可以将筛选器与任何选择选项结合使用。“” 选项表示仅使用过滤创建选择集;与以前的AutoCAD版本一样,如果使用“”选项,则扫描整个图形数据库。XXacedSSGet()

注意:如果仅指定了筛选 (“”) 但参数为 ,则选择数据库中的所有实体。XentmaskNULLacedSSGet()

该参数必须是结果缓冲区列表。每个缓冲区指定要检查的属性和构成匹配项的值;缓冲区的字段是一个 DXF 组代码,指示要查找的属性类型,其字段指定要匹配的值。entmaskrestyperesval

以下是一些示例。

struct resbuf eb1, eb2, eb3; 
char sbuf1[10], sbuf2[10]; // Buffers to hold strings
ads_name ssname1, ssname2; 
eb1.restype = 0;	// Entity name
strcpy(sbuf1, "CIRCLE"); 
eb1.resval.rstring = sbuf1; 
eb1.rbnext = NULL; // No other properties
// Retrieve all circles.
acedSSGet("X", NULL, NULL, &eb1, ssname1); 
eb2.restype = 8; // Layer name 
strcpy(sbuf2, "FLOOR3"); 
eb2.resval.rstring = sbuf2; 
eb2.rbnext = NULL; // No other properties
// Retrieve all entities on layer FLOOR3.
acedSSGet("X", NULL, NULL, &eb2, ssname2); 
注意:每个缓冲区中指定的必须是适当的类型。例如,名称类型为字符串 ();高程和厚度是双精度浮点值 ();color、attributes-follow 和 flag 值是短整数 ();拉伸向量是三维点 ();等等。resvalresval.rstringresval.rrealresval.rintresval.rpoint

如果指定了多个属性,则仅当实体与所有指定条件匹配时,才会将其包含在选择集中,如以下示例所示:entmask

eb3.restype = 62; // Entity color
eb3.resval.rint = 1; // Request red entities.
eb3.rbnext = NULL; // Last property in list
eb1.rbnext = &eb2; // Add the two properties
eb2.rbnext = &eb3; // to form a list.
// Retrieve all red circles on layer FLOOR3.
acedSSGet("X", NULL, NULL, &eb1, ssname1); 

实体将针对筛选列表中指定的所有字段进行测试,除非该列表包含关系运算符或条件运算符,如关系测试条件筛选中所述。

如果数据库中没有实体与指定的筛选条件匹配,则返回该函数。acedSSGet()RTERROR

前面的示例使用 “” 选项,该选项扫描整个图形数据库。如果筛选器列表与其他选项(用户选择、窗口等)结合使用,则筛选器仅应用于最初选择的实体。acedSSGet()X

以下是筛选用户选择的实体的示例。

eb1.restype = 0; // Entity type group
strcpy(sbuf1, "TEXT"); 
eb1.resval.rstring = sbuf1; // Entity type is text.
eb1.rbnext = NULL; 
// Ask the user to generally select entities, but include 
// only text entities in the selection set returned.
acedSSGet(NULL, NULL, NULL, &eb1, ssname1); 

下一个示例演示了对上一个选择集的筛选。

eb1.restype = 0; // Entity type group
strcpy(sbuf1, "LINE"); 
eb1.resval.rstring = sbuf1; // Entity type is line.
eb1.rbnext = NULL; 
// Select all the lines in the previously created selection set.
acedSSGet("P", NULL, NULL, &eb1, ssname1); 

最后一个示例显示了在选择窗口中筛选实体。

eb1.restype = 8; // Layer
strcpy(sbuf1, "FLOOR9"); 
eb1.resval.rstring = sbuf1; // Layer name
eb1.rbnext = NULL; 
// Select all the entities within the window that are also 
// on the layer FLOOR9.
acedSSGet("W", pt1, pt2, &eb1, ssname1); 
注意:某些组代码的含义可能因实体而异,并且并非所有组代码都存在于所有实体中。如果在筛选器中指定了特定的组代码,则不包含该组代码的实体将从返回的选择集中排除。acedSSGet()

父主题:

  1. 处理选择集

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2024-12-15 11:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部