マテリアルの管理

マテリアルの管理

フィルタを使用してドキュメント内のすべてのマテリアルを取得できます。ドキュメント内のすべてのマテリアルのオブジェクトは一意の名前で識別されます。

次の例は、マテリアル名を使用してマテリアルを取得する方法を表しています。

コード領域 19-5: 名前によってマテリアルを取得

FilteredElementCollector elementCollector = new FilteredElementCollector(document);
elementCollector.WherePasses(new ElementClassFilter(typeof(Material)));
IList<Element> materials = elementCollector.ToElements();
 
Material floorMaterial = null;
string floorMaterialName = "Default Floor";
   
foreach (Element materialElement in materials)
{
    Material material = materialElement as Material;
    if (floorMaterialName == material.Name)
    {
        floorMaterial = material;
        break;
    }
}
if (null != floorMaterial)
{
    TaskDialog.Show("Revit","Material found.");
}
注: サンプル コードを実行するには、マテリアル名がドキュメント内にあることを確認してください。現在のドキュメントのすべてのマテリアル名は[管理]タブ([プロジェクト設定]パネル
[マテリアル])の下にあります。

マテリアルを作成する

API には新しいマテリアルを作成する方法が 2 つあります。

  • 既存のマテリアルを複製する

  • 新しいマテリアルを追加します。

Duplicate()メソッドを使用する場合、返されるマテリアル オブジェクトは元のオブジェクトと同じタイプになります。

コード領域 19-6: マテリアルを複製

private bool DuplicateMaterial(Material material)
{
        bool duplicated = false;
        //try to duplicate a new instance of Material class using duplicate method
        //make sure the name of new material is unique in MaterailSet
        string newName = "new" + material.Name;
        Material myMaterial = material.Duplicate(newName);
        if (null == myMaterial)
        {
                TaskDialog.Show("Revit", "Failed to duplicate a material!");
        }
        else
        {
                duplicated = true;
        }
        
        return duplicated;
}

新しいマテリアルを直接追加するには、静的メソッド Material.Create()を使用します。適用方法に関係なく、マテリアルとマテリアルに属するすべてのアセットに一意の名前を指定する必要があります。一意の名前は、マテリアルのオブジェクト キーです。

コード領域 19-7: 新しいマテリアルを追加

//Create the material
ElementId materialId = Material.Create(document, "My Material");
Material material = document.GetElement(materialId) as Material;

//Create a new property set that can be used by this material
StructuralAsset strucAsset = new StructuralAsset("My Property Set", StructuralAssetClass.Concrete);
strucAsset.Behavior = StructuralBehavior.Isotropic;
strucAsset.Density = 232.0;
            
//Assign the property set to the material.
PropertySetElement pse = PropertySetElement.Create(document, strucAsset);
material.SetMaterialAspectByPropertySet(MaterialAspect.Structural, pse.Id);

マテリアルを削除する

マテリアルを削除するには、次のメソッドを使用します。

  • Document.Delete()

Document.Delete()は一般的なメソッドです。詳細は、「要素を編集する」を参照してください。