//---------------------------------------------------------- public static void set_appearance_asset(Document doc, Material material) { try { var asset = new FilteredElementCollector(doc).OfClass(typeof(AppearanceAssetElement)).First(x => x.Name == "Generic"); AppearanceAssetElement assetElem = asset as AppearanceAssetElement; AppearanceAssetElement assetElemNew = assetElem.Duplicate(material.Name + DateTime.Now.ToString("ddMMyyHHmmss")); AppearanceAssetEditScope editScope = new AppearanceAssetEditScope(doc); Asset editableAsset = editScope.Start(assetElemNew.Id); AssetPropertyDoubleArray4d genericDiffuseProperty = editableAsset.FindByName("generic_diffuse") as AssetPropertyDoubleArray4d; genericDiffuseProperty.SetValueAsColor(material.Color); AssetPropertyDouble genericTransparency = editableAsset.FindByName("generic_transparency") as AssetPropertyDouble; genericTransparency.Value = Convert.ToDouble(material.Transparency) / 100; editScope.Commit(true); material.AppearanceAssetId = assetElemNew.Id; } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//---------------------------------------------------------- public void SetColorAppearanceAsset(Document doc, Material material) { try { var list = new FilteredElementCollector(doc).OfClass(typeof(AppearanceAssetElement)).ToList(); List <string> name = new List <string>(); foreach (AppearanceAssetElement e in list) { name.Add(e.Name); } string newName = ""; for (var i = 0; i < 10000000; i++) { if (name.Any(x => x == material.Name + "(" + i.ToString() + ")") == false) { newName = material.Name + "(" + i.ToString() + ")"; break; } } AppearanceAssetElement assetElem = list[0] as AppearanceAssetElement; AppearanceAssetElement assetElemNew = assetElem.Duplicate(newName); AppearanceAssetEditScope editScope = new AppearanceAssetEditScope(doc); Asset editableAsset = editScope.Start(assetElemNew.Id); AssetPropertyDoubleArray4d genericDiffuseProperty = editableAsset["generic_diffuse"] as AssetPropertyDoubleArray4d; genericDiffuseProperty.SetValueAsColor(material.Color); AssetPropertyDouble genericTransparency = editableAsset["generic_transparency"] as AssetPropertyDouble; genericTransparency.Value = Convert.ToDouble(material.Transparency) / 100; editScope.Commit(true); material.AppearanceAssetId = assetElemNew.Id; } catch (Exception ex) { MessageBox.Show(ex.Message); } }