Revit二次开发-清理未使用项
要想调用Api清理Revit文件中的未使用的项目,我翻阅了一些资料和文档,截至目前Api也没有直接开放相关接口。在偶然浏览Documnet类的成员的时候 发现了有几个Internal的方法是用来清理未使用项的,要想使用这些方法就只能反射来获取对应的方法去调用。

根据方法的签名就可以猜到每个方法的功能。
下面分享一个清理文档中未使用族的demo,清理其他类别的东西方法类似 我就不一一列举了。
[Transaction(TransactionMode.Manual)]
public class ClearUnusedCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var doc = commandData.Application.ActiveUIDocument.Document;
//反射获取对应的方法
var docType = doc.GetType();
var method = docType.GetMethod("GetUnusedFamilies", BindingFlags.NonPublic | BindingFlags.Instance);
if (method != null)
{
var unusedFamilyIds = method.Invoke(doc, null) as ISet<ElementId>;
using (var trans = new Transaction(doc, nameof(ClearUnusedCommand)))
{
trans.Start();
foreach (var id in unusedFamilyIds)
{
doc.Delete(id);
}
trans.Commit();
}
}
return Result.Succeeded;
}
}

浙公网安备 33010602011771号