在3d model中,可以通过设置“显示样式”中的“隐藏边”来实现被遮挡实体边的虚线显示,如下图
那么是否有办法将这种显示效果体现在2d的model中呢,比如说在2d model中创建一个三维物体的轴测图,其中被遮挡的边界是虚线显示。如果有,如何通过代码来实现?
导出可见边功能应该能满足您这个需求。编程的话,需要调用VisbleEdgesLib下的ProcessElements
这个函数有些复杂,符老师能提供一个例子吗
参考如下代码:
struct MyElementOutputProcessor: VisibleEdgesLib::ElementOutputProcessor { //! This method is called for each element after processing the view or elements. StatusInt _ProcessOutput(EditElementHandleR eh3d, EditElementHandleP eh2d, DgnModelRefP modelRef, bool isVisible, bool isEdge, ViewContextR viewContext)override { eh3d.AddToModel(); return SUCCESS; } virtual StatusInt _ProcessAnnotation(EditElementHandleR eh3d, EditElementHandleP eh2d, DgnModelRefP modelRef, ViewContextR viewContext)override { eh3d.AddToModel(); return SUCCESS; } //! Return true to get the handle of 2D element in _ProcessOutput() otherwise false. virtual bool _DoCreate2dElement() { return false; } }; // ElementOutputProcessor void TestVisibleEdgesLib() { ElementAgenda selectset; SelectionSetManager::GetManager().BuildAgenda(selectset); if (!selectset.GetCount()) { return; } ElementPropertiesSetterPtr elePropSet = ElementPropertiesSetter::Create(); EditElementHandleR eeh = selectset.at(0); elePropSet->SetColor(0); elePropSet->Apply(eeh); MSElementDescrP elmdscr = NULL; mdlElmdscr_duplicate(&elmdscr, selectset[0].GetElementDescrCP()); for (size_t i = 1; i < selectset.GetCount(); i++) { EditElementHandleR eehCur = selectset.at(i); elePropSet->SetColor((UInt32)i); elePropSet->Apply(eehCur); MSElementDescrP curElmdscr = NULL; mdlElmdscr_duplicate(&curElmdscr, eehCur.GetElementDescrCP()); mdlElmdscr_addToChain(elmdscr, curElmdscr); } MyElementOutputProcessor myProcessor; VisibleEdgesLib::ProcessElements(myProcessor, elmdscr, mdlView_getViewport(tcb->lstvw), 0, true, 0, 10); mdlElmdscr_freeAll(&elmdscr); }
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: Hu Zhengyang
验证可行,谢谢
在3dmodel中测试的上述代码,发现可行。我切换到了2dmodel后,就遇到问题了。由于隐藏边界的显示设置在2dmodel中是无效的,因此我必须在另一个3dmodel中进行实体元素的创建以及边界导出,那么这种情况下我应该如何设置ProcessElements函数中的viewport呢