Revit API をご利用いただいているデベロッパーの皆様からのこれまでのお問い合わせの中から、開発のヒントやアイデアとなる情報をご紹介します。
Revit には、未使用のビュー、ファミリ、その他のオブジェクトをプロジェクトから削除する[未使用の項目を削除]コマンドがあります。
これにより、ファイルサイズを節約し、Revit プロジェクトのパフォーマンスを向上させることができます。


これまで、Revit API ではこの機能はサポートされておりませんでしたが、Revit 2024 API にて、同等の機能を API でも実現できるようになっております。
Autodesk.Revit.DB.Document に追加されたメソッドにより、未使用要素を取得できるようになりました。これらのメソッドは、Revit の[未使用の項目を削除]コマンドで使用可能な未使用要素の ElementId を返します。
- Autodesk.Revit.DB.Document.GetUnusedElements() – ドキュメントから削除可能な未使用要素 ID のリストを返します。
- Autodesk.Revit.DB.Document.GetAllUnusedElements() – Revit が最後のインスタンスを削除できない可能性がある要素も含め、未使用要素 ID のリストを返します。
両メソッドの違いですが、特定のカテゴリでは、たとえプロジェクトで「使用中」でなくとも、ドキュメント内に少なくとも1つのタイプを残しておく必要がある要素もあります。
GetUnusedElements() は、そのようなケースに該当する場合に1つを自動的に確保します。GetAllUnusedElements() は完全なリストを返し、保持する要素を選択できるようにします。
未使用な要素を取得できれば、Document.Delete() メソッドで削除します。
public void DeleteAllUnused(Autodesk.Revit.DB.Document document)
{
using (Transaction transaction = new Transaction(document, "Delete unused elements"))
{
transaction.Start();
ISet<ElementId> unusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());
while (unusedElementIds.Any())
{
document.Delete(unusedElementIds);
unusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());
}
transaction.Commit();
}
}
public void GetUnusedElements(Autodesk.Revit.DB.Document document)
{
// Get all unused elements in the document
var allUnusedElementIds = document.GetUnusedElements(new HashSet<ElementId>());
// Get unused elements without a category
var unusedElementIdsWithNoCategory = document.GetUnusedElements(new HashSet<ElementId>() { new ElementId(BuiltInCategory.INVALID) });
// Get unused wall and floors types
HashSet<ElementId> categoriesToPurge = new HashSet<ElementId>
{
new ElementId(BuiltInCategory.OST_Walls),
new ElementId(BuiltInCategory.OST_Floors)
};
var unusedElementIds = document.GetUnusedElements(categoriesToPurge);
}
ぜひお試しください。

Leave a Reply