CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

选择集操作

2023-1-1 02:27| 发布者: admin| 查看: 282| 评论: 0|来自: AutoCAD

可以通过调用函数和将图元添加到选择集或从选择集中移除图元,当 AutoCAD 以交互方式提示用户选择对象或移除对象时,函数和类似于“添加”和“移除”选项。acedSSAdd()acedSSDel()

注意:该函数还可用于创建新的选择集,如以下示例所示。与 一样,仅当它返回时才创建新的选择集。acedSSAdd()acedSSGet()acedSSAdd()RTNORM

下面的示例代码片段创建一个选择集,其中包含当前图形中的第一个和最后一个图元。

ads_name fname, lname; // Entity names
ads_name ourset; // Selection set name
// Get the first entity in the drawing.
if (acdbEntNext(NULL, fname) != RTNORM) { 
    acdbFail("No entities in drawing\n"); 
    return BAD; 
} 
// Create a selection set that contains the first entity.
if (acedSSAdd(fname, NULL, ourset) != RTNORM) { 
    acdbFail("Unable to create selection set\n"); 
    return BAD; 
} 
// Get the last entity in the drawing.
if (acdbEntLast(lname) != RTNORM) { 
    acdbFail("No entities in drawing\n"); 
    return BAD; 
} 
// Add the last entity to the same selection set.
if (acedSSAdd(lname, ourset, ourset) != RTNORM) { 
    acdbFail("Unable to add entity to selection set\n"); 
    return BAD; 
 
} 

即使数据库中只有一个实体,该示例也能正常运行(在这种情况下,两者将其参数设置为相同的实体名称)。Ifis 传递了已在选择集中的实体的名称,它会忽略请求并且不报告错误。acdbEntNext()acdbEntLast()acedSSAdd()

如示例所示,第二个和第三个参数可以作为相同的选择集名称传递。也就是说,如果调用成功,则由两个参数命名的选择集将包含附加成员 afterreturn(除非指定的实体已在选择集中)。acedSSAdd()acedSSAdd()

以下调用将删除在上一示例中用于创建选择集的实体。

acedSSDel(fname, ourset); 

如果图形中有多个图元(即,ifandare 不相等),则选择集现在仅包含图形中的最后一个图元。fnamelnameoursetlname

该函数返回选择集中的图元数,并测试特定图元是否为选择集的成员。最后,该函数返回选择集中特定实体的名称,使用索引进入该集(选择集中的实体从 0 开始编号)。acedSSLength()acedSSMemb()acedSSName()

注意:由于选择集可能非常大,因此返回的参数必须声明为整数。在调用中用作索引的参数也必须是整数。(在此上下文中,标准 C 编译器将正确转换纯整数。lenacedSSLength()longiacedSSName()long

以下示例代码显示了对 的几个调用。acedSSName()

ads_name sset, ent1, ent4, lastent; 
long ilast; 
// Create the selection set (by prompting the user).
acedSSGet(NULL, NULL, NULL, NULL, sset); 
// Get the name of first entity in sset.
if (acedSSName(sset, 0L, ent1) != RTNORM) 
    return BAD; 
// Get the name of the fourth entity in sset.
if (acedSSName(sset, 3L, ent4) != RTNORM) { 
    acdbFail("Need to select at least four entities\n"); 
    return BAD; 
} 
// Find the index of the last entity in sset.
if (acedSSLength(sset, &ilast) != RTNORM) 
    return BAD; 
// Get the name of the last entity in sset.
if (acedSSName(sset, ilast-1, lastent) != RTNORM) 
    return BAD; 

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部