Loading

Loading

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;
        }
    }

 

posted @ 2022-06-13 22:08  热情定无变  阅读(330)  评论(0)    收藏  举报