在模板计算功能中用到了选择集SelectionFilterElement。记录下使用方法。
1、添加操作。摘自sdk using (Transaction t = new Transaction(doc, "Create SelectionFilterElement")) { t.Start(); // Create selection filter and assign ids SelectionFilterElement filterElement = SelectionFilterElement.Create(doc, setName); filterElement.SetElementIds(eleIDs); ElementId filterId = filterElement.Id; // Add the filter to the view view.AddFilter(filterId); doc.Regenerate(); // Use the existing graphics settings, and change the color to Blue OverrideGraphicSettings overrideSettings = view.GetFilterOverrides(filterId); overrideSettings.SetProjectionLineColor(new Color(0x00, 0x00, 0xFF)); view.SetFilterOverrides(filterId, overrideSettings); t.Commit(); } 2、删除操作。先尝试了view.RemoveFilter(id),不报错,但是revit中选择集仍然可以用,没有删除效果。
第二次测试了doc.Delete(id);实现了预期效果。
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; View view = uidoc.ActiveView; using (Transaction tr = new Transaction(doc, "delete set")) { //var sk = view.GetFilters(); tr.Start(); foreach (ElementId id in view.GetFilters()) { //SelectionFilterElement eleSet = (SelectionFilterElement)doc.GetElement(id); string setName = doc.GetElement(id).Name; try { //如果是需要模板的元素集合,就删了。 //如果集合名称能转为id,就删了 if (setName == MProperty.mubanSet) { doc.Delete(id);//view.RemoveFilter(id);view删不干净 } else { ElementId eleID = new ElementId(Convert.ToInt32(setName));//用能不能转换成功检验选择集名称是否合规 SelectionFilterElement eleSet = (SelectionFilterElement)doc.GetElement(id); doc.Delete(eleSet.GetElementIds()); doc.Delete(id); } } catch { } } //var dk= view.GetFilters(); //doc.Regenerate(); tr.Commit(); } return Result.Succeeded; }