|
楼主 |
发表于 2024-3-16 09:32:09
|
显示全部楼层
当修改实体的绘制顺序时, 可以修改sortents表中的许多条目。例如, 块表记录具有五个具有以下句柄的实体(通常表示为表示十六进制数字的字符串):4A, 4B, 4C, 4D, 4E。这些句柄按升序显示。当应用程序在默认方向上迭代块表记录中的实体时, 句柄值总是从一个实体增加到next实体。
要先在空间中绘制最后一个实体(或“后面”其他实体), 必须在sortents表中创建五个条目, 如下所示:
实体ID
绘制订单处理
4E
4A
4A
4B
4B
4C
4C
4D
4D
4E
条目的顺序(表示为上表中的一行)无关紧要; 绘制订单处理在执行绘制时最终通过绘制顺序句柄对条目进行排序。换句话说, 在DXF文件中, 表条目可能按以下顺序出现, 但结果绘制顺序是相同的:
实体ID
绘制订单处理
4C
4D
4B
4C
4E
4A
4D
4E
4A
4B
作为另一示例, 空间中的最后一个实体在空间中的倒数第二个实体“下”移动, 但其余实体以“自然”顺序绘制。在这种情况下, sortents表只需要两个条目, 如下所示:
实体ID
绘制订单处理
4E
4D
4D
4E
使用隐式绘制顺序“last”将新实体添加到块表记录中不需要sortents表中的新条目。
1.2、成员方法
Acad::ErrorStatus moveToBottom( const AcDbObjectIdArray& ar);
将输入对象ID数组中指定的所有实体放置在绘制顺序的开头。被移动的实体保留其相对绘制顺序。
返回eInvalidInput如果任何输入对象ID不在相关的块, 或eDuplicateKey如果任何对象ID输入数组中出现两次。
2、代码实现
如果你要调整块内的显示顺序,就是获得AcDbBlockTableRecord的扩展辞典里面的ACAD采用SORTENTS,执行完参数后记得CLOSE返回的对象。
打开块时要先以块参照AcDbBlockReference对象打开,然后用AcDbBlockReference::blockTableRecord()获取块表记录blockTableRecordId,用这个blockTableRecordId打开才是块表记录,直接用块blkid打开块,将返回eNullObjectId错误。详见Arx遍历块内实体采用阿达和自己的博客-CSDN博客
- 原文链接:https://blog.csdn.net/qq采用28742901/article/details/122229778
复制代码 |
|