CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

实体名称函数

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

若要对实体进行操作,ObjectARX 应用程序必须获取其名称,以便在对实体数据函数或选择集函数的后续调用中使用。函数,,并且不仅返回实体的名称,还返回供应用程序使用的其他信息。这些功能要求 AutoCAD 用户(或应用程序)通过在图形屏幕上指定一个点来选择实体;所有其他实体名称函数都可以检索实体,即使该实体在屏幕上不可见或位于冻结层上也是如此。像函数一样,你可以有一个,,并通过在它们前面加上一个调用来返回一个关键字而不是一个点。acedEntSel()acedNEntSelP()acedNEntSel()entselacedGetxxx()acedEntSel()acedNEntSelP()acedNEntSel()acedInitGet()

如果调用 ,, 或返回 RTERROR,并且您想知道用户是否指定了没有实体的点或用户是否按了 RETURN,则可以检查 ERRNO 系统变量的值。如果用户指定了一个空点,则 ERRNO 等于 7 (OL_ENTSELPICK)。如果用户按 RETURN,则 ERRNO 等于 52 (OL_ENTSELNULL)。(如果您的程序包含头文件 ol_errno.h),则可以使用符号名称。acedEntSel()acedNEntSelP()acedNEntSel()

注意:您应该在 ERRNO 之后立即检查 ERRNO,或返回。后续的 ObjectARX 调用可以更改 ERRNO 的值。acedEntSel()acedNEntSelP()acedNEntSel()

该函数按顺序检索实体名称。如果其第一个参数为 ,则返回图形数据库中第一个实体的名称;如果其第一个参数是当前图形中图元的名称,则返回后续图元的名称。acdbEntNext()NULL

下面的示例代码片段演示了如何结合使用以创建选择集以及向现有集添加成员。acedSSAdd()acdbEntNext()

ads_name ss, e1, e2; 
// Set e1 to the name of first entity.
if (acdbEntNext(NULL, e1) != RTNORM) { 
    acdbFail("No entities in drawing\n"); 
    return BAD; 
} 
// Set ss to a null selection set.
acedSSAdd(NULL, NULL, ss); 
// Return the selection set ss with entity name e1 added.
if (acedSSAdd(e1, ss, ss) != RTNORM) { 
    acdbFail("Unable to add entity to selection set\n"); 
    return BAD; 
} 
// Get the entity following e1.
if (acdbEntNext(e1, e2) != RTNORM) { 
    acdbFail("Not enough entities in drawing\n"); 
    return BAD; 
} 
// Add e2 to selection set ss  
if (acedSSAdd(e2, ss, ss) != RTNORM) { 
    acdbFail("Unable to add entity to selection set\n"); 
    return BAD; 
} 

下面的示例代码片段用于“遍历”数据库,一次一个实体。acdbEntNext()

ads_name ent0, ent1; 
struct resbuf *entdata; 
if (acdbEntNext(NULL, ent0) != RTNORM) { 
    acdbFail("Drawing is empty\n"); 
    return BAD; 
} 
do { 
// Get entity's definition data.
    entdata = acdbEntGet(ent0); 
    if (entdata == NULL) { 
        acdbFail("Failed to get entity\n"); 
        return BAD; 
    } 
        . 
        . // Process new entity.
        . 
    if (acedUsrBrk() == TRUE) { 
        acdbFail("User break\n"); 
        return BAD; 
    } 
    acutRelRb(entdata); // Release the list.
    ads_name_set(ent0, ent1); // Bump the name.
} while (acdbEntNext(ent1, ent0) == RTNORM); 
注意:您也可以通过在调用中“碰撞”单个变量(例如)来浏览数据库,但如果这样做,则一旦循环结束,将不再定义变量的值。acdbEntNext()acdbEntNext(ent0, ent0)

该函数检索数据库中最后一个实体的名称。最后一个实体是最近创建的主实体,因此可以通过调用 /,/ 或来调用以获取刚刚创建的实体的名称。acdbEntLast()acdbEntLast()acedCommandS()acedCommandC()acedCmdS()acedCmdC()acdbEntMake()

该函数通过在图形屏幕上指定一个点来提示 AutoCAD 用户选择一个图元;返回图元名称和指定点的值。某些实体操作需要了解选择实体的点。现有 AutoCAD 命令集中的示例包括中断、修剪、扩展和 OSNAP。acedEntSel()acedEntSel()


路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 13:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部