如图所示,在二维(或三维的某一ZY平面内)中绘制两个相互交叠图形,好像默认是后绘制的显示在前面。
在AutoCAD中,有一个绘图次序的功能,如图,可以调整平面交叠图形的相互遮挡关系。如果我再AutoCAD中设置好了这种关系,通过MS打开dwg,这种关系是会被保留的,因此我认为MS中的图形元素是具有叠放次序这一属性的。
因此请问,如何在MS中设置平面图形的叠放次序呢?
您说的这个概念在MS中叫显示优先级(Priority),作为元素的属性之一,可以试试看。
可是这个只在2D种子文件中生效啊~如果是3D的种子文件,这个是灰色的点不了,可是dwg文件导入以后是能保留在cad中的绘图次序的,这是怎么回事呢?我的需求是打开dwg,另存为dgn,然后对其中错误的叠放次序进行调整。
我没有修改FilePosition,而是调用了Bring to Front命令,导致的FilePosition变化
上图为对3个元素中其中一个元素调用Bring to Front命令之前,下图中的4001028为对上图中的FilePisition为4000141的元素使用了Bring to Front命令,使其FilePosition变成了整个model或者File中最大的值(个人猜测)。
终于找到了实现该功能的内部代码。和我前面说的完全一致,就是删除当前元素,将该元素附加到模型尾部:
UInt32 filePos = elementRef_getFilePos (tElDscrP->h.elementRef); mdlLocate_clear (); mdlElmdscr_undoableDelete (tElDscrP, filePos, false); /* and add it to the end of the file */ mdlElmdscr_add (tElDscrP); mdlElmdscr_display (tElDscrP, modelRef, DRAW_MODE_Normal);
tElDscrP中如果已经含有ElementId了,mdlElmdscr_add时可能就不再修改其Id了。所以,能保持ID不变。
这就很神奇~这会好像只有内部代码能够实现吧?如果我通过deletefrommodel删除一个元素,他的id就也被销毁了
不,我上面粘贴出的mdl函数都是公开的C函数,在C++代码中都是可以直接调用的。新封装的DeleteFromModel和AddToModel确实不具有这些老的C函数的能保持ElementID的特性。
好的~了解了!感谢!