EditLevelHandle elh = levelCache.CreateLevel((m_levelName).c_str(), levelCache.GetHighestUsedLevelCode() + 1, levelID); LsEntryCP lsDef = dgnfile->GetLineStyleMapP()->GetLineStyleEntry(m_Linestyle); if (lsDef != NULL) { elh.SetByLevelLineStyle(*lsDef, NULL, *dgnfile); } levelCache.Write();
想通过上述代码新建一个图层并设置该图层的线型,但是不成功。调试发现每次都是因为LsEntryCP为空指针导致,但是我输入的值都是有效值,诸如2、3。请问这是什么原因?
GetLineStyleEntry的参数似乎不是随便一个数值就可以,请参考这个帖子: 请教一下各位老师EditLevelHandle的成员函数SetByLevelLineStyle这个函数的前两个参数该如何获取呢
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
我试了下遍历LsDgnFileMap ,但是发现map中没有任何成员,请问这是为何?
DgnFileP dgnfile = ISessionMgr::GetActiveDgnFile(); LsDgnFileMapP map = dgnfile->GetLineStyleMapP(); for (LsMapIterator it = map->begin(); it != map->end(); ++it) { Int32 lsNum = it->GetStyleNumber(); WString name = it->GetStyleName(); wprintf(L"lsNum=%d,name=%s\n",lsNum,name.GetWCharCP()); }
还是用这篇帖子里边的方法吧: [MSCE C++] 设置层线型问题
感觉LsEntry似乎是只能用于自定义线型。
Answer Verified By: Hu Zhengyang
mdlLevel_setSymbology似乎是同时设置颜色线型线宽,在另一个帖子里找到了只设置线型的mdlLevel_setElementStyle,成功了