NamedView(SavedView)关联Clip


我们在Mstn中出图时,通常是要在三维模型中使用Clip元素(如ClipVolumeNamedBoundary等)对模型做一个剪切,然后创建SavedView,最后创建一个Sheet Model,将刚刚创建的SavedView参考到新创建的Sheet Model中。创建的SavedView通常是与一个Clip元素关联起来的,这样在Sheet Model中参考了SavedView以后,看到的就是模型剪切后的效果,我们也可以设置Clip各个部分(ForwardBackCutOutside)的显示样式等。那么我们如何通过程序创建SavedView使之与指定的Clip元素关联呢?Mstn SDKNamedView类型代表了Mstn中的SavedView,在NamedView下有一个SetViewInfo成员函数,如下所示:

-

ViewInfo下有一个SetDynamicViewSettings成员函数,如下所示:

这个函数的参数类型为DynamicViewSettingsR,DynamicViewSettings下有一个SetClipBoundElementId成员函数可以设置新创建的NamedView关联的Clip元素,而且在DynamicViewSettings还有如下所示的成员变量可以设置Clip各个部分的显示设置。

我们以NamedBoundary为例,给大家演示具体如实现创建一个跟Clip元素关联的SavedView,如下代码所示:

ElementAgenda eleAgen;
	SelectionSetManager::GetManager().BuildAgenda(eleAgen);
	if (eleAgen.GetCount() < 1)
		return;
	EditElementHandleR eeh = eleAgen[0];
	NamedBoundaryPtr namedptr = NamedBoundary::Create();
	namedptr->SetModelRef(ACTIVEMODEL);
	namedptr->SetName(L"Untitled-1");
	namedptr->SetDrawingScale(1.0);
	namedptr->SetGraphicalElement(eeh);
	namedptr->Save();
	NamedBoundaryGroupPtr boundarygrop = NamedBoundaryGroup::Create(*ISessionMgr::GetActiveDgnModelP(), WString(L"NamedGroupTest"), WString(L""));
	boundarygrop->InsertBoundary(namedptr);
	boundarygrop->WriteToFile();
	DgnFileP dgnFile = ISessionMgr::GetActiveDgnFile();
	NamedViewPtr namedView = nullptr;
	NamedViewCollectionCR nvCollect = ISessionMgr::GetActiveDgnFile()->GetNamedViews();
	namedView = nvCollect.FindByName(L"Untitled-1", false);
	if (namedView != NULL)
	{
		namedView->DeleteFromFile();
	}
	if (NamedViewStatus::Success != NamedView::Create(namedView, *dgnFile, L"Untitled-1"))
	{
		return;
	}
	ViewGroupCollectionCR viewGrpCol = dgnFile->GetViewGroups();
	ViewGroupP activeViewGrp = viewGrpCol.GetActiveP();
	ViewInfoR viewInfo = activeViewGrp->GetViewInfoR(tcb->lstvw);
	DynamicViewSettingsR dvSetting = viewInfo.GetDynamicViewSettingsR();
	dvSetting.SetClipBoundElementId(eeh.GetElementId());
	viewInfo.SetDynamicViewSettings(dvSetting);
	ViewPortInfoCR viewPortInfo = activeViewGrp->GetViewPortInfo(tcb->lstvw);
	namedView->SetViewInfo(viewInfo);
	namedView->SetViewPortInfo(viewPortInfo);
	namedView->SynchViewBoundaryWithClipVolume(ViewBoundarySynchOptions());
	namedView->WriteToFile();