C# .net 通过NamedBoundaries如何创建SavedView
试试NamedView下的SetClipElement,这个函数的参数是NamedBoundaries那个ShapeElement
NamedView namedview = new NamedView(dgnFile, namedBoundary1.Name);namedview.SetClipElement(namedBoundary1.GraphicalElement);namedview.WriteToFile();
这样保存的SavedView,参考过去显示没有Element。
用mdlView_setClipBoundaryElement试了也没有Element。
你弄个新的文件,在原点附近画几个简单的图形去测试,弄这么复杂的模型去测试,非常不利于观察结果。
测试后,该方法仅对种子文件为2D的文件可以,对种子文件为3D的生成savedview,参考过来就什么都没有。
你按照程序里边的数据,手动操作一下看是否有效果。
手动操作用的named boundaries 里边右键creatdrawing,弹出对话框,选择后创建出来的是有东西的。
我用C++写了如下测试代码是可以的。你先仿照此C++代码用C#实现一下看。
void createSavedViewFromNamedBoundary(WCharCP) { NamedBoundaryPtr namedBdry = NamedBoundary::FindByName(WString(L"FooNamedBdary"), NULL, *ACTIVEMODEL); if (!namedBdry.IsValid()) { mdlDialog_dmsgsPrint(L"NamedBoundary::FindByName FAILED"); return; } DgnFileP dgnFile = ISessionMgr::GetActiveDgnFile(); NamedViewPtr namedView = nullptr; if (NamedViewStatus::Success != NamedView::Create(namedView, *dgnFile, L"MyNamedView")) { mdlDialog_dmsgsPrint(L"NamedView::Create FAILED"); return; } ViewGroupCollectionCR viewGrpCol = dgnFile->GetViewGroups(); ViewGroupCP activeViewGrp = viewGrpCol.GetActiveCP(); ViewInfoCR viewInfo = activeViewGrp->GetViewInfo(tcb->lstvw); ViewPortInfoCR viewPortInfo = activeViewGrp->GetViewPortInfo(tcb->lstvw); namedView->SetClipElement(namedBdry->PeekGraphicalElement()); namedView->SetViewInfo(viewInfo); namedView->SetViewPortInfo(viewPortInfo); namedView->SynchViewBoundaryWithClipVolume(ViewBoundarySynchOptions()); namedView->WriteToFile(); }
Answer Verified By: F T