选择集筛选器列表
当参数指定实体字段值列表时,将扫描所选实体并创建一个选择集,其中包含与指定条件匹配的所有主要实体的名称。例如,使用此机制,可以获取包含给定类型、给定图层或给定颜色的所有图元的选择集。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()
父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 11:48
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.