关于使用C#给ORD的level分配材质的问题

各位老师好,我写了一个函数用来给创建的level分配材质:

但是实际运行发现并没有分配材质成功。经过调试发现获取到的materialid的elementid为一个很大的数字:

这是否表示获取材质失败?请问要如何解决?

Parents Reply Children
  • 对于从lib库中加载的材质需要先复制到当前文件中,才能设置成功,参考如下代码:

    LevelHandle lvlHandle= ISessionMgr::GetActiveDgnFile()->GetLevelCacheR().GetLevelByName(L"myLvl", true);
    	EditLevelHandle editLvlHandle(lvlHandle);
    	MaterialSearchStatus localSearchStatus;
    	MaterialList materials;
    	MaterialManager::GetManagerR().FindMaterialByNameFromAnySource(&localSearchStatus, materials, L"BC2 Exterior", *ACTIVEMODEL, true);
    	for (MaterialList::iterator iter = materials.begin(); iter != materials.end(); ++iter)
    	{
    		MaterialCP material = *iter;
    		MaterialId mateId1(*material);
    		MaterialPtr     newMaterial = Material::Create(*material, *ACTIVEMODEL);
    		PaletteInfoPtr  paletteInfo = PaletteInfo::Create(material->GetPalette().GetName().c_str(), ACTIVEMODEL->GetDgnFileP()->GetDocument().GetMoniker(), material->GetPalette().GetSource(), PaletteInfo::PALETTETYPE_Dgn);
    		newMaterial->GetPaletteR().Copy(*paletteInfo);
    		if (SUCCESS != MaterialManager::GetManagerR().SaveMaterial(&mateId1, *newMaterial, ACTIVEMODEL->GetDgnFileP()))
    		{
    			return;
    		}
    		LevelDefinitionMaterial lvlDefMate(mateId1.GetElementId(), material->GetModelRefR().GetDgnFileP());
    		editLvlHandle.SetByLevelMaterial(lvlDefMate);
    		LevelCacheErrorCode errorCode=	ISessionMgr::GetActiveDgnFile()->GetLevelCacheR().Write();
    	}

    Answer Verified By: fanghua wei 

  • 郭老师好,测试了下上述代码,运行没有问题,非常感谢~