CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

实体数据功能和图形屏幕

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

实体数据功能对图形所做的更改将反映在图形屏幕上,前提是要删除、取消删除、修改或进行的实体位于某个区域中并且位于当前可见的图层上。有一个例外:修改子实体时,它不会更新整个(复杂)实体的图像。原因应该很清楚。例如,如果应用程序要修改复杂折线的 100 个顶点,并调用 100 次迭代,则在每个顶点更改时重新计算和重新显示整个折线所需的时间将慢得令人无法接受。相反,应用程序可以执行一系列子实体修改,然后通过对函数的单个调用重新显示整个实体。acdbEntMod()acdbEntMod()acdbEntUpd()

在下面的示例中,当前图形中的第一个图元是具有多个顶点的折线。下面的代码修改折线的第二个顶点,然后重新生成其屏幕图像。

ads_name e1, e2; 
struct resbuf *ed, *cb; 
if (acdbEntNext(NULL, e1) != RTNORM) { 
    acutPrintf("\nNo entities found.  Empty drawing."); 
    return BAD; 
}
acdbEntNext(e1, e2); 
if ((ed = acdbEntGet(e2)) != NULL) { 
    for (cb = ed; cb != NULL; cb = cb->rbnext) 
        if (cb->restype == 10) { // Start point DXF code
            cb->resval.rpoint[X] = 1.0;// Change coordinates.
            cb->resval.rpoint[Y] = 2.0; 
            if (acdbEntMod(ed) != RTNORM) { // Move vertex.
                acutPrintf("\nBad vertex modification."); 
                acutRelRb(ed); 
                return BAD; 
            } else { 
                acdbEntUpd(e1); // Regen the polyline.
                acutRelRb(ed); 
                return GOOD; // Indicate success.
            } 
        } 
    acutRelRb(ed); 
} 
return BAD; // Indicate failure.

参数 to 可以指定主实体或子实体;在任一情况下,都会重新生成整个实体。虽然它的主要用途是复杂图元,但可以再生当前图形中的任何图元。acdbEntUpd()acdbEntUpd()acdbEntUpd()

注意:如果修改后的实体在块定义中,则函数是不够的。必须通过调用 AutoCAD REGEN 命令 (withor) 来再生图形,以确保块参照的所有实例都已更新。acdbEntUpd()acedCmdS()acedCommandS()

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2024-5-19 15:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部