我在ORD中的二维放了一个具有特征定义的点,在三维里会生成一个单元,能不能我在二维里点显示的只是一个简单的图例而不是单元,三维里显示的是模型。
通过编程实现的话可以使用ViewCallback::SetSubstituteElemFunction设置一个回调函数,这个函数会在元素在视图绘制前被调用,相应的元素会被传递进来,您可以返回一个新的元素,这样视图里边就不再绘制原元素,而是绘制返回的新元素了。
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: ZhangFan
郭老师,能否提供一个简单的示例,演示如何使用。谢谢。
请问您具体是哪一步不知道如何实现?这个函数相对来说还是比较简单的
在回调函数内,如何修改元素,是否能用新的元素替换。谢谢,给个简单的示例就行:如根据输入的元素创建一个二维元素。谢谢。
SubstituteElemStatus MyViewFunc_SubstituteElem ( MSElementDescrH newElem, // <= output if element being replaced ViewportP viewport, DgnPlatform::DrawPurpose purpose, ViewContextP context, ElementHandleCP elem // => current element ) { if (elem->GetElementType()== ELLIPSE_ELM) { CurveVectorPtr cvevec = ICurvePathQuery::ElementToCurveVector(*elem); DEllipse3d elli; cvevec->at(0)->TryGetArc(elli); DgnSphereDetail dgnSphere(elli.center, DPoint3d::FromZero().Distance(elli.vector0)); ISolidPrimitivePtr iSolidPtr = ISolidPrimitive::CreateDgnSphere(dgnSphere); EditElementHandle eeh; DraftingElementSchema::ToElement(eeh, *iSolidPtr, NULL, *ACTIVEMODEL); *newElem = eeh.ExtractElementDescr(); } return SubstituteElemStatus::SUBSTELEM_STATUS_Normal; }