CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

选择集过滤器列表

2023-1-1 02:28| 发布者: admin| 查看: 591| 评论: 0|来自: 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); 
注意:每个缓冲区中指定的必须为适当的类型。例如,名称类型为字符串 ();高程和厚度是双精度浮点值 ();颜色、属性跟随和标志值是短整数 ();拉伸向量是三维点 ();等等。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()

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 11:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部