Кто-нибудь знает, как программно создать материал Revit и добавить текстуру из файла?
Сейчас я делаю небольшой грязный хак, где я ищу "Землю", которая является стандартной, и изменяюпуть к текстуре с помощью AssetProperty. Основная проблема с этим решением - ситуация, когда у меня нет этого материала в проекте: P
Я знаю только, как создать цветную текстуру:
static public Material CreateColorMaterial(Document doc, Color color, string name, bool isTransparency = false)
{
SubTransaction createMaterial = new SubTransaction(doc);
createMaterial.Start();
//Try to copy an existing material. If it is not available, create a new one.
Material materialNew = GetMaterial(name, doc);
if (materialNew != null)
{
createMaterial.Commit();
return materialNew;
}
ElementId idNew = Material.Create(doc, name);
materialNew = doc.GetElement(idNew) as Material;
if(isTransparency)
materialNew.Transparency = 99;
materialNew.Color = color;
createMaterial.Commit();
SubTransaction createPropertySets = new SubTransaction(doc);
createPropertySets.Start();
//Create a new structural asset and set properties on it.
StructuralAsset structuralAsssetColor = new StructuralAsset("ColorStructuralAsset" + name, Autodesk.Revit.DB.StructuralAssetClass.Generic);
structuralAsssetColor.DampingRatio = .5;
PropertySetElement pseStructural = PropertySetElement.Create(doc, structuralAsssetColor);
//Create a new thermal asset and set properties on it.
ThermalAsset thermalAssetColor = new ThermalAsset("ColorThermalAsset" + name, Autodesk.Revit.DB.ThermalMaterialType.Solid);
thermalAssetColor.Porosity = 0.1;
thermalAssetColor.Permeability = 0.2;
thermalAssetColor.Compressibility = .5;
thermalAssetColor.ThermalConductivity = .5;
//Create PropertySets from assets and assign them to the material.
PropertySetElement pseThermal = PropertySetElement.Create(doc, thermalAssetColor);
createPropertySets.Commit();
SubTransaction setPropertySets = new SubTransaction(doc);
setPropertySets.Start();
materialNew.SetMaterialAspectByPropertySet(MaterialAspect.Structural, pseStructural.Id);
materialNew.SetMaterialAspectByPropertySet(MaterialAspect.Thermal, pseThermal.Id);
setPropertySets.Commit();
return materialNew;
}