Dgn文件所属WorkSpace设置


我们在Mstn中打开某个Dgn文件时有时会碰到如下所示的对话框:

尤其是当在Mstn打开查看那些由基于Mstn的垂直产品创建出来的Dgn文件时,这是因为我们的Dgn文件是被关联到某一个工作空间的,Dgn文件打开以后,Mstn会自动加载其关联的工作空间下的各种资源,例如文字样式、标注样式等等。当我们打开Dgn文件时,如果这个Dgn文件关联的工作空间,在当前使用的软件环境下没有配置的话,就会弹出上图所示的这个对话框。对话框中提供了两个选项,一种是我们可以使用当前激活的工作空间打开这个Dgn文件,另外一种是我们可以在无工作空间的状态下打开这个Dgn文件。前者的话,在打开Dgn文件以后,此Dgn文件就自动被关联到当前激活的这个工作空间了。而后者的话,则Dgn文件关联的工作空间不会发生变化。我们在代码中也可以直接设置指定Dgn文件与指定的工作空间关联,需要用到IDgnWorkSetInfo这个类型,如下所示:

我们可以通过其静态成员函数ExtractFromDgnFile来获取其对象实例。获取到其实例以后通过SetWorkSpaceName和SetName设置其工作空间以及工作集的名字,最后通过其Write成员函数就可以修改指定Dgn文件的工作空间的名字了。具体实现代码如下所示:

IDgnWorkSetInfoPtr iDgnWorkSetInfo= IDgnWorkSetInfo::ExtractFromDgnFile(*ISessionMgr::GetActiveDgnFile());
	DgnFileStatus dgnFileStatus; int defFileId = 0;
	DgnDocumentPtr dgnDoc = DgnDocument::CreateFromFileName(dgnFileStatus, L"D:\\test.dgn", L"D:\\", defFileId, DgnDocument::FetchMode::Write);
	DgnFilePtr dgnFile = DgnFile::Create(*dgnDoc, DgnFileOpenMode::ReadWrite);
	StatusInt openForWriteStatus;
	dgnFile->LoadDgnFile(&openForWriteStatus);
	iDgnWorkSetInfo->Write(*dgnFile);
	dgnFile->ProcessChanges(DgnSaveReason::FileClose);