我们在视图中可以通过设置不同的显示样式来调整视图中模型的显示效果,显示样式中包含了很多设置可以影响视图中模型的显示效果。例如渲染模式,可以是线框模式,可见边模式等等。那么我们如何通过编程来修改这些设置的值呢?在Mstn SDK中提供了DisplayStyleManager类型可以获取dgn文件中的显示样式,如下所示:
通过函数原型可以看到这些函数返回的类型中都带了“const”修饰符,如下所示:
“const”表示常量的意思,如果我们直接通过这些函数返回的指针去设置显示样式的属性值的话,可能在当前Mstn进程中可以看到修改成功了,但是如果我们退出Mstn,再重新打开dgn文件的话会发现我们先前的修改都会无效。那么该如何避免这个问题呢?我们需要先通过DisplayStyle下的“Clone”函数将要修改的DisplayStyle实例拷贝出一个新的实例,然后对新拷贝出的实例做修改,最后调用DisplayStyleManager下的WriteDisplayStyleToFile函数将修改的内容写回dgn文件即可。需要注意的一点是,“Clone”函数有多个重载形式,如下所示:
我们要调用第一个无参的这个重载函数,如果我们调用后两个重载函数并且指定了不同的dgn我呢见或者给了一个新的名字的话,在保存修改时,可能会造成新增加了显示样式,而不是修改已有的显示样式。具体实现代码如下所示:
DgnFileR dgnFile = *ISessionMgr::GetActiveDgnFile(); DisplayStylePtr pds = DisplayStyleManager::FindDisplayStyleByName(L"MyDisStyle", &dgnFile)->Clone(); DisplayRuleSetCP displayRuleSetCP = DisplayRulesManager::GetDisplayRuleSetByName(L"MyRule", dgnFile); DisplayRulesManager::SetDisplayRuleSetToDisplayStyle(*displayRuleSetCP, *pds); DisplayStyleManager::WriteDisplayStyleToFile(*pds, dgnFile);