删除门窗改洞口

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace chaunggaidong
{
    [Transaction(TransactionMode.Manual)]
    public class Class1 : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document doc = uiDoc.Document;
            //根据楼层选择门窗;
            //做一个标高收集器,收集标高后将某一项作为案例的标高,再做门窗的过滤器收集门窗,并根据标高过滤器筛选特定的标高
            //下面开始做标高收集器
            FilteredElementCollector levelcollector = new FilteredElementCollector(doc);
            IList<ElementId> levelID = levelcollector.OfClass(typeof(Level)).ToElementIds().ToList();
            Level level = doc.GetElement(levelID[0]) as Level;
            //创建一个标高过滤器
            ElementLevelFilter levelFilter = new ElementLevelFilter(level.Id);
            //做一个过滤器收集门窗
            FilteredElementCollector eleFilter = new FilteredElementCollector(doc);
            //做一个门窗过滤器
            ElementCategoryFilter windowsFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
            ElementCategoryFilter doorFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
            LogicalOrFilter logicalOrFilter = new LogicalOrFilter(windowsFilter, doorFilter);
            //收集门窗,并用族实例来剔除上面过滤器里面族类型的内容
            List<Element> col = eleFilter.WherePasses(logicalOrFilter).OfClass(typeof(FamilyInstance)).ToList();
            //获得门窗的几何数据
            Options options = new Options();
            Transaction transaction = new Transaction(doc, "创建洞口");
            transaction.Start();
            foreach (Element element in col)
            {
                GeometryElement geometry = element.get_Geometry(options);
                BoundingBoxXYZ boundingBoxXYZ = geometry.GetBoundingBox();
                FamilyInstance familyInstance = element as FamilyInstance;
                Wall wall = familyInstance.Host as Wall;
                Opening opening = doc.Create.NewOpening(wall, boundingBoxXYZ.Min, boundingBoxXYZ.Max);
                doc.Delete(element.Id);
            }
            transaction.Commit();
            return Result.Succeeded;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/waiting233/article/details/116746050