删除项目参数
前言
最近遇见一个需求,需要删除项目中的项目参数和共享参数。查了Revit SDK,SDK提供了BindingMap这个类来移除共享参数,但是项目参数移除不了。查了很多资料,似乎api没有提供相关接口。于是只能将ParameterElement过滤出来在跟BindingMap里面绑定的参数去对比删除。
代码
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document _doc = commandData.Application.ActiveUIDocument.Document;
List<Definition> definitions = new List<Definition>();
using (BindingMap bindingMap = _doc.ParameterBindings)
{
DefinitionBindingMapIterator mapIterator = bindingMap.ForwardIterator();
List<ParameterElement> parametersDel = new List<ParameterElement>();
IEnumerable<ParameterElement> parameters = new FilteredElementCollector(_doc).OfClass(typeof(ParameterElement)).OfType<ParameterElement>();
using (Transaction trans = new Transaction(_doc, "RemoveParameters"))
{
trans.Start();
while (mapIterator.MoveNext())
{
if (mapIterator.Current is Binding binding)
{
definitions.Add(mapIterator.Key);
if (parameters.Any(p => p.Name == mapIterator.Key.Name))
{
parametersDel.Add(parameters.FirstOrDefault(p => p.Name == mapIterator.Key.Name));
}
}
}
try
{
_doc.Delete(parametersDel.Select(e => e.Id).ToArray());
}
catch (Exception e)
{
Trace.WriteLine(e.Message);
}
trans.Commit();
}
}
return Result.Succeeded;
}