材质加载


我们在Mstn中使用材质时,除了当前dgn文件中保存的材质以外还可以使用从dgnlib库中加载的材质。在使用dgnlib库中加载的材质时,需要先将材质拷贝到当前dgn文件中,才可以使用。如果我们是通过手工操作去使用材质时,并不需要刻意地去完成拷贝材质到当前dgn文件的操作,因为当我们在使用材质时,如果使用的材质是dgnlib库中的而且还没有拷贝到当前dgn文件中的话,后台会自动将其拷贝至当前dgn文件中。但是如果是在程序中使用dgnlib库中的材质时,就需要我们自己编写代码去完成这个拷贝的操作了。如果不先将材质从dgnlib库中拷贝至当前文件中的话,后续使用这个材质时很可能会失败或者说是无效。下面的代码演示了如何将dgblib库中读取到的材质复制到当前dgn文件中。

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 mateId(*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(&mateId, *newMaterial, ACTIVEMODEL->GetDgnFileP()))
		{
			return;
		}
	}