实体数据函数和图形屏幕
实体数据函数对图形所做的更改将反映在图形屏幕上,前提是要删除、取消删除、修改或制作的实体位于某个区域中,并且位于当前可见的图层上。有一个例外:当修改子实体时,它不会更新整个(复杂)实体的图像。原因应该很清楚。例如,如果应用程序要修改复杂折线的 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 命令(带 或 )来重新生成图形,以确保块参照的所有实例都已更新。acdbEntUpd()acedCmdS()acedCommandS()
父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 22:22
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.